WP Featherlight – A Simple jQuery Lightbox - Version 1.0.0

Version Description

Even though this is a major version change, this is primarily a maintenance release. The reason for the jump to 1.0.0 is because we've changed some code which could break backwards compatibility with custom extensions and integrations.

If you're just using the plugin on your site and haven't customized it or paid anyone to customize it for you, you should be able to update without any issues.

If you're a developer and have written custom code extending the PHP side of WP Featherlight, be sure to test your code before updating.

Under the hood, we've deprecated some internal methods which could potentially break custom code which extends WP Featherlight. The changes are primarily limited to class initialization, so unless you were doing something specific to that, it's unlikely that you'll run into issues.

  • Tweak: Improved transition between images within galleries
  • Tweak: Moved our disable lightbox checkbox into the publish meta box to streamline the admin
  • Tweak: Made styles more aggressive to ensure elements look consistent across different themes by default
  • Fix: Reduced false positives for URLs that use image extensions but don't actually link to an image
  • Dev: Updated Featherlight to 1.5.1
  • Dev: Updated jQuery Detect Swipe to 2.1.3
  • Dev: Deprecated some internal methods
  • Dev: Reorganized how classes are instantiated and plugin actions are fired

View the full changelog on GitHub

Download this release

Release Info

Developer wpsitecare
Plugin Icon wp plugin WP Featherlight – A Simple jQuery Lightbox
Version 1.0.0
Comparing to
See all releases

Code changes from version 0.3.0 to 1.0.0

admin/class-meta.php CHANGED
@@ -3,17 +3,17 @@
3
  * Methods used for adding and saving meta data for WP Featherlight.
4
  *
5
  * @package WPFeatherlight\Admin
6
- * @author Robert Neu
7
- * @copyright Copyright (c) 2015, WP Site Care
8
  * @license GPL-2.0+
9
  * @since 0.1.0
10
  */
11
 
12
- // Prevent direct access.
13
- defined( 'ABSPATH' ) || exit;
14
-
 
 
15
  class WP_Featherlight_Admin_Meta {
16
-
17
  /**
18
  * Name for the nonce field
19
  *
@@ -28,49 +28,19 @@ class WP_Featherlight_Admin_Meta {
28
  */
29
  private $nonce_action = 'save_wp_featherlight_metabox';
30
 
31
- /**
32
- * User submitted data.
33
- *
34
- * @var array
35
- */
36
- private $user_data = array();
37
-
38
- /**
39
- * Get the class running!
40
- *
41
- * @since 0.1.0
42
- * @access public
43
- * @return void
44
- */
45
- public function run() {
46
- $this->wp_hooks();
47
- }
48
-
49
- /**
50
- * Hook into WordPress.
51
- *
52
- * @since 0.1.0
53
- * @access protected
54
- * @return void
55
- */
56
- protected function wp_hooks() {
57
- add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
58
-
59
- if ( 'POST' === $_SERVER['REQUEST_METHOD'] ) {
60
- $this->user_data = $_POST;
61
- add_action( 'save_post', array( $this, 'save_meta_boxes' ) );
62
- }
63
- }
64
-
65
  /**
66
  * Determine if the request to save data should be allowed to proceed.
67
  *
68
- * @since 0.3.0
69
  * @access protected
70
  * @param int $post_id Post ID.
71
  * @return bool Whether or not this is a valid request to save our data.
72
  */
73
  protected function validate_request( $post_id ) {
 
 
 
 
74
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
75
  return false;
76
  }
@@ -87,19 +57,62 @@ class WP_Featherlight_Admin_Meta {
87
  return false;
88
  }
89
 
90
- if ( ! isset( $this->user_data[ $this->nonce_name ] ) ) {
91
  return false;
92
  }
93
 
94
- if ( ! wp_verify_nonce( $this->user_data[ $this->nonce_name ], $this->nonce_action ) ) {
95
  return false;
96
  }
 
97
  // @link http://make.marketpress.com/multilingualpress/2014/10/how-to-disable-broken-save_post-callbacks/
98
  if ( is_multisite() && ms_is_switched() ) {
99
  return false;
100
  }
101
 
102
- return true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  }
104
 
105
  /**
@@ -111,50 +124,33 @@ class WP_Featherlight_Admin_Meta {
111
  * @return void
112
  */
113
  public function add_meta_boxes( $post_type ) {
114
- $type = get_post_type_object( $post_type );
115
- if ( is_object( $type ) && $type->public ) {
116
- add_meta_box(
117
- 'wp_featherlight_options',
118
- __( 'WP Featherlight Options', 'wp-featherlight' ),
119
- array( $this, 'options_callback' ),
120
- null,
121
- 'side'
122
- );
123
- }
124
  }
125
 
126
  /**
127
  * Output the content of our metabox.
128
  *
129
- * @since 0.1.0
130
  * @access public
131
  *
132
- * @param \WP_Post $post Post object.
133
  * @return void
134
  */
135
  public function options_callback( WP_Post $post ) {
136
- wp_featherlight()->i18n->load();
137
- $disable = get_post_meta( $post->ID, 'wp_featherlight_disable', true );
138
- $checked = empty( $disable ) ? '' : $disable;
139
- require_once wp_featherlight()->get_dir() . 'admin/templates/metabox-sidebar.php';
140
  }
141
 
142
  /**
143
- * Callback function for saving our meta box data.
144
  *
145
  * @since 0.1.0
 
146
  * @access public
147
- * @param int $post_id Post ID.
148
- * @return bool Whether or not data has been saved.
149
  */
150
- public function save_meta_boxes( $post_id ) {
151
- if ( ! $this->validate_request( $post_id ) ) {
152
- return false;
153
- }
154
-
155
- $value = isset( $this->user_data['wp_featherlight_disable'] ) ? 'yes' : '';
156
-
157
- return (bool) update_post_meta( $post_id, 'wp_featherlight_disable', $value );
158
  }
159
-
160
  }
3
  * Methods used for adding and saving meta data for WP Featherlight.
4
  *
5
  * @package WPFeatherlight\Admin
6
+ * @copyright Copyright (c) 2016, WP Site Care
 
7
  * @license GPL-2.0+
8
  * @since 0.1.0
9
  */
10
 
11
+ /**
12
+ * The main featherlight admin meta box and related methods.
13
+ *
14
+ * @since 0.1.0
15
+ */
16
  class WP_Featherlight_Admin_Meta {
 
17
  /**
18
  * Name for the nonce field
19
  *
28
  */
29
  private $nonce_action = 'save_wp_featherlight_metabox';
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  /**
32
  * Determine if the request to save data should be allowed to proceed.
33
  *
34
+ * @since 1.0.0
35
  * @access protected
36
  * @param int $post_id Post ID.
37
  * @return bool Whether or not this is a valid request to save our data.
38
  */
39
  protected function validate_request( $post_id ) {
40
+ if ( 'POST' !== $_SERVER['REQUEST_METHOD'] ) { // Input var okay.
41
+ return false;
42
+ }
43
+
44
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
45
  return false;
46
  }
57
  return false;
58
  }
59
 
60
+ if ( ! isset( $_POST[ $this->nonce_name ] ) ) { // Input var okay.
61
  return false;
62
  }
63
 
64
+ if ( ! wp_verify_nonce( sanitize_key( $_POST[ $this->nonce_name ] ), $this->nonce_action ) ) { // Input var okay.
65
  return false;
66
  }
67
+
68
  // @link http://make.marketpress.com/multilingualpress/2014/10/how-to-disable-broken-save_post-callbacks/
69
  if ( is_multisite() && ms_is_switched() ) {
70
  return false;
71
  }
72
 
73
+ return wp_unslash( $_POST ); // Input var okay.
74
+ }
75
+
76
+ /**
77
+ * Output the content of our metabox.
78
+ *
79
+ * @since 1.0.0
80
+ * @access public
81
+ *
82
+ * @param WP_Post $post Post object.
83
+ * @return void
84
+ */
85
+ public function meta_box_view( WP_Post $post ) {
86
+ $type = get_post_type_object( $post->post_type );
87
+
88
+ if ( ! is_object( $type ) ) {
89
+ return;
90
+ }
91
+
92
+ if ( current_user_can( $type->cap->edit_post, $post->ID ) && $type->public ) {
93
+ $disable = get_post_meta( $post->ID, 'wp_featherlight_disable', true );
94
+ $checked = empty( $disable ) ? '' : $disable;
95
+
96
+ require_once wp_featherlight()->get_dir() . 'admin/views/meta-box.php';
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Callback function for saving our meta box data.
102
+ *
103
+ * @since 1.0.0
104
+ * @access public
105
+ * @param int $post_id Post ID.
106
+ * @return bool Whether or not data has been saved.
107
+ */
108
+ public function save_meta_boxes( $post_id ) {
109
+ if ( ! $valid_request = $this->validate_request( $post_id ) ) {
110
+ return false;
111
+ }
112
+
113
+ $value = isset( $valid_request['wp_featherlight_disable'] ) ? 'yes' : '';
114
+
115
+ return (bool) update_post_meta( $post_id, 'wp_featherlight_disable', $value );
116
  }
117
 
118
  /**
124
  * @return void
125
  */
126
  public function add_meta_boxes( $post_type ) {
127
+ _deprecated_function( __METHOD__, '1.0.0' );
 
 
 
 
 
 
 
 
 
128
  }
129
 
130
  /**
131
  * Output the content of our metabox.
132
  *
133
+ * @deprecated 1.0.0
134
  * @access public
135
  *
136
+ * @param WP_Post $post Post object.
137
  * @return void
138
  */
139
  public function options_callback( WP_Post $post ) {
140
+ _deprecated_function( __METHOD__, '1.0.0' );
141
+
142
+ $this-> meta_box_view( $post );
 
143
  }
144
 
145
  /**
146
+ * Get the class running!
147
  *
148
  * @since 0.1.0
149
+ * @deprecated 1.0.0
150
  * @access public
151
+ * @return void
 
152
  */
153
+ public function run() {
154
+ _deprecated_function( __METHOD__, '1.0.0' );
 
 
 
 
 
 
155
  }
 
156
  }
admin/templates/metabox-sidebar.php DELETED
@@ -1,18 +0,0 @@
1
- <?php
2
- /**
3
- * Template to display the WP Featherlight admin sidebar meta box.
4
- *
5
- * @package WPFeatherlight\Admin\Templates
6
- * @author Robert Neu
7
- * @copyright Copyright (c) 2015, WP Site Care
8
- * @license GPL-2.0+
9
- * @since 0.1.0
10
- */
11
- ?>
12
- <p>
13
- <label for="wp_featherlight_disable">
14
- <input type="checkbox" name="wp_featherlight_disable" id="wp_featherlight_disable" value="yes"<?php checked( $checked, 'yes' ); ?> />
15
- <?php esc_html_e( 'Disable lightbox', 'wp-featherlight' ); ?>
16
- </label>
17
- </p>
18
- <?php wp_nonce_field( $this->nonce_action, $this->nonce_name ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/views/meta-box.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Template to display the WP Featherlight admin sidebar meta box.
4
+ *
5
+ * @package WPFeatherlight\Admin\Views
6
+ * @copyright Copyright (c) 2016, WP Site Care
7
+ * @license GPL-2.0+
8
+ * @since 0.1.0
9
+ */
10
+
11
+ ?>
12
+ <div id="wp-featherlight-enable-wrap" class="misc-pub-section wp-featherlight-enable" style="position:relative;">
13
+ <label for="wp_featherlight_disable">
14
+ <input type="checkbox" name="wp_featherlight_disable" id="wp_featherlight_disable" value=""<?php checked( $checked, 'yes' ); ?> />
15
+ <?php esc_html_e( 'Disable lightbox', 'wp-featherlight' ); ?>
16
+ </label>
17
+ </div>
18
+ <?php wp_nonce_field( 'save_wp_featherlight_metabox', 'wp_featherlight_metabox_nonce' ); ?>
css/wp-featherlight-rtl.css CHANGED
@@ -1,231 +1,245 @@
1
  /**!
2
  * Plugin Name: WP Featherlight
3
- * Version: 0.3.0
4
  * Author: WP Site Care
5
  * License: GPL-2.0+
6
  */
7
-
8
-
9
  /* Base Styles
10
  --------------------------------------------- */
11
-
12
  .featherlight {
13
- background: transparent;
14
- cursor: -webkit-zoom-out;
15
- cursor: -moz-zoom-out;
16
- cursor: zoom-out;
17
- display: none;
18
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
19
- position: fixed;
20
- top: 0;
21
- left: 0;
22
- bottom: 0;
23
- right: 0;
24
- text-align: center;
25
- white-space: nowrap;
26
- z-index: 2147483647;
27
  }
28
 
29
  .featherlight * {
30
- -moz-box-sizing: border-box;
31
- -webkit-box-sizing: border-box;
32
- box-sizing: border-box;
33
  }
34
 
35
  .featherlight:last-of-type {
36
- background: rgba(0, 0, 0, 0.9);
37
  }
38
 
39
- .featherlight:before {
40
- content: "";
41
- display: inline-block;
42
- height: 100%;
43
- margin-left: -0.25em;
44
- vertical-align: middle;
45
  }
46
 
47
  .featherlight .featherlight-content {
48
- background: #fff;
49
- border: 0;
50
- cursor: auto;
51
- display: inline-block;
52
- max-height: 80%;
53
- max-width: 90%;
54
- min-width: inherit;
55
- overflow: visible;
56
- padding: 0;
57
- position: relative;
58
- text-align: right;
59
- vertical-align: middle;
60
- white-space: normal;
 
 
61
  }
62
 
63
  @media screen and (min-width: 980px) {
64
- .featherlight .featherlight-content {
65
- max-height: 90%;
66
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
 
69
  .featherlight .featherlight-inner {
70
- display: block;
 
 
71
  }
72
 
73
  .featherlight .featherlight-close-icon {
74
- background: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M21%204.41L19.59%203%2012%2010.59%204.41%203%203%204.41%2010.59%2012%203%2019.59%204.41%2021%2012%2013.41%2019.59%2021%2021%2019.59%2013.41%2012%2021%204.41z%22/%3E%0A%3C/svg%3E");
75
- background-position: center;
76
- background-repeat: no-repeat;
77
- -webkit-background-size: 100% auto;
78
- background-size: 100% auto;
79
- cursor: pointer;
80
- display: block;
81
- height: 30px;
82
- overflow: hidden;
83
- position: fixed;
84
- top: 25px;
85
- left: 25px;
86
- text-align: center;
87
- text-indent: 100%;
88
- white-space: nowrap;
89
- width: 30px;
90
- z-index: 9999;
 
91
  }
92
 
93
  .featherlight .featherlight-image {
94
- max-width: 100%;
95
  }
96
 
97
  .featherlight iframe {
98
- border: 0;
99
  }
100
 
101
- [data-featherlight] {
102
- cursor: -webkit-zoom-in;
103
- cursor: -moz-zoom-in;
104
- cursor: zoom-in;
105
  }
106
 
107
  .featherlight-iframe .featherlight-content {
108
- border-bottom: 0;
109
- padding: 0;
110
- }
111
-
112
- .featherlight-content .caption {
113
- color: #fff;
114
- font-size: 16px;
115
- font-weight: lighter;
116
- max-width: 100%;
117
- overflow: hidden;
118
- position: absolute;
119
- text-align: right;
120
- text-overflow: ellipsis;
121
- white-space: nowrap;
122
  }
123
 
124
- .featherlight-content .caption:hover,
125
- .featherlight-content .caption:focus {
126
- overflow: visible;
127
- white-space: normal;
128
- }
129
-
130
-
131
  /* Animated Loader
132
  --------------------------------------------- */
133
-
134
  @-webkit-keyframes featherlightLoader {
135
- 0% {
136
- -webkit-transform: rotate(0deg);
137
- transform: rotate(0deg);
138
- }
139
-
140
- 100% {
141
- -webkit-transform: rotate(-360deg);
142
- transform: rotate(-360deg);
143
- }
144
  }
145
-
146
  @keyframes featherlightLoader {
147
- 0% {
148
- -webkit-transform: rotate(0deg);
149
- transform: rotate(0deg);
150
- }
151
-
152
- 100% {
153
- -webkit-transform: rotate(-360deg);
154
- transform: rotate(-360deg);
155
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  }
157
 
158
  .featherlight-loading .featherlight-content {
159
- -webkit-animation: featherlightLoader 1s infinite linear;
160
- animation: featherlightLoader 1s infinite linear;
161
- background: transparent;
162
- border: 8px solid #909090;
163
- border-right-color: #fff;
164
- font-size: 10px;
165
  }
166
 
167
  .featherlight-loading .featherlight-content,
168
- .featherlight-loading .featherlight-content:after {
169
- -webkit-border-radius: 50%;
170
- border-radius: 50%;
171
- height: 10em;
172
- width: 10em;
173
  }
174
 
175
  .featherlight-loading .featherlight-close,
176
  .featherlight-loading .featherlight-inner {
177
- display: none;
178
  }
179
 
180
-
181
  /* Gallery
182
  --------------------------------------------- */
183
-
184
  .featherlight-next,
185
  .featherlight-previous {
186
- background-repeat: no-repeat;
187
- -webkit-background-size: 100% auto;
188
- background-size: 100% auto;
189
- cursor: pointer;
190
- display: block;
191
- height: 60px;
192
- margin-top: -30px;
193
- opacity: 0.4;
194
- overflow: hidden;
195
- position: fixed;
196
- top: 50%;
197
- text-indent: 100%;
198
- -moz-user-select: none;
199
- -ms-user-select: none;
200
- -webkit-user-select: none;
201
- user-select: none;
202
- white-space: nowrap;
203
- width: 60px;
 
204
  }
205
 
206
  .featherlight-next span,
207
  .featherlight-previous span {
208
- display: none;
209
  }
210
 
211
- .featherlight-next:hover,
212
- .featherlight-next:focus,
213
  .featherlight-previous:hover,
214
  .featherlight-previous:focus {
215
- opacity: 1;
216
  }
217
  .featherlight-next {
218
- background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M8.59%2016.59L13.17%2012%208.59%207.41%2010%206l6%206-6%206-1.41-1.41z%22/%3E%0A%3C/svg%3E");
219
- background-position: 0 0;
220
- right: 10px;
221
  }
222
  .featherlight-previous {
223
- background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M15.41%207.41L10.83%2012l4.58%204.59L14%2018l-6-6%206-6%201.41%201.41z%22/%3E%0A%3C/svg%3E");
224
- background-position: -5px 0;
225
- left: 10px;
226
  }
227
 
228
  .featherlight-loading .featherlight-previous,
229
  .featherlight-loading .featherlight-next {
230
- display: none;
231
  }
 
1
  /**!
2
  * Plugin Name: WP Featherlight
3
+ * Version: 1.0.0
4
  * Author: WP Site Care
5
  * License: GPL-2.0+
6
  */
 
 
7
  /* Base Styles
8
  --------------------------------------------- */
 
9
  .featherlight {
10
+ background: transparent;
11
+ bottom: 0;
12
+ cursor: -webkit-zoom-out;
13
+ cursor: -moz-zoom-out;
14
+ cursor: zoom-out;
15
+ display: none;
16
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
17
+ right: 0;
18
+ position: fixed;
19
+ left: 0;
20
+ text-align: center;
21
+ top: 0;
22
+ white-space: nowrap;
23
+ z-index: 2147483647;
24
  }
25
 
26
  .featherlight * {
27
+ -webkit-box-sizing: border-box;
28
+ -moz-box-sizing: border-box;
29
+ box-sizing: border-box;
30
  }
31
 
32
  .featherlight:last-of-type {
33
+ background: rgba(0, 0, 0, 0.9);
34
  }
35
 
36
+ .featherlight::before {
37
+ content: "";
38
+ display: inline-block;
39
+ height: 100%;
40
+ margin-left: -0.25em;
41
+ vertical-align: middle;
42
  }
43
 
44
  .featherlight .featherlight-content {
45
+ -webkit-animation: fadein 0.5s;
46
+ animation: fadein 0.5s;
47
+ background: #000;
48
+ border: 0;
49
+ cursor: auto;
50
+ display: inline-block;
51
+ max-height: 80%;
52
+ max-width: 90%;
53
+ min-width: inherit;
54
+ overflow: visible;
55
+ padding: 0;
56
+ position: relative;
57
+ text-align: right;
58
+ vertical-align: middle;
59
+ white-space: normal;
60
  }
61
 
62
  @media screen and (min-width: 980px) {
63
+ .featherlight .featherlight-content {
64
+ max-height: 90%;
65
+ }
66
+ }
67
+
68
+ .featherlight .featherlight-content .caption {
69
+ color: #fff;
70
+ font-size: 16px;
71
+ font-weight: lighter;
72
+ line-height: 1.25;
73
+ max-width: 100%;
74
+ overflow: hidden;
75
+ position: absolute;
76
+ text-align: right;
77
+ text-overflow: ellipsis;
78
+ white-space: nowrap;
79
+ }
80
+
81
+ .featherlight .featherlight-content .caption:hover, .featherlight .featherlight-content .caption:focus {
82
+ overflow: visible;
83
+ white-space: normal;
84
  }
85
 
86
  .featherlight .featherlight-inner {
87
+ -webkit-animation: fadein 0.5s;
88
+ animation: fadein 0.5s;
89
+ display: block;
90
  }
91
 
92
  .featherlight .featherlight-close-icon {
93
+ background-color: transparent;
94
+ background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M21%204.41L19.59%203%2012%2010.59%204.41%203%203%204.41%2010.59%2012%203%2019.59%204.41%2021%2012%2013.41%2019.59%2021%2021%2019.59%2013.41%2012%2021%204.41z%22/%3E%0A%3C/svg%3E");
95
+ background-position: center;
96
+ background-repeat: no-repeat;
97
+ -webkit-background-size: 100% auto;
98
+ background-size: 100% auto;
99
+ cursor: pointer;
100
+ display: block;
101
+ height: 30px;
102
+ overflow: hidden;
103
+ position: fixed;
104
+ left: 25px;
105
+ text-align: center;
106
+ text-indent: 100%;
107
+ top: 25px;
108
+ white-space: nowrap;
109
+ width: 30px;
110
+ z-index: 9999;
111
  }
112
 
113
  .featherlight .featherlight-image {
114
+ max-width: 100%;
115
  }
116
 
117
  .featherlight iframe {
118
+ border: 0;
119
  }
120
 
121
+ [data-featherlight] img {
122
+ cursor: -webkit-zoom-in;
123
+ cursor: -moz-zoom-in;
124
+ cursor: zoom-in;
125
  }
126
 
127
  .featherlight-iframe .featherlight-content {
128
+ border-bottom: 0;
129
+ padding: 0;
 
 
 
 
 
 
 
 
 
 
 
 
130
  }
131
 
 
 
 
 
 
 
 
132
  /* Animated Loader
133
  --------------------------------------------- */
 
134
  @-webkit-keyframes featherlightLoader {
135
+ 0% {
136
+ -webkit-transform: rotate(0deg);
137
+ transform: rotate(0deg);
138
+ }
139
+ 100% {
140
+ -webkit-transform: rotate(-360deg);
141
+ transform: rotate(-360deg);
142
+ }
 
143
  }
 
144
  @keyframes featherlightLoader {
145
+ 0% {
146
+ -webkit-transform: rotate(0deg);
147
+ transform: rotate(0deg);
148
+ }
149
+ 100% {
150
+ -webkit-transform: rotate(-360deg);
151
+ transform: rotate(-360deg);
152
+ }
153
+ }
154
+
155
+ @-webkit-keyframes fadein {
156
+ from {
157
+ opacity: 0;
158
+ }
159
+ to {
160
+ opacity: 1;
161
+ }
162
+ }
163
+
164
+ @keyframes fadein {
165
+ from {
166
+ opacity: 0;
167
+ }
168
+ to {
169
+ opacity: 1;
170
+ }
171
  }
172
 
173
  .featherlight-loading .featherlight-content {
174
+ -webkit-animation: featherlightLoader 1s infinite linear;
175
+ animation: featherlightLoader 1s infinite linear;
176
+ background: transparent;
177
+ border: 8px solid #909090;
178
+ border-right-color: #fff;
179
+ font-size: 10px;
180
  }
181
 
182
  .featherlight-loading .featherlight-content,
183
+ .featherlight-loading .featherlight-content::after {
184
+ -webkit-border-radius: 50%;
185
+ border-radius: 50%;
186
+ height: 10em;
187
+ width: 10em;
188
  }
189
 
190
  .featherlight-loading .featherlight-close,
191
  .featherlight-loading .featherlight-inner {
192
+ display: none;
193
  }
194
 
 
195
  /* Gallery
196
  --------------------------------------------- */
 
197
  .featherlight-next,
198
  .featherlight-previous {
199
+ background-color: transparent;
200
+ background-repeat: no-repeat;
201
+ -webkit-background-size: 100% auto;
202
+ background-size: 100% auto;
203
+ cursor: pointer;
204
+ display: block;
205
+ height: 60px;
206
+ margin-top: -30px;
207
+ opacity: 0.4;
208
+ overflow: hidden;
209
+ position: fixed;
210
+ text-indent: 100%;
211
+ top: 50%;
212
+ -webkit-user-select: none;
213
+ -moz-user-select: none;
214
+ -ms-user-select: none;
215
+ user-select: none;
216
+ white-space: nowrap;
217
+ width: 60px;
218
  }
219
 
220
  .featherlight-next span,
221
  .featherlight-previous span {
222
+ display: none;
223
  }
224
 
225
+ .featherlight-next:hover, .featherlight-next:focus,
 
226
  .featherlight-previous:hover,
227
  .featherlight-previous:focus {
228
+ opacity: 1;
229
  }
230
  .featherlight-next {
231
+ background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M8.59%2016.59L13.17%2012%208.59%207.41%2010%206l6%206-6%206-1.41-1.41z%22/%3E%0A%3C/svg%3E");
232
+ background-position: 0 0;
233
+ right: 10px;
234
  }
235
  .featherlight-previous {
236
+ background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M15.41%207.41L10.83%2012l4.58%204.59L14%2018l-6-6%206-6%201.41%201.41z%22/%3E%0A%3C/svg%3E");
237
+ background-position: -5px 0;
238
+ left: 10px;
239
  }
240
 
241
  .featherlight-loading .featherlight-previous,
242
  .featherlight-loading .featherlight-next {
243
+ display: none;
244
  }
245
+ /*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndwLWZlYXRoZXJsaWdodC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSDtnREFDZ0Q7QUFDaEQ7RUFDRSx3QkFBd0I7RUFDeEIsVUFBVTtFQUNWLHlCQUFpQjtFQUFqQixzQkFBaUI7RUFBakIsaUJBQWlCO0VBQ2pCLGNBQWM7RUFDZCw0REFBNEQ7RUFDNUQsU0FBUTtFQUNSLGdCQUFnQjtFQUNoQixRQUFTO0VBQ1QsbUJBQW1CO0VBQ25CLE9BQU87RUFDUCxvQkFBb0I7RUFDcEIsb0JBQW9CO0NBQ3JCOztBQUVEO0VBQ0UsK0JBQXVCO0tBQXZCLDRCQUF1QjtVQUF2Qix1QkFBdUI7Q0FDeEI7O0FBRUQ7RUFDRSwrQkFBK0I7Q0FDaEM7O0FBRUQ7RUFDRSxZQUFZO0VBQ1osc0JBQXNCO0VBQ3RCLGFBQWE7RUFDYixxQkFBc0I7RUFDdEIsdUJBQXVCO0NBQ3hCOztBQUVEO0VBQ0UsK0JBQXVCO1VBQXZCLHVCQUF1QjtFQUN2QixpQkFBaUI7RUFDakIsVUFBVTtFQUNWLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZixtQkFBbUI7RUFDbkIsa0JBQWtCO0VBQ2xCLFdBQVc7RUFDWCxtQkFBbUI7RUFDbkIsa0JBQWlCO0VBQ2pCLHVCQUF1QjtFQUN2QixvQkFBb0I7Q0FDckI7O0FBRUQ7RUFDRTtJQUNFLGdCQUFnQjtHQUNqQjtDQUNGOztBQUVEO0VBQ0UsWUFBWTtFQUNaLGdCQUFnQjtFQUNoQixxQkFBcUI7RUFDckIsa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLGtCQUFpQjtFQUNqQix3QkFBd0I7RUFDeEIsb0JBQW9CO0NBQ3JCOztBQUVEO0VBQ0Usa0JBQWtCO0VBQ2xCLG9CQUFvQjtDQUNyQjs7QUFFRDtFQUNFLCtCQUF1QjtVQUF2Qix1QkFBdUI7RUFDdkIsZUFBZTtDQUNoQjs7QUFFRDtFQUNFLDhCQUE4QjtFQUM5QixtV0FBbVc7RUFDblcsNEJBQTRCO0VBQzVCLDZCQUE2QjtFQUM3QixtQ0FBMkI7VUFBM0IsMkJBQTJCO0VBQzNCLGdCQUFnQjtFQUNoQixlQUFlO0VBQ2YsYUFBYTtFQUNiLGlCQUFpQjtFQUNqQixnQkFBZ0I7RUFDaEIsV0FBWTtFQUNaLG1CQUFtQjtFQUNuQixrQkFBa0I7RUFDbEIsVUFBVTtFQUNWLG9CQUFvQjtFQUNwQixZQUFZO0VBQ1osY0FBYztDQUNmOztBQUVEO0VBQ0UsZ0JBQWdCO0NBQ2pCOztBQUVEO0VBQ0UsVUFBVTtDQUNYOztBQUVEO0VBQ0Usd0JBQWdCO0VBQWhCLHFCQUFnQjtFQUFoQixnQkFBZ0I7Q0FDakI7O0FBRUQ7RUFDRSxpQkFBaUI7RUFDakIsV0FBVztDQUNaOztBQUVEO2dEQUNnRDtBQUNoRDtFQUNFO0lBQ0UsZ0NBQXdCO1lBQXhCLHdCQUF3QjtHQUN6QjtFQUNEO0lBQ0UsbUNBQTBCO1lBQTFCLDJCQUEwQjtHQUMzQjtDQUNGO0FBUEQ7RUFDRTtJQUNFLGdDQUF3QjtZQUF4Qix3QkFBd0I7R0FDekI7RUFDRDtJQUNFLG1DQUEwQjtZQUExQiwyQkFBMEI7R0FDM0I7Q0FDRjs7QUFFRDtFQUNFO0lBQ0UsV0FBVztHQUNaO0VBQ0Q7SUFDRSxXQUFXO0dBQ1o7Q0FDRjs7QUFQRDtFQUNFO0lBQ0UsV0FBVztHQUNaO0VBQ0Q7SUFDRSxXQUFXO0dBQ1o7Q0FDRjs7QUFFRDtFQUNFLHlEQUFpRDtVQUFqRCxpREFBaUQ7RUFDakQsd0JBQXdCO0VBQ3hCLDBCQUEwQjtFQUMxQix5QkFBd0I7RUFDeEIsZ0JBQWdCO0NBQ2pCOztBQUVEOztFQUVFLDJCQUFtQjtVQUFuQixtQkFBbUI7RUFDbkIsYUFBYTtFQUNiLFlBQVk7Q0FDYjs7QUFFRDs7RUFFRSxjQUFjO0NBQ2Y7O0FBRUQ7Z0RBQ2dEO0FBQ2hEOztFQUVFLDhCQUE4QjtFQUM5Qiw2QkFBNkI7RUFDN0IsbUNBQTJCO1VBQTNCLDJCQUEyQjtFQUMzQixnQkFBZ0I7RUFDaEIsZUFBZTtFQUNmLGFBQWE7RUFDYixrQkFBa0I7RUFDbEIsYUFBYTtFQUNiLGlCQUFpQjtFQUNqQixnQkFBZ0I7RUFDaEIsa0JBQWtCO0VBQ2xCLFNBQVM7RUFDVCwwQkFBa0I7S0FBbEIsdUJBQWtCO01BQWxCLHNCQUFrQjtVQUFsQixrQkFBa0I7RUFDbEIsb0JBQW9CO0VBQ3BCLFlBQVk7Q0FDYjs7QUFFRDs7RUFFRSxjQUFjO0NBQ2Y7O0FBRUQ7OztFQUdFLFdBQVc7Q0FDWjtBQUdEO0VBQ0UsNFFBQTRRO0VBQzVRLHlCQUF5QjtFQUN6QixZQUFZO0NBQ2I7QUFHRDtFQUNFLDRRQUE0UTtFQUM1USw0QkFBNEI7RUFDNUIsV0FBVztDQUNaOztBQUVEOztFQUVFLGNBQWM7Q0FDZiIsImZpbGUiOiJ3cC1mZWF0aGVybGlnaHQtcnRsLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiFcbiAqIFBsdWdpbiBOYW1lOiBXUCBGZWF0aGVybGlnaHRcbiAqIFZlcnNpb246ICAgICAxLjAuMFxuICogQXV0aG9yOiAgICAgIFdQIFNpdGUgQ2FyZVxuICogTGljZW5zZTogICAgIEdQTC0yLjArXG4gKi9cbi8qIEJhc2UgU3R5bGVzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi5mZWF0aGVybGlnaHQge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm90dG9tOiAwO1xuICBjdXJzb3I6IHpvb20tb3V0O1xuICBkaXNwbGF5OiBub25lO1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBsZWZ0OiAwO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHJpZ2h0OiAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRvcDogMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgei1pbmRleDogMjE0NzQ4MzY0Nztcbn1cblxuLmZlYXRoZXJsaWdodCAqIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmZlYXRoZXJsaWdodDpsYXN0LW9mLXR5cGUge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOSk7XG59XG5cbi5mZWF0aGVybGlnaHQ6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW4tcmlnaHQ6IC0wLjI1ZW07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5mZWF0aGVybGlnaHQgLmZlYXRoZXJsaWdodC1jb250ZW50IHtcbiAgYW5pbWF0aW9uOiBmYWRlaW4gMC41cztcbiAgYmFja2dyb3VuZDogIzAwMDtcbiAgYm9yZGVyOiAwO1xuICBjdXJzb3I6IGF1dG87XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LWhlaWdodDogODAlO1xuICBtYXgtd2lkdGg6IDkwJTtcbiAgbWluLXdpZHRoOiBpbmhlcml0O1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA5ODBweCkge1xuICAuZmVhdGhlcmxpZ2h0IC5mZWF0aGVybGlnaHQtY29udGVudCB7XG4gICAgbWF4LWhlaWdodDogOTAlO1xuICB9XG59XG5cbi5mZWF0aGVybGlnaHQgLmZlYXRoZXJsaWdodC1jb250ZW50IC5jYXB0aW9uIHtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IGxpZ2h0ZXI7XG4gIGxpbmUtaGVpZ2h0OiAxLjI1O1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5mZWF0aGVybGlnaHQgLmZlYXRoZXJsaWdodC1jb250ZW50IC5jYXB0aW9uOmhvdmVyLCAuZmVhdGhlcmxpZ2h0IC5mZWF0aGVybGlnaHQtY29udGVudCAuY2FwdGlvbjpmb2N1cyB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuXG4uZmVhdGhlcmxpZ2h0IC5mZWF0aGVybGlnaHQtaW5uZXIge1xuICBhbmltYXRpb246IGZhZGVpbiAwLjVzO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmZlYXRoZXJsaWdodCAuZmVhdGhlcmxpZ2h0LWNsb3NlLWljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMjQlMjIlM0UlMEElMDklM0NwYXRoJTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMGQlM0QlMjJNMjElMjA0LjQxTDE5LjU5JTIwMyUyMDEyJTIwMTAuNTklMjA0LjQxJTIwMyUyMDMlMjA0LjQxJTIwMTAuNTklMjAxMiUyMDMlMjAxOS41OSUyMDQuNDElMjAyMSUyMDEyJTIwMTMuNDElMjAxOS41OSUyMDIxJTIwMjElMjAxOS41OSUyMDEzLjQxJTIwMTIlMjAyMSUyMDQuNDF6JTIyLyUzRSUwQSUzQy9zdmclM0VcIik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogMzBweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMjVweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LWluZGVudDogMTAwJTtcbiAgdG9wOiAyNXB4O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB3aWR0aDogMzBweDtcbiAgei1pbmRleDogOTk5OTtcbn1cblxuLmZlYXRoZXJsaWdodCAuZmVhdGhlcmxpZ2h0LWltYWdlIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4uZmVhdGhlcmxpZ2h0IGlmcmFtZSB7XG4gIGJvcmRlcjogMDtcbn1cblxuW2RhdGEtZmVhdGhlcmxpZ2h0XSBpbWcge1xuICBjdXJzb3I6IHpvb20taW47XG59XG5cbi5mZWF0aGVybGlnaHQtaWZyYW1lIC5mZWF0aGVybGlnaHQtY29udGVudCB7XG4gIGJvcmRlci1ib3R0b206IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8qIEFuaW1hdGVkIExvYWRlclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5Aa2V5ZnJhbWVzIGZlYXRoZXJsaWdodExvYWRlciB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgZmFkZWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG4uZmVhdGhlcmxpZ2h0LWxvYWRpbmcgLmZlYXRoZXJsaWdodC1jb250ZW50IHtcbiAgYW5pbWF0aW9uOiBmZWF0aGVybGlnaHRMb2FkZXIgMXMgaW5maW5pdGUgbGluZWFyO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiA4cHggc29saWQgIzkwOTA5MDtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMTBweDtcbn1cblxuLmZlYXRoZXJsaWdodC1sb2FkaW5nIC5mZWF0aGVybGlnaHQtY29udGVudCxcbi5mZWF0aGVybGlnaHQtbG9hZGluZyAuZmVhdGhlcmxpZ2h0LWNvbnRlbnQ6OmFmdGVyIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBoZWlnaHQ6IDEwZW07XG4gIHdpZHRoOiAxMGVtO1xufVxuXG4uZmVhdGhlcmxpZ2h0LWxvYWRpbmcgLmZlYXRoZXJsaWdodC1jbG9zZSxcbi5mZWF0aGVybGlnaHQtbG9hZGluZyAuZmVhdGhlcmxpZ2h0LWlubmVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogR2FsbGVyeVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4uZmVhdGhlcmxpZ2h0LW5leHQsXG4uZmVhdGhlcmxpZ2h0LXByZXZpb3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSBhdXRvO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDYwcHg7XG4gIG1hcmdpbi10b3A6IC0zMHB4O1xuICBvcGFjaXR5OiAwLjQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdGV4dC1pbmRlbnQ6IDEwMCU7XG4gIHRvcDogNTAlO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgd2lkdGg6IDYwcHg7XG59XG5cbi5mZWF0aGVybGlnaHQtbmV4dCBzcGFuLFxuLmZlYXRoZXJsaWdodC1wcmV2aW91cyBzcGFuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmZlYXRoZXJsaWdodC1uZXh0OmhvdmVyLCAuZmVhdGhlcmxpZ2h0LW5leHQ6Zm9jdXMsXG4uZmVhdGhlcmxpZ2h0LXByZXZpb3VzOmhvdmVyLFxuLmZlYXRoZXJsaWdodC1wcmV2aW91czpmb2N1cyB7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi8qIHJ0bDppZ25vcmUgKi9cbi5mZWF0aGVybGlnaHQtbmV4dCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyNCUyMDI0JTIyJTNFJTBBJTA5JTNDcGF0aCUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjBkJTNEJTIyTTguNTklMjAxNi41OUwxMy4xNyUyMDEyJTIwOC41OSUyMDcuNDElMjAxMCUyMDZsNiUyMDYtNiUyMDYtMS40MS0xLjQxeiUyMi8lM0UlMEElM0Mvc3ZnJTNFXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XG4gIHJpZ2h0OiAxMHB4O1xufVxuXG4vKiBydGw6aWdub3JlICovXG4uZmVhdGhlcmxpZ2h0LXByZXZpb3VzIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMjQlMjIlM0UlMEElMDklM0NwYXRoJTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMGQlM0QlMjJNMTUuNDElMjA3LjQxTDEwLjgzJTIwMTJsNC41OCUyMDQuNTlMMTQlMjAxOGwtNi02JTIwNi02JTIwMS40MSUyMDEuNDF6JTIyLyUzRSUwQSUzQy9zdmclM0VcIik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC01cHggMDtcbiAgbGVmdDogMTBweDtcbn1cblxuLmZlYXRoZXJsaWdodC1sb2FkaW5nIC5mZWF0aGVybGlnaHQtcHJldmlvdXMsXG4uZmVhdGhlcmxpZ2h0LWxvYWRpbmcgLmZlYXRoZXJsaWdodC1uZXh0IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbiJdfQ== */
css/wp-featherlight-rtl.min.css CHANGED
@@ -1 +1 @@
1
- .featherlight{background:0 0;cursor:-webkit-zoom-out;cursor:-moz-zoom-out;cursor:zoom-out;display:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;position:fixed;top:0;left:0;bottom:0;right:0;text-align:center;white-space:nowrap;z-index:2147483647}.featherlight *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.featherlight:last-of-type{background:rgba(0,0,0,.9)}.featherlight:before{content:"";display:inline-block;height:100%;margin-left:-.25em;vertical-align:middle}.featherlight .featherlight-content{background:#fff;border:0;cursor:auto;display:inline-block;max-height:80%;max-width:90%;min-width:inherit;overflow:visible;padding:0;position:relative;text-align:right;vertical-align:middle;white-space:normal}@media screen and (min-width:980px){.featherlight .featherlight-content{max-height:90%}}.featherlight .featherlight-inner{display:block}.featherlight .featherlight-close-icon{background:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M21%204.41L19.59%203%2012%2010.59%204.41%203%203%204.41%2010.59%2012%203%2019.59%204.41%2021%2012%2013.41%2019.59%2021%2021%2019.59%2013.41%2012%2021%204.41z%22/%3E%0A%3C/svg%3E) center no-repeat;-webkit-background-size:100% auto;background-size:100% auto;cursor:pointer;display:block;height:30px;overflow:hidden;position:fixed;top:25px;left:25px;text-align:center;text-indent:100%;white-space:nowrap;width:30px;z-index:9999}.featherlight .featherlight-image{max-width:100%}.featherlight iframe{border:0}[data-featherlight]{cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0}.featherlight-content .caption{color:#fff;font-size:16px;font-weight:lighter;max-width:100%;overflow:hidden;position:absolute;text-align:right;text-overflow:ellipsis;white-space:nowrap}.featherlight-content .caption:focus,.featherlight-content .caption:hover{overflow:visible;white-space:normal}@-webkit-keyframes featherlightLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes featherlightLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}.featherlight-loading .featherlight-content{-webkit-animation:featherlightLoader 1s infinite linear;animation:featherlightLoader 1s infinite linear;background:0 0;border:8px solid #909090;border-right-color:#fff;font-size:10px}.featherlight-loading .featherlight-content,.featherlight-loading .featherlight-content:after{-webkit-border-radius:50%;border-radius:50%;height:10em;width:10em}.featherlight-loading .featherlight-close,.featherlight-loading .featherlight-inner{display:none}.featherlight-next,.featherlight-previous{background-repeat:no-repeat;-webkit-background-size:100% auto;background-size:100% auto;cursor:pointer;display:block;height:60px;margin-top:-30px;opacity:.4;overflow:hidden;position:fixed;top:50%;text-indent:100%;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;white-space:nowrap;width:60px}.featherlight-loading .featherlight-next,.featherlight-loading .featherlight-previous,.featherlight-next span,.featherlight-previous span{display:none}.featherlight-next:focus,.featherlight-next:hover,.featherlight-previous:focus,.featherlight-previous:hover{opacity:1}.featherlight-next{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M8.59%2016.59L13.17%2012%208.59%207.41%2010%206l6%206-6%206-1.41-1.41z%22/%3E%0A%3C/svg%3E);background-position:0 0;right:10px}.featherlight-previous{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M15.41%207.41L10.83%2012l4.58%204.59L14%2018l-6-6%206-6%201.41%201.41z%22/%3E%0A%3C/svg%3E);background-position:-5px 0;left:10px}
1
+ .featherlight{background:0 0;bottom:0;cursor:-webkit-zoom-out;cursor:-moz-zoom-out;cursor:zoom-out;display:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;right:0;position:fixed;left:0;text-align:center;top:0;white-space:nowrap;z-index:2147483647}.featherlight *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.featherlight:last-of-type{background:rgba(0,0,0,.9)}.featherlight::before{content:"";display:inline-block;height:100%;margin-left:-.25em;vertical-align:middle}.featherlight .featherlight-content{-webkit-animation:fadein .5s;animation:fadein .5s;background:#000;border:0;cursor:auto;display:inline-block;max-height:80%;max-width:90%;min-width:inherit;overflow:visible;padding:0;position:relative;text-align:right;vertical-align:middle;white-space:normal}@media screen and (min-width:980px){.featherlight .featherlight-content{max-height:90%}}.featherlight .featherlight-content .caption{color:#fff;font-size:16px;font-weight:lighter;line-height:1.25;max-width:100%;overflow:hidden;position:absolute;text-align:right;text-overflow:ellipsis;white-space:nowrap}.featherlight .featherlight-content .caption:focus,.featherlight .featherlight-content .caption:hover{overflow:visible;white-space:normal}.featherlight .featherlight-inner{-webkit-animation:fadein .5s;animation:fadein .5s;display:block}.featherlight .featherlight-close-icon{background-color:transparent;background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M21%204.41L19.59%203%2012%2010.59%204.41%203%203%204.41%2010.59%2012%203%2019.59%204.41%2021%2012%2013.41%2019.59%2021%2021%2019.59%2013.41%2012%2021%204.41z%22/%3E%0A%3C/svg%3E);background-position:center;background-repeat:no-repeat;-webkit-background-size:100% auto;background-size:100% auto;cursor:pointer;display:block;height:30px;overflow:hidden;position:fixed;left:25px;text-align:center;text-indent:100%;top:25px;white-space:nowrap;width:30px;z-index:9999}.featherlight .featherlight-image{max-width:100%}.featherlight iframe{border:0}[data-featherlight] img{cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0}@-webkit-keyframes featherlightLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes featherlightLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@keyframes fadein{from{opacity:0}to{opacity:1}}.featherlight-loading .featherlight-content{-webkit-animation:featherlightLoader 1s infinite linear;animation:featherlightLoader 1s infinite linear;background:0 0;border:8px solid #909090;border-right-color:#fff;font-size:10px}.featherlight-loading .featherlight-content,.featherlight-loading .featherlight-content::after{-webkit-border-radius:50%;border-radius:50%;height:10em;width:10em}.featherlight-loading .featherlight-close,.featherlight-loading .featherlight-inner{display:none}.featherlight-next,.featherlight-previous{background-color:transparent;background-repeat:no-repeat;-webkit-background-size:100% auto;background-size:100% auto;cursor:pointer;display:block;height:60px;margin-top:-30px;opacity:.4;overflow:hidden;position:fixed;text-indent:100%;top:50%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;width:60px}.featherlight-loading .featherlight-next,.featherlight-loading .featherlight-previous,.featherlight-next span,.featherlight-previous span{display:none}.featherlight-next:focus,.featherlight-next:hover,.featherlight-previous:focus,.featherlight-previous:hover{opacity:1}.featherlight-next{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M8.59%2016.59L13.17%2012%208.59%207.41%2010%206l6%206-6%206-1.41-1.41z%22/%3E%0A%3C/svg%3E);background-position:0 0;right:10px}.featherlight-previous{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M15.41%207.41L10.83%2012l4.58%204.59L14%2018l-6-6%206-6%201.41%201.41z%22/%3E%0A%3C/svg%3E);background-position:-5px 0;left:10px}
css/wp-featherlight.css CHANGED
@@ -1,235 +1,250 @@
1
  /**!
2
  * Plugin Name: WP Featherlight
3
- * Version: 0.3.0
4
  * Author: WP Site Care
5
  * License: GPL-2.0+
6
  */
7
-
8
-
9
  /* Base Styles
10
  --------------------------------------------- */
11
-
12
  .featherlight {
13
- background: transparent;
14
- cursor: -webkit-zoom-out;
15
- cursor: -moz-zoom-out;
16
- cursor: zoom-out;
17
- display: none;
18
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
19
- position: fixed;
20
- top: 0;
21
- right: 0;
22
- bottom: 0;
23
- left: 0;
24
- text-align: center;
25
- white-space: nowrap;
26
- z-index: 2147483647;
27
  }
28
 
29
  .featherlight * {
30
- -moz-box-sizing: border-box;
31
- -webkit-box-sizing: border-box;
32
- box-sizing: border-box;
33
  }
34
 
35
  .featherlight:last-of-type {
36
- background: rgba(0, 0, 0, 0.9);
37
  }
38
 
39
- .featherlight:before {
40
- content: "";
41
- display: inline-block;
42
- height: 100%;
43
- margin-right: -0.25em;
44
- vertical-align: middle;
45
  }
46
 
47
  .featherlight .featherlight-content {
48
- background: #fff;
49
- border: 0;
50
- cursor: auto;
51
- display: inline-block;
52
- max-height: 80%;
53
- max-width: 90%;
54
- min-width: inherit;
55
- overflow: visible;
56
- padding: 0;
57
- position: relative;
58
- text-align: left;
59
- vertical-align: middle;
60
- white-space: normal;
 
 
61
  }
62
 
63
  @media screen and (min-width: 980px) {
64
- .featherlight .featherlight-content {
65
- max-height: 90%;
66
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
 
69
  .featherlight .featherlight-inner {
70
- display: block;
 
 
71
  }
72
 
73
  .featherlight .featherlight-close-icon {
74
- background: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M21%204.41L19.59%203%2012%2010.59%204.41%203%203%204.41%2010.59%2012%203%2019.59%204.41%2021%2012%2013.41%2019.59%2021%2021%2019.59%2013.41%2012%2021%204.41z%22/%3E%0A%3C/svg%3E");
75
- background-position: center;
76
- background-repeat: no-repeat;
77
- -webkit-background-size: 100% auto;
78
- background-size: 100% auto;
79
- cursor: pointer;
80
- display: block;
81
- height: 30px;
82
- overflow: hidden;
83
- position: fixed;
84
- top: 25px;
85
- right: 25px;
86
- text-align: center;
87
- text-indent: 100%;
88
- white-space: nowrap;
89
- width: 30px;
90
- z-index: 9999;
 
91
  }
92
 
93
  .featherlight .featherlight-image {
94
- max-width: 100%;
95
  }
96
 
97
  .featherlight iframe {
98
- border: 0;
99
  }
100
 
101
- [data-featherlight] {
102
- cursor: -webkit-zoom-in;
103
- cursor: -moz-zoom-in;
104
- cursor: zoom-in;
105
  }
106
 
107
  .featherlight-iframe .featherlight-content {
108
- border-bottom: 0;
109
- padding: 0;
110
  }
111
 
112
- .featherlight-content .caption {
113
- color: #fff;
114
- font-size: 16px;
115
- font-weight: lighter;
116
- max-width: 100%;
117
- overflow: hidden;
118
- position: absolute;
119
- text-align: left;
120
- text-overflow: ellipsis;
121
- white-space: nowrap;
122
- }
123
-
124
- .featherlight-content .caption:hover,
125
- .featherlight-content .caption:focus {
126
- overflow: visible;
127
- white-space: normal;
128
- }
129
-
130
-
131
  /* Animated Loader
132
  --------------------------------------------- */
133
-
134
  @-webkit-keyframes featherlightLoader {
135
- 0% {
136
- -webkit-transform: rotate(0deg);
137
- transform: rotate(0deg);
138
- }
139
-
140
- 100% {
141
- -webkit-transform: rotate(360deg);
142
- transform: rotate(360deg);
143
- }
144
  }
145
-
146
  @keyframes featherlightLoader {
147
- 0% {
148
- -webkit-transform: rotate(0deg);
149
- transform: rotate(0deg);
150
- }
151
-
152
- 100% {
153
- -webkit-transform: rotate(360deg);
154
- transform: rotate(360deg);
155
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  }
157
 
158
  .featherlight-loading .featherlight-content {
159
- -webkit-animation: featherlightLoader 1s infinite linear;
160
- animation: featherlightLoader 1s infinite linear;
161
- background: transparent;
162
- border: 8px solid #909090;
163
- border-left-color: #fff;
164
- font-size: 10px;
165
  }
166
 
167
  .featherlight-loading .featherlight-content,
168
- .featherlight-loading .featherlight-content:after {
169
- -webkit-border-radius: 50%;
170
- border-radius: 50%;
171
- height: 10em;
172
- width: 10em;
173
  }
174
 
175
  .featherlight-loading .featherlight-close,
176
  .featherlight-loading .featherlight-inner {
177
- display: none;
178
  }
179
 
180
-
181
  /* Gallery
182
  --------------------------------------------- */
183
-
184
  .featherlight-next,
185
  .featherlight-previous {
186
- background-repeat: no-repeat;
187
- -webkit-background-size: 100% auto;
188
- background-size: 100% auto;
189
- cursor: pointer;
190
- display: block;
191
- height: 60px;
192
- margin-top: -30px;
193
- opacity: 0.4;
194
- overflow: hidden;
195
- position: fixed;
196
- top: 50%;
197
- text-indent: 100%;
198
- -moz-user-select: none;
199
- -ms-user-select: none;
200
- -webkit-user-select: none;
201
- user-select: none;
202
- white-space: nowrap;
203
- width: 60px;
 
204
  }
205
 
206
  .featherlight-next span,
207
  .featherlight-previous span {
208
- display: none;
209
  }
210
 
211
- .featherlight-next:hover,
212
- .featherlight-next:focus,
213
  .featherlight-previous:hover,
214
  .featherlight-previous:focus {
215
- opacity: 1;
216
  }
217
 
218
  /* rtl:ignore */
219
  .featherlight-next {
220
- background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M8.59%2016.59L13.17%2012%208.59%207.41%2010%206l6%206-6%206-1.41-1.41z%22/%3E%0A%3C/svg%3E");
221
- background-position: 0 0;
222
- right: 10px;
223
  }
224
 
225
  /* rtl:ignore */
226
  .featherlight-previous {
227
- background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M15.41%207.41L10.83%2012l4.58%204.59L14%2018l-6-6%206-6%201.41%201.41z%22/%3E%0A%3C/svg%3E");
228
- background-position: -5px 0;
229
- left: 10px;
230
  }
231
 
232
  .featherlight-loading .featherlight-previous,
233
  .featherlight-loading .featherlight-next {
234
- display: none;
235
  }
 
 
1
  /**!
2
  * Plugin Name: WP Featherlight
3
+ * Version: 1.0.0
4
  * Author: WP Site Care
5
  * License: GPL-2.0+
6
  */
 
 
7
  /* Base Styles
8
  --------------------------------------------- */
 
9
  .featherlight {
10
+ background: transparent;
11
+ bottom: 0;
12
+ cursor: -webkit-zoom-out;
13
+ cursor: -moz-zoom-out;
14
+ cursor: zoom-out;
15
+ display: none;
16
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
17
+ left: 0;
18
+ position: fixed;
19
+ right: 0;
20
+ text-align: center;
21
+ top: 0;
22
+ white-space: nowrap;
23
+ z-index: 2147483647;
24
  }
25
 
26
  .featherlight * {
27
+ -webkit-box-sizing: border-box;
28
+ -moz-box-sizing: border-box;
29
+ box-sizing: border-box;
30
  }
31
 
32
  .featherlight:last-of-type {
33
+ background: rgba(0, 0, 0, 0.9);
34
  }
35
 
36
+ .featherlight::before {
37
+ content: "";
38
+ display: inline-block;
39
+ height: 100%;
40
+ margin-right: -0.25em;
41
+ vertical-align: middle;
42
  }
43
 
44
  .featherlight .featherlight-content {
45
+ -webkit-animation: fadein 0.5s;
46
+ animation: fadein 0.5s;
47
+ background: #000;
48
+ border: 0;
49
+ cursor: auto;
50
+ display: inline-block;
51
+ max-height: 80%;
52
+ max-width: 90%;
53
+ min-width: inherit;
54
+ overflow: visible;
55
+ padding: 0;
56
+ position: relative;
57
+ text-align: left;
58
+ vertical-align: middle;
59
+ white-space: normal;
60
  }
61
 
62
  @media screen and (min-width: 980px) {
63
+ .featherlight .featherlight-content {
64
+ max-height: 90%;
65
+ }
66
+ }
67
+
68
+ .featherlight .featherlight-content .caption {
69
+ color: #fff;
70
+ font-size: 16px;
71
+ font-weight: lighter;
72
+ line-height: 1.25;
73
+ max-width: 100%;
74
+ overflow: hidden;
75
+ position: absolute;
76
+ text-align: left;
77
+ text-overflow: ellipsis;
78
+ white-space: nowrap;
79
+ }
80
+
81
+ .featherlight .featherlight-content .caption:hover, .featherlight .featherlight-content .caption:focus {
82
+ overflow: visible;
83
+ white-space: normal;
84
  }
85
 
86
  .featherlight .featherlight-inner {
87
+ -webkit-animation: fadein 0.5s;
88
+ animation: fadein 0.5s;
89
+ display: block;
90
  }
91
 
92
  .featherlight .featherlight-close-icon {
93
+ background-color: transparent;
94
+ background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M21%204.41L19.59%203%2012%2010.59%204.41%203%203%204.41%2010.59%2012%203%2019.59%204.41%2021%2012%2013.41%2019.59%2021%2021%2019.59%2013.41%2012%2021%204.41z%22/%3E%0A%3C/svg%3E");
95
+ background-position: center;
96
+ background-repeat: no-repeat;
97
+ -webkit-background-size: 100% auto;
98
+ background-size: 100% auto;
99
+ cursor: pointer;
100
+ display: block;
101
+ height: 30px;
102
+ overflow: hidden;
103
+ position: fixed;
104
+ right: 25px;
105
+ text-align: center;
106
+ text-indent: 100%;
107
+ top: 25px;
108
+ white-space: nowrap;
109
+ width: 30px;
110
+ z-index: 9999;
111
  }
112
 
113
  .featherlight .featherlight-image {
114
+ max-width: 100%;
115
  }
116
 
117
  .featherlight iframe {
118
+ border: 0;
119
  }
120
 
121
+ [data-featherlight] img {
122
+ cursor: -webkit-zoom-in;
123
+ cursor: -moz-zoom-in;
124
+ cursor: zoom-in;
125
  }
126
 
127
  .featherlight-iframe .featherlight-content {
128
+ border-bottom: 0;
129
+ padding: 0;
130
  }
131
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  /* Animated Loader
133
  --------------------------------------------- */
 
134
  @-webkit-keyframes featherlightLoader {
135
+ 0% {
136
+ -webkit-transform: rotate(0deg);
137
+ transform: rotate(0deg);
138
+ }
139
+ 100% {
140
+ -webkit-transform: rotate(360deg);
141
+ transform: rotate(360deg);
142
+ }
 
143
  }
 
144
  @keyframes featherlightLoader {
145
+ 0% {
146
+ -webkit-transform: rotate(0deg);
147
+ transform: rotate(0deg);
148
+ }
149
+ 100% {
150
+ -webkit-transform: rotate(360deg);
151
+ transform: rotate(360deg);
152
+ }
153
+ }
154
+
155
+ @-webkit-keyframes fadein {
156
+ from {
157
+ opacity: 0;
158
+ }
159
+ to {
160
+ opacity: 1;
161
+ }
162
+ }
163
+
164
+ @keyframes fadein {
165
+ from {
166
+ opacity: 0;
167
+ }
168
+ to {
169
+ opacity: 1;
170
+ }
171
  }
172
 
173
  .featherlight-loading .featherlight-content {
174
+ -webkit-animation: featherlightLoader 1s infinite linear;
175
+ animation: featherlightLoader 1s infinite linear;
176
+ background: transparent;
177
+ border: 8px solid #909090;
178
+ border-left-color: #fff;
179
+ font-size: 10px;
180
  }
181
 
182
  .featherlight-loading .featherlight-content,
183
+ .featherlight-loading .featherlight-content::after {
184
+ -webkit-border-radius: 50%;
185
+ border-radius: 50%;
186
+ height: 10em;
187
+ width: 10em;
188
  }
189
 
190
  .featherlight-loading .featherlight-close,
191
  .featherlight-loading .featherlight-inner {
192
+ display: none;
193
  }
194
 
 
195
  /* Gallery
196
  --------------------------------------------- */
 
197
  .featherlight-next,
198
  .featherlight-previous {
199
+ background-color: transparent;
200
+ background-repeat: no-repeat;
201
+ -webkit-background-size: 100% auto;
202
+ background-size: 100% auto;
203
+ cursor: pointer;
204
+ display: block;
205
+ height: 60px;
206
+ margin-top: -30px;
207
+ opacity: 0.4;
208
+ overflow: hidden;
209
+ position: fixed;
210
+ text-indent: 100%;
211
+ top: 50%;
212
+ -webkit-user-select: none;
213
+ -moz-user-select: none;
214
+ -ms-user-select: none;
215
+ user-select: none;
216
+ white-space: nowrap;
217
+ width: 60px;
218
  }
219
 
220
  .featherlight-next span,
221
  .featherlight-previous span {
222
+ display: none;
223
  }
224
 
225
+ .featherlight-next:hover, .featherlight-next:focus,
 
226
  .featherlight-previous:hover,
227
  .featherlight-previous:focus {
228
+ opacity: 1;
229
  }
230
 
231
  /* rtl:ignore */
232
  .featherlight-next {
233
+ background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M8.59%2016.59L13.17%2012%208.59%207.41%2010%206l6%206-6%206-1.41-1.41z%22/%3E%0A%3C/svg%3E");
234
+ background-position: 0 0;
235
+ right: 10px;
236
  }
237
 
238
  /* rtl:ignore */
239
  .featherlight-previous {
240
+ background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M15.41%207.41L10.83%2012l4.58%204.59L14%2018l-6-6%206-6%201.41%201.41z%22/%3E%0A%3C/svg%3E");
241
+ background-position: -5px 0;
242
+ left: 10px;
243
  }
244
 
245
  .featherlight-loading .featherlight-previous,
246
  .featherlight-loading .featherlight-next {
247
+ display: none;
248
  }
249
+
250
+ /*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndwLWZlYXRoZXJsaWdodC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSDtnREFDZ0Q7QUFDaEQ7RUFDRSx3QkFBd0I7RUFDeEIsVUFBVTtFQUNWLHlCQUFpQjtFQUFqQixzQkFBaUI7RUFBakIsaUJBQWlCO0VBQ2pCLGNBQWM7RUFDZCw0REFBNEQ7RUFDNUQsUUFBUTtFQUNSLGdCQUFnQjtFQUNoQixTQUFTO0VBQ1QsbUJBQW1CO0VBQ25CLE9BQU87RUFDUCxvQkFBb0I7RUFDcEIsb0JBQW9CO0NBQ3JCOztBQUVEO0VBQ0UsK0JBQXVCO0tBQXZCLDRCQUF1QjtVQUF2Qix1QkFBdUI7Q0FDeEI7O0FBRUQ7RUFDRSwrQkFBK0I7Q0FDaEM7O0FBRUQ7RUFDRSxZQUFZO0VBQ1osc0JBQXNCO0VBQ3RCLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsdUJBQXVCO0NBQ3hCOztBQUVEO0VBQ0UsK0JBQXVCO1VBQXZCLHVCQUF1QjtFQUN2QixpQkFBaUI7RUFDakIsVUFBVTtFQUNWLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZixtQkFBbUI7RUFDbkIsa0JBQWtCO0VBQ2xCLFdBQVc7RUFDWCxtQkFBbUI7RUFDbkIsaUJBQWlCO0VBQ2pCLHVCQUF1QjtFQUN2QixvQkFBb0I7Q0FDckI7O0FBRUQ7RUFDRTtJQUNFLGdCQUFnQjtHQUNqQjtDQUNGOztBQUVEO0VBQ0UsWUFBWTtFQUNaLGdCQUFnQjtFQUNoQixxQkFBcUI7RUFDckIsa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQUNqQix3QkFBd0I7RUFDeEIsb0JBQW9CO0NBQ3JCOztBQUVEO0VBQ0Usa0JBQWtCO0VBQ2xCLG9CQUFvQjtDQUNyQjs7QUFFRDtFQUNFLCtCQUF1QjtVQUF2Qix1QkFBdUI7RUFDdkIsZUFBZTtDQUNoQjs7QUFFRDtFQUNFLDhCQUE4QjtFQUM5QixtV0FBbVc7RUFDblcsNEJBQTRCO0VBQzVCLDZCQUE2QjtFQUM3QixtQ0FBMkI7VUFBM0IsMkJBQTJCO0VBQzNCLGdCQUFnQjtFQUNoQixlQUFlO0VBQ2YsYUFBYTtFQUNiLGlCQUFpQjtFQUNqQixnQkFBZ0I7RUFDaEIsWUFBWTtFQUNaLG1CQUFtQjtFQUNuQixrQkFBa0I7RUFDbEIsVUFBVTtFQUNWLG9CQUFvQjtFQUNwQixZQUFZO0VBQ1osY0FBYztDQUNmOztBQUVEO0VBQ0UsZ0JBQWdCO0NBQ2pCOztBQUVEO0VBQ0UsVUFBVTtDQUNYOztBQUVEO0VBQ0Usd0JBQWdCO0VBQWhCLHFCQUFnQjtFQUFoQixnQkFBZ0I7Q0FDakI7O0FBRUQ7RUFDRSxpQkFBaUI7RUFDakIsV0FBVztDQUNaOztBQUVEO2dEQUNnRDtBQUNoRDtFQUNFO0lBQ0UsZ0NBQXdCO1lBQXhCLHdCQUF3QjtHQUN6QjtFQUNEO0lBQ0Usa0NBQTBCO1lBQTFCLDBCQUEwQjtHQUMzQjtDQUNGO0FBUEQ7RUFDRTtJQUNFLGdDQUF3QjtZQUF4Qix3QkFBd0I7R0FDekI7RUFDRDtJQUNFLGtDQUEwQjtZQUExQiwwQkFBMEI7R0FDM0I7Q0FDRjs7QUFFRDtFQUNFO0lBQ0UsV0FBVztHQUNaO0VBQ0Q7SUFDRSxXQUFXO0dBQ1o7Q0FDRjs7QUFQRDtFQUNFO0lBQ0UsV0FBVztHQUNaO0VBQ0Q7SUFDRSxXQUFXO0dBQ1o7Q0FDRjs7QUFFRDtFQUNFLHlEQUFpRDtVQUFqRCxpREFBaUQ7RUFDakQsd0JBQXdCO0VBQ3hCLDBCQUEwQjtFQUMxQix3QkFBd0I7RUFDeEIsZ0JBQWdCO0NBQ2pCOztBQUVEOztFQUVFLDJCQUFtQjtVQUFuQixtQkFBbUI7RUFDbkIsYUFBYTtFQUNiLFlBQVk7Q0FDYjs7QUFFRDs7RUFFRSxjQUFjO0NBQ2Y7O0FBRUQ7Z0RBQ2dEO0FBQ2hEOztFQUVFLDhCQUE4QjtFQUM5Qiw2QkFBNkI7RUFDN0IsbUNBQTJCO1VBQTNCLDJCQUEyQjtFQUMzQixnQkFBZ0I7RUFDaEIsZUFBZTtFQUNmLGFBQWE7RUFDYixrQkFBa0I7RUFDbEIsYUFBYTtFQUNiLGlCQUFpQjtFQUNqQixnQkFBZ0I7RUFDaEIsa0JBQWtCO0VBQ2xCLFNBQVM7RUFDVCwwQkFBa0I7S0FBbEIsdUJBQWtCO01BQWxCLHNCQUFrQjtVQUFsQixrQkFBa0I7RUFDbEIsb0JBQW9CO0VBQ3BCLFlBQVk7Q0FDYjs7QUFFRDs7RUFFRSxjQUFjO0NBQ2Y7O0FBRUQ7OztFQUdFLFdBQVc7Q0FDWjs7QUFFRCxnQkFBZ0I7QUFDaEI7RUFDRSw0UUFBNFE7RUFDNVEseUJBQXlCO0VBQ3pCLFlBQVk7Q0FDYjs7QUFFRCxnQkFBZ0I7QUFDaEI7RUFDRSw0UUFBNFE7RUFDNVEsNEJBQTRCO0VBQzVCLFdBQVc7Q0FDWjs7QUFFRDs7RUFFRSxjQUFjO0NBQ2YiLCJmaWxlIjoid3AtZmVhdGhlcmxpZ2h0LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiFcbiAqIFBsdWdpbiBOYW1lOiBXUCBGZWF0aGVybGlnaHRcbiAqIFZlcnNpb246ICAgICAxLjAuMFxuICogQXV0aG9yOiAgICAgIFdQIFNpdGUgQ2FyZVxuICogTGljZW5zZTogICAgIEdQTC0yLjArXG4gKi9cbi8qIEJhc2UgU3R5bGVzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi5mZWF0aGVybGlnaHQge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm90dG9tOiAwO1xuICBjdXJzb3I6IHpvb20tb3V0O1xuICBkaXNwbGF5OiBub25lO1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBsZWZ0OiAwO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHJpZ2h0OiAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRvcDogMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgei1pbmRleDogMjE0NzQ4MzY0Nztcbn1cblxuLmZlYXRoZXJsaWdodCAqIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmZlYXRoZXJsaWdodDpsYXN0LW9mLXR5cGUge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOSk7XG59XG5cbi5mZWF0aGVybGlnaHQ6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW4tcmlnaHQ6IC0wLjI1ZW07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5mZWF0aGVybGlnaHQgLmZlYXRoZXJsaWdodC1jb250ZW50IHtcbiAgYW5pbWF0aW9uOiBmYWRlaW4gMC41cztcbiAgYmFja2dyb3VuZDogIzAwMDtcbiAgYm9yZGVyOiAwO1xuICBjdXJzb3I6IGF1dG87XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LWhlaWdodDogODAlO1xuICBtYXgtd2lkdGg6IDkwJTtcbiAgbWluLXdpZHRoOiBpbmhlcml0O1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA5ODBweCkge1xuICAuZmVhdGhlcmxpZ2h0IC5mZWF0aGVybGlnaHQtY29udGVudCB7XG4gICAgbWF4LWhlaWdodDogOTAlO1xuICB9XG59XG5cbi5mZWF0aGVybGlnaHQgLmZlYXRoZXJsaWdodC1jb250ZW50IC5jYXB0aW9uIHtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IGxpZ2h0ZXI7XG4gIGxpbmUtaGVpZ2h0OiAxLjI1O1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5mZWF0aGVybGlnaHQgLmZlYXRoZXJsaWdodC1jb250ZW50IC5jYXB0aW9uOmhvdmVyLCAuZmVhdGhlcmxpZ2h0IC5mZWF0aGVybGlnaHQtY29udGVudCAuY2FwdGlvbjpmb2N1cyB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuXG4uZmVhdGhlcmxpZ2h0IC5mZWF0aGVybGlnaHQtaW5uZXIge1xuICBhbmltYXRpb246IGZhZGVpbiAwLjVzO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmZlYXRoZXJsaWdodCAuZmVhdGhlcmxpZ2h0LWNsb3NlLWljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMjQlMjIlM0UlMEElMDklM0NwYXRoJTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMGQlM0QlMjJNMjElMjA0LjQxTDE5LjU5JTIwMyUyMDEyJTIwMTAuNTklMjA0LjQxJTIwMyUyMDMlMjA0LjQxJTIwMTAuNTklMjAxMiUyMDMlMjAxOS41OSUyMDQuNDElMjAyMSUyMDEyJTIwMTMuNDElMjAxOS41OSUyMDIxJTIwMjElMjAxOS41OSUyMDEzLjQxJTIwMTIlMjAyMSUyMDQuNDF6JTIyLyUzRSUwQSUzQy9zdmclM0VcIik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogMzBweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMjVweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LWluZGVudDogMTAwJTtcbiAgdG9wOiAyNXB4O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB3aWR0aDogMzBweDtcbiAgei1pbmRleDogOTk5OTtcbn1cblxuLmZlYXRoZXJsaWdodCAuZmVhdGhlcmxpZ2h0LWltYWdlIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4uZmVhdGhlcmxpZ2h0IGlmcmFtZSB7XG4gIGJvcmRlcjogMDtcbn1cblxuW2RhdGEtZmVhdGhlcmxpZ2h0XSBpbWcge1xuICBjdXJzb3I6IHpvb20taW47XG59XG5cbi5mZWF0aGVybGlnaHQtaWZyYW1lIC5mZWF0aGVybGlnaHQtY29udGVudCB7XG4gIGJvcmRlci1ib3R0b206IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8qIEFuaW1hdGVkIExvYWRlclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5Aa2V5ZnJhbWVzIGZlYXRoZXJsaWdodExvYWRlciB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgZmFkZWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG4uZmVhdGhlcmxpZ2h0LWxvYWRpbmcgLmZlYXRoZXJsaWdodC1jb250ZW50IHtcbiAgYW5pbWF0aW9uOiBmZWF0aGVybGlnaHRMb2FkZXIgMXMgaW5maW5pdGUgbGluZWFyO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiA4cHggc29saWQgIzkwOTA5MDtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMTBweDtcbn1cblxuLmZlYXRoZXJsaWdodC1sb2FkaW5nIC5mZWF0aGVybGlnaHQtY29udGVudCxcbi5mZWF0aGVybGlnaHQtbG9hZGluZyAuZmVhdGhlcmxpZ2h0LWNvbnRlbnQ6OmFmdGVyIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBoZWlnaHQ6IDEwZW07XG4gIHdpZHRoOiAxMGVtO1xufVxuXG4uZmVhdGhlcmxpZ2h0LWxvYWRpbmcgLmZlYXRoZXJsaWdodC1jbG9zZSxcbi5mZWF0aGVybGlnaHQtbG9hZGluZyAuZmVhdGhlcmxpZ2h0LWlubmVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogR2FsbGVyeVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4uZmVhdGhlcmxpZ2h0LW5leHQsXG4uZmVhdGhlcmxpZ2h0LXByZXZpb3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSBhdXRvO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDYwcHg7XG4gIG1hcmdpbi10b3A6IC0zMHB4O1xuICBvcGFjaXR5OiAwLjQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdGV4dC1pbmRlbnQ6IDEwMCU7XG4gIHRvcDogNTAlO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgd2lkdGg6IDYwcHg7XG59XG5cbi5mZWF0aGVybGlnaHQtbmV4dCBzcGFuLFxuLmZlYXRoZXJsaWdodC1wcmV2aW91cyBzcGFuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmZlYXRoZXJsaWdodC1uZXh0OmhvdmVyLCAuZmVhdGhlcmxpZ2h0LW5leHQ6Zm9jdXMsXG4uZmVhdGhlcmxpZ2h0LXByZXZpb3VzOmhvdmVyLFxuLmZlYXRoZXJsaWdodC1wcmV2aW91czpmb2N1cyB7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi8qIHJ0bDppZ25vcmUgKi9cbi5mZWF0aGVybGlnaHQtbmV4dCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyNCUyMDI0JTIyJTNFJTBBJTA5JTNDcGF0aCUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjBkJTNEJTIyTTguNTklMjAxNi41OUwxMy4xNyUyMDEyJTIwOC41OSUyMDcuNDElMjAxMCUyMDZsNiUyMDYtNiUyMDYtMS40MS0xLjQxeiUyMi8lM0UlMEElM0Mvc3ZnJTNFXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XG4gIHJpZ2h0OiAxMHB4O1xufVxuXG4vKiBydGw6aWdub3JlICovXG4uZmVhdGhlcmxpZ2h0LXByZXZpb3VzIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMjQlMjIlM0UlMEElMDklM0NwYXRoJTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMGQlM0QlMjJNMTUuNDElMjA3LjQxTDEwLjgzJTIwMTJsNC41OCUyMDQuNTlMMTQlMjAxOGwtNi02JTIwNi02JTIwMS40MSUyMDEuNDF6JTIyLyUzRSUwQSUzQy9zdmclM0VcIik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC01cHggMDtcbiAgbGVmdDogMTBweDtcbn1cblxuLmZlYXRoZXJsaWdodC1sb2FkaW5nIC5mZWF0aGVybGlnaHQtcHJldmlvdXMsXG4uZmVhdGhlcmxpZ2h0LWxvYWRpbmcgLmZlYXRoZXJsaWdodC1uZXh0IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbiJdfQ== */
css/wp-featherlight.min.css CHANGED
@@ -1 +1 @@
1
- .featherlight{background:0 0;cursor:-webkit-zoom-out;cursor:-moz-zoom-out;cursor:zoom-out;display:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;white-space:nowrap;z-index:2147483647}.featherlight *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.featherlight:last-of-type{background:rgba(0,0,0,.9)}.featherlight:before{content:"";display:inline-block;height:100%;margin-right:-.25em;vertical-align:middle}.featherlight .featherlight-content{background:#fff;border:0;cursor:auto;display:inline-block;max-height:80%;max-width:90%;min-width:inherit;overflow:visible;padding:0;position:relative;text-align:left;vertical-align:middle;white-space:normal}@media screen and (min-width:980px){.featherlight .featherlight-content{max-height:90%}}.featherlight .featherlight-inner{display:block}.featherlight .featherlight-close-icon{background:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M21%204.41L19.59%203%2012%2010.59%204.41%203%203%204.41%2010.59%2012%203%2019.59%204.41%2021%2012%2013.41%2019.59%2021%2021%2019.59%2013.41%2012%2021%204.41z%22/%3E%0A%3C/svg%3E) center no-repeat;-webkit-background-size:100% auto;background-size:100% auto;cursor:pointer;display:block;height:30px;overflow:hidden;position:fixed;top:25px;right:25px;text-align:center;text-indent:100%;white-space:nowrap;width:30px;z-index:9999}.featherlight .featherlight-image{max-width:100%}.featherlight iframe{border:0}[data-featherlight]{cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0}.featherlight-content .caption{color:#fff;font-size:16px;font-weight:lighter;max-width:100%;overflow:hidden;position:absolute;text-align:left;text-overflow:ellipsis;white-space:nowrap}.featherlight-content .caption:focus,.featherlight-content .caption:hover{overflow:visible;white-space:normal}@-webkit-keyframes featherlightLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes featherlightLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.featherlight-loading .featherlight-content{-webkit-animation:featherlightLoader 1s infinite linear;animation:featherlightLoader 1s infinite linear;background:0 0;border:8px solid #909090;border-left-color:#fff;font-size:10px}.featherlight-loading .featherlight-content,.featherlight-loading .featherlight-content:after{-webkit-border-radius:50%;border-radius:50%;height:10em;width:10em}.featherlight-loading .featherlight-close,.featherlight-loading .featherlight-inner{display:none}.featherlight-next,.featherlight-previous{background-repeat:no-repeat;-webkit-background-size:100% auto;background-size:100% auto;cursor:pointer;display:block;height:60px;margin-top:-30px;opacity:.4;overflow:hidden;position:fixed;top:50%;text-indent:100%;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;white-space:nowrap;width:60px}.featherlight-loading .featherlight-next,.featherlight-loading .featherlight-previous,.featherlight-next span,.featherlight-previous span{display:none}.featherlight-next:focus,.featherlight-next:hover,.featherlight-previous:focus,.featherlight-previous:hover{opacity:1}.featherlight-next{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M8.59%2016.59L13.17%2012%208.59%207.41%2010%206l6%206-6%206-1.41-1.41z%22/%3E%0A%3C/svg%3E);background-position:0 0;right:10px}.featherlight-previous{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M15.41%207.41L10.83%2012l4.58%204.59L14%2018l-6-6%206-6%201.41%201.41z%22/%3E%0A%3C/svg%3E);background-position:-5px 0;left:10px}
1
+ .featherlight{background:0 0;bottom:0;cursor:-webkit-zoom-out;cursor:-moz-zoom-out;cursor:zoom-out;display:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;left:0;position:fixed;right:0;text-align:center;top:0;white-space:nowrap;z-index:2147483647}.featherlight *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.featherlight:last-of-type{background:rgba(0,0,0,.9)}.featherlight::before{content:"";display:inline-block;height:100%;margin-right:-.25em;vertical-align:middle}.featherlight .featherlight-content{-webkit-animation:fadein .5s;animation:fadein .5s;background:#000;border:0;cursor:auto;display:inline-block;max-height:80%;max-width:90%;min-width:inherit;overflow:visible;padding:0;position:relative;text-align:left;vertical-align:middle;white-space:normal}@media screen and (min-width:980px){.featherlight .featherlight-content{max-height:90%}}.featherlight .featherlight-content .caption{color:#fff;font-size:16px;font-weight:lighter;line-height:1.25;max-width:100%;overflow:hidden;position:absolute;text-align:left;text-overflow:ellipsis;white-space:nowrap}.featherlight .featherlight-content .caption:focus,.featherlight .featherlight-content .caption:hover{overflow:visible;white-space:normal}.featherlight .featherlight-inner{-webkit-animation:fadein .5s;animation:fadein .5s;display:block}.featherlight .featherlight-close-icon{background-color:transparent;background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M21%204.41L19.59%203%2012%2010.59%204.41%203%203%204.41%2010.59%2012%203%2019.59%204.41%2021%2012%2013.41%2019.59%2021%2021%2019.59%2013.41%2012%2021%204.41z%22/%3E%0A%3C/svg%3E);background-position:center;background-repeat:no-repeat;-webkit-background-size:100% auto;background-size:100% auto;cursor:pointer;display:block;height:30px;overflow:hidden;position:fixed;right:25px;text-align:center;text-indent:100%;top:25px;white-space:nowrap;width:30px;z-index:9999}.featherlight .featherlight-image{max-width:100%}.featherlight iframe{border:0}[data-featherlight] img{cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0}@-webkit-keyframes featherlightLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes featherlightLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@keyframes fadein{from{opacity:0}to{opacity:1}}.featherlight-loading .featherlight-content{-webkit-animation:featherlightLoader 1s infinite linear;animation:featherlightLoader 1s infinite linear;background:0 0;border:8px solid #909090;border-left-color:#fff;font-size:10px}.featherlight-loading .featherlight-content,.featherlight-loading .featherlight-content::after{-webkit-border-radius:50%;border-radius:50%;height:10em;width:10em}.featherlight-loading .featherlight-close,.featherlight-loading .featherlight-inner{display:none}.featherlight-next,.featherlight-previous{background-color:transparent;background-repeat:no-repeat;-webkit-background-size:100% auto;background-size:100% auto;cursor:pointer;display:block;height:60px;margin-top:-30px;opacity:.4;overflow:hidden;position:fixed;text-indent:100%;top:50%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;width:60px}.featherlight-loading .featherlight-next,.featherlight-loading .featherlight-previous,.featherlight-next span,.featherlight-previous span{display:none}.featherlight-next:focus,.featherlight-next:hover,.featherlight-previous:focus,.featherlight-previous:hover{opacity:1}.featherlight-next{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M8.59%2016.59L13.17%2012%208.59%207.41%2010%206l6%206-6%206-1.41-1.41z%22/%3E%0A%3C/svg%3E);background-position:0 0;right:10px}.featherlight-previous{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%09%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M15.41%207.41L10.83%2012l4.58%204.59L14%2018l-6-6%206-6%201.41%201.41z%22/%3E%0A%3C/svg%3E);background-position:-5px 0;left:10px}
includes/class-i18n.php CHANGED
@@ -3,22 +3,17 @@
3
  * Load translations for the plugin.
4
  *
5
  * @package WPFeatherlight\Internationalization
6
- * @author Robert Neu
7
- * @copyright Copyright (c) 2015, WP Site Care
8
  * @license GPL-2.0+
9
  * @since 0.3.0
10
  */
11
 
12
- // Prevent direct access.
13
- defined( 'ABSPATH' ) || exit;
14
-
15
  /**
16
  * Based on t5-libraries' language loader by Thomas Scholz
17
  *
18
  * @link https://github.com/toscho/t5-libraries/blob/master/Core/I18n/Language_Loader.php
19
  */
20
  class WP_Featherlight_Language_Loader {
21
-
22
  /**
23
  * Path to the root plugin file.
24
  *
@@ -37,35 +32,13 @@ class WP_Featherlight_Language_Loader {
37
  * Constructor.
38
  *
39
  * @param string $text_domain Name of the text domain.
40
- * @param string $language_dir Path to language files.
41
  */
42
  public function __construct( $text_domain, $plugin_file ) {
43
  $this->text_domain = $text_domain;
44
  $this->plugin_file = $plugin_file;
45
  }
46
 
47
- /**
48
- * Get the class running!
49
- *
50
- * @since 0.3.0
51
- * @access public
52
- * @return void
53
- */
54
- public function run() {
55
- $this->wp_hooks();
56
- }
57
-
58
- /**
59
- * Hook into WordPress.
60
- *
61
- * @since 0.3.0
62
- * @access protected
63
- * @return void
64
- */
65
- protected function wp_hooks() {
66
- add_action( 'admin_head-plugins.php', array( $this, 'load' ) );
67
- }
68
-
69
  /**
70
  * Loads translation file.
71
  *
@@ -103,4 +76,25 @@ class WP_Featherlight_Language_Loader {
103
  return is_textdomain_loaded( $this->text_domain );
104
  }
105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  }
3
  * Load translations for the plugin.
4
  *
5
  * @package WPFeatherlight\Internationalization
6
+ * @copyright Copyright (c) 2016, WP Site Care
 
7
  * @license GPL-2.0+
8
  * @since 0.3.0
9
  */
10
 
 
 
 
11
  /**
12
  * Based on t5-libraries' language loader by Thomas Scholz
13
  *
14
  * @link https://github.com/toscho/t5-libraries/blob/master/Core/I18n/Language_Loader.php
15
  */
16
  class WP_Featherlight_Language_Loader {
 
17
  /**
18
  * Path to the root plugin file.
19
  *
32
  * Constructor.
33
  *
34
  * @param string $text_domain Name of the text domain.
35
+ * @param string $plugin_file Path to language file.
36
  */
37
  public function __construct( $text_domain, $plugin_file ) {
38
  $this->text_domain = $text_domain;
39
  $this->plugin_file = $plugin_file;
40
  }
41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  /**
43
  * Loads translation file.
44
  *
76
  return is_textdomain_loaded( $this->text_domain );
77
  }
78
 
79
+ /**
80
+ * Get the class running!
81
+ *
82
+ * @since 0.3.0
83
+ * @access public
84
+ * @return void
85
+ */
86
+ public function run() {
87
+ _deprecated_function( __METHOD__, '1.0.0' );
88
+ }
89
+
90
+ /**
91
+ * Hook into WordPress.
92
+ *
93
+ * @since 0.3.0
94
+ * @access protected
95
+ * @return void
96
+ */
97
+ protected function wp_hooks() {
98
+ _deprecated_function( __METHOD__, '1.0.0' );
99
+ }
100
  }
includes/class-plugin.php CHANGED
@@ -3,17 +3,17 @@
3
  * WP Featherlight main plugin class.
4
  *
5
  * @package WPFeatherlight
6
- * @author Robert Neu
7
- * @copyright Copyright (c) 2015, WP Site Care
8
  * @license GPL-2.0+
9
  * @since 0.1.0
10
  */
11
 
12
- // Prevent direct access.
13
- defined( 'ABSPATH' ) || exit;
14
 
15
  /**
16
  * Main plugin class.
 
 
17
  */
18
  class WP_Featherlight {
19
 
@@ -23,7 +23,7 @@ class WP_Featherlight {
23
  * @since 0.3.0
24
  * @var string
25
  */
26
- const VERSION = '0.3.0';
27
 
28
  /**
29
  * Property for storing a reference to the main plugin file.
@@ -73,21 +73,17 @@ class WP_Featherlight {
73
  */
74
  public $meta;
75
 
76
- public function __construct( $args ) {
77
- $this->file = $args['file'];
78
- $this->dir = plugin_dir_path( $this->file );
79
- $this->url = plugin_dir_url( $this->file );
80
- }
81
-
82
  /**
83
- * Method to initialize the plugin.
84
  *
85
  * @since 0.1.0
 
86
  * @return void
87
  */
88
- public function run() {
89
- $this->includes();
90
- $this->instantiate();
 
91
  }
92
 
93
  /**
@@ -135,35 +131,193 @@ class WP_Featherlight {
135
  }
136
 
137
  /**
138
- * Require all plugin files.
139
  *
140
  * @since 0.1.0
141
- * @access private
142
  * @return void
143
  */
144
- private function includes() {
145
  require_once $this->dir . 'includes/class-scripts.php';
 
 
 
 
 
 
 
 
 
 
146
  require_once $this->dir . 'includes/class-i18n.php';
147
- if ( is_admin() ) {
148
- require_once $this->dir . 'admin/class-meta.php';
149
- }
150
  }
151
 
152
  /**
153
  * Load all required files and get all of our classes running.
154
  *
155
  * @since 0.1.0
156
- * @access public
157
  * @return void
158
  */
159
- private function instantiate() {
160
- $this->scripts = new WP_Featherlight_Scripts;
161
- $this->scripts->run();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  if ( is_admin() ) {
163
- $this->i18n = new WP_Featherlight_Language_Loader( 'wp-featherlight', $this->file );
164
- $this->meta = new WP_Featherlight_Admin_Meta;
165
- $this->i18n->run();
166
- $this->meta->run();
167
  }
168
  }
169
 
@@ -173,11 +327,9 @@ class WP_Featherlight {
173
  *
174
  * @since 0.1.0
175
  * @access public
176
- * @global $wpdb
177
  * @return void
178
  */
179
  public function activate() {
180
  // Nothing yet.
181
  }
182
-
183
  }
3
  * WP Featherlight main plugin class.
4
  *
5
  * @package WPFeatherlight
6
+ * @copyright Copyright (c) 2016, WP Site Care
 
7
  * @license GPL-2.0+
8
  * @since 0.1.0
9
  */
10
 
11
+ defined( 'WPINC' ) || die;
 
12
 
13
  /**
14
  * Main plugin class.
15
+ *
16
+ * @since 0.1.0
17
  */
18
  class WP_Featherlight {
19
 
23
  * @since 0.3.0
24
  * @var string
25
  */
26
+ const VERSION = '1.0.0';
27
 
28
  /**
29
  * Property for storing a reference to the main plugin file.
73
  */
74
  public $meta;
75
 
 
 
 
 
 
 
76
  /**
77
+ * Set up class properties.
78
  *
79
  * @since 0.1.0
80
+ * @param array $args Arguments to use when setting up class properties.
81
  * @return void
82
  */
83
+ public function __construct( $args ) {
84
+ $this->file = $args['file'];
85
+ $this->dir = plugin_dir_path( $this->file );
86
+ $this->url = plugin_dir_url( $this->file );
87
  }
88
 
89
  /**
131
  }
132
 
133
  /**
134
+ * Require all global plugin files.
135
  *
136
  * @since 0.1.0
137
+ * @access protected
138
  * @return void
139
  */
140
+ protected function includes() {
141
  require_once $this->dir . 'includes/class-scripts.php';
142
+ }
143
+
144
+ /**
145
+ * Require all admin plugin files.
146
+ *
147
+ * @since 0.1.0
148
+ * @access protected
149
+ * @return void
150
+ */
151
+ protected function admin_includes() {
152
  require_once $this->dir . 'includes/class-i18n.php';
153
+ require_once $this->dir . 'admin/class-meta.php';
 
 
154
  }
155
 
156
  /**
157
  * Load all required files and get all of our classes running.
158
  *
159
  * @since 0.1.0
160
+ * @access protected
161
  * @return void
162
  */
163
+ protected function instantiate() {
164
+ $this->scripts = new WP_Featherlight_Scripts( $this->url, self::VERSION );
165
+ }
166
+
167
+ /**
168
+ * Load all required files and get all of our classes running.
169
+ *
170
+ * @since 0.1.0
171
+ * @access protected
172
+ * @return void
173
+ */
174
+ protected function admin_instantiate() {
175
+ $this->i18n = new WP_Featherlight_Language_Loader( 'wp-featherlight', $this->file );
176
+ $this->meta = new WP_Featherlight_Admin_Meta;
177
+ }
178
+
179
+ /**
180
+ * Run all global WordPress hooks.
181
+ *
182
+ * @since 1.0.0
183
+ * @return void
184
+ */
185
+ protected function wp_hooks() {
186
+ /**
187
+ * Callback defined in includes/class-scripts.php
188
+ *
189
+ * @see WP_Featherlight_Scripts::load_css
190
+ */
191
+ add_action( 'wp_enqueue_scripts', array( $this->scripts, 'load_css' ), 20 );
192
+
193
+ /**
194
+ * Callback defined in includes/class-scripts.php
195
+ *
196
+ * @see WP_Featherlight_Scripts::load_js
197
+ */
198
+ add_action( 'wp_enqueue_scripts', array( $this->scripts, 'load_js' ), 20 );
199
+
200
+ /**
201
+ * Callback defined in includes/class-scripts.php
202
+ *
203
+ * @see WP_Featherlight_Scripts::maybe_disable
204
+ */
205
+ add_action( 'wp_enqueue_scripts', array( $this->scripts, 'maybe_disable' ), 10 );
206
+
207
+ /**
208
+ * Callback defined in includes/class-scripts.php
209
+ *
210
+ * @see WP_Featherlight_Scripts::script_helpers
211
+ */
212
+ add_action( 'body_class', array( $this->scripts, 'script_helpers' ), 10 );
213
+ }
214
+
215
+ /**
216
+ * Run all admin WordPress hooks.
217
+ *
218
+ * @since 1.0.0
219
+ * @return void
220
+ */
221
+ protected function admin_wp_hooks() {
222
+ /**
223
+ * Callback defined in includes/class-i18n.php
224
+ *
225
+ * @see WP_Featherlight_Language_Loader::load
226
+ */
227
+ add_action( 'admin_head-plugins.php', array( $this->i18n, 'load' ), 10 );
228
+
229
+ /**
230
+ * Callback defined in includes/class-i18n.php
231
+ *
232
+ * @see WP_Featherlight_Language_Loader::load
233
+ */
234
+ add_action( 'post_submitbox_misc_actions', array( $this->i18n, 'load' ), 5 );
235
+
236
+ /**
237
+ * Callback defined in admin/class-meta.php
238
+ *
239
+ * @see WP_Featherlight_Admin_Meta::meta_box_view
240
+ */
241
+ add_action( 'post_submitbox_misc_actions', array( $this->meta, 'meta_box_view' ), 10 );
242
+
243
+ /**
244
+ * Callback defined in admin/class-meta.php
245
+ *
246
+ * @see WP_Featherlight_Admin_Meta::save_meta_boxes
247
+ */
248
+ add_action( 'save_post', array( $this->meta, 'save_meta_boxes' ), 10 );
249
+ }
250
+
251
+ /**
252
+ * Initialize all global functionality.
253
+ *
254
+ * @since 1.0.0
255
+ * @return void
256
+ */
257
+ public function init() {
258
+ /**
259
+ * Provide reliable access to the plugin's functions and methods before
260
+ * the plugin's global actions, filters, and functionality are initialized.
261
+ *
262
+ * @since 1.0.0
263
+ * @access public
264
+ */
265
+ do_action( 'wp_featherlight_before_init' );
266
+
267
+ $this->includes();
268
+ $this->instantiate();
269
+ $this->wp_hooks();
270
+
271
+ /**
272
+ * Provide reliable access to the plugin's functions and methods after
273
+ * the plugin's global actions, filters, and functionality are initialized.
274
+ *
275
+ * @since 1.0.0
276
+ * @access public
277
+ */
278
+ do_action( 'wp_featherlight_after_init' );
279
+ }
280
+
281
+ /**
282
+ * Initialize all admin functionality.
283
+ *
284
+ * @since 1.0.0
285
+ * @return void
286
+ */
287
+ public function admin_init() {
288
+ /**
289
+ * Provide reliable access to the plugin's functions and methods before
290
+ * the plugin's admin actions, filters, and functionality are initialized.
291
+ *
292
+ * @since 1.0.0
293
+ * @access public
294
+ */
295
+ do_action( 'wp_featherlight_admin_before_init' );
296
+
297
+ $this->admin_includes();
298
+ $this->admin_instantiate();
299
+ $this->admin_wp_hooks();
300
+
301
+ /**
302
+ * Provide reliable access to the plugin's functions and methods after
303
+ * the plugin's admin actions, filters, and functionality are initialized.
304
+ *
305
+ * @since 1.0.0
306
+ * @access public
307
+ */
308
+ do_action( 'wp_featherlight_admin_after_init' );
309
+ }
310
+
311
+ /**
312
+ * Initialize the plugin.
313
+ *
314
+ * @since 0.1.0
315
+ * @return void
316
+ */
317
+ public function run() {
318
+ $this->init();
319
  if ( is_admin() ) {
320
+ $this->admin_init();
 
 
 
321
  }
322
  }
323
 
327
  *
328
  * @since 0.1.0
329
  * @access public
 
330
  * @return void
331
  */
332
  public function activate() {
333
  // Nothing yet.
334
  }
 
335
  }
includes/class-scripts.php CHANGED
@@ -3,52 +3,73 @@
3
  * Methods used for filtering and displaying WP Featherlight images.
4
  *
5
  * @package WPFeatherlight\Scripts
6
- * @author Robert Neu
7
- * @copyright Copyright (c) 2015, WP Site Care
8
  * @license GPL-2.0+
9
  * @since 0.1.0
10
  */
11
 
12
- // Prevent direct access.
13
- defined( 'ABSPATH' ) || exit;
14
-
 
 
15
  class WP_Featherlight_Scripts {
16
 
 
 
 
 
 
 
17
  protected $suffix;
18
 
 
 
 
 
 
 
19
  protected $url;
20
 
 
 
 
 
 
 
21
  protected $version;
22
 
23
- public function __construct() {
24
- $this->suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
25
- $this->url = wp_featherlight()->get_url();
26
- $this->version = wp_featherlight()->get_version();
27
- }
28
-
29
  /**
30
- * Get the class running!
31
  *
32
  * @since 0.1.0
33
- * @access public
 
34
  * @return void
35
  */
36
- public function run() {
37
- $this->wp_hooks();
 
 
38
  }
39
 
40
  /**
41
- * Hook into WordPress.
42
  *
43
  * @since 0.1.0
44
- * @access protected
45
- * @return void
46
  */
47
- protected function wp_hooks() {
48
- add_action( 'wp_enqueue_scripts', array( $this, 'load_css' ), 20 );
49
- add_action( 'wp_enqueue_scripts', array( $this, 'load_js' ), 20 );
50
- add_action( 'wp_enqueue_scripts', array( $this, 'maybe_disable' ), 10 );
51
- add_action( 'body_class', array( $this, 'script_helpers' ), 10 );
 
 
 
 
 
52
  }
53
 
54
  /**
@@ -65,32 +86,17 @@ class WP_Featherlight_Scripts {
65
  if ( ! apply_filters( 'wp_featherlight_load_css', true ) ) {
66
  return;
67
  }
 
68
  wp_enqueue_style(
69
  'wp-featherlight',
70
  "{$this->url}css/wp-featherlight{$this->suffix}.css",
71
  array(),
72
  $this->version
73
  );
 
74
  wp_style_add_data( 'wp-featherlight', 'rtl', 'replace' );
75
- wp_style_add_data( 'wp-featherlight', 'suffix', $this->suffix );
76
- }
77
 
78
- /**
79
- * Load all required JavaScript files on the front end.
80
- *
81
- * Developers can disable our JS by filtering wp_featherlight_load_js to
82
- * false within their theme or plugin.
83
- *
84
- * @since 0.1.0
85
- * @access public
86
- * @return void
87
- */
88
- public function load_js() {
89
- if ( ! apply_filters( 'wp_featherlight_load_js', true ) ) {
90
- return;
91
- }
92
- $this->load_packed_js();
93
- $this->load_unpacked_js();
94
  }
95
 
96
  /**
@@ -109,13 +115,34 @@ class WP_Featherlight_Scripts {
109
  * @return bool
110
  */
111
  protected function enable_packed_js() {
112
- // Never pack JS files if SCRIPT_DEBUG is enabled.
113
  if ( empty( $this->suffix ) ) {
114
  return false;
115
  }
 
116
  return apply_filters( 'wp_featherlight_enable_packed_js', true );
117
  }
118
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  /**
120
  * Load the packed and minified version of our JavaScript files. This is the
121
  * preferred loading method as it saves us from adding a bunch of http
@@ -126,9 +153,6 @@ class WP_Featherlight_Scripts {
126
  * @return void
127
  */
128
  public function load_packed_js() {
129
- if ( ! $this->enable_packed_js() ) {
130
- return;
131
- }
132
  wp_enqueue_script(
133
  'wp-featherlight',
134
  "{$this->url}js/wpFeatherlight.pkgd{$this->suffix}.js",
@@ -146,35 +170,33 @@ class WP_Featherlight_Scripts {
146
  * @return void
147
  */
148
  public function load_unpacked_js() {
149
- if ( $this->enable_packed_js() ) {
150
- return;
151
- }
152
- $suffix = $this->suffix;
153
- $url = "{$this->url}js/src/";
154
  wp_enqueue_script(
155
  'jquery-detect-swipe',
156
- "{$url}vendor/jquery.detect_swipe{$suffix}.js",
157
  array( 'jquery' ),
158
- '2.1.1',
159
  true
160
  );
 
161
  wp_enqueue_script(
162
  'featherlight',
163
- "{$url}vendor/featherlight{$suffix}.js",
164
  array( 'jquery-detect-swipe' ),
165
- '1.3.2',
166
  true
167
  );
 
168
  wp_enqueue_script(
169
  'featherlight-gallery',
170
- "{$url}vendor/featherlight.gallery{$suffix}.js",
171
  array( 'featherlight' ),
172
- '1.3.2',
173
  true
174
  );
 
175
  wp_enqueue_script(
176
  'wp-featherlight',
177
- "{$url}wpFeatherlight{$suffix}.js",
178
  array( 'featherlight-gallery' ),
179
  $this->version,
180
  true
@@ -209,7 +231,29 @@ class WP_Featherlight_Scripts {
209
  if ( apply_filters( 'wp_featherlight_captions', true ) ) {
210
  $classes[] = 'wp-featherlight-captions';
211
  }
 
212
  return $classes;
213
  }
214
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  }
3
  * Methods used for filtering and displaying WP Featherlight images.
4
  *
5
  * @package WPFeatherlight\Scripts
6
+ * @copyright Copyright (c) 2016, WP Site Care
 
7
  * @license GPL-2.0+
8
  * @since 0.1.0
9
  */
10
 
11
+ /**
12
+ * The main featherlight script and style loader.
13
+ *
14
+ * @since 0.1.0
15
+ */
16
  class WP_Featherlight_Scripts {
17
 
18
+ /**
19
+ * Property for storing the script and style suffix.
20
+ *
21
+ * @since 0.3.0
22
+ * @var string
23
+ */
24
  protected $suffix;
25
 
26
+ /**
27
+ * Property for storing the plugin directory URL.
28
+ *
29
+ * @since 0.3.0
30
+ * @var string
31
+ */
32
  protected $url;
33
 
34
+ /**
35
+ * Property for storing the script and style version.
36
+ *
37
+ * @since 0.3.0
38
+ * @var string
39
+ */
40
  protected $version;
41
 
 
 
 
 
 
 
42
  /**
43
+ * Set up class properties.
44
  *
45
  * @since 0.1.0
46
+ * @param string $url The absolute URI path to the plugin directory.
47
+ * @param string $version The version to use when loading scripts.
48
  * @return void
49
  */
50
+ public function __construct( $url, $version ) {
51
+ $this->suffix = $this->get_suffix();
52
+ $this->url = $url;
53
+ $this->version = $version;
54
  }
55
 
56
  /**
57
+ * Helper function for getting the script `.min` suffix for minified files.
58
  *
59
  * @since 0.1.0
60
+ * @access public
61
+ * @return string
62
  */
63
+ public function get_suffix() {
64
+ static $suffix;
65
+
66
+ if ( null === $suffix ) {
67
+ $debug = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG;
68
+ $enabled = (bool) apply_filters( 'wp_featherlight_enable_suffix', ! $debug );
69
+ $suffix = $enabled ? '.min' : '';
70
+ }
71
+
72
+ return $suffix;
73
  }
74
 
75
  /**
86
  if ( ! apply_filters( 'wp_featherlight_load_css', true ) ) {
87
  return;
88
  }
89
+
90
  wp_enqueue_style(
91
  'wp-featherlight',
92
  "{$this->url}css/wp-featherlight{$this->suffix}.css",
93
  array(),
94
  $this->version
95
  );
96
+
97
  wp_style_add_data( 'wp-featherlight', 'rtl', 'replace' );
 
 
98
 
99
+ wp_style_add_data( 'wp-featherlight', 'suffix', $this->suffix );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  }
101
 
102
  /**
115
  * @return bool
116
  */
117
  protected function enable_packed_js() {
 
118
  if ( empty( $this->suffix ) ) {
119
  return false;
120
  }
121
+
122
  return apply_filters( 'wp_featherlight_enable_packed_js', true );
123
  }
124
 
125
+ /**
126
+ * Load all required JavaScript files on the front end.
127
+ *
128
+ * Developers can disable our JS by filtering wp_featherlight_load_js to
129
+ * false within their theme or plugin.
130
+ *
131
+ * @since 0.1.0
132
+ * @access public
133
+ * @return void
134
+ */
135
+ public function load_js() {
136
+ if ( ! apply_filters( 'wp_featherlight_load_js', true ) ) {
137
+ return;
138
+ }
139
+ if ( $this->enable_packed_js() ) {
140
+ $this->load_packed_js();
141
+ } else {
142
+ $this->load_unpacked_js();
143
+ }
144
+ }
145
+
146
  /**
147
  * Load the packed and minified version of our JavaScript files. This is the
148
  * preferred loading method as it saves us from adding a bunch of http
153
  * @return void
154
  */
155
  public function load_packed_js() {
 
 
 
156
  wp_enqueue_script(
157
  'wp-featherlight',
158
  "{$this->url}js/wpFeatherlight.pkgd{$this->suffix}.js",
170
  * @return void
171
  */
172
  public function load_unpacked_js() {
 
 
 
 
 
173
  wp_enqueue_script(
174
  'jquery-detect-swipe',
175
+ "{$this->url}js/src/vendor/jquery.detect_swipe{$this->suffix}.js",
176
  array( 'jquery' ),
177
+ '2.1.3',
178
  true
179
  );
180
+
181
  wp_enqueue_script(
182
  'featherlight',
183
+ "{$this->url}js/src/vendor/featherlight{$this->suffix}.js",
184
  array( 'jquery-detect-swipe' ),
185
+ '1.5.1',
186
  true
187
  );
188
+
189
  wp_enqueue_script(
190
  'featherlight-gallery',
191
+ "{$this->url}js/src/vendor/featherlight.gallery{$this->suffix}.js",
192
  array( 'featherlight' ),
193
+ '1.5.1',
194
  true
195
  );
196
+
197
  wp_enqueue_script(
198
  'wp-featherlight',
199
+ "{$this->url}js/src/wpFeatherlight{$this->suffix}.js",
200
  array( 'featherlight-gallery' ),
201
  $this->version,
202
  true
231
  if ( apply_filters( 'wp_featherlight_captions', true ) ) {
232
  $classes[] = 'wp-featherlight-captions';
233
  }
234
+
235
  return $classes;
236
  }
237
 
238
+ /**
239
+ * Get the class running!
240
+ *
241
+ * @since 0.1.0
242
+ * @access public
243
+ * @return void
244
+ */
245
+ public function run() {
246
+ _deprecated_function( __METHOD__, '1.0.0' );
247
+ }
248
+
249
+ /**
250
+ * Hook into WordPress.
251
+ *
252
+ * @since 0.1.0
253
+ * @access protected
254
+ * @return void
255
+ */
256
+ protected function wp_hooks() {
257
+ _deprecated_function( __METHOD__, '1.0.0' );
258
+ }
259
  }
includes/constants.php CHANGED
@@ -3,15 +3,11 @@
3
  * Define constants to preserve backwards compatibility with older versions.
4
  *
5
  * @package WPFeatherlight
6
- * @author Robert Neu
7
- * @copyright Copyright (c) 2015, WP Site Care
8
  * @license GPL-2.0+
9
  * @since 0.3.0
10
  */
11
 
12
- // Prevent direct access.
13
- defined( 'ABSPATH' ) || exit;
14
-
15
  define( 'WP_FEATHERLIGHT_FILE', wp_featherlight()->get_file() );
16
  define( 'WP_FEATHERLIGHT_VERSION', wp_featherlight()->get_version() );
17
 
3
  * Define constants to preserve backwards compatibility with older versions.
4
  *
5
  * @package WPFeatherlight
6
+ * @copyright Copyright (c) 2016, WP Site Care
 
7
  * @license GPL-2.0+
8
  * @since 0.3.0
9
  */
10
 
 
 
 
11
  define( 'WP_FEATHERLIGHT_FILE', wp_featherlight()->get_file() );
12
  define( 'WP_FEATHERLIGHT_VERSION', wp_featherlight()->get_version() );
13
 
js/src/vendor/featherlight.gallery.js CHANGED
@@ -1,8 +1,8 @@
1
  /**
2
  * Featherlight Gallery – an extension for the ultra slim jQuery lightbox
3
- * Version 1.3.3 - http://noelboss.github.io/featherlight/
4
  *
5
- * Copyright 2015, Noël Raoul Bossart (http://www.noelboss.com)
6
  * MIT Licensed.
7
  **/
8
  (function($) {
@@ -63,6 +63,14 @@
63
  }
64
  return _super(event);
65
  },
 
 
 
 
 
 
 
 
66
  onKeyUp: function(_super, event){
67
  var dir = {
68
  37: 'previous', /* Left arrow */
1
  /**
2
  * Featherlight Gallery – an extension for the ultra slim jQuery lightbox
3
+ * Version 1.5.1 - http://noelboss.github.io/featherlight/
4
  *
5
+ * Copyright 2016, Noël Raoul Bossart (http://www.noelboss.com)
6
  * MIT Licensed.
7
  **/
8
  (function($) {
63
  }
64
  return _super(event);
65
  },
66
+ beforeContent: function(_super, event) {
67
+ var index = this.currentNavigation();
68
+ var len = this.slides().length;
69
+ this.$instance
70
+ .toggleClass(this.namespace+'-first-slide', index === 0)
71
+ .toggleClass(this.namespace+'-last-slide', index === len - 1);
72
+ return _super(event);
73
+ },
74
  onKeyUp: function(_super, event){
75
  var dir = {
76
  37: 'previous', /* Left arrow */
js/src/vendor/featherlight.gallery.min.js CHANGED
@@ -1 +1 @@
1
- !function(a){"use strict";function b(c,d){if(!(this instanceof b)){var e=new b(a.extend({$source:c,$currentTarget:c.first()},d));return e.open(),e}a.featherlight.apply(this,arguments),this.chainCallbacks(h)}var c=function(a){window.console&&window.console.warn&&window.console.warn("FeatherlightGallery: "+a)};if("undefined"==typeof a)return c("Too much lightness, Featherlight needs jQuery.");if(!a.featherlight)return c("Load the featherlight plugin before the gallery plugin");var d="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch,e=a.event&&a.event.special.swipeleft&&a,f=window.Hammer&&function(a){var b=new window.Hammer.Manager(a[0]);return b.add(new window.Hammer.Swipe),b},g=d&&(e||f);d&&!g&&c("No compatible swipe library detected; one must be included before featherlightGallery for swipe motions to navigate the galleries.");var h={afterClose:function(a,b){var c=this;return c.$instance.off("next."+c.namespace+" previous."+c.namespace),c._swiper&&(c._swiper.off("swipeleft",c._swipeleft).off("swiperight",c._swiperight),c._swiper=null),a(b)},beforeOpen:function(a,b){var c=this;return c.$instance.on("next."+c.namespace+" previous."+c.namespace,function(a){var b="next"===a.type?1:-1;c.navigateTo(c.currentNavigation()+b)}),g?c._swiper=g(c.$instance).on("swipeleft",c._swipeleft=function(){c.$instance.trigger("next")}).on("swiperight",c._swiperight=function(){c.$instance.trigger("previous")}):c.$instance.find("."+c.namespace+"-content").append(c.createNavigation("previous")).append(c.createNavigation("next")),a(b)},onKeyUp:function(a,b){var c={37:"previous",39:"next"}[b.keyCode];return c?(this.$instance.trigger(c),!1):a(b)}};a.featherlight.extend(b,{autoBind:"[data-featherlight-gallery]"}),a.extend(b.prototype,{previousIcon:"&#9664;",nextIcon:"&#9654;",galleryFadeIn:100,galleryFadeOut:300,slides:function(){return this.filter?this.$source.find(this.filter):this.$source},images:function(){return c("images is deprecated, please use slides instead"),this.slides()},currentNavigation:function(){return this.slides().index(this.$currentTarget)},navigateTo:function(b){var c=this,d=c.slides(),e=d.length,f=c.$instance.find("."+c.namespace+"-inner");return b=(b%e+e)%e,c.$currentTarget=d.eq(b),c.beforeContent(),a.when(c.getContent(),f.fadeTo(c.galleryFadeOut,.2)).always(function(a){c.setContent(a),c.afterContent(),a.fadeTo(c.galleryFadeIn,1)})},createNavigation:function(b){var c=this;return a('<span title="'+b+'" class="'+this.namespace+"-"+b+'"><span>'+this[b+"Icon"]+"</span></span>").click(function(){a(this).trigger(b+"."+c.namespace)})}}),a.featherlightGallery=b,a.fn.featherlightGallery=function(a){return b.attach(this,a)},a(document).ready(function(){b._onReady()})}(jQuery);
1
+ !function(a){"use strict";function b(c,d){if(!(this instanceof b)){var e=new b(a.extend({$source:c,$currentTarget:c.first()},d));return e.open(),e}a.featherlight.apply(this,arguments),this.chainCallbacks(h)}var c=function(a){window.console&&window.console.warn&&window.console.warn("FeatherlightGallery: "+a)};if("undefined"==typeof a)return c("Too much lightness, Featherlight needs jQuery.");if(!a.featherlight)return c("Load the featherlight plugin before the gallery plugin");var d="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch,e=a.event&&a.event.special.swipeleft&&a,f=window.Hammer&&function(a){var b=new window.Hammer.Manager(a[0]);return b.add(new window.Hammer.Swipe),b},g=d&&(e||f);d&&!g&&c("No compatible swipe library detected; one must be included before featherlightGallery for swipe motions to navigate the galleries.");var h={afterClose:function(a,b){var c=this;return c.$instance.off("next."+c.namespace+" previous."+c.namespace),c._swiper&&(c._swiper.off("swipeleft",c._swipeleft).off("swiperight",c._swiperight),c._swiper=null),a(b)},beforeOpen:function(a,b){var c=this;return c.$instance.on("next."+c.namespace+" previous."+c.namespace,function(a){var b="next"===a.type?1:-1;c.navigateTo(c.currentNavigation()+b)}),g?c._swiper=g(c.$instance).on("swipeleft",c._swipeleft=function(){c.$instance.trigger("next")}).on("swiperight",c._swiperight=function(){c.$instance.trigger("previous")}):c.$instance.find("."+c.namespace+"-content").append(c.createNavigation("previous")).append(c.createNavigation("next")),a(b)},beforeContent:function(a,b){var c=this.currentNavigation(),d=this.slides().length;return this.$instance.toggleClass(this.namespace+"-first-slide",0===c).toggleClass(this.namespace+"-last-slide",c===d-1),a(b)},onKeyUp:function(a,b){var c={37:"previous",39:"next"}[b.keyCode];return c?(this.$instance.trigger(c),!1):a(b)}};a.featherlight.extend(b,{autoBind:"[data-featherlight-gallery]"}),a.extend(b.prototype,{previousIcon:"&#9664;",nextIcon:"&#9654;",galleryFadeIn:100,galleryFadeOut:300,slides:function(){return this.filter?this.$source.find(this.filter):this.$source},images:function(){return c("images is deprecated, please use slides instead"),this.slides()},currentNavigation:function(){return this.slides().index(this.$currentTarget)},navigateTo:function(b){var c=this,d=c.slides(),e=d.length,f=c.$instance.find("."+c.namespace+"-inner");return b=(b%e+e)%e,c.$currentTarget=d.eq(b),c.beforeContent(),a.when(c.getContent(),f.fadeTo(c.galleryFadeOut,.2)).always(function(a){c.setContent(a),c.afterContent(),a.fadeTo(c.galleryFadeIn,1)})},createNavigation:function(b){var c=this;return a('<span title="'+b+'" class="'+this.namespace+"-"+b+'"><span>'+this[b+"Icon"]+"</span></span>").click(function(){a(this).trigger(b+"."+c.namespace)})}}),a.featherlightGallery=b,a.fn.featherlightGallery=function(a){return b.attach(this,a)},a(document).ready(function(){b._onReady()})}(jQuery);
js/src/vendor/featherlight.js CHANGED
@@ -1,8 +1,8 @@
1
  /**
2
  * Featherlight - ultra slim jQuery lightbox
3
- * Version 1.3.3 - http://noelboss.github.io/featherlight/
4
  *
5
- * Copyright 2015, Noël Raoul Bossart (http://www.noelboss.com)
6
  * MIT Licensed.
7
  **/
8
  (function($) {
@@ -94,32 +94,32 @@
94
  constructor: Featherlight,
95
  /*** defaults ***/
96
  /* extend featherlight with defaults and methods */
97
- namespace: 'featherlight', /* Name of the events and css class prefix */
98
- targetAttr: 'data-featherlight', /* Attribute of the triggered element that contains the selector to the lightbox content */
99
- variant: null, /* Class that will be added to change look of the lightbox */
100
- resetCss: false, /* Reset all css */
101
- background: null, /* Custom DOM for the background, wrapper and the closebutton */
102
- openTrigger: 'click', /* Event that triggers the lightbox */
103
- closeTrigger: 'click', /* Event that triggers the closing of the lightbox */
104
- filter: null, /* Selector to filter events. Think $(...).on('click', filter, eventHandler) */
105
- root: 'body', /* Where to append featherlights */
106
- openSpeed: 250, /* Duration of opening animation */
107
- closeSpeed: 250, /* Duration of closing animation */
108
- closeOnClick: 'background', /* Close lightbox on click ('background', 'anywhere' or false) */
109
- closeOnEsc: true, /* Close lightbox when pressing esc */
110
- closeIcon: '&#10005;', /* Close icon */
111
- loading: '', /* Content to show while initial content is loading */
112
- persist: false, /* If set, the content persist and will be shown again when opened again. 'shared' is a special value when binding multiple elements for them to share the same content */
113
- otherClose: null, /* Selector for alternate close buttons (e.g. "a.close") */
114
- beforeOpen: $.noop, /* Called before open. can return false to prevent opening of lightbox. Gets event as parameter, this contains all data */
115
- beforeContent: $.noop, /* Called when content is loaded. Gets event as parameter, this contains all data */
116
- beforeClose: $.noop, /* Called before close. can return false to prevent opening of lightbox. Gets event as parameter, this contains all data */
117
- afterOpen: $.noop, /* Called after open. Gets event as parameter, this contains all data */
118
- afterContent: $.noop, /* Called after content is ready and has been set. Gets event as parameter, this contains all data */
119
- afterClose: $.noop, /* Called after close. Gets event as parameter, this contains all data */
120
- onKeyUp: $.noop, /* Called on key down for the frontmost featherlight */
121
- onResize: $.noop, /* Called after new content and when a window is resized */
122
- type: null, /* Specify type of lightbox. If unset, it will check for the targetAttrs value. */
123
  contentFilters: ['jquery', 'image', 'html', 'ajax', 'iframe', 'text'], /* List of content filters to use to determine the content */
124
 
125
  /*** methods ***/
@@ -152,8 +152,8 @@
152
  if( ('background' === self.closeOnClick && $target.is('.'+self.namespace))
153
  || 'anywhere' === self.closeOnClick
154
  || $target.closest(closeButtonSelector).length ){
 
155
  event.preventDefault();
156
- self.close();
157
  }
158
  });
159
 
@@ -229,7 +229,7 @@
229
  position to any other items added to featherlight-content */
230
  self.$instance.find('.'+self.namespace+'-inner')
231
  .not($content) /* excluded new content, important if persisted */
232
- .slice(1).remove().end() /* In the unexpected event where there are many inner elements, remove all but the first one */
233
  .replaceWith($.contains(self.$instance[0], $content[0]) ? '' : $content);
234
 
235
  self.$content = $content.addClass(self.namespace+'-inner');
@@ -296,6 +296,27 @@
296
  return deferred.promise();
297
  },
298
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  /* Utility function to chain callbacks
300
  [Warning: guru-level]
301
  Used be extensions that want to let users specify callbacks but
@@ -360,8 +381,8 @@
360
  iframe: {
361
  process: function(url) {
362
  var deferred = new $.Deferred();
363
- var $content = $('<iframe/>')
364
- .hide()
365
  .attr('src', url)
366
  .css(structure(this, 'iframe'))
367
  .on('load', function() { deferred.resolve($content.show()); })
@@ -393,7 +414,7 @@
393
  if ($.inArray(name, Klass.functionAttributes) >= 0) { /* jshint -W054 */
394
  val = new Function(val); /* jshint +W054 */
395
  } else {
396
- try { val = $.parseJSON(val); }
397
  catch(e) {}
398
  }
399
  config[name] = val;
@@ -469,9 +490,9 @@
469
  return $.grep(opened, function(fl) { return fl instanceof klass; } );
470
  },
471
 
472
- close: function() {
473
  var cur = this.current();
474
- if(cur) { return cur.close(); }
475
  },
476
 
477
  /* Does the auto binding on startup.
@@ -480,14 +501,21 @@
480
  _onReady: function() {
481
  var Klass = this;
482
  if(Klass.autoBind){
483
- /* First, bind click on document, so it will work for items added dynamically */
484
- Klass.attach($(document), {filter: Klass.autoBind});
485
- /* Auto bound elements with attr-featherlight-filter won't work
486
- (since we already used it to bind on document), so bind these
487
- directly. We can't easily support dynamically added element with filters */
488
- $(Klass.autoBind).filter('[data-featherlight-filter]').each(function(){
489
  Klass.attach($(this));
490
  });
 
 
 
 
 
 
 
 
 
 
 
491
  }
492
  },
493
 
@@ -498,7 +526,7 @@
498
  onKeyUp: function(_super, event){
499
  if(27 === event.keyCode) {
500
  if (this.closeOnEsc) {
501
- this.$instance.find('.'+this.namespace+'-close:first').click();
502
  }
503
  return false;
504
  } else {
@@ -507,19 +535,7 @@
507
  },
508
 
509
  onResize: function(_super, event){
510
- if (this.$content.naturalWidth) {
511
- var w = this.$content.naturalWidth, h = this.$content.naturalHeight;
512
- /* Reset apparent image size first so container grows */
513
- this.$content.css('width', '').css('height', '');
514
- /* Calculate the worst ratio so that dimensions fit */
515
- var ratio = Math.max(
516
- w / parseInt(this.$content.parent().css('width'),10),
517
- h / parseInt(this.$content.parent().css('height'),10));
518
- /* Resize content */
519
- if (ratio > 1) {
520
- this.$content.css('width', '' + w / ratio + 'px').css('height', '' + h / ratio + 'px');
521
- }
522
- }
523
  return _super(event);
524
  },
525
 
1
  /**
2
  * Featherlight - ultra slim jQuery lightbox
3
+ * Version 1.5.1 - http://noelboss.github.io/featherlight/
4
  *
5
+ * Copyright 2016, Noël Raoul Bossart (http://www.noelboss.com)
6
  * MIT Licensed.
7
  **/
8
  (function($) {
94
  constructor: Featherlight,
95
  /*** defaults ***/
96
  /* extend featherlight with defaults and methods */
97
+ namespace: 'featherlight', /* Name of the events and css class prefix */
98
+ targetAttr: 'data-featherlight', /* Attribute of the triggered element that contains the selector to the lightbox content */
99
+ variant: null, /* Class that will be added to change look of the lightbox */
100
+ resetCss: false, /* Reset all css */
101
+ background: null, /* Custom DOM for the background, wrapper and the closebutton */
102
+ openTrigger: 'click', /* Event that triggers the lightbox */
103
+ closeTrigger: 'click', /* Event that triggers the closing of the lightbox */
104
+ filter: null, /* Selector to filter events. Think $(...).on('click', filter, eventHandler) */
105
+ root: 'body', /* Where to append featherlights */
106
+ openSpeed: 250, /* Duration of opening animation */
107
+ closeSpeed: 250, /* Duration of closing animation */
108
+ closeOnClick: 'background', /* Close lightbox on click ('background', 'anywhere' or false) */
109
+ closeOnEsc: true, /* Close lightbox when pressing esc */
110
+ closeIcon: '&#10005;', /* Close icon */
111
+ loading: '', /* Content to show while initial content is loading */
112
+ persist: false, /* If set, the content will persist and will be shown again when opened again. 'shared' is a special value when binding multiple elements for them to share the same content */
113
+ otherClose: null, /* Selector for alternate close buttons (e.g. "a.close") */
114
+ beforeOpen: $.noop, /* Called before open. can return false to prevent opening of lightbox. Gets event as parameter, this contains all data */
115
+ beforeContent: $.noop, /* Called when content is loaded. Gets event as parameter, this contains all data */
116
+ beforeClose: $.noop, /* Called before close. can return false to prevent opening of lightbox. Gets event as parameter, this contains all data */
117
+ afterOpen: $.noop, /* Called after open. Gets event as parameter, this contains all data */
118
+ afterContent: $.noop, /* Called after content is ready and has been set. Gets event as parameter, this contains all data */
119
+ afterClose: $.noop, /* Called after close. Gets event as parameter, this contains all data */
120
+ onKeyUp: $.noop, /* Called on key up for the frontmost featherlight */
121
+ onResize: $.noop, /* Called after new content and when a window is resized */
122
+ type: null, /* Specify type of lightbox. If unset, it will check for the targetAttrs value. */
123
  contentFilters: ['jquery', 'image', 'html', 'ajax', 'iframe', 'text'], /* List of content filters to use to determine the content */
124
 
125
  /*** methods ***/
152
  if( ('background' === self.closeOnClick && $target.is('.'+self.namespace))
153
  || 'anywhere' === self.closeOnClick
154
  || $target.closest(closeButtonSelector).length ){
155
+ self.close(event);
156
  event.preventDefault();
 
157
  }
158
  });
159
 
229
  position to any other items added to featherlight-content */
230
  self.$instance.find('.'+self.namespace+'-inner')
231
  .not($content) /* excluded new content, important if persisted */
232
+ .slice(1).remove().end() /* In the unexpected event where there are many inner elements, remove all but the first one */
233
  .replaceWith($.contains(self.$instance[0], $content[0]) ? '' : $content);
234
 
235
  self.$content = $content.addClass(self.namespace+'-inner');
296
  return deferred.promise();
297
  },
298
 
299
+ /* resizes the content so it fits in visible area and keeps the same aspect ratio.
300
+ Does nothing if either the width or the height is not specified.
301
+ Called automatically on window resize.
302
+ Override if you want different behavior. */
303
+ resize: function(w, h) {
304
+ if (w && h) {
305
+ /* Reset apparent image size first so container grows */
306
+ this.$content.css('width', '').css('height', '');
307
+ /* Calculate the worst ratio so that dimensions fit */
308
+ /* Note: -1 to avoid rounding errors */
309
+ var ratio = Math.max(
310
+ w / (parseInt(this.$content.parent().css('width'),10)-1),
311
+ h / (parseInt(this.$content.parent().css('height'),10)-1));
312
+ /* Resize content */
313
+ if (ratio > 1) {
314
+ ratio = h / Math.floor(h / ratio); /* Round ratio down so height calc works */
315
+ this.$content.css('width', '' + w / ratio + 'px').css('height', '' + h / ratio + 'px');
316
+ }
317
+ }
318
+ },
319
+
320
  /* Utility function to chain callbacks
321
  [Warning: guru-level]
322
  Used be extensions that want to let users specify callbacks but
381
  iframe: {
382
  process: function(url) {
383
  var deferred = new $.Deferred();
384
+ var $content = $('<iframe/>');
385
+ $content.hide()
386
  .attr('src', url)
387
  .css(structure(this, 'iframe'))
388
  .on('load', function() { deferred.resolve($content.show()); })
414
  if ($.inArray(name, Klass.functionAttributes) >= 0) { /* jshint -W054 */
415
  val = new Function(val); /* jshint +W054 */
416
  } else {
417
+ try { val = JSON.parse(val); }
418
  catch(e) {}
419
  }
420
  config[name] = val;
490
  return $.grep(opened, function(fl) { return fl instanceof klass; } );
491
  },
492
 
493
+ close: function(event) {
494
  var cur = this.current();
495
+ if(cur) { return cur.close(event); }
496
  },
497
 
498
  /* Does the auto binding on startup.
501
  _onReady: function() {
502
  var Klass = this;
503
  if(Klass.autoBind){
504
+ /* Bind existing elements */
505
+ $(Klass.autoBind).each(function(){
 
 
 
 
506
  Klass.attach($(this));
507
  });
508
+ /* If a click propagates to the document level, then we have an item that was added later on */
509
+ $(document).on('click', Klass.autoBind, function(evt) {
510
+ if (evt.isDefaultPrevented() || evt.namespace === 'featherlight') {
511
+ return;
512
+ }
513
+ evt.preventDefault();
514
+ /* Bind featherlight */
515
+ Klass.attach($(evt.currentTarget));
516
+ /* Click again; this time our binding will catch it */
517
+ $(evt.target).trigger('click.featherlight');
518
+ });
519
  }
520
  },
521
 
526
  onKeyUp: function(_super, event){
527
  if(27 === event.keyCode) {
528
  if (this.closeOnEsc) {
529
+ $.featherlight.close(event);
530
  }
531
  return false;
532
  } else {
535
  },
536
 
537
  onResize: function(_super, event){
538
+ this.resize(this.$content.naturalWidth, this.$content.naturalHeight);
 
 
 
 
 
 
 
 
 
 
 
 
539
  return _super(event);
540
  },
541
 
js/src/vendor/featherlight.min.js CHANGED
@@ -1 +1 @@
1
- !function(a){"use strict";function b(a,c){if(!(this instanceof b)){var d=new b(a,c);return d.open(),d}this.id=b.id++,this.setup(a,c),this.chainCallbacks(b._callbackChain)}if("undefined"==typeof a)return void("console"in window&&window.console.info("Too much lightness, Featherlight needs jQuery."));var c=[],d=function(b){return c=a.grep(c,function(a){return a!==b&&a.$instance.closest("body").length>0})},e=function(a,b){var c={},d=new RegExp("^"+b+"([A-Z])(.*)");for(var e in a){var f=e.match(d);if(f){var g=(f[1]+f[2].replace(/([A-Z])/g,"-$1")).toLowerCase();c[g]=a[e]}}return c},f={keyup:"onKeyUp",resize:"onResize"},g=function(c){a.each(b.opened().reverse(),function(){return c.isDefaultPrevented()||!1!==this[f[c.type]](c)?void 0:(c.preventDefault(),c.stopPropagation(),!1)})},h=function(c){if(c!==b._globalHandlerInstalled){b._globalHandlerInstalled=c;var d=a.map(f,function(a,c){return c+"."+b.prototype.namespace}).join(" ");a(window)[c?"on":"off"](d,g)}};b.prototype={constructor:b,namespace:"featherlight",targetAttr:"data-featherlight",variant:null,resetCss:!1,background:null,openTrigger:"click",closeTrigger:"click",filter:null,root:"body",openSpeed:250,closeSpeed:250,closeOnClick:"background",closeOnEsc:!0,closeIcon:"&#10005;",loading:"",persist:!1,otherClose:null,beforeOpen:a.noop,beforeContent:a.noop,beforeClose:a.noop,afterOpen:a.noop,afterContent:a.noop,afterClose:a.noop,onKeyUp:a.noop,onResize:a.noop,type:null,contentFilters:["jquery","image","html","ajax","iframe","text"],setup:function(b,c){"object"!=typeof b||b instanceof a!=!1||c||(c=b,b=void 0);var d=a.extend(this,c,{target:b}),e=d.resetCss?d.namespace+"-reset":d.namespace,f=a(d.background||['<div class="'+e+"-loading "+e+'">','<div class="'+e+'-content">','<span class="'+e+"-close-icon "+d.namespace+'-close">',d.closeIcon,"</span>",'<div class="'+d.namespace+'-inner">'+d.loading+"</div>","</div>","</div>"].join("")),g="."+d.namespace+"-close"+(d.otherClose?","+d.otherClose:"");return d.$instance=f.clone().addClass(d.variant),d.$instance.on(d.closeTrigger+"."+d.namespace,function(b){var c=a(b.target);("background"===d.closeOnClick&&c.is("."+d.namespace)||"anywhere"===d.closeOnClick||c.closest(g).length)&&(b.preventDefault(),d.close())}),this},getContent:function(){if(this.persist!==!1&&this.$content)return this.$content;var b=this,c=this.constructor.contentFilters,d=function(a){return b.$currentTarget&&b.$currentTarget.attr(a)},e=d(b.targetAttr),f=b.target||e||"",g=c[b.type];if(!g&&f in c&&(g=c[f],f=b.target&&e),f=f||d("href")||"",!g)for(var h in c)b[h]&&(g=c[h],f=b[h]);if(!g){var i=f;if(f=null,a.each(b.contentFilters,function(){return g=c[this],g.test&&(f=g.test(i)),!f&&g.regex&&i.match&&i.match(g.regex)&&(f=i),!f}),!f)return"console"in window&&window.console.error("Featherlight: no content filter found "+(i?' for "'+i+'"':" (no target specified)")),!1}return g.process.call(b,f)},setContent:function(b){var c=this;return(b.is("iframe")||a("iframe",b).length>0)&&c.$instance.addClass(c.namespace+"-iframe"),c.$instance.removeClass(c.namespace+"-loading"),c.$instance.find("."+c.namespace+"-inner").not(b).slice(1).remove().end().replaceWith(a.contains(c.$instance[0],b[0])?"":b),c.$content=b.addClass(c.namespace+"-inner"),c},open:function(b){var d=this;if(d.$instance.hide().appendTo(d.root),!(b&&b.isDefaultPrevented()||d.beforeOpen(b)===!1)){b&&b.preventDefault();var e=d.getContent();if(e)return c.push(d),h(!0),d.$instance.fadeIn(d.openSpeed),d.beforeContent(b),a.when(e).always(function(a){d.setContent(a),d.afterContent(b)}).then(d.$instance.promise()).done(function(){d.afterOpen(b)})}return d.$instance.detach(),a.Deferred().reject().promise()},close:function(b){var c=this,e=a.Deferred();return c.beforeClose(b)===!1?e.reject():(0===d(c).length&&h(!1),c.$instance.fadeOut(c.closeSpeed,function(){c.$instance.detach(),c.afterClose(b),e.resolve()})),e.promise()},chainCallbacks:function(b){for(var c in b)this[c]=a.proxy(b[c],this,a.proxy(this[c],this))}},a.extend(b,{id:0,autoBind:"[data-featherlight]",defaults:b.prototype,contentFilters:{jquery:{regex:/^[#.]\w/,test:function(b){return b instanceof a&&b},process:function(b){return this.persist!==!1?a(b):a(b).clone(!0)}},image:{regex:/\.(png|jpg|jpeg|gif|tiff|bmp|svg)(\?\S*)?$/i,process:function(b){var c=this,d=a.Deferred(),e=new Image,f=a('<img src="'+b+'" alt="" class="'+c.namespace+'-image" />');return e.onload=function(){f.naturalWidth=e.width,f.naturalHeight=e.height,d.resolve(f)},e.onerror=function(){d.reject(f)},e.src=b,d.promise()}},html:{regex:/^\s*<[\w!][^<]*>/,process:function(b){return a(b)}},ajax:{regex:/./,process:function(b){var c=a.Deferred(),d=a("<div></div>").load(b,function(a,b){"error"!==b&&c.resolve(d.contents()),c.fail()});return c.promise()}},iframe:{process:function(b){var c=new a.Deferred,d=a("<iframe/>").hide().attr("src",b).css(e(this,"iframe")).on("load",function(){c.resolve(d.show())}).appendTo(this.$instance.find("."+this.namespace+"-content"));return c.promise()}},text:{process:function(b){return a("<div>",{text:b})}}},functionAttributes:["beforeOpen","afterOpen","beforeContent","afterContent","beforeClose","afterClose"],readElementConfig:function(b,c){var d=this,e=new RegExp("^data-"+c+"-(.*)"),f={};return b&&b.attributes&&a.each(b.attributes,function(){var b=this.name.match(e);if(b){var c=this.value,g=a.camelCase(b[1]);if(a.inArray(g,d.functionAttributes)>=0)c=new Function(c);else try{c=a.parseJSON(c)}catch(h){}f[g]=c}}),f},extend:function(b,c){var d=function(){this.constructor=b};return d.prototype=this.prototype,b.prototype=new d,b.__super__=this.prototype,a.extend(b,this,c),b.defaults=b.prototype,b},attach:function(b,c,d){var e=this;"object"!=typeof c||c instanceof a!=!1||d||(d=c,c=void 0),d=a.extend({},d);var f,g=d.namespace||e.defaults.namespace,h=a.extend({},e.defaults,e.readElementConfig(b[0],g),d);return b.on(h.openTrigger+"."+h.namespace,h.filter,function(g){var i=a.extend({$source:b,$currentTarget:a(this)},e.readElementConfig(b[0],h.namespace),e.readElementConfig(this,h.namespace),d),j=f||a(this).data("featherlight-persisted")||new e(c,i);"shared"===j.persist?f=j:j.persist!==!1&&a(this).data("featherlight-persisted",j),i.$currentTarget.blur(),j.open(g)}),b},current:function(){var a=this.opened();return a[a.length-1]||null},opened:function(){var b=this;return d(),a.grep(c,function(a){return a instanceof b})},close:function(){var a=this.current();return a?a.close():void 0},_onReady:function(){var b=this;b.autoBind&&(b.attach(a(document),{filter:b.autoBind}),a(b.autoBind).filter("[data-featherlight-filter]").each(function(){b.attach(a(this))}))},_callbackChain:{onKeyUp:function(a,b){return 27===b.keyCode?(this.closeOnEsc&&this.$instance.find("."+this.namespace+"-close:first").click(),!1):a(b)},onResize:function(a,b){if(this.$content.naturalWidth){var c=this.$content.naturalWidth,d=this.$content.naturalHeight;this.$content.css("width","").css("height","");var e=Math.max(c/parseInt(this.$content.parent().css("width"),10),d/parseInt(this.$content.parent().css("height"),10));e>1&&this.$content.css("width",""+c/e+"px").css("height",""+d/e+"px")}return a(b)},afterContent:function(a,b){var c=a(b);return this.onResize(b),c}}}),a.featherlight=b,a.fn.featherlight=function(a,c){return b.attach(this,a,c)},a(document).ready(function(){b._onReady()})}(jQuery);
1
+ !function(a){"use strict";function b(a,c){if(!(this instanceof b)){var d=new b(a,c);return d.open(),d}this.id=b.id++,this.setup(a,c),this.chainCallbacks(b._callbackChain)}if("undefined"==typeof a)return void("console"in window&&window.console.info("Too much lightness, Featherlight needs jQuery."));var c=[],d=function(b){return c=a.grep(c,function(a){return a!==b&&a.$instance.closest("body").length>0})},e=function(a,b){var c={},d=new RegExp("^"+b+"([A-Z])(.*)");for(var e in a){var f=e.match(d);if(f){var g=(f[1]+f[2].replace(/([A-Z])/g,"-$1")).toLowerCase();c[g]=a[e]}}return c},f={keyup:"onKeyUp",resize:"onResize"},g=function(c){a.each(b.opened().reverse(),function(){if(!c.isDefaultPrevented()&&!1===this[f[c.type]](c))return c.preventDefault(),c.stopPropagation(),!1})},h=function(c){if(c!==b._globalHandlerInstalled){b._globalHandlerInstalled=c;var d=a.map(f,function(a,c){return c+"."+b.prototype.namespace}).join(" ");a(window)[c?"on":"off"](d,g)}};b.prototype={constructor:b,namespace:"featherlight",targetAttr:"data-featherlight",variant:null,resetCss:!1,background:null,openTrigger:"click",closeTrigger:"click",filter:null,root:"body",openSpeed:250,closeSpeed:250,closeOnClick:"background",closeOnEsc:!0,closeIcon:"&#10005;",loading:"",persist:!1,otherClose:null,beforeOpen:a.noop,beforeContent:a.noop,beforeClose:a.noop,afterOpen:a.noop,afterContent:a.noop,afterClose:a.noop,onKeyUp:a.noop,onResize:a.noop,type:null,contentFilters:["jquery","image","html","ajax","iframe","text"],setup:function(b,c){"object"!=typeof b||b instanceof a!=!1||c||(c=b,b=void 0);var d=a.extend(this,c,{target:b}),e=d.resetCss?d.namespace+"-reset":d.namespace,f=a(d.background||['<div class="'+e+"-loading "+e+'">','<div class="'+e+'-content">','<span class="'+e+"-close-icon "+d.namespace+'-close">',d.closeIcon,"</span>",'<div class="'+d.namespace+'-inner">'+d.loading+"</div>","</div>","</div>"].join("")),g="."+d.namespace+"-close"+(d.otherClose?","+d.otherClose:"");return d.$instance=f.clone().addClass(d.variant),d.$instance.on(d.closeTrigger+"."+d.namespace,function(b){var c=a(b.target);("background"===d.closeOnClick&&c.is("."+d.namespace)||"anywhere"===d.closeOnClick||c.closest(g).length)&&(d.close(b),b.preventDefault())}),this},getContent:function(){if(this.persist!==!1&&this.$content)return this.$content;var b=this,c=this.constructor.contentFilters,d=function(a){return b.$currentTarget&&b.$currentTarget.attr(a)},e=d(b.targetAttr),f=b.target||e||"",g=c[b.type];if(!g&&f in c&&(g=c[f],f=b.target&&e),f=f||d("href")||"",!g)for(var h in c)b[h]&&(g=c[h],f=b[h]);if(!g){var i=f;if(f=null,a.each(b.contentFilters,function(){return g=c[this],g.test&&(f=g.test(i)),!f&&g.regex&&i.match&&i.match(g.regex)&&(f=i),!f}),!f)return"console"in window&&window.console.error("Featherlight: no content filter found "+(i?' for "'+i+'"':" (no target specified)")),!1}return g.process.call(b,f)},setContent:function(b){var c=this;return(b.is("iframe")||a("iframe",b).length>0)&&c.$instance.addClass(c.namespace+"-iframe"),c.$instance.removeClass(c.namespace+"-loading"),c.$instance.find("."+c.namespace+"-inner").not(b).slice(1).remove().end().replaceWith(a.contains(c.$instance[0],b[0])?"":b),c.$content=b.addClass(c.namespace+"-inner"),c},open:function(b){var d=this;if(d.$instance.hide().appendTo(d.root),!(b&&b.isDefaultPrevented()||d.beforeOpen(b)===!1)){b&&b.preventDefault();var e=d.getContent();if(e)return c.push(d),h(!0),d.$instance.fadeIn(d.openSpeed),d.beforeContent(b),a.when(e).always(function(a){d.setContent(a),d.afterContent(b)}).then(d.$instance.promise()).done(function(){d.afterOpen(b)})}return d.$instance.detach(),a.Deferred().reject().promise()},close:function(b){var c=this,e=a.Deferred();return c.beforeClose(b)===!1?e.reject():(0===d(c).length&&h(!1),c.$instance.fadeOut(c.closeSpeed,function(){c.$instance.detach(),c.afterClose(b),e.resolve()})),e.promise()},resize:function(a,b){if(a&&b){this.$content.css("width","").css("height","");var c=Math.max(a/(parseInt(this.$content.parent().css("width"),10)-1),b/(parseInt(this.$content.parent().css("height"),10)-1));c>1&&(c=b/Math.floor(b/c),this.$content.css("width",""+a/c+"px").css("height",""+b/c+"px"))}},chainCallbacks:function(b){for(var c in b)this[c]=a.proxy(b[c],this,a.proxy(this[c],this))}},a.extend(b,{id:0,autoBind:"[data-featherlight]",defaults:b.prototype,contentFilters:{jquery:{regex:/^[#.]\w/,test:function(b){return b instanceof a&&b},process:function(b){return this.persist!==!1?a(b):a(b).clone(!0)}},image:{regex:/\.(png|jpg|jpeg|gif|tiff|bmp|svg)(\?\S*)?$/i,process:function(b){var c=this,d=a.Deferred(),e=new Image,f=a('<img src="'+b+'" alt="" class="'+c.namespace+'-image" />');return e.onload=function(){f.naturalWidth=e.width,f.naturalHeight=e.height,d.resolve(f)},e.onerror=function(){d.reject(f)},e.src=b,d.promise()}},html:{regex:/^\s*<[\w!][^<]*>/,process:function(b){return a(b)}},ajax:{regex:/./,process:function(b){var c=a.Deferred(),d=a("<div></div>").load(b,function(a,b){"error"!==b&&c.resolve(d.contents()),c.fail()});return c.promise()}},iframe:{process:function(b){var c=new a.Deferred,d=a("<iframe/>");return d.hide().attr("src",b).css(e(this,"iframe")).on("load",function(){c.resolve(d.show())}).appendTo(this.$instance.find("."+this.namespace+"-content")),c.promise()}},text:{process:function(b){return a("<div>",{text:b})}}},functionAttributes:["beforeOpen","afterOpen","beforeContent","afterContent","beforeClose","afterClose"],readElementConfig:function(b,c){var d=this,e=new RegExp("^data-"+c+"-(.*)"),f={};return b&&b.attributes&&a.each(b.attributes,function(){var b=this.name.match(e);if(b){var c=this.value,g=a.camelCase(b[1]);if(a.inArray(g,d.functionAttributes)>=0)c=new Function(c);else try{c=JSON.parse(c)}catch(h){}f[g]=c}}),f},extend:function(b,c){var d=function(){this.constructor=b};return d.prototype=this.prototype,b.prototype=new d,b.__super__=this.prototype,a.extend(b,this,c),b.defaults=b.prototype,b},attach:function(b,c,d){var e=this;"object"!=typeof c||c instanceof a!=!1||d||(d=c,c=void 0),d=a.extend({},d);var f,g=d.namespace||e.defaults.namespace,h=a.extend({},e.defaults,e.readElementConfig(b[0],g),d);return b.on(h.openTrigger+"."+h.namespace,h.filter,function(g){var i=a.extend({$source:b,$currentTarget:a(this)},e.readElementConfig(b[0],h.namespace),e.readElementConfig(this,h.namespace),d),j=f||a(this).data("featherlight-persisted")||new e(c,i);"shared"===j.persist?f=j:j.persist!==!1&&a(this).data("featherlight-persisted",j),i.$currentTarget.blur(),j.open(g)}),b},current:function(){var a=this.opened();return a[a.length-1]||null},opened:function(){var b=this;return d(),a.grep(c,function(a){return a instanceof b})},close:function(a){var b=this.current();if(b)return b.close(a)},_onReady:function(){var b=this;b.autoBind&&(a(b.autoBind).each(function(){b.attach(a(this))}),a(document).on("click",b.autoBind,function(c){c.isDefaultPrevented()||"featherlight"===c.namespace||(c.preventDefault(),b.attach(a(c.currentTarget)),a(c.target).trigger("click.featherlight"))}))},_callbackChain:{onKeyUp:function(b,c){return 27===c.keyCode?(this.closeOnEsc&&a.featherlight.close(c),!1):b(c)},onResize:function(a,b){return this.resize(this.$content.naturalWidth,this.$content.naturalHeight),a(b)},afterContent:function(a,b){var c=a(b);return this.onResize(b),c}}}),a.featherlight=b,a.fn.featherlight=function(a,c){return b.attach(this,a,c)},a(document).ready(function(){b._onReady()})}(jQuery);
js/src/vendor/jquery.detect_swipe.js CHANGED
@@ -1,13 +1,25 @@
1
  /**
2
- * jquery.detectSwipe v2.1.1
3
  * jQuery Plugin to obtain touch gestures from iPhone, iPod Touch, iPad and Android
4
  * http://github.com/marcandre/detect_swipe
5
  * Based on touchwipe by Andreas Waltl, netCU Internetagentur (http://www.netcu.de)
6
  */
7
- (function($) {
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
  $.detectSwipe = {
10
- version: '2.1.1',
11
  enabled: 'ontouchstart' in document.documentElement,
12
  preventDefault: true,
13
  threshold: 20
@@ -35,7 +47,7 @@
35
  dir = dx > 0 ? 'left' : 'right'
36
  }
37
  else if(Math.abs(dy) >= $.detectSwipe.threshold) {
38
- dir = dy > 0 ? 'down' : 'up'
39
  }
40
  if(dir) {
41
  onTouchEnd.call(this);
@@ -55,7 +67,7 @@
55
  }
56
 
57
  function setup() {
58
- this.addEventListener('touchstart', onTouchStart, false);
59
  }
60
 
61
  function teardown() {
@@ -69,4 +81,4 @@
69
  $(this).on('swipe', $.noop);
70
  } };
71
  });
72
- })(jQuery);
1
  /**
2
+ * jquery.detectSwipe v2.1.3
3
  * jQuery Plugin to obtain touch gestures from iPhone, iPod Touch, iPad and Android
4
  * http://github.com/marcandre/detect_swipe
5
  * Based on touchwipe by Andreas Waltl, netCU Internetagentur (http://www.netcu.de)
6
  */
7
+
8
+ (function (factory) {
9
+ if (typeof define === 'function' && define.amd) {
10
+ // AMD. Register as an anonymous module.
11
+ define(['jquery'], factory);
12
+ } else if (typeof exports === 'object') {
13
+ // Node/CommonJS
14
+ module.exports = factory(require('jquery'));
15
+ } else {
16
+ // Browser globals
17
+ factory(jQuery);
18
+ }
19
+ }(function($) {
20
 
21
  $.detectSwipe = {
22
+ version: '2.1.2',
23
  enabled: 'ontouchstart' in document.documentElement,
24
  preventDefault: true,
25
  threshold: 20
47
  dir = dx > 0 ? 'left' : 'right'
48
  }
49
  else if(Math.abs(dy) >= $.detectSwipe.threshold) {
50
+ dir = dy > 0 ? 'up' : 'down'
51
  }
52
  if(dir) {
53
  onTouchEnd.call(this);
67
  }
68
 
69
  function setup() {
70
+ this.addEventListener && this.addEventListener('touchstart', onTouchStart, false);
71
  }
72
 
73
  function teardown() {
81
  $(this).on('swipe', $.noop);
82
  } };
83
  });
84
+ }));
js/src/vendor/jquery.detect_swipe.min.js CHANGED
@@ -1 +1 @@
1
- !function(a){function b(){this.removeEventListener("touchmove",c),this.removeEventListener("touchend",b),h=!1}function c(c){if(a.detectSwipe.preventDefault&&c.preventDefault(),h){var d,e=c.touches[0].pageX,i=c.touches[0].pageY,j=f-e,k=g-i;Math.abs(j)>=a.detectSwipe.threshold?d=j>0?"left":"right":Math.abs(k)>=a.detectSwipe.threshold&&(d=k>0?"down":"up"),d&&(b.call(this),a(this).trigger("swipe",d).trigger("swipe"+d))}}function d(a){1==a.touches.length&&(f=a.touches[0].pageX,g=a.touches[0].pageY,h=!0,this.addEventListener("touchmove",c,!1),this.addEventListener("touchend",b,!1))}function e(){this.addEventListener("touchstart",d,!1)}a.detectSwipe={version:"2.1.1",enabled:"ontouchstart"in document.documentElement,preventDefault:!0,threshold:20};var f,g,h=!1;a.event.special.swipe={setup:e},a.each(["left","up","down","right"],function(){a.event.special["swipe"+this]={setup:function(){a(this).on("swipe",a.noop)}}})}(jQuery);
1
+ !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){function b(){this.removeEventListener("touchmove",c),this.removeEventListener("touchend",b),h=!1}function c(c){if(a.detectSwipe.preventDefault&&c.preventDefault(),h){var d,e=c.touches[0].pageX,i=c.touches[0].pageY,j=f-e,k=g-i;Math.abs(j)>=a.detectSwipe.threshold?d=j>0?"left":"right":Math.abs(k)>=a.detectSwipe.threshold&&(d=k>0?"up":"down"),d&&(b.call(this),a(this).trigger("swipe",d).trigger("swipe"+d))}}function d(a){1==a.touches.length&&(f=a.touches[0].pageX,g=a.touches[0].pageY,h=!0,this.addEventListener("touchmove",c,!1),this.addEventListener("touchend",b,!1))}function e(){this.addEventListener&&this.addEventListener("touchstart",d,!1)}a.detectSwipe={version:"2.1.2",enabled:"ontouchstart"in document.documentElement,preventDefault:!0,threshold:20};var f,g,h=!1;a.event.special.swipe={setup:e},a.each(["left","up","down","right"],function(){a.event.special["swipe"+this]={setup:function(){a(this).on("swipe",a.noop)}}})});
js/src/wpFeatherlight.js CHANGED
@@ -7,7 +7,7 @@
7
  (function( window, $, undefined ) {
8
  'use strict';
9
 
10
- var $body = $( 'body' );
11
 
12
  /**
13
  * Checks href targets to see if a given anchor is linking to an image.
@@ -16,7 +16,7 @@
16
  * @return mixed
17
  */
18
  function testImages( index, element ) {
19
- return /(png|jpg|jpeg|gif|tiff|bmp)$/.test(
20
  $( element ).attr( 'href' ).toLowerCase().split( '?' )[0].split( '#' )[0]
21
  );
22
  }
@@ -30,7 +30,7 @@
30
  * @return void
31
  */
32
  function findImages() {
33
- $( 'a[href]' ).filter( testImages ).attr( 'data-featherlight', 'image' );
34
  }
35
 
36
  /**
@@ -48,11 +48,9 @@
48
  $galleryItems = $galleryObj.find( '.tiled-gallery-item a' );
49
  }
50
 
51
- if ( ! $galleryItems.attr( 'data-featherlight' ) ) {
52
- return;
53
  }
54
-
55
- $galleryItems.featherlightGallery();
56
  }
57
 
58
  /**
@@ -62,13 +60,11 @@
62
  * @return void
63
  */
64
  function findGalleries() {
65
- var $gallery = $( '.gallery, .tiled-gallery' );
66
 
67
- if ( 0 === $gallery.length ) {
68
- return;
69
  }
70
-
71
- $.each( $gallery, buildGalleries );
72
  }
73
 
74
  /**
7
  (function( window, $, undefined ) {
8
  'use strict';
9
 
10
+ var $body = $( document.body );
11
 
12
  /**
13
  * Checks href targets to see if a given anchor is linking to an image.
16
  * @return mixed
17
  */
18
  function testImages( index, element ) {
19
+ return /(.png|.jpg|.jpeg|.gif|.tiff|.bmp)$/.test(
20
  $( element ).attr( 'href' ).toLowerCase().split( '?' )[0].split( '#' )[0]
21
  );
22
  }
30
  * @return void
31
  */
32
  function findImages() {
33
+ $body.find( 'a[href]' ).filter( testImages ).attr( 'data-featherlight', 'image' );
34
  }
35
 
36
  /**
48
  $galleryItems = $galleryObj.find( '.tiled-gallery-item a' );
49
  }
50
 
51
+ if ( $galleryItems.attr( 'data-featherlight' ) ) {
52
+ $galleryItems.featherlightGallery();
53
  }
 
 
54
  }
55
 
56
  /**
60
  * @return void
61
  */
62
  function findGalleries() {
63
+ var $gallery = $body.find( '.gallery, .tiled-gallery' );
64
 
65
+ if ( 0 !== $gallery.length ) {
66
+ $.each( $gallery, buildGalleries );
67
  }
 
 
68
  }
69
 
70
  /**
js/src/wpFeatherlight.min.js CHANGED
@@ -1 +1 @@
1
- !function(a,b,c){"use strict";function d(a,c){return/(png|jpg|jpeg|gif|tiff|bmp)$/.test(b(c).attr("href").toLowerCase().split("?")[0].split("#")[0])}function e(){b("a[href]").filter(d).attr("data-featherlight","image")}function f(a,c){var d=b(c),e=d.find(".gallery-item a");0===e.length&&(e=d.find(".tiled-gallery-item a")),e.attr("data-featherlight")&&e.featherlightGallery()}function g(){var a=b(".gallery, .tiled-gallery");0!==a.length&&b.each(a,f)}function h(){b.featherlight.prototype.afterContent=function(){var a=this.$instance,c=this.$currentTarget,d=c.parent(),e=d.find(".wp-caption-text"),f=c.parents(".gallery-item"),g=c.parents(".tiled-gallery-item");0!==f.length?e=f.find(".wp-caption-text"):0!==g.length&&(e=g.find(".tiled-gallery-caption")),a.find(".caption").remove(),0!==e.length&&b('<div class="caption">').text(e.text()).appendTo(a.find(".featherlight-content"))}}function i(){e(),g(),j.hasClass("wp-featherlight-captions")&&h()}var j=b("body");b(document).ready(function(){i()})}(this,jQuery);
1
+ !function(a,b,c){"use strict";function d(a,c){return/(.png|.jpg|.jpeg|.gif|.tiff|.bmp)$/.test(b(c).attr("href").toLowerCase().split("?")[0].split("#")[0])}function e(){j.find("a[href]").filter(d).attr("data-featherlight","image")}function f(a,c){var d=b(c),e=d.find(".gallery-item a");0===e.length&&(e=d.find(".tiled-gallery-item a")),e.attr("data-featherlight")&&e.featherlightGallery()}function g(){var a=j.find(".gallery, .tiled-gallery");0!==a.length&&b.each(a,f)}function h(){b.featherlight.prototype.afterContent=function(){var a=this.$instance,c=this.$currentTarget,d=c.parent(),e=d.find(".wp-caption-text"),f=c.parents(".gallery-item"),g=c.parents(".tiled-gallery-item");0!==f.length?e=f.find(".wp-caption-text"):0!==g.length&&(e=g.find(".tiled-gallery-caption")),a.find(".caption").remove(),0!==e.length&&b('<div class="caption">').text(e.text()).appendTo(a.find(".featherlight-content"))}}function i(){e(),g(),j.hasClass("wp-featherlight-captions")&&h()}var j=b(document.body);b(document).ready(function(){i()})}(this,jQuery);
js/wpFeatherlight.pkgd.js CHANGED
@@ -1,13 +1,25 @@
1
  /**
2
- * jquery.detectSwipe v2.1.1
3
  * jQuery Plugin to obtain touch gestures from iPhone, iPod Touch, iPad and Android
4
  * http://github.com/marcandre/detect_swipe
5
  * Based on touchwipe by Andreas Waltl, netCU Internetagentur (http://www.netcu.de)
6
  */
7
- (function($) {
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
  $.detectSwipe = {
10
- version: '2.1.1',
11
  enabled: 'ontouchstart' in document.documentElement,
12
  preventDefault: true,
13
  threshold: 20
@@ -35,7 +47,7 @@
35
  dir = dx > 0 ? 'left' : 'right'
36
  }
37
  else if(Math.abs(dy) >= $.detectSwipe.threshold) {
38
- dir = dy > 0 ? 'down' : 'up'
39
  }
40
  if(dir) {
41
  onTouchEnd.call(this);
@@ -55,7 +67,7 @@
55
  }
56
 
57
  function setup() {
58
- this.addEventListener('touchstart', onTouchStart, false);
59
  }
60
 
61
  function teardown() {
@@ -69,13 +81,13 @@
69
  $(this).on('swipe', $.noop);
70
  } };
71
  });
72
- })(jQuery);
73
 
74
  /**
75
  * Featherlight - ultra slim jQuery lightbox
76
- * Version 1.3.3 - http://noelboss.github.io/featherlight/
77
  *
78
- * Copyright 2015, Noël Raoul Bossart (http://www.noelboss.com)
79
  * MIT Licensed.
80
  **/
81
  (function($) {
@@ -167,32 +179,32 @@
167
  constructor: Featherlight,
168
  /*** defaults ***/
169
  /* extend featherlight with defaults and methods */
170
- namespace: 'featherlight', /* Name of the events and css class prefix */
171
- targetAttr: 'data-featherlight', /* Attribute of the triggered element that contains the selector to the lightbox content */
172
- variant: null, /* Class that will be added to change look of the lightbox */
173
- resetCss: false, /* Reset all css */
174
- background: null, /* Custom DOM for the background, wrapper and the closebutton */
175
- openTrigger: 'click', /* Event that triggers the lightbox */
176
- closeTrigger: 'click', /* Event that triggers the closing of the lightbox */
177
- filter: null, /* Selector to filter events. Think $(...).on('click', filter, eventHandler) */
178
- root: 'body', /* Where to append featherlights */
179
- openSpeed: 250, /* Duration of opening animation */
180
- closeSpeed: 250, /* Duration of closing animation */
181
- closeOnClick: 'background', /* Close lightbox on click ('background', 'anywhere' or false) */
182
- closeOnEsc: true, /* Close lightbox when pressing esc */
183
- closeIcon: '&#10005;', /* Close icon */
184
- loading: '', /* Content to show while initial content is loading */
185
- persist: false, /* If set, the content persist and will be shown again when opened again. 'shared' is a special value when binding multiple elements for them to share the same content */
186
- otherClose: null, /* Selector for alternate close buttons (e.g. "a.close") */
187
- beforeOpen: $.noop, /* Called before open. can return false to prevent opening of lightbox. Gets event as parameter, this contains all data */
188
- beforeContent: $.noop, /* Called when content is loaded. Gets event as parameter, this contains all data */
189
- beforeClose: $.noop, /* Called before close. can return false to prevent opening of lightbox. Gets event as parameter, this contains all data */
190
- afterOpen: $.noop, /* Called after open. Gets event as parameter, this contains all data */
191
- afterContent: $.noop, /* Called after content is ready and has been set. Gets event as parameter, this contains all data */
192
- afterClose: $.noop, /* Called after close. Gets event as parameter, this contains all data */
193
- onKeyUp: $.noop, /* Called on key down for the frontmost featherlight */
194
- onResize: $.noop, /* Called after new content and when a window is resized */
195
- type: null, /* Specify type of lightbox. If unset, it will check for the targetAttrs value. */
196
  contentFilters: ['jquery', 'image', 'html', 'ajax', 'iframe', 'text'], /* List of content filters to use to determine the content */
197
 
198
  /*** methods ***/
@@ -225,8 +237,8 @@
225
  if( ('background' === self.closeOnClick && $target.is('.'+self.namespace))
226
  || 'anywhere' === self.closeOnClick
227
  || $target.closest(closeButtonSelector).length ){
 
228
  event.preventDefault();
229
- self.close();
230
  }
231
  });
232
 
@@ -302,7 +314,7 @@
302
  position to any other items added to featherlight-content */
303
  self.$instance.find('.'+self.namespace+'-inner')
304
  .not($content) /* excluded new content, important if persisted */
305
- .slice(1).remove().end() /* In the unexpected event where there are many inner elements, remove all but the first one */
306
  .replaceWith($.contains(self.$instance[0], $content[0]) ? '' : $content);
307
 
308
  self.$content = $content.addClass(self.namespace+'-inner');
@@ -369,6 +381,27 @@
369
  return deferred.promise();
370
  },
371
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
372
  /* Utility function to chain callbacks
373
  [Warning: guru-level]
374
  Used be extensions that want to let users specify callbacks but
@@ -433,8 +466,8 @@
433
  iframe: {
434
  process: function(url) {
435
  var deferred = new $.Deferred();
436
- var $content = $('<iframe/>')
437
- .hide()
438
  .attr('src', url)
439
  .css(structure(this, 'iframe'))
440
  .on('load', function() { deferred.resolve($content.show()); })
@@ -466,7 +499,7 @@
466
  if ($.inArray(name, Klass.functionAttributes) >= 0) { /* jshint -W054 */
467
  val = new Function(val); /* jshint +W054 */
468
  } else {
469
- try { val = $.parseJSON(val); }
470
  catch(e) {}
471
  }
472
  config[name] = val;
@@ -542,9 +575,9 @@
542
  return $.grep(opened, function(fl) { return fl instanceof klass; } );
543
  },
544
 
545
- close: function() {
546
  var cur = this.current();
547
- if(cur) { return cur.close(); }
548
  },
549
 
550
  /* Does the auto binding on startup.
@@ -553,14 +586,21 @@
553
  _onReady: function() {
554
  var Klass = this;
555
  if(Klass.autoBind){
556
- /* First, bind click on document, so it will work for items added dynamically */
557
- Klass.attach($(document), {filter: Klass.autoBind});
558
- /* Auto bound elements with attr-featherlight-filter won't work
559
- (since we already used it to bind on document), so bind these
560
- directly. We can't easily support dynamically added element with filters */
561
- $(Klass.autoBind).filter('[data-featherlight-filter]').each(function(){
562
  Klass.attach($(this));
563
  });
 
 
 
 
 
 
 
 
 
 
 
564
  }
565
  },
566
 
@@ -571,7 +611,7 @@
571
  onKeyUp: function(_super, event){
572
  if(27 === event.keyCode) {
573
  if (this.closeOnEsc) {
574
- this.$instance.find('.'+this.namespace+'-close:first').click();
575
  }
576
  return false;
577
  } else {
@@ -580,19 +620,7 @@
580
  },
581
 
582
  onResize: function(_super, event){
583
- if (this.$content.naturalWidth) {
584
- var w = this.$content.naturalWidth, h = this.$content.naturalHeight;
585
- /* Reset apparent image size first so container grows */
586
- this.$content.css('width', '').css('height', '');
587
- /* Calculate the worst ratio so that dimensions fit */
588
- var ratio = Math.max(
589
- w / parseInt(this.$content.parent().css('width'),10),
590
- h / parseInt(this.$content.parent().css('height'),10));
591
- /* Resize content */
592
- if (ratio > 1) {
593
- this.$content.css('width', '' + w / ratio + 'px').css('height', '' + h / ratio + 'px');
594
- }
595
- }
596
  return _super(event);
597
  },
598
 
@@ -617,9 +645,9 @@
617
 
618
  /**
619
  * Featherlight Gallery – an extension for the ultra slim jQuery lightbox
620
- * Version 1.3.3 - http://noelboss.github.io/featherlight/
621
  *
622
- * Copyright 2015, Noël Raoul Bossart (http://www.noelboss.com)
623
  * MIT Licensed.
624
  **/
625
  (function($) {
@@ -680,6 +708,14 @@
680
  }
681
  return _super(event);
682
  },
 
 
 
 
 
 
 
 
683
  onKeyUp: function(_super, event){
684
  var dir = {
685
  37: 'previous', /* Left arrow */
@@ -780,7 +816,7 @@
780
  (function( window, $, undefined ) {
781
  'use strict';
782
 
783
- var $body = $( 'body' );
784
 
785
  /**
786
  * Checks href targets to see if a given anchor is linking to an image.
@@ -789,7 +825,7 @@
789
  * @return mixed
790
  */
791
  function testImages( index, element ) {
792
- return /(png|jpg|jpeg|gif|tiff|bmp)$/.test(
793
  $( element ).attr( 'href' ).toLowerCase().split( '?' )[0].split( '#' )[0]
794
  );
795
  }
@@ -803,7 +839,7 @@
803
  * @return void
804
  */
805
  function findImages() {
806
- $( 'a[href]' ).filter( testImages ).attr( 'data-featherlight', 'image' );
807
  }
808
 
809
  /**
@@ -821,11 +857,9 @@
821
  $galleryItems = $galleryObj.find( '.tiled-gallery-item a' );
822
  }
823
 
824
- if ( ! $galleryItems.attr( 'data-featherlight' ) ) {
825
- return;
826
  }
827
-
828
- $galleryItems.featherlightGallery();
829
  }
830
 
831
  /**
@@ -835,13 +869,11 @@
835
  * @return void
836
  */
837
  function findGalleries() {
838
- var $gallery = $( '.gallery, .tiled-gallery' );
839
 
840
- if ( 0 === $gallery.length ) {
841
- return;
842
  }
843
-
844
- $.each( $gallery, buildGalleries );
845
  }
846
 
847
  /**
1
  /**
2
+ * jquery.detectSwipe v2.1.3
3
  * jQuery Plugin to obtain touch gestures from iPhone, iPod Touch, iPad and Android
4
  * http://github.com/marcandre/detect_swipe
5
  * Based on touchwipe by Andreas Waltl, netCU Internetagentur (http://www.netcu.de)
6
  */
7
+
8
+ (function (factory) {
9
+ if (typeof define === 'function' && define.amd) {
10
+ // AMD. Register as an anonymous module.
11
+ define(['jquery'], factory);
12
+ } else if (typeof exports === 'object') {
13
+ // Node/CommonJS
14
+ module.exports = factory(require('jquery'));
15
+ } else {
16
+ // Browser globals
17
+ factory(jQuery);
18
+ }
19
+ }(function($) {
20
 
21
  $.detectSwipe = {
22
+ version: '2.1.2',
23
  enabled: 'ontouchstart' in document.documentElement,
24
  preventDefault: true,
25
  threshold: 20
47
  dir = dx > 0 ? 'left' : 'right'
48
  }
49
  else if(Math.abs(dy) >= $.detectSwipe.threshold) {
50
+ dir = dy > 0 ? 'up' : 'down'
51
  }
52
  if(dir) {
53
  onTouchEnd.call(this);
67
  }
68
 
69
  function setup() {
70
+ this.addEventListener && this.addEventListener('touchstart', onTouchStart, false);
71
  }
72
 
73
  function teardown() {
81
  $(this).on('swipe', $.noop);
82
  } };
83
  });
84
+ }));
85
 
86
  /**
87
  * Featherlight - ultra slim jQuery lightbox
88
+ * Version 1.5.1 - http://noelboss.github.io/featherlight/
89
  *
90
+ * Copyright 2016, Noël Raoul Bossart (http://www.noelboss.com)
91
  * MIT Licensed.
92
  **/
93
  (function($) {
179
  constructor: Featherlight,
180
  /*** defaults ***/
181
  /* extend featherlight with defaults and methods */
182
+ namespace: 'featherlight', /* Name of the events and css class prefix */
183
+ targetAttr: 'data-featherlight', /* Attribute of the triggered element that contains the selector to the lightbox content */
184
+ variant: null, /* Class that will be added to change look of the lightbox */
185
+ resetCss: false, /* Reset all css */
186
+ background: null, /* Custom DOM for the background, wrapper and the closebutton */
187
+ openTrigger: 'click', /* Event that triggers the lightbox */
188
+ closeTrigger: 'click', /* Event that triggers the closing of the lightbox */
189
+ filter: null, /* Selector to filter events. Think $(...).on('click', filter, eventHandler) */
190
+ root: 'body', /* Where to append featherlights */
191
+ openSpeed: 250, /* Duration of opening animation */
192
+ closeSpeed: 250, /* Duration of closing animation */
193
+ closeOnClick: 'background', /* Close lightbox on click ('background', 'anywhere' or false) */
194
+ closeOnEsc: true, /* Close lightbox when pressing esc */
195
+ closeIcon: '&#10005;', /* Close icon */
196
+ loading: '', /* Content to show while initial content is loading */
197
+ persist: false, /* If set, the content will persist and will be shown again when opened again. 'shared' is a special value when binding multiple elements for them to share the same content */
198
+ otherClose: null, /* Selector for alternate close buttons (e.g. "a.close") */
199
+ beforeOpen: $.noop, /* Called before open. can return false to prevent opening of lightbox. Gets event as parameter, this contains all data */
200
+ beforeContent: $.noop, /* Called when content is loaded. Gets event as parameter, this contains all data */
201
+ beforeClose: $.noop, /* Called before close. can return false to prevent opening of lightbox. Gets event as parameter, this contains all data */
202
+ afterOpen: $.noop, /* Called after open. Gets event as parameter, this contains all data */
203
+ afterContent: $.noop, /* Called after content is ready and has been set. Gets event as parameter, this contains all data */
204
+ afterClose: $.noop, /* Called after close. Gets event as parameter, this contains all data */
205
+ onKeyUp: $.noop, /* Called on key up for the frontmost featherlight */
206
+ onResize: $.noop, /* Called after new content and when a window is resized */
207
+ type: null, /* Specify type of lightbox. If unset, it will check for the targetAttrs value. */
208
  contentFilters: ['jquery', 'image', 'html', 'ajax', 'iframe', 'text'], /* List of content filters to use to determine the content */
209
 
210
  /*** methods ***/
237
  if( ('background' === self.closeOnClick && $target.is('.'+self.namespace))
238
  || 'anywhere' === self.closeOnClick
239
  || $target.closest(closeButtonSelector).length ){
240
+ self.close(event);
241
  event.preventDefault();
 
242
  }
243
  });
244
 
314
  position to any other items added to featherlight-content */
315
  self.$instance.find('.'+self.namespace+'-inner')
316
  .not($content) /* excluded new content, important if persisted */
317
+ .slice(1).remove().end() /* In the unexpected event where there are many inner elements, remove all but the first one */
318
  .replaceWith($.contains(self.$instance[0], $content[0]) ? '' : $content);
319
 
320
  self.$content = $content.addClass(self.namespace+'-inner');
381
  return deferred.promise();
382
  },
383
 
384
+ /* resizes the content so it fits in visible area and keeps the same aspect ratio.
385
+ Does nothing if either the width or the height is not specified.
386
+ Called automatically on window resize.
387
+ Override if you want different behavior. */
388
+ resize: function(w, h) {
389
+ if (w && h) {
390
+ /* Reset apparent image size first so container grows */
391
+ this.$content.css('width', '').css('height', '');
392
+ /* Calculate the worst ratio so that dimensions fit */
393
+ /* Note: -1 to avoid rounding errors */
394
+ var ratio = Math.max(
395
+ w / (parseInt(this.$content.parent().css('width'),10)-1),
396
+ h / (parseInt(this.$content.parent().css('height'),10)-1));
397
+ /* Resize content */
398
+ if (ratio > 1) {
399
+ ratio = h / Math.floor(h / ratio); /* Round ratio down so height calc works */
400
+ this.$content.css('width', '' + w / ratio + 'px').css('height', '' + h / ratio + 'px');
401
+ }
402
+ }
403
+ },
404
+
405
  /* Utility function to chain callbacks
406
  [Warning: guru-level]
407
  Used be extensions that want to let users specify callbacks but
466
  iframe: {
467
  process: function(url) {
468
  var deferred = new $.Deferred();
469
+ var $content = $('<iframe/>');
470
+ $content.hide()
471
  .attr('src', url)
472
  .css(structure(this, 'iframe'))
473
  .on('load', function() { deferred.resolve($content.show()); })
499
  if ($.inArray(name, Klass.functionAttributes) >= 0) { /* jshint -W054 */
500
  val = new Function(val); /* jshint +W054 */
501
  } else {
502
+ try { val = JSON.parse(val); }
503
  catch(e) {}
504
  }
505
  config[name] = val;
575
  return $.grep(opened, function(fl) { return fl instanceof klass; } );
576
  },
577
 
578
+ close: function(event) {
579
  var cur = this.current();
580
+ if(cur) { return cur.close(event); }
581
  },
582
 
583
  /* Does the auto binding on startup.
586
  _onReady: function() {
587
  var Klass = this;
588
  if(Klass.autoBind){
589
+ /* Bind existing elements */
590
+ $(Klass.autoBind).each(function(){
 
 
 
 
591
  Klass.attach($(this));
592
  });
593
+ /* If a click propagates to the document level, then we have an item that was added later on */
594
+ $(document).on('click', Klass.autoBind, function(evt) {
595
+ if (evt.isDefaultPrevented() || evt.namespace === 'featherlight') {
596
+ return;
597
+ }
598
+ evt.preventDefault();
599
+ /* Bind featherlight */
600
+ Klass.attach($(evt.currentTarget));
601
+ /* Click again; this time our binding will catch it */
602
+ $(evt.target).trigger('click.featherlight');
603
+ });
604
  }
605
  },
606
 
611
  onKeyUp: function(_super, event){
612
  if(27 === event.keyCode) {
613
  if (this.closeOnEsc) {
614
+ $.featherlight.close(event);
615
  }
616
  return false;
617
  } else {
620
  },
621
 
622
  onResize: function(_super, event){
623
+ this.resize(this.$content.naturalWidth, this.$content.naturalHeight);
 
 
 
 
 
 
 
 
 
 
 
 
624
  return _super(event);
625
  },
626
 
645
 
646
  /**
647
  * Featherlight Gallery – an extension for the ultra slim jQuery lightbox
648
+ * Version 1.5.1 - http://noelboss.github.io/featherlight/
649
  *
650
+ * Copyright 2016, Noël Raoul Bossart (http://www.noelboss.com)
651
  * MIT Licensed.
652
  **/
653
  (function($) {
708
  }
709
  return _super(event);
710
  },
711
+ beforeContent: function(_super, event) {
712
+ var index = this.currentNavigation();
713
+ var len = this.slides().length;
714
+ this.$instance
715
+ .toggleClass(this.namespace+'-first-slide', index === 0)
716
+ .toggleClass(this.namespace+'-last-slide', index === len - 1);
717
+ return _super(event);
718
+ },
719
  onKeyUp: function(_super, event){
720
  var dir = {
721
  37: 'previous', /* Left arrow */
816
  (function( window, $, undefined ) {
817
  'use strict';
818
 
819
+ var $body = $( document.body );
820
 
821
  /**
822
  * Checks href targets to see if a given anchor is linking to an image.
825
  * @return mixed
826
  */
827
  function testImages( index, element ) {
828
+ return /(.png|.jpg|.jpeg|.gif|.tiff|.bmp)$/.test(
829
  $( element ).attr( 'href' ).toLowerCase().split( '?' )[0].split( '#' )[0]
830
  );
831
  }
839
  * @return void
840
  */
841
  function findImages() {
842
+ $body.find( 'a[href]' ).filter( testImages ).attr( 'data-featherlight', 'image' );
843
  }
844
 
845
  /**
857
  $galleryItems = $galleryObj.find( '.tiled-gallery-item a' );
858
  }
859
 
860
+ if ( $galleryItems.attr( 'data-featherlight' ) ) {
861
+ $galleryItems.featherlightGallery();
862
  }
 
 
863
  }
864
 
865
  /**
869
  * @return void
870
  */
871
  function findGalleries() {
872
+ var $gallery = $body.find( '.gallery, .tiled-gallery' );
873
 
874
+ if ( 0 !== $gallery.length ) {
875
+ $.each( $gallery, buildGalleries );
876
  }
 
 
877
  }
878
 
879
  /**
js/wpFeatherlight.pkgd.min.js CHANGED
@@ -1 +1 @@
1
- !function(a){function b(){this.removeEventListener("touchmove",c),this.removeEventListener("touchend",b),h=!1}function c(c){if(a.detectSwipe.preventDefault&&c.preventDefault(),h){var d,e=c.touches[0].pageX,i=c.touches[0].pageY,j=f-e,k=g-i;Math.abs(j)>=a.detectSwipe.threshold?d=j>0?"left":"right":Math.abs(k)>=a.detectSwipe.threshold&&(d=k>0?"down":"up"),d&&(b.call(this),a(this).trigger("swipe",d).trigger("swipe"+d))}}function d(a){1==a.touches.length&&(f=a.touches[0].pageX,g=a.touches[0].pageY,h=!0,this.addEventListener("touchmove",c,!1),this.addEventListener("touchend",b,!1))}function e(){this.addEventListener("touchstart",d,!1)}a.detectSwipe={version:"2.1.1",enabled:"ontouchstart"in document.documentElement,preventDefault:!0,threshold:20};var f,g,h=!1;a.event.special.swipe={setup:e},a.each(["left","up","down","right"],function(){a.event.special["swipe"+this]={setup:function(){a(this).on("swipe",a.noop)}}})}(jQuery),function(a){"use strict";function b(a,c){if(!(this instanceof b)){var d=new b(a,c);return d.open(),d}this.id=b.id++,this.setup(a,c),this.chainCallbacks(b._callbackChain)}if("undefined"==typeof a)return void("console"in window&&window.console.info("Too much lightness, Featherlight needs jQuery."));var c=[],d=function(b){return c=a.grep(c,function(a){return a!==b&&a.$instance.closest("body").length>0})},e=function(a,b){var c={},d=new RegExp("^"+b+"([A-Z])(.*)");for(var e in a){var f=e.match(d);if(f){var g=(f[1]+f[2].replace(/([A-Z])/g,"-$1")).toLowerCase();c[g]=a[e]}}return c},f={keyup:"onKeyUp",resize:"onResize"},g=function(c){a.each(b.opened().reverse(),function(){return c.isDefaultPrevented()||!1!==this[f[c.type]](c)?void 0:(c.preventDefault(),c.stopPropagation(),!1)})},h=function(c){if(c!==b._globalHandlerInstalled){b._globalHandlerInstalled=c;var d=a.map(f,function(a,c){return c+"."+b.prototype.namespace}).join(" ");a(window)[c?"on":"off"](d,g)}};b.prototype={constructor:b,namespace:"featherlight",targetAttr:"data-featherlight",variant:null,resetCss:!1,background:null,openTrigger:"click",closeTrigger:"click",filter:null,root:"body",openSpeed:250,closeSpeed:250,closeOnClick:"background",closeOnEsc:!0,closeIcon:"&#10005;",loading:"",persist:!1,otherClose:null,beforeOpen:a.noop,beforeContent:a.noop,beforeClose:a.noop,afterOpen:a.noop,afterContent:a.noop,afterClose:a.noop,onKeyUp:a.noop,onResize:a.noop,type:null,contentFilters:["jquery","image","html","ajax","iframe","text"],setup:function(b,c){"object"!=typeof b||b instanceof a!=!1||c||(c=b,b=void 0);var d=a.extend(this,c,{target:b}),e=d.resetCss?d.namespace+"-reset":d.namespace,f=a(d.background||['<div class="'+e+"-loading "+e+'">','<div class="'+e+'-content">','<span class="'+e+"-close-icon "+d.namespace+'-close">',d.closeIcon,"</span>",'<div class="'+d.namespace+'-inner">'+d.loading+"</div>","</div>","</div>"].join("")),g="."+d.namespace+"-close"+(d.otherClose?","+d.otherClose:"");return d.$instance=f.clone().addClass(d.variant),d.$instance.on(d.closeTrigger+"."+d.namespace,function(b){var c=a(b.target);("background"===d.closeOnClick&&c.is("."+d.namespace)||"anywhere"===d.closeOnClick||c.closest(g).length)&&(b.preventDefault(),d.close())}),this},getContent:function(){if(this.persist!==!1&&this.$content)return this.$content;var b=this,c=this.constructor.contentFilters,d=function(a){return b.$currentTarget&&b.$currentTarget.attr(a)},e=d(b.targetAttr),f=b.target||e||"",g=c[b.type];if(!g&&f in c&&(g=c[f],f=b.target&&e),f=f||d("href")||"",!g)for(var h in c)b[h]&&(g=c[h],f=b[h]);if(!g){var i=f;if(f=null,a.each(b.contentFilters,function(){return g=c[this],g.test&&(f=g.test(i)),!f&&g.regex&&i.match&&i.match(g.regex)&&(f=i),!f}),!f)return"console"in window&&window.console.error("Featherlight: no content filter found "+(i?' for "'+i+'"':" (no target specified)")),!1}return g.process.call(b,f)},setContent:function(b){var c=this;return(b.is("iframe")||a("iframe",b).length>0)&&c.$instance.addClass(c.namespace+"-iframe"),c.$instance.removeClass(c.namespace+"-loading"),c.$instance.find("."+c.namespace+"-inner").not(b).slice(1).remove().end().replaceWith(a.contains(c.$instance[0],b[0])?"":b),c.$content=b.addClass(c.namespace+"-inner"),c},open:function(b){var d=this;if(d.$instance.hide().appendTo(d.root),!(b&&b.isDefaultPrevented()||d.beforeOpen(b)===!1)){b&&b.preventDefault();var e=d.getContent();if(e)return c.push(d),h(!0),d.$instance.fadeIn(d.openSpeed),d.beforeContent(b),a.when(e).always(function(a){d.setContent(a),d.afterContent(b)}).then(d.$instance.promise()).done(function(){d.afterOpen(b)})}return d.$instance.detach(),a.Deferred().reject().promise()},close:function(b){var c=this,e=a.Deferred();return c.beforeClose(b)===!1?e.reject():(0===d(c).length&&h(!1),c.$instance.fadeOut(c.closeSpeed,function(){c.$instance.detach(),c.afterClose(b),e.resolve()})),e.promise()},chainCallbacks:function(b){for(var c in b)this[c]=a.proxy(b[c],this,a.proxy(this[c],this))}},a.extend(b,{id:0,autoBind:"[data-featherlight]",defaults:b.prototype,contentFilters:{jquery:{regex:/^[#.]\w/,test:function(b){return b instanceof a&&b},process:function(b){return this.persist!==!1?a(b):a(b).clone(!0)}},image:{regex:/\.(png|jpg|jpeg|gif|tiff|bmp|svg)(\?\S*)?$/i,process:function(b){var c=this,d=a.Deferred(),e=new Image,f=a('<img src="'+b+'" alt="" class="'+c.namespace+'-image" />');return e.onload=function(){f.naturalWidth=e.width,f.naturalHeight=e.height,d.resolve(f)},e.onerror=function(){d.reject(f)},e.src=b,d.promise()}},html:{regex:/^\s*<[\w!][^<]*>/,process:function(b){return a(b)}},ajax:{regex:/./,process:function(b){var c=a.Deferred(),d=a("<div></div>").load(b,function(a,b){"error"!==b&&c.resolve(d.contents()),c.fail()});return c.promise()}},iframe:{process:function(b){var c=new a.Deferred,d=a("<iframe/>").hide().attr("src",b).css(e(this,"iframe")).on("load",function(){c.resolve(d.show())}).appendTo(this.$instance.find("."+this.namespace+"-content"));return c.promise()}},text:{process:function(b){return a("<div>",{text:b})}}},functionAttributes:["beforeOpen","afterOpen","beforeContent","afterContent","beforeClose","afterClose"],readElementConfig:function(b,c){var d=this,e=new RegExp("^data-"+c+"-(.*)"),f={};return b&&b.attributes&&a.each(b.attributes,function(){var b=this.name.match(e);if(b){var c=this.value,g=a.camelCase(b[1]);if(a.inArray(g,d.functionAttributes)>=0)c=new Function(c);else try{c=a.parseJSON(c)}catch(h){}f[g]=c}}),f},extend:function(b,c){var d=function(){this.constructor=b};return d.prototype=this.prototype,b.prototype=new d,b.__super__=this.prototype,a.extend(b,this,c),b.defaults=b.prototype,b},attach:function(b,c,d){var e=this;"object"!=typeof c||c instanceof a!=!1||d||(d=c,c=void 0),d=a.extend({},d);var f,g=d.namespace||e.defaults.namespace,h=a.extend({},e.defaults,e.readElementConfig(b[0],g),d);return b.on(h.openTrigger+"."+h.namespace,h.filter,function(g){var i=a.extend({$source:b,$currentTarget:a(this)},e.readElementConfig(b[0],h.namespace),e.readElementConfig(this,h.namespace),d),j=f||a(this).data("featherlight-persisted")||new e(c,i);"shared"===j.persist?f=j:j.persist!==!1&&a(this).data("featherlight-persisted",j),i.$currentTarget.blur(),j.open(g)}),b},current:function(){var a=this.opened();return a[a.length-1]||null},opened:function(){var b=this;return d(),a.grep(c,function(a){return a instanceof b})},close:function(){var a=this.current();return a?a.close():void 0},_onReady:function(){var b=this;b.autoBind&&(b.attach(a(document),{filter:b.autoBind}),a(b.autoBind).filter("[data-featherlight-filter]").each(function(){b.attach(a(this))}))},_callbackChain:{onKeyUp:function(a,b){return 27===b.keyCode?(this.closeOnEsc&&this.$instance.find("."+this.namespace+"-close:first").click(),!1):a(b)},onResize:function(a,b){if(this.$content.naturalWidth){var c=this.$content.naturalWidth,d=this.$content.naturalHeight;this.$content.css("width","").css("height","");var e=Math.max(c/parseInt(this.$content.parent().css("width"),10),d/parseInt(this.$content.parent().css("height"),10));e>1&&this.$content.css("width",""+c/e+"px").css("height",""+d/e+"px")}return a(b)},afterContent:function(a,b){var c=a(b);return this.onResize(b),c}}}),a.featherlight=b,a.fn.featherlight=function(a,c){return b.attach(this,a,c)},a(document).ready(function(){b._onReady()})}(jQuery),function(a){"use strict";function b(c,d){if(!(this instanceof b)){var e=new b(a.extend({$source:c,$currentTarget:c.first()},d));return e.open(),e}a.featherlight.apply(this,arguments),this.chainCallbacks(h)}var c=function(a){window.console&&window.console.warn&&window.console.warn("FeatherlightGallery: "+a)};if("undefined"==typeof a)return c("Too much lightness, Featherlight needs jQuery.");if(!a.featherlight)return c("Load the featherlight plugin before the gallery plugin");var d="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch,e=a.event&&a.event.special.swipeleft&&a,f=window.Hammer&&function(a){var b=new window.Hammer.Manager(a[0]);return b.add(new window.Hammer.Swipe),b},g=d&&(e||f);d&&!g&&c("No compatible swipe library detected; one must be included before featherlightGallery for swipe motions to navigate the galleries.");var h={afterClose:function(a,b){var c=this;return c.$instance.off("next."+c.namespace+" previous."+c.namespace),c._swiper&&(c._swiper.off("swipeleft",c._swipeleft).off("swiperight",c._swiperight),c._swiper=null),a(b)},beforeOpen:function(a,b){var c=this;return c.$instance.on("next."+c.namespace+" previous."+c.namespace,function(a){var b="next"===a.type?1:-1;c.navigateTo(c.currentNavigation()+b)}),g?c._swiper=g(c.$instance).on("swipeleft",c._swipeleft=function(){c.$instance.trigger("next")}).on("swiperight",c._swiperight=function(){c.$instance.trigger("previous")}):c.$instance.find("."+c.namespace+"-content").append(c.createNavigation("previous")).append(c.createNavigation("next")),a(b)},onKeyUp:function(a,b){var c={37:"previous",39:"next"}[b.keyCode];return c?(this.$instance.trigger(c),!1):a(b)}};a.featherlight.extend(b,{autoBind:"[data-featherlight-gallery]"}),a.extend(b.prototype,{previousIcon:"&#9664;",nextIcon:"&#9654;",galleryFadeIn:100,galleryFadeOut:300,slides:function(){return this.filter?this.$source.find(this.filter):this.$source},images:function(){return c("images is deprecated, please use slides instead"),this.slides()},currentNavigation:function(){return this.slides().index(this.$currentTarget)},navigateTo:function(b){var c=this,d=c.slides(),e=d.length,f=c.$instance.find("."+c.namespace+"-inner");return b=(b%e+e)%e,c.$currentTarget=d.eq(b),c.beforeContent(),a.when(c.getContent(),f.fadeTo(c.galleryFadeOut,.2)).always(function(a){c.setContent(a),c.afterContent(),a.fadeTo(c.galleryFadeIn,1)})},createNavigation:function(b){var c=this;return a('<span title="'+b+'" class="'+this.namespace+"-"+b+'"><span>'+this[b+"Icon"]+"</span></span>").click(function(){a(this).trigger(b+"."+c.namespace)})}}),a.featherlightGallery=b,a.fn.featherlightGallery=function(a){return b.attach(this,a)},a(document).ready(function(){b._onReady()})}(jQuery),function(a,b,c){"use strict";function d(a,c){return/(png|jpg|jpeg|gif|tiff|bmp)$/.test(b(c).attr("href").toLowerCase().split("?")[0].split("#")[0])}function e(){b("a[href]").filter(d).attr("data-featherlight","image")}function f(a,c){var d=b(c),e=d.find(".gallery-item a");0===e.length&&(e=d.find(".tiled-gallery-item a")),e.attr("data-featherlight")&&e.featherlightGallery()}function g(){var a=b(".gallery, .tiled-gallery");0!==a.length&&b.each(a,f)}function h(){b.featherlight.prototype.afterContent=function(){var a=this.$instance,c=this.$currentTarget,d=c.parent(),e=d.find(".wp-caption-text"),f=c.parents(".gallery-item"),g=c.parents(".tiled-gallery-item");0!==f.length?e=f.find(".wp-caption-text"):0!==g.length&&(e=g.find(".tiled-gallery-caption")),a.find(".caption").remove(),0!==e.length&&b('<div class="caption">').text(e.text()).appendTo(a.find(".featherlight-content"))}}function i(){e(),g(),j.hasClass("wp-featherlight-captions")&&h()}var j=b("body");b(document).ready(function(){i()})}(this,jQuery);
1
+ !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){function b(){this.removeEventListener("touchmove",c),this.removeEventListener("touchend",b),h=!1}function c(c){if(a.detectSwipe.preventDefault&&c.preventDefault(),h){var d,e=c.touches[0].pageX,i=c.touches[0].pageY,j=f-e,k=g-i;Math.abs(j)>=a.detectSwipe.threshold?d=j>0?"left":"right":Math.abs(k)>=a.detectSwipe.threshold&&(d=k>0?"up":"down"),d&&(b.call(this),a(this).trigger("swipe",d).trigger("swipe"+d))}}function d(a){1==a.touches.length&&(f=a.touches[0].pageX,g=a.touches[0].pageY,h=!0,this.addEventListener("touchmove",c,!1),this.addEventListener("touchend",b,!1))}function e(){this.addEventListener&&this.addEventListener("touchstart",d,!1)}a.detectSwipe={version:"2.1.2",enabled:"ontouchstart"in document.documentElement,preventDefault:!0,threshold:20};var f,g,h=!1;a.event.special.swipe={setup:e},a.each(["left","up","down","right"],function(){a.event.special["swipe"+this]={setup:function(){a(this).on("swipe",a.noop)}}})}),function(a){"use strict";function b(a,c){if(!(this instanceof b)){var d=new b(a,c);return d.open(),d}this.id=b.id++,this.setup(a,c),this.chainCallbacks(b._callbackChain)}if("undefined"==typeof a)return void("console"in window&&window.console.info("Too much lightness, Featherlight needs jQuery."));var c=[],d=function(b){return c=a.grep(c,function(a){return a!==b&&a.$instance.closest("body").length>0})},e=function(a,b){var c={},d=new RegExp("^"+b+"([A-Z])(.*)");for(var e in a){var f=e.match(d);if(f){var g=(f[1]+f[2].replace(/([A-Z])/g,"-$1")).toLowerCase();c[g]=a[e]}}return c},f={keyup:"onKeyUp",resize:"onResize"},g=function(c){a.each(b.opened().reverse(),function(){if(!c.isDefaultPrevented()&&!1===this[f[c.type]](c))return c.preventDefault(),c.stopPropagation(),!1})},h=function(c){if(c!==b._globalHandlerInstalled){b._globalHandlerInstalled=c;var d=a.map(f,function(a,c){return c+"."+b.prototype.namespace}).join(" ");a(window)[c?"on":"off"](d,g)}};b.prototype={constructor:b,namespace:"featherlight",targetAttr:"data-featherlight",variant:null,resetCss:!1,background:null,openTrigger:"click",closeTrigger:"click",filter:null,root:"body",openSpeed:250,closeSpeed:250,closeOnClick:"background",closeOnEsc:!0,closeIcon:"&#10005;",loading:"",persist:!1,otherClose:null,beforeOpen:a.noop,beforeContent:a.noop,beforeClose:a.noop,afterOpen:a.noop,afterContent:a.noop,afterClose:a.noop,onKeyUp:a.noop,onResize:a.noop,type:null,contentFilters:["jquery","image","html","ajax","iframe","text"],setup:function(b,c){"object"!=typeof b||b instanceof a!=!1||c||(c=b,b=void 0);var d=a.extend(this,c,{target:b}),e=d.resetCss?d.namespace+"-reset":d.namespace,f=a(d.background||['<div class="'+e+"-loading "+e+'">','<div class="'+e+'-content">','<span class="'+e+"-close-icon "+d.namespace+'-close">',d.closeIcon,"</span>",'<div class="'+d.namespace+'-inner">'+d.loading+"</div>","</div>","</div>"].join("")),g="."+d.namespace+"-close"+(d.otherClose?","+d.otherClose:"");return d.$instance=f.clone().addClass(d.variant),d.$instance.on(d.closeTrigger+"."+d.namespace,function(b){var c=a(b.target);("background"===d.closeOnClick&&c.is("."+d.namespace)||"anywhere"===d.closeOnClick||c.closest(g).length)&&(d.close(b),b.preventDefault())}),this},getContent:function(){if(this.persist!==!1&&this.$content)return this.$content;var b=this,c=this.constructor.contentFilters,d=function(a){return b.$currentTarget&&b.$currentTarget.attr(a)},e=d(b.targetAttr),f=b.target||e||"",g=c[b.type];if(!g&&f in c&&(g=c[f],f=b.target&&e),f=f||d("href")||"",!g)for(var h in c)b[h]&&(g=c[h],f=b[h]);if(!g){var i=f;if(f=null,a.each(b.contentFilters,function(){return g=c[this],g.test&&(f=g.test(i)),!f&&g.regex&&i.match&&i.match(g.regex)&&(f=i),!f}),!f)return"console"in window&&window.console.error("Featherlight: no content filter found "+(i?' for "'+i+'"':" (no target specified)")),!1}return g.process.call(b,f)},setContent:function(b){var c=this;return(b.is("iframe")||a("iframe",b).length>0)&&c.$instance.addClass(c.namespace+"-iframe"),c.$instance.removeClass(c.namespace+"-loading"),c.$instance.find("."+c.namespace+"-inner").not(b).slice(1).remove().end().replaceWith(a.contains(c.$instance[0],b[0])?"":b),c.$content=b.addClass(c.namespace+"-inner"),c},open:function(b){var d=this;if(d.$instance.hide().appendTo(d.root),!(b&&b.isDefaultPrevented()||d.beforeOpen(b)===!1)){b&&b.preventDefault();var e=d.getContent();if(e)return c.push(d),h(!0),d.$instance.fadeIn(d.openSpeed),d.beforeContent(b),a.when(e).always(function(a){d.setContent(a),d.afterContent(b)}).then(d.$instance.promise()).done(function(){d.afterOpen(b)})}return d.$instance.detach(),a.Deferred().reject().promise()},close:function(b){var c=this,e=a.Deferred();return c.beforeClose(b)===!1?e.reject():(0===d(c).length&&h(!1),c.$instance.fadeOut(c.closeSpeed,function(){c.$instance.detach(),c.afterClose(b),e.resolve()})),e.promise()},resize:function(a,b){if(a&&b){this.$content.css("width","").css("height","");var c=Math.max(a/(parseInt(this.$content.parent().css("width"),10)-1),b/(parseInt(this.$content.parent().css("height"),10)-1));c>1&&(c=b/Math.floor(b/c),this.$content.css("width",""+a/c+"px").css("height",""+b/c+"px"))}},chainCallbacks:function(b){for(var c in b)this[c]=a.proxy(b[c],this,a.proxy(this[c],this))}},a.extend(b,{id:0,autoBind:"[data-featherlight]",defaults:b.prototype,contentFilters:{jquery:{regex:/^[#.]\w/,test:function(b){return b instanceof a&&b},process:function(b){return this.persist!==!1?a(b):a(b).clone(!0)}},image:{regex:/\.(png|jpg|jpeg|gif|tiff|bmp|svg)(\?\S*)?$/i,process:function(b){var c=this,d=a.Deferred(),e=new Image,f=a('<img src="'+b+'" alt="" class="'+c.namespace+'-image" />');return e.onload=function(){f.naturalWidth=e.width,f.naturalHeight=e.height,d.resolve(f)},e.onerror=function(){d.reject(f)},e.src=b,d.promise()}},html:{regex:/^\s*<[\w!][^<]*>/,process:function(b){return a(b)}},ajax:{regex:/./,process:function(b){var c=a.Deferred(),d=a("<div></div>").load(b,function(a,b){"error"!==b&&c.resolve(d.contents()),c.fail()});return c.promise()}},iframe:{process:function(b){var c=new a.Deferred,d=a("<iframe/>");return d.hide().attr("src",b).css(e(this,"iframe")).on("load",function(){c.resolve(d.show())}).appendTo(this.$instance.find("."+this.namespace+"-content")),c.promise()}},text:{process:function(b){return a("<div>",{text:b})}}},functionAttributes:["beforeOpen","afterOpen","beforeContent","afterContent","beforeClose","afterClose"],readElementConfig:function(b,c){var d=this,e=new RegExp("^data-"+c+"-(.*)"),f={};return b&&b.attributes&&a.each(b.attributes,function(){var b=this.name.match(e);if(b){var c=this.value,g=a.camelCase(b[1]);if(a.inArray(g,d.functionAttributes)>=0)c=new Function(c);else try{c=JSON.parse(c)}catch(h){}f[g]=c}}),f},extend:function(b,c){var d=function(){this.constructor=b};return d.prototype=this.prototype,b.prototype=new d,b.__super__=this.prototype,a.extend(b,this,c),b.defaults=b.prototype,b},attach:function(b,c,d){var e=this;"object"!=typeof c||c instanceof a!=!1||d||(d=c,c=void 0),d=a.extend({},d);var f,g=d.namespace||e.defaults.namespace,h=a.extend({},e.defaults,e.readElementConfig(b[0],g),d);return b.on(h.openTrigger+"."+h.namespace,h.filter,function(g){var i=a.extend({$source:b,$currentTarget:a(this)},e.readElementConfig(b[0],h.namespace),e.readElementConfig(this,h.namespace),d),j=f||a(this).data("featherlight-persisted")||new e(c,i);"shared"===j.persist?f=j:j.persist!==!1&&a(this).data("featherlight-persisted",j),i.$currentTarget.blur(),j.open(g)}),b},current:function(){var a=this.opened();return a[a.length-1]||null},opened:function(){var b=this;return d(),a.grep(c,function(a){return a instanceof b})},close:function(a){var b=this.current();if(b)return b.close(a)},_onReady:function(){var b=this;b.autoBind&&(a(b.autoBind).each(function(){b.attach(a(this))}),a(document).on("click",b.autoBind,function(c){c.isDefaultPrevented()||"featherlight"===c.namespace||(c.preventDefault(),b.attach(a(c.currentTarget)),a(c.target).trigger("click.featherlight"))}))},_callbackChain:{onKeyUp:function(b,c){return 27===c.keyCode?(this.closeOnEsc&&a.featherlight.close(c),!1):b(c)},onResize:function(a,b){return this.resize(this.$content.naturalWidth,this.$content.naturalHeight),a(b)},afterContent:function(a,b){var c=a(b);return this.onResize(b),c}}}),a.featherlight=b,a.fn.featherlight=function(a,c){return b.attach(this,a,c)},a(document).ready(function(){b._onReady()})}(jQuery),function(a){"use strict";function b(c,d){if(!(this instanceof b)){var e=new b(a.extend({$source:c,$currentTarget:c.first()},d));return e.open(),e}a.featherlight.apply(this,arguments),this.chainCallbacks(h)}var c=function(a){window.console&&window.console.warn&&window.console.warn("FeatherlightGallery: "+a)};if("undefined"==typeof a)return c("Too much lightness, Featherlight needs jQuery.");if(!a.featherlight)return c("Load the featherlight plugin before the gallery plugin");var d="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch,e=a.event&&a.event.special.swipeleft&&a,f=window.Hammer&&function(a){var b=new window.Hammer.Manager(a[0]);return b.add(new window.Hammer.Swipe),b},g=d&&(e||f);d&&!g&&c("No compatible swipe library detected; one must be included before featherlightGallery for swipe motions to navigate the galleries.");var h={afterClose:function(a,b){var c=this;return c.$instance.off("next."+c.namespace+" previous."+c.namespace),c._swiper&&(c._swiper.off("swipeleft",c._swipeleft).off("swiperight",c._swiperight),c._swiper=null),a(b)},beforeOpen:function(a,b){var c=this;return c.$instance.on("next."+c.namespace+" previous."+c.namespace,function(a){var b="next"===a.type?1:-1;c.navigateTo(c.currentNavigation()+b)}),g?c._swiper=g(c.$instance).on("swipeleft",c._swipeleft=function(){c.$instance.trigger("next")}).on("swiperight",c._swiperight=function(){c.$instance.trigger("previous")}):c.$instance.find("."+c.namespace+"-content").append(c.createNavigation("previous")).append(c.createNavigation("next")),a(b)},beforeContent:function(a,b){var c=this.currentNavigation(),d=this.slides().length;return this.$instance.toggleClass(this.namespace+"-first-slide",0===c).toggleClass(this.namespace+"-last-slide",c===d-1),a(b)},onKeyUp:function(a,b){var c={37:"previous",39:"next"}[b.keyCode];return c?(this.$instance.trigger(c),!1):a(b)}};a.featherlight.extend(b,{autoBind:"[data-featherlight-gallery]"}),a.extend(b.prototype,{previousIcon:"&#9664;",nextIcon:"&#9654;",galleryFadeIn:100,galleryFadeOut:300,slides:function(){return this.filter?this.$source.find(this.filter):this.$source},images:function(){return c("images is deprecated, please use slides instead"),this.slides()},currentNavigation:function(){return this.slides().index(this.$currentTarget)},navigateTo:function(b){var c=this,d=c.slides(),e=d.length,f=c.$instance.find("."+c.namespace+"-inner");return b=(b%e+e)%e,c.$currentTarget=d.eq(b),c.beforeContent(),a.when(c.getContent(),f.fadeTo(c.galleryFadeOut,.2)).always(function(a){c.setContent(a),c.afterContent(),a.fadeTo(c.galleryFadeIn,1)})},createNavigation:function(b){var c=this;return a('<span title="'+b+'" class="'+this.namespace+"-"+b+'"><span>'+this[b+"Icon"]+"</span></span>").click(function(){a(this).trigger(b+"."+c.namespace)})}}),a.featherlightGallery=b,a.fn.featherlightGallery=function(a){return b.attach(this,a)},a(document).ready(function(){b._onReady()})}(jQuery),function(a,b,c){"use strict";function d(a,c){return/(.png|.jpg|.jpeg|.gif|.tiff|.bmp)$/.test(b(c).attr("href").toLowerCase().split("?")[0].split("#")[0])}function e(){j.find("a[href]").filter(d).attr("data-featherlight","image")}function f(a,c){var d=b(c),e=d.find(".gallery-item a");0===e.length&&(e=d.find(".tiled-gallery-item a")),e.attr("data-featherlight")&&e.featherlightGallery()}function g(){var a=j.find(".gallery, .tiled-gallery");0!==a.length&&b.each(a,f)}function h(){b.featherlight.prototype.afterContent=function(){var a=this.$instance,c=this.$currentTarget,d=c.parent(),e=d.find(".wp-caption-text"),f=c.parents(".gallery-item"),g=c.parents(".tiled-gallery-item");0!==f.length?e=f.find(".wp-caption-text"):0!==g.length&&(e=g.find(".tiled-gallery-caption")),a.find(".caption").remove(),0!==e.length&&b('<div class="caption">').text(e.text()).appendTo(a.find(".featherlight-content"))}}function i(){e(),g(),j.hasClass("wp-featherlight-captions")&&h()}var j=b(document.body);b(document).ready(function(){i()})}(this,jQuery);
languages/wp-featherlight-pl_PL.mo ADDED
Binary file
languages/wp-featherlight.pot CHANGED
@@ -1,17 +1,17 @@
1
- # Copyright (C) 2015 WP Site Care
2
  # This file is distributed under the GPL-2.0+.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: WP Featherlight 0.3.0\n"
6
  "Report-Msgid-Bugs-To: Robert Neu <translations@wpsitecare.com>\n"
7
- "POT-Creation-Date: 2015-09-02 02:22:17+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2015-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: Robert Neu <translations@wpsitecare.com>\n"
13
  "Language-Team: Robert Neu <translations@wpsitecare.com>\n"
14
- "X-Generator: grunt-wp-i18n 0.5.3\n"
15
  "X-Poedit-KeywordsList: "
16
  "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
17
  "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
@@ -24,11 +24,7 @@ msgstr ""
24
  "X-Poedit-Bookmarks: \n"
25
  "X-Textdomain-Support: yes\n"
26
 
27
- #: admin/class-meta.php:118
28
- msgid "WP Featherlight Options"
29
- msgstr ""
30
-
31
- #: admin/templates/metabox-sidebar.php:15
32
  msgid "Disable lightbox"
33
  msgstr ""
34
 
@@ -37,7 +33,7 @@ msgid "WP Featherlight"
37
  msgstr ""
38
 
39
  #. Plugin URI of the plugin/theme
40
- msgid "http://www.wpsitecare.com/wp-featherlight/"
41
  msgstr ""
42
 
43
  #. Description of the plugin/theme
@@ -49,5 +45,5 @@ msgid "WP Site Care"
49
  msgstr ""
50
 
51
  #. Author URI of the plugin/theme
52
- msgid "http://www.wpsitecare.com"
53
  msgstr ""
1
+ # Copyright (C) 2016 WP Site Care
2
  # This file is distributed under the GPL-2.0+.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: WP Featherlight 1.0.0\n"
6
  "Report-Msgid-Bugs-To: Robert Neu <translations@wpsitecare.com>\n"
7
+ "POT-Creation-Date: 2016-11-11 01:43:30+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: Robert Neu <translations@wpsitecare.com>\n"
13
  "Language-Team: Robert Neu <translations@wpsitecare.com>\n"
14
+ "X-Generator: grunt-wp-i18n 0.5.4\n"
15
  "X-Poedit-KeywordsList: "
16
  "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
17
  "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
24
  "X-Poedit-Bookmarks: \n"
25
  "X-Textdomain-Support: yes\n"
26
 
27
+ #: admin/views/meta-box.php:15
 
 
 
 
28
  msgid "Disable lightbox"
29
  msgstr ""
30
 
33
  msgstr ""
34
 
35
  #. Plugin URI of the plugin/theme
36
+ msgid "https://www.wpsitecare.com/wp-featherlight/"
37
  msgstr ""
38
 
39
  #. Description of the plugin/theme
45
  msgstr ""
46
 
47
  #. Author URI of the plugin/theme
48
+ msgid "https://www.wpsitecare.com"
49
  msgstr ""
readme.txt CHANGED
@@ -2,9 +2,9 @@
2
 
3
  Contributors: fatmedia, wpsitecare
4
  Tags: lightbox, jquery lightbox, jquery, gallery, image, lightbox images, image lightbox, lightbox gallery, lightbox image, lightbox popup, featherlight, photo gallery, popup image, popup images, popup lightbox, responsive lightbox, swipe, wordpress image lightbox, wordpress lightbox, wordpress slideshow lightbox, photography, images, minimal, responsive, photo, photos
5
- Requires at least: 4.3
6
- Tested up to: 4.5.2
7
- Stable tag: 0.3.0
8
  License: GPL-2.0+
9
 
10
  An ultra lightweight jQuery lightbox for WordPress images and galleries.
@@ -21,8 +21,6 @@ There are no settings for WP Featherlight, so you should be able to install it w
21
 
22
  If you find a display problem, it may be related to your theme but please [open an support request](https://wordpress.org/support/plugin/wp-featherlight) about it so we can look into it. For more information about the Featherlight script itself, check out their [GitHub plugin page](http://noelboss.github.io/featherlight/).
23
 
24
- WP Featherlight was built by <a rel="friend" href="http://www.wpsitecare.com">WordPress support</a> company WP Site Care. If you're interested in choosing the <a rel="friend" href="http://www.wpsitecare.com/best-wordpress-plugins/">best WordPress plugins</a> or need to find the fastest <a rel="friend" href="http://www.wpsitecare.com/performance-of-7-top-wordpress-hosting-companies-compared/">WordPress hosting</a> provider, check out our blog and subscribe for new articles every week!
25
-
26
  = Developer Notes =
27
 
28
  While there are no options in the plugin, there are some handy filters to modify the default behavior. As of `0.3.0` all images which use the default WordPress captions will also include a caption when the image is lightboxed. To disable this behavior, filter `wp_featherlight_captions` to false.
@@ -31,7 +29,7 @@ You can also disable inclusion of the CSS and JavaScript conditionally using fil
31
 
32
  = Contributing =
33
 
34
- If you'd like to submit code patches or contribute in any other way, please fork the plugin on GitHub. https://github.com/wpsitecare/wp-featherlight
35
 
36
  == Screenshots ==
37
 
@@ -39,53 +37,22 @@ If you'd like to submit code patches or contribute in any other way, please fork
39
 
40
  == Changelog ==
41
 
42
- = 0.3.0 =
43
-
44
- There are quite a few internal changes in the plugin for this release, plus some nice new features and improvements on the front-end. We've streamlined everything as much as possible and also added support for some languages other than English! Here's a breakdown of everything that's changed:
45
-
46
- New Features
47
- - Automatic captioning for WordPress images and gallery items (Including Jetpack Galleries)
48
- - Spanish language translation
49
-
50
- Enhancements
51
- - Updated [Featherlight](https://github.com/noelboss/featherlight/) to `1.3.3`
52
- - Improved gallery styles on desktop and mobile devices
53
- - Streamlined overall styles
54
- - Added SVG icons for more visual consistency across various platforms
55
- - Simplified the text used in the admin metabox to ease translations (props @toscho)
56
-
57
- Bug Fixes
58
- - Improved handling of images when certain caching plugins are enabled
59
- - Prevented gallery arrows from being hijacked by WP Emoji
60
- - Fixed a bug which allowed multiple light boxes to be opened using keyboard commands
61
-
62
- Developer Stuff
63
- - Reduced overhead by loading language files only when needed (props @toscho)
64
- - Improved the save routine for our admin metabox (props @toscho)
65
- - Added a `wp_featherlight_captions` filter to control auto-captioning. Filter it to false to disable captions.
66
- - Re-structured the plugin's internal code base and deprecated plugin constants
67
- - Added Grunt and Bower the plugin to allow easier updates and releases in the future
68
-
69
- Added Language Support
70
- - German
71
- - Spanish
72
- - French
73
- - Portuguese (Brazil)
74
- - Spanish (Peru)
75
 
76
- = 0.2.0 =
77
- The primary feature in this release is the addition of a visual loader and the automatic lightboxing of external images. In prior versions, only images from the WordPress host domain were lightboxed automatically. This caused some problems with people using a CDN as the URLs were treated as external.
78
 
79
- There have also been a handful of code improvements under the hood including:
80
 
81
- - Added gallery support for Jetpack Tiled Galleries
82
- - Improved URL handling to match more image instances automatically
83
- - Fixed a mistake in the textdomain path
84
- - Improved admin metabox markup
85
- - Fixed a typo in the main stylesheet's script handle
86
 
87
- = 0.1.1 =
88
- Fixed a bug that caused all WordPress galleries to open in a light box. Now only galleries which have been set to link to the media attachment are opened using Featherlight.
 
 
 
 
 
 
89
 
90
- = 0.1.0 =
91
- Initial release!
2
 
3
  Contributors: fatmedia, wpsitecare
4
  Tags: lightbox, jquery lightbox, jquery, gallery, image, lightbox images, image lightbox, lightbox gallery, lightbox image, lightbox popup, featherlight, photo gallery, popup image, popup images, popup lightbox, responsive lightbox, swipe, wordpress image lightbox, wordpress lightbox, wordpress slideshow lightbox, photography, images, minimal, responsive, photo, photos
5
+ Requires at least: 4.6
6
+ Tested up to: 4.6.1
7
+ Stable tag: 1.0.0
8
  License: GPL-2.0+
9
 
10
  An ultra lightweight jQuery lightbox for WordPress images and galleries.
21
 
22
  If you find a display problem, it may be related to your theme but please [open an support request](https://wordpress.org/support/plugin/wp-featherlight) about it so we can look into it. For more information about the Featherlight script itself, check out their [GitHub plugin page](http://noelboss.github.io/featherlight/).
23
 
 
 
24
  = Developer Notes =
25
 
26
  While there are no options in the plugin, there are some handy filters to modify the default behavior. As of `0.3.0` all images which use the default WordPress captions will also include a caption when the image is lightboxed. To disable this behavior, filter `wp_featherlight_captions` to false.
29
 
30
  = Contributing =
31
 
32
+ If you'd like to submit code patches or contribute in any other way, please [fork the plugin on GitHub](https://github.com/wpsitecare/wp-featherlight).
33
 
34
  == Screenshots ==
35
 
37
 
38
  == Changelog ==
39
 
40
+ = 1.0.0 =
41
+ Even though this is a major version change, this is primarily a maintenance release. The reason for the jump to 1.0.0 is because we've changed some code which could break backwards compatibility with custom extensions and integrations.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
+ If you're just using the plugin on your site and haven't customized it or paid anyone to customize it for you, you should be able to update without any issues.
 
44
 
45
+ If you're a developer and have written custom code extending the PHP side of WP Featherlight, be sure to test your code before updating.
46
 
47
+ Under the hood, we've [deprecated some internal methods](https://github.com/wpsitecare/wp-featherlight/search?utf8=%E2%9C%93&q=_deprecated_function) which could potentially break custom code which extends WP Featherlight. The changes are primarily limited to class initialization, so unless you were doing something specific to that, it's unlikely that you'll run into issues.
 
 
 
 
48
 
49
+ - Tweak: Improved transition between images within galleries
50
+ - Tweak: Moved our disable lightbox checkbox into the publish meta box to streamline the admin
51
+ - Tweak: Made styles more aggressive to ensure elements look consistent across different themes by default
52
+ - Fix: Reduced false positives for URLs that use image extensions but don't actually link to an image
53
+ - Dev: Updated [Featherlight](https://github.com/noelboss/featherlight/) to `1.5.1`
54
+ - Dev: Updated [jQuery Detect Swipe](http://github.com/marcandre/detect_swipe) to `2.1.3`
55
+ - Dev: Deprecated some internal methods
56
+ - Dev: Reorganized how classes are instantiated and plugin actions are fired
57
 
58
+ [View the full changelog on GitHub](https://github.com/wpsitecare/wp-featherlight/blob/master/CHANGELOG.md)
 
wp-featherlight.php CHANGED
@@ -1,19 +1,23 @@
1
  <?php
2
  /**
3
  * Plugin Name: WP Featherlight
4
- * Plugin URI: http://www.wpsitecare.com/wp-featherlight/
5
  * Description: An ultra lightweight jQuery lightbox for WordPress images and galleries.
6
- * Version: 0.3.0
7
  * Author: WP Site Care
8
- * Author URI: http://www.wpsitecare.com
9
  * License: GPL-2.0+
10
  * License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
  * Text Domain: wp-featherlight
12
  * Domain Path: /languages
 
 
 
 
 
13
  */
14
 
15
- // Prevent direct access.
16
- defined( 'ABSPATH' ) || exit;
17
 
18
  // Load the main plugin class.
19
  require_once plugin_dir_path( __FILE__ ) . 'includes/class-plugin.php';
1
  <?php
2
  /**
3
  * Plugin Name: WP Featherlight
4
+ * Plugin URI: https://www.wpsitecare.com/wp-featherlight/
5
  * Description: An ultra lightweight jQuery lightbox for WordPress images and galleries.
6
+ * Version: 1.0.0
7
  * Author: WP Site Care
8
+ * Author URI: https://www.wpsitecare.com
9
  * License: GPL-2.0+
10
  * License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
  * Text Domain: wp-featherlight
12
  * Domain Path: /languages
13
+ *
14
+ * @package WPFeatherlight
15
+ * @copyright Copyright (c) 2016, WP Site Care
16
+ * @license GPL-2.0+
17
+ * @since 0.1.0
18
  */
19
 
20
+ defined( 'WPINC' ) || die;
 
21
 
22
  // Load the main plugin class.
23
  require_once plugin_dir_path( __FILE__ ) . 'includes/class-plugin.php';