Gentoo Archives: gentoo-commits

From: "Anthony G. Basile" <blueness@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/blogs-gentoo:master commit in: plugins/jetpack/css/, plugins/jetpack/views/admin/, ...
Date: Fri, 29 Jul 2016 03:30:08
Message-Id: 1469762970.5c4552fad98db23b2698e8a598bf20f42cb430ef.blueness@gentoo
1 commit: 5c4552fad98db23b2698e8a598bf20f42cb430ef
2 Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
3 AuthorDate: Fri Jul 29 03:29:30 2016 +0000
4 Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
5 CommitDate: Fri Jul 29 03:29:30 2016 +0000
6 URL: https://gitweb.gentoo.org/proj/blogs-gentoo.git/commit/?id=5c4552fa
7
8 Update plugin jetpack to 4.1.1
9
10 plugins/jetpack/3rd-party/3rd-party.php | 1 +
11 plugins/jetpack/3rd-party/bitly.php | 9 +-
12 plugins/jetpack/3rd-party/vaultpress.php | 13 +
13 plugins/jetpack/_inc/jetpack.js | 2 +-
14 plugins/jetpack/_inc/jp.js | 6 +-
15 plugins/jetpack/_inc/jquery.jetpack-resize.js | 2 +-
16 plugins/jetpack/_inc/lib/class.media-extractor.php | 1 -
17 plugins/jetpack/_inc/social-logos.php | 14 +
18 plugins/jetpack/_inc/social-logos/social-logos.css | 257 +++++
19 plugins/jetpack/_inc/social-logos/social-logos.eot | Bin 0 -> 9982 bytes
20 .../jetpack/_inc/social-logos/social-logos.html | 428 ++++++++
21 .../jetpack/_inc/social-logos/social-logos.min.css | 1 +
22 plugins/jetpack/_inc/social-logos/social-logos.ttf | Bin 0 -> 9792 bytes
23 .../jetpack/_inc/social-logos/social-logos.woff2 | Bin 0 -> 5628 bytes
24 plugins/jetpack/changelog.txt | 67 +-
25 plugins/jetpack/class.jetpack-client-server.php | 137 +--
26 plugins/jetpack/class.jetpack-data.php | 13 +
27 plugins/jetpack/class.jetpack-debugger.php | 73 +-
28 plugins/jetpack/class.jetpack-jitm.php | 23 +-
29 plugins/jetpack/class.jetpack-signature.php | 23 +-
30 plugins/jetpack/class.jetpack-tracks.php | 2 +-
31 plugins/jetpack/class.jetpack.php | 409 ++++----
32 plugins/jetpack/class.json-api-endpoints.php | 325 +-----
33 plugins/jetpack/class.photon.php | 4 +
34 plugins/jetpack/css/dashboard-widget.css.map | 2 +-
35 plugins/jetpack/css/jetpack-admin-rtl.css | 11 +-
36 plugins/jetpack/css/jetpack-admin-rtl.min.css | 2 +-
37 plugins/jetpack/css/jetpack-admin.css | 9 +-
38 plugins/jetpack/css/jetpack-admin.css.map | 2 +-
39 plugins/jetpack/css/jetpack-admin.min.css | 2 +-
40 plugins/jetpack/css/jetpack-admin.min.css.map | 2 +-
41 plugins/jetpack/css/jetpack-banners.css | 328 +-----
42 plugins/jetpack/css/jetpack-banners.css.map | 2 +-
43 plugins/jetpack/css/jetpack-banners.min.css | 5 +-
44 plugins/jetpack/css/jetpack-banners.min.css.map | 2 +-
45 plugins/jetpack/css/jetpack-rtl.css | 2 +-
46 plugins/jetpack/css/jetpack.css | 2 +-
47 plugins/jetpack/functions.global.php | 10 +
48 plugins/jetpack/functions.photon.php | 15 +
49 plugins/jetpack/jetpack.php | 5 +-
50 plugins/jetpack/json-endpoints.php | 162 ++-
51 .../class.wpcom-json-api-comment-endpoint.php | 18 +-
52 ...class.wpcom-json-api-get-post-v1-1-endpoint.php | 16 +-
53 .../class.wpcom-json-api-get-site-endpoint.php | 220 ++--
54 ...class.wpcom-json-api-get-site-v1-2-endpoint.php | 25 +-
55 .../class.wpcom-json-api-get-term-endpoint.php | 38 +
56 ...class.wpcom-json-api-list-comments-endpoint.php | 14 +-
57 .../class.wpcom-json-api-list-embeds-endpoint.php | 2 +-
58 ...ass.wpcom-json-api-list-media-v1-1-endpoint.php | 1 -
59 ...json-api-list-post-type-taxonomies-endpoint.php | 71 ++
60 ...ass.wpcom-json-api-list-post-types-endpoint.php | 11 +-
61 .../class.wpcom-json-api-list-posts-endpoint.php | 2 +-
62 ...ass.wpcom-json-api-list-posts-v1-1-endpoint.php | 4 +-
63 ...ass.wpcom-json-api-list-shortcodes-endpoint.php | 4 +-
64 .../class.wpcom-json-api-list-terms-endpoint.php | 87 ++
65 .../class.wpcom-json-api-list-users-endpoint.php | 14 +-
66 .../class.wpcom-json-api-menus-v1-1-endpoint.php | 3 +
67 .../class.wpcom-json-api-post-endpoint.php | 22 +-
68 .../class.wpcom-json-api-post-v1-1-endpoint.php | 526 ++--------
69 .../class.wpcom-json-api-render-embed-endpoint.php | 11 -
70 .../class.wpcom-json-api-render-endpoint.php | 25 +-
71 ...ss.wpcom-json-api-render-shortcode-endpoint.php | 6 -
72 ...ass.wpcom-json-api-sharing-buttons-endpoint.php | 6 +-
73 ...class.wpcom-json-api-site-settings-endpoint.php | 40 +-
74 .../class.wpcom-json-api-site-user-endpoint.php | 23 +-
75 ...lass.wpcom-json-api-update-invites-endpoint.php | 2 +-
76 .../class.wpcom-json-api-update-post-endpoint.php | 14 +-
77 ...ss.wpcom-json-api-update-post-v1-1-endpoint.php | 102 +-
78 ...ss.wpcom-json-api-update-post-v1-2-endpoint.php | 125 ++-
79 .../class.wpcom-json-api-update-term-endpoint.php | 164 +++
80 ...ss.jetpack-json-api-plugins-modify-endpoint.php | 2 +
81 .../after-the-deadline/atd-nonvis-editor-plugin.js | 3 +-
82 .../jetpack/modules/after-the-deadline/atd.core.js | 2 +-
83 .../modules/after-the-deadline/jquery.atd.js | 2 +-
84 .../after-the-deadline/tinymce/editor_plugin.js | 2 +-
85 .../jetpack/modules/carousel/jetpack-carousel.js | 9 +
86 plugins/jetpack/modules/comments/comments.php | 12 +-
87 plugins/jetpack/modules/contact-form/admin.php | 18 -
88 .../modules/contact-form/css/menu-alter.css | 73 --
89 .../modules/contact-form/grunion-contact-form.php | 49 +-
90 .../contact-form/images/grunion-menu-2x.png | Bin 546 -> 0 bytes
91 .../contact-form/images/grunion-menu-big-2x.png | Bin 340 -> 0 bytes
92 .../contact-form/images/grunion-menu-big.png | Bin 352 -> 0 bytes
93 .../contact-form/images/grunion-menu-hover-2x.png | Bin 611 -> 0 bytes
94 .../contact-form/images/grunion-menu-hover.png | Bin 278 -> 0 bytes
95 .../modules/contact-form/images/grunion-menu.png | Bin 157 -> 0 bytes
96 .../modules/custom-css/csstidy/data-wp.inc.php | 4 +
97 plugins/jetpack/modules/custom-css/custom-css.php | 2 +-
98 .../custom-post-types/js/menu-checkboxes.js | 4 +-
99 plugins/jetpack/modules/custom-post-types/nova.php | 46 +-
100 .../modules/custom-post-types/portfolios.php | 63 ++
101 .../modules/custom-post-types/testimonial.php | 6 +-
102 plugins/jetpack/modules/gravatar-hovercards.php | 2 +-
103 plugins/jetpack/modules/infinite-scroll.php | 3 +-
104 .../jetpack/modules/infinite-scroll/infinity.js | 14 +
105 .../jetpack/modules/infinite-scroll/infinity.php | 5 +-
106 plugins/jetpack/modules/likes.php | 4 +-
107 plugins/jetpack/modules/likes/queuehandler.js | 2 +-
108 plugins/jetpack/modules/manage.php | 4 +-
109 plugins/jetpack/modules/publicize/ui.php | 16 +-
110 .../related-posts/jetpack-related-posts.php | 4 +-
111 .../modules/related-posts/related-posts.css | 1 +
112 .../modules/sharedaddy/admin-sharing-rtl.css | 62 +-
113 .../modules/sharedaddy/admin-sharing-rtl.min.css | 2 +-
114 .../jetpack/modules/sharedaddy/admin-sharing.css | 62 +-
115 .../jetpack/modules/sharedaddy/admin-sharing.js | 29 +-
116 .../modules/sharedaddy/admin-sharing.min.css | 2 +-
117 .../jetpack/modules/sharedaddy/sharing-service.php | 28 +-
118 .../jetpack/modules/sharedaddy/sharing-sources.php | 45 +-
119 plugins/jetpack/modules/sharedaddy/sharing.css | 126 ++-
120 plugins/jetpack/modules/sharedaddy/sharing.js | 2 +-
121 plugins/jetpack/modules/sharedaddy/sharing.php | 14 +-
122 plugins/jetpack/modules/shortcodes.php | 38 +-
123 plugins/jetpack/modules/shortcodes/audio.php | 437 +-------
124 .../modules/shortcodes/css/recipes-print.css | 33 +
125 plugins/jetpack/modules/shortcodes/css/recipes.css | 3 +
126 .../modules/shortcodes/css/rtl/recipes-rtl.css | 5 +-
127 .../modules/shortcodes/js/audio-shortcode.js | 159 ---
128 plugins/jetpack/modules/shortcodes/recipe.php | 302 +++++-
129 .../modules/shortcodes/twitter-timeline.php | 35 +-
130 .../jetpack/modules/shortcodes/untappd-menu.php | 65 ++
131 plugins/jetpack/modules/shortcodes/videopress.php | 5 -
132 plugins/jetpack/modules/sitemaps/sitemaps.php | 33 +-
133 plugins/jetpack/modules/sso.php | 1090 +++++++++++---------
134 .../modules/sso/class.jetpack-sso-helpers.php | 159 +++
135 .../jetpack/modules/sso/jetpack-sso-login-rtl.css | 179 ++++
136 .../modules/sso/jetpack-sso-login-rtl.min.css | 1 +
137 plugins/jetpack/modules/sso/jetpack-sso-login.css | 179 ++++
138 plugins/jetpack/modules/sso/jetpack-sso-login.js | 47 +
139 .../jetpack/modules/sso/jetpack-sso-login.min.css | 1 +
140 .../jetpack/modules/sso/jetpack-sso-profile.css | 72 ++
141 plugins/jetpack/modules/stats.php | 14 +-
142 .../theme-tools/compat/twentysixteen-rtl.css | 1 +
143 .../modules/theme-tools/compat/twentysixteen.css | 1 +
144 .../modules/tiled-gallery/tiled-gallery.php | 6 +-
145 .../tiled-gallery/tiled-gallery-item.php | 3 +-
146 .../tiled-gallery/tiled-gallery/tiled-gallery.js | 2 +-
147 plugins/jetpack/modules/videopress.php | 13 +-
148 .../modules/videopress/class.videopress-player.php | 30 +-
149 plugins/jetpack/modules/videopress/css/editor.css | 59 ++
150 .../{ => css}/videopress-editor-style.css | 0
151 .../modules/videopress/editor-media-view.php | 213 ++++
152 .../modules/videopress/js/videopress-admin.js | 2 +-
153 plugins/jetpack/modules/videopress/shortcode.php | 149 +--
154 .../modules/videopress/utility-functions.php | 105 ++
155 plugins/jetpack/modules/videopress/videopress.php | 109 ++
156 plugins/jetpack/modules/widgets/contact-info.php | 214 ++--
157 .../widgets/contact-info/contact-info-map.js | 2 +-
158 plugins/jetpack/modules/widgets/gallery.php | 2 +-
159 plugins/jetpack/modules/widgets/image-widget.php | 51 +-
160 .../jetpack/modules/widgets/rsslinks-widget.php | 2 +-
161 plugins/jetpack/modules/widgets/top-posts.php | 12 +-
162 .../modules/widgets/twitter-timeline-admin.js | 35 +
163 .../jetpack/modules/widgets/twitter-timeline.php | 348 +++++--
164 plugins/jetpack/readme.txt | 80 +-
165 plugins/jetpack/sal/class.json-api-date.php | 55 +
166 plugins/jetpack/sal/class.json-api-links.php | 269 +++++
167 plugins/jetpack/sal/class.json-api-metadata.php | 39 +
168 .../sal/class.json-api-platform-jetpack.php | 12 +-
169 plugins/jetpack/sal/class.json-api-platform.php | 18 +
170 plugins/jetpack/sal/class.json-api-post-base.php | 667 ++++++++++++
171 .../jetpack/sal/class.json-api-post-jetpack.php | 34 +
172 plugins/jetpack/sal/class.json-api-site-base.php | 419 +++++++-
173 .../sal/class.json-api-site-jetpack-base.php | 6 +-
174 .../jetpack/sal/class.json-api-site-jetpack.php | 9 +
175 plugins/jetpack/sal/class.json-api-token.php | 60 ++
176 plugins/jetpack/scss/organisms/_banners.scss | 354 +------
177 .../scss/templates/_connection-landing.scss | 12 +-
178 plugins/jetpack/views/admin/admin-page.php | 5 +-
179 plugins/jetpack/views/admin/network-settings.php | 4 +-
180 170 files changed, 7162 insertions(+), 3790 deletions(-)
181
182 diff --git a/plugins/jetpack/3rd-party/3rd-party.php b/plugins/jetpack/3rd-party/3rd-party.php
183 index 6ba6a18..2bab75b 100644
184 --- a/plugins/jetpack/3rd-party/3rd-party.php
185 +++ b/plugins/jetpack/3rd-party/3rd-party.php
186 @@ -10,3 +10,4 @@ require_once( JETPACK__PLUGIN_DIR . '3rd-party/wpml.php' );
187 require_once( JETPACK__PLUGIN_DIR . '3rd-party/bitly.php' );
188 require_once( JETPACK__PLUGIN_DIR . '3rd-party/bbpress.php' );
189 require_once( JETPACK__PLUGIN_DIR . '3rd-party/woocommerce.php' );
190 +require_once( JETPACK__PLUGIN_DIR . '3rd-party/vaultpress.php' );
191
192 diff --git a/plugins/jetpack/3rd-party/bitly.php b/plugins/jetpack/3rd-party/bitly.php
193 index 9d087b7..eeca3b7 100644
194 --- a/plugins/jetpack/3rd-party/bitly.php
195 +++ b/plugins/jetpack/3rd-party/bitly.php
196 @@ -7,7 +7,10 @@
197 if( class_exists( 'Bitly' ) ) {
198
199 if( isset( $GLOBALS['bitly'] ) ) {
200 - remove_action( 'wp_head', array( $GLOBALS['bitly'], 'og_tags' ) );
201 + if ( method_exists( $GLOBALS['bitly'], 'og_tags' ) ) {
202 + remove_action( 'wp_head', array( $GLOBALS['bitly'], 'og_tags' ) );
203 + }
204 +
205 add_action( 'wp_head', 'jetpack_bitly_og_tag', 100 );
206 }
207
208 @@ -21,7 +24,9 @@ if( class_exists( 'Bitly' ) ) {
209 function jetpack_bitly_og_tag() {
210 if( has_filter( 'wp_head', 'jetpack_og_tags') === false ) {
211 // Add the bitly part again back if we don't have any jetpack_og_tags added
212 - $GLOBALS['bitly']->og_tags();
213 + if ( method_exists( $GLOBALS['bitly'], 'og_tags' ) ) {
214 + $GLOBALS['bitly']->og_tags();
215 + }
216 } elseif ( isset( $GLOBALS['posts'] ) && $GLOBALS['posts'][0]->ID > 0 ) {
217 printf( "<meta property=\"bitly:url\" content=\"%s\" /> \n", esc_attr( $GLOBALS['bitly']->get_bitly_link_for_post_id( $GLOBALS['posts'][0]->ID ) ) );
218 }
219
220 diff --git a/plugins/jetpack/3rd-party/vaultpress.php b/plugins/jetpack/3rd-party/vaultpress.php
221 new file mode 100644
222 index 0000000..d2c1374
223 --- /dev/null
224 +++ b/plugins/jetpack/3rd-party/vaultpress.php
225 @@ -0,0 +1,13 @@
226 +<?php
227 +
228 +/**
229 + * For backward compatibility with VaultPress 1.8.3 to play nicely with Jetpack 4.1
230 + */
231 +add_action( 'init', 'jetpack_vaultpress_sync_options' );
232 +function jetpack_vaultpress_sync_options() {
233 + if ( ! class_exists( 'VaultPress' ) ) {
234 + return;
235 + }
236 + $vaultpress = VaultPress::init();
237 + Jetpack_Sync::sync_options( __FILE__, $vaultpress->auto_register_option, $vaultpress->option_name );
238 +}
239
240 diff --git a/plugins/jetpack/_inc/jetpack.js b/plugins/jetpack/_inc/jetpack.js
241 index fd3512d..4d63608 100644
242 --- a/plugins/jetpack/_inc/jetpack.js
243 +++ b/plugins/jetpack/_inc/jetpack.js
244 @@ -18,7 +18,7 @@ jetpack = {
245 didDebug: false,
246
247 init: function() {
248 - jetpack.numModules = jQuery( 'div.jetpack-module' ).not( '.placeholder' ).size();
249 + jetpack.numModules = jQuery( 'div.jetpack-module' ).not( '.placeholder' ).length;
250 jetpack.container = jQuery( 'div.module-container' );
251
252 jetpack.level_modules();
253
254 diff --git a/plugins/jetpack/_inc/jp.js b/plugins/jetpack/_inc/jp.js
255 index 15faad1..72499bb 100644
256 --- a/plugins/jetpack/_inc/jp.js
257 +++ b/plugins/jetpack/_inc/jp.js
258 @@ -306,8 +306,8 @@
259 $( checkBox ).prop( 'checked', true );
260 });
261
262 - $( '.jumpstart-spinner, .jstart, #jumpstart-cta, .manage-cta-inactive' ).hide();
263 - $( '.jumpstart-message, .manage-cta-active' ).toggle();
264 + $( '.jumpstart-spinner, .jstart, #jumpstart-cta' ).hide();
265 + $( '.jumpstart-message' ).toggle();
266 $( '#jump-start-area' ).delay( 5000 ).hide( 600 );
267
268 // Log Jump Start event in MC Stats
269 @@ -391,7 +391,7 @@
270 // Manual element alteration for Manage, since it's not part of the template
271 if ( 'manage' === data.thisModuleSlug ) {
272 if ( response.activated ) {
273 - thisLabel.show().html( 'ACTIVE' );
274 + $( '#manage-row .module-action' ).hide();
275 $( '#manage-row' ).addClass( 'activated' );
276 } else {
277 thisLabel.show().html( 'INACTIVE' );
278
279 diff --git a/plugins/jetpack/_inc/jquery.jetpack-resize.js b/plugins/jetpack/_inc/jquery.jetpack-resize.js
280 index 2fb6a2f..14d60b2 100644
281 --- a/plugins/jetpack/_inc/jquery.jetpack-resize.js
282 +++ b/plugins/jetpack/_inc/jquery.jetpack-resize.js
283 @@ -1,4 +1,4 @@
284 -/* global Jetpack */
285 +/* global Jetpack, JSON */
286 /**
287 * Resizeable Iframes.
288 *
289
290 diff --git a/plugins/jetpack/_inc/lib/class.media-extractor.php b/plugins/jetpack/_inc/lib/class.media-extractor.php
291 index 855c3fe..e09da8f 100644
292 --- a/plugins/jetpack/_inc/lib/class.media-extractor.php
293 +++ b/plugins/jetpack/_inc/lib/class.media-extractor.php
294 @@ -24,7 +24,6 @@ class Jetpack_Media_Meta_Extractor {
295 'hulu',
296 'ted',
297 'wpvideo',
298 - 'audio',
299 );
300
301 /**
302
303 diff --git a/plugins/jetpack/_inc/social-logos.php b/plugins/jetpack/_inc/social-logos.php
304 new file mode 100644
305 index 0000000..c7c7187
306 --- /dev/null
307 +++ b/plugins/jetpack/_inc/social-logos.php
308 @@ -0,0 +1,14 @@
309 +<?php
310 +/**
311 + * Globally registers the 'social-logos' style and font.
312 + *
313 + * This ensures any theme or plugin using it is on the latest version of Social Logos, and helps to avoid conflicts.
314 + */
315 +add_action( 'init', 'jetpack_register_social_logos', 1 );
316 +function jetpack_register_social_logos() {
317 + if ( ! wp_style_is( 'social-logos', 'registered' ) ) {
318 + $post_fix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
319 + wp_register_style( 'social-logos', plugins_url( 'social-logos/social-logos' . $post_fix . '.css', __FILE__ ), false, '1' );
320 + }
321 +}
322 +
323
324 diff --git a/plugins/jetpack/_inc/social-logos/social-logos.css b/plugins/jetpack/_inc/social-logos/social-logos.css
325 new file mode 100644
326 index 0000000..38c4b00
327 --- /dev/null
328 +++ b/plugins/jetpack/_inc/social-logos/social-logos.css
329 @@ -0,0 +1,257 @@
330 +/* Generated by grunt-webfont */
331 +
332 +
333 +
334 +@font-face {
335 + font-family:"social-logos";
336 + src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
337 + font-weight:normal;
338 + font-style:normal;
339 +}
340 +@font-face {
341 + font-family:"social-logos";
342 + src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
343 + src:url("social-logos.eot?#iefix") format("embedded-opentype"),
344 + url("data:application/x-font-woff;charset=utf-8;base64,d09GRk9UVE8AAEZAAAoAAAAAfBAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAQsUAAHZfa1y5A0ZGVE0AAEO8AAAAGQAAABx4Dt9ZT1MvMgAAQ9gAAABKAAAAYEC7Yj5jbWFwAABEJAAAAIUAAAG6pEWcoGhlYWQAAESsAAAALwAAADYHEbeJaGhlYQAARNwAAAAdAAAAJAOvAd5obXR4AABE/AAAADgAAABeCDEE521heHAAAEU0AAAABgAAAAYALVAAbmFtZQAARTwAAADrAAAB5koHYmpwb3N0AABGKAAAABYAAAAg/8MAGnicrZ13mJXFFfDn3XbvVnb37i596SC9d8uLDQyKFXtD7F0RYzSGay9LDCpqjB1REaPR2CXCFbGB2ACR3otLWdje5zu/M++9QGK+fH98Dzyz804vZ86cOtczKSnG87zsKTdMvmrStX2vveGKG6YYL8l45qTaFqZ2rFc7Lqn2hOTaVinTs7zibW36ZyUXd3vVZqUUZ5jWp+fbkpJEJCv04mW102p7pbZLat2inTG57ZJuzmtn+rSb2jLf9KfJsGlhikx709X0NoPMSOObsWaCmWjON5PN1eYmc5uZZu43fzYzzTNmlnndvG0+NPPNF+Zbs8ysNpvMTlNmqk2Tl+Jlevlea6+j18Pr5w2Vf2O8k6Zef9XxAwcM5M+gAQPcn+BrkPsz2P0Z6v4Mc3+Guz8j9c9AV2+gqzfQ1Rvo6g0c4v646gNd9YGu+sAR7o9rZZBrZZCrPshVH+SqD3LVB2n1Ia6/Ia6HIa7pIcO0laHua6jraJib0TA3o2FuRsPcjIYNGOL+DHV/ggrD3Z8R7o+2Ocz1N2zgMfpn0OCDd/0QCDDGe8B70HvIe9gr8aZ7f/Ye8f7izfAe9R7zHvdmek94T3pPeX/1nvb+5j3jPes9
345 5z3vveC96L3kzfJe9mZ7r3iveq95c7zXvbneG97fvTe9t7x/eG9773j/NH2BhM5p96T3yXojZ11u18hThd1aprSe33Zru1uK7+w4otO5XWb1OXzIE0Orh/965AXH3nF8vxMyT2g48dyTcid0O3n/qS+fXnVG5TkF526/YPCkYya3vTx6xQ1Xzry2/Lpzb/joxqtvHlsyu2b6bG/27NoBs5NnF9VeUjO/8ZK02Q2vFNZMrx3QMD2UY83oVsaa7ta3dt3OmDV93ola0+1rSeu4WmLebAl63GystY9Jbo9r5bPoFAn6fChpy++Qcq23m3xres2V7JGLJbhgoWSPyJTsnx4i7QUpk5cpsSE3mshlF1vz6iRjveNv8gutvfeEmG2ue0Qypw2NpVmT+ZlfIuHtvvR8m6RmZkvlpEZih0la0m75TG+UIOV+CcLvSZDWVXLDz0ufaW34lJmYUKkEqV0lSF8guamtiTGOpL/42rx0kv27qIS518k4G1tJoezmmLW1qdJO5geyGLW5lHwxam1lWGLh3pJbtkFiKa9Gw5KzUlpLfZacjRILDaPrFozp+2g4ctmLklnH1woJkpN8nQmdDqHTrCHSaXOKZGWcLl01NNHMGOmqYYd0Hz5fuqofJ2lpsySt9nXmkkzsaSbeLHVr6C75FSlX9aHUSOprwhKdxQSPYMR/l5hXJLGKG/yScGToi1L5Qfl8oo5F/2K6ZB9xssx5WAtZL5NaHJNBpdRKATtHUlO+kkHZFsR+ItZNukjpJ7nNt0paMqvTBIAkz5MBNP3CAHZLWuMeYsMlrbGYkfQgFvGDkdTvl5nbuu2y9LayiazPYvdIwgUSbejC+OtOkpk15EtLNQ/Q8KNSq+pTxn+TAE3yCEmbMdbI+BfKoplxY6WPI5dFZfxZN7K0Ge2oxJ6H/ipt1B9BjIbq+0osWfbLVl8sE7Xl0wwjYVDN6xnZOAmaXmMjnpFCTX9nRDMAi28Z5n06IeZ8I7HD6
346 OVcitxAA0Pp6oeYNiVzqGchXKszJdHeKc3UTzAlAjEfvCaLZzYygVoBJhN62bjyJkcaMQbIa9EiJiUf6uTLrEwDWZ/S9NdSPKdAGm18UtKy7yA2A5C9iyb+IBWzwoCsgJDJuDcajwms2+oOQNR1EqsAytKG+uHI6x3la7fUTxsv6ft3saktAe9SFmb/FDaq/GdmfJmkVrZiNmuIRZjsj9JnlWy/rd3HVp0pGTUZxCZJuZo28lk3hZ27mAU9Bhh8m9U6Q2pUKMCw0uXztKvF7Mf+kzjZ40i9HkgrYbCf+bIQKU/6rrpJu5wm7+JEnUg3gGT4TmK9TbD1dYdLuSwG2wCqcLERrNKtTOUpKZdTycEvvAtwyb8e+N4pqS3aSGPpG1n+8ZKWvgJsM1iayD1L0kJXSJEi3dyfQnJabPMoYKodrV9I7HTW+2Zi7xO7hDV6m5XfCjBNlFjVHazo/guYbCXoVYGxtjetv8w8R9dKH5NXCmiYtFHSSF2eCdahur8MxpOZ2fK5Ahr2jVYcWDMs6s6hMd/H3Nk03tnUecnEYws5gieRewP7ew4rO4RDexVpXfi8mlbuA49dww78SOx+zvAaVvxXGr2SdT6N9cr6ibXLmMa5ONZBkgy0hwlHugg4/X2qJJ1wT0xmcPXZMb0TBNu85qflWK9fL8m7orfxgkvipCFR6+UOlMSTjo0l18y03hMTQUsP95U6L94ZCwL57CAL9tInUvCIYkl4O1cGcwa4acuX0kzGXI5GAXPYxHgfY5SpfweVpYY5e9/LfLI5s3ar5Od9IRUXvQo8HgZUccX0vN6USBfV46Vkq7dY5LSgJUnd/QywM0qyCtaBBedHSzjGhdeAu/8IRj9Gaux6WJKtiSRJ6oZJUqO4TGqkT5Ygi0VOvZUd2c9QlvIJCKdfILG01lI4FUTyw2wW/jxp4Dt2O/9spnDqAsKWx/u6/tIBF2H2a6AEhStt7Bo/uB4K/w7MCvYy7c+NhRlQ3i
347 4KfCophy2Q8lsvM8ElrICRD3JMYqPyOwNFhUHMWi5OcvWYag09xOawjyVoSw9524HwY1gjk8kVtPmVYBi2lEPctAyk9ELMDdfuLwKEDpfY7lqOwc6PZYDWvtWC+crVbfdUsAa3+e4AmdCcqMMgJm0ZO9JIpd3ZnJ0tAquyD1JyZxXfdZnkyVA4UUAjq57xM1NrKcEZHLV2IwGfHAlO3sqKXjiUAzd1WQBq5qK7fQW14hwZPtBZvExqzftRgg4fS3MzdknQYVI0DrwdBPN4Vwu+MZ2u9AFeahV2zLDm3T1S8qOOcgRszQZpfunJrM12CZZz3a/sKB1tPRfggWDJFKpLAE/GNRQUsRNkMOZP8jmS9UrvIW0N6svypXHWQDnN6eCgx4+UelP7c4uUsmHVb8py7SgDRYOxt3/O/bpiHcuzqo+0lCO0lt3UDgBnk5NPkFjauxJ03SyfY4Gvy7+Wcl2YsbmEoKNkmCsIuvvxGGmtZ0pTn4IgMp6Q2NdcwEngvH2pjGwge9Z3J/PfvF2iHUHUe31potc8KWmEIDT9lrEH3hoT3HfeGnqA0tK0UBUguFpiZ5/IPbpKYudBPLU9kiMyJOpuHkcDKbmTItegrQLOmp7kpJ+aiB1PbBYAM1pis+Rg200vSGxpnQRv9peMhs3uEpOxr0iWTl7oFhX0lclCjHhE2u4OOdnPyucgCNBWGZweSII6sGLHx2U0P22SesVyau1iCLm5MUn7FYrmPWghcyp34yrWry1Q9wDEVclKwXUmG7IteQIbBAx4X3Cw/8ni9BsPHuvFrbL3ORlAR4EMu+UWaakRirtBELndyqzXtJceFwghaHcIoNrNnaXwMFkxux7M3beAU1gD8HwKTfHh51JlYR4IurWgH7vJSKEWgrDsL/cEu2yXQ5bVQV17YyX2+WcmIFU/v8gEN1vzR1I4mZ6bAaLkLsAzhE0ySLWRCya8AZxR7jvi1zZ8RkyQqzlGWjFtp3HGpkvnPbj
348 Dk5WM7u+H5Z5YLaSrN+YFQHsfsFMH8inrSBsCtXbvePDeFvBTXoxzLtWzt0iQ110+0x6QhgpulCJlhVy57PKe4xj2e6Ce7Ci0qHzu4xLJk0Nlf4VeyBA8ZbcvA498P4dD88v3UQ00QSnWTuzkIsZzGhD7J2JPcxd/6McCInzB3ZLTWQZklwvBbIZASdfeJr1V5Eus4Q3OiGKssirInk1wIi3gqbZxvbT8YyyY8X6YLQMtUX4viyOLaCu53NOm02HzVhPidD/JEsqlatdyRR0mM7I19dEABzcpGwMz0bw3pgwNOPJC0EI9jZpHAIxX2GRQSyY7uI5hdDwL/PFPabE7K22PlyY2Z0mwE85hNXdCuSfBz5YW5dywOGkmgJ06MJb5HtaoOzTrDuiyfilgsHukyYHXAdsvGcKz2YL7LoacmPIOwJ78Lf2VAk9fcnSXA2OATR54K+tkCXLkLjAtrgVxCg1p8h6JhnOk5kw5EmYkV92Y4VJ+WDf5HOX5+UusWQrPN3qtZP0e6nSRYF4z+lUTqbTe3B9NbUGhbZ57IfRc5cmg0btiQSCfHSRrcjQkceFOTfqfgnyT+XasWE4SVyQd26Vyc5mR1SCILNDc+zAjA5+W72IoirZgrj5HGalT2F9JzhGclmukUip3gx2vN+G3PcHQp5FQH02N1AboXA96JQe9bJjpIMc9ialONqGAlfsyXYLvCqA+7DVCXJtJa/ySVB2kG7ML5LMDc544S2pqppuLzkrmmrj3CgWxe21nAJnfAY/QZ8TMGUe63DiPrwXHjJVZHtZWgiJolsJH/cjz1kvmhP9jNGh01H4Z3oV/9FMD+LAZYBluedsRSLmHLR8Q1atdZiS8ji2FY2rsAgqdyzHZ05Mjs+cXqZgEYt37ncRSc8DXt04yNScWypK2BVsrp91mMsdZSBHTchUI7zwh8GzqKSbV2hhXTQeh8u0yQflmzNPw4OP3CM/p5pH+j2ghh/OxmLKiQtSx9tXH
349 SbCjBVfbbgjAWJHkfPK2NCBkWmpkvqzmw6B2mPKMqzhPw31oogzIKokHfFsLJqk3lL3CsN8bS2MBc7urPFocWS9T7Cotb4TZSLo+WtLBFdeGtQm7D3KfZq2dFKOL9MWxoHWVH9CwUH6CGu1bwu7Znzl2d8OhfNJDan6/yLjhsrluuJNjB4YLM/3vw4UFllaBrY1wecFwOfKNl7E3itUhG20DCF0phc5wG0NkO2XzJeg8Wfo+JgnAH7iLFe8L37p7JyXh1zYuYmmBAaUNglhbXwUOie0vB0HLzkh07yR6VsBMbxtzWSb9E5DrQJlUSJg3WwHDFwa4yv7KaHeOZWm6gz1OO5vLL6dOSm1FPhLmFG0EZVrIjvVzaP1jWK1Vc6X+Qg7rl5Re/zmX9yiBTvP6ZIEnk8H02p4DlnpVGircwuwit4DbQi2kUftnX1G2xMCCaW2Qbpz1btQ2fzcrKrRi/Mj9SRC0kJEy7a5TJeh4uBTuFiFNCBVy40TnxGbuF/j8wT/K5+khzl2KSfBOnTKEvmwRs83Lj4WR+oG7ZNVJ0lp3Lun+0rML9DOe1kFOypmMOQJZXXMzWFZ4F5C8DHfH78H83eX82jqIk9R1Mp0qYcOUMbRlq2LCDNktl8rK7YRz2gmFv3lTENAyadJmuycFn5pORSr34i4rEv7FJMGAZD8KBPygRGch0r+OgNEpG2KhACLr/0LWPumvfjsQUIs0zaRKzndv+o7QsWv3gAe7qYhlvhxZc/zlgn/stolRAv8awQwwihJ9w0UJ3tAEotE07pERi6XhD8dI0DoTSAemS4RRtks6A9Pr9EYZsU2yvkJYMOQiCY6AEu7COSDDHDWfWJUUH7HAjzwlOHL2sb5eMx/+Xu4Fu49VqngiGgTy2UGzQi7LZF0dZJkWp/rF1hv3ILeJxF2WC+Szg2aFXJaroFWlkWJrs18SKPhosSmMLOGOgHjVaY00jGHLfb7OsDCyUnL3CA1q90MF5YBZu
350 Z0cY4jQyeSADfInmCAj52sKDxL42IPsZ89CPodr4GuabPL+HyQqkCXL/5WcA3NOO4QVhUdxJF72OTKQFF9K9c0XSskGMPROaMSdbWXG9hWYYV1fHfIwWUO7vRI8s9iEIi9HnWDP5FwusfwnjMNVpu0HPls/ci54ba5UWZ0FfMzhznxmWjQUP2znCaFm3kQ03WelxLr9TmIndzwglIBc6MEl1R2uY8xMiZ1qovM0538KKV55iX0XcLf/XEK75/sBnldeL3cjmByhOWIRkwJVoeKnZK6j3JclVojc8pwrETFAVkEgZn3FpnCY2isrPlCKFSFKKbyM+oOkufBi6accVqHsuSjj2PNPbnWYzK0v+Y6Wt9uFPBdOQGKlMUDoLYntBQcUVOjKdUPq376nZPUQItKMfF+yBiOFXQN70gVp7xIg9vMJnLaLpLGfBBPZH/a5Hv8eDbDe7jNAvd+DJk6RJrwFsYBcN0qMwupbkAoCY9t8ngR1R/t6nzgaEXpIclV0I7hMhfJS2HdY1DYgI/M2cqrP5bhQrUywjOleCWrpMJ5L/xjY2wHbpNMjEJCcz2X0OyFazUg6WII08uOHpMUP/ijBj0Jt20VIuBfM4eyUTgbH7HpDimcibK4TVGCyj9NbkCnZlcpTIhOtTmFEfSW2B+FiBdKfnYtBo8yBc2AiNTSBLLEQvrWRK6ewGayp0gcVPLhAP/9TItFBWKI02W8HeGaSsGRmPPqIT5+V4LWh0vzLN0jRz+n8fYbxxi2CU+yWJ7g9tyHez+kgqdVcfrkfQzjY/ful7LfvMJ6XJFYBiqvmolrXH3wK/fu90OG2iTPbeAdgizyy6VOJNSIwMLtMcL8lvU2sI1dDusSqRwE78C9hxFldHpZYKndZQYV8tkVgd+PzAXjX/BWwRxzR8hsp1g1MXPQcCAIRSjvEZi3hBiBY7N7PZWS7LowBbDshE/fB0K1D8l0L57MRigGO3G4bQnfPSKwUjNX24SiLPZ
351 At6H6cBIMulNRx4FqfC/L7b6THPrBq85DFvM3p/VEOmf0Skcqiz1yPiH/S4YZ3jAYu7uPAcSshWlXprjGnmUBp4KQPMJ1NcqZsDXxdw5FxlOmA+liAnyk1ZNEAoNFcL7n1IKEk0OLaZlDbc0wDln5gHoxSj0kA+RlfSc++3LTmpJ+k+B+MzDBHyAOGsWJi1HuDP2AIufyIJVvzsLTrCYZD7TPRP+88/aPBvPOEqKHXUXOj8+Yl4rHz5pENeVA6N1qk8f+sFtWi/1nN78B1+hAc2RNg1ItLhYjx1sn8vR69kW8nQaGPlD2xpdAz7ZHV/CTTVqm1XXgLhxys9bOgS7vud6wCGPcjIdZM5gm+U0mZDEFnJonCwsBLh0Uq/EUxaCtAUyp2384+Ns+RtH0vA+cwTL/+Q4I9yE1VarkHJcVmSEwkv3a/cPi2+iPgxlaGoQerBLYFNo2rbvoeFT/K2WxzvSdpnWSyqvwww6ZHAw3ioL8wcMReLZ/jdHE6qWb3TzbBmEq5psoRn+mNuB2YoIbd/a+o4iJipLUkbSFkrMqht7WGp4qgKMwGc6OidErP5NNZihZjWIocJIY7ixjo76TSD1BimYJB7fLB1Nkdc1JJk1keDdLykNj/MAx8BSOxUyV+22mr5xdA4OB8bojREhx+rnQ24SYJRsH2jG/vO3GEGY3ehd0zvUfEAMx+vqCvLrcnLtnXx0aTrfdjnkBD4cmxQjBSAwKg9uDUClQuWYItbBlYIc+AXcHiBsarZg6xBokt4vpMgWl/9SbhYNgr+71JozESXAHbAKdbw13XbNly0CsiBlu2iCAl6NBWZBs3CLv5b75DTw3z4lu27g45BnbDy35I49LtsaTeakqKYZ1Semo1Sc9CLFiRBaIFjeyF7irkFkTa4nhtNIWmc2cQqWyruR5SW06+TEBaOgfqRYWso2HfU84Aj8IQerIKJr+vcaugrZtcWQXtUVbLd6OQFXS4VUdoOiPo6fwwNFn
352 H86GmSdB5mc4PxUrkrkuCUp9yDqSarZfk36MimYKY7fOVwmNLQyfL2pmy34NwVkc9IX+fFHrMjIblfXNdLFmvJSFvOwvr8ZCQhc3fv4Xgbonw49aiBNyN2KB7CwCozRLEQhN8aX2HrD4qEhlTV+iFbJBEeIEkdlwEAkSOkg92UY4SMaRbAuQFxjyuGL0LusqFiGT7l8os1swDmRN7/0aYCIPAtAqttGqqVaUT6RtvI+08Gkf/Gkbu6XE7pKC8SurMEVMEv+6XqLA9DS9ysYAvdk/lXIND9qKGtG8ZgLuPgKBpDxPQh+16XEVZJ6xATnItIApqM33Yjsc/iDq2RbKlkc3gLakYedZ6j6PEWzedpVv/mEmL/A0ZAMgKCak3xVcFbomKvQXO5yNZW9JexrCEK0s/gzRpZshmqTNmbKwYrp4b0EMir4rNJBSr6VNgt9Y/II1ecD/sgIqm00BuqjkJ9xYqyEtfAd+BuYNmuSDcHSZu1h+ioci/AtH9FZMQ80hGUFvbqVkOIb/sAz9oXbNcIJ9ylpa9gwDr3zvuLrVMnxNiv91x5BdrWVF4FVmnlYi81yPbXC/MgfskMJ3yfJdhDoOd04A0F8inTOEwBLlaRktLvWJmxDY0V3dFQNDqZuAFrKRBq9vguOT6DUU+0S8Bh55Bpt3xgKxY8y9PI0bc8ecgywWSJfzdL7OZ7g6oPK2gVaWHYva+x7XCfApmRAPX9TPp9Xn4rq7o51zsQyPHbIVQFl7yVczcVnEIxoLJymIBXe3SxsQCLadBqGHLgDe043ZVLC5r0xqQKi7NtUI5aCG7nBhWAi5XY4hhzW2JGloXAxhXV9NcXT9eA7xtsF6x81174UO6g+A6qAqY0hVEs2DBDOaCRJo2802iO21aJ6xpGnvLj9dAU6faFvuWObRGYjCHJ8q5uiY+pZcTNea4RQ3HqwyLxqsMix2StpVYbjS+5iqz0lghYvrDMc24O0tFJ4peYGRqVPLPt23Y
353 wbocfrtE72yOpbq6uhlBzAVR1cYGIjKkcamOjdYhyWBJfDdYhiBtvqbFAiWp/TwWT/smUe4tEy+sMW1AG50fjWd848drLPfjRRYFKxV8PheLF3nZj5fTugdi37sBhePjeODQKsiYsShTkAoGA8JwlQ/EllPjwUTaA4kajyVWSsttTSxHWSw+V60BN6UXv707scCwobY+UaM0sVia5gatnfQ28QZHg4XlW7L+lKJqGAvOQXd5sORS01SaiTjIwYhCUEYsHtNydycg6E7jLjsdVdCeAmfb6CE15kfj5R6IOVrBWeSZgfT250Su1u2Y6K27H8xIL72gioLzcwkUomnd/XiV3sHCBOUWJc7Mc4lz9HLiDGpsWKI7PR7zE2k6aD1belb1hOp5OzExuTHReDkkiAf15gZ9WuLYKkLQ2Z11YE6IG+z5qmXQVSpL7ERpYv3LKPn57dLQnXWUTIZvR7BgkrntoQ9N8gxVRLkQKZmHfhRFp0nKi2l9id4dCrAGE011U9OZyoR8N/vgU4NL/HiR82Nu9sHnmOghsTExN/uggTHReI3TzCENjDWHdDnWHFJjWOyQli/x458XJMqdHwvg4ODKJwago1sbDOa6xGC0md6JtO6JKXWMHVJ3bAA5quMJ0q5L1L05APegnOaeGID7wWkPJsrdGSBWbq+wOz9BwdzEoDMTc9BmkMIqlWwWs41OGXlXI7SmEl9mRXCanTrX3WUrONGHo0a84Fyu/xlC29gXAd4FYNgVOQIhb7MPQ3uCqteMkE4mPuqjL5qLGIw8uxhh6wKOTK/9lNqPwGDdPxHb9MW6ZRN85U9pLiZDO+I81AjPfyRt+49A+90IRXUR2jafvnptjzkC3C7+GY5m7i3AbT5s8lRGaefD7/XGkmsM1HHvS30Xs8ufof8fIbguGo1Wy0yEQlVifigyPv8sZqU8ZA66/M4n0d5PyMiKhV82fZtjGkuNy03zMbk9KtU4WaTXmZJdViZYunw48
354 enCmJoshOJbEV60vu0Qsy5Y2RdBAhro58NM5SIQ94vs5FTsaKciQ72IRdRAP8lwRbSwVOvgZKV2bU+kCYMQmChnNQDWcIcwHmq2bFdCJaTB8ddinpt6l5SrFbzhrFzh0e2mR6TZ7lix/Qh92ErYAbvkQkSASz8k/KlRCv36OpuG8HDt3/34rVCWuDT0hsHYRz+blafD+POg2FYTtw11t5/epAeuWP3k7ikVXtrufF7SylF2bgSG7bpPCT8EPY4Cxr5AxDVujOpSegLkmd/K0D1M5DKBTLXM+AUN/942EnyP9sCrloqrkOoWYR3yC4ZcLYWPt1uQHPTuLH3XXyXl+tWrES5t9UcOnvu4ZA9skA47Yw/YGbVmZ9iKztisDkTEE8GkdJCaz97FKR0rxKj93TFAdHMljYNpNwyQQj2Y8c8YA6Vhx/ozOqAQ4rIV06XKdtiqymek8CqWuh7V2x6glZnZXTf4zgjOaYDD3CJ7sbLLuYnVwhYrD1Fu3XUS6zKNNNjInhjdReCvMlGSdEIukfWqFOkka2FLOWI9GMEGVBWhB6DcNnATYquiQji1YbAWc5KN3FfNqJv2fSxF0hAf70PXoxqH6lHEsPms4lZpASfQgCgzG7O8pP3SfjZmS0nvxwL7ovQ+PtZ5nBq4yFTUElmwOPRhcpDD1mH+noH5WJ2qNtCnVyZJWgjqpQLeRJCzDLoClaABcDBXsPWIGLCFtdWIlBBi2+p3jbOmUomvk2KoYbCKVgC/gGRQmllj4KKUYsktV/NipO3VmLejFnIknOrslUKCNXZGqrDLJnlaLCisFlu1SFwzkGzpQZXNCDsjWmewmIzAI+tVqRdmacNAHQpcDOklA4Pn1AK2DvBQKwIKO6P0LCx6lIUMMaKqrsQ4UVUYtOph2I90rgk5Yjn2OU33E0PgVgNVXdlPilQgqa9dILFKJlyLveS+hJK+HPYsWQddjjw2GZl7BWClYp1ablcV/9SCubOQrTdhTt
355 MCMzZIDVWdmWSEQzlqG4pZXvZRDB+0mY7hSmvh9E0+Fk09oMOb+nNaORQ7IChbYs+OFY5J+SDmDo/dfa6kbcGoeg8CPpVm/gK3s2+1xNaxEhnTONDrkGCmz5TErUhOOzP3JmRZ3VCtNGMLkr/WBIKjCFROOvCmWim1IFE80ILlzsbOIu/6+Bw6C4I0+dKe6XctjSLt74hwfgc6vDboB3YjCMmLSWwjF3MyCpj1bcBpDujAwwJ0JQpwMtiFmDQuRZa+FIuJhe2ixbKFZ6utOOcXy2RbgU42tScD5wZu4HRHbgByMYXNWyGx1BslKLzVd0fV5OsRROOn9rx5KPey+1P4dQ5UIaudHguQViGozM7i5I1ZgYBsJiqiOUDjWRD614xAM2AuR+J5MttzOkf9UuxM1aS/qSeAOgf46RkNGJWmITFH6tuv2MvqMyW2FNnzWkS8WwdL7nfrJdiKhf134JlmpGUL0Vi0xBDrOyybih4wavIjC87Vsupo6XIogk38JcxQJNLVCE1QRJoI56oL+rDuX0P2dZX7y3SXjp0F1Siwdhn27gMgrCuwDemORGYzjicdsUFbgy1FC4zcxm0D5jEyGoX1/1fKy76nNrlqtKPeAaWYotRg5bpLMJLdCMcTg1Sfj03Kco7Wu02+KiyUchjOWfahEQcPlpbHVbk0D/WFr1r0ZGvmUnKF0hHfLjVq0xvCDQIMDj31KypnvUMW7USbaZcmS8LPqIh7ocpWcxQNej4dTxvUGBMqon0yUu3I1SBFLsJMpIpVEzH1OIyj1iMDBn5bnVRoxd2zHpMuSCa78i3t6U2BMfupwJML3sTSnMAc/WWQZk5DU3QmBlIjQfiHy7DNxInoTU06A4dMEHzuB3aVgtml9382SkMrJgJ5KHMOBLps5BA7EMQSGa6IGjQ8jHZhKvZpJ2FxPhsCtx0S2a445Jx0q8Gg4XSgoxva1C63xALh/tHolXsA55IbmXawmHeO7JDNO9ovjCx
356 A0sfRQ4+gtk2NqCaqn1JR5WuQrFVY1Cr3Vo3uLeUdEGjp3GhI2rRbLwPZgrzLcBrZ0sUUq+wQ8x6waJKKq1E/h+5mQzpt94WIT+ESqgfppIEBG0t8NUZBJIyfj+abFKjQ0J9RX01lQZiU/aQRg4k0DArUcF5j6uAkLVG/NYaGhcmSlbtPKrWBPO0paXYtnbRALLAG36D1UFVr1xkn3rarz1YlYeVl8TFXPxULZKI1DNxu4bLY8SCiG51Ynmq8QRXZSwG/ol/Z8dHcgwNBSp02cgiYzAj4phG0tAUK7bOj/WKMsf4q8T3YUW1nCbbi4yL3mpwpW4MgYUIHaeQwEDYKb6eQGQ7q7oWt1HG/JIz4boDyeUG56fPRGhm5e70+kBfXPyYNPwqSv+RnP7JP/q6UK8m7/xq4oxQZurVnqtAK2tJJ7sAiBr7CxeAynTLf0cfgL4y6g7QNJhwpl69LcBa46E7IeHq3DV/GUiOVJi6ZUMMsHSD0mEt7S/lX5TyhFRx/iPIgnha2Xgly1vdOBmPQM9YWCRtEzAWcEEIHeknUpQXj9GNxSREwE0+Tuagp4aSHYOew3cCinAXAGsAxBGNMXLI0OpGmff3b8uiSXRELRyBN34V4vvxNWElTwG1ej3lGgeyBre4lsbx/RP/nyP4fZxiOCNdjkjjamfTqYTGddSwQ6MK2qMJUBd1mclQdlgTrwS5X/RJ9We5e6IBCsCywZ/JxAtoDXskH6EsxZcm5S2I7YWMz8PtT8191RdsGb6f2rlu/5cKo6BuEgXFjBdRi07Mq6KxXSkCFcBpUKR+v+69yJsDEqiIwgIlw3BLxdRUBvefHBQkKHgoU8TS7F7uedA41GlaTAsbafTuD2dgdzLMZlKm2Wb/eFosHWHtroBmb04LiYQFUbEUgA5XI3R0xgVnm3kkOvv8HnAYw/5mfGqn6HzDvXEVtJc5wUCi28gz1JDuXIWxFD5jKFbHt2Wiw5G7xO/tTZFsgGUpR
357 OB20aYmYbun+Kb5scdWWxJazxQoGChACGiXO3xV2E3tq3DkdT4W67v8O6YGmVqD1f50YIdxiDENiBdBD9RgKFLwEdHbYQNh+rx8IGYoekFgRJvFKEpkiiFhYFNO+IurKhwMc1r8KRLA8DO7GnncDVP88nIU+QmOxAYunLoPjKD8bWUk6LG863Ff2Quy9i2cBHWprshwEObIHK9H+KPUeRuLVQh2LcpUrT8fLDMMg9U8IIO0z4DR2liuaGhEq2n6LDjhrZczxZqbtPJpok8VlNwy3k0FQrAVYvvdHNdMnW4LB6Op3wOhsgMMsb+kHvEsNwofyI6CVt61TV16Aoiu8zZJz1BhoC1NQI6vKfiSUtVBvhEK3xIG7Fi5jTjlh+uN1UTUdKdVgdYGOsjpC4NtNG9UT6xlVgWZDhOc+Lnnt0Frl3imjHA2ZqBdP51v8IDcNvj0XxVqR9QOOoh+0T+5fY/EbSQumYmCai4nyqT3izRwHLzcaEjFDyz2YqIyBtLo656JlhyigwYitt54SQ5/v4XJps8QPLIIKMcPZNgRbr4pzWJFKrPjrUYXX4AmjYqGN+DsVcNZWAIvZ2Ir8iJFkku5OK7xyJ9TJ9zFcNPsyWSMVrZfilZKHgdpe+NzCOj03RZDredXxoIjNJc3uTdc0af3XXVgZOHvl/dSHd3aqov0rAJ33EYXkvQAVgS+JasRtA5p25VDxxLENayGwtsgy2dkVlPzuKU4X4L4Mi5jye6Wn9eiKS2EV1dw3BGuihJr6eQtTW6LrU+LWiyCRsHeWFEuHx9+HQC0b+8+aaznq6F/VQcc6eycaaejMuD/GcHgiQ/xSmBtzVR+/OGKriURduhnZSUocP0oZKnXlUl1ECoZnikxSbuCQ58wxgTlEuqwX8hWcKUKwafPgUZ4/0xSy6yYLr6uMhwMk5mw7NNDP30gzGbxQkLUnFq97b9AAhii4gcDETpoLGCFiMjlnSv85mBDIp+CGtDcZioq0m
358 pYG8GsbMRfYg5Xjftju8lekjb0wbLVIJvdwXdQNki5SYd0a/hZToUeJuiGgaMAr7ZwfkKG9wCX4Di5yA5GrHIGthAYTkN1o2sUZsQ66phcjDCfdfofl1ELYVw3eWWOCNGlOqOKPIXWn7wQt4mBl8hFzlmOqlHeSjHYPQJ/zGMODX04W/GLSsPVJ4jSH2oBeZO4lbhnwWAI41KiC01P1TxP48FfrjCFK6nsADCFUcmvegIjKRWafjcWrBvqZi8i9HEFjNiZhmABJwPJdFQ/0U22DtIgWlmoyp+cQTLRX+b1rB4FG0E5Qx5Zf+BvtvHSgnWAMMiRzYFyCKbZjPvThVqTkjVjkJh8JvlT3db55xkAQyWYCKAq1KKv/mx8nd2wp58GJjPWid9+J1EBbqN+uBi04115aNZlIsVzPGKXWqy8lS90oKJfew8EY5LskICJ1jCSanIvBIpgTFyEsrUNb0AFGC111SVyboooU912kJJdqIasSqR2Ws+FFvP6glmY4lbog+UgNaDD1qGBQJHI7qLfweHjM92A/xy1OKA3GLZJe+yKAGYdYpS/4bRz2P337u4KqPrj0MrUoQsa1AgGeBvIpyPK227CrqEB9B8Xgggr8GBJp+iiAybqdK/xwmLUPoZ2Fjwq5NnHXcm2aIdwhGvRCQksGn1Lx4RDaI2mE5qLxNnn0JEiLJfpW/kzdrIs5heUQ28qhZy9l8WQxUh1Zqz25jnUIMhi9KOBJz4hwLhfee9AgY/85yLfNIYM8/Chp70PQ8Oef/eayxNdGabzEsqCHuiMWyBdkuKmyZUk4jE4NY7O57EvhCC9/gPHUQz+2gFDbrx7WR7izWRKOC+/WnCBQ0/zVtdGSVPWw5CKDfFYvzHrkQvvzjDOBdy9r2G5cFZdSUNh8jO6mIWfiyReUAXKlpuFU+wVy8WJMGZdCGPRDoL32vlhclXe+DNaAUy3Wly52Ppe0s4J5jnZa0/Ee5PDtkDeov0TxcTF9iQ
359 SJph9IW3PweWyeHtPXOHioRd9EyVYlBBJaNbVLUjcv9EaqgPQe8uMxmHf00oHSU7WQt5m4+lNVouoMg3osDSFcG9RqvFFhWsGwCEoNx/Wfl6hqmcd3zPN+IhZ1s3ZCTlZCVR26OmbQJolhK25GDefC1KdzWj/NDKIfK3MIY4aZm7Vc/Lz8YJtvIu1cSOVXEOH8YSMip2fwZ31hPgZwunH6jIn60Kphc+3H6ofznu9CWRIE+/XohgRlSVPPvCiJF4+hfiUGfpkwesrJwCvqp8lUE3sXi5LhOwZCP23lt0zhFLQQ71LmFLinE3+CwdPiWpE6rlntAJcHfSFIO3X2KXA4kuG7FnPAKEd0BZznsCcnoJK9G07orRRp/8zvJPbJvfD1rw/SKNZtd96l+dL2WVgsnXC2NHYXazuhA8P5E6Z072zk2jkLe5YPZsnw7oSHOA1HWRoyx93BbtK8RLlE7kafcqrwGHbOQCn0AUpX19AaMMRd70nOLPy07WuQ9R8gDF6NZ12rp5Xfw1bxTgjZ96L0hjhr/DTFMA9LzdXHSM6OKwyHeQpCvf7s93j8MvugYxmPprh/Cp5lV4OJ+1k/2Xq3CukcaGvbXY1l4EbUSdVQizsRIexvBzH05E0+di9lnNR0E407huFo3oSYFHN/2wSXlo3SuxmBaZhtTZ+tXovXoHv6I6NQt3/1+E/6IaYvj5Cf9KUiwuOm4zXUXj1mU3jCoQB/nWTMj7PQUXioJ9LwTlLj0aOBvUwmOPI2JRYvl8Sxq4D6EALNLugceKBGn9DAyhK89Ssk9IzZqqnU13qwAa/D+l+hvi6mpV47FUNGNRxX2q0OX6eqZgwZq3oiiFaj8NAAH3/oqBqgCz4efwwWlCFYLOcsV4vem7eTnFN4EPODRlfHHSncgwQotlxMH8+pReha85x62y38C8OpXMkRbFRpgBqcg+yqP0rE8Iz7F2qof4xW52D1SnAiJOXUe+s9v03wjdemJdebmsS
360 m8iYUqkUTHsskPngNa8y0j4CsNHAjWkjb7EtbNYvkeq9Zrne5l5BAR603MRBNC0Qht/euxu2gee5cIGon7DbOnxIY/ezQMDPk0k0E2TvppuVj2KBKQ2kad1km0spldaiRKpru/EhJp4Vi9cBKsRZPCPsU8jH1ibgSwY66PtJkScKm4WruZYX/saiqxuLFIrH4ZP5LdrLL9kJtQJQfbUOmPBXXrIuw1HgRWffDZ0OOSlkZ/nMchyjOMNPOl6xLdmPk+sgohunqLoKpfwGrtIux1RxdHk3U3YXtsY9GZAHO6wUXQcUMneg3LOd1DWQ8OxFp7cRGbDPPPBHg+OzSTPs74gFppiUGi+3RTRBoXU2jqQ5uUWoKVO+S+OPVLK8pSC7YWFugSyHdlg3gut7HzasGvSqPqroMtvMqcOJZz3HmPH26aGf83krZyTF2D4wpc+QeEwMEVPkhJeXMPom+5qy3YKUzlVBh81A5OuVu7mpn9w3+aIdCWAP97IL+ZovLkNhaxqQBaXbL1ZqmLnqw+Y5GaACaGCcxRv+0JM45FQlVJaSdPiy0j9GriXJZN/UHOahVgkRPOhg3BBlRBzfaQGGqJszMiDaZJyzTHHWqbUbdp85BejRlJCXq5UpPoMh2KLm38GpTl0TQLp4RT/ODIu1ejWm1hDP/oaoh9/nEQYqjhNQFUD9IpXQgVhjEIhU1Z8QhYIWDD6kYojlfFTqFqqT7b8eyNFBUpf1mfqTG2l7/DT24cTmdUcN/KSGnPBSpWTI+7VBE4geIhPkcikgIQCRLQg0zNbvwoJnToaAkWZOUhgIdmfRcUxCynq7G73QR9qK73T83HuhnIs3kQNvlzY0H+vkbaYm6xYE2VBBm9GB3bjNpRcw2f3uCsp3Yk9dhtFKDeW0z15Ga6egzYktxAioGUGNcQWlYHr2Pv576uOgNo86WtXoc1aVPeEITwnCDDBPSEzk1Hguh+/PgGE9Fv6yOtsd9GL0HtbL0vg6z
361 rDSU0439/MBXqwZbXzfKTzjObWCVRrVj7OojyXN3tmqhBE0lfOKtn7LUOE8704VDMAeRIE4L9l88sLeLI6YWGk04XnK7Ocst9bgLL0rEvg8y1EdP/WFNkrrzKu7D7v5itCHYFpkxQnXYlfguhqDWVEqLVMNWsVwNiM5qh3FMeUPRHH47dB1yYF5PEdpDuCyT3F5yUlkCFRDr+49apHFnUMRW3xUUsW9DrvfjYc275/kB0f0ex/rXThJUoT7WFwbr82JOeOAsU8kwyShkqjBgUKq2HoMmFU6RYcYARxFe8LvpepYexe6xyABW9lbOuwOC3SOwx5iAqPxKVA/HrZeg8/YYrjyStSuw49JSnTGG4o01YnJ7XyRsqhe5AXpwXWtu1DGurhyzF+EkpEGyuOBc1m4Ik3NheX/kDTi7TchS+0lfuMKdcAnSIKQIfsRmCA9ImCE4kQ2BXZ7wAN9XLmCg8BWm8kYIYe24fY7ywyrM2uT3pgnhHQiCJuw7V+r7a7z76HVMPeiO74SWoj8QfQR63SuR2w74s2QcwyD8E7ntb+B6Pxu59Lm4WE1sDenSaYEcx7wpdLwWAX0jD5T8hKajCdnOBpybVLC3GiK/DHsOPJLt+uncj999DXX2GXKWHki8NmLKNFjf/uzdkltQkVEG3XUCZFXjm4kL7z6MWJPRMkMvmgIeQiljdVN4gbLpUclNxYpMGcmUsCscjttrbYAhyeId0wwscopgWiJAq+pFMniLIwUJZwr6RXXbTXvMd8+t6KN0tlKfQoRWrBwZVQmBDLbdZfRw4U1RIfzNYRjRJvG8Gj4qSoYYHoyxOzEpLIJIXIXOJYSGR3JlHb48hXAB7FgpJ41njexHH0fjpCs4mycHbSOalRSc/5q30uUobCDrZsM76ZN5avqbjO4yFe93D8llKmecp/5MK+T/Bbhd6LOsLTuqZnMqYQ5yhIarGRYi/kp4CX04suLhaGCdubdM7YsegZKpRBtye2c2v
362 3qSywuebqhimHvrlBDfibFYOWuaJ+yaacMLdOhJTD+c/PXxv95rEeqXb/JDgbhup5pwY5q5G42YvqW5K4m5zsJ65i/16k6FMCGtGzCAE3s6DEkN3g/qJf8V3go4ZtqFmOFUImf+GvW9fVNfmHwb7WIRb8Yu4JnebghAlTXn1TfbgFVOPWcUrsrpTXkfyX6DKefJPI+zQboyZ61i5498EypmHD5UakM5CAVKNx7fMdnC4tk1r6puhZdQivBVS+Ohhv4IoVRalLZMmqtHkJ6G0OaH0lgg796CaHIXugvstgKncvC5eic6wpG7IJdLQt9N7Aqoq0dkGmZmNXgIpF0TczF9MtSux8+9Dt/2fXrf9aI9KDJ9QasZ2yl98TL5dh4ac1K4S3iooS8c5Hkg0v44/1xagvnRGLQ9l3AHfALanTQcFvkVbGl2fwje25Wvamp0cLzYJGPQx0mqjuOg9YhiMmrUuC8cdCXAK3B8LHfv19i1Y+Bh501DuvzZFKifeRC9X8MRfg1ozpsW69DQLkS69D8cDuFrhEnHRmEh7rsDmobWnKXIcDbt2NshPVWQe1apH5c08spcIEWG5Co/SaEX9arp9ynX2/FDeWlW1XhK9VapLBDNpb7/qp9BGuTWx4u5AjRfSXRVyGltlZrrJ3awyM1kONPRKo09lcM0JRsfuQpEFFUQLBk80Jg1VYNo8BlPo2YFMoBEltZxJzbRRCJNPc5PWCyNHoEgry2e0foii/pmHimkihl3s157v2M7D+dt4hPAz1dwS56wgAtvFLq7mXs4giEOWR2vRqfB7NaeyDbN+ZiJ154YZLlAP2v1xFJS64T0XZ2zjmdZaUmzXKBZ9m9oG45fhRqk9+2UwlroUIfH//SqVNfJ5ffFftOr8rfcKWUMuxCY/OERphRQ3uZgyrxZSeM4VW0OpqqbHRnsCOpW5hDO/AAp75jyBGdu7QfYec06Wx0VUVx98whnY8VTxhGNLljxJNrXN88DGn
363 jHztGTnXmPqtdklu6MIYgkeiFo7QzZpUGvqwD87p8ikkhkBQ0+hVunMyRdrkYgoNhaDkIabvZ1IOhwW9XFOv8RCJisCsNbaVwEJg1OjFf+bM3dAkwv3mrN7WDJgUi3egHNfW5HIH4tVoSnl4MMohuNfHeRtW3GTtNE1jLVdfglbMF5XAP5lLVsHsVaruOMtDs2yMegXtbS+yIaVFVWzvkitwUtt7ke5CulZNCrQ3ibqQ2+3YZaqg1U8hqaUY20Xiz2lUeRSah4BsQXPGfN+8SN2D404c3e0BQNni+p4yVPdUIQgClRewJCqAIeBbQbMvhWrdI+TD9V1bSP548asX3bB9Ud4e0afTi2gKtMX9uNNHHltvgjF0iLd2OBIDoJBWjFGUqrKP+NzYIKvOrl+nBm9ZrWpEplrEJwkXe+18o7NIHHlA5rXuXH2Wbsoep3M9Ad+jyYOhGoZfoO9flD5abXZpleoJiPl50ZdS9n2zJ0B50wa1LjnA7OKyimr7oGJmwmG0WcmhOlf8EQ8SaHd7LlXjQwHKvHaaMZiznsEvWRafeCnD6C6x4R30yf0P5qaNAMVeHmfTlzxExPPd94QNH5I9bpYzga4zgrfaeHXb0r664MVjtIwy+m7mlF7NuOYzO3q/kw1Ni2o4IJ2IouwWbZGp4xScVgVR/4VSuV5k+D25nnyXm5TLbXw/4iFR19Jk+5DEcbrw/IDef5vkzePRuunCLPEqXSFA4AqgTUZ0zkxo45ctaZYKtFtj5PHQJSktqxwiEQV5Iq1lg+qDGe30bkeJeG0/VYc0hvcgdcYAx3f9ViREIx6/z81LcaT0/nmaEux/p2vkJl2uWq0FGDHX3avxl9tvd0zJFQTplUh5qc16SV17LNGAs1XKqWlaXI1o5E4NznRmluBP4M74Dsj9rgc60czeWh+ccxyalDXEzwxPUs7CV/Adnr67i8imY6ovykJXdHD/8zNNUNcBXPQsEObhnE7HM85jQHf8t
364 FEO1P3orOzq68OY7adjxuHL6wm6bQxiDG2fsMmKf9j0hLObCeDexe7uusgBDIUupo7KqO1McoMKU9HMJbrbCZgd3yjkFTKhV/5EXK1fpYF3zOshnY6FZ8C4TxYqaK4Z3eJXkzRxucaT/h3ZMBY0B55foqNKPXoHyumt18CelUwWtAaWhJyeIHFAR4P2+CVFY3n3IUnG15FFRHn3OTiv8G44xZCMHWHr54wGqui25fc13kobLhsQ9e4QugI/905uxmnq/6qUe1LakaGsrrJJ6aaNePgKTbAMTw+pxdspYR8k0g4/ojnkASpKoPd9yRuxxFaRjVPS+vBjEU5tlhAJdvAhn23ayyBILlc/UJD1Bmmzw1GUPNXgYAk0MMcxt0J2X6Ukkp6zIN7DUNE2KtqllYipXE2yuil8mC6glSg0f0Oqrkewg8ZHxu0tZylGMSFAaDDWOjL1MpScyNUndiQi9BqhucC7btpVQZeFKH4eoz7fIaFqSmPnZggf7LKnXsboLhyMBKDoxUVykWX6UwF3SYZ2tNdk40vsD6xPRyuIB7kg7sGK7KB+/Y8qiOPxoff3xWOhbzGzvmJ3ZMe83ghNzDS6syoEN3zK242wH/v+/4oeMPH7RSB9Y/Wnjo+un6QzJJYnz8DuICOPiN9VcwyEXVDjAdGKmMPwqvEL0tvn+ufLx+VBOll2e5EJ99FcIlWDsKLOFW14Nw4Ej8tx1ze8GO5R6Ycbo5AFvhQBaDcFMIqCvwKbvu/kPlnGPeN7b5i/6+PgZUjzS6nGC/PpF/Odv5DaR9TwQu60b5uOL5qZRtwu2picPShIeTN1YfOGsCA6uPOqI1jGAlhuNIBm5xZTgdDeVFN2l3MYYQ+S1dazW4WOqvmKgzv/KXdmjM/fCEs5lIviWmPwCwAl3n6btjqVhCzeRC4wquGOyjSVF2ezyK1znQFUNAHkt4rvPIAmzvP8AQ8jIG/dnRUvOoDD/ytvUu4622EzdzLGtRtzZe
365 xApwzzfCQVWp3oRONqhDIraZdVijtdSXCT6WJvMmgwSmgQFPw2dIegtF5gihjTb2SnjKz3dA7tsUKKVm7B+UAFPP06al0XDkh+C9t428rrk/TWJfIcb5DJPmX2cCMEs4Fj2xhf5Doz6A8BMXdyfuzfk8MXcOPzvhQc8Uw3DrazudoP+yXgLnXiFBxiblv9VcrMsbvvUu4kHHLh/AdfflhxK6yPXjXYQWUhKT5TbjFSce2LfmRtaz/TXAW/FWsBJGzp0RE+FzZLrwEqlcqGEbvCV6y/3I3C7E6FsD5Y1v4YZVZ/ARvN5Yij//0GJp4xfOeA/egf2Fg9QDvLGYV+wRpNmvbvYDHqPkFpDNS9BqGqhNV4leOiDA1Vhn8ZNDdg3iILW03qDvD5yF7fPPbUBdn2KHuBfBLJ5xPK/krDlN2mvooPbyQHTbJj8wDe6I3aMyLZ0gtdQR/mLY2wks+oRlEruYt7hNP0zDlaTog68VT0GaTn2kmfWQJp36RINY/tEyvGVKMTHkH3EQ1Wm8AA3yDjU0eKGbEpVCR2MQcDOAs0l/ywE5xTasRnNBymYR8plLa5X/QJ6Pm4FtxDzKw8aiHpMqXn1zP++gse2ozXnf0v1Ui6dG04dFicXrGl6RV4ikAU1zP7BStd4Ev0nD7w25Ii5GEeTwTjSjhnL/1u/eeuPoALsLOWG+vnTLy+smhyeTqy6LYgVpAnF+6nFB084Ukjeo3U+j6Bt2SZhMK6XrAoTpPGTuMpJbGcf46C/rOLpa/S/0pX/3woSLsQ9tghqygH4wVLeUxKrQ27aBBlNb0YyZ6vXwDjhtggmeqWrGeExt79QUWQdtuG0blcDlmmlUVwdZrhL341Lag66/W1fV1GisnJemK0ZQfFuzC4FlkOP2rfFF1YZdjO3qjMXj4lfiKO/XduCjLN5i1Dd8+U0d9+5ZCF05Zsvqi618n9OQqtQP9wzjgfvxInHYREm+zGOigYNXFnyFi13EjZMBy
366 dnMs/VJI0w4p6SmwP3PXxKPRU6pOaNmZmFkRkNBKPJgTUFaZFyNxAY0zCySLPkcUFNA1riamQ0FhZGuNQV8p0XubSxIIZ4WeZDPGQ1kB5nInC7E3GchwHXhHAMjcCpmLUsR1F/8ePSQF9K+QTZ542qEMepy7d5FhfxrUtP8pvVsi+r6v+M5zvdRfrzyJIu/9UhlbvEICsMJluLCiIGN+80TfYszGT88fToluUZ1DKngPt4ddSxWLpqobH7zonSaCVyF9F11fnkKYxcegeZST0YRYREeJ2PDq6/AJB/GMqeoPiAFrY0+IY5vuPGQmvzKJqmOogyPugjkmGn5nfq4PK9+d7OAEnwZQo+bwAMvrBam+DqX87ND6PFsDU4jLRA9mDx99BIjI/d0WRgdTYq62KIRaaWPTQseM11xSNsNW3YYaFTpAX10WxUpbnHUtyJZh9UW1+EiDL5UQSKf3Og5XSmRhZCjnhshjGd7NZxC5uD4uVXlWwr2euoUrQq+Rsi5yvsNekPpvBo1Kw/P2Tok6ukIr5U9Tr8tjjRUX5m8ww+Yd/y8hG/xg5/RqlaJQJ6q8NQw90TMfoOATyx65VNoqSkjXFTuyFX6dmAusEVRe7kM3L47Ihay3rRvXCOCmi+HlX6XWk8jcnZPpmw/U+6j5ijo4d0RUSlfhVzuctxptp8CQm89O15r+3nUevohP94gqS5LvtNy5LQJxC8Q4snr1l99+vTlmNnsAnSfe3JF71F8i/XXHpzps4peCg9KC15fcudjOi+mjdwFmYrzW+DSxg67d4U0xuo360vR+tRwWRwPNqtmp2GGhqgb+Nk6nM30J+qkn0/RLj/OVX3627GGdtLJA4g2X3wrxgMv9yKuuA5J2jd9lH/j5qtZxOzO5RL9aZMaJcKB8+qCSdeT0Eqx0n7gf9VA2YVmdYbqom8tPrI+qj8uk+pA1UnbmnkqQZ9rax6lV24Dhmrud+dUqf4I4tXMeTGILn0WQn+gT3
367 /jLRVwa4rQ2eRXjf6CVKr7lUPb/FFweng7TKEYWE8bwOGFbVcnIeFAhItuuBTLPn10J/F0m42/FRUN59TOLCgpfDorY2XGMzOfeGzGzBl/+9tjr7+YlfVW5jMznn7sL0/MeHLG48+8mpXdzvSJgEM8c7p5xcv/L2+6cHTcmy7IuHgKxgWkuSCR5oq4N2JeinXI/K33t13gnk3WB5QT7yn/P7yxnPn/XxBOVug3he6Z/wc6K4ayAAAAeJxjYGBgZACCS9IZNmD65+4+GA0ARvgHuwAAAHicY2BhYmCcwMDKwMDow5jGwMDgDqW/MkgytDAwMDGwcjLAgQCCyRCQ5prC0PCR8Zsy44H/Bxj0GKcyqAKFGeEKFICQEQAJOQuTAAB4nN3OPQ7CMAwF4OcWaJMmaSRUJFCHqEjcjRtxkF4MEzywtOZ3hZknWfaTvsEASjynB+GeURs9+gIn3QOSXsWZuOSKDW858SHHvM5dPl43YiRKL/tpAtSAl2qimuFjOsHbtAhFoAB/89lfnHW1q5qxMTbZnW2tef3wJbTCb/CPMwM4ACwLAAAAeJxjYGRgYADi0OesrfH8Nl8ZuJkYQODSz919cFr0/23GV4xTgVwOBrA0AFr7DRcAeJxjYGRgYJz6/zaDHhMDCDC+YmBkQAVMAF+2A5AAAAB4nGNiYGBgYmDQAkN9BgcwDSJ9GBQYlMBsiJgolNZi0AbiLLg6ECnF4AhWB+H3AlVAeA4AdyMJHQAAUAAALQAAeJyNkD1qw0AQRt/KkiHGmKRzE9jSxEistjDYuFadyr0xQgiEFiSfI0dJm3PkAj5LRtIE3Bi8MMybH775WGDFN4b/FykblrwrRyTslGds+FKOZedXOeHVoDxnabayaeIXVZ3YsBaaOGLBh/KMT47Ksez8KCdYbspz1uZtkOoJXKg505BKBCqJXgbhUp+btAlVkOpuoJ1CqpbrmDuZlaLuyXCSDxKPhKepZy9dP4Yjl/+gCO2
368 1CF1VWp85e7D3BqT0+9Sn3uW7pz2fxFMn7Xp0auXOcCkb8+CSU9n1dWitc3nmnLPPKv8Br9RH5wB4nGNgZgCD/wcYJIEUIwMaAAArwwHdAAA=") format("woff"),
369 + url("social-logos.ttf?51b607ee5b5cb2a0e4517176475a424c") format("truetype");
370 + font-weight:normal;
371 + font-style:normal;
372 +}
373 +
374 +.social-logo {
375 + font-family:"social-logos";
376 + display:inline-block;
377 + vertical-align:middle;
378 + line-height:1;
379 + font-weight:normal;
380 + font-style:normal;
381 + speak:none;
382 + text-decoration:inherit;
383 + text-transform:none;
384 + text-rendering:auto;
385 + -webkit-font-smoothing:antialiased;
386 + -moz-osx-font-smoothing:grayscale;
387 +}
388 +
389 +
390 +/* Icons */
391 +
392 +
393 +.social-logo__amazon:before {
394 + content:"\f600";
395 +}
396 +
397 +
398 +.social-logo__behance:before {
399 + content:"\f101";
400 +}
401 +
402 +
403 +.social-logo__blogger-alt:before {
404 + content:"\f601";
405 +}
406 +
407 +
408 +.social-logo__blogger:before {
409 + content:"\f602";
410 +}
411 +
412 +
413 +.social-logo__codepen:before {
414 + content:"\f216";
415 +}
416 +
417 +
418 +.social-logo__dribbble:before {
419 + content:"\f201";
420 +}
421 +
422 +
423 +.social-logo__dropbox:before {
424 + content:"\f225";
425 +}
426 +
427 +
428 +.social-logo__eventbrite:before {
429 + content:"\f603";
430 +}
431 +
432 +
433 +.social-logo__facebook:before {
434 + content:"\f203";
435 +}
436 +
437 +
438 +.social-logo__feed:before {
439 + content:"\f413";
440 +}
441 +
442 +
443 +.social-logo__flickr:before {
444 + content:"\f211";
445 +}
446 +
447 +
448 +.social-logo__foursquare:before {
449 + content:"\f226";
450 +}
451 +
452 +
453 +.social-logo__ghost:before {
454 + content:"\f61c";
455 +}
456 +
457 +
458 +.social-logo__github:before {
459 + content:"\f200";
460 +}
461 +
462 +
463 +.social-logo__google-plus-alt:before {
464 + content:"\f218";
465 +}
466 +
467 +
468 +.social-logo__google-plus:before {
469 + content:"\f206";
470 +}
471 +
472 +
473 +.social-logo__instagram:before {
474 + content:"\f215";
475 +}
476 +
477 +
478 +.social-logo__linkedin:before {
479 + content:"\f207";
480 +}
481 +
482 +
483 +.social-logo__mail:before {
484 + content:"\f410";
485 +}
486 +
487 +
488 +.social-logo__medium:before {
489 + content:"\f623";
490 +}
491 +
492 +
493 +.social-logo__path-alt:before {
494 + content:"\f604";
495 +}
496 +
497 +
498 +.social-logo__path:before {
499 + content:"\f219";
500 +}
501 +
502 +
503 +.social-logo__pinterest-alt:before {
504 + content:"\f210";
505 +}
506 +
507 +
508 +.social-logo__pinterest:before {
509 + content:"\f209";
510 +}
511 +
512 +
513 +.social-logo__pocket:before {
514 + content:"\f224";
515 +}
516 +
517 +
518 +.social-logo__polldaddy:before {
519 + content:"\f217";
520 +}
521 +
522 +
523 +.social-logo__print:before {
524 + content:"\f469";
525 +}
526 +
527 +
528 +.social-logo__reddit:before {
529 + content:"\f222";
530 +}
531 +
532 +
533 +.social-logo__share:before {
534 + content:"\f415";
535 +}
536 +
537 +
538 +.social-logo__skype:before {
539 + content:"\f220";
540 +}
541 +
542 +
543 +.social-logo__spotify:before {
544 + content:"\f515";
545 +}
546 +
547 +
548 +.social-logo__squarespace:before {
549 + content:"\f605";
550 +}
551 +
552 +
553 +.social-logo__stumbleupon:before {
554 + content:"\f223";
555 +}
556 +
557 +
558 +.social-logo__telegram:before {
559 + content:"\f606";
560 +}
561 +
562 +
563 +.social-logo__tumblr-alt:before {
564 + content:"\f607";
565 +}
566 +
567 +
568 +.social-logo__tumblr:before {
569 + content:"\f214";
570 +}
571 +
572 +
573 +.social-logo__twitch:before {
574 + content:"\f516";
575 +}
576 +
577 +
578 +.social-logo__twitter-alt:before {
579 + content:"\f202";
580 +}
581 +
582 +
583 +.social-logo__twitter:before {
584 + content:"\f610";
585 +}
586 +
587 +
588 +.social-logo__vimeo:before {
589 + content:"\f212";
590 +}
591 +
592 +
593 +.social-logo__whatsapp:before {
594 + content:"\f608";
595 +}
596 +
597 +
598 +.social-logo__wordpress:before {
599 + content:"\f205";
600 +}
601 +
602 +
603 +.social-logo__xanga:before {
604 + content:"\f609";
605 +}
606 +
607 +
608 +.social-logo__youtube:before {
609 + content:"\f213";
610 +}
611
612 diff --git a/plugins/jetpack/_inc/social-logos/social-logos.eot b/plugins/jetpack/_inc/social-logos/social-logos.eot
613 new file mode 100644
614 index 0000000..9b8a76f
615 Binary files /dev/null and b/plugins/jetpack/_inc/social-logos/social-logos.eot differ
616
617 diff --git a/plugins/jetpack/_inc/social-logos/social-logos.html b/plugins/jetpack/_inc/social-logos/social-logos.html
618 new file mode 100644
619 index 0000000..94119b4
620 --- /dev/null
621 +++ b/plugins/jetpack/_inc/social-logos/social-logos.html
622 @@ -0,0 +1,428 @@
623 +<!doctype html>
624 +<html>
625 + <head>
626 + <meta charset="utf-8">
627 + <title>social-logos</title>
628 + <style>
629 + body {
630 + margin:0;
631 + padding:10px 20px;
632 + background:#fff;
633 + color:#222;
634 + }
635 + h1, div, footer {
636 + font-family:"Helvetica Neue", Arial, sans-serif;
637 + }
638 + h1 {
639 + margin:0 0 20px;
640 + font-size:32px;
641 + font-weight:normal;
642 + }
643 + .icons {
644 + margin-bottom:40px;
645 + -webkit-column-count:5;
646 + -moz-column-count:5;
647 + column-count:5;
648 + -webkit-column-gap:20px;
649 + -moz-column-gap:20px;
650 + column-gap:20px;
651 + }
652 + .icons__item,
653 + .icons__item i {
654 + line-height:2em;
655 + cursor:pointer;
656 + overflow:hidden;
657 + }
658 + .icons__item:hover {
659 + color:#3c90be;
660 + }
661 + .icons__item i {
662 + display:inline-block;
663 + width:32px;
664 + text-align:center;
665 + }
666 + .icons__item:hover i {
667 + -webkit-transform:scale(1.5);
668 + transform:scale(1.5);
669 + }
670 + footer {
671 + margin-top:40px;
672 + font-size:14px;
673 + color:#999;
674 + }
675 +
676 + /* Generated by grunt-webfont */
677 +
678 +
679 +
680 +@font-face {
681 + font-family:"social-logos";
682 + src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
683 + font-weight:normal;
684 + font-style:normal;
685 +}
686 +@font-face {
687 + font-family:"social-logos";
688 + src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
689 + src:url("social-logos.eot?#iefix") format("embedded-opentype"),
690 + url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"),
715 + url("social-logos.ttf?51b607ee5b5cb2a0e4517176475a424c") format("truetype");
716 + font-weight:normal;
717 + font-style:normal;
718 +}
719 +
720 +.social-logo {
721 + font-family:"social-logos";
722 + display:inline-block;
723 + vertical-align:middle;
724 + line-height:1;
725 + font-weight:normal;
726 + font-style:normal;
727 + speak:none;
728 + text-decoration:inherit;
729 + text-transform:none;
730 + text-rendering:auto;
731 + -webkit-font-smoothing:antialiased;
732 + -moz-osx-font-smoothing:grayscale;
733 +}
734 +
735 +
736 +/* Icons */
737 +
738 +
739 +.social-logo__amazon:before {
740 + content:"\f600";
741 +}
742 +
743 +
744 +.social-logo__behance:before {
745 + content:"\f101";
746 +}
747 +
748 +
749 +.social-logo__blogger-alt:before {
750 + content:"\f601";
751 +}
752 +
753 +
754 +.social-logo__blogger:before {
755 + content:"\f602";
756 +}
757 +
758 +
759 +.social-logo__codepen:before {
760 + content:"\f216";
761 +}
762 +
763 +
764 +.social-logo__dribbble:before {
765 + content:"\f201";
766 +}
767 +
768 +
769 +.social-logo__dropbox:before {
770 + content:"\f225";
771 +}
772 +
773 +
774 +.social-logo__eventbrite:before {
775 + content:"\f603";
776 +}
777 +
778 +
779 +.social-logo__facebook:before {
780 + content:"\f203";
781 +}
782 +
783 +
784 +.social-logo__feed:before {
785 + content:"\f413";
786 +}
787 +
788 +
789 +.social-logo__flickr:before {
790 + content:"\f211";
791 +}
792 +
793 +
794 +.social-logo__foursquare:before {
795 + content:"\f226";
796 +}
797 +
798 +
799 +.social-logo__ghost:before {
800 + content:"\f61c";
801 +}
802 +
803 +
804 +.social-logo__github:before {
805 + content:"\f200";
806 +}
807 +
808 +
809 +.social-logo__google-plus-alt:before {
810 + content:"\f218";
811 +}
812 +
813 +
814 +.social-logo__google-plus:before {
815 + content:"\f206";
816 +}
817 +
818 +
819 +.social-logo__instagram:before {
820 + content:"\f215";
821 +}
822 +
823 +
824 +.social-logo__linkedin:before {
825 + content:"\f207";
826 +}
827 +
828 +
829 +.social-logo__mail:before {
830 + content:"\f410";
831 +}
832 +
833 +
834 +.social-logo__medium:before {
835 + content:"\f623";
836 +}
837 +
838 +
839 +.social-logo__path-alt:before {
840 + content:"\f604";
841 +}
842 +
843 +
844 +.social-logo__path:before {
845 + content:"\f219";
846 +}
847 +
848 +
849 +.social-logo__pinterest-alt:before {
850 + content:"\f210";
851 +}
852 +
853 +
854 +.social-logo__pinterest:before {
855 + content:"\f209";
856 +}
857 +
858 +
859 +.social-logo__pocket:before {
860 + content:"\f224";
861 +}
862 +
863 +
864 +.social-logo__polldaddy:before {
865 + content:"\f217";
866 +}
867 +
868 +
869 +.social-logo__print:before {
870 + content:"\f469";
871 +}
872 +
873 +
874 +.social-logo__reddit:before {
875 + content:"\f222";
876 +}
877 +
878 +
879 +.social-logo__share:before {
880 + content:"\f415";
881 +}
882 +
883 +
884 +.social-logo__skype:before {
885 + content:"\f220";
886 +}
887 +
888 +
889 +.social-logo__spotify:before {
890 + content:"\f515";
891 +}
892 +
893 +
894 +.social-logo__squarespace:before {
895 + content:"\f605";
896 +}
897 +
898 +
899 +.social-logo__stumbleupon:before {
900 + content:"\f223";
901 +}
902 +
903 +
904 +.social-logo__telegram:before {
905 + content:"\f606";
906 +}
907 +
908 +
909 +.social-logo__tumblr-alt:before {
910 + content:"\f607";
911 +}
912 +
913 +
914 +.social-logo__tumblr:before {
915 + content:"\f214";
916 +}
917 +
918 +
919 +.social-logo__twitch:before {
920 + content:"\f516";
921 +}
922 +
923 +
924 +.social-logo__twitter-alt:before {
925 + content:"\f202";
926 +}
927 +
928 +
929 +.social-logo__twitter:before {
930 + content:"\f610";
931 +}
932 +
933 +
934 +.social-logo__vimeo:before {
935 + content:"\f212";
936 +}
937 +
938 +
939 +.social-logo__whatsapp:before {
940 + content:"\f608";
941 +}
942 +
943 +
944 +.social-logo__wordpress:before {
945 + content:"\f205";
946 +}
947 +
948 +
949 +.social-logo__xanga:before {
950 + content:"\f609";
951 +}
952 +
953 +
954 +.social-logo__youtube:before {
955 + content:"\f213";
956 +}
957 +
958 + </style>
959 + </head>
960 + <body>
961 + <h1>social-logos</h1>
962 +
963 + <div class="icons" id="icons">
964 +
965 + <div class="icons__item" data-name="amazon"><i class="social-logo social-logo__amazon"></i> social-logo__amazon</div>
966 +
967 + <div class="icons__item" data-name="behance"><i class="social-logo social-logo__behance"></i> social-logo__behance</div>
968 +
969 + <div class="icons__item" data-name="blogger-alt"><i class="social-logo social-logo__blogger-alt"></i> social-logo__blogger-alt</div>
970 +
971 + <div class="icons__item" data-name="blogger"><i class="social-logo social-logo__blogger"></i> social-logo__blogger</div>
972 +
973 + <div class="icons__item" data-name="codepen"><i class="social-logo social-logo__codepen"></i> social-logo__codepen</div>
974 +
975 + <div class="icons__item" data-name="dribbble"><i class="social-logo social-logo__dribbble"></i> social-logo__dribbble</div>
976 +
977 + <div class="icons__item" data-name="dropbox"><i class="social-logo social-logo__dropbox"></i> social-logo__dropbox</div>
978 +
979 + <div class="icons__item" data-name="eventbrite"><i class="social-logo social-logo__eventbrite"></i> social-logo__eventbrite</div>
980 +
981 + <div class="icons__item" data-name="facebook"><i class="social-logo social-logo__facebook"></i> social-logo__facebook</div>
982 +
983 + <div class="icons__item" data-name="feed"><i class="social-logo social-logo__feed"></i> social-logo__feed</div>
984 +
985 + <div class="icons__item" data-name="flickr"><i class="social-logo social-logo__flickr"></i> social-logo__flickr</div>
986 +
987 + <div class="icons__item" data-name="foursquare"><i class="social-logo social-logo__foursquare"></i> social-logo__foursquare</div>
988 +
989 + <div class="icons__item" data-name="ghost"><i class="social-logo social-logo__ghost"></i> social-logo__ghost</div>
990 +
991 + <div class="icons__item" data-name="github"><i class="social-logo social-logo__github"></i> social-logo__github</div>
992 +
993 + <div class="icons__item" data-name="google-plus-alt"><i class="social-logo social-logo__google-plus-alt"></i> social-logo__google-plus-alt</div>
994 +
995 + <div class="icons__item" data-name="google-plus"><i class="social-logo social-logo__google-plus"></i> social-logo__google-plus</div>
996 +
997 + <div class="icons__item" data-name="instagram"><i class="social-logo social-logo__instagram"></i> social-logo__instagram</div>
998 +
999 + <div class="icons__item" data-name="linkedin"><i class="social-logo social-logo__linkedin"></i> social-logo__linkedin</div>
1000 +
1001 + <div class="icons__item" data-name="mail"><i class="social-logo social-logo__mail"></i> social-logo__mail</div>
1002 +
1003 + <div class="icons__item" data-name="medium"><i class="social-logo social-logo__medium"></i> social-logo__medium</div>
1004 +
1005 + <div class="icons__item" data-name="path-alt"><i class="social-logo social-logo__path-alt"></i> social-logo__path-alt</div>
1006 +
1007 + <div class="icons__item" data-name="path"><i class="social-logo social-logo__path"></i> social-logo__path</div>
1008 +
1009 + <div class="icons__item" data-name="pinterest-alt"><i class="social-logo social-logo__pinterest-alt"></i> social-logo__pinterest-alt</div>
1010 +
1011 + <div class="icons__item" data-name="pinterest"><i class="social-logo social-logo__pinterest"></i> social-logo__pinterest</div>
1012 +
1013 + <div class="icons__item" data-name="pocket"><i class="social-logo social-logo__pocket"></i> social-logo__pocket</div>
1014 +
1015 + <div class="icons__item" data-name="polldaddy"><i class="social-logo social-logo__polldaddy"></i> social-logo__polldaddy</div>
1016 +
1017 + <div class="icons__item" data-name="print"><i class="social-logo social-logo__print"></i> social-logo__print</div>
1018 +
1019 + <div class="icons__item" data-name="reddit"><i class="social-logo social-logo__reddit"></i> social-logo__reddit</div>
1020 +
1021 + <div class="icons__item" data-name="share"><i class="social-logo social-logo__share"></i> social-logo__share</div>
1022 +
1023 + <div class="icons__item" data-name="skype"><i class="social-logo social-logo__skype"></i> social-logo__skype</div>
1024 +
1025 + <div class="icons__item" data-name="spotify"><i class="social-logo social-logo__spotify"></i> social-logo__spotify</div>
1026 +
1027 + <div class="icons__item" data-name="squarespace"><i class="social-logo social-logo__squarespace"></i> social-logo__squarespace</div>
1028 +
1029 + <div class="icons__item" data-name="stumbleupon"><i class="social-logo social-logo__stumbleupon"></i> social-logo__stumbleupon</div>
1030 +
1031 + <div class="icons__item" data-name="telegram"><i class="social-logo social-logo__telegram"></i> social-logo__telegram</div>
1032 +
1033 + <div class="icons__item" data-name="tumblr-alt"><i class="social-logo social-logo__tumblr-alt"></i> social-logo__tumblr-alt</div>
1034 +
1035 + <div class="icons__item" data-name="tumblr"><i class="social-logo social-logo__tumblr"></i> social-logo__tumblr</div>
1036 +
1037 + <div class="icons__item" data-name="twitch"><i class="social-logo social-logo__twitch"></i> social-logo__twitch</div>
1038 +
1039 + <div class="icons__item" data-name="twitter-alt"><i class="social-logo social-logo__twitter-alt"></i> social-logo__twitter-alt</div>
1040 +
1041 + <div class="icons__item" data-name="twitter"><i class="social-logo social-logo__twitter"></i> social-logo__twitter</div>
1042 +
1043 + <div class="icons__item" data-name="vimeo"><i class="social-logo social-logo__vimeo"></i> social-logo__vimeo</div>
1044 +
1045 + <div class="icons__item" data-name="whatsapp"><i class="social-logo social-logo__whatsapp"></i> social-logo__whatsapp</div>
1046 +
1047 + <div class="icons__item" data-name="wordpress"><i class="social-logo social-logo__wordpress"></i> social-logo__wordpress</div>
1048 +
1049 + <div class="icons__item" data-name="xanga"><i class="social-logo social-logo__xanga"></i> social-logo__xanga</div>
1050 +
1051 + <div class="icons__item" data-name="youtube"><i class="social-logo social-logo__youtube"></i> social-logo__youtube</div>
1052 +
1053 + </div>
1054 +
1055 +
1056 +
1057 + <h1>Usage</h1>
1058 + <pre><code>&lt;i class=&quot;social-logo social-logo__<span id="name">name</span>&quot;&gt;&lt;/i&gt;</code></pre>
1059 +
1060 +
1061 + <footer>Generated by <a href="https://github.com/sapegin/grunt-webfont">grunt-webfont</a>.</footer>
1062 +
1063 + <script>
1064 + (function() {
1065 + document.getElementById('icons').onclick = function(e) {
1066 + e = e || window.event;
1067 + var name = e.target.getAttribute('data-name') || e.target.parentNode.getAttribute('data-name');
1068 + document.getElementById('name').innerHTML = name;
1069 +
1070 + }
1071 + })();
1072 + </script>
1073 + </body>
1074 +</html>
1075
1076 diff --git a/plugins/jetpack/_inc/social-logos/social-logos.min.css b/plugins/jetpack/_inc/social-logos/social-logos.min.css
1077 new file mode 100644
1078 index 0000000..6c8b93d
1079 --- /dev/null
1080 +++ b/plugins/jetpack/_inc/social-logos/social-logos.min.css
1081 @@ -0,0 +1 @@
1082 +@font-face{font-family:social-logos;src:url(social-logos.eot?51b607ee5b5cb2a0e4517176475a424c);font-weight:400;font-style:normal}@font-face{font-family:social-logos;src:url(social-logos.eot?51b607ee5b5cb2a0e4517176475a424c);src:url(social-logos.eot?#iefix) format("embedded-opentype"),url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"),url(social-logos.ttf?51b607ee5b5cb2a0e4517176475a424c) format("truetype");font-weight:400;font-style:normal}.social-logo{font-family:social-logos;display:inline-block;vertical-align:middle;line-height:1;font-weight:400;font-style:normal;speak:none;text-decoration:inherit;text-transform:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.social-logo__amazon:before{content:"\f600"}.social-logo__behance:before{content:"\f101"}.social-logo__blogger-alt:before{content:"\f601"}.social-logo__blogger:before{content:"\f602"}.social-logo__codepen:b
1107 efore{content:"\f216"}.social-logo__dribbble:before{content:"\f201"}.social-logo__dropbox:before{content:"\f225"}.social-logo__eventbrite:before{content:"\f603"}.social-logo__facebook:before{content:"\f203"}.social-logo__feed:before{content:"\f413"}.social-logo__flickr:before{content:"\f211"}.social-logo__foursquare:before{content:"\f226"}.social-logo__ghost:before{content:"\f61c"}.social-logo__github:before{content:"\f200"}.social-logo__google-plus-alt:before{content:"\f218"}.social-logo__google-plus:before{content:"\f206"}.social-logo__instagram:before{content:"\f215"}.social-logo__linkedin:before{content:"\f207"}.social-logo__mail:before{content:"\f410"}.social-logo__medium:before{content:"\f623"}.social-logo__path-alt:before{content:"\f604"}.social-logo__path:before{content:"\f219"}.social-logo__pinterest-alt:before{content:"\f210"}.social-logo__pinterest:before{content:"\f209"}.social-logo__pocket:before{content:"\f224"}.social-logo__polldaddy:before{content:"\f217"}.social-log
1108 o__print:before{content:"\f469"}.social-logo__reddit:before{content:"\f222"}.social-logo__share:before{content:"\f415"}.social-logo__skype:before{content:"\f220"}.social-logo__spotify:before{content:"\f515"}.social-logo__squarespace:before{content:"\f605"}.social-logo__stumbleupon:before{content:"\f223"}.social-logo__telegram:before{content:"\f606"}.social-logo__tumblr-alt:before{content:"\f607"}.social-logo__tumblr:before{content:"\f214"}.social-logo__twitch:before{content:"\f516"}.social-logo__twitter-alt:before{content:"\f202"}.social-logo__twitter:before{content:"\f610"}.social-logo__vimeo:before{content:"\f212"}.social-logo__whatsapp:before{content:"\f608"}.social-logo__wordpress:before{content:"\f205"}.social-logo__xanga:before{content:"\f609"}.social-logo__youtube:before{content:"\f213"}
1109 \ No newline at end of file
1110
1111 diff --git a/plugins/jetpack/_inc/social-logos/social-logos.ttf b/plugins/jetpack/_inc/social-logos/social-logos.ttf
1112 new file mode 100644
1113 index 0000000..9b7f528
1114 Binary files /dev/null and b/plugins/jetpack/_inc/social-logos/social-logos.ttf differ
1115
1116 diff --git a/plugins/jetpack/_inc/social-logos/social-logos.woff2 b/plugins/jetpack/_inc/social-logos/social-logos.woff2
1117 new file mode 100644
1118 index 0000000..51f2a4f
1119 Binary files /dev/null and b/plugins/jetpack/_inc/social-logos/social-logos.woff2 differ
1120
1121 diff --git a/plugins/jetpack/changelog.txt b/plugins/jetpack/changelog.txt
1122 index 595b0b9..de01d3b 100644
1123 --- a/plugins/jetpack/changelog.txt
1124 +++ b/plugins/jetpack/changelog.txt
1125 @@ -1,4 +1,69 @@
1126 -== Changelog ==
1127 +== Changelog ==
1128 +
1129 += 4.1 =
1130 +
1131 +* Release date: July 6th, 2016
1132 +* Release Post: http://wp.me/p1moTy-3jd
1133 +
1134 +**Performance Enhancements:**
1135 +
1136 +* Carousel no longer loads full-size images in the previous and next previews, increasing the speed and performance of slideshows.
1137 +* We’ve improved Jetpack’s performance by making calls to the database more efficient; essentially, Jetpack is doing less on each page load, making things faster.
1138 +* We’ve improved Photon dev mode, eliminating unnecessary attempts to sync images.
1139 +
1140 +**Exciting Feature and UI Improvements:**
1141 +
1142 +* A new look: SSO, redesigned and refactored, provides a new and improved experience.
1143 +* Tracking made simple: quickly view the number of unread feedback submissions in your sidebar.
1144 +* Getting support just got easier! Access improved self-help tools in the Jetpack Debug menu.
1145 +* Greater control over Infinite Scroll: pause and resume Infinite Scroll with two new JavaScript methods.
1146 +* Improved Sharing: we’ve swapped image icons for icon fonts and added Telegram and WhatsApp buttons.
1147 +* Untappd shortcode: now you can sip and share your favorite craft brews. Cheers!
1148 +* Recipes, revamped: we’ve added new recipe shortcodes and options to create more detailed recipes.
1149 +* Improved Gallery Widgets now use Photon to resize and serve images.
1150 +
1151 +**Security:**
1152 +
1153 +* We’re continuing our efforts to harden Jetpack security by implementing the `hash_equals()` function in an effort to avoid timing attacks when comparing strings.
1154 +* We’ve made it easier to use SSL connections on ports `80` and `443`, improving our ability to communicate with an increased number of secure websites.
1155 +* You will now receive a warning for any failed attempts when connecting your website via SSL.
1156 +
1157 +**Slightly Less Exciting Feature Improvements:**
1158 +
1159 +* Updated the Infinite Scroll settings verbiage, which was a bit confusing.
1160 +* Removed Jetpack Audio Shortcode, which is no longer in use.
1161 +* Redesigned Jetpack banner notices to match core notification styles.
1162 +* Added an icon on a connected Jetpack user’s profile page, next to their name.
1163 +* Added the ability to edit Portfolio custom-post-type options in the Customizer.
1164 +* Added a new filter called `jetpack_publicize_capability` which allows you to override user role restrictions for Publicize.
1165 +* Improved the connection process between Jetpack and WordPress.com making it easier to start using Manage.
1166 +* Updated the Top Posts Widget so you can use and display posts that are older than 10 days.
1167 +* Updated the Twitter Timeline Widget to support updates made by Twitter.
1168 +* Improved the VideoPress Shortcode modal.
1169 +* Updated VideoPress, which now defaults to HTML5 videos when the `freedom` shortcode parameter is in use.
1170 +* Improved how Jetpack syncs by removing mock options.
1171 +* Updated the naming convention for feedback posts.
1172 +* Updated several JSON API endpoints to match WordPress.com endpoints, added support for custom taxonomies, and enabled trash as a valid status for the post update endpoint.
1173 +
1174 +**Improved Compatibility:**
1175 +
1176 +* A community member found and fixed a compatibility issue with our Open Graph Meta Tags and Bitly’s older plugin -- we now check to make sure we don’t create conflicts.
1177 +* We’ve fixed a rare scenario where an error would occur when other plugins or sites were using the `JETPACK__GLOTPRESS_LOCALES_PATH` constant.
1178 +
1179 +**Bug Fixes:**
1180 +
1181 +* Comment avatars are now retrieved in a manner more consistent with the login avatar, improving consistency and eliminating the possibility of a future bug.
1182 +* We eliminated PHP notices that were appearing when Custom Content Types were defined without labels or sections.
1183 +* PHP memory limits were reached in rare cases when a website had thousands of revisions of their Custom CSS. The issue is fixed -- happy editing!
1184 +* jQuery deprecated the `size()` function -- as a result, we’ve stopped using it as well.
1185 +* A PHP notice popped up when plugins were updated from the WordPress.com plugin management interface -- these notices will no longer appear.
1186 +* We fixed a bug where Photon wasn’t providing the original size for images that were being used outside of the post content.
1187 +* We eliminated the PHP notices that displayed when posts with slideshows were added to a sitemap.
1188 +* We fixed an error that was showing up in Sitemaps when a website permalink structure used `index.php`.
1189 +* We eliminated JavaScript errors that displayed when tiled galleries were viewed.
1190 +* We fixed an issue where image dimensions weren’t properly saved when added to a new widget.
1191 +* Since Google Maps API keys are now required to use maps, we’ve updated the Contact Info Widget to allow site owners to set up their keys.
1192 +* We fixed a bug where multiple `display` properties weren’t able to be saved in Custom CSS.
1193
1194 = 4.0.4 =
1195 Release date: June 20th, 2016
1196
1197 diff --git a/plugins/jetpack/class.jetpack-client-server.php b/plugins/jetpack/class.jetpack-client-server.php
1198 index 16dad5d..02ea5f6 100644
1199 --- a/plugins/jetpack/class.jetpack-client-server.php
1200 +++ b/plugins/jetpack/class.jetpack-client-server.php
1201 @@ -42,7 +42,7 @@ class Jetpack_Client_Server {
1202 $jetpack_unique_connection = array(
1203 'connected' => 0,
1204 'disconnected' => 0,
1205 - 'version' => '3.6.1'
1206 + 'version' => '3.6.1',
1207 );
1208
1209 update_option( 'jetpack_unique_connection', $jetpack_unique_connection );
1210 @@ -58,81 +58,78 @@ class Jetpack_Client_Server {
1211 $jetpack_unique_connection['connected'] += 1;
1212 Jetpack_Options::update_option( 'unique_connection', $jetpack_unique_connection );
1213
1214 - do {
1215 - $jetpack = $this->get_jetpack();
1216 - $role = $jetpack->translate_current_user_to_role();
1217 -
1218 - if ( ! $role ) {
1219 - return new Jetpack_Error( 'no_role', 'Invalid request.', 400 );
1220 - }
1221 + $jetpack = $this->get_jetpack();
1222 + $role = $jetpack->translate_current_user_to_role();
1223
1224 - $cap = $jetpack->translate_role_to_cap( $role );
1225 - if ( !$cap ) {
1226 - return new Jetpack_Error( 'no_cap', 'Invalid request.', 400 );
1227 - }
1228 + if ( ! $role ) {
1229 + return new Jetpack_Error( 'no_role', 'Invalid request.', 400 );
1230 + }
1231
1232 - if ( ! empty( $data['error'] ) ) {
1233 - return new Jetpack_Error( $data['error'], 'Error included in the request.', 400 );
1234 - }
1235 + $cap = $jetpack->translate_role_to_cap( $role );
1236 + if ( ! $cap ) {
1237 + return new Jetpack_Error( 'no_cap', 'Invalid request.', 400 );
1238 + }
1239
1240 - if ( ! isset( $data['state'] ) ) {
1241 - return new Jetpack_Error( 'no_state', 'Request must include state.', 400 );
1242 - }
1243 + if ( ! empty( $data['error'] ) ) {
1244 + return new Jetpack_Error( $data['error'], 'Error included in the request.', 400 );
1245 + }
1246
1247 - if ( ! ctype_digit( $data['state'] ) ) {
1248 - return new Jetpack_Error( $data['error'], 'State must be an integer.', 400 );
1249 - }
1250 + if ( ! isset( $data['state'] ) ) {
1251 + return new Jetpack_Error( 'no_state', 'Request must include state.', 400 );
1252 + }
1253
1254 - $current_user_id = get_current_user_id();
1255 - if ( $current_user_id != $data['state'] ) {
1256 - return new Jetpack_Error( 'wrong_state', 'State does not match current user.', 400 );
1257 - }
1258 + if ( ! ctype_digit( $data['state'] ) ) {
1259 + return new Jetpack_Error( $data['error'], 'State must be an integer.', 400 );
1260 + }
1261
1262 - if ( empty( $data['code'] ) ) {
1263 - return new Jetpack_Error( 'no_code', 'Request must include an authorization code.', 400 );
1264 - }
1265 + $current_user_id = get_current_user_id();
1266 + if ( $current_user_id != $data['state'] ) {
1267 + return new Jetpack_Error( 'wrong_state', 'State does not match current user.', 400 );
1268 + }
1269
1270 - $token = $this->get_token( $data );
1271 + if ( empty( $data['code'] ) ) {
1272 + return new Jetpack_Error( 'no_code', 'Request must include an authorization code.', 400 );
1273 + }
1274
1275 - if ( is_wp_error( $token ) ) {
1276 - $code = $token->get_error_code();
1277 - if ( empty( $code ) ) {
1278 - $code = 'invalid_token';
1279 - }
1280 - return new Jetpack_Error( $code, $token->get_error_message(), 400 );
1281 - }
1282 + $token = $this->get_token( $data );
1283
1284 - if ( ! $token ) {
1285 - return new Jetpack_Error( 'no_token', 'Error generating token.', 400 );
1286 + if ( is_wp_error( $token ) ) {
1287 + $code = $token->get_error_code();
1288 + if ( empty( $code ) ) {
1289 + $code = 'invalid_token';
1290 }
1291 + return new Jetpack_Error( $code, $token->get_error_message(), 400 );
1292 + }
1293
1294 - $is_master_user = ! Jetpack::is_active();
1295 + if ( ! $token ) {
1296 + return new Jetpack_Error( 'no_token', 'Error generating token.', 400 );
1297 + }
1298
1299 - Jetpack::update_user_token( $current_user_id, sprintf( '%s.%d', $token, $current_user_id ), $is_master_user );
1300 + $is_master_user = ! Jetpack::is_active();
1301
1302 + Jetpack::update_user_token( $current_user_id, sprintf( '%s.%d', $token, $current_user_id ), $is_master_user );
1303
1304 - if ( ! $is_master_user ) {
1305 - // Don't activate anything since we are just connecting a user.
1306 - return 'linked';
1307 - }
1308 + if ( ! $is_master_user ) {
1309 + // Don't activate anything since we are just connecting a user.
1310 + return 'linked';
1311 + }
1312
1313 - $redirect_on_activation_error = ( 'client' === $data['auth_type'] ) ? true : false;
1314 - if ( $active_modules = Jetpack_Options::get_option( 'active_modules' ) ) {
1315 - Jetpack_Options::delete_option( 'active_modules' );
1316 + $redirect_on_activation_error = ( 'client' === $data['auth_type'] ) ? true : false;
1317 + if ( $active_modules = Jetpack_Options::get_option( 'active_modules' ) ) {
1318 + Jetpack_Options::delete_option( 'active_modules' );
1319
1320 - Jetpack::activate_default_modules( 999, 1, $active_modules, $redirect_on_activation_error );
1321 - } else {
1322 - Jetpack::activate_default_modules( false, false, array(), $redirect_on_activation_error );
1323 - }
1324 + Jetpack::activate_default_modules( 999, 1, $active_modules, $redirect_on_activation_error );
1325 + } else {
1326 + Jetpack::activate_default_modules( false, false, array(), $redirect_on_activation_error );
1327 + }
1328
1329 - // Sync all registers options and constants
1330 - /** This action is documented in class.jetpack.php */
1331 - do_action( 'jetpack_sync_all_registered_options' );
1332 + // Sync all registers options and constants
1333 + /** This action is documented in class.jetpack.php */
1334 + do_action( 'jetpack_sync_all_registered_options' );
1335
1336 - // Start nonce cleaner
1337 - wp_clear_scheduled_hook( 'jetpack_clean_nonces' );
1338 - wp_schedule_event( time(), 'hourly', 'jetpack_clean_nonces' );
1339 - } while ( false );
1340 + // Start nonce cleaner
1341 + wp_clear_scheduled_hook( 'jetpack_clean_nonces' );
1342 + wp_schedule_event( time(), 'hourly', 'jetpack_clean_nonces' );
1343
1344 return 'authorized';
1345 }
1346 @@ -169,7 +166,7 @@ class Jetpack_Client_Server {
1347 }
1348
1349 $client_secret = Jetpack_Data::get_access_token();
1350 - if ( !$client_secret ) {
1351 + if ( ! $client_secret ) {
1352 return new Jetpack_Error( 'client_secret', __( 'You need to register your Jetpack before connecting it.', 'jetpack' ) );
1353 }
1354
1355 @@ -206,21 +203,23 @@ class Jetpack_Client_Server {
1356 $code = wp_remote_retrieve_response_code( $response );
1357 $entity = wp_remote_retrieve_body( $response );
1358
1359 - if ( $entity )
1360 + if ( $entity ) {
1361 $json = json_decode( $entity );
1362 - else
1363 + } else {
1364 $json = false;
1365 + }
1366
1367 - if ( 200 != $code || !empty( $json->error ) ) {
1368 - if ( empty( $json->error ) )
1369 + if ( 200 != $code || ! empty( $json->error ) ) {
1370 + if ( empty( $json->error ) ) {
1371 return new Jetpack_Error( 'unknown', '', $code );
1372 + }
1373
1374 $error_description = isset( $json->error_description ) ? sprintf( __( 'Error Details: %s', 'jetpack' ), (string) $json->error_description ) : '';
1375
1376 return new Jetpack_Error( (string) $json->error, $error_description, $code );
1377 }
1378
1379 - if ( empty( $json->access_token ) || !is_scalar( $json->access_token ) ) {
1380 + if ( empty( $json->access_token ) || ! is_scalar( $json->access_token ) ) {
1381 return new Jetpack_Error( 'access_token', '', $code );
1382 }
1383
1384 @@ -231,18 +230,23 @@ class Jetpack_Client_Server {
1385 if ( empty( $json->scope ) ) {
1386 return new Jetpack_Error( 'scope', 'No Scope', $code );
1387 }
1388 +
1389 @list( $role, $hmac ) = explode( ':', $json->scope );
1390 if ( empty( $role ) || empty( $hmac ) ) {
1391 return new Jetpack_Error( 'scope', 'Malformed Scope', $code );
1392 }
1393 +
1394 if ( $jetpack->sign_role( $role ) !== $json->scope ) {
1395 return new Jetpack_Error( 'scope', 'Invalid Scope', $code );
1396 }
1397
1398 - if ( !$cap = $jetpack->translate_role_to_cap( $role ) )
1399 + if ( ! $cap = $jetpack->translate_role_to_cap( $role ) ) {
1400 return new Jetpack_Error( 'scope', 'No Cap', $code );
1401 - if ( ! current_user_can( $cap ) )
1402 + }
1403 +
1404 + if ( ! current_user_can( $cap ) ) {
1405 return new Jetpack_Error( 'scope', 'current_user_cannot', $code );
1406 + }
1407
1408 /**
1409 * Fires after user has successfully received an auth token.
1410 @@ -269,5 +273,4 @@ class Jetpack_Client_Server {
1411 public function do_exit() {
1412 exit;
1413 }
1414 -
1415 }
1416
1417 diff --git a/plugins/jetpack/class.jetpack-data.php b/plugins/jetpack/class.jetpack-data.php
1418 index 727bd05..c6eda4e 100644
1419 --- a/plugins/jetpack/class.jetpack-data.php
1420 +++ b/plugins/jetpack/class.jetpack-data.php
1421 @@ -55,6 +55,19 @@ class Jetpack_Data {
1422 return new WP_Error( 'fail_domain_empty', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as it is empty.', 'jetpack' ), $domain ) );
1423 }
1424
1425 + /**
1426 + * Skips the usuable domain check when connecting a site.
1427 + *
1428 + * Allows site administrators with domains that fail gethostname-based checks to pass the request to WP.com
1429 + *
1430 + * @since 4.1.0
1431 + *
1432 + * @param bool If the check should be skipped. Default false.
1433 + */
1434 + if ( apply_filters( 'jetpack_skip_usuable_domain_check', false ) ) {
1435 + return true;
1436 + }
1437 +
1438 // None of the explicit localhosts.
1439 $forbidden_domains = array(
1440 'wordpress.com',
1441
1442 diff --git a/plugins/jetpack/class.jetpack-debugger.php b/plugins/jetpack/class.jetpack-debugger.php
1443 index 30bf074..aabbff3 100644
1444 --- a/plugins/jetpack/class.jetpack-debugger.php
1445 +++ b/plugins/jetpack/class.jetpack-debugger.php
1446 @@ -4,7 +4,11 @@ class Jetpack_Debugger {
1447
1448 private static function is_jetpack_support_open() {
1449 try {
1450 - $response = wp_remote_request( "http://jetpack.com/is-support-open" );
1451 + $url = add_query_arg( 'ver', JETPACK__VERSION, 'https://jetpack.com/is-support-open/' );
1452 + $response = wp_remote_request( esc_url_raw( $url ) );
1453 + if ( is_wp_error( $response ) ) {
1454 + return false;
1455 + }
1456 $body = wp_remote_retrieve_body( $response );
1457 $json = json_decode( $body );
1458 return ( ( bool ) $json->is_support_open );
1459 @@ -55,10 +59,11 @@ class Jetpack_Debugger {
1460 $debug_info .= "\r\n" . esc_html( "JETPACK__PLUGIN_DIR: " . JETPACK__PLUGIN_DIR );
1461 $debug_info .= "\r\n" . esc_html( "SITE_URL: " . site_url() );
1462 $debug_info .= "\r\n" . esc_html( "HOME_URL: " . home_url() );
1463 - $debug_info .= "\r\n" . esc_html( "SERVER_PORT: " . $_SERVER['SERVER_PORT'] );
1464 -
1465
1466 foreach ( array (
1467 + 'HTTP_HOST',
1468 + 'SERVER_PORT',
1469 + 'HTTPS',
1470 'GD_PHP_HANDLER',
1471 'HTTP_AKAMAI_ORIGIN_HOP',
1472 'HTTP_CF_CONNECTING_IP',
1473 @@ -77,15 +82,12 @@ class Jetpack_Debugger {
1474 'HTTP_X_VARNISH',
1475 'REMOTE_ADDR'
1476 ) as $header ) {
1477 - if( isset( $_SERVER[$header] ) ) {
1478 - $debug_info .= "\r\n" . esc_html( 'IP HEADER: '.$header . ": " . $_SERVER[$header] );
1479 - } else {
1480 - $debug_info .= "\r\n" . esc_html( 'IP HEADER: '.$header . ": Not Set" );
1481 + if ( isset( $_SERVER[ $header ] ) ) {
1482 + $debug_info .= "\r\n" . esc_html( $header . ": " . $_SERVER[ $header ] );
1483 }
1484 }
1485
1486 -
1487 - $debug_info .= "\r\n" . esc_html( "PROTECT_TRUSTED_HEADER: " . json_encode(get_site_option( 'trusted_ip_header' )));
1488 + $debug_info .= "\r\n" . esc_html( "PROTECT_TRUSTED_HEADER: " . json_encode( get_site_option( 'trusted_ip_header' ) ) );
1489
1490 $debug_info .= "\r\n\r\nTEST RESULTS:\r\n\r\n";
1491 $debug_raw_info = '';
1492 @@ -118,7 +120,11 @@ class Jetpack_Debugger {
1493 add_filter( 'http_request_timeout', array( 'Jetpack_Debugger', 'jetpack_increase_timeout' ) );
1494
1495 $tests['SELF']['result'] = wp_remote_get( $testsite_url . $self_xml_rpc_url );
1496 - $tests['SELF']['fail_message'] = esc_html__( 'It looks like your site can not communicate properly with Jetpack.', 'jetpack' );
1497 + if ( is_wp_error( $tests['SELF']['result'] ) && 0 == strpos( $tests['SELF']['result']->get_error_message(), 'Operation timed out' ) ){
1498 + $tests['SELF']['fail_message'] = esc_html__( 'Your site did not get a response from our debugging service in the expected timeframe. If you are not experiencing other issues, this could be due to a slow connection between your site and our server.', 'jetpack' );
1499 + } else {
1500 + $tests['SELF']['fail_message'] = esc_html__( 'It looks like your site can not communicate properly with Jetpack.', 'jetpack' );
1501 + }
1502
1503 remove_filter( 'http_request_timeout', array( 'Jetpack_Debugger', 'jetpack_increase_timeout' ) );
1504
1505 @@ -245,13 +251,13 @@ class Jetpack_Debugger {
1506 <input name="your_email" type="text" id="your_email" value="<?php esc_html_e( $current_user->user_email, 'jetpack'); ?>" size="40">
1507 </div>
1508
1509 - <div id="toggle_debug_info" class="formbox">
1510 + <div id="toggle_debug_form_info" class="formbox">
1511 <p><?php _e( 'The test results and some other useful debug information will be sent to the support team. Please feel free to <a href="#">review/modify</a> this information.', 'jetpack' ); ?></p>
1512 </div>
1513
1514 - <div id="debug_info_div" class="formbox" style="display:none">
1515 + <div id="debug_info_form_div" class="formbox" style="display:none">
1516 <label class="h" for="debug_info"><?php esc_html_e( 'Debug Info', 'jetpack' ); ?></label>
1517 - <textarea name="debug_info" cols="40" rows="7" id="debug_info"><?php echo esc_attr( $debug_info ); ?></textarea>
1518 + <textarea name="debug_info" cols="40" rows="7" id="debug_form_info"><?php echo esc_attr( $debug_info ); ?></textarea>
1519 </div>
1520
1521 <div style="clear: both;"></div>
1522 @@ -264,7 +270,12 @@ class Jetpack_Debugger {
1523 <div style="clear: both;"></div>
1524 </form>
1525 <?php endif; ?>
1526 - </div>
1527 + </div> <!-- contact-message, hidden by default. -->
1528 + <div id="toggle_debug_info"><a href="#"><?php _e( 'View Advanced Debug Results', 'jetpack' ); ?></a></div>
1529 + <div id="debug_info_div" style="display:none">
1530 + <h4><?php esc_html_e( 'Debug Info', 'jetpack' ); ?></h4>
1531 + <div id="debug_info"><?php echo wpautop( esc_html( $debug_info ) ); ?></div>
1532 + </div>
1533 </div>
1534 <?php
1535 }
1536 @@ -336,7 +347,7 @@ class Jetpack_Debugger {
1537 margin: 0 0 25px 0;
1538 }
1539
1540 - .formbox input[type="text"], .formbox input[type="email"], .formbox input[type="url"], .formbox textarea {
1541 + .formbox input[type="text"], .formbox input[type="email"], .formbox input[type="url"], .formbox textarea, #debug_info_div {
1542 border: 1px solid #e5e5e5;
1543 border-radius: 11px;
1544 box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);
1545 @@ -385,11 +396,16 @@ class Jetpack_Debugger {
1546 display: list-item;
1547 }
1548
1549 + #debug_info_div, #toggle_debug_info, #debug_info_div p {
1550 + font-size: smaller;
1551 + }
1552 +
1553 </style>
1554 <script type="text/javascript">
1555 jQuery( document ).ready( function($) {
1556
1557 - $('#debug_info').prepend('jQuery version: ' + jQuery.fn.jquery + "\r\n");
1558 + $( '#debug_info' ).prepend( 'jQuery version: ' + jQuery.fn.jquery + "\r\n" );
1559 + $( '#debug_form_info' ).prepend( 'jQuery version: ' + jQuery.fn.jquery + "\r\n" );
1560
1561 $( '.jetpack-test-error .jetpack-test-heading' ).on( 'click', function() {
1562 $( this ).parents( '.jetpack-test-error' ).find( '.jetpack-test-details' ).slideToggle();
1563 @@ -397,33 +413,38 @@ class Jetpack_Debugger {
1564 } );
1565
1566 $( '.jetpack-show-contact-form a' ).on( 'click', function() {
1567 - $('#contact-message').slideToggle();
1568 + $( '#contact-message' ).slideToggle();
1569 return false;
1570 } );
1571
1572 $( '#toggle_debug_info a' ).on( 'click', function() {
1573 - $('#debug_info_div').slideToggle();
1574 + $( '#debug_info_div' ).slideToggle();
1575 + return false;
1576 + } );
1577 +
1578 + $( '#toggle_debug_form_info a' ).on( 'click', function() {
1579 + $( '#debug_info_form_div' ).slideToggle();
1580 return false;
1581 } );
1582
1583 - $('form#contactme').on("submit", function(e){
1584 - var form = $(this);
1585 - var message = form.find('#did');
1586 - var name = form.find('#your_name');
1587 - var email = form.find('#your_email')
1588 + $( 'form#contactme' ).on( "submit", function(e){
1589 + var form = $( this );
1590 + var message = form.find( '#did' );
1591 + var name = form.find( '#your_name' );
1592 + var email = form.find( '#your_email' )
1593 var validation_error = false;
1594 if( !name.val() ) {
1595 - name.parents('.formbox').addClass('error');
1596 + name.parents( '.formbox' ).addClass( 'error' );
1597 validation_error = true;
1598 }
1599 if( !email.val() ) {
1600 - email.parents('.formbox').addClass('error');
1601 + email.parents( '.formbox' ).addClass( 'error' );
1602 validation_error = true;
1603 }
1604 if ( validation_error ) {
1605 return false;
1606 }
1607 - message.val(message.val() + "\r\n\r\n----------------------------------------------\r\n\r\nDEBUG INFO:\r\n" + $('#debug_info').val() );
1608 + message.val( message.val() + "\r\n\r\n----------------------------------------------\r\n\r\nDEBUG INFO:\r\n" + $('#debug_info').val() );
1609 return true;
1610 });
1611
1612
1613 diff --git a/plugins/jetpack/class.jetpack-jitm.php b/plugins/jetpack/class.jetpack-jitm.php
1614 index 9f98a93..6985445 100644
1615 --- a/plugins/jetpack/class.jetpack-jitm.php
1616 +++ b/plugins/jetpack/class.jetpack-jitm.php
1617 @@ -84,7 +84,7 @@ class Jetpack_JITM {
1618 <a href="#" data-module="manage" class="dismiss"><span class="genericon genericon-close"></span></a>
1619
1620 <div class="jp-emblem">
1621 - <?php echo self::get_jp_emblem(); ?>
1622 + <?php echo Jetpack::get_jp_emblem(); ?>
1623 </div>
1624 <p class="msg">
1625 <?php esc_html_e( 'Reduce security risks with automated plugin updates.', 'jetpack' ); ?>
1626 @@ -115,7 +115,7 @@ class Jetpack_JITM {
1627 <a href="#" data-module="photon" class="dismiss"><span class="genericon genericon-close"></span></a>
1628
1629 <div class="jp-emblem">
1630 - <?php echo self::get_jp_emblem(); ?>
1631 + <?php echo Jetpack::get_jp_emblem(); ?>
1632 </div>
1633 <p class="msg">
1634 <?php esc_html_e( 'Speed up your photos and save bandwidth costs by using a free content delivery network.', 'jetpack' ); ?>
1635 @@ -144,7 +144,7 @@ class Jetpack_JITM {
1636 <a href="#" data-module="photon" class="dismiss"><span class="genericon genericon-close"></span></a>
1637
1638 <div class="jp-emblem">
1639 - <?php echo self::get_jp_emblem(); ?>
1640 + <?php echo Jetpack::get_jp_emblem(); ?>
1641 </div>
1642 <p class="msg">
1643 <?php esc_html_e( 'Let Jetpack deliver your images optimized and faster than ever.', 'jetpack' ); ?>
1644 @@ -212,7 +212,7 @@ class Jetpack_JITM {
1645 <a href="#" data-module="manage-pi" class="dismiss"><span class="genericon genericon-close"></span></a>
1646
1647 <div class="jp-emblem">
1648 - <?php echo self::get_jp_emblem(); ?>
1649 + <?php echo Jetpack::get_jp_emblem(); ?>
1650 </div>
1651 <?php if ( ! $manage_active ) : ?>
1652 <p class="msg">
1653 @@ -254,7 +254,7 @@ class Jetpack_JITM {
1654 <div class="jp-jitm">
1655 <a href="#" data-module="editor" class="dismiss"><span class="genericon genericon-close"></span></a>
1656 <div class="jp-emblem">
1657 - <?php echo self::get_jp_emblem(); ?>
1658 + <?php echo Jetpack::get_jp_emblem(); ?>
1659 </div>
1660 <p class="msg">
1661 <?php esc_html_e( 'Try the brand new editor.', 'jetpack' ); ?>
1662 @@ -285,7 +285,7 @@ class Jetpack_JITM {
1663 <a href="#" data-module="stats" class="dismiss"><span class="genericon genericon-close"></span></a>
1664
1665 <div class="jp-emblem">
1666 - <?php echo self::get_jp_emblem(); ?>
1667 + <?php echo Jetpack::get_jp_emblem(); ?>
1668 </div>
1669 <p class="msg">
1670 <?php esc_html_e( 'Track detailed stats on this post and the rest of your site.', 'jetpack' ); ?>
1671 @@ -453,17 +453,6 @@ class Jetpack_JITM {
1672 // so if it's not an array, it means no JITM was dismissed
1673 return is_array( self::$jetpack_hide_jitm );
1674 }
1675 -
1676 - /**
1677 - * Return string containing the Jetpack logo.
1678 - *
1679 - * @since 3.9.0
1680 - *
1681 - * @return string
1682 - */
1683 - function get_jp_emblem() {
1684 - return '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0" y="0" viewBox="0 0 172.9 172.9" enable-background="new 0 0 172.9 172.9" xml:space="preserve"> <path d="M86.4 0C38.7 0 0 38.7 0 86.4c0 47.7 38.7 86.4 86.4 86.4s86.4-38.7 86.4-86.4C172.9 38.7 134.2 0 86.4 0zM83.1 106.6l-27.1-6.9C49 98 45.7 90.1 49.3 84l33.8-58.5V106.6zM124.9 88.9l-33.8 58.5V66.3l27.1 6.9C125.1 74.9 128.4 82.8 124.9 88.9z" /></svg>';
1685 - }
1686 }
1687 /**
1688 * Filter to turn off all just in time messages
1689
1690 diff --git a/plugins/jetpack/class.jetpack-signature.php b/plugins/jetpack/class.jetpack-signature.php
1691 index b2c621f..45c74a1 100644
1692 --- a/plugins/jetpack/class.jetpack-signature.php
1693 +++ b/plugins/jetpack/class.jetpack-signature.php
1694 @@ -1,5 +1,8 @@
1695 <?php
1696
1697 +// These constants can be set in wp-config.php to ensure sites behind proxies will still work.
1698 +// Setting these constants, though, is *not* the preferred method. It's better to configure
1699 +// the proxy to send the X-Forwarded-Port header.
1700 defined( 'JETPACK_SIGNATURE__HTTP_PORT' ) or define( 'JETPACK_SIGNATURE__HTTP_PORT' , 80 );
1701 defined( 'JETPACK_SIGNATURE__HTTPS_PORT' ) or define( 'JETPACK_SIGNATURE__HTTPS_PORT', 443 );
1702 defined( 'JETPACK__WPCOM_JSON_API_HOST' ) or define( 'JETPACK__WPCOM_JSON_API_HOST', 'public-api.wordpress.com' );
1703 @@ -32,10 +35,26 @@ class Jetpack_Signature {
1704 }
1705 }
1706
1707 + $host_port = isset( $_SERVER['HTTP_X_FORWARDED_PORT'] ) ? $_SERVER['HTTP_X_FORWARDED_PORT'] : $_SERVER['SERVER_PORT'];
1708 +
1709 if ( is_ssl() ) {
1710 - $port = JETPACK_SIGNATURE__HTTPS_PORT == $_SERVER['SERVER_PORT'] ? '' : $_SERVER['SERVER_PORT'];
1711 + // 443: Standard Port
1712 + // 80: Assume we're behind a proxy without X-Forwarded-Port. Hardcoding "80" here means most sites
1713 + // with SSL termination proxies (self-served, Cloudflare, etc.) don't need to fiddle with
1714 + // the JETPACK_SIGNATURE__HTTPS_PORT constant. The code also implies we can't talk to a
1715 + // site at https://example.com:80/ (which would be a strange configuration).
1716 + // JETPACK_SIGNATURE__HTTPS_PORT: Set this constant in wp-config.php to the backend webserver's port
1717 + // if the site is behind a proxy running on port 443 without
1718 + // X-Forwarded-Port and the backend's port is *not* 80. It's better,
1719 + // though, to configure the proxy to send X-Forwarded-Port.
1720 + $port = in_array( $host_port, array( 443, 80, JETPACK_SIGNATURE__HTTPS_PORT ) ) ? '' : $host_port;
1721 } else {
1722 - $port = JETPACK_SIGNATURE__HTTP_PORT == $_SERVER['SERVER_PORT'] ? '' : $_SERVER['SERVER_PORT'];
1723 + // 80: Standard Port
1724 + // JETPACK_SIGNATURE__HTTPS_PORT: Set this constant in wp-config.php to the backend webserver's port
1725 + // if the site is behind a proxy running on port 80 without
1726 + // X-Forwarded-Port. It's better, though, to configure the proxy to
1727 + // send X-Forwarded-Port.
1728 + $port = in_array( $host_port, array( 80, JETPACK_SIGNATURE__HTTP_PORT ) ) ? '' : $host_port;
1729 }
1730
1731 $url = "{$scheme}://{$_SERVER['HTTP_HOST']}:{$port}" . stripslashes( $_SERVER['REQUEST_URI'] );
1732
1733 diff --git a/plugins/jetpack/class.jetpack-tracks.php b/plugins/jetpack/class.jetpack-tracks.php
1734 index 35c9837..7e1696c 100644
1735 --- a/plugins/jetpack/class.jetpack-tracks.php
1736 +++ b/plugins/jetpack/class.jetpack-tracks.php
1737 @@ -58,7 +58,7 @@ class JetpackTracking {
1738 self::record_user_event( 'module_deactivated', array( 'module' => $module ) );
1739 }
1740
1741 - static function record_user_event( $event_type, $data ) {
1742 + static function record_user_event( $event_type, $data= array() ) {
1743
1744 $user = wp_get_current_user();
1745 $site_url = get_option( 'siteurl' );
1746
1747 diff --git a/plugins/jetpack/class.jetpack.php b/plugins/jetpack/class.jetpack.php
1748 index a88ab0d..19ad263 100644
1749 --- a/plugins/jetpack/class.jetpack.php
1750 +++ b/plugins/jetpack/class.jetpack.php
1751 @@ -317,8 +317,6 @@ class Jetpack {
1752
1753 self::$instance->plugin_upgrade();
1754
1755 - add_action( 'init', array( __CLASS__, 'perform_security_reporting' ) );
1756 -
1757 }
1758
1759 return self::$instance;
1760 @@ -346,6 +344,8 @@ class Jetpack {
1761 * @since 3.3.0
1762 */
1763 do_action( 'jetpack_sync_all_registered_options' );
1764 +
1765 + Jetpack::maybe_set_version_option();
1766 }
1767 }
1768 }
1769 @@ -536,8 +536,13 @@ class Jetpack {
1770 add_action( 'wp_ajax_jetpack-sync-reindex-trigger', array( $this, 'sync_reindex_trigger' ) );
1771 add_action( 'wp_ajax_jetpack-sync-reindex-status', array( $this, 'sync_reindex_status' ) );
1772
1773 + // returns HTTPS support status
1774 + add_action( 'wp_ajax_jetpack-recheck-ssl', array( $this, 'ajax_recheck_ssl' ) );
1775 +
1776 // Jump Start AJAX callback function
1777 add_action( 'wp_ajax_jetpack_jumpstart_ajax', array( $this, 'jetpack_jumpstart_ajax_callback' ) );
1778 +
1779 + // If any module option is updated before Jump Start is dismissed, hide Jump Start.
1780 add_action( 'update_option', array( $this, 'jumpstart_has_updated_module_option' ) );
1781
1782 // Identity Crisis AJAX callback function
1783 @@ -906,28 +911,10 @@ class Jetpack {
1784 if ( Jetpack::is_development_mode() ) {
1785 $caps = array( 'manage_options' );
1786 break;
1787 + } else {
1788 + $caps = array( 'read' );
1789 }
1790 -
1791 - // Don't ever show to subscribers, but allow access to the page if they're trying to unlink.
1792 - if ( ! current_user_can( 'edit_posts' ) ) {
1793 - if ( isset( $_GET['redirect'] ) && 'sub-unlink' == $_GET['redirect'] ) {
1794 - // We need this in order to unlink the user.
1795 - $this->admin_page_load();
1796 - }
1797 - if ( ! wp_verify_nonce( 'jetpack-unlink' ) ) {
1798 - $caps = array( 'do_not_allow' );
1799 - break;
1800 - }
1801 - }
1802 -
1803 - if ( ! self::is_active() && ! current_user_can( 'jetpack_connect' ) ) {
1804 - $caps = array( 'do_not_allow' );
1805 - break;
1806 - }
1807 - /**
1808 - * Pass through. If it's not development mode, these should match the admin page.
1809 - * Let users disconnect if it's development mode, just in case things glitch.
1810 - */
1811 + break;
1812 case 'jetpack_connect_user' :
1813 if ( Jetpack::is_development_mode() ) {
1814 $caps = array( 'do_not_allow' );
1815 @@ -1015,6 +1002,12 @@ class Jetpack {
1816 require_once( JETPACK__PLUGIN_DIR . '_inc/genericons.php' );
1817 jetpack_register_genericons();
1818
1819 + /**
1820 + * Register the social logos
1821 + */
1822 + require_once( JETPACK__PLUGIN_DIR . '_inc/social-logos.php' );
1823 + jetpack_register_social_logos();
1824 +
1825 if ( ! wp_style_is( 'jetpack-icons', 'registered' ) )
1826 wp_register_style( 'jetpack-icons', plugins_url( 'css/jetpack-icons.min.css', JETPACK__PLUGIN_FILE ), false, JETPACK__VERSION );
1827 }
1828 @@ -1488,7 +1481,7 @@ class Jetpack {
1829 /**
1830 * Filters Jetpack's development mode.
1831 *
1832 - * @see http://jetpack.com/support/development-mode/
1833 + * @see https://jetpack.com/support/development-mode/
1834 *
1835 * @since 2.2.1
1836 *
1837 @@ -1509,19 +1502,19 @@ class Jetpack {
1838 $notice = sprintf(
1839 /* translators: %s is a URL */
1840 __( 'In <a href="%s" target="_blank">Development Mode</a>, via the JETPACK_DEV_DEBUG constant being defined in wp-config.php or elsewhere.', 'jetpack' ),
1841 - 'http://jetpack.com/support/development-mode/'
1842 + 'https://jetpack.com/support/development-mode/'
1843 );
1844 } elseif ( site_url() && false === strpos( site_url(), '.' ) ) {
1845 $notice = sprintf(
1846 /* translators: %s is a URL */
1847 __( 'In <a href="%s" target="_blank">Development Mode</a>, via site URL lacking a dot (e.g. http://localhost).', 'jetpack' ),
1848 - 'http://jetpack.com/support/development-mode/'
1849 + 'https://jetpack.com/support/development-mode/'
1850 );
1851 } else {
1852 $notice = sprintf(
1853 /* translators: %s is a URL */
1854 __( 'In <a href="%s" target="_blank">Development Mode</a>, via the jetpack_development_mode filter.', 'jetpack' ),
1855 - 'http://jetpack.com/support/development-mode/'
1856 + 'https://jetpack.com/support/development-mode/'
1857 );
1858 }
1859
1860 @@ -2596,6 +2589,9 @@ class Jetpack {
1861 $modules[ $index ]['short_description'] = $i18n_module['description'];
1862 }
1863 }
1864 + if ( Jetpack::is_module_active( 'manage' ) ) {
1865 + unset( $modules['manage'] );
1866 + }
1867 return $modules;
1868 }
1869
1870 @@ -3139,6 +3135,15 @@ p {
1871
1872 Jetpack_Options::update_option( 'user_tokens', $tokens );
1873
1874 + /**
1875 + * Fires after the current user has been unlinked from WordPress.com.
1876 + *
1877 + * @since 4.1.0
1878 + *
1879 + * @param int $user_id The current user's ID.
1880 + */
1881 + do_action( 'jetpack_unlinked_user', $user_id );
1882 +
1883 return true;
1884 }
1885
1886 @@ -3330,9 +3335,6 @@ p {
1887 // Show the notice on the Dashboard only for now
1888
1889 add_action( 'load-index.php', array( $this, 'prepare_manage_jetpack_notice' ) );
1890 -
1891 - // Identity crisis notices
1892 - add_action( 'jetpack_notices', array( $this, 'alert_identity_crisis' ) );
1893 }
1894
1895 // If the plugin has just been disconnected from WP.com, show the survey notice
1896 @@ -3340,8 +3342,8 @@ p {
1897 add_action( 'jetpack_notices', array( $this, 'disconnect_survey_notice' ) );
1898 }
1899
1900 - if ( current_user_can( 'manage_options' ) && 'ALWAYS' == JETPACK_CLIENT__HTTPS && ! self::permit_ssl() ) {
1901 - add_action( 'admin_notices', array( $this, 'alert_required_ssl_fail' ) );
1902 + if ( current_user_can( 'manage_options' ) && 'AUTO' == JETPACK_CLIENT__HTTPS && ! self::permit_ssl() ) {
1903 + add_action( 'jetpack_notices', array( $this, 'alert_auto_ssl_fail' ) );
1904 }
1905
1906 add_action( 'load-plugins.php', array( $this, 'intercept_plugin_error_scrape_init' ) );
1907 @@ -3358,6 +3360,11 @@ p {
1908
1909 // Jetpack Manage Activation Screen from .com
1910 Jetpack::module_configuration_activation_screen( 'manage', array( $this, 'manage_activate_screen' ) );
1911 +
1912 + // Add custom column in wp-admin/users.php to show whether user is linked.
1913 + add_filter( 'manage_users_columns', array( $this, 'jetpack_icon_user_connected' ) );
1914 + add_action( 'manage_users_custom_column', array( $this, 'jetpack_show_user_connected_icon' ), 10, 3 );
1915 + add_action( 'admin_print_styles', array( $this, 'jetpack_user_col_style' ) );
1916 }
1917
1918 function admin_body_class( $admin_body_class = '' ) {
1919 @@ -3609,8 +3616,8 @@ p {
1920 // Help Sidebar
1921 $current_screen->set_help_sidebar(
1922 '<p><strong>' . __( 'For more information:', 'jetpack' ) . '</strong></p>' .
1923 - '<p><a href="http://jetpack.com/faq/" target="_blank">' . __( 'Jetpack FAQ', 'jetpack' ) . '</a></p>' .
1924 - '<p><a href="http://jetpack.com/support/" target="_blank">' . __( 'Jetpack Support', 'jetpack' ) . '</a></p>' .
1925 + '<p><a href="https://jetpack.com/faq/" target="_blank">' . __( 'Jetpack FAQ', 'jetpack' ) . '</a></p>' .
1926 + '<p><a href="https://jetpack.com/support/" target="_blank">' . __( 'Jetpack Support', 'jetpack' ) . '</a></p>' .
1927 '<p><a href="' . Jetpack::admin_url( array( 'page' => 'jetpack-debugger' ) ) .'">' . __( 'Jetpack Debugging Center', 'jetpack' ) . '</a></p>'
1928 );
1929 }
1930 @@ -3694,16 +3701,17 @@ p {
1931
1932 $dismiss_and_deactivate_url = wp_nonce_url( Jetpack::admin_url( '?page=jetpack&jetpack-notice=dismiss' ), 'jetpack-deactivate' );
1933 ?>
1934 - <div id="message" class="updated jetpack-message jp-banner" style="display:block !important;">
1935 - <a class="jp-banner__dismiss" href="<?php echo esc_url( $dismiss_and_deactivate_url ); ?>" title="<?php esc_attr_e( 'Dismiss this notice and deactivate Jetpack.', 'jetpack' ); ?>"></a>
1936 + <div id="message" class="updated jp-banner">
1937 + <a href="<?php echo esc_url( $dismiss_and_deactivate_url ); ?>" class="notice-dismiss" title="<?php esc_attr_e( 'Dismiss this notice', 'jetpack' ); ?>"></a>
1938 <?php if ( in_array( Jetpack_Options::get_option( 'activated' ) , array( 1, 2, 3 ) ) ) : ?>
1939 - <div class="jp-banner__content is-connection">
1940 - <h2><?php _e( 'Your Jetpack is almost ready!', 'jetpack' ); ?></h2>
1941 - <p><?php _e( 'Connect now to enable features like Stats, Likes, and Social Sharing.', 'jetpack' ); ?></p>
1942 - </div>
1943 - <div class="jp-banner__action-container is-connection">
1944 - <a href="<?php echo $this->build_connect_url( false, false, 'banner' ) ?>" class="jp-banner__button" id="wpcom-connect"><?php _e( 'Connect to WordPress.com', 'jetpack' ); ?></a>
1945 - </div>
1946 + <div class="jp-banner__description-container">
1947 + <h2 class="jp-banner__header"><?php _e( 'Your Jetpack is almost ready!', 'jetpack' ); ?></h2>
1948 + <p class="jp-banner__description"><?php _e( 'Please connect to or create a WordPress.com account to enable Jetpack, including powerful security, traffic, and customization services.', 'jetpack' ); ?></p>
1949 + <p class="jp-banner__button-container">
1950 + <a href="<?php echo $this->build_connect_url( false, false, 'banner' ) ?>" class="button button-primary" id="wpcom-connect"><?php _e( 'Connect to WordPress.com', 'jetpack' ); ?></a>
1951 + <a href="<?php echo Jetpack::admin_url( 'admin.php?page=jetpack' ) ?>" class="button" title="<?php esc_attr_e( 'Learn about the benefits you receive when you connect Jetpack to WordPress.com', 'jetpack' ); ?>"><?php _e( 'Learn more', 'jetpack' ); ?></a>
1952 + </p>
1953 + </div>
1954 <?php else : ?>
1955 <div class="jp-banner__content">
1956 <h2><?php _e( 'Jetpack is installed!', 'jetpack' ) ?></h2>
1957 @@ -3747,15 +3755,16 @@ p {
1958 */
1959
1960 ?>
1961 - <div id="message" class="updated jetpack-message jp-banner is-opt-in" style="display:block !important;">
1962 - <a class="jp-banner__dismiss" href="<?php echo esc_url( $opt_out_url ); ?>" title="<?php esc_attr_e( 'Dismiss this notice for now.', 'jetpack' ); ?>"></a>
1963 - <div class="jp-banner__content">
1964 - <h2><?php esc_html_e( 'New in Jetpack: Centralized Site Management', 'jetpack' ); ?></h2>
1965 - <p><?php printf( __( 'Manage multiple sites from one dashboard at wordpress.com/sites. Enabling allows all existing, connected Administrators to modify your site from WordPress.com. <a href="%s" target="_blank">Learn More</a>.', 'jetpack' ), 'http://jetpack.com/support/site-management' ); ?></p>
1966 - </div>
1967 - <div class="jp-banner__action-container is-opt-in">
1968 - <a href="<?php echo esc_url( $opt_in_url ); ?>" class="jp-banner__button" id="wpcom-connect"><?php _e( 'Activate now', 'jetpack' ); ?></a>
1969 - </div>
1970 + <div id="message" class="updated jp-banner">
1971 + <a href="<?php echo esc_url( $opt_out_url ); ?>" class="notice-dismiss" title="<?php esc_attr_e( 'Dismiss this notice', 'jetpack' ); ?>"></a>
1972 + <div class="jp-banner__description-container">
1973 + <h2 class="jp-banner__header"><?php esc_html_e( 'Jetpack Centralized Site Management', 'jetpack' ); ?></h2>
1974 + <p class="jp-banner__description"><?php printf( __( 'Manage multiple Jetpack enabled sites from one single dashboard at wordpress.com. Allows all existing, connected Administrators to modify your site.', 'jetpack' ), 'https://jetpack.com/support/site-management' ); ?></p>
1975 + <p class="jp-banner__button-container">
1976 + <a href="<?php echo esc_url( $opt_in_url ); ?>" class="button button-primary" id="wpcom-connect"><?php _e( 'Activate Jetpack Manage', 'jetpack' ); ?></a>
1977 + <a href="https://jetpack.com/support/site-management" class="button" target="_blank" title="<?php esc_attr_e( 'Learn more about Jetpack Manage on Jetpack.com', 'jetpack' ); ?>"><?php _e( 'Learn more', 'jetpack' ); ?></a>
1978 + </p>
1979 + </div>
1980 </div>
1981 <?php
1982 }
1983 @@ -3780,7 +3789,7 @@ p {
1984 ?>
1985 <div class="wrap">
1986 <div id="message" class="jetpack-message is-opt-in">
1987 - <?php echo sprintf( __( '<p><a href="%1$s" title="Opt in to WordPress.com Site Management" >Activate Site Management</a> to manage multiple sites from our centralized dashboard at wordpress.com/sites. <a href="%2$s" target="_blank">Learn more</a>.</p><a href="%1$s" class="jp-button">Activate Now</a>', 'jetpack' ), $this->opt_in_jetpack_manage_url(), 'http://jetpack.com/support/site-management' ); ?>
1988 + <?php echo sprintf( __( '<p><a href="%1$s" title="Opt in to WordPress.com Site Management" >Activate Site Management</a> to manage multiple sites from our centralized dashboard at wordpress.com/sites. <a href="%2$s" target="_blank">Learn more</a>.</p><a href="%1$s" class="jp-button">Activate Now</a>', 'jetpack' ), $this->opt_in_jetpack_manage_url(), 'https://jetpack.com/support/site-management' ); ?>
1989 </div>
1990 </div>
1991 <?php
1992 @@ -3937,9 +3946,14 @@ p {
1993 wp_redirect( $connect_url );
1994 exit;
1995 } else {
1996 - Jetpack::state( 'message', 'already_authorized' );
1997 - wp_safe_redirect( Jetpack::admin_url() );
1998 - exit;
1999 + if ( ! isset( $_GET['calypso_env'] ) ) {
2000 + Jetpack::state( 'message', 'already_authorized' );
2001 + wp_safe_redirect( Jetpack::admin_url() );
2002 + } else {
2003 + $connect_url = $this->build_connect_url( true, false, 'iframe' );
2004 + $connect_url .= '&already_authorized=true';
2005 + wp_redirect( $connect_url );
2006 + }
2007 }
2008 }
2009
2010 @@ -4069,7 +4083,7 @@ p {
2011 $this->error = __( 'Cheatin&#8217; uh?', 'jetpack' );
2012 break;
2013 case 'access_denied' :
2014 - $this->error = sprintf( __( 'Would you mind telling us why you did not complete the Jetpack connection in this <a href="%s">1 question survey</a>?', 'jetpack' ), 'http://jetpack.com/cancelled-connection/' ) . '<br /><small>' . __( 'A Jetpack connection is required for our free security and traffic features to work.', 'jetpack' ) . '</small>';
2015 + $this->error = sprintf( __( 'Would you mind telling us why you did not complete the Jetpack connection in this <a href="%s">1 question survey</a>?', 'jetpack' ), 'https://jetpack.com/cancelled-connection/' ) . '<br /><small>' . __( 'A Jetpack connection is required for our free security and traffic features to work.', 'jetpack' ) . '</small>';
2016 break;
2017 case 'wrong_state' :
2018 $this->error = __( 'You need to stay logged in to your WordPress blog while you authorize Jetpack.', 'jetpack' );
2019 @@ -4595,7 +4609,10 @@ p {
2020 'admin.php?page=jetpack-settings' ), $url );
2021 }
2022 } else {
2023 - require_once JETPACK__GLOTPRESS_LOCALES_PATH;
2024 + if ( defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) && include_once JETPACK__GLOTPRESS_LOCALES_PATH ) {
2025 + $gp_locale = GP_Locales::by_field( 'wp_locale', get_locale() );
2026 + }
2027 +
2028 $role = $this->translate_current_user_to_role();
2029 $signed_role = $this->sign_role( $role );
2030
2031 @@ -4603,8 +4620,6 @@ p {
2032
2033 $redirect = $redirect ? esc_url_raw( $redirect ) : esc_url_raw( menu_page_url( 'jetpack', false ) );
2034
2035 - $gp_locale = GP_Locales::by_field( 'wp_locale', get_locale() );
2036 -
2037 if( isset( $_REQUEST['is_multisite'] ) ) {
2038 $redirect = Jetpack_Network::init()->get_url( 'network_admin_page' );
2039 }
2040 @@ -4652,7 +4667,7 @@ p {
2041 }
2042
2043 if ( isset( $_GET['calypso_env'] ) ) {
2044 - $url = add_query_arg( 'calypso_env', $_GET['calypso_env'], $url );
2045 + $url = add_query_arg( 'calypso_env', sanitize_key( $_GET['calypso_env'] ), $url );
2046 }
2047
2048 return $raw ? $url : esc_url( $url );
2049 @@ -4842,7 +4857,7 @@ p {
2050
2051 $activate_url = Jetpack::init()->opt_in_jetpack_manage_url();
2052
2053 - $info['description'] = sprintf( __( 'Manage your multiple Jetpack sites from our centralized dashboard at wordpress.com/sites. <a href="%s" target="_blank">Learn more</a>.', 'jetpack' ), 'http://jetpack.com/support/site-management' );
2054 + $info['description'] = sprintf( __( 'Manage your multiple Jetpack sites from our centralized dashboard at wordpress.com/sites. <a href="%s" target="_blank">Learn more</a>.', 'jetpack' ), 'https://jetpack.com/support/site-management' );
2055
2056 // $extra = __( 'To use Site Management, you need to first activate JSON API to allow remote management of your site. ', 'jetpack' );
2057 } ?>
2058 @@ -4894,6 +4909,15 @@ p {
2059 exit;
2060 }
2061
2062 + function ajax_recheck_ssl() {
2063 + check_ajax_referer( 'recheck-ssl', 'ajax-nonce' );
2064 + $result = Jetpack::permit_ssl( true );
2065 + wp_send_json( array(
2066 + 'enabled' => $result,
2067 + 'message' => get_transient( 'jetpack_https_test_message' )
2068 + ) );
2069 + }
2070 +
2071 /* Client API */
2072
2073 /**
2074 @@ -4921,13 +4945,8 @@ p {
2075 // default : case 'AUTO' :
2076 }
2077
2078 - // Yay! Your host is good!
2079 - if ( self::permit_ssl() && wp_http_supports( array( 'ssl' => true ) ) ) {
2080 - return $url;
2081 - }
2082 -
2083 - // Boo! Your host is bad and makes Jetpack cry!
2084 - return set_url_scheme( $url, 'http' );
2085 + // we now return the unmodified SSL URL by default, as a security precaution
2086 + return $url;
2087 }
2088
2089 /**
2090 @@ -4939,12 +4958,14 @@ p {
2091 public static function permit_ssl( $force_recheck = false ) {
2092 // Do some fancy tests to see if ssl is being supported
2093 if ( $force_recheck || false === ( $ssl = get_transient( 'jetpack_https_test' ) ) ) {
2094 + $message = '';
2095 if ( 'https' !== substr( JETPACK__API_BASE, 0, 5 ) ) {
2096 $ssl = 0;
2097 } else {
2098 switch ( JETPACK_CLIENT__HTTPS ) {
2099 case 'NEVER':
2100 $ssl = 0;
2101 + $message = __( 'JETPACK_CLIENT__HTTPS is set to NEVER', 'jetpack' );
2102 break;
2103 case 'ALWAYS':
2104 case 'AUTO':
2105 @@ -4955,32 +4976,77 @@ p {
2106
2107 // If it's not 'NEVER', test to see
2108 if ( $ssl ) {
2109 - $response = wp_remote_get( JETPACK__API_BASE . 'test/1/' );
2110 - if ( is_wp_error( $response ) || ( 'OK' !== wp_remote_retrieve_body( $response ) ) ) {
2111 + if ( ! wp_http_supports( array( 'ssl' => true ) ) ) {
2112 $ssl = 0;
2113 + $message = __( 'WordPress reports no SSL support', 'jetpack' );
2114 + } else {
2115 + $response = wp_remote_get( JETPACK__API_BASE . 'test/1/' );
2116 + if ( is_wp_error( $response ) ) {
2117 + $ssl = 0;
2118 + $message = __( 'WordPress reports no SSL support', 'jetpack' );
2119 + } elseif ( 'OK' !== wp_remote_retrieve_body( $response ) ) {
2120 + $ssl = 0;
2121 + $message = __( 'Response was not OK: ', 'jetpack' ) . wp_remote_retrieve_body( $response );
2122 + }
2123 }
2124 }
2125 }
2126 set_transient( 'jetpack_https_test', $ssl, DAY_IN_SECONDS );
2127 + set_transient( 'jetpack_https_test_message', $message, DAY_IN_SECONDS );
2128 }
2129
2130 return (bool) $ssl;
2131 }
2132
2133 /*
2134 - * Displays an admin_notice, alerting the user to their JETPACK_CLIENT__HTTPS constant being 'ALWAYS' but SSL isn't working.
2135 + * Displays an admin_notice, alerting the user to their JETPACK_CLIENT__HTTPS constant being 'AUTO' but SSL isn't working.
2136 */
2137 - public function alert_required_ssl_fail() {
2138 + public function alert_auto_ssl_fail() {
2139 if ( ! current_user_can( 'manage_options' ) )
2140 return;
2141 +
2142 + $ajax_nonce = wp_create_nonce( 'recheck-ssl' );
2143 ?>
2144
2145 - <div id="message" class="error jetpack-message jp-identity-crisis">
2146 + <div id="jetpack-ssl-warning" class="error jp-identity-crisis">
2147 <div class="jp-banner__content">
2148 - <h2><?php _e( 'Something is being cranky!', 'jetpack' ); ?></h2>
2149 - <p><?php _e( 'Your site is configured to only permit SSL connections to Jetpack, but SSL connections don\'t seem to be functional!', 'jetpack' ); ?></p>
2150 + <h2><?php _e( 'Outbound HTTPS not working', 'jetpack' ); ?></h2>
2151 + <p><?php _e( 'Your site could not connect to WordPress.com via HTTPS. This could be due to any number of reasons, including faulty SSL certificates, misconfigured or missing SSL libraries, or network issues.', 'jetpack' ); ?></p>
2152 + <p>
2153 + <?php _e( 'Jetpack will re-test for HTTPS support once a day, but you can click here to try again immediately: ', 'jetpack' ); ?>
2154 + <a href="#" id="jetpack-recheck-ssl-button"><?php _e( 'Try again', 'jetpack' ); ?></a>
2155 + <span id="jetpack-recheck-ssl-output"><?php echo get_transient( 'jetpack_https_test_message' ); ?></span>
2156 + </p>
2157 + <p>
2158 + <?php printf( __( 'For more help, try our <a href="%1$s">connection debugger</a> or <a href="%2$s" target="_blank">troubleshooting tips</a>.', 'jetpack' ),
2159 + esc_url( Jetpack::admin_url( array( 'page' => 'jetpack-debugger' ) ) ),
2160 + esc_url( 'https://jetpack.com/support/getting-started-with-jetpack/troubleshooting-tips/' ) ); ?>
2161 + </p>
2162 </div>
2163 </div>
2164 + <style>
2165 + #jetpack-recheck-ssl-output { margin-left: 5px; color: red; }
2166 + </style>
2167 + <script type="text/javascript">
2168 + jQuery( document ).ready( function( $ ) {
2169 + $( '#jetpack-recheck-ssl-button' ).click( function( e ) {
2170 + var $this = $( this );
2171 + $this.html( <?php echo json_encode( __( 'Checking', 'jetpack' ) ); ?> );
2172 + $( '#jetpack-recheck-ssl-output' ).html( '' );
2173 + e.preventDefault();
2174 + var data = { action: 'jetpack-recheck-ssl', 'ajax-nonce': '<?php echo $ajax_nonce; ?>' };
2175 + $.post( ajaxurl, data )
2176 + .done( function( response ) {
2177 + if ( response.enabled ) {
2178 + $( '#jetpack-ssl-warning' ).hide();
2179 + } else {
2180 + this.html( <?php echo json_encode( __( 'Try again', 'jetpack' ) ); ?> );
2181 + $( '#jetpack-recheck-ssl-output' ).html( 'SSL Failed: ' + response.message );
2182 + }
2183 + }.bind( $this ) );
2184 + } );
2185 + } );
2186 + </script>
2187
2188 <?php
2189 }
2190 @@ -5731,11 +5797,11 @@ p {
2191 wp_die( $die_error );
2192 } else if ( is_wp_error( $signature ) ) {
2193 wp_die( $die_error );
2194 - } else if ( $signature !== $_GET['signature'] ) {
2195 + } else if ( ! hash_equals( $signature, $_GET['signature'] ) ) {
2196 if ( is_ssl() ) {
2197 // If we signed an HTTP request on the Jetpack Servers, but got redirected to HTTPS by the local blog, check the HTTP signature as well
2198 $signature = $jetpack_signature->sign_current_request( array( 'scheme' => 'http', 'body' => null, 'method' => 'GET' ) );
2199 - if ( ! $signature || is_wp_error( $signature ) || $signature !== $_GET['signature'] ) {
2200 + if ( ! $signature || is_wp_error( $signature ) || ! hash_equals( $signature, $_GET['signature'] ) ) {
2201 wp_die( $die_error );
2202 }
2203 } else {
2204 @@ -6238,135 +6304,6 @@ p {
2205 }
2206
2207 /**
2208 - * Displays an admin_notice, alerting the user to an identity crisis.
2209 - */
2210 - public function alert_identity_crisis() {
2211 - // @todo temporary killing of feature in 3.8.1 as it revealed a number of scenarios not foreseen.
2212 - if ( ! Jetpack::is_development_version() ) {
2213 - return;
2214 - }
2215 -
2216 - // @todo temporary copout for dealing with domain mapping
2217 - // @see https://github.com/Automattic/jetpack/issues/2702
2218 - if ( is_multisite() && defined( 'SUNRISE' ) && ! Jetpack::is_development_version() ) {
2219 - return;
2220 - }
2221 -
2222 - if ( ! current_user_can( 'jetpack_disconnect' ) ) {
2223 - return;
2224 - }
2225 -
2226 - if ( ! $errors = self::check_identity_crisis() ) {
2227 - return;
2228 - }
2229 -
2230 - // Only show on dashboard and jetpack pages
2231 - $screen = get_current_screen();
2232 - if ( 'dashboard' !== $screen->base && ! did_action( 'jetpack_notices' ) ) {
2233 - return;
2234 - }
2235 -
2236 - // Include the js!
2237 - $ajax_nonce = wp_create_nonce( 'resolve-identity-crisis' );
2238 - $this->identity_crisis_js( $ajax_nonce );
2239 -
2240 - // Include the CSS!
2241 - if ( ! wp_script_is( 'jetpack', 'done' ) ) {
2242 - $this->admin_banner_styles();
2243 - }
2244 -
2245 - if ( ! array_key_exists( 'error_code', $errors ) ) {
2246 - $key = 'siteurl';
2247 - if ( ! $errors[ $key ] ) {
2248 - $key = 'home';
2249 - }
2250 - } else {
2251 - $key = 'error_code';
2252 - // 401 is the only error we care about. Any other errors should not trigger the alert.
2253 - if ( 401 !== $errors[ $key ] ) {
2254 - return;
2255 - }
2256 - }
2257 -
2258 - ?>
2259 -
2260 - <style>
2261 - .jp-identity-crisis .jp-btn-group {
2262 - margin: 15px 0;
2263 - }
2264 - .jp-identity-crisis strong {
2265 - color: #518d2a;
2266 - }
2267 - .jp-identity-crisis.dismiss {
2268 - display: none;
2269 - }
2270 - .jp-identity-crisis .button {
2271 - margin-right: 4px;
2272 - }
2273 - </style>
2274 -
2275 - <div id="message" class="error jetpack-message jp-identity-crisis stay-visible">
2276 - <div class="service-mark"></div>
2277 - <div class="jp-id-banner__content">
2278 - <!-- <h3 class="banner-title"><?php _e( 'Something\'s not quite right with your Jetpack connection! Let\'s fix that.', 'jetpack' ); ?></h3> -->
2279 -
2280 - <div class="jp-id-crisis-question" id="jp-id-crisis-question-1">
2281 - <?php
2282 - // 401 means that this site has been disconnected from wpcom, but the remote site still thinks it's connected.
2283 - if ( 'error_code' == $key && '401' == $errors[ $key ] ) : ?>
2284 - <div class="banner-content">
2285 - <p><?php
2286 - /* translators: %s is a URL */
2287 - printf( __( 'Our records show that this site does not have a valid connection to WordPress.com. Please reset your connection to fix this. <a href="%s" target="_blank">What caused this?</a>', 'jetpack' ), 'https://jetpack.com/support/no-valid-wordpress-com-connection/' );
2288 - ?></p>
2289 - </div>
2290 - <div class="jp-btn-group">
2291 - <a href="#" class="reset-connection"><?php _e( 'Reset the connection', 'jetpack' ); ?></a>
2292 - <span class="idc-separator">|</span>
2293 - <a href="<?php echo esc_url( wp_nonce_url( Jetpack::admin_url( 'jetpack-notice=dismiss' ), 'jetpack-deactivate' ) ); ?>"><?php _e( 'Deactivate Jetpack', 'jetpack' ); ?></a>
2294 - </div>
2295 - <?php else : ?>
2296 - <div class="banner-content">
2297 - <p><?php printf( __( 'It looks like you may have changed your domain. Is <strong>%1$s</strong> still your site\'s domain, or have you updated it to <strong> %2$s </strong>?', 'jetpack' ), $errors[ $key ], (string) get_option( $key ) ); ?></p>
2298 - </div>
2299 - <div class="jp-btn-group">
2300 - <a href="#" class="regular site-moved"><?php printf( __( '%s is now my domain.', 'jetpack' ), $errors[ $key ] ); ?></a> <span class="idc-separator">|</span> <a href="#" class="site-not-moved" ><?php printf( __( '%s is still my domain.', 'jetpack' ), (string) get_option( $key ) ); ?></a>
2301 - <span class="spinner"></span>
2302 - </div>
2303 - <?php endif ; ?>
2304 - </div>
2305 -
2306 - <div class="jp-id-crisis-question" id="jp-id-crisis-question-2" style="display: none;">
2307 - <div class="banner-content">
2308 - <p><?php printf(
2309 - /* translators: %1$s, %2$s and %3$s are URLs */
2310 - __(
2311 - 'Are <strong> %2$s </strong> and <strong> %1$s </strong> two completely separate websites? If so we should create a new connection, which will reset your followers and linked services. <a href="%3$s"><em>What does this mean?</em></a>',
2312 - 'jetpack'
2313 - ),
2314 - $errors[ $key ],
2315 - (string) get_option( $key ),
2316 - 'https://jetpack.com/support/what-does-resetting-the-connection-mean/'
2317 - ); ?></p>
2318 - </div>
2319 - <div class="jp-btn-group">
2320 - <a href="#" class="reset-connection"><?php _e( 'Reset the connection', 'jetpack' ); ?></a> <span class="idc-separator">|</span>
2321 - <a href="#" class="is-dev-env"><?php _e( 'This is a development environment', 'jetpack' ); ?></a> <span class="idc-separator">|</span>
2322 - <a href="https://jetpack.com/contact-support/" class="contact-support"><?php _e( 'Submit a support ticket', 'jetpack' ); ?></a>
2323 - <span class="spinner"></span>
2324 - </div>
2325 - </div>
2326 -
2327 - <div class="jp-id-crisis-success" id="jp-id-crisis-success" style="display: none;">
2328 - <h3 class="success-notice"><?php printf( __( 'Thanks for taking the time to sort things out. We&#039;ve updated our records accordingly!', 'jetpack' ) ); ?></h3>
2329 - </div>
2330 - </div>
2331 - </div>
2332 -
2333 - <?php
2334 - }
2335 -
2336 - /**
2337 * Maybe Use a .min.css stylesheet, maybe not.
2338 *
2339 * Hooks onto `plugins_url` filter at priority 1, and accepts all 3 args.
2340 @@ -6525,6 +6462,7 @@ p {
2341 'wpl_sharing_2014_1' => null,
2342 'jetpack-tools-to-include' => 'jetpack_tools_to_include',
2343 'jetpack_identity_crisis_options_to_check' => null,
2344 + 'audio_player_default_colors' => null,
2345 );
2346
2347 // This is a silly loop depth. Better way?
2348 @@ -7014,11 +6952,6 @@ p {
2349 <?php endif; ?>
2350 </div>
2351
2352 -
2353 - <?php if ( ! current_user_can( 'edit_posts' ) && self::is_user_connected() ) : ?>
2354 - <div style="width: 100%; text-align: center; padding-top: 20px; clear: both;"><a class="button" title="<?php esc_attr_e( 'Unlink your account from WordPress.com', 'jetpack' ); ?>" href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'unlink', 'redirect' => 'sub-unlink' ), admin_url( 'index.php' ) ), 'jetpack-unlink' ) ); ?>"><?php esc_html_e( 'Unlink your account from WordPress.com', 'jetpack' ); ?></a></div>
2355 - <?php endif; ?>
2356 -
2357 </footer>
2358 <?php
2359 }
2360 @@ -7095,4 +7028,56 @@ p {
2361 return true;
2362 }
2363
2364 + /**
2365 + * Return string containing the Jetpack logo.
2366 + *
2367 + * @since 3.9.0
2368 + *
2369 + * @return string
2370 + */
2371 + public static function get_jp_emblem() {
2372 + return '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0" y="0" viewBox="0 0 172.9 172.9" enable-background="new 0 0 172.9 172.9" xml:space="preserve"> <path d="M86.4 0C38.7 0 0 38.7 0 86.4c0 47.7 38.7 86.4 86.4 86.4s86.4-38.7 86.4-86.4C172.9 38.7 134.2 0 86.4 0zM83.1 106.6l-27.1-6.9C49 98 45.7 90.1 49.3 84l33.8-58.5V106.6zM124.9 88.9l-33.8 58.5V66.3l27.1 6.9C125.1 74.9 128.4 82.8 124.9 88.9z" /></svg>';
2373 + }
2374 +
2375 + /*
2376 + * Adds a "blank" column in the user admin table to display indication of user connection.
2377 + */
2378 + function jetpack_icon_user_connected( $columns ) {
2379 + $columns['user_jetpack'] = '';
2380 + return $columns;
2381 + }
2382 +
2383 + /*
2384 + * Show Jetpack icon if the user is linked.
2385 + */
2386 + function jetpack_show_user_connected_icon( $val, $col, $user_id ) {
2387 + if ( 'user_jetpack' == $col && Jetpack::is_user_connected( $user_id ) ) {
2388 + $emblem_html = sprintf(
2389 + '<a title="%1$s" class="jp-emblem-user-admin">%2$s</a>',
2390 + esc_attr__( 'This user is linked and ready to fly with Jetpack.', 'jetpack' ),
2391 + Jetpack::get_jp_emblem()
2392 + );
2393 + return $emblem_html;
2394 + }
2395 +
2396 + return $val;
2397 + }
2398 +
2399 + /*
2400 + * Style the Jetpack user column
2401 + */
2402 + function jetpack_user_col_style() {
2403 + global $current_screen;
2404 + if ( 'users' == $current_screen->base ) { ?>
2405 + <style>
2406 + .fixed .column-user_jetpack {
2407 + width: 21px;
2408 + }
2409 + .jp-emblem-user-admin path {
2410 + fill: #8cc258;
2411 + }
2412 + </style>
2413 + <?php }
2414 + }
2415 +
2416 }
2417
2418 diff --git a/plugins/jetpack/class.json-api-endpoints.php b/plugins/jetpack/class.json-api-endpoints.php
2419 index 7c655ad..934def3 100644
2420 --- a/plugins/jetpack/class.json-api-endpoints.php
2421 +++ b/plugins/jetpack/class.json-api-endpoints.php
2422 @@ -1,12 +1,18 @@
2423 <?php
2424
2425 require_once( dirname( __FILE__ ) . '/json-api-config.php' );
2426 +require_once( dirname( __FILE__ ) . '/sal/class.json-api-links.php' );
2427 +require_once( dirname( __FILE__ ) . '/sal/class.json-api-metadata.php' );
2428 +require_once( dirname( __FILE__ ) . '/sal/class.json-api-date.php' );
2429
2430 // Endpoint
2431 abstract class WPCOM_JSON_API_Endpoint {
2432 // The API Object
2433 public $api;
2434
2435 + // The link-generating utility class
2436 + public $links;
2437 +
2438 public $pass_wpcom_user_details = false;
2439
2440 // One liner.
2441 @@ -193,6 +199,7 @@ abstract class WPCOM_JSON_API_Endpoint {
2442 }
2443
2444 $this->api = WPCOM_JSON_API::init(); // Auto-add to WPCOM_JSON_API
2445 + $this->links = WPCOM_JSON_API_Links::getInstance();
2446
2447 /** Example Request/Response ******************************************/
2448
2449 @@ -643,6 +650,18 @@ abstract class WPCOM_JSON_API_Endpoint {
2450 );
2451 $return[$key] = (array) $this->cast_and_filter( $value, $docs, false, $for_output );
2452 break;
2453 + case 'taxonomy':
2454 + $docs = array(
2455 + 'name' => '(string) The taxonomy slug',
2456 + 'label' => '(string) The taxonomy human-readable name',
2457 + 'labels' => '(object) Mapping of labels for the taxonomy',
2458 + 'description' => '(string) The taxonomy description',
2459 + 'hierarchical' => '(bool) Whether the taxonomy is hierarchical',
2460 + 'public' => '(bool) Whether the taxonomy is public',
2461 + 'capabilities' => '(object) Mapping of current user capabilities for the taxonomy',
2462 + );
2463 + $return[$key] = (array) $this->cast_and_filter( $value, $docs, false, $for_output );
2464 + break;
2465
2466 default :
2467 $method_name = $type['type'] . '_docs';
2468 @@ -1132,9 +1151,9 @@ abstract class WPCOM_JSON_API_Endpoint {
2469
2470 $response['meta'] = (object) array(
2471 'links' => (object) array(
2472 - 'self' => (string) $this->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
2473 - 'help' => (string) $this->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
2474 - 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
2475 + 'self' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
2476 + 'help' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
2477 + 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
2478 ),
2479 );
2480
2481 @@ -1244,21 +1263,21 @@ abstract class WPCOM_JSON_API_Endpoint {
2482
2483 $response['meta'] = (object) array(
2484 'links' => (object) array(
2485 - 'self' => (string) $this->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
2486 - 'help' => (string) $this->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
2487 - 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
2488 + 'self' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
2489 + 'help' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
2490 + 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
2491 ),
2492 );
2493
2494 // add VideoPress link to the meta
2495 if ( in_array( $ext, array( 'ogv', 'mp4', 'mov', 'wmv', 'avi', 'mpg', '3gp', '3g2', 'm4v' ) ) ) {
2496 if ( function_exists( 'video_get_info_by_blogpostid' ) ) {
2497 - $response['meta']->links->videopress = (string) $this->get_link( '/videos/%s', $response['videopress_guid'], '' );
2498 + $response['meta']->links->videopress = (string) $this->links->get_link( '/videos/%s', $response['videopress_guid'], '' );
2499 }
2500 }
2501
2502 if ( $media_item->post_parent > 0 ) {
2503 - $response['meta']->links->parent = (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $media_item->post_parent );
2504 + $response['meta']->links->parent = (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $media_item->post_parent );
2505 }
2506
2507 return (object) $response;
2508 @@ -1299,14 +1318,15 @@ abstract class WPCOM_JSON_API_Endpoint {
2509 $response['description'] = (string) $taxonomy->description;
2510 $response['post_count'] = (int) $taxonomy->count;
2511
2512 - if ( 'category' === $taxonomy_type )
2513 + if ( is_taxonomy_hierarchical( $taxonomy_type ) ) {
2514 $response['parent'] = (int) $taxonomy->parent;
2515 + }
2516
2517 $response['meta'] = (object) array(
2518 'links' => (object) array(
2519 - 'self' => (string) $this->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type ),
2520 - 'help' => (string) $this->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type, 'help' ),
2521 - 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
2522 + 'self' => (string) $this->links->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type ),
2523 + 'help' => (string) $this->links->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type, 'help' ),
2524 + 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
2525 ),
2526 );
2527
2528 @@ -1322,47 +1342,7 @@ abstract class WPCOM_JSON_API_Endpoint {
2529 * @return string
2530 */
2531 function format_date( $date_gmt, $date = null ) {
2532 - $timestamp_gmt = strtotime( "$date_gmt+0000" );
2533 -
2534 - if ( null === $date ) {
2535 - $timestamp = $timestamp_gmt;
2536 - $hours = $minutes = $west = 0;
2537 - } else {
2538 - $date_time = date_create( "$date+0000" );
2539 - if ( $date_time ) {
2540 - $timestamp = date_format( $date_time, 'U' );
2541 - } else {
2542 - $timestamp = 0;
2543 - }
2544 -
2545 - // "0000-00-00 00:00:00" == -62169984000
2546 - if ( -62169984000 == $timestamp_gmt ) {
2547 - // WordPress sets post_date=now, post_date_gmt="0000-00-00 00:00:00" for all drafts
2548 - // WordPress sets post_modified=now, post_modified_gmt="0000-00-00 00:00:00" for new drafts
2549 -
2550 - // Try to guess the correct offset from the blog's options.
2551 - $timezone_string = get_option( 'timezone_string' );
2552 -
2553 - if ( $timezone_string && $date_time ) {
2554 - $timezone = timezone_open( $timezone_string );
2555 - if ( $timezone ) {
2556 - $offset = $timezone->getOffset( $date_time );
2557 - }
2558 - } else {
2559 - $offset = 3600 * get_option( 'gmt_offset' );
2560 - }
2561 - } else {
2562 - $offset = $timestamp - $timestamp_gmt;
2563 - }
2564 -
2565 - $west = $offset < 0;
2566 - $offset = abs( $offset );
2567 - $hours = (int) floor( $offset / 3600 );
2568 - $offset -= $hours * 3600;
2569 - $minutes = (int) floor( $offset / 60 );
2570 - }
2571 -
2572 - return (string) gmdate( 'Y-m-d\\TH:i:s', $timestamp ) . sprintf( '%s%02d:%02d', $west ? '-' : '+', $hours, $minutes );
2573 + return WPCOM_JSON_API_Date::format_date( $date_gmt, $date );
2574 }
2575
2576 /**
2577 @@ -1536,235 +1516,6 @@ abstract class WPCOM_JSON_API_Endpoint {
2578 }
2579
2580 /**
2581 - * Try to find the closest supported version of an endpoint to the current endpoint
2582 - *
2583 - * For example, if we were looking at the path /animals/panda:
2584 - * - if the current endpoint is v1.3 and there is a v1.3 of /animals/%s available, we return 1.3
2585 - * - if the current endpoint is v1.3 and there is no v1.3 of /animals/%s known, we fall back to the
2586 - * maximum available version of /animals/%s, e.g. 1.1
2587 - *
2588 - * This method is used in get_link() to construct meta links for API responses.
2589 - *
2590 - * @param $path string The current endpoint path, relative to the version
2591 - * @param $method string Request method used to access the endpoint path
2592 - * @return string The current version, or otherwise the maximum version available
2593 - */
2594 - function get_closest_version_of_endpoint( $path, $request_method = 'GET' ) {
2595 -
2596 - $path = untrailingslashit( $path );
2597 -
2598 - // /help is a special case - always use the current request version
2599 - if ( wp_endswith( $path, '/help' ) ) {
2600 - return $this->api->version;
2601 - }
2602 -
2603 - static $matches;
2604 - if ( empty( $matches ) ) {
2605 - $matches = array();
2606 - } else {
2607 - // try to match out of saved matches
2608 - foreach( $matches as $match ) {
2609 - $regex = $match->regex;
2610 - if ( preg_match( "#^$regex\$#", $path ) ) {
2611 - return $match->version;
2612 - }
2613 - }
2614 - }
2615 -
2616 - $endpoint_path_versions = $this->get_endpoint_path_versions();
2617 - $last_path_segment = $this->get_last_segment_of_relative_path( $path );
2618 - $max_version_found = null;
2619 -
2620 - foreach ( $endpoint_path_versions as $endpoint_last_path_segment => $endpoints ) {
2621 -
2622 - // Does the last part of the path match the path key? (e.g. 'posts')
2623 - // If the last part contains a placeholder (e.g. %s), we want to carry on
2624 - if ( $last_path_segment != $endpoint_last_path_segment && ! strstr( $endpoint_last_path_segment, '%' ) ) {
2625 - continue;
2626 - }
2627 -
2628 - foreach ( $endpoints as $endpoint ) {
2629 - // Does the request method match?
2630 - if ( ! in_array( $request_method, $endpoint['request_methods'] ) ) {
2631 - continue;
2632 - }
2633 -
2634 - $endpoint_path = untrailingslashit( $endpoint['path'] );
2635 - $endpoint_path_regex = str_replace( array( '%s', '%d' ), array( '([^/?&]+)', '(\d+)' ), $endpoint_path );
2636 -
2637 - if ( ! preg_match( "#^$endpoint_path_regex\$#", $path ) ) {
2638 - continue;
2639 - }
2640 -
2641 - // Make sure the endpoint exists at the same version
2642 - if ( version_compare( $this->api->version, $endpoint['min_version'], '>=') &&
2643 - version_compare( $this->api->version, $endpoint['max_version'], '<=') ) {
2644 - array_push( $matches, (object) array( 'version' => $this->api->version, 'regex' => $endpoint_path_regex ) );
2645 - return $this->api->version;
2646 - }
2647 -
2648 - // If the endpoint doesn't exist at the same version, record the max version we found
2649 - if ( empty( $max_version_found ) || version_compare( $max_version_found['version'], $endpoint['max_version'], '<' ) ) {
2650 - $max_version_found = array( 'version' => $endpoint['max_version'], 'regex' => $endpoint_path_regex );
2651 - }
2652 - }
2653 - }
2654 -
2655 - // If the endpoint version is less than the requested endpoint version, return the max version found
2656 - if ( ! empty( $max_version_found ) ) {
2657 - array_push( $matches, (object) $max_version_found );
2658 - return $max_version_found['version'];
2659 - }
2660 -
2661 - // Otherwise, use the API version of the current request
2662 - return $this->api->version;
2663 - }
2664 -
2665 - /**
2666 - * Get an array of endpoint paths with their associated versions
2667 - *
2668 - * The result is cached for 30 minutes.
2669 - *
2670 - * @return array Array of endpoint paths, min_versions and max_versions, keyed by last segment of path
2671 - **/
2672 - protected function get_endpoint_path_versions() {
2673 -
2674 - static $cache_result;
2675 -
2676 - if ( ! empty ( $cache_result ) ) {
2677 - return $cache_result;
2678 - }
2679 -
2680 - /*
2681 - * Create a map of endpoints and their min/max versions keyed by the last segment of the path (e.g. 'posts')
2682 - * This reduces the search space when finding endpoint matches in get_closest_version_of_endpoint()
2683 - */
2684 - $endpoint_path_versions = array();
2685 -
2686 - foreach ( $this->api->endpoints as $key => $endpoint_objects ) {
2687 -
2688 - // The key contains a serialized path, min_version and max_version
2689 - list( $path, $min_version, $max_version ) = unserialize( $key );
2690 -
2691 - // Grab the last component of the relative path to use as the top-level key
2692 - $last_path_segment = $this->get_last_segment_of_relative_path( $path );
2693 -
2694 - $endpoint_path_versions[ $last_path_segment ][] = array(
2695 - 'path' => $path,
2696 - 'min_version' => $min_version,
2697 - 'max_version' => $max_version,
2698 - 'request_methods' => array_keys( $endpoint_objects )
2699 - );
2700 - }
2701 -
2702 - $cache_result = $endpoint_path_versions;
2703 -
2704 - return $endpoint_path_versions;
2705 - }
2706 -
2707 - /**
2708 - * Grab the last segment of a relative path
2709 - *
2710 - * @param string $path Path
2711 - * @return string Last path segment
2712 - */
2713 - protected function get_last_segment_of_relative_path( $path) {
2714 - $path_parts = array_filter( explode( '/', $path ) );
2715 -
2716 - if ( empty( $path_parts ) ) {
2717 - return null;
2718 - }
2719 -
2720 - return end( $path_parts );
2721 - }
2722 -
2723 - /**
2724 - * Generate a URL to an endpoint
2725 - *
2726 - * Used to construct meta links in API responses
2727 - *
2728 - * @param mixed $args Optional arguments to be appended to URL
2729 - * @return string Endpoint URL
2730 - **/
2731 - function get_link() {
2732 - $args = func_get_args();
2733 - $format = array_shift( $args );
2734 - $base = WPCOM_JSON_API__BASE;
2735 -
2736 - $path = array_pop( $args );
2737 -
2738 - if ( $path ) {
2739 - $path = '/' . ltrim( $path, '/' );
2740 - }
2741 -
2742 - $args[] = $path;
2743 -
2744 - // Escape any % in args before using sprintf
2745 - $escaped_args = array();
2746 - foreach ( $args as $arg_key => $arg_value ) {
2747 - $escaped_args[ $arg_key ] = str_replace( '%', '%%', $arg_value );
2748 - }
2749 -
2750 - $relative_path = vsprintf( "$format%s", $escaped_args );
2751 -
2752 - if ( ! wp_startswith( $relative_path, '.' ) ) {
2753 - // Generic version. Match the requested version as best we can
2754 - $api_version = $this->get_closest_version_of_endpoint( $relative_path );
2755 - $base = substr( $base, 0, - 1 ) . $api_version;
2756 - }
2757 -
2758 - // escape any % in the relative path before running it through sprintf again
2759 - $relative_path = str_replace( '%', '%%', $relative_path );
2760 - // http, WPCOM_JSON_API__BASE, ... , path
2761 - // %s , %s , $format, %s
2762 - return esc_url_raw( sprintf( "%s://%s$relative_path", $this->api->public_api_scheme, $base ) );
2763 - }
2764 -
2765 - function get_me_link( $path = '' ) {
2766 - return $this->get_link( '/me', $path );
2767 - }
2768 -
2769 - function get_taxonomy_link( $blog_id, $taxonomy_id, $taxonomy_type, $path = '' ) {
2770 - if ( 'category' === $taxonomy_type )
2771 - return $this->get_link( '/sites/%d/categories/slug:%s', $blog_id, $taxonomy_id, $path );
2772 - else
2773 - return $this->get_link( '/sites/%d/tags/slug:%s', $blog_id, $taxonomy_id, $path );
2774 - }
2775 -
2776 - function get_media_link( $blog_id, $media_id, $path = '' ) {
2777 - return $this->get_link( '/sites/%d/media/%d', $blog_id, $media_id, $path );
2778 - }
2779 -
2780 - function get_site_link( $blog_id, $path = '' ) {
2781 - return $this->get_link( '/sites/%d', $blog_id, $path );
2782 - }
2783 -
2784 - function get_post_link( $blog_id, $post_id, $path = '' ) {
2785 - return $this->get_link( '/sites/%d/posts/%d', $blog_id, $post_id, $path );
2786 - }
2787 -
2788 - function get_comment_link( $blog_id, $comment_id, $path = '' ) {
2789 - return $this->get_link( '/sites/%d/comments/%d', $blog_id, $comment_id, $path );
2790 - }
2791 -
2792 - function get_publicize_connection_link( $blog_id, $publicize_connection_id, $path = '' ) {
2793 - return $this->get_link( '.1/sites/%d/publicize-connections/%d', $blog_id, $publicize_connection_id, $path );
2794 - }
2795 -
2796 - function get_publicize_connections_link( $keyring_token_id, $path = '' ) {
2797 - return $this->get_link( '.1/me/publicize-connections/?keyring_connection_ID=%d', $keyring_token_id, $path );
2798 - }
2799 -
2800 - function get_keyring_connection_link( $keyring_token_id, $path = '' ) {
2801 - return $this->get_link( '.1/me/keyring-connections/%d', $keyring_token_id, $path );
2802 - }
2803 -
2804 - function get_external_service_link( $external_service, $path = '' ) {
2805 - return $this->get_link( '.1/meta/external-services/%s', $external_service, $path );
2806 - }
2807 -
2808 -
2809 - /**
2810 * Check whether a user can view or edit a post type
2811 * @param string $post_type post type to check
2812 * @param string $context 'display' or 'edit'
2813 @@ -1949,7 +1700,7 @@ abstract class WPCOM_JSON_API_Endpoint {
2814
2815 }
2816
2817 - function handle_media_sideload( $url, $parent_post_id = 0 ) {
2818 + function handle_media_sideload( $url, $parent_post_id = 0, $type = 'any' ) {
2819 if ( ! function_exists( 'download_url' ) || ! function_exists( 'media_handle_sideload' ) )
2820 return false;
2821
2822 @@ -1965,8 +1716,8 @@ abstract class WPCOM_JSON_API_Endpoint {
2823
2824 // First check to see if we get a mime-type match by file, otherwise, check to
2825 // see if WordPress supports this file as an image. If neither, then it is not supported.
2826 - if ( ! $this->is_file_supported_for_sideloading( $tmp ) && ! file_is_displayable_image( $tmp ) ) {
2827 - unlink( $tmp );
2828 + if ( ! $this->is_file_supported_for_sideloading( $tmp ) && 'image' === $type && ! file_is_displayable_image( $tmp ) ) {
2829 + @unlink( $tmp );
2830 return false;
2831 }
2832
2833 @@ -2128,6 +1879,10 @@ abstract class WPCOM_JSON_API_Endpoint {
2834 return 'GET' == $this->method || ( $this->allow_unauthorized_request && in_array( $origin, $complete_access_origins ) );
2835 }
2836
2837 + function get_platform() {
2838 + return wpcom_get_sal_platform( $this->api->token_details );
2839 + }
2840 +
2841 /**
2842 * Return endpoint response
2843 *
2844
2845 diff --git a/plugins/jetpack/class.photon.php b/plugins/jetpack/class.photon.php
2846 index 6e0f2ef..6bfca64 100644
2847 --- a/plugins/jetpack/class.photon.php
2848 +++ b/plugins/jetpack/class.photon.php
2849 @@ -733,12 +733,16 @@ class Jetpack_Photon {
2850 * Filters an array of image `sizes` values, using $content_width instead of image's full size.
2851 *
2852 * @since 4.0.4
2853 + * @since 4.1.0 Returns early for images not within the_content.
2854 * @param array $sizes An array of media query breakpoints.
2855 * @param array $size Width and height of the image
2856 * @uses Jetpack::get_content_width
2857 * @return array An array of media query breakpoints.
2858 */
2859 public function filter_sizes( $sizes, $size ) {
2860 + if ( ! doing_filter( 'the_content' ) ){
2861 + return $sizes;
2862 + }
2863 $content_width = Jetpack::get_content_width();
2864 if ( ! $content_width ) {
2865 $content_width = 1000;
2866
2867 diff --git a/plugins/jetpack/css/dashboard-widget.css.map b/plugins/jetpack/css/dashboard-widget.css.map
2868 index 0aa5b78..0699b90 100644
2869 --- a/plugins/jetpack/css/dashboard-widget.css.map
2870 +++ b/plugins/jetpack/css/dashboard-widget.css.map
2871 @@ -1 +1 @@
2872 -{"version":3,"sources":["../scss/_utilities/mixins/_button.scss","dashboard-widget.css","../scss/templates/_dashboard-widget.scss","../scss/atoms/colors/_colors.scss"],"names":[],"mappings":"AAEA;;;GCCE;ACDD;;;IDKE;AACH;ECAE,6BAAA;EAAA,wBAAA;EDED;AACD;EAAA,WAAA;ECCC,YAAA;EDCC,wEAAW;EAEZ;AACD;;;EAGE,gBAAe;EAChB;AACD;ECCE,qBAAA;EACC,oBAAA;EDCF;AACD;EAAA,oBAAA;EAEC;AACD;ECCG,aAAA;EACC,cC1BI;EF2BP;AACD;EAAA,eAAA;EAEC;AACD;;;EAGE,aAAY;EACb;AACD;ECKE,mBAAA;EACC,kBAAA;EDHF;AACD;EAAA,aAAA;ECOE,eAAA;EACC,iBAAY;EDJd;AACD;ECKG,oBAAA;EACC,wBAAc;EDHjB;AACD;EAAA,gBAAA;EAEC;AACD;EAAA,aAAA;EAEC;AACD;EAAA,qBAAA;EACE,uBAAoB;EDhDrB,cAAA;EAEC,gEAAY;ECkDb;AACD;EAAA,qBAAA;EACE,uBAAoB;ED9CrB,cAAA;EACC,mCAAY;ECiDb;AACD;EAAA,2FAAA;EAEC;AACD;EAAA,qBAAA;EACE,uBAAoB;EDxCrB,cAAA;EAIC,6GAAO;ECwCR;AACD;EAAA,2BAAA;EACE,gCAA0B;ECd3B,kCAAO;EACN,8BAAA;EDiBD;AACD;EAAA,qBAAA;EACE,gBAAA;ECdA,kBAAA;EDgBA,4BAAiB;EAElB;AACD;;EAEE,YAAW;ECdX,aAAA;EACC,kBAAW;EDgBb;AACD;EAAA,kBAAA;EACE,qBAAiB;ECZjB,WAAA;EACC,YAAS;EDeX;AACD;ECZ
2873 E,WAAA;EACC,YAAS;EDcX;AACD;EAAA,WAAA;EACE,YAAU;EACV,oBAAW;EAEZ","file":"dashboard-widget.css"}
2874 \ No newline at end of file
2875 +{"version":3,"sources":["../scss/_utilities/mixins/_button.scss","dashboard-widget.css","../scss/templates/_dashboard-widget.scss"],"names":[],"mappings":"AAEA;;;GCCE;ACDD;;;IDKE;AACH;ECAE,6BAAA;EAAA,wBAAA;EDED;AACD;EAAA,WAAA;EAAA,YAAA;EAAA,wEAAA;EAIC;AACD;;;EAGE,gBAAe;EAChB;AACD;EAAA,qBAAA;EAAA,oBAAA;EAGC;AACD;EAAA,oBAAA;EAEC;AACD;EAAA,aAAA;EAAA,cAAA;EAGC;AACD;EAAA,eAAA;EAEC;AACD;;;EAGE,aAAY;EACb;AACD;EAAA,mBAAA;EAAA,kBAAA;EAGC;AACD;EAAA,aAAA;EAAA,eAAA;EAAA,iBAAA;EAIC;AACD;EAAA,oBAAA;EAAA,wBAAA;EAGC;AACD;EAAA,gBAAA;EAEC;AACD;EAAA,aAAA;EAEC;AACD;EAAA,qBAAA;EAAA,uBAAA;EAAA,cAAA;EAAA,gEAAA;EAKC;AACD;EAAA,qBAAA;EAAA,uBAAA;EAAA,cAAA;EAAA,mCAAA;EAKC;AACD;EAAA,2FAAA;EAEC;AACD;EAAA,qBAAA;EAAA,uBAAA;EAAA,cAAA;EAAA,6GAAA;EAKC;AACD;EAAA,2BAAA;EAAA,gCAAA;EAAA,kCAAA;EAAA,8BAAA;EAKC;AACD;EAAA,qBAAA;EAAA,gBAAA;EAAA,kBAAA;EAAA,4BAAA;EAKC;AACD;;EAEE,YAAW;EAAX,aAAW;EAAX,kBAAW;EAGZ;AACD;EAAA,kBAAA;EAAA,qBAAA;EAAA,WAAA;EAAA,YAAA;EAKC;AACD;EAAA,WAAA;EAAA,YAAA;EAGC;AACD;EAAA,WAAA;EAAA,YAAA;EAAA,oBAAA;EA
2876 IC","file":"dashboard-widget.css"}
2877 \ No newline at end of file
2878
2879 diff --git a/plugins/jetpack/css/jetpack-admin-rtl.css b/plugins/jetpack/css/jetpack-admin-rtl.css
2880 index 24fcfa5..dc676b3 100644
2881 --- a/plugins/jetpack/css/jetpack-admin-rtl.css
2882 +++ b/plugins/jetpack/css/jetpack-admin-rtl.css
2883 @@ -3474,6 +3474,12 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
2884 -webkit-transform: translate(0, -50%);
2885 transform: translate(0, -50%);
2886 }
2887 +.nux-intro .wpcom .goto.activated .feat {
2888 + left: 50%;
2889 + -ms-transform: translate(50%, -50%);
2890 + -webkit-transform: translate(50%, -50%);
2891 + transform: translate(50%, -50%);
2892 +}
2893 .nux-intro .nux-foot .j-col {
2894 padding: 1em;
2895 }
2896 @@ -3669,9 +3675,6 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
2897 position: relative;
2898 top: -1px;
2899 }
2900 - .nux-intro .wpcom .goto .feat a {
2901 - float: right;
2902 - }
2903
2904 .nux-foot .j-col {
2905 border: none;
2906 @@ -3769,6 +3772,6 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
2907 @media (max-width: 782px){.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column){padding:11px 10px;display:block}.jetpack_page_jetpack_modules #doaction{padding:7px 14px}.jetpack_page_jetpack_modules .fixed-top thead .check-column{padding:28px 10px 0 10px}.jetpack_page_jetpack_modules .filter-search{margin-top:28px}.jetpack_page_jetpack_modules .filter-search .button{padding:7px 14px}.manage-right.show .subsubsub li{padding:5px}}@media (max-width: 650px){.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{float:none;padding-right:18px}}@media (max-width: 430px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{display:block}}.configure-module p{font-size:14px}.configure-module p.success,.configure-module p.error{color:#fff;padding:10px}.configure-module p.success{background-color:#81a844}.configure-module p.erro
2908 r{background-color:#d94f4f}.protect-status p{font-size:16px}.protect-status strong{display:inline-block;margin-top:10px;background:#fff;padding:10px;border:1px #ddd solid;font-size:16px;color:#000;max-width:100%}.protect-status.attn{color:#d94f4f}.protect-status.working{color:#81a844}#non-editable-whitelist{margin-top:15px}.protect-whitelist textarea{width:100%;min-height:150px}#editable-whitelist .whitelist-table{width:100%}.configure-module input[disabled]{opacity:.5}.configure-module input.button-primary{font-weight:bold}.whitelist-table{border-top:1px solid;border-left:1px solid;border-color:#ddd;background-color:#fff}.whitelist-table td,.whitelist-table th{padding:10px;margin:0;border-bottom:1px solid;border-right:1px solid;border-color:#ddd;font-size:14px}.whitelist-table th.heading{font-weight:bold;color:#5d6d74;text-align:right;background-color:#eee}.whitelist-table td.item-actions{border-right:none;text-align:left}.whitelist-table .toolbar{padding:0}.whitelist-table .add-bt
2909 n{text-align:center;width:10%;border-right:1px #ddd solid}.ip-address,.enter-ip{width:90%;text-align:right;vertical-align:middle}.delete-ip-address{text-align:center;border:0;background:transparent;color:#6f7476;box-shadow:none;font-size:20px;margin:0;padding:0;cursor:pointer;border-radius:2px}.delete-ip-address:hover{background:#eee}.toolbar div{float:right;padding:10px}@media only screen and (min-width: 1100px){#non-editable-whitelist{width:28%;float:left;margin-top:0}.protect-whitelist{width:65%;float:right}}@media only screen and (max-width: 1130px){.enter-ip input[type="text"]{max-width:175px}}@media only screen and (max-width: 1250px) and (min-width: 1065px), (max-width: 730px) and (min-width: 600px){.enter-ip{width:85%}.add-btn{width:15%}}@media only screen and (max-width: 782px){.add-btn{text-align:left}.add-btn .ip-add{margin-top:4px;margin-bottom:3px}}@media only screen and (max-width: 730px){.add-btn{text-align:center}}@media only screen and (max-width: 665px) and (min-wi
2910 dth: 600px){.enter-ip input[type="text"]{max-width:165px}}@media only screen and (max-width: 600px){.toolbar div{width:100%}.add-btn{border-top:1px #ddd solid}.enter-ip{text-align:center}.enter-ip strong{display:block;margin-bottom:5px}.enter-ip input[type="text"]{width:100%;max-width:100%}.add-btn input,.enter-ip .button{width:50%;margin:0 auto}.enter-ip .button{margin-top:10px}}@media only screen and (max-width: 400px){.protect-status strong{font-size:12px;overflow:auto}.add-btn input,.enter-ip .button{width:100%}}.my-jetpack-actions{margin:0 0 40px 0}.my-jetpack-actions .j-col{padding:0;text-align:center}.my-jetpack-actions #user-list{height:30px;margin-top:-1px;margin-right:-3px}#jetpack-disconnect-content{display:none;text-align:center}#jetpack-disconnect-content .cancel-disconnect{display:block;margin-top:10px}.connection-details{border:1px #ddd solid}.connection-details.local-user{margin-bottom:10px}.connection-details .user-01,.connection-details .wpuser-02,.connection-detai
2911 ls .action-btns{padding:10px}.connection-details .user-01 .button,.connection-details .user-01 select,.connection-details .wpuser-02 .button,.connection-details .wpuser-02 select,.connection-details .action-btns .button,.connection-details .action-btns select{margin-top:5px}.connection-details .wpuser-02{margin-top:10px}.connection-details h3{padding:10px;margin:0;background:#eee;border-bottom:1px #ddd solid;font-size:14px}.jp-user img{margin-left:10px;border-radius:50%}.jp-user div,.wp-user div,.wp-action div{display:inline-block;width:100%}.j-col.jp-user,.j-col.wp-user,.j-col.wp-action{padding:0}.my-jetpack-actions select{max-width:150px}.j-actions .button:nth-child(3){margin-left:5px}.j-row.disconnect{text-align:center}.j-row.disconnect .button{margin:0 auto}a.what-is-primary{color:#b4b9be;margin-right:4px}@media (max-width: 782px){.wp-action{border-top:1px #ddd solid}.wp-action h3{display:none}}@media screen and (max-width: 500px){.connection-details{font-size:11px}.connection-d
2912 etails h3{font-size:12px;padding:5px}.connection-details .user-01,.connection-details .wpuser-02{padding:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}.connection-details .action-btns{text-align:center}}@media (max-width: 530px){.connection-details .wpuser-02{margin-top:0;padding:12px}}@media screen and (max-width: 450px){.j-actions .button{width:100%;margin-bottom:5px;text-align:center}.j-actions .button.alignright{float:none}}@media screen and (max-width: 350px){.user-01,.wpuser-02{max-width:100px}}.manage__icon{width:155px;height:155px;margin:20px auto}.manage-page .manage__description{max-width:600px;text-align:center;font-size:22px;color:#999;margin:20px auto}.manage-page .manage__button{font-size:16px;padding:0 20px;height:40px;line-height:40px}.manage__title .genericon{font-size:38px;color:#81A944}.manage__link{font-size:16px;padding:0 20px;height:40px;line-height:40px;font-weight:normal}.manage__link .genericon{font-size:28px;vertical-align:mi
2913 ddle;margin-top:-6px}.connection-landing{text-align:center}.connection-landing h1{margin-bottom:0}.connection-landing h2{margin:0;padding:1.14286em 0;font-size:1.57143em;line-height:160%;font-weight:400}.connection-landing h2+p{margin-top:0}.connection-landing p{color:#686f72}.connect-card{text-align:center;margin:2.14286em auto 1.42857em;padding:0 4.28571em 1.42857em}.connect-card p{font-size:1.14286em}@media (max-width: 782px){.connect-card{padding:0 1.42857em 1.42857em}}
2914 .jp-card{background:#fff;border:1px #d9d9d9 solid;text-align:center;margin-bottom:2.85714em}.jp-card p{font-size:1.14286em}.jp-card .j-int{padding:0 4.28571em}.feature-container{background:#f4f4f4}.feature-container .j-int{background:#fff;padding:0}.feature-container .first-header{position:relative}@media (max-width: 900px){.feature-container .first-header{border-bottom:1px #d9d9d9 solid;background-image:none}.feature-container .first-header .j-header-img{display:none}}@media (min-width: 900px){.feature-container .first-header{background:url("../images/connection-landing/stars-right.svg") no-repeat,url("../images/connection-landing/stars-left.svg") no-repeat,#fff;background-position:10% 50%, 10% 50%;background-size:100px, 125px}}.feature-container .first-header .j-header-img{position:absolute;right:0;left:0;bottom:0}.feature-container .first-header .j-header-img img{margin:0 auto;max-width:100%;z-index:1001;position:absolute;right:0;left:0;bottom:0}@media (min-width: 900px){.feature
2915 -container .first-header .j-header-img img:first-of-type{bottom:-12px}}@media (min-width: 1147px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-10px}}.feature-container .first-header .j-header-img img+img{z-index:999}.feature-container .secondary-header{background:transparent;padding:0 10em}@media (max-width: 782px){.feature-container .secondary-header{padding:0 1.42857em}}.feature-container .j-feature-img{padding:0 1.42857em;margin-bottom:2.85714em}.feature-container .j-feature-img img{width:100%}.feature-container .j-feature-img:last-of-type{margin-bottom:1.42857em}@media (min-width: 900px){.j-traffic .first-header{padding-bottom:200px}}
2916 @media (min-width: 900px){.j-security .first-header{padding-bottom:225px}}
2917 -.three-feature{margin:1.42857em 0;padding:0 1.42857em;display:-moz-box;display:-ms-flexbox;display:flex;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media (max-width: 782px){.three-feature{-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width: 530px){.three-feature{padding:0}}.three-feature .j-col{border:1px #d9d9d9 solid;text-align:right;padding:0;background:#f9f9f9}@media (max-width: 782px){.three-feature .j-col{margin-bottom:1.42857em}}@media (max-width: 530px){.three-feature .j-col{border-right:none;border-left:none}}.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}@media (max-width: 782px){.three-feature .j-col:nth-of-type(2){border:1px #d9d9d9 solid}}@media (max-width: 530px){.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}}.three-feature h3{font-weight:600;font-size:1.14286em;min-width:15.35714em;white-space:nowrap;overflow:hidden;text-overflo
2918 w:ellipsis}@media (max-width: 782px){.three-feature h3{font-size:1em}}.three-feature .feature-img{background:#fff;border-bottom:1px #d9d9d9 solid;text-align:center}.three-feature .feature-img img{width:100%;max-width:500px;margin:0 auto}.three-feature p{line-height:150%;padding-bottom:0;font-size:1em}.three-feature h3,.three-feature p{margin:0;padding:1.42857em}@media (max-width: 782px){.three-feature h3,.three-feature p{font-size:0.92857em}}.three-feature h3{padding-bottom:0}.jp-content .hide{display:none}.jp-content .pointer{cursor:pointer}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font:400 1.75em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-conne
2919 ct .j-col{padding:0}.wpcom-connect .connect-desc{padding-left:25px}.wpcom-connect .connect-btn{text-align:center}.module-grid h2{color:#000;font:300 2.57143em/1em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif}.download-jetpack{margin-top:1em !important}.jump-start-area{background:#fff;border:1px #d9d9d9 solid;text-align:center;padding:0 1.42857em}.jump-start-area p{font-size:1.14286em}.jump-start-area h1{margin:1em auto 0}.jumpstart-message p{padding-left:25px}.jumpstart-desc{text-align:right}#jumpstart-cta{text-align:center;display:inline-block;float:none}.dismiss-jumpstart{color:#999;font-size:14px}#jumpstart-cta .button,#jumpstart-cta .button-primary{margin:1em;font-size:18px;height:45px !important;padding:8px 15px 1px}#jumpstart-cta .button-primary{display:block;margin:20px 20px 5px 20px}#jp-config-list{position:relative;padding-top:15px;padding-bottom:15px;margin-right:-15px;margin-left:-15px}#jp-config-list .j-col{padding:15px}#jp-config-list strong{display:inline-bloc
2920 k}#jp-config-list small{display:block;margin-top:5px;line-height:150%}#jp-config-list .close{position:absolute;top:10px;left:0;text-transform:uppercase;font-weight:bold;display:block;z-index:5}.jp-config-status{text-transform:uppercase;font-size:10px;font-weight:bold;line-height:100%;color:#fff;background:#9fbd72;border-radius:2px;padding:2px 4px;display:inline-block}.nux-intro h3{background:#81a844;color:#fff;font-weight:600;padding:.75em;margin:0}.nux-intro h4{margin:0 0 2px 0}.nux-intro p{text-align:center;font-size:1.24em;line-height:175%}.nux-intro a{transition:all .4s ease}.nux-intro .j-col{padding:0 0.5em}.nux-intro .j-col:first-of-type{padding-right:0}.nux-intro .j-col:last-of-type{padding-left:0}.nux-intro .nux-in{background:#ececec;-webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.nux-intro .nux-in h3{font-size:1.10em
2921 ;-webkit-border-top-right-radius:6px;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;border-top-left-radius:6px}.nux-intro .nux-in h3 .dashicons{float:left;color:#658435;font-size:1.25em;padding-right:0}.nux-intro .nux-in h3 .dashicons:hover{color:#57722e}.nux-intro .nux-in p{font-size:.9em;line-height:150%;margin:0;text-align:right;color:#686f72}.nux-intro .nux-in .j-row{border-bottom:1px #f9f9f9 solid;padding:5px 0;position:relative;min-height:70px}.nux-intro .nux-in .j-row:hover{background:#e0e0e0}.nux-intro .nux-in .unavailable{opacity:0.5}.nux-intro .nux-in .unavailable .act{display:none}.nux-intro .nux-in .paid{top:4px;margin-right:12px}.nux-intro .nux-in .dashicons{color:#81a844;font-size:1em;position:relative;top:3px;padding-right:6px}.nux-intro .nux-in .dashicons:hover{color:#57722e}.nux-intro .nux-in .dashicons-external{font-size:1.5em;top:2px;padding-right:3px}.nux-intro .nux-in .lmore{font-size
2922 :11px;color:#81a844}.nux-intro .nux-in .lmore:hover{color:#57722e}.nux-intro .feat.j-col{padding:10px 10px 10px 2px}.nux-intro .feat .dashicons{display:none}.nux-intro .activated .feat .dashicons{display:inline-block}.nux-intro .act{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%);left:8px;float:left}.nux-intro .act.j-col{padding:5px;text-align:left}.nux-intro .module-action{text-transform:uppercase;font-size:.85em;font-weight:600}.nux-intro .wpcom h3{background:#0087be}.nux-intro .wpcom h3 .dashicons{color:#00638b}.nux-intro .wpcom h3 .dashicons:hover{color:#005172}.nux-intro .wpcom .j-col{padding:10px}.nux-intro .wpcom .goto{text-align:center;padding:1em}.nux-intro .wpcom .goto:hover{background:#ececec}.nux-intro .wpcom .goto .j-col{padding:0 5px}.nux-intro .wpcom .goto a{width:100%;padding:.25em;height:auto}.nux-intro .wpcom .goto .button{height:auto;min-height:28px;line-height:18px;white-space:normal;max
2923 -width:200px;margin-bottom:0;padding-top:4px;padding-bottom:5px}.nux-intro .wpcom .goto .feat{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.nux-intro .nux-foot .j-col{padding:1em}.nux-foot{margin-top:2em;background:#ececec;border-radius:6px}.nux-foot .j-col{min-height:75px;padding:1em}@media (max-width: 650px){.nux-foot .j-col{width:100%}}.nux-foot .j-col+.j-col{border-right:1px #f9f9f9 solid}@media (max-width: 650px){.nux-foot .j-col+.j-col{border-right:none;border-top:1px #f9f9f9 solid}}.nux-foot .actions{margin-top:1em}.nux-foot a{text-decoration:underline}.nux-foot img{float:left;margin-right:1em;width:75px;border-radius:4px}.nux-foot p{font-size:.9em;text-align:right;font-weight:600;margin-top:0}.nux-foot p+p{font-weight:400;margin-bottom:0}.nux-foot ul{font-size:.9em;margin-bottom:0}.nux-foot ul li{margin-left:.875em;margin-bottom:0;line-height:175%;display:inline-block;vertical-align:middle}.form-
2924 toggle[type="checkbox"]{opacity:0;position:absolute}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:2px;width:40px;height:24px;background:#b9b9b9;vertical-align:middle;outline:0;cursor:pointer;transition:all .4s ease}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{right:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.form-toggle__switch:hover{background:#bdd597}.form-toggle__label{cursor:pointer}.plugin-action__label{padding-left:5px;top:-1px;position:relative;color:#8e9598}.activated .plugin-action__label{color:#81a844}.form-toggle:focus+.form-toggle__label .form-toggle__switch,.form-toggle:focus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #0087be}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background
2925 :#81a844}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{right:16px}.form-toggle:checked:hover+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle:disabled+.form-toggle__label .form-toggle__switch,.form-toggle:disabled:hover+.form-toggle__label .form-toggle__switch{background:#e9eff3}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__switch:after{right:8px}@media (max-width: 1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}.nux-intro .main-col{width:50%;m
2926 argin-bottom:2em}.nux-intro .main-col.wpcom{width:100%}.nux-intro .main-col+.main-col{padding-left:0}.nux-intro .wpcom{padding:0}.nux-intro .wpcom .j-row{width:50%;float:right;border-bottom:1px #f9f9f9 solid;border-left:1px #f9f9f9 solid}.nux-intro .wpcom .j-row:last-of-type{width:100%;float:none;clear:both;border:none;border-top:1px #f9f9f9 solid;position:relative;top:-1px}.nux-intro .wpcom .goto .feat a{float:right}.nux-foot .j-col{border:none}}@media (max-width: 900px){.nux-intro .main-col{width:100%;padding:0;margin-bottom:2em}.nux-intro .wpcom .j-row{width:100%;float:none}}@media (max-width: 782px){#jumpstart-cta .button-primary{margin:10px 0 5px 0}#jump-start-area .spinner{background-position:50% 35%}}@media (max-width: 600px){.nux-intro h1{font-size:1.75em}.nux-intro p{font-size:1em}}@media (max-width: 530px){.jp-content .landing{padding:0 .5em}#jump-start-area{padding:0 1em}.jumpstart-message p{padding-left:0}#jumpstart-cta .button-primary{margin:0 0 5px 0;padding-bottom:10p
2927 x}.footer .a8c-attribution a:after{top:6px}}.nav-horizontal:before,.features:before,.modules:before,.load-more:before,.nav-horizontal:after,.features:after,.modules:after,.load-more:after{content:"";display:table}.nav-horizontal:after,.features:after,.modules:after,.load-more:after{clear:both}
2928 +.three-feature{margin:1.42857em 0;padding:0 1.42857em;display:-moz-box;display:-ms-flexbox;display:flex;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media (max-width: 782px){.three-feature{-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width: 530px){.three-feature{padding:0}}.three-feature .j-col{border:1px #d9d9d9 solid;text-align:right;padding:0;background:#f9f9f9}@media (max-width: 782px){.three-feature .j-col{margin-bottom:1.42857em}}@media (max-width: 530px){.three-feature .j-col{border-right:none;border-left:none}}.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}@media (max-width: 782px){.three-feature .j-col:nth-of-type(2){border:1px #d9d9d9 solid}}@media (max-width: 530px){.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}}.three-feature h3{font-weight:600;font-size:1.14286em;min-width:15.35714em;white-space:nowrap;overflow:hidden;text-overflo
2929 w:ellipsis}@media (max-width: 782px){.three-feature h3{font-size:1em}}.three-feature .feature-img{background:#fff;border-bottom:1px #d9d9d9 solid;text-align:center}.three-feature .feature-img img{width:100%;max-width:500px;margin:0 auto}.three-feature p{line-height:150%;padding-bottom:0;font-size:1em}.three-feature h3,.three-feature p{margin:0;padding:1.42857em}@media (max-width: 782px){.three-feature h3,.three-feature p{font-size:0.92857em}}.three-feature h3{padding-bottom:0}.jp-content .hide{display:none}.jp-content .pointer{cursor:pointer}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font:400 1.75em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-conne
2930 ct .j-col{padding:0}.wpcom-connect .connect-desc{padding-left:25px}.wpcom-connect .connect-btn{text-align:center}.module-grid h2{color:#000;font:300 2.57143em/1em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif}.download-jetpack{margin-top:1em !important}.jump-start-area{background:#fff;border:1px #d9d9d9 solid;text-align:center;padding:0 1.42857em}.jump-start-area p{font-size:1.14286em}.jump-start-area h1{margin:1em auto 0}.jumpstart-message p{padding-left:25px}.jumpstart-desc{text-align:right}#jumpstart-cta{text-align:center;display:inline-block;float:none}.dismiss-jumpstart{color:#999;font-size:14px}#jumpstart-cta .button,#jumpstart-cta .button-primary{margin:1em;font-size:18px;height:45px !important;padding:8px 15px 1px}#jumpstart-cta .button-primary{display:block;margin:20px 20px 5px 20px}#jp-config-list{position:relative;padding-top:15px;padding-bottom:15px;margin-right:-15px;margin-left:-15px}#jp-config-list .j-col{padding:15px}#jp-config-list strong{display:inline-bloc
2931 k}#jp-config-list small{display:block;margin-top:5px;line-height:150%}#jp-config-list .close{position:absolute;top:10px;left:0;text-transform:uppercase;font-weight:bold;display:block;z-index:5}.jp-config-status{text-transform:uppercase;font-size:10px;font-weight:bold;line-height:100%;color:#fff;background:#9fbd72;border-radius:2px;padding:2px 4px;display:inline-block}.nux-intro h3{background:#81a844;color:#fff;font-weight:600;padding:.75em;margin:0}.nux-intro h4{margin:0 0 2px 0}.nux-intro p{text-align:center;font-size:1.24em;line-height:175%}.nux-intro a{transition:all .4s ease}.nux-intro .j-col{padding:0 0.5em}.nux-intro .j-col:first-of-type{padding-right:0}.nux-intro .j-col:last-of-type{padding-left:0}.nux-intro .nux-in{background:#ececec;-webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.nux-intro .nux-in h3{font-size:1.10em
2932 ;-webkit-border-top-right-radius:6px;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;border-top-left-radius:6px}.nux-intro .nux-in h3 .dashicons{float:left;color:#658435;font-size:1.25em;padding-right:0}.nux-intro .nux-in h3 .dashicons:hover{color:#57722e}.nux-intro .nux-in p{font-size:.9em;line-height:150%;margin:0;text-align:right;color:#686f72}.nux-intro .nux-in .j-row{border-bottom:1px #f9f9f9 solid;padding:5px 0;position:relative;min-height:70px}.nux-intro .nux-in .j-row:hover{background:#e0e0e0}.nux-intro .nux-in .unavailable{opacity:0.5}.nux-intro .nux-in .unavailable .act{display:none}.nux-intro .nux-in .paid{top:4px;margin-right:12px}.nux-intro .nux-in .dashicons{color:#81a844;font-size:1em;position:relative;top:3px;padding-right:6px}.nux-intro .nux-in .dashicons:hover{color:#57722e}.nux-intro .nux-in .dashicons-external{font-size:1.5em;top:2px;padding-right:3px}.nux-intro .nux-in .lmore{font-size
2933 :11px;color:#81a844}.nux-intro .nux-in .lmore:hover{color:#57722e}.nux-intro .feat.j-col{padding:10px 10px 10px 2px}.nux-intro .feat .dashicons{display:none}.nux-intro .activated .feat .dashicons{display:inline-block}.nux-intro .act{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%);left:8px;float:left}.nux-intro .act.j-col{padding:5px;text-align:left}.nux-intro .module-action{text-transform:uppercase;font-size:.85em;font-weight:600}.nux-intro .wpcom h3{background:#0087be}.nux-intro .wpcom h3 .dashicons{color:#00638b}.nux-intro .wpcom h3 .dashicons:hover{color:#005172}.nux-intro .wpcom .j-col{padding:10px}.nux-intro .wpcom .goto{text-align:center;padding:1em}.nux-intro .wpcom .goto:hover{background:#ececec}.nux-intro .wpcom .goto .j-col{padding:0 5px}.nux-intro .wpcom .goto a{width:100%;padding:.25em;height:auto}.nux-intro .wpcom .goto .button{height:auto;min-height:28px;line-height:18px;white-space:normal;max
2934 -width:200px;margin-bottom:0;padding-top:4px;padding-bottom:5px}.nux-intro .wpcom .goto .feat{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.nux-intro .wpcom .goto.activated .feat{left:50%;-ms-transform:translate(50%, -50%);-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%)}.nux-intro .nux-foot .j-col{padding:1em}.nux-foot{margin-top:2em;background:#ececec;border-radius:6px}.nux-foot .j-col{min-height:75px;padding:1em}@media (max-width: 650px){.nux-foot .j-col{width:100%}}.nux-foot .j-col+.j-col{border-right:1px #f9f9f9 solid}@media (max-width: 650px){.nux-foot .j-col+.j-col{border-right:none;border-top:1px #f9f9f9 solid}}.nux-foot .actions{margin-top:1em}.nux-foot a{text-decoration:underline}.nux-foot img{float:left;margin-right:1em;width:75px;border-radius:4px}.nux-foot p{font-size:.9em;text-align:right;font-weight:600;margin-top:0}.nux-foot p+p{font-weight:400;margin-bottom:0}.nux-fo
2935 ot ul{font-size:.9em;margin-bottom:0}.nux-foot ul li{margin-left:.875em;margin-bottom:0;line-height:175%;display:inline-block;vertical-align:middle}.form-toggle[type="checkbox"]{opacity:0;position:absolute}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:2px;width:40px;height:24px;background:#b9b9b9;vertical-align:middle;outline:0;cursor:pointer;transition:all .4s ease}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{right:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.form-toggle__switch:hover{background:#bdd597}.form-toggle__label{cursor:pointer}.plugin-action__label{padding-left:5px;top:-1px;position:relative;color:#8e9598}.activated .plugin-action__label{color:#81a844}.form-toggle:focus+.form-toggle__label .form-toggle__switch,.form-toggle:fo
2936 cus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #0087be}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{right:16px}.form-toggle:checked:hover+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle:disabled+.form-toggle__label .form-toggle__switch,.form-toggle:disabled:hover+.form-toggle__label .form-toggle__switch{background:#e9eff3}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__s
2937 witch:after{right:8px}@media (max-width: 1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}.nux-intro .main-col{width:50%;margin-bottom:2em}.nux-intro .main-col.wpcom{width:100%}.nux-intro .main-col+.main-col{padding-left:0}.nux-intro .wpcom{padding:0}.nux-intro .wpcom .j-row{width:50%;float:right;border-bottom:1px #f9f9f9 solid;border-left:1px #f9f9f9 solid}.nux-intro .wpcom .j-row:last-of-type{width:100%;float:none;clear:both;border:none;border-top:1px #f9f9f9 solid;position:relative;top:-1px}.nux-foot .j-col{border:none}}@media (max-width: 900px){.nux-intro .main-col{width:100%;padding:0;margin-bottom:2em}.nux-intro .wpcom .j-row{width:100%;float:none}}@media (max-width: 782px){#jumpstart-cta .button-primary{margin:10px 0 5px 0}#jump-start-area .spinner{background-position:50% 35%}}@media (max-width: 600px){.nux-intro h1{font-size:1.75em}.nux-intro p{font-size:1em}}@media (max-width: 530px){.jp-content .landing{padding:0 .5em}#jump-start-area{paddin
2938 g:0 1em}.jumpstart-message p{padding-left:0}#jumpstart-cta .button-primary{margin:0 0 5px 0;padding-bottom:10px}.footer .a8c-attribution a:after{top:6px}}.nav-horizontal:before,.features:before,.modules:before,.load-more:before,.nav-horizontal:after,.features:after,.modules:after,.load-more:after{content:"";display:table}.nav-horizontal:after,.features:after,.modules:after,.load-more:after{clear:both}
2939
2940 /*# sourceMappingURL=jetpack-admin.min.css.map */
2941 \ No newline at end of file
2942
2943 diff --git a/plugins/jetpack/css/jetpack-admin-rtl.min.css b/plugins/jetpack/css/jetpack-admin-rtl.min.css
2944 index a211cd7..150698d 100644
2945 --- a/plugins/jetpack/css/jetpack-admin-rtl.min.css
2946 +++ b/plugins/jetpack/css/jetpack-admin-rtl.min.css
2947 @@ -32,6 +32,6 @@
2948 @media (max-width: 782px){.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column){padding:11px 10px;display:block}.jetpack_page_jetpack_modules #doaction{padding:7px 14px}.jetpack_page_jetpack_modules .fixed-top thead .check-column{padding:28px 10px 0 10px}.jetpack_page_jetpack_modules .filter-search{margin-top:28px}.jetpack_page_jetpack_modules .filter-search .button{padding:7px 14px}.manage-right.show .subsubsub li{padding:5px}}@media (max-width: 650px){.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{float:none;padding-right:18px}}@media (max-width: 430px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{display:block}}.configure-module p{font-size:14px}.configure-module p.success,.configure-module p.error{color:#fff;padding:10px}.configure-module p.success{background-color:#81a844}.configure-module p.erro
2949 r{background-color:#d94f4f}.protect-status p{font-size:16px}.protect-status strong{display:inline-block;margin-top:10px;background:#fff;padding:10px;border:1px #ddd solid;font-size:16px;color:#000;max-width:100%}.protect-status.attn{color:#d94f4f}.protect-status.working{color:#81a844}#non-editable-whitelist{margin-top:15px}.protect-whitelist textarea{width:100%;min-height:150px}#editable-whitelist .whitelist-table{width:100%}.configure-module input[disabled]{opacity:.5}.configure-module input.button-primary{font-weight:bold}.whitelist-table{border-top:1px solid;border-left:1px solid;border-color:#ddd;background-color:#fff}.whitelist-table td,.whitelist-table th{padding:10px;margin:0;border-bottom:1px solid;border-right:1px solid;border-color:#ddd;font-size:14px}.whitelist-table th.heading{font-weight:bold;color:#5d6d74;text-align:right;background-color:#eee}.whitelist-table td.item-actions{border-right:none;text-align:left}.whitelist-table .toolbar{padding:0}.whitelist-table .add-bt
2950 n{text-align:center;width:10%;border-right:1px #ddd solid}.ip-address,.enter-ip{width:90%;text-align:right;vertical-align:middle}.delete-ip-address{text-align:center;border:0;background:transparent;color:#6f7476;box-shadow:none;font-size:20px;margin:0;padding:0;cursor:pointer;border-radius:2px}.delete-ip-address:hover{background:#eee}.toolbar div{float:right;padding:10px}@media only screen and (min-width: 1100px){#non-editable-whitelist{width:28%;float:left;margin-top:0}.protect-whitelist{width:65%;float:right}}@media only screen and (max-width: 1130px){.enter-ip input[type="text"]{max-width:175px}}@media only screen and (max-width: 1250px) and (min-width: 1065px), (max-width: 730px) and (min-width: 600px){.enter-ip{width:85%}.add-btn{width:15%}}@media only screen and (max-width: 782px){.add-btn{text-align:left}.add-btn .ip-add{margin-top:4px;margin-bottom:3px}}@media only screen and (max-width: 730px){.add-btn{text-align:center}}@media only screen and (max-width: 665px) and (min-wi
2951 dth: 600px){.enter-ip input[type="text"]{max-width:165px}}@media only screen and (max-width: 600px){.toolbar div{width:100%}.add-btn{border-top:1px #ddd solid}.enter-ip{text-align:center}.enter-ip strong{display:block;margin-bottom:5px}.enter-ip input[type="text"]{width:100%;max-width:100%}.add-btn input,.enter-ip .button{width:50%;margin:0 auto}.enter-ip .button{margin-top:10px}}@media only screen and (max-width: 400px){.protect-status strong{font-size:12px;overflow:auto}.add-btn input,.enter-ip .button{width:100%}}.my-jetpack-actions{margin:0 0 40px 0}.my-jetpack-actions .j-col{padding:0;text-align:center}.my-jetpack-actions #user-list{height:30px;margin-top:-1px;margin-right:-3px}#jetpack-disconnect-content{display:none;text-align:center}#jetpack-disconnect-content .cancel-disconnect{display:block;margin-top:10px}.connection-details{border:1px #ddd solid}.connection-details.local-user{margin-bottom:10px}.connection-details .user-01,.connection-details .wpuser-02,.connection-detai
2952 ls .action-btns{padding:10px}.connection-details .user-01 .button,.connection-details .user-01 select,.connection-details .wpuser-02 .button,.connection-details .wpuser-02 select,.connection-details .action-btns .button,.connection-details .action-btns select{margin-top:5px}.connection-details .wpuser-02{margin-top:10px}.connection-details h3{padding:10px;margin:0;background:#eee;border-bottom:1px #ddd solid;font-size:14px}.jp-user img{margin-left:10px;border-radius:50%}.jp-user div,.wp-user div,.wp-action div{display:inline-block;width:100%}.j-col.jp-user,.j-col.wp-user,.j-col.wp-action{padding:0}.my-jetpack-actions select{max-width:150px}.j-actions .button:nth-child(3){margin-left:5px}.j-row.disconnect{text-align:center}.j-row.disconnect .button{margin:0 auto}a.what-is-primary{color:#b4b9be;margin-right:4px}@media (max-width: 782px){.wp-action{border-top:1px #ddd solid}.wp-action h3{display:none}}@media screen and (max-width: 500px){.connection-details{font-size:11px}.connection-d
2953 etails h3{font-size:12px;padding:5px}.connection-details .user-01,.connection-details .wpuser-02{padding:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}.connection-details .action-btns{text-align:center}}@media (max-width: 530px){.connection-details .wpuser-02{margin-top:0;padding:12px}}@media screen and (max-width: 450px){.j-actions .button{width:100%;margin-bottom:5px;text-align:center}.j-actions .button.alignright{float:none}}@media screen and (max-width: 350px){.user-01,.wpuser-02{max-width:100px}}.manage__icon{width:155px;height:155px;margin:20px auto}.manage-page .manage__description{max-width:600px;text-align:center;font-size:22px;color:#999;margin:20px auto}.manage-page .manage__button{font-size:16px;padding:0 20px;height:40px;line-height:40px}.manage__title .genericon{font-size:38px;color:#81A944}.manage__link{font-size:16px;padding:0 20px;height:40px;line-height:40px;font-weight:normal}.manage__link .genericon{font-size:28px;vertical-align:mi
2954 ddle;margin-top:-6px}.connection-landing{text-align:center}.connection-landing h1{margin-bottom:0}.connection-landing h2{margin:0;padding:1.14286em 0;font-size:1.57143em;line-height:160%;font-weight:400}.connection-landing h2+p{margin-top:0}.connection-landing p{color:#686f72}.connect-card{text-align:center;margin:2.14286em auto 1.42857em;padding:0 4.28571em 1.42857em}.connect-card p{font-size:1.14286em}@media (max-width: 782px){.connect-card{padding:0 1.42857em 1.42857em}}
2955 .jp-card{background:#fff;border:1px #d9d9d9 solid;text-align:center;margin-bottom:2.85714em}.jp-card p{font-size:1.14286em}.jp-card .j-int{padding:0 4.28571em}.feature-container{background:#f4f4f4}.feature-container .j-int{background:#fff;padding:0}.feature-container .first-header{position:relative}@media (max-width: 900px){.feature-container .first-header{border-bottom:1px #d9d9d9 solid;background-image:none}.feature-container .first-header .j-header-img{display:none}}@media (min-width: 900px){.feature-container .first-header{background:url("../images/connection-landing/stars-right.svg") no-repeat,url("../images/connection-landing/stars-left.svg") no-repeat,#fff;background-position:10% 50%, 10% 50%;background-size:100px, 125px}}.feature-container .first-header .j-header-img{position:absolute;right:0;left:0;bottom:0}.feature-container .first-header .j-header-img img{margin:0 auto;max-width:100%;z-index:1001;position:absolute;right:0;left:0;bottom:0}@media (min-width: 900px){.feature
2956 -container .first-header .j-header-img img:first-of-type{bottom:-12px}}@media (min-width: 1147px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-10px}}.feature-container .first-header .j-header-img img+img{z-index:999}.feature-container .secondary-header{background:transparent;padding:0 10em}@media (max-width: 782px){.feature-container .secondary-header{padding:0 1.42857em}}.feature-container .j-feature-img{padding:0 1.42857em;margin-bottom:2.85714em}.feature-container .j-feature-img img{width:100%}.feature-container .j-feature-img:last-of-type{margin-bottom:1.42857em}@media (min-width: 900px){.j-traffic .first-header{padding-bottom:200px}}
2957 @media (min-width: 900px){.j-security .first-header{padding-bottom:225px}}
2958 -.three-feature{margin:1.42857em 0;padding:0 1.42857em;display:-moz-box;display:-ms-flexbox;display:flex;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media (max-width: 782px){.three-feature{-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width: 530px){.three-feature{padding:0}}.three-feature .j-col{border:1px #d9d9d9 solid;text-align:right;padding:0;background:#f9f9f9}@media (max-width: 782px){.three-feature .j-col{margin-bottom:1.42857em}}@media (max-width: 530px){.three-feature .j-col{border-right:none;border-left:none}}.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}@media (max-width: 782px){.three-feature .j-col:nth-of-type(2){border:1px #d9d9d9 solid}}@media (max-width: 530px){.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}}.three-feature h3{font-weight:600;font-size:1.14286em;min-width:15.35714em;white-space:nowrap;overflow:hidden;text-overflo
2959 w:ellipsis}@media (max-width: 782px){.three-feature h3{font-size:1em}}.three-feature .feature-img{background:#fff;border-bottom:1px #d9d9d9 solid;text-align:center}.three-feature .feature-img img{width:100%;max-width:500px;margin:0 auto}.three-feature p{line-height:150%;padding-bottom:0;font-size:1em}.three-feature h3,.three-feature p{margin:0;padding:1.42857em}@media (max-width: 782px){.three-feature h3,.three-feature p{font-size:0.92857em}}.three-feature h3{padding-bottom:0}.jp-content .hide{display:none}.jp-content .pointer{cursor:pointer}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font:400 1.75em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-conne
2960 ct .j-col{padding:0}.wpcom-connect .connect-desc{padding-left:25px}.wpcom-connect .connect-btn{text-align:center}.module-grid h2{color:#000;font:300 2.57143em/1em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif}.download-jetpack{margin-top:1em !important}.jump-start-area{background:#fff;border:1px #d9d9d9 solid;text-align:center;padding:0 1.42857em}.jump-start-area p{font-size:1.14286em}.jump-start-area h1{margin:1em auto 0}.jumpstart-message p{padding-left:25px}.jumpstart-desc{text-align:right}#jumpstart-cta{text-align:center;display:inline-block;float:none}.dismiss-jumpstart{color:#999;font-size:14px}#jumpstart-cta .button,#jumpstart-cta .button-primary{margin:1em;font-size:18px;height:45px !important;padding:8px 15px 1px}#jumpstart-cta .button-primary{display:block;margin:20px 20px 5px 20px}#jp-config-list{position:relative;padding-top:15px;padding-bottom:15px;margin-right:-15px;margin-left:-15px}#jp-config-list .j-col{padding:15px}#jp-config-list strong{display:inline-bloc
2961 k}#jp-config-list small{display:block;margin-top:5px;line-height:150%}#jp-config-list .close{position:absolute;top:10px;left:0;text-transform:uppercase;font-weight:bold;display:block;z-index:5}.jp-config-status{text-transform:uppercase;font-size:10px;font-weight:bold;line-height:100%;color:#fff;background:#9fbd72;border-radius:2px;padding:2px 4px;display:inline-block}.nux-intro h3{background:#81a844;color:#fff;font-weight:600;padding:.75em;margin:0}.nux-intro h4{margin:0 0 2px 0}.nux-intro p{text-align:center;font-size:1.24em;line-height:175%}.nux-intro a{transition:all .4s ease}.nux-intro .j-col{padding:0 0.5em}.nux-intro .j-col:first-of-type{padding-right:0}.nux-intro .j-col:last-of-type{padding-left:0}.nux-intro .nux-in{background:#ececec;-webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.nux-intro .nux-in h3{font-size:1.10em
2962 ;-webkit-border-top-right-radius:6px;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;border-top-left-radius:6px}.nux-intro .nux-in h3 .dashicons{float:left;color:#658435;font-size:1.25em;padding-right:0}.nux-intro .nux-in h3 .dashicons:hover{color:#57722e}.nux-intro .nux-in p{font-size:.9em;line-height:150%;margin:0;text-align:right;color:#686f72}.nux-intro .nux-in .j-row{border-bottom:1px #f9f9f9 solid;padding:5px 0;position:relative;min-height:70px}.nux-intro .nux-in .j-row:hover{background:#e0e0e0}.nux-intro .nux-in .unavailable{opacity:0.5}.nux-intro .nux-in .unavailable .act{display:none}.nux-intro .nux-in .paid{top:4px;margin-right:12px}.nux-intro .nux-in .dashicons{color:#81a844;font-size:1em;position:relative;top:3px;padding-right:6px}.nux-intro .nux-in .dashicons:hover{color:#57722e}.nux-intro .nux-in .dashicons-external{font-size:1.5em;top:2px;padding-right:3px}.nux-intro .nux-in .lmore{font-size
2963 :11px;color:#81a844}.nux-intro .nux-in .lmore:hover{color:#57722e}.nux-intro .feat.j-col{padding:10px 10px 10px 2px}.nux-intro .feat .dashicons{display:none}.nux-intro .activated .feat .dashicons{display:inline-block}.nux-intro .act{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%);left:8px;float:left}.nux-intro .act.j-col{padding:5px;text-align:left}.nux-intro .module-action{text-transform:uppercase;font-size:.85em;font-weight:600}.nux-intro .wpcom h3{background:#0087be}.nux-intro .wpcom h3 .dashicons{color:#00638b}.nux-intro .wpcom h3 .dashicons:hover{color:#005172}.nux-intro .wpcom .j-col{padding:10px}.nux-intro .wpcom .goto{text-align:center;padding:1em}.nux-intro .wpcom .goto:hover{background:#ececec}.nux-intro .wpcom .goto .j-col{padding:0 5px}.nux-intro .wpcom .goto a{width:100%;padding:.25em;height:auto}.nux-intro .wpcom .goto .button{height:auto;min-height:28px;line-height:18px;white-space:normal;max
2964 -width:200px;margin-bottom:0;padding-top:4px;padding-bottom:5px}.nux-intro .wpcom .goto .feat{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.nux-intro .nux-foot .j-col{padding:1em}.nux-foot{margin-top:2em;background:#ececec;border-radius:6px}.nux-foot .j-col{min-height:75px;padding:1em}@media (max-width: 650px){.nux-foot .j-col{width:100%}}.nux-foot .j-col+.j-col{border-right:1px #f9f9f9 solid}@media (max-width: 650px){.nux-foot .j-col+.j-col{border-right:none;border-top:1px #f9f9f9 solid}}.nux-foot .actions{margin-top:1em}.nux-foot a{text-decoration:underline}.nux-foot img{float:left;margin-right:1em;width:75px;border-radius:4px}.nux-foot p{font-size:.9em;text-align:right;font-weight:600;margin-top:0}.nux-foot p+p{font-weight:400;margin-bottom:0}.nux-foot ul{font-size:.9em;margin-bottom:0}.nux-foot ul li{margin-left:.875em;margin-bottom:0;line-height:175%;display:inline-block;vertical-align:middle}.form-
2965 toggle[type="checkbox"]{opacity:0;position:absolute}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:2px;width:40px;height:24px;background:#b9b9b9;vertical-align:middle;outline:0;cursor:pointer;transition:all .4s ease}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{right:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.form-toggle__switch:hover{background:#bdd597}.form-toggle__label{cursor:pointer}.plugin-action__label{padding-left:5px;top:-1px;position:relative;color:#8e9598}.activated .plugin-action__label{color:#81a844}.form-toggle:focus+.form-toggle__label .form-toggle__switch,.form-toggle:focus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #0087be}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background
2966 :#81a844}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{right:16px}.form-toggle:checked:hover+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle:disabled+.form-toggle__label .form-toggle__switch,.form-toggle:disabled:hover+.form-toggle__label .form-toggle__switch{background:#e9eff3}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__switch:after{right:8px}@media (max-width: 1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}.nux-intro .main-col{width:50%;m
2967 argin-bottom:2em}.nux-intro .main-col.wpcom{width:100%}.nux-intro .main-col+.main-col{padding-left:0}.nux-intro .wpcom{padding:0}.nux-intro .wpcom .j-row{width:50%;float:right;border-bottom:1px #f9f9f9 solid;border-left:1px #f9f9f9 solid}.nux-intro .wpcom .j-row:last-of-type{width:100%;float:none;clear:both;border:none;border-top:1px #f9f9f9 solid;position:relative;top:-1px}.nux-intro .wpcom .goto .feat a{float:right}.nux-foot .j-col{border:none}}@media (max-width: 900px){.nux-intro .main-col{width:100%;padding:0;margin-bottom:2em}.nux-intro .wpcom .j-row{width:100%;float:none}}@media (max-width: 782px){#jumpstart-cta .button-primary{margin:10px 0 5px 0}#jump-start-area .spinner{background-position:50% 35%}}@media (max-width: 600px){.nux-intro h1{font-size:1.75em}.nux-intro p{font-size:1em}}@media (max-width: 530px){.jp-content .landing{padding:0 .5em}#jump-start-area{padding:0 1em}.jumpstart-message p{padding-left:0}#jumpstart-cta .button-primary{margin:0 0 5px 0;padding-bottom:10p
2968 x}.footer .a8c-attribution a:after{top:6px}}.nav-horizontal:before,.features:before,.modules:before,.load-more:before,.nav-horizontal:after,.features:after,.modules:after,.load-more:after{content:"";display:table}.nav-horizontal:after,.features:after,.modules:after,.load-more:after{clear:both}
2969 +.three-feature{margin:1.42857em 0;padding:0 1.42857em;display:-moz-box;display:-ms-flexbox;display:flex;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media (max-width: 782px){.three-feature{-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width: 530px){.three-feature{padding:0}}.three-feature .j-col{border:1px #d9d9d9 solid;text-align:right;padding:0;background:#f9f9f9}@media (max-width: 782px){.three-feature .j-col{margin-bottom:1.42857em}}@media (max-width: 530px){.three-feature .j-col{border-right:none;border-left:none}}.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}@media (max-width: 782px){.three-feature .j-col:nth-of-type(2){border:1px #d9d9d9 solid}}@media (max-width: 530px){.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}}.three-feature h3{font-weight:600;font-size:1.14286em;min-width:15.35714em;white-space:nowrap;overflow:hidden;text-overflo
2970 w:ellipsis}@media (max-width: 782px){.three-feature h3{font-size:1em}}.three-feature .feature-img{background:#fff;border-bottom:1px #d9d9d9 solid;text-align:center}.three-feature .feature-img img{width:100%;max-width:500px;margin:0 auto}.three-feature p{line-height:150%;padding-bottom:0;font-size:1em}.three-feature h3,.three-feature p{margin:0;padding:1.42857em}@media (max-width: 782px){.three-feature h3,.three-feature p{font-size:0.92857em}}.three-feature h3{padding-bottom:0}.jp-content .hide{display:none}.jp-content .pointer{cursor:pointer}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font:400 1.75em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-conne
2971 ct .j-col{padding:0}.wpcom-connect .connect-desc{padding-left:25px}.wpcom-connect .connect-btn{text-align:center}.module-grid h2{color:#000;font:300 2.57143em/1em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif}.download-jetpack{margin-top:1em !important}.jump-start-area{background:#fff;border:1px #d9d9d9 solid;text-align:center;padding:0 1.42857em}.jump-start-area p{font-size:1.14286em}.jump-start-area h1{margin:1em auto 0}.jumpstart-message p{padding-left:25px}.jumpstart-desc{text-align:right}#jumpstart-cta{text-align:center;display:inline-block;float:none}.dismiss-jumpstart{color:#999;font-size:14px}#jumpstart-cta .button,#jumpstart-cta .button-primary{margin:1em;font-size:18px;height:45px !important;padding:8px 15px 1px}#jumpstart-cta .button-primary{display:block;margin:20px 20px 5px 20px}#jp-config-list{position:relative;padding-top:15px;padding-bottom:15px;margin-right:-15px;margin-left:-15px}#jp-config-list .j-col{padding:15px}#jp-config-list strong{display:inline-bloc
2972 k}#jp-config-list small{display:block;margin-top:5px;line-height:150%}#jp-config-list .close{position:absolute;top:10px;left:0;text-transform:uppercase;font-weight:bold;display:block;z-index:5}.jp-config-status{text-transform:uppercase;font-size:10px;font-weight:bold;line-height:100%;color:#fff;background:#9fbd72;border-radius:2px;padding:2px 4px;display:inline-block}.nux-intro h3{background:#81a844;color:#fff;font-weight:600;padding:.75em;margin:0}.nux-intro h4{margin:0 0 2px 0}.nux-intro p{text-align:center;font-size:1.24em;line-height:175%}.nux-intro a{transition:all .4s ease}.nux-intro .j-col{padding:0 0.5em}.nux-intro .j-col:first-of-type{padding-right:0}.nux-intro .j-col:last-of-type{padding-left:0}.nux-intro .nux-in{background:#ececec;-webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.nux-intro .nux-in h3{font-size:1.10em
2973 ;-webkit-border-top-right-radius:6px;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;border-top-left-radius:6px}.nux-intro .nux-in h3 .dashicons{float:left;color:#658435;font-size:1.25em;padding-right:0}.nux-intro .nux-in h3 .dashicons:hover{color:#57722e}.nux-intro .nux-in p{font-size:.9em;line-height:150%;margin:0;text-align:right;color:#686f72}.nux-intro .nux-in .j-row{border-bottom:1px #f9f9f9 solid;padding:5px 0;position:relative;min-height:70px}.nux-intro .nux-in .j-row:hover{background:#e0e0e0}.nux-intro .nux-in .unavailable{opacity:0.5}.nux-intro .nux-in .unavailable .act{display:none}.nux-intro .nux-in .paid{top:4px;margin-right:12px}.nux-intro .nux-in .dashicons{color:#81a844;font-size:1em;position:relative;top:3px;padding-right:6px}.nux-intro .nux-in .dashicons:hover{color:#57722e}.nux-intro .nux-in .dashicons-external{font-size:1.5em;top:2px;padding-right:3px}.nux-intro .nux-in .lmore{font-size
2974 :11px;color:#81a844}.nux-intro .nux-in .lmore:hover{color:#57722e}.nux-intro .feat.j-col{padding:10px 10px 10px 2px}.nux-intro .feat .dashicons{display:none}.nux-intro .activated .feat .dashicons{display:inline-block}.nux-intro .act{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%);left:8px;float:left}.nux-intro .act.j-col{padding:5px;text-align:left}.nux-intro .module-action{text-transform:uppercase;font-size:.85em;font-weight:600}.nux-intro .wpcom h3{background:#0087be}.nux-intro .wpcom h3 .dashicons{color:#00638b}.nux-intro .wpcom h3 .dashicons:hover{color:#005172}.nux-intro .wpcom .j-col{padding:10px}.nux-intro .wpcom .goto{text-align:center;padding:1em}.nux-intro .wpcom .goto:hover{background:#ececec}.nux-intro .wpcom .goto .j-col{padding:0 5px}.nux-intro .wpcom .goto a{width:100%;padding:.25em;height:auto}.nux-intro .wpcom .goto .button{height:auto;min-height:28px;line-height:18px;white-space:normal;max
2975 -width:200px;margin-bottom:0;padding-top:4px;padding-bottom:5px}.nux-intro .wpcom .goto .feat{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.nux-intro .wpcom .goto.activated .feat{left:50%;-ms-transform:translate(50%, -50%);-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%)}.nux-intro .nux-foot .j-col{padding:1em}.nux-foot{margin-top:2em;background:#ececec;border-radius:6px}.nux-foot .j-col{min-height:75px;padding:1em}@media (max-width: 650px){.nux-foot .j-col{width:100%}}.nux-foot .j-col+.j-col{border-right:1px #f9f9f9 solid}@media (max-width: 650px){.nux-foot .j-col+.j-col{border-right:none;border-top:1px #f9f9f9 solid}}.nux-foot .actions{margin-top:1em}.nux-foot a{text-decoration:underline}.nux-foot img{float:left;margin-right:1em;width:75px;border-radius:4px}.nux-foot p{font-size:.9em;text-align:right;font-weight:600;margin-top:0}.nux-foot p+p{font-weight:400;margin-bottom:0}.nux-fo
2976 ot ul{font-size:.9em;margin-bottom:0}.nux-foot ul li{margin-left:.875em;margin-bottom:0;line-height:175%;display:inline-block;vertical-align:middle}.form-toggle[type="checkbox"]{opacity:0;position:absolute}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:2px;width:40px;height:24px;background:#b9b9b9;vertical-align:middle;outline:0;cursor:pointer;transition:all .4s ease}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{right:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.form-toggle__switch:hover{background:#bdd597}.form-toggle__label{cursor:pointer}.plugin-action__label{padding-left:5px;top:-1px;position:relative;color:#8e9598}.activated .plugin-action__label{color:#81a844}.form-toggle:focus+.form-toggle__label .form-toggle__switch,.form-toggle:fo
2977 cus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #0087be}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{right:16px}.form-toggle:checked:hover+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle:disabled+.form-toggle__label .form-toggle__switch,.form-toggle:disabled:hover+.form-toggle__label .form-toggle__switch{background:#e9eff3}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__s
2978 witch:after{right:8px}@media (max-width: 1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}.nux-intro .main-col{width:50%;margin-bottom:2em}.nux-intro .main-col.wpcom{width:100%}.nux-intro .main-col+.main-col{padding-left:0}.nux-intro .wpcom{padding:0}.nux-intro .wpcom .j-row{width:50%;float:right;border-bottom:1px #f9f9f9 solid;border-left:1px #f9f9f9 solid}.nux-intro .wpcom .j-row:last-of-type{width:100%;float:none;clear:both;border:none;border-top:1px #f9f9f9 solid;position:relative;top:-1px}.nux-foot .j-col{border:none}}@media (max-width: 900px){.nux-intro .main-col{width:100%;padding:0;margin-bottom:2em}.nux-intro .wpcom .j-row{width:100%;float:none}}@media (max-width: 782px){#jumpstart-cta .button-primary{margin:10px 0 5px 0}#jump-start-area .spinner{background-position:50% 35%}}@media (max-width: 600px){.nux-intro h1{font-size:1.75em}.nux-intro p{font-size:1em}}@media (max-width: 530px){.jp-content .landing{padding:0 .5em}#jump-start-area{paddin
2979 g:0 1em}.jumpstart-message p{padding-left:0}#jumpstart-cta .button-primary{margin:0 0 5px 0;padding-bottom:10px}.footer .a8c-attribution a:after{top:6px}}.nav-horizontal:before,.features:before,.modules:before,.load-more:before,.nav-horizontal:after,.features:after,.modules:after,.load-more:after{content:"";display:table}.nav-horizontal:after,.features:after,.modules:after,.load-more:after{clear:both}
2980
2981 /*# sourceMappingURL=jetpack-admin.min.css.map */
2982 \ No newline at end of file
2983
2984 diff --git a/plugins/jetpack/css/jetpack-admin.css b/plugins/jetpack/css/jetpack-admin.css
2985 index 7ea8e63..6c3577c 100644
2986 --- a/plugins/jetpack/css/jetpack-admin.css
2987 +++ b/plugins/jetpack/css/jetpack-admin.css
2988 @@ -3474,6 +3474,12 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
2989 -webkit-transform: translate(0, -50%);
2990 transform: translate(0, -50%);
2991 }
2992 +.nux-intro .wpcom .goto.activated .feat {
2993 + right: 50%;
2994 + -ms-transform: translate(50%, -50%);
2995 + -webkit-transform: translate(50%, -50%);
2996 + transform: translate(50%, -50%);
2997 +}
2998 .nux-intro .nux-foot .j-col {
2999 padding: 1em;
3000 }
3001 @@ -3669,9 +3675,6 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
3002 position: relative;
3003 top: -1px;
3004 }
3005 - .nux-intro .wpcom .goto .feat a {
3006 - float: left;
3007 - }
3008
3009 .nux-foot .j-col {
3010 border: none;
3011
3012 diff --git a/plugins/jetpack/css/jetpack-admin.css.map b/plugins/jetpack/css/jetpack-admin.css.map
3013 index ca5822b..0bfa8cc 100644
3014 --- a/plugins/jetpack/css/jetpack-admin.css.map
3015 +++ b/plugins/jetpack/css/jetpack-admin.css.map
3016 @@ -1 +1 @@
3017 -{"version":3,"sources":["../scss/_utilities/_grid.scss","jetpack-admin.css","../scss/_utilities/mixins/_breakpoint.scss","../scss/atoms/typography/_typography.scss","../scss/atoms/_media.scss","../scss/atoms/_animations.scss","../scss/atoms/_buttons.scss","../scss/atoms/icons/_automatticons.scss","../scss/atoms/icons/_jetpack.scss","../scss/molecules/_nav-horizontal.scss","../scss/templates/_main.scss","../scss/templates/_settings.scss","../scss/pages/_protect.scss","../scss/pages/_connection-settings.scss","../scss/pages/_manage.scss","../scss/templates/_connection-landing.scss","../scss/atoms/colors/_colors.scss"],"names":[],"mappings":"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","file":"jetpack-admin.css"}
3048 \ No newline at end of file
3049 +{"version":3,"sources":["../scss/_utilities/_grid.scss","jetpack-admin.css","../scss/_utilities/mixins/_breakpoint.scss","../scss/atoms/typography/_typography.scss","../scss/atoms/_media.scss","../scss/atoms/_animations.scss","../scss/pages/_protect.scss"],"names":[],"mappings":"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","file":"jetpack-admin.css"}
3079 \ No newline at end of file
3080
3081 diff --git a/plugins/jetpack/css/jetpack-admin.min.css b/plugins/jetpack/css/jetpack-admin.min.css
3082 index a142313..f6c2874 100644
3083 --- a/plugins/jetpack/css/jetpack-admin.min.css
3084 +++ b/plugins/jetpack/css/jetpack-admin.min.css
3085 @@ -32,6 +32,6 @@
3086 @media (max-width: 782px){.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column){padding:11px 10px;display:block}.jetpack_page_jetpack_modules #doaction{padding:7px 14px}.jetpack_page_jetpack_modules .fixed-top thead .check-column{padding:28px 10px 0 10px}.jetpack_page_jetpack_modules .filter-search{margin-top:28px}.jetpack_page_jetpack_modules .filter-search .button{padding:7px 14px}.manage-right.show .subsubsub li{padding:5px}}@media (max-width: 650px){.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{float:none;padding-left:18px}}@media (max-width: 430px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{display:block}}.configure-module p{font-size:14px}.configure-module p.success,.configure-module p.error{color:#fff;padding:10px}.configure-module p.success{background-color:#81a844}.configure-module p.error
3087 {background-color:#d94f4f}.protect-status p{font-size:16px}.protect-status strong{display:inline-block;margin-top:10px;background:#fff;padding:10px;border:1px #ddd solid;font-size:16px;color:#000;max-width:100%}.protect-status.attn{color:#d94f4f}.protect-status.working{color:#81a844}#non-editable-whitelist{margin-top:15px}.protect-whitelist textarea{width:100%;min-height:150px}#editable-whitelist .whitelist-table{width:100%}.configure-module input[disabled]{opacity:.5}.configure-module input.button-primary{font-weight:bold}.whitelist-table{border-top:1px solid;border-right:1px solid;border-color:#ddd;background-color:#fff}.whitelist-table td,.whitelist-table th{padding:10px;margin:0;border-bottom:1px solid;border-left:1px solid;border-color:#ddd;font-size:14px}.whitelist-table th.heading{font-weight:bold;color:#5d6d74;text-align:left;background-color:#eee}.whitelist-table td.item-actions{border-left:none;text-align:right}.whitelist-table .toolbar{padding:0}.whitelist-table .add-btn{
3088 text-align:center;width:10%;border-left:1px #ddd solid}.ip-address,.enter-ip{width:90%;text-align:left;vertical-align:middle}.delete-ip-address{text-align:center;border:0;background:transparent;color:#6f7476;box-shadow:none;font-size:20px;margin:0;padding:0;cursor:pointer;border-radius:2px}.delete-ip-address:hover{background:#eee}.toolbar div{float:left;padding:10px}@media only screen and (min-width: 1100px){#non-editable-whitelist{width:28%;float:right;margin-top:0}.protect-whitelist{width:65%;float:left}}@media only screen and (max-width: 1130px){.enter-ip input[type="text"]{max-width:175px}}@media only screen and (max-width: 1250px) and (min-width: 1065px), (max-width: 730px) and (min-width: 600px){.enter-ip{width:85%}.add-btn{width:15%}}@media only screen and (max-width: 782px){.add-btn{text-align:right}.add-btn .ip-add{margin-top:4px;margin-bottom:3px}}@media only screen and (max-width: 730px){.add-btn{text-align:center}}@media only screen and (max-width: 665px) and (min-width:
3089 600px){.enter-ip input[type="text"]{max-width:165px}}@media only screen and (max-width: 600px){.toolbar div{width:100%}.add-btn{border-top:1px #ddd solid}.enter-ip{text-align:center}.enter-ip strong{display:block;margin-bottom:5px}.enter-ip input[type="text"]{width:100%;max-width:100%}.add-btn input,.enter-ip .button{width:50%;margin:0 auto}.enter-ip .button{margin-top:10px}}@media only screen and (max-width: 400px){.protect-status strong{font-size:12px;overflow:auto}.add-btn input,.enter-ip .button{width:100%}}.my-jetpack-actions{margin:0 0 40px 0}.my-jetpack-actions .j-col{padding:0;text-align:center}.my-jetpack-actions #user-list{height:30px;margin-top:-1px;margin-left:-3px}#jetpack-disconnect-content{display:none;text-align:center}#jetpack-disconnect-content .cancel-disconnect{display:block;margin-top:10px}.connection-details{border:1px #ddd solid}.connection-details.local-user{margin-bottom:10px}.connection-details .user-01,.connection-details .wpuser-02,.connection-details .a
3090 ction-btns{padding:10px}.connection-details .user-01 .button,.connection-details .user-01 select,.connection-details .wpuser-02 .button,.connection-details .wpuser-02 select,.connection-details .action-btns .button,.connection-details .action-btns select{margin-top:5px}.connection-details .wpuser-02{margin-top:10px}.connection-details h3{padding:10px;margin:0;background:#eee;border-bottom:1px #ddd solid;font-size:14px}.jp-user img{margin-right:10px;border-radius:50%}.jp-user div,.wp-user div,.wp-action div{display:inline-block;width:100%}.j-col.jp-user,.j-col.wp-user,.j-col.wp-action{padding:0}.my-jetpack-actions select{max-width:150px}.j-actions .button:nth-child(3){margin-right:5px}.j-row.disconnect{text-align:center}.j-row.disconnect .button{margin:0 auto}a.what-is-primary{color:#b4b9be;margin-left:4px}@media (max-width: 782px){.wp-action{border-top:1px #ddd solid}.wp-action h3{display:none}}@media screen and (max-width: 500px){.connection-details{font-size:11px}.connection-detai
3091 ls h3{font-size:12px;padding:5px}.connection-details .user-01,.connection-details .wpuser-02{padding:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}.connection-details .action-btns{text-align:center}}@media (max-width: 530px){.connection-details .wpuser-02{margin-top:0;padding:12px}}@media screen and (max-width: 450px){.j-actions .button{width:100%;margin-bottom:5px;text-align:center}.j-actions .button.alignright{float:none}}@media screen and (max-width: 350px){.user-01,.wpuser-02{max-width:100px}}.manage__icon{width:155px;height:155px;margin:20px auto}.manage-page .manage__description{max-width:600px;text-align:center;font-size:22px;color:#999;margin:20px auto}.manage-page .manage__button{font-size:16px;padding:0 20px;height:40px;line-height:40px}.manage__title .genericon{font-size:38px;color:#81A944}.manage__link{font-size:16px;padding:0 20px;height:40px;line-height:40px;font-weight:normal}.manage__link .genericon{font-size:28px;vertical-align:middle
3092 ;margin-top:-6px}.connection-landing{text-align:center}.connection-landing h1{margin-bottom:0}.connection-landing h2{margin:0;padding:1.14286em 0;font-size:1.57143em;line-height:160%;font-weight:400}.connection-landing h2+p{margin-top:0}.connection-landing p{color:#686f72}.connect-card{text-align:center;margin:2.14286em auto 1.42857em;padding:0 4.28571em 1.42857em}.connect-card p{font-size:1.14286em}@media (max-width: 782px){.connect-card{padding:0 1.42857em 1.42857em}}
3093 .jp-card{background:#fff;border:1px #d9d9d9 solid;text-align:center;margin-bottom:2.85714em}.jp-card p{font-size:1.14286em}.jp-card .j-int{padding:0 4.28571em}.feature-container{background:#f4f4f4}.feature-container .j-int{background:#fff;padding:0}.feature-container .first-header{position:relative}@media (max-width: 900px){.feature-container .first-header{border-bottom:1px #d9d9d9 solid;background-image:none}.feature-container .first-header .j-header-img{display:none}}@media (min-width: 900px){.feature-container .first-header{background:url("../images/connection-landing/stars-right.svg") no-repeat,url("../images/connection-landing/stars-left.svg") no-repeat,#fff;background-position:90% 50%, 10% 50%;background-size:100px, 125px}}.feature-container .first-header .j-header-img{position:absolute;left:0;right:0;bottom:0}.feature-container .first-header .j-header-img img{margin:0 auto;max-width:100%;z-index:1001;position:absolute;left:0;right:0;bottom:0}@media (min-width: 900px){.feature
3094 -container .first-header .j-header-img img:first-of-type{bottom:-12px}}@media (min-width: 1147px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-10px}}.feature-container .first-header .j-header-img img+img{z-index:999}.feature-container .secondary-header{background:transparent;padding:0 10em}@media (max-width: 782px){.feature-container .secondary-header{padding:0 1.42857em}}.feature-container .j-feature-img{padding:0 1.42857em;margin-bottom:2.85714em}.feature-container .j-feature-img img{width:100%}.feature-container .j-feature-img:last-of-type{margin-bottom:1.42857em}@media (min-width: 900px){.j-traffic .first-header{padding-bottom:200px}}
3095 @media (min-width: 900px){.j-security .first-header{padding-bottom:225px}}
3096 -.three-feature{margin:1.42857em 0;padding:0 1.42857em;display:-moz-box;display:-ms-flexbox;display:flex;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media (max-width: 782px){.three-feature{-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width: 530px){.three-feature{padding:0}}.three-feature .j-col{border:1px #d9d9d9 solid;text-align:left;padding:0;background:#f9f9f9}@media (max-width: 782px){.three-feature .j-col{margin-bottom:1.42857em}}@media (max-width: 530px){.three-feature .j-col{border-left:none;border-right:none}}.three-feature .j-col:nth-of-type(2){border-left:none;border-right:none}@media (max-width: 782px){.three-feature .j-col:nth-of-type(2){border:1px #d9d9d9 solid}}@media (max-width: 530px){.three-feature .j-col:nth-of-type(2){border-left:none;border-right:none}}.three-feature h3{font-weight:600;font-size:1.14286em;min-width:15.35714em;white-space:nowrap;overflow:hidden;text-overflow
3097 :ellipsis}@media (max-width: 782px){.three-feature h3{font-size:1em}}.three-feature .feature-img{background:#fff;border-bottom:1px #d9d9d9 solid;text-align:center}.three-feature .feature-img img{width:100%;max-width:500px;margin:0 auto}.three-feature p{line-height:150%;padding-bottom:0;font-size:1em}.three-feature h3,.three-feature p{margin:0;padding:1.42857em}@media (max-width: 782px){.three-feature h3,.three-feature p{font-size:0.92857em}}.three-feature h3{padding-bottom:0}.jp-content .hide{display:none}.jp-content .pointer{cursor:pointer}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font:400 1.75em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-connec
3098 t .j-col{padding:0}.wpcom-connect .connect-desc{padding-right:25px}.wpcom-connect .connect-btn{text-align:center}.module-grid h2{color:#000;font:300 2.57143em/1em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif}.download-jetpack{margin-top:1em !important}.jump-start-area{background:#fff;border:1px #d9d9d9 solid;text-align:center;padding:0 1.42857em}.jump-start-area p{font-size:1.14286em}.jump-start-area h1{margin:1em auto 0}.jumpstart-message p{padding-right:25px}.jumpstart-desc{text-align:left}#jumpstart-cta{text-align:center;display:inline-block;float:none}.dismiss-jumpstart{color:#999;font-size:14px}#jumpstart-cta .button,#jumpstart-cta .button-primary{margin:1em;font-size:18px;height:45px !important;padding:8px 15px 1px}#jumpstart-cta .button-primary{display:block;margin:20px 20px 5px 20px}#jp-config-list{position:relative;padding-top:15px;padding-bottom:15px;margin-left:-15px;margin-right:-15px}#jp-config-list .j-col{padding:15px}#jp-config-list strong{display:inline-bloc
3099 k}#jp-config-list small{display:block;margin-top:5px;line-height:150%}#jp-config-list .close{position:absolute;top:10px;right:0;text-transform:uppercase;font-weight:bold;display:block;z-index:5}.jp-config-status{text-transform:uppercase;font-size:10px;font-weight:bold;line-height:100%;color:#fff;background:#9fbd72;border-radius:2px;padding:2px 4px;display:inline-block}.nux-intro h3{background:#81a844;color:#fff;font-weight:600;padding:.75em;margin:0}.nux-intro h4{margin:0 0 2px 0}.nux-intro p{text-align:center;font-size:1.24em;line-height:175%}.nux-intro a{transition:all .4s ease}.nux-intro .j-col{padding:0 0.5em}.nux-intro .j-col:first-of-type{padding-left:0}.nux-intro .j-col:last-of-type{padding-right:0}.nux-intro .nux-in{background:#ececec;-webkit-border-bottom-right-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-bottomleft:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px}.nux-intro .nux-in h3{font-size:1.10e
3100 m;-webkit-border-top-left-radius:6px;-webkit-border-top-right-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border-top-left-radius:6px;border-top-right-radius:6px}.nux-intro .nux-in h3 .dashicons{float:right;color:#658435;font-size:1.25em;padding-left:0}.nux-intro .nux-in h3 .dashicons:hover{color:#57722e}.nux-intro .nux-in p{font-size:.9em;line-height:150%;margin:0;text-align:left;color:#686f72}.nux-intro .nux-in .j-row{border-bottom:1px #f9f9f9 solid;padding:5px 0;position:relative;min-height:70px}.nux-intro .nux-in .j-row:hover{background:#e0e0e0}.nux-intro .nux-in .unavailable{opacity:0.5}.nux-intro .nux-in .unavailable .act{display:none}.nux-intro .nux-in .paid{top:4px;margin-left:12px}.nux-intro .nux-in .dashicons{color:#81a844;font-size:1em;position:relative;top:3px;padding-left:6px}.nux-intro .nux-in .dashicons:hover{color:#57722e}.nux-intro .nux-in .dashicons-external{font-size:1.5em;top:2px;padding-left:3px}.nux-intro .nux-in .lmore{font-size:11
3101 px;color:#81a844}.nux-intro .nux-in .lmore:hover{color:#57722e}.nux-intro .feat.j-col{padding:10px 2px 10px 10px}.nux-intro .feat .dashicons{display:none}.nux-intro .activated .feat .dashicons{display:inline-block}.nux-intro .act{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%);right:8px;float:right}.nux-intro .act.j-col{padding:5px;text-align:right}.nux-intro .module-action{text-transform:uppercase;font-size:.85em;font-weight:600}.nux-intro .wpcom h3{background:#0087be}.nux-intro .wpcom h3 .dashicons{color:#00638b}.nux-intro .wpcom h3 .dashicons:hover{color:#005172}.nux-intro .wpcom .j-col{padding:10px}.nux-intro .wpcom .goto{text-align:center;padding:1em}.nux-intro .wpcom .goto:hover{background:#ececec}.nux-intro .wpcom .goto .j-col{padding:0 5px}.nux-intro .wpcom .goto a{width:100%;padding:.25em;height:auto}.nux-intro .wpcom .goto .button{height:auto;min-height:28px;line-height:18px;white-space:normal;max
3102 -width:200px;margin-bottom:0;padding-top:4px;padding-bottom:5px}.nux-intro .wpcom .goto .feat{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.nux-intro .nux-foot .j-col{padding:1em}.nux-foot{margin-top:2em;background:#ececec;border-radius:6px}.nux-foot .j-col{min-height:75px;padding:1em}@media (max-width: 650px){.nux-foot .j-col{width:100%}}.nux-foot .j-col+.j-col{border-left:1px #f9f9f9 solid}@media (max-width: 650px){.nux-foot .j-col+.j-col{border-left:none;border-top:1px #f9f9f9 solid}}.nux-foot .actions{margin-top:1em}.nux-foot a{text-decoration:underline}.nux-foot img{float:right;margin-left:1em;width:75px;border-radius:4px}.nux-foot p{font-size:.9em;text-align:left;font-weight:600;margin-top:0}.nux-foot p+p{font-weight:400;margin-bottom:0}.nux-foot ul{font-size:.9em;margin-bottom:0}.nux-foot ul li{margin-right:.875em;margin-bottom:0;line-height:175%;display:inline-block;vertical-align:middle}.form-to
3103 ggle[type="checkbox"]{opacity:0;position:absolute}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:2px;width:40px;height:24px;background:#b9b9b9;vertical-align:middle;outline:0;cursor:pointer;transition:all .4s ease}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{left:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.form-toggle__switch:hover{background:#bdd597}.form-toggle__label{cursor:pointer}.plugin-action__label{padding-right:5px;top:-1px;position:relative;color:#8e9598}.activated .plugin-action__label{color:#81a844}.form-toggle:focus+.form-toggle__label .form-toggle__switch,.form-toggle:focus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #0087be}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background:#
3104 81a844}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{left:16px}.form-toggle:checked:hover+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle:disabled+.form-toggle__label .form-toggle__switch,.form-toggle:disabled:hover+.form-toggle__label .form-toggle__switch{background:#e9eff3}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__switch:after{left:8px}@media (max-width: 1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}.nux-intro .main-col{width:50%;margi
3105 n-bottom:2em}.nux-intro .main-col.wpcom{width:100%}.nux-intro .main-col+.main-col{padding-right:0}.nux-intro .wpcom{padding:0}.nux-intro .wpcom .j-row{width:50%;float:left;border-bottom:1px #f9f9f9 solid;border-right:1px #f9f9f9 solid}.nux-intro .wpcom .j-row:last-of-type{width:100%;float:none;clear:both;border:none;border-top:1px #f9f9f9 solid;position:relative;top:-1px}.nux-intro .wpcom .goto .feat a{float:left}.nux-foot .j-col{border:none}}@media (max-width: 900px){.nux-intro .main-col{width:100%;padding:0;margin-bottom:2em}.nux-intro .wpcom .j-row{width:100%;float:none}}@media (max-width: 782px){#jumpstart-cta .button-primary{margin:10px 0 5px 0}#jump-start-area .spinner{background-position:50% 35%}}@media (max-width: 600px){.nux-intro h1{font-size:1.75em}.nux-intro p{font-size:1em}}@media (max-width: 530px){.jp-content .landing{padding:0 .5em}#jump-start-area{padding:0 1em}.jumpstart-message p{padding-right:0}#jumpstart-cta .button-primary{margin:0 0 5px 0;padding-bottom:10px}.
3106 footer .a8c-attribution a:after{top:6px}}.nav-horizontal:before,.features:before,.modules:before,.load-more:before,.nav-horizontal:after,.features:after,.modules:after,.load-more:after{content:"";display:table}.nav-horizontal:after,.features:after,.modules:after,.load-more:after{clear:both}
3107 +.three-feature{margin:1.42857em 0;padding:0 1.42857em;display:-moz-box;display:-ms-flexbox;display:flex;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media (max-width: 782px){.three-feature{-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width: 530px){.three-feature{padding:0}}.three-feature .j-col{border:1px #d9d9d9 solid;text-align:left;padding:0;background:#f9f9f9}@media (max-width: 782px){.three-feature .j-col{margin-bottom:1.42857em}}@media (max-width: 530px){.three-feature .j-col{border-left:none;border-right:none}}.three-feature .j-col:nth-of-type(2){border-left:none;border-right:none}@media (max-width: 782px){.three-feature .j-col:nth-of-type(2){border:1px #d9d9d9 solid}}@media (max-width: 530px){.three-feature .j-col:nth-of-type(2){border-left:none;border-right:none}}.three-feature h3{font-weight:600;font-size:1.14286em;min-width:15.35714em;white-space:nowrap;overflow:hidden;text-overflow
3108 :ellipsis}@media (max-width: 782px){.three-feature h3{font-size:1em}}.three-feature .feature-img{background:#fff;border-bottom:1px #d9d9d9 solid;text-align:center}.three-feature .feature-img img{width:100%;max-width:500px;margin:0 auto}.three-feature p{line-height:150%;padding-bottom:0;font-size:1em}.three-feature h3,.three-feature p{margin:0;padding:1.42857em}@media (max-width: 782px){.three-feature h3,.three-feature p{font-size:0.92857em}}.three-feature h3{padding-bottom:0}.jp-content .hide{display:none}.jp-content .pointer{cursor:pointer}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font:400 1.75em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-connec
3109 t .j-col{padding:0}.wpcom-connect .connect-desc{padding-right:25px}.wpcom-connect .connect-btn{text-align:center}.module-grid h2{color:#000;font:300 2.57143em/1em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif}.download-jetpack{margin-top:1em !important}.jump-start-area{background:#fff;border:1px #d9d9d9 solid;text-align:center;padding:0 1.42857em}.jump-start-area p{font-size:1.14286em}.jump-start-area h1{margin:1em auto 0}.jumpstart-message p{padding-right:25px}.jumpstart-desc{text-align:left}#jumpstart-cta{text-align:center;display:inline-block;float:none}.dismiss-jumpstart{color:#999;font-size:14px}#jumpstart-cta .button,#jumpstart-cta .button-primary{margin:1em;font-size:18px;height:45px !important;padding:8px 15px 1px}#jumpstart-cta .button-primary{display:block;margin:20px 20px 5px 20px}#jp-config-list{position:relative;padding-top:15px;padding-bottom:15px;margin-left:-15px;margin-right:-15px}#jp-config-list .j-col{padding:15px}#jp-config-list strong{display:inline-bloc
3110 k}#jp-config-list small{display:block;margin-top:5px;line-height:150%}#jp-config-list .close{position:absolute;top:10px;right:0;text-transform:uppercase;font-weight:bold;display:block;z-index:5}.jp-config-status{text-transform:uppercase;font-size:10px;font-weight:bold;line-height:100%;color:#fff;background:#9fbd72;border-radius:2px;padding:2px 4px;display:inline-block}.nux-intro h3{background:#81a844;color:#fff;font-weight:600;padding:.75em;margin:0}.nux-intro h4{margin:0 0 2px 0}.nux-intro p{text-align:center;font-size:1.24em;line-height:175%}.nux-intro a{transition:all .4s ease}.nux-intro .j-col{padding:0 0.5em}.nux-intro .j-col:first-of-type{padding-left:0}.nux-intro .j-col:last-of-type{padding-right:0}.nux-intro .nux-in{background:#ececec;-webkit-border-bottom-right-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-bottomleft:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px}.nux-intro .nux-in h3{font-size:1.10e
3111 m;-webkit-border-top-left-radius:6px;-webkit-border-top-right-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border-top-left-radius:6px;border-top-right-radius:6px}.nux-intro .nux-in h3 .dashicons{float:right;color:#658435;font-size:1.25em;padding-left:0}.nux-intro .nux-in h3 .dashicons:hover{color:#57722e}.nux-intro .nux-in p{font-size:.9em;line-height:150%;margin:0;text-align:left;color:#686f72}.nux-intro .nux-in .j-row{border-bottom:1px #f9f9f9 solid;padding:5px 0;position:relative;min-height:70px}.nux-intro .nux-in .j-row:hover{background:#e0e0e0}.nux-intro .nux-in .unavailable{opacity:0.5}.nux-intro .nux-in .unavailable .act{display:none}.nux-intro .nux-in .paid{top:4px;margin-left:12px}.nux-intro .nux-in .dashicons{color:#81a844;font-size:1em;position:relative;top:3px;padding-left:6px}.nux-intro .nux-in .dashicons:hover{color:#57722e}.nux-intro .nux-in .dashicons-external{font-size:1.5em;top:2px;padding-left:3px}.nux-intro .nux-in .lmore{font-size:11
3112 px;color:#81a844}.nux-intro .nux-in .lmore:hover{color:#57722e}.nux-intro .feat.j-col{padding:10px 2px 10px 10px}.nux-intro .feat .dashicons{display:none}.nux-intro .activated .feat .dashicons{display:inline-block}.nux-intro .act{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%);right:8px;float:right}.nux-intro .act.j-col{padding:5px;text-align:right}.nux-intro .module-action{text-transform:uppercase;font-size:.85em;font-weight:600}.nux-intro .wpcom h3{background:#0087be}.nux-intro .wpcom h3 .dashicons{color:#00638b}.nux-intro .wpcom h3 .dashicons:hover{color:#005172}.nux-intro .wpcom .j-col{padding:10px}.nux-intro .wpcom .goto{text-align:center;padding:1em}.nux-intro .wpcom .goto:hover{background:#ececec}.nux-intro .wpcom .goto .j-col{padding:0 5px}.nux-intro .wpcom .goto a{width:100%;padding:.25em;height:auto}.nux-intro .wpcom .goto .button{height:auto;min-height:28px;line-height:18px;white-space:normal;max
3113 -width:200px;margin-bottom:0;padding-top:4px;padding-bottom:5px}.nux-intro .wpcom .goto .feat{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.nux-intro .wpcom .goto.activated .feat{right:50%;-ms-transform:translate(50%, -50%);-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%)}.nux-intro .nux-foot .j-col{padding:1em}.nux-foot{margin-top:2em;background:#ececec;border-radius:6px}.nux-foot .j-col{min-height:75px;padding:1em}@media (max-width: 650px){.nux-foot .j-col{width:100%}}.nux-foot .j-col+.j-col{border-left:1px #f9f9f9 solid}@media (max-width: 650px){.nux-foot .j-col+.j-col{border-left:none;border-top:1px #f9f9f9 solid}}.nux-foot .actions{margin-top:1em}.nux-foot a{text-decoration:underline}.nux-foot img{float:right;margin-left:1em;width:75px;border-radius:4px}.nux-foot p{font-size:.9em;text-align:left;font-weight:600;margin-top:0}.nux-foot p+p{font-weight:400;margin-bottom:0}.nux-foot
3114 ul{font-size:.9em;margin-bottom:0}.nux-foot ul li{margin-right:.875em;margin-bottom:0;line-height:175%;display:inline-block;vertical-align:middle}.form-toggle[type="checkbox"]{opacity:0;position:absolute}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:2px;width:40px;height:24px;background:#b9b9b9;vertical-align:middle;outline:0;cursor:pointer;transition:all .4s ease}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{left:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.form-toggle__switch:hover{background:#bdd597}.form-toggle__label{cursor:pointer}.plugin-action__label{padding-right:5px;top:-1px;position:relative;color:#8e9598}.activated .plugin-action__label{color:#81a844}.form-toggle:focus+.form-toggle__label .form-toggle__switch,.form-toggle:foc
3115 us:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #0087be}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{left:16px}.form-toggle:checked:hover+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle:disabled+.form-toggle__label .form-toggle__switch,.form-toggle:disabled:hover+.form-toggle__label .form-toggle__switch{background:#e9eff3}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__swi
3116 tch:after{left:8px}@media (max-width: 1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}.nux-intro .main-col{width:50%;margin-bottom:2em}.nux-intro .main-col.wpcom{width:100%}.nux-intro .main-col+.main-col{padding-right:0}.nux-intro .wpcom{padding:0}.nux-intro .wpcom .j-row{width:50%;float:left;border-bottom:1px #f9f9f9 solid;border-right:1px #f9f9f9 solid}.nux-intro .wpcom .j-row:last-of-type{width:100%;float:none;clear:both;border:none;border-top:1px #f9f9f9 solid;position:relative;top:-1px}.nux-foot .j-col{border:none}}@media (max-width: 900px){.nux-intro .main-col{width:100%;padding:0;margin-bottom:2em}.nux-intro .wpcom .j-row{width:100%;float:none}}@media (max-width: 782px){#jumpstart-cta .button-primary{margin:10px 0 5px 0}#jump-start-area .spinner{background-position:50% 35%}}@media (max-width: 600px){.nux-intro h1{font-size:1.75em}.nux-intro p{font-size:1em}}@media (max-width: 530px){.jp-content .landing{padding:0 .5em}#jump-start-area{padding:
3117 0 1em}.jumpstart-message p{padding-right:0}#jumpstart-cta .button-primary{margin:0 0 5px 0;padding-bottom:10px}.footer .a8c-attribution a:after{top:6px}}.nav-horizontal:before,.features:before,.modules:before,.load-more:before,.nav-horizontal:after,.features:after,.modules:after,.load-more:after{content:"";display:table}.nav-horizontal:after,.features:after,.modules:after,.load-more:after{clear:both}
3118
3119 /*# sourceMappingURL=jetpack-admin.min.css.map */
3120 \ No newline at end of file
3121
3122 diff --git a/plugins/jetpack/css/jetpack-admin.min.css.map b/plugins/jetpack/css/jetpack-admin.min.css.map
3123 index 64fcfd8..8d83afd 100644
3124 --- a/plugins/jetpack/css/jetpack-admin.min.css.map
3125 +++ b/plugins/jetpack/css/jetpack-admin.min.css.map
3126 @@ -1 +1 @@
3127 -{"version":3,"sources":["../scss/_utilities/_grid.scss","../scss/_utilities/mixins/_breakpoint.scss","../scss/atoms/typography/_typography.scss","../scss/atoms/_media.scss","../scss/atoms/_animations.scss","../scss/atoms/_buttons.scss","../scss/atoms/icons/_automatticons.scss","../scss/atoms/icons/_jetpack.scss","../scss/molecules/_nav-horizontal.scss","../scss/templates/_main.scss","../scss/atoms/colors/_colors.scss","../scss/templates/_settings.scss","../scss/pages/_protect.scss","../scss/pages/_connection-settings.scss","../scss/pages/_manage.scss","../scss/templates/_connection-landing.scss","../scss/_utilities/_clearings.scss"],"names":[],"mappings":"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","file":"jetpack-admin.min.css"}
3152 \ No newline at end of file
3153 +{"version":3,"sources":["../scss/_utilities/_grid.scss","../scss/_utilities/mixins/_breakpoint.scss","../scss/atoms/typography/_typography.scss","../scss/atoms/_media.scss","../scss/atoms/_animations.scss","../scss/atoms/_buttons.scss","../scss/atoms/icons/_automatticons.scss","../scss/atoms/icons/_jetpack.scss","../scss/molecules/_nav-horizontal.scss","../scss/templates/_main.scss","../scss/atoms/colors/_colors.scss","../scss/templates/_settings.scss","../scss/pages/_protect.scss","../scss/pages/_connection-settings.scss","../scss/pages/_manage.scss","../scss/templates/_connection-landing.scss","../scss/_utilities/_clearings.scss"],"names":[],"mappings":"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","file":"jetpack-admin.min.css"}
3178 \ No newline at end of file
3179
3180 diff --git a/plugins/jetpack/css/jetpack-banners.css b/plugins/jetpack/css/jetpack-banners.css
3181 index 38628f1..1432f2e 100644
3182 --- a/plugins/jetpack/css/jetpack-banners.css
3183 +++ b/plugins/jetpack/css/jetpack-banners.css
3184 @@ -2,329 +2,27 @@
3185 * Do not modify this file directly. It is compiled Sass code.
3186 * @see: jetpack/_inc/jetpack.scss
3187 */
3188 -#message.jp-identity-crisis {
3189 - display: table;
3190 - padding: 0;
3191 - background: #d94f4f;
3192 - border: none;
3193 - color: #fff;
3194 -}
3195 -#message.jp-identity-crisis .service-mark {
3196 - display: table-cell;
3197 - vertical-align: middle;
3198 - padding: 0 20px;
3199 -}
3200 -#message.jp-identity-crisis .service-mark:before {
3201 - font-family: "jetpack" !important;
3202 - content: "\f102";
3203 - font-size: 40px;
3204 - line-height: 1;
3205 - color: #fff;
3206 -}
3207 -#message.jp-identity-crisis .jp-id-banner__content {
3208 - display: table;
3209 - padding: 10px 10px 10px 0;
3210 -}
3211 -#message.jp-identity-crisis .jp-id-banner__content .success-notice {
3212 - color: #fff;
3213 -}
3214 -#message.jp-identity-crisis .jp-id-banner__content .banner-content {
3215 - display: table-row;
3216 -}
3217 -#message.jp-identity-crisis .jp-id-banner__content .banner-content p {
3218 - margin: 0;
3219 - font-size: 13px;
3220 - color: #fff;
3221 - opacity: 1.0;
3222 -}
3223 -#message.jp-identity-crisis .jp-id-banner__content .banner-content p strong {
3224 - text-decoration: none;
3225 - font-weight: 600;
3226 - color: #fff;
3227 - opacity: 1.0;
3228 -}
3229 -#message.jp-identity-crisis .jp-id-banner__content .banner-content a {
3230 - display: inline-block;
3231 - color: rgba(255, 255, 255, 0.8);
3232 - border-bottom: 1px solid rgba(255, 255, 255, 0.5);
3233 - text-decoration: none;
3234 - -webkit-transform: all 1s ease;
3235 -}
3236 -#message.jp-identity-crisis .jp-id-banner__content .jp-btn-group {
3237 - display: table-row;
3238 -}
3239 -#message.jp-identity-crisis .jp-id-banner__content .jp-btn-group a {
3240 - display: inline-block;
3241 - margin: 10px 0 0 0;
3242 - padding: 0 0 1px 0;
3243 - color: rgba(255, 255, 255, 0.8);
3244 - border-bottom: 1px solid rgba(255, 255, 255, 0.5);
3245 - text-decoration: none;
3246 - -webkit-transform: all 1s ease;
3247 -}
3248 -#message.jp-identity-crisis .jp-id-banner__content .jp-btn-group a:hover {
3249 - color: white;
3250 - border-bottom: 1px solid rgba(255, 255, 255, 0.8);
3251 -}
3252 -#message.jp-identity-crisis .jp-id-banner__content .jp-btn-group .idc-separator {
3253 - margin: 0 6px;
3254 -}
3255 -
3256 -#message.jp-banner {
3257 +.updated.jp-banner {
3258 position: relative;
3259 - margin-bottom: 26px;
3260 - padding: 17px 44px 17px 0;
3261 - border: none;
3262 - background: #81a844;
3263 - color: #fff;
3264 - overflow: hidden;
3265 - -moz-box-sizing: border-box;
3266 - box-sizing: border-box;
3267 -}
3268 -#message.jp-banner:after {
3269 - content: '';
3270 - position: absolute;
3271 - bottom: 0;
3272 - right: -100px;
3273 - width: 100%;
3274 - height: 50px;
3275 - background: url("../images/the-footcloud.svg") right bottom no-repeat;
3276 - pointer-events: none;
3277 - z-index: 1;
3278 -}
3279 -@media (max-width: 830px) {
3280 - #message.jp-banner:after {
3281 - display: none;
3282 - }
3283 -}
3284 -#message.jp-banner a {
3285 - color: #fff;
3286 -}
3287 -#message.jp-banner h2 {
3288 - display: block;
3289 - margin: 0;
3290 - padding: 0;
3291 - color: #fff;
3292 - font-size: 20px;
3293 - line-height: 1.3;
3294 - font-weight: normal;
3295 -}
3296 -#message.jp-banner h2 + p {
3297 - margin-top: 10px;
3298 -}
3299 -
3300 -.jp-banner a {
3301 - padding: 0;
3302 -}
3303 -
3304 -#message .jp-banner__content {
3305 - color: #dfffcc;
3306 - padding: 0 0 0 20px;
3307 - -moz-box-sizing: border-box;
3308 - box-sizing: border-box;
3309 - width: 50%;
3310 -}
3311 -@media (max-width: 768px) {
3312 - #message .jp-banner__content {
3313 - width: 100%;
3314 - }
3315 - #message .jp-banner__content.is-connection {
3316 - width: 100%;
3317 - }
3318 -}
3319 -#message .jp-banner__content a {
3320 - text-decoration: underline;
3321 - /* Medium.com text underline hack - doesn't work well on small mobile devices... reverting to traditional underline
3322 - background-image: linear-gradient(to bottom, rgba(0,0,0,0) 75%, #fff 50%);
3323 - background-repeat: repeat-x;
3324 - background-size: 2px 2px;
3325 - background-position: 0 95%;
3326 - display: inline-block;
3327 -
3328 - @media not all, only screen and (min-resolution: 2dppx), only screen and (-webkit-min-device-pixel-ratio: 2) {
3329 - background-image: linear-gradient(to bottom, rgba(0,0,0,0) 75%, #fff 75%);
3330 - background-repeat: repeat-x;
3331 - }
3332 - */
3333 -}
3334 -#message .jp-banner__content p {
3335 - margin: 0;
3336 padding: 0;
3337 - line-height: 1.5;
3338 }
3339 -
3340 -#message .jp-banner__action-container {
3341 - position: absolute;
3342 - top: 0;
3343 - right: 0;
3344 - padding-left: 20px;
3345 - width: 50%;
3346 - height: 100%;
3347 - -moz-box-sizing: border-box;
3348 - box-sizing: border-box;
3349 -}
3350 -@media (max-width: 768px) {
3351 - #message .jp-banner__action-container {
3352 - position: static;
3353 - margin: 14px 0 9px;
3354 - width: 100%;
3355 - }
3356 -}
3357 -#message .jp-banner__action-container.is-full-width {
3358 - position: static;
3359 - margin: 14px 0 9px;
3360 - width: 100%;
3361 - height: auto;
3362 -}
3363 -@media (max-width: 768px) {
3364 - #message .jp-banner__action-container.is-connection {
3365 - width: 100%;
3366 - }
3367 -}
3368 -
3369 -#message.is-opt-in .jp-banner__content {
3370 - width: 60%;
3371 -}
3372 -#message.is-opt-in .jp-banner__action-container {
3373 - width: 40%;
3374 -}
3375 -@media (max-width: 768px) {
3376 - #message.is-opt-in .jp-banner__content, #message.is-opt-in .jp-banner__action-container {
3377 - width: 100%;
3378 - }
3379 -}
3380 -
3381 -#message .jp-banner__button {
3382 - display: inline-block;
3383 - position: absolute;
3384 - top: 50%;
3385 - right: 125px;
3386 - margin-top: -23px;
3387 - padding: 0.57143em 0.85714em 0.38095em 0.57143em;
3388 - border-radius: 6px;
3389 - -moz-box-sizing: border-box;
3390 - box-sizing: border-box;
3391 - background: #518d2a;
3392 - box-shadow: 0 4px 0 #3e6c20, 0 2px 3px rgba(0, 0, 0, 0.2);
3393 - font: 400 1.5em/1 'Open Sans', Helvetica, sans-serif;
3394 - transition: all .1s ease-in-out;
3395 -}
3396 -@media (max-width: 1175px) {
3397 - #message .jp-banner__button {
3398 - font-size: 1.25em;
3399 - right: 110px;
3400 - }
3401 -}
3402 -@media (max-width: 830px) {
3403 - #message .jp-banner__button {
3404 - right: 45px;
3405 - }
3406 -}
3407 -@media (max-width: 768px) {
3408 - #message .jp-banner__button {
3409 - position: static;
3410 - margin: 0;
3411 - }
3412 -}
3413 -@media (max-width: 420px) {
3414 - #message .jp-banner__button {
3415 - display: block;
3416 - width: 100%;
3417 - text-align: center;
3418 - font-size: 1.1em;
3419 - right: 0;
3420 - }
3421 -}
3422 -#message .jp-banner__button:hover, #message .jp-banner__button:focus {
3423 - box-shadow: 0 4px 0 #3e6c20, 0 2px 3px rgba(0, 0, 0, 0.2);
3424 -}
3425 -#message .jp-banner__button:active {
3426 - outline: none;
3427 - -webkit-transform: translateY(2px);
3428 - -ms-transform: translateY(2px);
3429 - transform: translateY(2px);
3430 - box-shadow: 0 0px 0 #3e6c20, 0 0 0 rgba(0, 0, 0, 0.2);
3431 +.updated .jp-banner__header {
3432 + font-size: 18px;
3433 + font-weight: 400;
3434 + margin-top: 0;
3435 }
3436 -#message .jp-banner__button:active:after {
3437 - top: -2px;
3438 -}
3439 -#message .jp-banner__button:before {
3440 - content: '';
3441 - display: inline-block;
3442 - position: relative;
3443 - vertical-align: middle;
3444 - background: url("../images/connect-plug.svg") center center no-repeat;
3445 - background-size: 100%;
3446 - top: -2px;
3447 - margin-right: 13px;
3448 - width: 22px;
3449 - height: 22px;
3450 -}
3451 -@media (max-width: 420px) {
3452 - #message .jp-banner__button:before {
3453 - display: none;
3454 - }
3455 -}
3456 -
3457 -#message .is-full-width .jp-banner__button {
3458 - position: static;
3459 - margin: 0;
3460 +.updated .jp-banner__button-container {
3461 + padding: 12px 0 0;
3462 }
3463
3464 -#message .is-opt-in .jp-banner__button:before {
3465 - content: "\f147";
3466 - width: 20px;
3467 - height: 20px;
3468 - background: none;
3469 - font: normal 20px/1 Dashicons;
3470 +.jp-banner .notice-dismiss {
3471 + text-decoration: none;
3472 }
3473
3474 -#message .jp-banner__dismiss {
3475 - position: absolute;
3476 - top: 0;
3477 - right: 0;
3478 - width: 44px;
3479 - height: 44px;
3480 - text-align: center;
3481 - z-index: 99;
3482 -}
3483 -#message .jp-banner__dismiss:before {
3484 - color: #a7c979;
3485 - content: '\f158';
3486 - font: normal 20px/44px 'dashicons';
3487 -}
3488 -#message .jp-banner__dismiss:hover {
3489 - opacity: 0.8;
3490 -}
3491 -#message .jp-banner__dismiss:active {
3492 - opacity: 1;
3493 - outline: none;
3494 +.jp-banner__description {
3495 + font-size: 14px;
3496 }
3497
3498 -#message.jp-banner.protect-error {
3499 - background: #fff;
3500 - border-left: 4px #d94f4f solid;
3501 -}
3502 -#message.jp-banner.protect-error .jp-banner__content {
3503 - color: #444;
3504 -}
3505 -#message.jp-banner.protect-error .jp-banner__content h2, #message.jp-banner.protect-error .jp-banner__content a {
3506 - color: #d94f4f;
3507 -}
3508 -#message.jp-banner.protect-error .jp-banner__content a:hover {
3509 - color: #d43a3a;
3510 -}
3511 -#message.jp-banner.protect-error .jp-banner__button {
3512 - background: #d94f4f;
3513 - box-shadow: none;
3514 - color: #fff;
3515 -}
3516 -#message.jp-banner.protect-error .jp-banner__button:hover, #message.jp-banner.protect-error .jp-banner__button:focus, #message.jp-banner.protect-error .jp-banner__button:active {
3517 - box-shadow: none;
3518 -}
3519 -#message.jp-banner.protect-error .jp-banner__button:hover {
3520 - background: #d43a3a;
3521 -}
3522 -#message.jp-banner.protect-error .jp-banner__dismiss:before {
3523 - color: #a0a5aa;
3524 +.jp-banner__description-container {
3525 + padding: 16px;
3526 }
3527
3528 diff --git a/plugins/jetpack/css/jetpack-banners.css.map b/plugins/jetpack/css/jetpack-banners.css.map
3529 index 0bf0ef1..e25055d 100644
3530 --- a/plugins/jetpack/css/jetpack-banners.css.map
3531 +++ b/plugins/jetpack/css/jetpack-banners.css.map
3532 @@ -1 +1 @@
3533 -{"version":3,"sources":["../scss/organisms/_banners.scss","jetpack-banners.css"],"names":[],"mappings":"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","file":"jetpack-banners.css"}
3536 \ No newline at end of file
3537 +{"version":3,"sources":["../scss/organisms/_banners.scss","jetpack-banners.css"],"names":[],"mappings":"AAAA;;;GCGE;AACF;EDCC,oBAAA;ECCC,YAAA;EACD;AACD;EDCE,iBAAA;ECCD,kBAAA;EACD,eAAA;EACC;AACD;EDAG,mBAAA;ECEF;;AAED;EACE,uBAAA;EACD;;AAED;EACC,iBAAA;EACA;;AAED;EACC,eAAA;EACA","file":"jetpack-banners.css"}
3538 \ No newline at end of file
3539
3540 diff --git a/plugins/jetpack/css/jetpack-banners.min.css b/plugins/jetpack/css/jetpack-banners.min.css
3541 index 94b927b..6d249ff 100644
3542 --- a/plugins/jetpack/css/jetpack-banners.min.css
3543 +++ b/plugins/jetpack/css/jetpack-banners.min.css
3544 @@ -1,6 +1,3 @@
3545 -#message.jp-identity-crisis{display:table;padding:0;background:#d94f4f;border:none;color:#fff}#message.jp-identity-crisis .service-mark{display:table-cell;vertical-align:middle;padding:0 20px}#message.jp-identity-crisis .service-mark:before{font-family:"jetpack" !important;content:"\f102";font-size:40px;line-height:1;color:#fff}#message.jp-identity-crisis .jp-id-banner__content{display:table;padding:10px 10px 10px 0}#message.jp-identity-crisis .jp-id-banner__content .success-notice{color:#fff}#message.jp-identity-crisis .jp-id-banner__content .banner-content{display:table-row}#message.jp-identity-crisis .jp-id-banner__content .banner-content p{margin:0;font-size:13px;color:#fff;opacity:1.0}#message.jp-identity-crisis .jp-id-banner__content .banner-content p strong{text-decoration:none;font-weight:600;color:#fff;opacity:1.0}#message.jp-identity-crisis .jp-id-banner__content .banner-content a{display:inline-block;color:rgba(255,255,255,0.8);border-bottom:1px solid rgba(255,255,255,0.5
3546 );text-decoration:none;-webkit-transform:all 1s ease}#message.jp-identity-crisis .jp-id-banner__content .jp-btn-group{display:table-row}#message.jp-identity-crisis .jp-id-banner__content .jp-btn-group a{display:inline-block;margin:10px 0 0 0;padding:0 0 1px 0;color:rgba(255,255,255,0.8);border-bottom:1px solid rgba(255,255,255,0.5);text-decoration:none;-webkit-transform:all 1s ease}#message.jp-identity-crisis .jp-id-banner__content .jp-btn-group a:hover{color:#fff;border-bottom:1px solid rgba(255,255,255,0.8)}#message.jp-identity-crisis .jp-id-banner__content .jp-btn-group .idc-separator{margin:0 6px}#message.jp-banner{position:relative;margin-bottom:26px;padding:17px 44px 17px 0;border:none;background:#81a844;color:#fff;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box}#message.jp-banner:after{content:'';position:absolute;bottom:0;right:-100px;width:100%;height:50px;background:url("../images/the-footcloud.svg") right bottom no-repeat;pointer-events:none;z-index:1}@me
3547 dia (max-width: 830px){#message.jp-banner:after{display:none}}#message.jp-banner a{color:#fff}#message.jp-banner h2{display:block;margin:0;padding:0;color:#fff;font-size:20px;line-height:1.3;font-weight:normal}#message.jp-banner h2+p{margin-top:10px}.jp-banner a{padding:0}#message .jp-banner__content{color:#dfffcc;padding:0 0 0 20px;-moz-box-sizing:border-box;box-sizing:border-box;width:50%}@media (max-width: 768px){#message .jp-banner__content{width:100%}#message .jp-banner__content.is-connection{width:100%}}#message .jp-banner__content a{text-decoration:underline}#message .jp-banner__content p{margin:0;padding:0;line-height:1.5}#message .jp-banner__action-container{position:absolute;top:0;right:0;padding-left:20px;width:50%;height:100%;-moz-box-sizing:border-box;box-sizing:border-box}@media (max-width: 768px){#message .jp-banner__action-container{position:static;margin:14px 0 9px;width:100%}}#message .jp-banner__action-container.is-full-width{position:static;margin:14px 0 9px;widt
3548 h:100%;height:auto}@media (max-width: 768px){#message .jp-banner__action-container.is-connection{width:100%}}
3549 -#message.is-opt-in .jp-banner__content{width:60%}#message.is-opt-in .jp-banner__action-container{width:40%}@media (max-width: 768px){#message.is-opt-in .jp-banner__content,#message.is-opt-in .jp-banner__action-container{width:100%}}
3550 -#message .jp-banner__button{display:inline-block;position:absolute;top:50%;right:125px;margin-top:-23px;padding:0.57143em 0.85714em 0.38095em 0.57143em;border-radius:6px;-moz-box-sizing:border-box;box-sizing:border-box;background:#518d2a;box-shadow:0 4px 0 #3e6c20,0 2px 3px rgba(0,0,0,0.2);font:400 1.5em/1 'Open Sans', Helvetica, sans-serif;transition:all .1s ease-in-out}@media (max-width: 1175px){#message .jp-banner__button{font-size:1.25em;right:110px}}@media (max-width: 830px){#message .jp-banner__button{right:45px}}@media (max-width: 768px){#message .jp-banner__button{position:static;margin:0}}@media (max-width: 420px){#message .jp-banner__button{display:block;width:100%;text-align:center;font-size:1.1em;right:0}}#message .jp-banner__button:hover,#message .jp-banner__button:focus{box-shadow:0 4px 0 #3e6c20,0 2px 3px rgba(0,0,0,0.2)}#message .jp-banner__button:active{outline:none;-webkit-transform:translateY(2px);-ms-transform:translateY(2px);transform:translateY(2px);box-shadow:
3551 0 0px 0 #3e6c20,0 0 0 rgba(0,0,0,0.2)}#message .jp-banner__button:active:after{top:-2px}#message .jp-banner__button:before{content:'';display:inline-block;position:relative;vertical-align:middle;background:url("../images/connect-plug.svg") center center no-repeat;background-size:100%;top:-2px;margin-right:13px;width:22px;height:22px}@media (max-width: 420px){#message .jp-banner__button:before{display:none}}
3552 -#message .is-full-width .jp-banner__button{position:static;margin:0}#message .is-opt-in .jp-banner__button:before{content:"\f147";width:20px;height:20px;background:none;font:normal 20px/1 Dashicons}#message .jp-banner__dismiss{position:absolute;top:0;right:0;width:44px;height:44px;text-align:center;z-index:99}#message .jp-banner__dismiss:before{color:#a7c979;content:'\f158';font:normal 20px/44px 'dashicons'}#message .jp-banner__dismiss:hover{opacity:0.8}#message .jp-banner__dismiss:active{opacity:1;outline:none}#message.jp-banner.protect-error{background:#fff;border-left:4px #d94f4f solid}#message.jp-banner.protect-error .jp-banner__content{color:#444}#message.jp-banner.protect-error .jp-banner__content h2,#message.jp-banner.protect-error .jp-banner__content a{color:#d94f4f}#message.jp-banner.protect-error .jp-banner__content a:hover{color:#d43a3a}#message.jp-banner.protect-error .jp-banner__button{background:#d94f4f;box-shadow:none;color:#fff}#message.jp-banner.protect-error .jp-ba
3553 nner__button:hover,#message.jp-banner.protect-error .jp-banner__button:focus,#message.jp-banner.protect-error .jp-banner__button:active{box-shadow:none}#message.jp-banner.protect-error .jp-banner__button:hover{background:#d43a3a}#message.jp-banner.protect-error .jp-banner__dismiss:before{color:#a0a5aa}
3554 +.updated.jp-banner{position:relative;padding:0}.updated .jp-banner__header{font-size:18px;font-weight:400;margin-top:0}.updated .jp-banner__button-container{padding:12px 0 0}.jp-banner .notice-dismiss{text-decoration:none}.jp-banner__description{font-size:14px}.jp-banner__description-container{padding:16px}
3555
3556 /*# sourceMappingURL=jetpack-banners.min.css.map */
3557 \ No newline at end of file
3558
3559 diff --git a/plugins/jetpack/css/jetpack-banners.min.css.map b/plugins/jetpack/css/jetpack-banners.min.css.map
3560 index 0beae66..18cd8b4 100644
3561 --- a/plugins/jetpack/css/jetpack-banners.min.css.map
3562 +++ b/plugins/jetpack/css/jetpack-banners.min.css.map
3563 @@ -1 +1 @@
3564 -{"version":3,"sources":["../scss/organisms/_banners.scss"],"names":[],"mappings":"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","file":"jetpack-banners.min.css"}
3567 \ No newline at end of file
3568 +{"version":3,"sources":["../scss/organisms/_banners.scss"],"names":[],"mappings":"AACC,mBACC,kBACA,CAAA,SAGD,CAAA,2BACC,eACA,CAAA,eACA,CAAA,YAGD,CAAA,qCACC,iBAIF,CAAA,0BACC,qBAGD,CAAA,uBACC,eAGD,CAAA,iCACC,aAAa,CAAA","file":"jetpack-banners.min.css"}
3569 \ No newline at end of file
3570
3571 diff --git a/plugins/jetpack/css/jetpack-rtl.css b/plugins/jetpack/css/jetpack-rtl.css
3572 index fc8f38e..43d89ff 100644
3573 --- a/plugins/jetpack/css/jetpack-rtl.css
3574 +++ b/plugins/jetpack/css/jetpack-rtl.css
3575 @@ -1,4 +1,4 @@
3576 /*!
3577 * Do not modify this file directly. It is concatenated from individual module CSS files.
3578 */
3579 -.jp-carousel-wrap *{line-height:inherit}.jp-carousel-overlay{background:#000}div.jp-carousel-fadeaway{position:fixed;bottom:0;z-index:2147483647;width:100%;height:15px}.jp-carousel-next-button span,.jp-carousel-previous-button span{background:url(../modules/carousel/images/arrows.png) center center/200px 126px no-repeat}.jp-carousel-msg{font-family:"Open Sans",sans-serif;font-style:normal;display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:center;margin:25px 2px 0 20px;background-color:#fff;border-right:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.jp-carousel-next-button span,.jp-carousel-previous-button span{background-image:url(../modules/carousel/images/arrows-2x.png)}}.jp-carousel-wrap{font-family:"Helvetica Neue",sans-serif!important}.jp
3580 -carousel-info{position:absolute;bottom:0;text-align:right!important;-webkit-font-smoothing:subpixel-antialiased!important}.jp-carousel-info ::selection{background:#68c9e8;color:#fff}.jp-carousel-info ::-moz-selection{background:#68c9e8;color:#fff}.jp-carousel-photo-info{position:relative;right:25%;width:50%}.jp-carousel-transitions .jp-carousel-photo-info{transition:400ms ease-out}.jp-carousel-info h2{background:none!important;border:none!important;color:#999;display:block!important;font:400 13px/1.25em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;margin:7px 0 0!important;padding:10px 0 0!important;overflow:hidden;text-align:right;text-shadow:none!important;text-transform:none!important;-webkit-font-smoothing:subpixel-antialiased}.jp-carousel-next-button,.jp-carousel-previous-button{text-indent:-9999px;overflow:hidden;cursor:pointer}.jp-carousel-next-button span,.jp-carousel-previous-button span{position:absolute;top:0;bottom:0;width:82px;zoom:1;filter:alpha(opa
3581 city=20);opacity:.2}.jp-carousel-transitions .jp-carousel-next-button span,.jp-carousel-transitions .jp-carousel-previous-button span{transition:500ms opacity ease-out}.jp-carousel-next-button:hover span,.jp-carousel-previous-button:hover span{filter:alpha(opacity=60);opacity:.6}.jp-carousel-next-button span{background-position:-110px center;left:0}.jp-carousel-previous-button span{background-position:-10px center;right:0}.jp-carousel-buttons{margin:-18px -20px 15px;padding:8px 10px;border-bottom:1px solid #222;background:#222;text-align:center}div.jp-carousel-buttons a{border:none!important;color:#999;font:400 11px/1.2em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;padding:5px 0 5px 2px;text-decoration:none!important;text-shadow:none!important;vertical-align:middle;-webkit-font-smoothing:subpixel-antialiased}div.jp-carousel-buttons a:hover{color:#68c9e8;border:none!important}.jp-carousel-transitions div.jp-carousel-buttons a:hover{transition:none!important}.jp-c
3582 arousel-next-button,.jp-carousel-previous-button,.jp-carousel-slide,.jp-carousel-slide img{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.jp-carousel-slide{position:fixed;width:0;bottom:0;background-color:#000;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}.jp-carousel-slide.selected{position:absolute!important;filter:alpha(opacity=100);opacity:1}.jp-carousel-slide{filter:alpha(opacity=25);opacity:.25}.jp-carousel-slide img{display:block;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;background:none!important;border:none!important;padding:0!important;box-shadow:0 2px 8px rgba(0,0,0,.1);zoom:1}.jp-carousel-transitions .jp-carousel-slide{transition:opacity 400ms linear}.jp-carousel-close-hint{color:#999;cursor:default;letter-spacing:0!important;padding:.35em 0 0;position:absolute;text-ali
3583 gn:right;width:90%}.jp-carousel-transitions .jp-carousel-close-hint{transition:color 200ms linear}.jp-carousel-close-hint span{cursor:pointer;background-color:#000;background-color:rgba(0,0,0,.8);display:block;height:22px;font:400 24px/1 "Helvetica Neue",sans-serif!important;line-height:22px;margin:0 .4em 0 0;text-align:center;vertical-align:middle;width:22px;border-radius:4px}.jp-carousel-transitions .jp-carousel-close-hint span{transition:border-color 200ms linear}.jp-carousel-close-hint:hover{cursor:default;color:#fff}.jp-carousel-close-hint:hover span{border-color:#fff}a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background:url(../modules/carousel/images/carousel-sprite.png?5) 0 0/16px 200px no-repeat}div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{margin:0 0 0 14px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#303030;
3584 padding-left:8px!important;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;margin:0 -12px 0 2px!important}div.jp-carousel-buttons a.jp-carousel-reblog,div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{background-position:6px -36px;padding-left:auto!important;padding-right:26px!important;color:#999}div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -156px;padding-right:19px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{cursor:default}div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:6px -56px;color:#68c9e8}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background-image:ur
3585 l(../modules/carousel/images/carousel-sprite-2x.png?5)}}div#carousel-reblog-box{background:#222;padding:3px 0 0;display:none;margin:5px auto 0;border-radius:2px;box-shadow:0 0 20px rgba(0,0,0,.9);height:74px;width:565px}#carousel-reblog-box textarea{background:#999;font:13px/1.4 "Helvetica Neue",sans-serif!important;color:#444;padding:3px 6px;width:370px;height:48px;float:right;margin:6px 9px 0;border:1px solid #666;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:2px}#carousel-reblog-box textarea:focus{background:#ccc;color:#222}#carousel-reblog-box label{color:#aaa;font-size:11px;padding-left:2px;padding-right:2px;display:inline;font-weight:400}#carousel-reblog-box select{width:110px;padding:0;font-size:12px;font-family:"Helvetica Neue",sans-serif!important;background:#333;color:#eee;border:1px solid #444;margin-top:5px}#carousel-reblog-box .submit,#wrapper #carousel-reblog-box p.response{float:right;width:154px;padding-top:0;padding-right:1px;overflow:hidden;height:34px
3586 ;margin:3px 2px 0 0!important}#wrapper #carousel-reblog-box p.response{font-size:13px;clear:none;padding-right:2px;height:34px;color:#aaa}#carousel-reblog-box input#carousel-reblog-submit,#jp-carousel-comment-form-button-submit{font:13px/24px "Helvetica Neue",sans-serif!important;margin-top:8px;padding:0 10px!important;border-radius:1em;height:24px;color:#333;cursor:pointer;font-weight:400;background:#aaa;border:1px solid #444}#carousel-reblog-box input#carousel-reblog-submit:hover,#jp-carousel-comment-form-button-submit:hover{background:#ccc}#carousel-reblog-box .canceltext{color:#aaa;font-size:11px;line-height:24px}#carousel-reblog-box .canceltext a{color:#fff}.jp-carousel-titleanddesc{border-top:1px solid #222;color:#999;font-size:15px;padding-top:24px;margin-bottom:20px;font-weight:400}.jp-carousel-titleanddesc-title{font:300 1.5em/1.1 "Helvetica Neue",sans-serif!important;text-transform:none!important;color:#fff;margin:0 0 15px;padding:0}.jp-carousel-titleanddesc-desc p{color:#
3587 999;line-height:1.4;margin-bottom:.75em}.jp-carousel-comments p a,.jp-carousel-info h2 a,.jp-carousel-titleanddesc p a{color:#fff!important;border:none!important;text-decoration:underline!important;font-weight:400!important;font-style:normal!important}.jp-carousel-titleanddesc p b,.jp-carousel-titleanddesc p strong{font-weight:700;color:#999}.jp-carousel-titleanddesc p em,.jp-carousel-titleanddesc p i{font-style:italic;color:#999}.jp-carousel-comments p a:hover,.jp-carousel-info h2 a:hover,.jp-carousel-titleanddesc p a:hover{color:#68c9e8!important}.jp-carousel-titleanddesc p:empty{display:none}.jp-carousel-left-column-wrapper h1:after,.jp-carousel-left-column-wrapper h1:before,.jp-carousel-photo-info h1:after,.jp-carousel-photo-info h1:before{content:none!important}.jp-carousel-image-meta{background:#111;border:1px solid #222;color:#fff;font:12px/1.4 "Helvetica Neue",sans-serif!important;overflow:hidden;padding:18px 20px;width:209px!important}.jp-carousel-image-meta h5,.jp-carousel
3588 -image-meta li{font-family:"Helvetica Neue",sans-serif!important;position:inherit!important;top:auto!important;left:auto!important;right:auto!important;bottom:auto!important;background:none!important;border:none!important;font-weight:400!important;line-height:1.3em!important}.jp-carousel-image-meta ul{margin:0!important;padding:0!important;list-style:none!important}.jp-carousel-image-meta li{width:48%!important;float:right!important;margin:0 0 15px 2%!important;color:#fff!important;font-size:13px!important}.jp-carousel-image-meta h5{color:#999!important;text-transform:uppercase!important;font-size:10px!important;margin:0 0 2px!important;letter-spacing:.1em!important}a.jp-carousel-image-download{padding-right:23px;display:inline-block;clear:both;color:#999;line-height:1;font-weight:400;font-size:13px;text-decoration:none;background-position:0 -82px}a.jp-carousel-image-download span.photo-size{font-size:11px;border-radius:1em;margin-right:2px;display:inline-block}a.jp-carousel-image-d
3589 ownload span.photo-size-times{padding:0 2px 0 1px}a.jp-carousel-image-download:hover{background-position:0 -122px;color:#68c9e8;border:none!important}.jp-carousel-image-map{position:relative;margin:-20px -20px 20px;border-bottom:1px solid rgba(255,255,255,.17);height:154px}.jp-carousel-image-map img.gmap-main{border-top-right-radius:6px;border-left:1px solid rgba(255,255,255,.17)}.jp-carousel-image-map div.gmap-topright{width:94px;height:154px;position:absolute;top:0;left:0}.jp-carousel-image-map div.imgclip{overflow:hidden;border-top-left-radius:6px}.jp-carousel-image-map div.gmap-topright img{margin-right:-40px}.jp-carousel-image-map img.gmap-bottomright{position:absolute;top:96px;left:0}.jp-carousel-comments{font:15px/1.7 "Helvetica Neue",sans-serif!important;font-weight:400;background:none}.jp-carousel-comments p a:active,.jp-carousel-comments p a:focus,.jp-carousel-comments p a:hover{color:#68c9e8!important}.jp-carousel-comment{background:none;color:#999;margin-bottom:20px;clea
3590 r:right;overflow:auto;width:100%}.jp-carousel-comment p{color:#999!important}.jp-carousel-comment .comment-author{font-size:13px;font-weight:400;padding:0;width:auto;display:inline;float:none;border:none;margin:0}.jp-carousel-comment .comment-author a{color:#fff}.jp-carousel-comment .comment-gravatar{float:right}.jp-carousel-comment .comment-content{border:none;margin-right:85px;padding:0}.jp-carousel-comment .avatar{margin:0 0 0 20px;border-radius:4px;border:none!important;padding:0!important;background-color:transparent!important}.jp-carousel-comment .comment-date{color:#999;margin-top:4px;font-size:11px;display:inline;float:left}#jp-carousel-comment-form{margin:0 0 10px!important;float:right;width:100%}textarea#jp-carousel-comment-form-comment-field{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:15px/1.4 "Helvetica Neue",sans-serif!important;width:100%;padding:10px 10px 5px;margin:0;float:none;height:147px;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border
3591 -radius:3px;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box}textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#555}textarea#jp-carousel-comment-form-comment-field:focus{background:#ccc;color:#222}textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#aaa}#jp-carousel-comment-form-spinner{color:#fff;margin:22px 10px 0 0;display:block;width:20px;height:20px;float:right}#jp-carousel-comment-form-submit-and-info-wrapper{display:none;overflow:hidden;width:100%}#jp-carousel-comment-form-commenting-as input{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:13px/1.4 "Helvetica Neue",sans-serif!important;padding:3px 6px;float:right;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:2px;width:285px}#jp-carousel-comment-form-commenting-as input:focus{background:#ccc;color:#222}#jp-carousel-comment-form-commenting-as p{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:22px 0
3592 0;float:right}#jp-carousel-comment-form-commenting-as fieldset{float:right;border:none;margin:20px 0 0;padding:0;clear:both}#jp-carousel-comment-form-commenting-as label{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:0 0 3px 20px;float:right;width:100px}#jp-carousel-comment-form-button-submit{margin-top:20px;float:left}#jp-carousel-comment-form-container,#js-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-post-results{display:none;overflow:auto;width:100%}#jp-carousel-comment-post-results span{display:block;text-align:center;margin-top:20px;width:100%;overflow:auto;padding:1em 0;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(0,0,0,.7);border-radius:2px;font:13px/1.4 "Helvetica Neue",sans-serif!important;border:1px solid rgba(255,255,255,.17);box-shadow:inset 0 0 5px 5px rgba(0,0,0,1)}.jp-carousel-comment-post-error{color:#DF4926}#jp-carousel-comments-closed{display:none;color:#999}#jp-carousel-commen
3593 ts-loading{font:400 15px/1.7 "Helvetica Neue",sans-serif!important;display:none;color:#999;text-align:right;margin-bottom:20px}.jp-carousel-light .jp-carousel-overlay{background:#fff}.jp-carousel-light .jp-carousel-next-button:hover span,.jp-carousel-light .jp-carousel-previous-button:hover span{opacity:.8}.jp-carousel-light .jp-carousel-close-hint:hover,.jp-carousel-light .jp-carousel-titleanddesc div{color:#000!important}.jp-carousel-light .jp-carousel-comment .comment-author a,.jp-carousel-light .jp-carousel-comments p a,.jp-carousel-light .jp-carousel-info h2 a,.jp-carousel-light .jp-carousel-titleanddesc p a{color:#1e8cbe!important}.jp-carousel-light .jp-carousel-comment .comment-author a:hover,.jp-carousel-light .jp-carousel-comments p a:hover,.jp-carousel-light .jp-carousel-info h2 a:hover,.jp-carousel-light .jp-carousel-titleanddesc p a:hover{color:#f1831e!important}.jp-carousel-light .jp-carousel-comment,.jp-carousel-light .jp-carousel-comment p,.jp-carousel-light .jp-carou
3594 sel-info h2,.jp-carousel-light .jp-carousel-titleanddesc,.jp-carousel-light .jp-carousel-titleanddesc p,.jp-carousel-light .jp-carousel-titleanddesc p b,.jp-carousel-light .jp-carousel-titleanddesc p em,.jp-carousel-light .jp-carousel-titleanddesc p i,.jp-carousel-light .jp-carousel-titleanddesc p strong,.jp-carousel-light div.jp-carousel-buttons a{color:#666}.jp-carousel-light .jp-carousel-buttons{border-bottom-color:#f0f0f0;background:#f5f5f5}.jp-carousel-light div.jp-carousel-buttons a:hover{text-decoration:none;color:#f1831e}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:4px -56px;padding-right:24px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#2ea2cc;color:#fff}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -176px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-rebl
3595 og.reblogged{background-position:5px -36px}.jp-carousel-light div#carousel-reblog-box{background:#eee;box-shadow:0 2px 10px rgba(0,0,0,.1);border:1px solid #ddd}.jp-carousel-light #carousel-reblog-box textarea{color:#666;border:1px solid #cfcfcf;background:#fff}.jp-carousel-light #carousel-reblog-box .canceltext{color:#888}.jp-carousel-light #carousel-reblog-box .canceltext a{color:#666}.jp-carousel-light #carousel-reblog-box select{background:#eee;color:#333;border:1px solid #aaa}#jp-carousel-comment-form-button-submit,.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit{color:#333;background:#fff;border:1px solid #aaa}.jp-carousel-light .jp-carousel-image-meta{background:#fafafa;border:1px solid #eee;border-top-color:#f5f5f5;border-right-color:#f5f5f5;color:#333}.jp-carousel-light .jp-carousel-image-meta li{color:#000!important}.jp-carousel-light .jp-carousel-close-hint{color:#ccc}.jp-carousel-light .jp-carousel-close-hint span{background-color:#fff;border-color:#c
3596 cc}.jp-carousel-light #jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#aaa}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus{color:#333}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#ddd}.jp-carousel-light a.jp-carousel-image-download{background-position:0 -122px}.jp-carousel-light a.jp-carousel-image-download:hover{background-position:0 -122px;color:#f1831e}.jp-carousel-light textarea#jp-carousel-comment-form-comment-field{background:#fbfbfb;color:#333;border:1px solid #dfdfdf;box-shadow:inset -2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input{background:#fbfbfb;border:1px solid #dfdfdf;color:#333;box-shadow:inset -2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus{background:#fbfbfb;color:#333}.jp-carousel-light #jp-carousel-comment-post-results span{background:#f7f7f7;border:1px solid #dfdfdf;box-shado
3597 w:inset 0 0 5px rgba(0,0,0,.05)}.jp-carousel-light .jp-carousel-slide{background-color:#fff}.jp-carousel-light .jp-carousel-titleanddesc{border-top:1px solid #eee}@media only screen and (max-width:760px){.jp-carousel-info{margin:0 10px!important}.jp-carousel-buttons,.jp-carousel-next-button,.jp-carousel-previous-button{display:none!important}.jp-carousel-image-meta{float:none!important;width:100%!important;-moz-box-sizing:border-box;box-sizing:border-box}.jp-carousel-close-hint{font-weight:800!important;font-size:26px!important;position:fixed!important;top:-10px}.jp-carousel-slide img{filter:alpha(opacity=100);opacity:1}.jp-carousel-wrap{background-color:#000}.jp-carousel-fadeaway{display:none}#jp-carousel-comment-form-container{display:none!important}.jp-carousel-titleanddesc{padding-top:0!important;border:none!important}.jp-carousel-titleanddesc-title{font-size:1em!important}.jp-carousel-left-column-wrapper{padding:0;width:100%!important}.jp-carousel-photo-info{right:0!important;w
3598 idth:100%!important}}.contact-form .clear-form{clear:both}.contact-form input[type=email],.contact-form input[type=text]{width:300px;max-width:98%;margin-bottom:13px}.contact-form select{margin-bottom:13px}.contact-form textarea{height:200px;width:80%;float:none;margin-bottom:13px}.contact-form input[type=checkbox],.contact-form input[type=radio]{float:none;margin-bottom:13px}.contact-form label{margin-bottom:3px;float:none;font-weight:700;display:block}.contact-form label.checkbox,.contact-form label.radio{margin-bottom:3px;float:none;font-weight:700;display:inline-block}.contact-form label span{color:#AAA;margin-right:4px;font-weight:400}.contact-form-submission{margin-bottom:4em;padding:1.5em 1em}.contact-form-submission p{margin:0 auto}.form-errors .form-error-message{color:red}.textwidget .contact-form input[type=email],.textwidget .contact-form input[type=text],.textwidget .contact-form textarea{width:250px;max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box}#jetpa
3599 ck-check-feedback-spam{margin:1px 0 0 8px}.jetpack-check-feedback-spam-spinner{display:inline-block;margin-top:7px}.infinite-loader{color:#000;display:block;height:28px;text-indent:-9999px}#infinite-handle span{background:#333;border-radius:1px;color:#eee;cursor:pointer;font-size:13px;padding:6px 16px}#infinite-handle span button,#infinite-handle span button:focus,#infinite-handle span button:hover{display:inline;position:static;padding:0;margin:0;border:none;line-height:inherit;background:0 0;color:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}#infinite-handle span button::-moz-focus-inner{margin:0;padding:0;border:none}@media (max-width:800px){#infinite-handle span:before{display:none}#infinite-handle span{display:block}}#infinite-footer{position:fixed;bottom:-50px;right:0;width:100%}#infinite-footer a{text-decoration:none}#infinite-footer .blog-credits a:hover,#infinite-footer .blog-info a:hover{color:#444;text-decoration:underline}#infinite-foo
3600 ter .container{background:rgba(255,255,255,.8);border-color:#ccc;border-color:rgba(0,0,0,.1);border-style:solid;border-width:1px 0 0;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 auto;overflow:hidden;padding:1px 20px;width:780px}#infinite-footer .blog-credits,#infinite-footer .blog-info{-moz-box-sizing:border-box;box-sizing:border-box;line-height:25px}#infinite-footer .blog-info{float:right;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:40%}#infinite-footer .blog-credits{font-weight:400;float:left;width:60%}#infinite-footer .blog-info a{color:#111;font-size:14px;font-weight:700}#infinite-footer .blog-credits{color:#888;font-size:12px;text-align:left}#infinite-footer .blog-credits a{color:#666}.infinity-end.neverending #infinite-footer{display:none}@media (max-width:640px){#infinite-footer .container{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#infinite-footer .blog-info{width:30%}#infinite-footer .blog-credits{width:70%}#
3601 infinite-footer .blog-credits,#infinite-footer .blog-info a{font-size:10px}}@media (max-width:640px){#infinite-footer{position:static}}#wpadminbar li#wp-admin-bar-admin-bar-likes-widget{width:61px;overflow:hidden}#wpadminbar iframe.admin-bar-likes-widget{width:61px;height:28px;min-height:28px;border-width:0;position:absolute;top:0}div.jetpack-likes-widget-wrapper{width:100%;min-height:50px;position:relative}div.jetpack-likes-widget-wrapper .sd-link-color{font-size:12px}div.jetpack-likes-widget-wrapper.slim-likes-widget{width:1px;min-height:0}#likes-other-gravatars{display:none;position:absolute;padding:10px 10px 12px;background-color:#2e4453;border-width:0;box-shadow:0 0 10px #2e4453;box-shadow:0 0 10px rgba(46,68,83,.6);min-width:130px;z-index:1000}#likes-other-gravatars *{line-height:normal}#likes-other-gravatars .likes-text{color:#fff;font-size:12px;padding-bottom:8px}#likes-other-gravatars li,#likes-other-gravatars ul{margin:0;padding:0;text-indent:0;list-style-type:none}#likes-
3602 other-gravatars li::before{content:""}#likes-other-gravatars ul.wpl-avatars{overflow:auto;display:block;max-height:190px}#likes-other-gravatars ul.wpl-avatars li{width:32px;height:32px;float:right;margin:0 0 5px 5px}#likes-other-gravatars ul.wpl-avatars li a{margin:0 0 0 2px;border-bottom:none!important;display:block}#likes-other-gravatars ul.wpl-avatars li a img{background:0 0;border:none;margin:0!important;padding:0!important;position:static}div.sd-box{border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.13)}.comment-likes-widget,.entry-content .post-likes-widget,.post-likes-widget{margin:0;border-width:0;display:block}.post-likes-widget-placeholder{margin:0;border-width:0;position:relative}.post-likes-widget-placeholder .button{display:none}.post-likes-widget-placeholder .loading{color:#999;font-size:12px}.slim-likes-widget .post-likes-widget{width:auto;float:none}div.sharedaddy.sd-like-enabled .sd-like h3{display:none}div.sharedaddy.sd-like-enabled .sd-like .post-likes-wid
3603 get{width:100%;float:none;position:absolute;top:0}.comment-likes-widget{width:100%}.pd-rating{display:block!important}.sd-gplus .sd-title{display:none}#jp-relatedposts{display:none;padding-top:1em;margin:1em 0;position:relative;clear:both}.jp-relatedposts:after{content:'';display:block;clear:both}#jp-relatedposts h3.jp-relatedposts-headline{margin:0 0 1em;display:inline-block;float:right;font-size:9pt;font-weight:700;font-family:inherit}#jp-relatedposts h3.jp-relatedposts-headline em:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}#jp-relatedposts h3.jp-relatedposts-headline em{font-style:normal;font-weight:700}#jp-relatedposts .jp-relatedposts-items{clear:right}#jp-relatedposts .jp-relatedposts-items-visual{margin-left:-20px}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{float:right;width:33%;margin:0 0 1em;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:bord
3604 er-box}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post{padding-left:20px;filter:alpha(opacity=80);-moz-opacity:.8;opacity:.8}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n+4),#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post:nth-child(3n+4){clear:both}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover{filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items p,#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-size:14px;line-height:20px;margin:0}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs{position:relative}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay{position:absolute;top:0;bottom:0;right:0;left:0;display:block}#jp-re
3605 latedposts .jp-relatedposts-items p{margin-bottom:0}#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{text-transform:none;margin:0;font-family:inherit;display:block;max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a{font-size:inherit;font-weight:400;text-decoration:none;filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span{display:block;max-width:90%;overflow:hidden;text-overflow:ellipsis}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post span{max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts
3606 -post .jp-relatedposts-post-context,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{opacity:.6}#jp-relatedposts .jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt,.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{display:none}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt{overflow:hidden}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs span{margin-bottom:1em}@media only screen and (max-width:640px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:50%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n){clear:right}#jp-relatedposts .jp-relatedposts-items-visual{margin-left:20px}}@media only screen and (max-width:320px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:100%;clear:both;margin:0 0 1em}}#jp-post-flair{padding-top:.5em}#
3607 content div.sharedaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{margin:0 0 1em;display:inline-block;line-height:1.2;font-size:9pt;font-weight:700}div.sharedaddy h3.sd-title:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;margin-bottom:1em}body.highlander-light h3.sd-title:before{border-top:1px solid rgba(0,0,0,.2)}body.highlander-dark h3.sd-title:before{border-top:1px solid rgba(255,255,255,.4)}.sd-content ul{padding:0!important;margin:0 0 .7em!important;list-style:none!important}.sd-content ul li{display:inline-block}.sd-block.sd-gplus{margin:0 0 .5em}.sd-gplus .sd-content{font-size:12px}#sharing_email .sharing_send,.sd-content ul li .option a.share-ustom,.sd-content ul li a.sd-button,.sd-content ul li.advanced a.share-more,.sd-content ul li.preview-item div.option.option-smart-off a,.sd-social-icon .sd-content ul li a.sd-button,.sd-social-icon-text .sd-content ul li a.sd-button,.sd-social-official .sd-content>ul>
3608 li .digg_button >a,.sd-social-official .sd-content>ul>li>a.sd-button,.sd-social-text .sd-content ul li a.sd-button{text-decoration:none!important;display:inline-block;margin:0 0 5px 5px;font-size:12px;font-family:"Open Sans",sans-serif;font-weight:400;border-radius:3px;color:#777!important;background:#f8f8f8;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,.08);text-shadow:none;line-height:23px;padding:1px 5px 0 8px}.sd-content ul li .option a.share-ustom span,.sd-content ul li a.sd-button>span,.sd-content ul li.advanced a.share-more span,.sd-content ul li.preview-item div.option.option-smart-off a span,.sd-social-icon-text .sd-content ul li a.sd-button>span,.sd-social-official .sd-content>ul>li .digg_button >a span,.sd-social-official .sd-content>ul>li>a.sd-button span,.sd-social-text .sd-content ul li a.sd-button span{line-height:23px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-but
3609 ton,.sd-social-official .sd-content>ul>li .digg_button>a,.sd-social-official .sd-content>ul>li>a.sd-button{line-height:17px;box-shadow:none;vertical-align:top}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,.sd-social-official .sd-content>ul>li .digg_button>a:before,.sd-social-official .sd-content>ul>li>a.sd-button:before{margin-bottom:-1px;top:0}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon .sd-content ul li a.sd-button:hover,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:hover,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li .digg_button>a:hover,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-official .sd-content>ul>li>a.sd-button:hover,.sd-social-text .sd-content ul li a.sd-button:active,.sd-social-text .sd-content
3610 ul li a.sd-button:hover{color:#555;background:#fafafa;border:1px solid #999}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.16)}.sd-content ul li a.sd-button:before{display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font:400 16px/1 Genericons;vertical-align:top;position:relative;top:3px;text-align:center}.sd-content ul li{margin:0!important;padding:0}.sd-content ul li.preview-item a.sd-button span,.sd-social-icon-text .sd-content ul li a span,.sd-social-official .sd-content ul li a.sd-button span{margin-right:3px}.sd-content ul li.preview-item.no-icon a.sd-button span{margin-right:0}.sd-content ul li.no-icon a:before,.sd-social-text .sd-content ul li a:before{display:none}body .s
3611 d-content ul li.share-custom.no-icon a span,body .sd-social-text .sd-content ul li.share-custom a span{background-image:none;background-position:-500px -500px!important;background-repeat:no-repeat!important;padding-right:0;height:0;line-height:inherit}.sd-social-icon .sd-content ul li a.share-more{position:relative;top:2px}.sd-social-icon .sd-content ul li a.share-more span{margin-right:3px}.sd-content ul li.share-print div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-print a:before,.sd-social-icon-text .sd-content li.share-print a:before,.sd-social-official .sd-content li.share-print a:before,.sd-social-text .sd-content ul li.share-print a:before{content:'\f469'}.sd-content ul li.share-email div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-email a:before,.sd-social-icon-text .sd-content li.share-email a:before,.sd-social-official .sd-content li.share-email a:before,.sd-social-text .sd-content ul li.share-email a:before{content
3612 :'\f410'}.sd-content ul li.share-linkedin div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-linkedin a:before,.sd-social-icon-text .sd-content li.share-linkedin a:before,.sd-social-text .sd-content ul li.share-linkedin a:before{content:'\f207'}.sd-content ul li.share-twitter div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-twitter a:before,.sd-social-icon-text .sd-content li.share-twitter a:before,.sd-social-text .sd-content ul li.share-twitter a:before{content:'\f202'}.sd-content ul li.share-reddit div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-reddit a:before,.sd-social-icon-text .sd-content li.share-reddit a:before,.sd-social-text .sd-content ul li.share-reddit a:before{content:'\f222'}.sd-content ul li.share-tumblr div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-tumblr a:before,.sd-social-icon-text .sd-content li.share-tumblr a:before,.sd-social-text .sd-content ul l
3613 i.share-tumblr a:before{content:'\f214'}.sd-content ul li.share-pocket div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pocket a:before,.sd-social-icon-text .sd-content li.share-pocket a:before,.sd-social-text .sd-content ul li.share-pocket a:before{content:'\f224'}.sd-content ul li.share-skype div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-skype a:before,.sd-social-icon-text .sd-content li.share-skype a:before,.sd-social-text .sd-content ul li.share-skype a:before{content:'\f220'}.sd-content ul li.share-pinterest div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pinterest a:before,.sd-social-icon-text .sd-content li.share-pinterest a:before,.sd-social-text .sd-content ul li.share-pinterest a:before{content:'\f209'}.sd-content ul li.share-google-plus-1 div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-google-plus-1 a:before,.sd-social-icon-text .sd-content li.share-google-
3614 plus-1 a:before,.sd-social-text .sd-content ul li.share-google-plus-1 a:before{content:'\f218'}.sd-content ul li.share-facebook div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-facebook a:before,.sd-social-icon-text .sd-content li.share-facebook a:before,.sd-social-text .sd-content ul li.share-facebook a:before{content:'\f204'}.sd-content ul li.share-press-this div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-press-this a:before,.sd-social-icon-text .sd-content li.share-press-this a:before,.sd-social-official .sd-content li.share-press-this a:before,.sd-social-text .sd-content ul li.share-press-this a:before{content:'\f205'}.sd-social-official .sd-content li.share-press-this a:before{color:#2ba1cb}.sd-content ul li.advanced a.share-more:before,.sd-social-icon .sd-content ul a.share-more:before,.sd-social-icon-text .sd-content a.share-more:before,.sd-social-official .sd-content a.share-more:before,.sd-social-text .sd-content ul
3615 a.share-more:before{content:'\f415'}.sd-social-official .sd-content a.share-more:before{color:#2ba1cb}.sd-social .sd-button .share-count{background:#2ea2cc;color:#fff;border-radius:10px;display:inline-block;text-align:center;font-size:10px;padding:1px 3px;line-height:1}.sd-social-official .sd-content ul,.sd-social-official .sd-content ul li{line-height:25px!important}.sd-social-official .sd-content>ul>li>a.sd-button span{line-height:1}.sd-social-official .sd-content ul:after{content:".";display:block;height:0;clear:both;visibility:hidden}.sd-social-official .sd-content li.share-press-this a{margin:0 0 5px}.sd-social-official .sd-content ul>li{display:block;float:right;margin:0 0 5px 10px!important;height:25px}.sd-social-official .fb-share-button>span{vertical-align:top!important}.sd-social-official .sd-content .pocket_button iframe{width:98px}.sd-social-official .sd-content .skypeShare{width:55px}.googleplus1_button .g-plus{vertical-align:top!important}.reddit_button iframe{margin-t
3616 op:1px}.googleplus1_button iframe,.linkedin_button>span,.pinterest_button,.pocket_button iframe,.twitter_button{margin:0!important}body .sd-social-official li a.share-more,body .sd-social-official li.share-custom a,body .sd-social-official li.share-digg a,body .sd-social-official li.share-email a,body .sd-social-official li.share-press-this a,body .sd-social-official li.share-print{position:relative;top:0}body .sd-social-icon .sd-content li.share-custom>a{padding:2px 3px 0;position:relative;top:4px}body .sd-content ul li.share-custom a.share-icon span,body .sd-social-icon .sd-content li.share-custom a span,body .sd-social-icon-text .sd-content li.share-custom a span,body .sd-social-official .sd-content li.share-custom a span,body .sd-social-text .sd-content li.share-custom a span{background-size:16px 16px;background-repeat:no-repeat;margin-right:0;padding:0 19px 0 0;display:inline-block;height:16px;line-height:16px}body .sd-social-icon .sd-content li.share-custom a span{width:0}body
3617 .sd-social-icon .sd-content li.share-custom a span{padding-right:16px!important}.sharing-hidden .inner{position:absolute;z-index:2;border:1px solid #ccc;padding:10px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);border-radius:2px;margin-top:5px;max-width:400px}.sharing-hidden .inner ul{margin:0!important}.sd-social-official .sd-content .sharing-hidden ul>li.share-end{clear:both;margin:0;height:0}.sharing-hidden .inner:after,.sharing-hidden .inner:before{position:absolute;z-index:1;top:-8px;right:20px;width:0;height:0;border-right:6px solid transparent;border-left:6px solid transparent;border-bottom:8px solid #ccc;content:"";display:block}.sharing-hidden .inner:after{z-index:2;top:-7px;border-right:6px solid transparent;border-left:6px solid transparent;border-bottom:8px solid #fff}.sharing-hidden ul{margin:0}.sd-social-icon .sd-content ul li[class*=share-] a,.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a
3618 {border-radius:50%;-webkit-border-radius:50%;border:0;box-shadow:none;padding:8px;position:relative;top:-2px;line-height:1;width:auto;height:auto;margin-bottom:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button>span,.sd-social-icon .sd-content ul li[class*=share-] div.option a span{line-height:1}.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a:hover{border:none;opacity:.6}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button:before{top:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button.share-custom{padding:8px 8px 6px;top:5px}.sd-social-icon .sd-content ul li a.sd-button.share-more{margin-right:10px}.sd-social-icon .sd-content ul li:first-child a.sd-button.share-more{margin-right:0}.sd-social-icon .sd-button span.share-count{position:absolute;bottom:0;left:0;border-radius:0;background:#555;font-size:9px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button{background:#e9e9e9;m
3619 argin-top:2px;text-indent:0}.sd-social-icon .sd-content ul li[class*=share-].share-tumblr a.sd-button{background:#2c4762;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-facebook a.sd-button{background:#3b5998;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-twitter a.sd-button{background:#00acee;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pinterest a.sd-button{background:#ca1f27;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-digg a.sd-button{color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-press-this a.sd-button{background:#1e8cbe;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-linkedin a.sd-button{background:#0077b5;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-google-plus-1 a.sd-button{background:#dd4b39;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pock
3620 et a.sd-button{background:#ee4056;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-skype a.sd-button{background:#00AFF0;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-reddit a.sd-button{background:#cee3f8;color:#555!important}.sharing-screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.sharing-screen-reader-text:active,.sharing-screen-reader-text:focus,.sharing-screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-weight:700;height:auto;right:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}#sharing_email{width:342px;position:absolute;z-index:1001;border:1px solid #ccc;padding:15px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);text-align:right}div.sharedaddy.sharedaddy-dark #sharing_email{bord
3621 er-color:#fff}#sharing_email .errors{color:#fff;background-color:#771a09;font-size:12px;padding:5px 8px;line-height:1;margin:10px 0 0}#sharing_email label{font-size:12px;color:#333;font-weight:700;display:block;padding:0 0 4px;text-align:right;text-shadow:none}#sharing_email form{margin:0}#sharing_email input[type=email],#sharing_email input[type=text]{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid #ccc;margin-bottom:1em;background:#fff;font-size:12px;color:#333;max-width:none;padding:1px 3px}#jetpack-source_f_name{display:none!important;position:absolute!important;right:-9000px}#sharing_email .sharing_cancel{padding:0 1em 0 0;font-size:12px;text-shadow:none}#sharing_email .recaptcha{width:312px;height:123px;margin:0 0 1em}.slideshow-window{background-color:#222;border:20px solid #222;border-radius:10px;height:0;margin-bottom:20px;overflow:hidden;padding-top:30px!important;padding-bottom:56.25%!important;position:relative;z
3622 -index:1}.slideshow-window.slideshow-white{background-color:#fff;border-color:#fff}.slideshow-window,.slideshow-window *{-moz-box-sizing:content-box;box-sizing:content-box}.slideshow-loading{height:100%;text-align:center;margin:auto}body div.slideshow-window * img{background-color:transparent!important;background-image:none!important;border-width:0!important;display:block;margin:0 auto;max-width:100%;max-height:100%;padding:0!important;position:relative;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);top:50%}.slideshow-loading img{vertical-align:middle}.slideshow-slide{display:none;height:100%!important;right:0;margin:auto;position:absolute;text-align:center;top:0;width:100%!important}.slideshow-slide img{vertical-align:middle}.slideshow-line-height-hack{overflow:hidden;width:0;font-size:0}.slideshow-slide-caption{font-size:13px;font-family:"Helvetica Neue",sans-serif;color:#f7f7f7;text-shadow:#222 -1px 1px 2px;line-height:25px;height:25p
3623 x;position:absolute;bottom:5px;right:0;z-index:100;width:100%;text-align:center}.slideshow-controls{z-index:1000;position:absolute;bottom:30px;margin:auto;text-align:center;width:100%;-ms-filter:"alpha(Opacity=50)";opacity:.5;direction:rtl;transition:300ms opacity ease-out}.slideshow-window:hover .slideshow-controls{-ms-filter:"alpha(Opacity=100)";opacity:1}body div div.slideshow-controls a,body div div.slideshow-controls a:hover{border:2px solid rgba(255,255,255,.1)!important;background-color:#000!important;background-color:rgba(0,0,0,.6)!important;background-image:url(../modules/shortcodes/img/slideshow-controls.png)!important;background-repeat:no-repeat;background-size:142px 16px!important;background-position:-34px 8px!important;color:#222!important;margin:0 5px!important;padding:0!important;display:inline-block!important;zoom:1;height:32px!important;width:32px!important;line-height:32px!important;text-align:center!important;-khtml-border-radius:10em!important;border-radius:10em!
3624 important;transition:300ms border-color ease-out}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body div div.slideshow-controls a,body div div.slideshow-controls a:hover{background-image:url(../modules/shortcodes/img/slideshow-controls-2x.png)!important}}body div div.slideshow-controls a:hover{border-color:rgba(255,255,255,1)!important}body div div.slideshow-controls a:first-child{background-position:-76px 8px!important}body div div.slideshow-controls a:last-child{background-position:-117px 8px!important}body div div.slideshow-controls a.running,body div div.slideshow-controls a:nth-child(2){background-position:-34px 8px!important}body div div.slideshow-controls a.paused{background-position:9px 8px!important}.slideshow-controls a img{border:50px dotted #f0f}body.presentation-wrapper-fullscreen-parent,html.presentation-wrapper-fullscreen-parent{overflow:hidden!important}.presentation-wrapper-fullscreen-parent #wpadminbar{display:none}.presentation-wrapper-fullscreen,.pre
3625 sentation-wrapper-fullscreen-parent{min-width:100%!important;min-height:100%!important;position:absolute!important;top:0!important;left:0!important;bottom:0!important;right:0!important;margin:0!important;padding:0!important;z-index:10000!important}.presentation-wrapper-fullscreen{background-color:gray;border:none!important}.presentation-wrapper-fullscreen .nav-arrow-left,.presentation-wrapper-fullscreen .nav-arrow-right{z-index:20001}.presentation-wrapper-fullscreen .nav-fullscreen-button{z-index:20002}.presentation-wrapper{margin:20px auto;border:1px solid #e5e5e5;overflow:hidden;line-height:normal}.presentation{position:relative;margin:0;overflow:hidden;outline:0}.presentation,.presentation .step{background-repeat:no-repeat;background-position:center;background-size:100% 100%}.presentation .step.fade:not(.active){opacity:0}.presentation .slide-content{padding:30px}.presentation .nav-arrow-left,.presentation .nav-arrow-right,.presentation .nav-fullscreen-button{position:absolute;wi
3626 dth:34px;background-repeat:no-repeat;z-index:2;opacity:0;transition:opacity .25s}.presentation .nav-arrow-left,.presentation .nav-arrow-right{height:100%;background-image:url(../modules/shortcodes/images/slide-nav.png);background-size:450% 61px}.presentation .nav-arrow-left{right:0;background-position:4px 50%}.presentation .nav-arrow-right{left:0;background-position:-120px 50%}.presentation .nav-fullscreen-button{width:32px;height:32px;margin:4px;bottom:0;left:0;z-index:3;background-image:url(../modules/shortcodes/images/expand.png);background-size:100% 100%}.presentation:hover .nav-arrow-left,.presentation:hover .nav-arrow-right{opacity:1}.presentation:hover .nav-fullscreen-button{opacity:.8}.presentation-wrapper-fullscreen .nav-fullscreen-button{background-image:url(../modules/shortcodes/images/collapse.png)}.presentation .autoplay-overlay{height:15%;width:80%;margin:30% 10%;position:relative;z-index:100;display:table;border-radius:50px;background-color:#e5e5e5;background-color:rg
3627 ba(0,0,0,.75);transition:opacity .5s}.presentation .autoplay-overlay .overlay-msg{position:relative;display:table-cell;text-align:center;vertical-align:middle;color:#fff}.presentation .will-fade{opacity:0}.presentation .do-fade{opacity:1;transition:opacity .5s}#subscribe-email input{width:95%}.comment-subscription-form .subscribe-label{display:inline!important}.jetpack-video-wrapper{margin-bottom:1.6em}.jetpack-video-wrapper>.wp-video,.jetpack-video-wrapper>embed,.jetpack-video-wrapper>iframe,.jetpack-video-wrapper>object{margin-bottom:0}.jetpack-social-navigation ul{display:block;margin:0 0 1.5em;padding:0}.jetpack-social-navigation li{display:inline-block;margin:0;line-height:1}.jetpack-social-navigation a{border:0;height:1em;text-decoration:none;width:1em}.jetpack-social-navigation a:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Genericons;font-size:1em;font-style:normal;font-weight:400;height:1em;line-height:1;speak:
3628 none;text-decoration:inherit;vertical-align:top;width:1em;content:"\f415"}.jetpack-social-navigation a[href*="codepen.io"]:before{content:"\f216"}.jetpack-social-navigation a[href*="digg.com"]:before{content:"\f221"}.jetpack-social-navigation a[href*="dribbble.com"]:before{content:"\f201"}.jetpack-social-navigation a[href*="dropbox.com"]:before{content:"\f225"}.jetpack-social-navigation a[href*="mailto:"]:before{content:"\f410"}.jetpack-social-navigation a[href*="facebook.com"]:before{content:"\f203"}.jetpack-social-navigation a[href*="flickr.com"]:before{content:"\f211"}.jetpack-social-navigation a[href*="foursquare.com"]:before{content:"\f226"}.jetpack-social-navigation a[href*="github.com"]:before{content:"\f200"}.jetpack-social-navigation a[href*="plus.google.com"]:before{content:"\f206"}.jetpack-social-navigation a[href*="instagram.com"]:before{content:"\f215"}.jetpack-social-navigation a[href*="linkedin.com"]:before{content:"\f208"}.jetpack-social-navigation a[href*="path.com"
3629 ]:before{content:"\f219"}.jetpack-social-navigation a[href*="pinterest.com"]:before{content:"\f210"}.jetpack-social-navigation a[href*="getpocket.com"]:before{content:"\f224"}.jetpack-social-navigation a[href*="polldaddy.com"]:before{content:"\f217"}.jetpack-social-navigation a[href*="reddit.com"]:before{content:"\f222"}.jetpack-social-navigation a[href$="/feed/"]:before{content:"\f413"}.jetpack-social-navigation a[href*="skype:"]:before{content:"\f220"}.jetpack-social-navigation a[href*="spotify.com"]:before{content:"\f515"}.jetpack-social-navigation a[href*="stumbleupon.com"]:before{content:"\f223"}.jetpack-social-navigation a[href*="tumblr.com"]:before{content:"\f214"}.jetpack-social-navigation a[href*="twitch.tv"]:before{content:"\f516"}.jetpack-social-navigation a[href*="twitter.com"]:before{content:"\f202"}.jetpack-social-navigation a[href*="vimeo.com"]:before{content:"\f212"}.jetpack-social-navigation a[href*="vine.co"]:before{content:"\f517"}.jetpack-social-navigation a[href
3630 *="wordpress.com"]:before,.jetpack-social-navigation a[href*="wordpress.org"]:before{content:"\f205"}.jetpack-social-navigation a[href*="youtube.com"]:before{content:"\f213"}.tiled-gallery{clear:both;margin:0 0 20px;overflow:hidden}.tiled-gallery img{margin:2px!important}.tiled-gallery .gallery-group{float:right;position:relative}.tiled-gallery .tiled-gallery-item{float:right;margin:0;position:relative;width:inherit}.tiled-gallery .gallery-row{overflow:hidden}.tiled-gallery .tiled-gallery-item a{background:0 0;border:none;color:inherit;margin:0;padding:0;text-decoration:none;width:auto}.tiled-gallery .tiled-gallery-item img,.tiled-gallery .tiled-gallery-item img:hover{background:0 0;border:none;box-shadow:none;max-width:100%;padding:0;vertical-align:middle}.tiled-gallery-caption{background:#eee;background:rgba(255,255,255,.8);color:#333;font-size:13px;font-weight:400;overflow:hidden;padding:10px 0;position:absolute;bottom:0;text-indent:10px;text-overflow:ellipsis;width:100%;white-sp
3631 ace:nowrap}.tiled-gallery .tiled-gallery-item-small .tiled-gallery-caption{font-size:11px}.widget-gallery .tiled-gallery-unresized{visibility:hidden;height:0;overflow:hidden}.tiled-gallery .tiled-gallery-item img.grayscale{position:absolute;right:0;top:0}.tiled-gallery .tiled-gallery-item img.grayscale:hover{opacity:0}.tiled-gallery.type-circle .tiled-gallery-item img{border-radius:50%!important}.tiled-gallery.type-circle .tiled-gallery-caption{display:none;opacity:0}.jetpack-display-remote-posts{margin:5px 0 20px}.jetpack-display-remote-posts h4{font-size:90%;margin:5px 0;padding:0}.jetpack-display-remote-posts h4 a{text-decoration:none}.jetpack-display-remote-posts p{margin:0!important;padding:0;line-height:1.4em!important;font-size:90%}.jetpack-display-remote-posts img{max-width:100%}.widget-grofile h4{margin:1em 0 .5em}.widget-grofile ul.grofile-urls{margin-right:0;overflow:hidden}.widget-grofile ul.grofile-accounts li{list-style:none;display:inline}.widget-grofile ul.grofile-ac
3632 counts li::before{content:""!important}.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite.png);background-repeat:no-repeat;width:16px;height:16px;float:right;margin-left:8px;margin-bottom:8px}.rtl .widget-grofile .grofile-accounts-logo{margin-right:8px;margin-left:0}.grofile-thumbnail{width:500px;max-width:100%}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite-2x.png);background-size:16px 784px}}div[class^=gr_custom_container]{border:1px solid gray;border-radius:10px;padding:10px 5px;background-color:#FFF;color:#000}div[class^=gr_custom_container] a{color:#000}h2[class^=gr_custom_header]{display:none}div[class^=gr_custom_each_container]{width:100%;clear:both;margin-bottom:10px;overf
3633 low:auto;padding-bottom:4px;border-bottom:1px solid #aaa}div[class^=gr_custom_book_container]{float:left;overflow:hidden;height:60px;margin-right:4px;width:39px}div[class^=gr_custom_author]{font-size:10px}div[class^=gr_custom_tags]{font-size:10px;color:gray}div[class^=gr_custom_rating]{display:none}.widget_wpcom_social_media_icons_widget ul{list-style-type:none;margin-right:0}.widget_wpcom_social_media_icons_widget li{border:0;display:inline;margin-left:.5em}.widget_wpcom_social_media_icons_widget li a{border:0;text-decoration:none}.widget_wpcom_social_media_icons_widget .genericon{font-family:Genericons}.widget_wpcom_social_media_icons_widget .screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.widget_wpcom_social_media_icons_widget .screen-reader-text:active,.widget_wpcom_social_media_icons_widget .screen-reader-text:focus,.widget_wpcom_social_media_icons_widget .screen-reader-text:hover{background-color:#f1f1f1;border-ra
3634 dius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-size:.875rem;font-weight:700;height:auto;right:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.widgets-grid-layout{width:100%}.widgets-grid-layout:after,.widgets-grid-layout:before{content:" ";display:table}.widgets-grid-layout:after{clear:both}.widget-grid-view-image{float:right;max-width:50%}.widget-grid-view-image a{display:block;margin:0 0 4px 2px}.widget-grid-view-image:image:nth-child(even){float:left}.widget-grid-view-image:nth-child(even) a{margin:0 2px 4px 0}.widgets-grid-layout .widget-grid-view-image img{max-width:100%;height:auto}.widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:0 0;clear:none;float:right;margin:0 0 -3px -5px;padding:0 0 6px 8px;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{back
3635 ground:0 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widgets-list-layout{padding:0;margin:0;list-style-type:none}.widgets-list-layout li:after,.widgets-list-layout li:before{content:"";display:table}.widgets-list-layout li:after{clear:both}.widgets-list-layout li{zoom:1;margin-bottom:1em;list-style-type:none!important}.widgets-list-layout .widgets-list-layout-blavatar{float:right;width:21.276596%;max-width:40px;height:auto}.widgets-list-layout-links{float:left;width:73.404255%}.widgets-list-layout span{opacity:.5}.widgets-list-layout span:hover{opacity:.8}
3636 \ No newline at end of file
3637 +.jp-carousel-wrap *{line-height:inherit}.jp-carousel-overlay{background:#000}div.jp-carousel-fadeaway{position:fixed;bottom:0;z-index:2147483647;width:100%;height:15px}.jp-carousel-next-button span,.jp-carousel-previous-button span{background:url(../modules/carousel/images/arrows.png) center center/200px 126px no-repeat}.jp-carousel-msg{font-family:"Open Sans",sans-serif;font-style:normal;display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:center;margin:25px 2px 0 20px;background-color:#fff;border-right:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.jp-carousel-next-button span,.jp-carousel-previous-button span{background-image:url(../modules/carousel/images/arrows-2x.png)}}.jp-carousel-wrap{font-family:"Helvetica Neue",sans-serif!important}.jp
3638 -carousel-info{position:absolute;bottom:0;text-align:right!important;-webkit-font-smoothing:subpixel-antialiased!important}.jp-carousel-info ::selection{background:#68c9e8;color:#fff}.jp-carousel-info ::-moz-selection{background:#68c9e8;color:#fff}.jp-carousel-photo-info{position:relative;right:25%;width:50%}.jp-carousel-transitions .jp-carousel-photo-info{transition:400ms ease-out}.jp-carousel-info h2{background:none!important;border:none!important;color:#999;display:block!important;font:400 13px/1.25em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;margin:7px 0 0!important;padding:10px 0 0!important;overflow:hidden;text-align:right;text-shadow:none!important;text-transform:none!important;-webkit-font-smoothing:subpixel-antialiased}.jp-carousel-next-button,.jp-carousel-previous-button{text-indent:-9999px;overflow:hidden;cursor:pointer}.jp-carousel-next-button span,.jp-carousel-previous-button span{position:absolute;top:0;bottom:0;width:82px;zoom:1;filter:alpha(opa
3639 city=20);opacity:.2}.jp-carousel-transitions .jp-carousel-next-button span,.jp-carousel-transitions .jp-carousel-previous-button span{transition:500ms opacity ease-out}.jp-carousel-next-button:hover span,.jp-carousel-previous-button:hover span{filter:alpha(opacity=60);opacity:.6}.jp-carousel-next-button span{background-position:-110px center;left:0}.jp-carousel-previous-button span{background-position:-10px center;right:0}.jp-carousel-buttons{margin:-18px -20px 15px;padding:8px 10px;border-bottom:1px solid #222;background:#222;text-align:center}div.jp-carousel-buttons a{border:none!important;color:#999;font:400 11px/1.2em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;padding:5px 0 5px 2px;text-decoration:none!important;text-shadow:none!important;vertical-align:middle;-webkit-font-smoothing:subpixel-antialiased}div.jp-carousel-buttons a:hover{color:#68c9e8;border:none!important}.jp-carousel-transitions div.jp-carousel-buttons a:hover{transition:none!important}.jp-c
3640 arousel-next-button,.jp-carousel-previous-button,.jp-carousel-slide,.jp-carousel-slide img{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.jp-carousel-slide{position:fixed;width:0;bottom:0;background-color:#000;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}.jp-carousel-slide.selected{position:absolute!important;filter:alpha(opacity=100);opacity:1}.jp-carousel-slide{filter:alpha(opacity=25);opacity:.25}.jp-carousel-slide img{display:block;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;background:none!important;border:none!important;padding:0!important;box-shadow:0 2px 8px rgba(0,0,0,.1);zoom:1}.jp-carousel-transitions .jp-carousel-slide{transition:opacity 400ms linear}.jp-carousel-close-hint{color:#999;cursor:default;letter-spacing:0!important;padding:.35em 0 0;position:absolute;text-ali
3641 gn:right;width:90%}.jp-carousel-transitions .jp-carousel-close-hint{transition:color 200ms linear}.jp-carousel-close-hint span{cursor:pointer;background-color:#000;background-color:rgba(0,0,0,.8);display:block;height:22px;font:400 24px/1 "Helvetica Neue",sans-serif!important;line-height:22px;margin:0 .4em 0 0;text-align:center;vertical-align:middle;width:22px;border-radius:4px}.jp-carousel-transitions .jp-carousel-close-hint span{transition:border-color 200ms linear}.jp-carousel-close-hint:hover{cursor:default;color:#fff}.jp-carousel-close-hint:hover span{border-color:#fff}a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background:url(../modules/carousel/images/carousel-sprite.png?5) 0 0/16px 200px no-repeat}div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{margin:0 0 0 14px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#303030;
3642 padding-left:8px!important;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;margin:0 -12px 0 2px!important}div.jp-carousel-buttons a.jp-carousel-reblog,div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{background-position:6px -36px;padding-left:auto!important;padding-right:26px!important;color:#999}div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -156px;padding-right:19px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{cursor:default}div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:6px -56px;color:#68c9e8}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background-image:ur
3643 l(../modules/carousel/images/carousel-sprite-2x.png?5)}}div#carousel-reblog-box{background:#222;padding:3px 0 0;display:none;margin:5px auto 0;border-radius:2px;box-shadow:0 0 20px rgba(0,0,0,.9);height:74px;width:565px}#carousel-reblog-box textarea{background:#999;font:13px/1.4 "Helvetica Neue",sans-serif!important;color:#444;padding:3px 6px;width:370px;height:48px;float:right;margin:6px 9px 0;border:1px solid #666;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:2px}#carousel-reblog-box textarea:focus{background:#ccc;color:#222}#carousel-reblog-box label{color:#aaa;font-size:11px;padding-left:2px;padding-right:2px;display:inline;font-weight:400}#carousel-reblog-box select{width:110px;padding:0;font-size:12px;font-family:"Helvetica Neue",sans-serif!important;background:#333;color:#eee;border:1px solid #444;margin-top:5px}#carousel-reblog-box .submit,#wrapper #carousel-reblog-box p.response{float:right;width:154px;padding-top:0;padding-right:1px;overflow:hidden;height:34px
3644 ;margin:3px 2px 0 0!important}#wrapper #carousel-reblog-box p.response{font-size:13px;clear:none;padding-right:2px;height:34px;color:#aaa}#carousel-reblog-box input#carousel-reblog-submit,#jp-carousel-comment-form-button-submit{font:13px/24px "Helvetica Neue",sans-serif!important;margin-top:8px;padding:0 10px!important;border-radius:1em;height:24px;color:#333;cursor:pointer;font-weight:400;background:#aaa;border:1px solid #444}#carousel-reblog-box input#carousel-reblog-submit:hover,#jp-carousel-comment-form-button-submit:hover{background:#ccc}#carousel-reblog-box .canceltext{color:#aaa;font-size:11px;line-height:24px}#carousel-reblog-box .canceltext a{color:#fff}.jp-carousel-titleanddesc{border-top:1px solid #222;color:#999;font-size:15px;padding-top:24px;margin-bottom:20px;font-weight:400}.jp-carousel-titleanddesc-title{font:300 1.5em/1.1 "Helvetica Neue",sans-serif!important;text-transform:none!important;color:#fff;margin:0 0 15px;padding:0}.jp-carousel-titleanddesc-desc p{color:#
3645 999;line-height:1.4;margin-bottom:.75em}.jp-carousel-comments p a,.jp-carousel-info h2 a,.jp-carousel-titleanddesc p a{color:#fff!important;border:none!important;text-decoration:underline!important;font-weight:400!important;font-style:normal!important}.jp-carousel-titleanddesc p b,.jp-carousel-titleanddesc p strong{font-weight:700;color:#999}.jp-carousel-titleanddesc p em,.jp-carousel-titleanddesc p i{font-style:italic;color:#999}.jp-carousel-comments p a:hover,.jp-carousel-info h2 a:hover,.jp-carousel-titleanddesc p a:hover{color:#68c9e8!important}.jp-carousel-titleanddesc p:empty{display:none}.jp-carousel-left-column-wrapper h1:after,.jp-carousel-left-column-wrapper h1:before,.jp-carousel-photo-info h1:after,.jp-carousel-photo-info h1:before{content:none!important}.jp-carousel-image-meta{background:#111;border:1px solid #222;color:#fff;font:12px/1.4 "Helvetica Neue",sans-serif!important;overflow:hidden;padding:18px 20px;width:209px!important}.jp-carousel-image-meta h5,.jp-carousel
3646 -image-meta li{font-family:"Helvetica Neue",sans-serif!important;position:inherit!important;top:auto!important;left:auto!important;right:auto!important;bottom:auto!important;background:none!important;border:none!important;font-weight:400!important;line-height:1.3em!important}.jp-carousel-image-meta ul{margin:0!important;padding:0!important;list-style:none!important}.jp-carousel-image-meta li{width:48%!important;float:right!important;margin:0 0 15px 2%!important;color:#fff!important;font-size:13px!important}.jp-carousel-image-meta h5{color:#999!important;text-transform:uppercase!important;font-size:10px!important;margin:0 0 2px!important;letter-spacing:.1em!important}a.jp-carousel-image-download{padding-right:23px;display:inline-block;clear:both;color:#999;line-height:1;font-weight:400;font-size:13px;text-decoration:none;background-position:0 -82px}a.jp-carousel-image-download span.photo-size{font-size:11px;border-radius:1em;margin-right:2px;display:inline-block}a.jp-carousel-image-d
3647 ownload span.photo-size-times{padding:0 2px 0 1px}a.jp-carousel-image-download:hover{background-position:0 -122px;color:#68c9e8;border:none!important}.jp-carousel-image-map{position:relative;margin:-20px -20px 20px;border-bottom:1px solid rgba(255,255,255,.17);height:154px}.jp-carousel-image-map img.gmap-main{border-top-right-radius:6px;border-left:1px solid rgba(255,255,255,.17)}.jp-carousel-image-map div.gmap-topright{width:94px;height:154px;position:absolute;top:0;left:0}.jp-carousel-image-map div.imgclip{overflow:hidden;border-top-left-radius:6px}.jp-carousel-image-map div.gmap-topright img{margin-right:-40px}.jp-carousel-image-map img.gmap-bottomright{position:absolute;top:96px;left:0}.jp-carousel-comments{font:15px/1.7 "Helvetica Neue",sans-serif!important;font-weight:400;background:none}.jp-carousel-comments p a:active,.jp-carousel-comments p a:focus,.jp-carousel-comments p a:hover{color:#68c9e8!important}.jp-carousel-comment{background:none;color:#999;margin-bottom:20px;clea
3648 r:right;overflow:auto;width:100%}.jp-carousel-comment p{color:#999!important}.jp-carousel-comment .comment-author{font-size:13px;font-weight:400;padding:0;width:auto;display:inline;float:none;border:none;margin:0}.jp-carousel-comment .comment-author a{color:#fff}.jp-carousel-comment .comment-gravatar{float:right}.jp-carousel-comment .comment-content{border:none;margin-right:85px;padding:0}.jp-carousel-comment .avatar{margin:0 0 0 20px;border-radius:4px;border:none!important;padding:0!important;background-color:transparent!important}.jp-carousel-comment .comment-date{color:#999;margin-top:4px;font-size:11px;display:inline;float:left}#jp-carousel-comment-form{margin:0 0 10px!important;float:right;width:100%}textarea#jp-carousel-comment-form-comment-field{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:15px/1.4 "Helvetica Neue",sans-serif!important;width:100%;padding:10px 10px 5px;margin:0;float:none;height:147px;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border
3649 -radius:3px;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box}textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#555}textarea#jp-carousel-comment-form-comment-field:focus{background:#ccc;color:#222}textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#aaa}#jp-carousel-comment-form-spinner{color:#fff;margin:22px 10px 0 0;display:block;width:20px;height:20px;float:right}#jp-carousel-comment-form-submit-and-info-wrapper{display:none;overflow:hidden;width:100%}#jp-carousel-comment-form-commenting-as input{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:13px/1.4 "Helvetica Neue",sans-serif!important;padding:3px 6px;float:right;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:2px;width:285px}#jp-carousel-comment-form-commenting-as input:focus{background:#ccc;color:#222}#jp-carousel-comment-form-commenting-as p{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:22px 0
3650 0;float:right}#jp-carousel-comment-form-commenting-as fieldset{float:right;border:none;margin:20px 0 0;padding:0;clear:both}#jp-carousel-comment-form-commenting-as label{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:0 0 3px 20px;float:right;width:100px}#jp-carousel-comment-form-button-submit{margin-top:20px;float:left}#jp-carousel-comment-form-container,#js-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-post-results{display:none;overflow:auto;width:100%}#jp-carousel-comment-post-results span{display:block;text-align:center;margin-top:20px;width:100%;overflow:auto;padding:1em 0;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(0,0,0,.7);border-radius:2px;font:13px/1.4 "Helvetica Neue",sans-serif!important;border:1px solid rgba(255,255,255,.17);box-shadow:inset 0 0 5px 5px rgba(0,0,0,1)}.jp-carousel-comment-post-error{color:#DF4926}#jp-carousel-comments-closed{display:none;color:#999}#jp-carousel-commen
3651 ts-loading{font:400 15px/1.7 "Helvetica Neue",sans-serif!important;display:none;color:#999;text-align:right;margin-bottom:20px}.jp-carousel-light .jp-carousel-overlay{background:#fff}.jp-carousel-light .jp-carousel-next-button:hover span,.jp-carousel-light .jp-carousel-previous-button:hover span{opacity:.8}.jp-carousel-light .jp-carousel-close-hint:hover,.jp-carousel-light .jp-carousel-titleanddesc div{color:#000!important}.jp-carousel-light .jp-carousel-comment .comment-author a,.jp-carousel-light .jp-carousel-comments p a,.jp-carousel-light .jp-carousel-info h2 a,.jp-carousel-light .jp-carousel-titleanddesc p a{color:#1e8cbe!important}.jp-carousel-light .jp-carousel-comment .comment-author a:hover,.jp-carousel-light .jp-carousel-comments p a:hover,.jp-carousel-light .jp-carousel-info h2 a:hover,.jp-carousel-light .jp-carousel-titleanddesc p a:hover{color:#f1831e!important}.jp-carousel-light .jp-carousel-comment,.jp-carousel-light .jp-carousel-comment p,.jp-carousel-light .jp-carou
3652 sel-info h2,.jp-carousel-light .jp-carousel-titleanddesc,.jp-carousel-light .jp-carousel-titleanddesc p,.jp-carousel-light .jp-carousel-titleanddesc p b,.jp-carousel-light .jp-carousel-titleanddesc p em,.jp-carousel-light .jp-carousel-titleanddesc p i,.jp-carousel-light .jp-carousel-titleanddesc p strong,.jp-carousel-light div.jp-carousel-buttons a{color:#666}.jp-carousel-light .jp-carousel-buttons{border-bottom-color:#f0f0f0;background:#f5f5f5}.jp-carousel-light div.jp-carousel-buttons a:hover{text-decoration:none;color:#f1831e}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:4px -56px;padding-right:24px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#2ea2cc;color:#fff}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -176px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-rebl
3653 og.reblogged{background-position:5px -36px}.jp-carousel-light div#carousel-reblog-box{background:#eee;box-shadow:0 2px 10px rgba(0,0,0,.1);border:1px solid #ddd}.jp-carousel-light #carousel-reblog-box textarea{color:#666;border:1px solid #cfcfcf;background:#fff}.jp-carousel-light #carousel-reblog-box .canceltext{color:#888}.jp-carousel-light #carousel-reblog-box .canceltext a{color:#666}.jp-carousel-light #carousel-reblog-box select{background:#eee;color:#333;border:1px solid #aaa}#jp-carousel-comment-form-button-submit,.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit{color:#333;background:#fff;border:1px solid #aaa}.jp-carousel-light .jp-carousel-image-meta{background:#fafafa;border:1px solid #eee;border-top-color:#f5f5f5;border-right-color:#f5f5f5;color:#333}.jp-carousel-light .jp-carousel-image-meta li{color:#000!important}.jp-carousel-light .jp-carousel-close-hint{color:#ccc}.jp-carousel-light .jp-carousel-close-hint span{background-color:#fff;border-color:#c
3654 cc}.jp-carousel-light #jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#aaa}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus{color:#333}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#ddd}.jp-carousel-light a.jp-carousel-image-download{background-position:0 -122px}.jp-carousel-light a.jp-carousel-image-download:hover{background-position:0 -122px;color:#f1831e}.jp-carousel-light textarea#jp-carousel-comment-form-comment-field{background:#fbfbfb;color:#333;border:1px solid #dfdfdf;box-shadow:inset -2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input{background:#fbfbfb;border:1px solid #dfdfdf;color:#333;box-shadow:inset -2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus{background:#fbfbfb;color:#333}.jp-carousel-light #jp-carousel-comment-post-results span{background:#f7f7f7;border:1px solid #dfdfdf;box-shado
3655 w:inset 0 0 5px rgba(0,0,0,.05)}.jp-carousel-light .jp-carousel-slide{background-color:#fff}.jp-carousel-light .jp-carousel-titleanddesc{border-top:1px solid #eee}@media only screen and (max-width:760px){.jp-carousel-info{margin:0 10px!important}.jp-carousel-buttons,.jp-carousel-next-button,.jp-carousel-previous-button{display:none!important}.jp-carousel-image-meta{float:none!important;width:100%!important;-moz-box-sizing:border-box;box-sizing:border-box}.jp-carousel-close-hint{font-weight:800!important;font-size:26px!important;position:fixed!important;top:-10px}.jp-carousel-slide img{filter:alpha(opacity=100);opacity:1}.jp-carousel-wrap{background-color:#000}.jp-carousel-fadeaway{display:none}#jp-carousel-comment-form-container{display:none!important}.jp-carousel-titleanddesc{padding-top:0!important;border:none!important}.jp-carousel-titleanddesc-title{font-size:1em!important}.jp-carousel-left-column-wrapper{padding:0;width:100%!important}.jp-carousel-photo-info{right:0!important;w
3656 idth:100%!important}}.contact-form .clear-form{clear:both}.contact-form input[type=email],.contact-form input[type=text]{width:300px;max-width:98%;margin-bottom:13px}.contact-form select{margin-bottom:13px}.contact-form textarea{height:200px;width:80%;float:none;margin-bottom:13px}.contact-form input[type=checkbox],.contact-form input[type=radio]{float:none;margin-bottom:13px}.contact-form label{margin-bottom:3px;float:none;font-weight:700;display:block}.contact-form label.checkbox,.contact-form label.radio{margin-bottom:3px;float:none;font-weight:700;display:inline-block}.contact-form label span{color:#AAA;margin-right:4px;font-weight:400}.contact-form-submission{margin-bottom:4em;padding:1.5em 1em}.contact-form-submission p{margin:0 auto}.form-errors .form-error-message{color:red}.textwidget .contact-form input[type=email],.textwidget .contact-form input[type=text],.textwidget .contact-form textarea{width:250px;max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box}#jetpa
3657 ck-check-feedback-spam{margin:1px 0 0 8px}.jetpack-check-feedback-spam-spinner{display:inline-block;margin-top:7px}.infinite-loader{color:#000;display:block;height:28px;text-indent:-9999px}#infinite-handle span{background:#333;border-radius:1px;color:#eee;cursor:pointer;font-size:13px;padding:6px 16px}#infinite-handle span button,#infinite-handle span button:focus,#infinite-handle span button:hover{display:inline;position:static;padding:0;margin:0;border:none;line-height:inherit;background:0 0;color:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}#infinite-handle span button::-moz-focus-inner{margin:0;padding:0;border:none}@media (max-width:800px){#infinite-handle span:before{display:none}#infinite-handle span{display:block}}#infinite-footer{position:fixed;bottom:-50px;right:0;width:100%}#infinite-footer a{text-decoration:none}#infinite-footer .blog-credits a:hover,#infinite-footer .blog-info a:hover{color:#444;text-decoration:underline}#infinite-foo
3658 ter .container{background:rgba(255,255,255,.8);border-color:#ccc;border-color:rgba(0,0,0,.1);border-style:solid;border-width:1px 0 0;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 auto;overflow:hidden;padding:1px 20px;width:780px}#infinite-footer .blog-credits,#infinite-footer .blog-info{-moz-box-sizing:border-box;box-sizing:border-box;line-height:25px}#infinite-footer .blog-info{float:right;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:40%}#infinite-footer .blog-credits{font-weight:400;float:left;width:60%}#infinite-footer .blog-info a{color:#111;font-size:14px;font-weight:700}#infinite-footer .blog-credits{color:#888;font-size:12px;text-align:left}#infinite-footer .blog-credits a{color:#666}.infinity-end.neverending #infinite-footer{display:none}@media (max-width:640px){#infinite-footer .container{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#infinite-footer .blog-info{width:30%}#infinite-footer .blog-credits{width:70%}#
3659 infinite-footer .blog-credits,#infinite-footer .blog-info a{font-size:10px}}@media (max-width:640px){#infinite-footer{position:static}}#wpadminbar li#wp-admin-bar-admin-bar-likes-widget{width:61px;overflow:hidden}#wpadminbar iframe.admin-bar-likes-widget{width:61px;height:28px;min-height:28px;border-width:0;position:absolute;top:0}div.jetpack-likes-widget-wrapper{width:100%;min-height:50px;position:relative}div.jetpack-likes-widget-wrapper .sd-link-color{font-size:12px}div.jetpack-likes-widget-wrapper.slim-likes-widget{width:1px;min-height:0}#likes-other-gravatars{display:none;position:absolute;padding:10px 10px 12px;background-color:#2e4453;border-width:0;box-shadow:0 0 10px #2e4453;box-shadow:0 0 10px rgba(46,68,83,.6);min-width:130px;z-index:1000}#likes-other-gravatars *{line-height:normal}#likes-other-gravatars .likes-text{color:#fff;font-size:12px;padding-bottom:8px}#likes-other-gravatars li,#likes-other-gravatars ul{margin:0;padding:0;text-indent:0;list-style-type:none}#likes-
3660 other-gravatars li::before{content:""}#likes-other-gravatars ul.wpl-avatars{overflow:auto;display:block;max-height:190px}#likes-other-gravatars ul.wpl-avatars li{width:32px;height:32px;float:right;margin:0 0 5px 5px}#likes-other-gravatars ul.wpl-avatars li a{margin:0 0 0 2px;border-bottom:none!important;display:block}#likes-other-gravatars ul.wpl-avatars li a img{background:0 0;border:none;margin:0!important;padding:0!important;position:static}div.sd-box{border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.13)}.comment-likes-widget,.entry-content .post-likes-widget,.post-likes-widget{margin:0;border-width:0;display:block}.post-likes-widget-placeholder{margin:0;border-width:0;position:relative}.post-likes-widget-placeholder .button{display:none}.post-likes-widget-placeholder .loading{color:#999;font-size:12px}.slim-likes-widget .post-likes-widget{width:auto;float:none}div.sharedaddy.sd-like-enabled .sd-like h3{display:none}div.sharedaddy.sd-like-enabled .sd-like .post-likes-wid
3661 get{width:100%;float:none;position:absolute;top:0}.comment-likes-widget{width:100%}.pd-rating{display:block!important}.sd-gplus .sd-title{display:none}#jp-relatedposts{display:none;padding-top:1em;margin:1em 0;position:relative;clear:both}.jp-relatedposts:after{content:'';display:block;clear:both}#jp-relatedposts h3.jp-relatedposts-headline{margin:0 0 1em;display:inline-block;float:right;font-size:9pt;font-weight:700;font-family:inherit}#jp-relatedposts h3.jp-relatedposts-headline em:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}#jp-relatedposts h3.jp-relatedposts-headline em{font-style:normal;font-weight:700}#jp-relatedposts .jp-relatedposts-items{clear:right}#jp-relatedposts .jp-relatedposts-items-visual{margin-left:-20px}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{float:right;width:33%;margin:0 0 1em;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:bord
3662 er-box}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post{padding-left:20px;filter:alpha(opacity=80);-moz-opacity:.8;opacity:.8}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n+4),#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post:nth-child(3n+4){clear:both}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover{filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items p,#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-size:14px;line-height:20px;margin:0}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs{position:relative}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay{position:absolute;top:0;bottom:0;right:0;left:0;display:block;border
3663 -bottom:0}#jp-relatedposts .jp-relatedposts-items p{margin-bottom:0}#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{text-transform:none;margin:0;font-family:inherit;display:block;max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a{font-size:inherit;font-weight:400;text-decoration:none;filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span{display:block;max-width:90%;overflow:hidden;text-overflow:ellipsis}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post span{max-width:100%}#jp-relatedposts .jp-relatedposts-items
3664 .jp-relatedposts-post .jp-relatedposts-post-context,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{opacity:.6}#jp-relatedposts .jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt,.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{display:none}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt{overflow:hidden}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs span{margin-bottom:1em}@media only screen and (max-width:640px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:50%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n){clear:right}#jp-relatedposts .jp-relatedposts-items-visual{margin-left:20px}}@media only screen and (max-width:320px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:100%;clear:both;margin:0 0 1em}}#jp-post-flair{pa
3665 dding-top:.5em}#content div.sharedaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{margin:0 0 1em;display:inline-block;line-height:1.2;font-size:9pt;font-weight:700}div.sharedaddy h3.sd-title:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;margin-bottom:1em}body.highlander-light h3.sd-title:before{border-top:1px solid rgba(0,0,0,.2)}body.highlander-dark h3.sd-title:before{border-top:1px solid rgba(255,255,255,.4)}.sd-content ul{padding:0!important;margin:0 0 .7em!important;list-style:none!important}.sd-content ul li{display:inline-block}.sd-block.sd-gplus{margin:0 0 .5em}.sd-gplus .sd-content{font-size:12px}#sharing_email .sharing_send,.sd-content ul li .option a.share-ustom,.sd-content ul li a.sd-button,.sd-content ul li.advanced a.share-more,.sd-content ul li.preview-item div.option.option-smart-off a,.sd-social-icon .sd-content ul li a.sd-button,.sd-social-icon-text .sd-content ul li a.sd-button,.sd-social-official
3666 .sd-content>ul>li .digg_button >a,.sd-social-official .sd-content>ul>li>a.sd-button,.sd-social-text .sd-content ul li a.sd-button{text-decoration:none!important;display:inline-block;margin:0 0 5px 5px;font-size:12px;font-family:"Open Sans",sans-serif;font-weight:400;border-radius:3px;color:#777!important;background:#f8f8f8;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,.08);text-shadow:none;line-height:23px;padding:1px 5px 0 8px}.sd-content ul li .option a.share-ustom span,.sd-content ul li a.sd-button>span,.sd-content ul li.advanced a.share-more span,.sd-content ul li.preview-item div.option.option-smart-off a span,.sd-social-icon-text .sd-content ul li a.sd-button>span,.sd-social-official .sd-content>ul>li .digg_button >a span,.sd-social-official .sd-content>ul>li>a.sd-button span,.sd-social-text .sd-content ul li a.sd-button span{line-height:23px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a,.sd-social-official .sd-content .sharing-hidden .inne
3667 r>ul>li>a.sd-button,.sd-social-official .sd-content>ul>li .digg_button>a,.sd-social-official .sd-content>ul>li>a.sd-button{line-height:17px;box-shadow:none;vertical-align:top}.sd-social-official .sd-content ul li a.sd-button>span{line-height:17px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,.sd-social-official .sd-content>ul>li .digg_button>a:before,.sd-social-official .sd-content>ul>li>a.sd-button:before{margin-bottom:-1px}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon .sd-content ul li a.sd-button:hover,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:hover,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li .digg_button>a:hover,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-official .sd-content>ul>li>a.sd-button:hover
3668 ,.sd-social-text .sd-content ul li a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:hover{color:#555;background:#fafafa;border:1px solid #999}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.16)}.sd-content ul li a.sd-button:before{display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font:400 18px/1 social-logos;vertical-align:top;text-align:center}.sd-social-icon-text ul li a.sd-button:before{position:relative;top:2px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-content ul li a.sd-button:before{position:relative;top:2px}}.sd-social-official ul li a.sd-button:before{position:relative;top:-2px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-social
3669 -official ul li a.sd-button:before{top:0}}.sd-content ul li{margin:0!important;padding:0}.sd-content ul li.preview-item a.sd-button span,.sd-social-icon-text .sd-content ul li a span,.sd-social-official .sd-content ul li a.sd-button span{margin-right:3px}.sd-content ul li.preview-item.no-icon a.sd-button span{margin-right:0}.sd-content ul li.no-icon a:before,.sd-social-text .sd-content ul li a:before{display:none}body .sd-content ul li.share-custom.no-icon a span,body .sd-social-text .sd-content ul li.share-custom a span{background-image:none;background-position:-500px -500px!important;background-repeat:no-repeat!important;padding-right:0;height:0;line-height:inherit}.sd-social-icon .sd-content ul li a.share-more{position:relative;top:-4px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-social-icon .sd-content ul li a.share-more{top:2px}}@-moz-document url-prefix(){.sd-social-icon .sd-content ul li a.share-more{top:2px}}.sd-social-icon .sd-content ul li a.share-more span{ma
3670 rgin-right:3px}.sd-content ul li.share-print div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-print a:before,.sd-social-icon-text .sd-content li.share-print a:before,.sd-social-official .sd-content li.share-print a:before,.sd-social-text .sd-content ul li.share-print a:before{content:'\f469'}.sd-content ul li.share-email div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-email a:before,.sd-social-icon-text .sd-content li.share-email a:before,.sd-social-official .sd-content li.share-email a:before,.sd-social-text .sd-content ul li.share-email a:before{content:'\f410'}.sd-content ul li.share-linkedin div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-linkedin a:before,.sd-social-icon-text .sd-content li.share-linkedin a:before,.sd-social-text .sd-content ul li.share-linkedin a:before{content:'\f207'}.sd-content ul li.share-twitter div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share
3671 -twitter a:before,.sd-social-icon-text .sd-content li.share-twitter a:before,.sd-social-text .sd-content ul li.share-twitter a:before{content:'\f202'}.sd-content ul li.share-reddit div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-reddit a:before,.sd-social-icon-text .sd-content li.share-reddit a:before,.sd-social-text .sd-content ul li.share-reddit a:before{content:'\f222'}.sd-content ul li.share-tumblr div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-tumblr a:before,.sd-social-icon-text .sd-content li.share-tumblr a:before,.sd-social-text .sd-content ul li.share-tumblr a:before{content:'\f607'}.sd-content ul li.share-pocket div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pocket a:before,.sd-social-icon-text .sd-content li.share-pocket a:before,.sd-social-text .sd-content ul li.share-pocket a:before{content:'\f224'}.sd-content ul li.share-pinterest div.option.option-smart-off a:before,.sd-social-ico
3672 n .sd-content ul li.share-pinterest a:before,.sd-social-icon-text .sd-content li.share-pinterest a:before,.sd-social-text .sd-content ul li.share-pinterest a:before{content:'\f210'}.sd-content ul li.share-google-plus-1 div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-google-plus-1 a:before,.sd-social-icon-text .sd-content li.share-google-plus-1 a:before,.sd-social-text .sd-content ul li.share-google-plus-1 a:before{content:'\f218'}.sd-content ul li.share-facebook div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-facebook a:before,.sd-social-icon-text .sd-content li.share-facebook a:before,.sd-social-text .sd-content ul li.share-facebook a:before{content:'\f203'}.sd-content ul li.share-press-this div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-press-this a:before,.sd-social-icon-text .sd-content li.share-press-this a:before,.sd-social-official .sd-content li.share-press-this a:before,.sd-social-text .
3673 sd-content ul li.share-press-this a:before{content:'\f205'}.sd-social-official .sd-content li.share-press-this a:before{color:#2ba1cb}.sd-content ul li.share-telegram div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-telegram a:before,.sd-social-icon-text .sd-content li.share-telegram a:before,.sd-social-official .sd-content li.share-telegram a:before,.sd-social-text .sd-content ul li.share-telegram a:before{content:'\f606'}.sd-social-official .sd-content li.share-telegram a:before{color:#08c}.sd-content ul li.share-skype div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-skype a:before,.sd-social-icon-text .sd-content li.share-skype a:before,.sd-social-text .sd-content ul li.share-skype a:before{content:'\f220'}.sd-content ul li.advanced a.share-more:before,.sd-social-icon .sd-content ul a.share-more:before,.sd-social-icon-text .sd-content a.share-more:before,.sd-social-official .sd-content a.share-more:before,.sd-social-text .sd
3674 -content ul a.share-more:before{content:'\f415'}.sd-social-official .sd-content a.share-more:before{color:#2ba1cb}.sd-content ul li.share-jetpack-whatsapp div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-jetpack-whatsapp a:before,.sd-social-icon-text .sd-content li.share-jetpack-whatsapp a:before,.sd-social-official .sd-content li.share-jetpack-whatsapp a:before,.sd-social-text .sd-content ul li.share-jetpack-whatsapp a:before{content:'\f608'}.sd-social-official .sd-content li.share-jetpack-whatsapp a:before{color:#43d854}.sd-social-icon .sd-content ul li[class*=share-].share-jetpack-whatsapp a.sd-button{background:#43d854;color:#fff!important}.sd-social .sd-button .share-count{background:#2ea2cc;color:#fff;border-radius:10px;display:inline-block;text-align:center;font-size:10px;padding:1px 3px;line-height:1}.sd-social-official .sd-content ul,.sd-social-official .sd-content ul li{line-height:25px!important}.sd-social-official .sd-content>ul>li>a.sd-button
3675 span{line-height:1}.sd-social-official .sd-content ul:after{content:".";display:block;height:0;clear:both;visibility:hidden}.sd-social-official .sd-content li.share-press-this a{margin:0 0 5px}.sd-social-official .sd-content ul>li{display:block;float:right;margin:0 0 5px 10px!important;height:25px}.sd-social-official .fb-share-button>span{vertical-align:top!important}.sd-social-official .sd-content .pocket_button iframe{width:98px}.googleplus1_button .g-plus{vertical-align:top!important}.reddit_button iframe{margin-top:1px}.googleplus1_button iframe,.linkedin_button>span,.pinterest_button,.pocket_button iframe,.twitter_button{margin:0!important}.sd-social-official .sd-content .share-skype{width:55px}body .sd-social-official li a.share-more,body .sd-social-official li.share-custom a,body .sd-social-official li.share-digg a,body .sd-social-official li.share-email a,body .sd-social-official li.share-press-this a,body .sd-social-official li.share-print{position:relative;top:0}body .sd-
3676 social-icon .sd-content li.share-custom>a{padding:2px 3px 0;position:relative;top:4px}body .sd-content ul li.share-custom a.share-icon span,body .sd-social-icon .sd-content li.share-custom a span,body .sd-social-icon-text .sd-content li.share-custom a span,body .sd-social-official .sd-content li.share-custom a span,body .sd-social-text .sd-content li.share-custom a span{background-size:16px 16px;background-repeat:no-repeat;margin-right:0;padding:0 19px 0 0;display:inline-block;height:16px;line-height:16px}body .sd-social-icon .sd-content li.share-custom a span{width:0;padding-right:16px!important}.sharing-hidden .inner{position:absolute;z-index:2;border:1px solid #ccc;padding:10px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);border-radius:2px;margin-top:5px;max-width:400px}.sharing-hidden .inner ul{margin:0!important}.sd-social-official .sd-content .sharing-hidden ul>li.share-end{clear:both;margin:0!important;height:0!important}.sharing-hidden .inner:after,.sharing-hidden .i
3677 nner:before{position:absolute;z-index:1;top:-8px;right:20px;width:0;height:0;border-right:6px solid transparent;border-left:6px solid transparent;border-bottom:8px solid #ccc;content:"";display:block}.sharing-hidden .inner:after{z-index:2;top:-7px;border-right:6px solid transparent;border-left:6px solid transparent;border-bottom:8px solid #fff}.sharing-hidden ul{margin:0}.sd-social-icon .sd-content ul li[class*=share-] a,.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a{border-radius:50%;-webkit-border-radius:50%;border:0;box-shadow:none;padding:7px;position:relative;top:-2px;line-height:1;width:auto;height:auto;margin-bottom:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button>span,.sd-social-icon .sd-content ul li[class*=share-] div.option a span{line-height:1}.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a:hover{border:none;opacity:
3678 .6}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button:before{top:1px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button.share-custom{padding:8px 8px 6px;top:5px}.sd-social-icon .sd-content ul li a.sd-button.share-more{margin-right:10px}.sd-social-icon .sd-content ul li:first-child a.sd-button.share-more{margin-right:0}.sd-social-icon .sd-button span.share-count{position:absolute;bottom:0;left:0;border-radius:0;background:#555;font-size:9px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button{background:#e9e9e9;margin-top:2px;text-indent:0}.sd-social-icon .sd-content ul li[class*=share-].share-tumblr a.sd-button{background:#2c4762;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-facebook a.sd-button{background:#3b5998;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-twitter a.sd-button{background:#00acee;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pinterest a.sd-button{ba
3679 ckground:#ca1f27;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-digg a.sd-button{color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-press-this a.sd-button{background:#1e8cbe;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-telegram a.sd-button{background:#08c;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-linkedin a.sd-button{background:#0077b5;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-google-plus-1 a.sd-button{background:#dd4b39;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pocket a.sd-button{background:#ee4056;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-reddit a.sd-button{background:#cee3f8;color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-skype a.sd-button{background:#00AFF0;color:#fff!important}.sharing-screen-reader-text{clip:rect(1px,1px,1px,1px);po
3680 sition:absolute!important;height:1px;width:1px;overflow:hidden}.sharing-screen-reader-text:active,.sharing-screen-reader-text:focus,.sharing-screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-weight:700;height:auto;right:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}#sharing_email{width:342px;position:absolute;z-index:1001;border:1px solid #ccc;padding:15px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);text-align:right}div.sharedaddy.sharedaddy-dark #sharing_email{border-color:#fff}#sharing_email .errors{color:#fff;background-color:#771a09;font-size:12px;padding:5px 8px;line-height:1;margin:10px 0 0}#sharing_email label{font-size:12px;color:#333;font-weight:700;display:block;padding:0 0 4px;text-align:right;text-shadow:none}#sharing_email form{margin:0}#sharing_email input[type=email],#sharing_email i
3681 nput[type=text]{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid #ccc;margin-bottom:1em;background:#fff;font-size:12px;color:#333;max-width:none;padding:1px 3px}#jetpack-source_f_name{display:none!important;position:absolute!important;right:-9000px}#sharing_email .sharing_cancel{padding:0 1em 0 0;font-size:12px;text-shadow:none}#sharing_email .recaptcha{width:312px;height:123px;margin:0 0 1em}.slideshow-window{background-color:#222;border:20px solid #222;border-radius:10px;height:0;margin-bottom:20px;overflow:hidden;padding-top:30px!important;padding-bottom:56.25%!important;position:relative;z-index:1}.slideshow-window.slideshow-white{background-color:#fff;border-color:#fff}.slideshow-window,.slideshow-window *{-moz-box-sizing:content-box;box-sizing:content-box}.slideshow-loading{height:100%;text-align:center;margin:auto}body div.slideshow-window * img{background-color:transparent!important;background-image:none!important;bor
3682 der-width:0!important;display:block;margin:0 auto;max-width:100%;max-height:100%;padding:0!important;position:relative;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);top:50%}.slideshow-loading img{vertical-align:middle}.slideshow-slide{display:none;height:100%!important;right:0;margin:auto;position:absolute;text-align:center;top:0;width:100%!important}.slideshow-slide img{vertical-align:middle}.slideshow-line-height-hack{overflow:hidden;width:0;font-size:0}.slideshow-slide-caption{font-size:13px;font-family:"Helvetica Neue",sans-serif;color:#f7f7f7;text-shadow:#222 -1px 1px 2px;line-height:25px;height:25px;position:absolute;bottom:5px;right:0;z-index:100;width:100%;text-align:center}.slideshow-controls{z-index:1000;position:absolute;bottom:30px;margin:auto;text-align:center;width:100%;-ms-filter:"alpha(Opacity=50)";opacity:.5;direction:rtl;transition:300ms opacity ease-out}.slideshow-window:hover .slideshow-controls{-ms-filter:"alpha(Opa
3683 city=100)";opacity:1}body div div.slideshow-controls a,body div div.slideshow-controls a:hover{border:2px solid rgba(255,255,255,.1)!important;background-color:#000!important;background-color:rgba(0,0,0,.6)!important;background-image:url(../modules/shortcodes/img/slideshow-controls.png)!important;background-repeat:no-repeat;background-size:142px 16px!important;background-position:-34px 8px!important;color:#222!important;margin:0 5px!important;padding:0!important;display:inline-block!important;zoom:1;height:32px!important;width:32px!important;line-height:32px!important;text-align:center!important;-khtml-border-radius:10em!important;border-radius:10em!important;transition:300ms border-color ease-out}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body div div.slideshow-controls a,body div div.slideshow-controls a:hover{background-image:url(../modules/shortcodes/img/slideshow-controls-2x.png)!important}}body div div.slideshow-controls a:hover{border-color:rgba(255,255,255,1
3684 )!important}body div div.slideshow-controls a:first-child{background-position:-76px 8px!important}body div div.slideshow-controls a:last-child{background-position:-117px 8px!important}body div div.slideshow-controls a.running,body div div.slideshow-controls a:nth-child(2){background-position:-34px 8px!important}body div div.slideshow-controls a.paused{background-position:9px 8px!important}.slideshow-controls a img{border:50px dotted #f0f}body.presentation-wrapper-fullscreen-parent,html.presentation-wrapper-fullscreen-parent{overflow:hidden!important}.presentation-wrapper-fullscreen-parent #wpadminbar{display:none}.presentation-wrapper-fullscreen,.presentation-wrapper-fullscreen-parent{min-width:100%!important;min-height:100%!important;position:absolute!important;top:0!important;left:0!important;bottom:0!important;right:0!important;margin:0!important;padding:0!important;z-index:10000!important}.presentation-wrapper-fullscreen{background-color:gray;border:none!important}.presentation-
3685 wrapper-fullscreen .nav-arrow-left,.presentation-wrapper-fullscreen .nav-arrow-right{z-index:20001}.presentation-wrapper-fullscreen .nav-fullscreen-button{z-index:20002}.presentation-wrapper{margin:20px auto;border:1px solid #e5e5e5;overflow:hidden;line-height:normal}.presentation{position:relative;margin:0;overflow:hidden;outline:0}.presentation,.presentation .step{background-repeat:no-repeat;background-position:center;background-size:100% 100%}.presentation .step.fade:not(.active){opacity:0}.presentation .slide-content{padding:30px}.presentation .nav-arrow-left,.presentation .nav-arrow-right,.presentation .nav-fullscreen-button{position:absolute;width:34px;background-repeat:no-repeat;z-index:2;opacity:0;transition:opacity .25s}.presentation .nav-arrow-left,.presentation .nav-arrow-right{height:100%;background-image:url(../modules/shortcodes/images/slide-nav.png);background-size:450% 61px}.presentation .nav-arrow-left{right:0;background-position:4px 50%}.presentation .nav-arrow-rig
3686 ht{left:0;background-position:-120px 50%}.presentation .nav-fullscreen-button{width:32px;height:32px;margin:4px;bottom:0;left:0;z-index:3;background-image:url(../modules/shortcodes/images/expand.png);background-size:100% 100%}.presentation:hover .nav-arrow-left,.presentation:hover .nav-arrow-right{opacity:1}.presentation:hover .nav-fullscreen-button{opacity:.8}.presentation-wrapper-fullscreen .nav-fullscreen-button{background-image:url(../modules/shortcodes/images/collapse.png)}.presentation .autoplay-overlay{height:15%;width:80%;margin:30% 10%;position:relative;z-index:100;display:table;border-radius:50px;background-color:#e5e5e5;background-color:rgba(0,0,0,.75);transition:opacity .5s}.presentation .autoplay-overlay .overlay-msg{position:relative;display:table-cell;text-align:center;vertical-align:middle;color:#fff}.presentation .will-fade{opacity:0}.presentation .do-fade{opacity:1;transition:opacity .5s}#subscribe-email input{width:95%}.comment-subscription-form .subscribe-label{d
3687 isplay:inline!important}.jetpack-video-wrapper{margin-bottom:1.6em}.jetpack-video-wrapper>.wp-video,.jetpack-video-wrapper>embed,.jetpack-video-wrapper>iframe,.jetpack-video-wrapper>object{margin-bottom:0}.jetpack-social-navigation ul{display:block;margin:0 0 1.5em;padding:0}.jetpack-social-navigation li{display:inline-block;margin:0;line-height:1}.jetpack-social-navigation a{border:0;height:1em;text-decoration:none;width:1em}.jetpack-social-navigation a:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Genericons;font-size:1em;font-style:normal;font-weight:400;height:1em;line-height:1;speak:none;text-decoration:inherit;vertical-align:top;width:1em;content:"\f415"}.jetpack-social-navigation a[href*="codepen.io"]:before{content:"\f216"}.jetpack-social-navigation a[href*="digg.com"]:before{content:"\f221"}.jetpack-social-navigation a[href*="dribbble.com"]:before{content:"\f201"}.jetpack-social-navigation a[href*="dropbox.com"]
3688 :before{content:"\f225"}.jetpack-social-navigation a[href*="mailto:"]:before{content:"\f410"}.jetpack-social-navigation a[href*="facebook.com"]:before{content:"\f203"}.jetpack-social-navigation a[href*="flickr.com"]:before{content:"\f211"}.jetpack-social-navigation a[href*="foursquare.com"]:before{content:"\f226"}.jetpack-social-navigation a[href*="github.com"]:before{content:"\f200"}.jetpack-social-navigation a[href*="plus.google.com"]:before{content:"\f206"}.jetpack-social-navigation a[href*="instagram.com"]:before{content:"\f215"}.jetpack-social-navigation a[href*="linkedin.com"]:before{content:"\f208"}.jetpack-social-navigation a[href*="path.com"]:before{content:"\f219"}.jetpack-social-navigation a[href*="pinterest.com"]:before{content:"\f210"}.jetpack-social-navigation a[href*="getpocket.com"]:before{content:"\f224"}.jetpack-social-navigation a[href*="polldaddy.com"]:before{content:"\f217"}.jetpack-social-navigation a[href*="reddit.com"]:before{content:"\f222"}.jetpack-social-n
3689 avigation a[href$="/feed/"]:before{content:"\f413"}.jetpack-social-navigation a[href*="skype:"]:before{content:"\f220"}.jetpack-social-navigation a[href*="spotify.com"]:before{content:"\f515"}.jetpack-social-navigation a[href*="stumbleupon.com"]:before{content:"\f223"}.jetpack-social-navigation a[href*="tumblr.com"]:before{content:"\f214"}.jetpack-social-navigation a[href*="twitch.tv"]:before{content:"\f516"}.jetpack-social-navigation a[href*="twitter.com"]:before{content:"\f202"}.jetpack-social-navigation a[href*="vimeo.com"]:before{content:"\f212"}.jetpack-social-navigation a[href*="vine.co"]:before{content:"\f517"}.jetpack-social-navigation a[href*="wordpress.com"]:before,.jetpack-social-navigation a[href*="wordpress.org"]:before{content:"\f205"}.jetpack-social-navigation a[href*="youtube.com"]:before{content:"\f213"}.tiled-gallery{clear:both;margin:0 0 20px;overflow:hidden}.tiled-gallery img{margin:2px!important}.tiled-gallery .gallery-group{float:right;position:relative}.tiled-
3690 gallery .tiled-gallery-item{float:right;margin:0;position:relative;width:inherit}.tiled-gallery .gallery-row{overflow:hidden}.tiled-gallery .tiled-gallery-item a{background:0 0;border:none;color:inherit;margin:0;padding:0;text-decoration:none;width:auto}.tiled-gallery .tiled-gallery-item img,.tiled-gallery .tiled-gallery-item img:hover{background:0 0;border:none;box-shadow:none;max-width:100%;padding:0;vertical-align:middle}.tiled-gallery-caption{background:#eee;background:rgba(255,255,255,.8);color:#333;font-size:13px;font-weight:400;overflow:hidden;padding:10px 0;position:absolute;bottom:0;text-indent:10px;text-overflow:ellipsis;width:100%;white-space:nowrap}.tiled-gallery .tiled-gallery-item-small .tiled-gallery-caption{font-size:11px}.widget-gallery .tiled-gallery-unresized{visibility:hidden;height:0;overflow:hidden}.tiled-gallery .tiled-gallery-item img.grayscale{position:absolute;right:0;top:0}.tiled-gallery .tiled-gallery-item img.grayscale:hover{opacity:0}.tiled-gallery.type
3691 -circle .tiled-gallery-item img{border-radius:50%!important}.tiled-gallery.type-circle .tiled-gallery-caption{display:none;opacity:0}.jetpack-display-remote-posts{margin:5px 0 20px}.jetpack-display-remote-posts h4{font-size:90%;margin:5px 0;padding:0}.jetpack-display-remote-posts h4 a{text-decoration:none}.jetpack-display-remote-posts p{margin:0!important;padding:0;line-height:1.4em!important;font-size:90%}.jetpack-display-remote-posts img{max-width:100%}.widget-grofile h4{margin:1em 0 .5em}.widget-grofile ul.grofile-urls{margin-right:0;overflow:hidden}.widget-grofile ul.grofile-accounts li{list-style:none;display:inline}.widget-grofile ul.grofile-accounts li::before{content:""!important}.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite.png);background-repeat:no-repeat;width:16px;height:16px;float:right;margin-left:8px;margin-bottom:8px}.rtl .widget-grofile .grofile-accounts-logo{margin-right:8px;margin-left:0}.grofile-thumbnail{wi
3692 dth:500px;max-width:100%}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite-2x.png);background-size:16px 784px}}div[class^=gr_custom_container]{border:1px solid gray;border-radius:10px;padding:10px 5px;background-color:#FFF;color:#000}div[class^=gr_custom_container] a{color:#000}h2[class^=gr_custom_header]{display:none}div[class^=gr_custom_each_container]{width:100%;clear:both;margin-bottom:10px;overflow:auto;padding-bottom:4px;border-bottom:1px solid #aaa}div[class^=gr_custom_book_container]{float:left;overflow:hidden;height:60px;margin-right:4px;width:39px}div[class^=gr_custom_author]{font-size:10px}div[class^=gr_custom_tags]{font-size:10px;color:gray}div[class^=gr_custom_rating]{display:none}.widget_wpcom_social_media_icons_widget
3693 ul{list-style-type:none;margin-right:0}.widget_wpcom_social_media_icons_widget li{border:0;display:inline;margin-left:.5em}.widget_wpcom_social_media_icons_widget li a{border:0;text-decoration:none}.widget_wpcom_social_media_icons_widget .genericon{font-family:Genericons}.widget_wpcom_social_media_icons_widget .screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.widget_wpcom_social_media_icons_widget .screen-reader-text:active,.widget_wpcom_social_media_icons_widget .screen-reader-text:focus,.widget_wpcom_social_media_icons_widget .screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-size:.875rem;font-weight:700;height:auto;right:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.widgets-grid-layout{width:100%}.widgets-grid-layout:after,.widgets-grid-lay
3694 out:before{content:" ";display:table}.widgets-grid-layout:after{clear:both}.widget-grid-view-image{float:right;max-width:50%}.widget-grid-view-image a{display:block;margin:0 0 4px 2px}.widget-grid-view-image:image:nth-child(even){float:left}.widget-grid-view-image:nth-child(even) a{margin:0 2px 4px 0}.widgets-grid-layout .widget-grid-view-image img{max-width:100%;height:auto}.widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:0 0;clear:none;float:right;margin:0 0 -3px -5px;padding:0 0 6px 8px;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:0 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widgets-list-layout{padding:0;margin:0;list-style-type:none}.widgets-list-layout li:after,.widgets-list-layout li:before{content:"";display:table}.widgets-list-layout li:after{clear:both}.widgets-list-layout li{zoom:1;margin-bottom:1em;list-s
3695 tyle-type:none!important}.widgets-list-layout .widgets-list-layout-blavatar{float:right;width:21.276596%;max-width:40px;height:auto}.widgets-list-layout-links{float:left;width:73.404255%}.widgets-list-layout span{opacity:.5}.widgets-list-layout span:hover{opacity:.8}
3696 \ No newline at end of file
3697
3698 diff --git a/plugins/jetpack/css/jetpack.css b/plugins/jetpack/css/jetpack.css
3699 index b98b109..449a42c 100644
3700 --- a/plugins/jetpack/css/jetpack.css
3701 +++ b/plugins/jetpack/css/jetpack.css
3702 @@ -1,4 +1,4 @@
3703 /*!
3704 * Do not modify this file directly. It is concatenated from individual module CSS files.
3705 */
3706 -.jp-carousel-wrap *{line-height:inherit}.jp-carousel-overlay{background:#000}div.jp-carousel-fadeaway{position:fixed;bottom:0;z-index:2147483647;width:100%;height:15px}.jp-carousel-next-button span,.jp-carousel-previous-button span{background:url(../modules/carousel/images/arrows.png) center center/200px 126px no-repeat}.jp-carousel-msg{font-family:"Open Sans",sans-serif;font-style:normal;display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:center;margin:25px 20px 0 2px;background-color:#fff;border-left:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.jp-carousel-next-button span,.jp-carousel-previous-button span{background-image:url(../modules/carousel/images/arrows-2x.png)}}.jp-carousel-wrap{font-family:"Helvetica Neue",sans-serif!important}.jp-
3707 carousel-info{position:absolute;bottom:0;text-align:left!important;-webkit-font-smoothing:subpixel-antialiased!important}.jp-carousel-info ::selection{background:#68c9e8;color:#fff}.jp-carousel-info ::-moz-selection{background:#68c9e8;color:#fff}.jp-carousel-photo-info{position:relative;left:25%;width:50%}.jp-carousel-transitions .jp-carousel-photo-info{transition:400ms ease-out}.jp-carousel-info h2{background:none!important;border:none!important;color:#999;display:block!important;font:400 13px/1.25em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;margin:7px 0 0!important;padding:10px 0 0!important;overflow:hidden;text-align:left;text-shadow:none!important;text-transform:none!important;-webkit-font-smoothing:subpixel-antialiased}.jp-carousel-next-button,.jp-carousel-previous-button{text-indent:-9999px;overflow:hidden;cursor:pointer}.jp-carousel-next-button span,.jp-carousel-previous-button span{position:absolute;top:0;bottom:0;width:82px;zoom:1;filter:alpha(opacity
3708 =20);opacity:.2}.jp-carousel-transitions .jp-carousel-next-button span,.jp-carousel-transitions .jp-carousel-previous-button span{transition:500ms opacity ease-out}.jp-carousel-next-button:hover span,.jp-carousel-previous-button:hover span{filter:alpha(opacity=60);opacity:.6}.jp-carousel-next-button span{background-position:-110px center;right:0}.jp-carousel-previous-button span{background-position:-10px center;left:0}.jp-carousel-buttons{margin:-18px -20px 15px;padding:8px 10px;border-bottom:1px solid #222;background:#222;text-align:center}div.jp-carousel-buttons a{border:none!important;color:#999;font:400 11px/1.2em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;padding:5px 2px 5px 0;text-decoration:none!important;text-shadow:none!important;vertical-align:middle;-webkit-font-smoothing:subpixel-antialiased}div.jp-carousel-buttons a:hover{color:#68c9e8;border:none!important}.jp-carousel-transitions div.jp-carousel-buttons a:hover{transition:none!important}.jp-carou
3709 sel-next-button,.jp-carousel-previous-button,.jp-carousel-slide,.jp-carousel-slide img{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.jp-carousel-slide{position:fixed;width:0;bottom:0;background-color:#000;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}.jp-carousel-slide.selected{position:absolute!important;filter:alpha(opacity=100);opacity:1}.jp-carousel-slide{filter:alpha(opacity=25);opacity:.25}.jp-carousel-slide img{display:block;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;background:none!important;border:none!important;padding:0!important;box-shadow:0 2px 8px rgba(0,0,0,.1);zoom:1}.jp-carousel-transitions .jp-carousel-slide{transition:opacity 400ms linear}.jp-carousel-close-hint{color:#999;cursor:default;letter-spacing:0!important;padding:.35em 0 0;position:absolute;text-align:l
3710 eft;width:90%}.jp-carousel-transitions .jp-carousel-close-hint{transition:color 200ms linear}.jp-carousel-close-hint span{cursor:pointer;background-color:#000;background-color:rgba(0,0,0,.8);display:block;height:22px;font:400 24px/1 "Helvetica Neue",sans-serif!important;line-height:22px;margin:0 0 0 .4em;text-align:center;vertical-align:middle;width:22px;border-radius:4px}.jp-carousel-transitions .jp-carousel-close-hint span{transition:border-color 200ms linear}.jp-carousel-close-hint:hover{cursor:default;color:#fff}.jp-carousel-close-hint:hover span{border-color:#fff}a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background:url(../modules/carousel/images/carousel-sprite.png?5) 0 0/16px 200px no-repeat}div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{margin:0 14px 0 0!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#303030;paddi
3711 ng-right:8px!important;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;margin:0 2px 0 -12px!important}div.jp-carousel-buttons a.jp-carousel-reblog,div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{background-position:6px -36px;padding-right:auto!important;padding-left:26px!important;color:#999}div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -156px;padding-left:19px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{cursor:default}div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:6px -56px;color:#68c9e8}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background-image:url(../
3712 modules/carousel/images/carousel-sprite-2x.png?5)}}div#carousel-reblog-box{background:#222;padding:3px 0 0;display:none;margin:5px auto 0;border-radius:2px;box-shadow:0 0 20px rgba(0,0,0,.9);height:74px;width:565px}#carousel-reblog-box textarea{background:#999;font:13px/1.4 "Helvetica Neue",sans-serif!important;color:#444;padding:3px 6px;width:370px;height:48px;float:left;margin:6px 9px 0;border:1px solid #666;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:2px}#carousel-reblog-box textarea:focus{background:#ccc;color:#222}#carousel-reblog-box label{color:#aaa;font-size:11px;padding-right:2px;padding-left:2px;display:inline;font-weight:400}#carousel-reblog-box select{width:110px;padding:0;font-size:12px;font-family:"Helvetica Neue",sans-serif!important;background:#333;color:#eee;border:1px solid #444;margin-top:5px}#carousel-reblog-box .submit,#wrapper #carousel-reblog-box p.response{float:left;width:154px;padding-top:0;padding-left:1px;overflow:hidden;height:34px;margin:3
3713 px 0 0 2px!important}#wrapper #carousel-reblog-box p.response{font-size:13px;clear:none;padding-left:2px;height:34px;color:#aaa}#carousel-reblog-box input#carousel-reblog-submit,#jp-carousel-comment-form-button-submit{font:13px/24px "Helvetica Neue",sans-serif!important;margin-top:8px;padding:0 10px!important;border-radius:1em;height:24px;color:#333;cursor:pointer;font-weight:400;background:#aaa;border:1px solid #444}#carousel-reblog-box input#carousel-reblog-submit:hover,#jp-carousel-comment-form-button-submit:hover{background:#ccc}#carousel-reblog-box .canceltext{color:#aaa;font-size:11px;line-height:24px}#carousel-reblog-box .canceltext a{color:#fff}.jp-carousel-titleanddesc{border-top:1px solid #222;color:#999;font-size:15px;padding-top:24px;margin-bottom:20px;font-weight:400}.jp-carousel-titleanddesc-title{font:300 1.5em/1.1 "Helvetica Neue",sans-serif!important;text-transform:none!important;color:#fff;margin:0 0 15px;padding:0}.jp-carousel-titleanddesc-desc p{color:#999;line-h
3714 eight:1.4;margin-bottom:.75em}.jp-carousel-comments p a,.jp-carousel-info h2 a,.jp-carousel-titleanddesc p a{color:#fff!important;border:none!important;text-decoration:underline!important;font-weight:400!important;font-style:normal!important}.jp-carousel-titleanddesc p b,.jp-carousel-titleanddesc p strong{font-weight:700;color:#999}.jp-carousel-titleanddesc p em,.jp-carousel-titleanddesc p i{font-style:italic;color:#999}.jp-carousel-comments p a:hover,.jp-carousel-info h2 a:hover,.jp-carousel-titleanddesc p a:hover{color:#68c9e8!important}.jp-carousel-titleanddesc p:empty{display:none}.jp-carousel-left-column-wrapper h1:after,.jp-carousel-left-column-wrapper h1:before,.jp-carousel-photo-info h1:after,.jp-carousel-photo-info h1:before{content:none!important}.jp-carousel-image-meta{background:#111;border:1px solid #222;color:#fff;font:12px/1.4 "Helvetica Neue",sans-serif!important;overflow:hidden;padding:18px 20px;width:209px!important}.jp-carousel-image-meta h5,.jp-carousel-image-met
3715 a li{font-family:"Helvetica Neue",sans-serif!important;position:inherit!important;top:auto!important;right:auto!important;left:auto!important;bottom:auto!important;background:none!important;border:none!important;font-weight:400!important;line-height:1.3em!important}.jp-carousel-image-meta ul{margin:0!important;padding:0!important;list-style:none!important}.jp-carousel-image-meta li{width:48%!important;float:left!important;margin:0 2% 15px 0!important;color:#fff!important;font-size:13px!important}.jp-carousel-image-meta h5{color:#999!important;text-transform:uppercase!important;font-size:10px!important;margin:0 0 2px!important;letter-spacing:.1em!important}a.jp-carousel-image-download{padding-left:23px;display:inline-block;clear:both;color:#999;line-height:1;font-weight:400;font-size:13px;text-decoration:none;background-position:0 -82px}a.jp-carousel-image-download span.photo-size{font-size:11px;border-radius:1em;margin-left:2px;display:inline-block}a.jp-carousel-image-download span.
3716 photo-size-times{padding:0 1px 0 2px}a.jp-carousel-image-download:hover{background-position:0 -122px;color:#68c9e8;border:none!important}.jp-carousel-image-map{position:relative;margin:-20px -20px 20px;border-bottom:1px solid rgba(255,255,255,.17);height:154px}.jp-carousel-image-map img.gmap-main{border-top-left-radius:6px;border-right:1px solid rgba(255,255,255,.17)}.jp-carousel-image-map div.gmap-topright{width:94px;height:154px;position:absolute;top:0;right:0}.jp-carousel-image-map div.imgclip{overflow:hidden;border-top-right-radius:6px}.jp-carousel-image-map div.gmap-topright img{margin-left:-40px}.jp-carousel-image-map img.gmap-bottomright{position:absolute;top:96px;right:0}.jp-carousel-comments{font:15px/1.7 "Helvetica Neue",sans-serif!important;font-weight:400;background:none}.jp-carousel-comments p a:active,.jp-carousel-comments p a:focus,.jp-carousel-comments p a:hover{color:#68c9e8!important}.jp-carousel-comment{background:none;color:#999;margin-bottom:20px;clear:left;over
3717 flow:auto;width:100%}.jp-carousel-comment p{color:#999!important}.jp-carousel-comment .comment-author{font-size:13px;font-weight:400;padding:0;width:auto;display:inline;float:none;border:none;margin:0}.jp-carousel-comment .comment-author a{color:#fff}.jp-carousel-comment .comment-gravatar{float:left}.jp-carousel-comment .comment-content{border:none;margin-left:85px;padding:0}.jp-carousel-comment .avatar{margin:0 20px 0 0;border-radius:4px;border:none!important;padding:0!important;background-color:transparent!important}.jp-carousel-comment .comment-date{color:#999;margin-top:4px;font-size:11px;display:inline;float:right}#jp-carousel-comment-form{margin:0 0 10px!important;float:left;width:100%}textarea#jp-carousel-comment-form-comment-field{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:15px/1.4 "Helvetica Neue",sans-serif!important;width:100%;padding:10px 10px 5px;margin:0;float:none;height:147px;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:3px;ove
3718 rflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box}textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#555}textarea#jp-carousel-comment-form-comment-field:focus{background:#ccc;color:#222}textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#aaa}#jp-carousel-comment-form-spinner{color:#fff;margin:22px 0 0 10px;display:block;width:20px;height:20px;float:left}#jp-carousel-comment-form-submit-and-info-wrapper{display:none;overflow:hidden;width:100%}#jp-carousel-comment-form-commenting-as input{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:13px/1.4 "Helvetica Neue",sans-serif!important;padding:3px 6px;float:left;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:2px;width:285px}#jp-carousel-comment-form-commenting-as input:focus{background:#ccc;color:#222}#jp-carousel-comment-form-commenting-as p{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:22px 0 0;float:left}#jp-
3719 carousel-comment-form-commenting-as fieldset{float:left;border:none;margin:20px 0 0;padding:0;clear:both}#jp-carousel-comment-form-commenting-as label{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:0 20px 3px 0;float:left;width:100px}#jp-carousel-comment-form-button-submit{margin-top:20px;float:right}#jp-carousel-comment-form-container,#js-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-post-results{display:none;overflow:auto;width:100%}#jp-carousel-comment-post-results span{display:block;text-align:center;margin-top:20px;width:100%;overflow:auto;padding:1em 0;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(0,0,0,.7);border-radius:2px;font:13px/1.4 "Helvetica Neue",sans-serif!important;border:1px solid rgba(255,255,255,.17);box-shadow:inset 0 0 5px 5px rgba(0,0,0,1)}.jp-carousel-comment-post-error{color:#DF4926}#jp-carousel-comments-closed{display:none;color:#999}#jp-carousel-comments-loading{font:400
3720 15px/1.7 "Helvetica Neue",sans-serif!important;display:none;color:#999;text-align:left;margin-bottom:20px}.jp-carousel-light .jp-carousel-overlay{background:#fff}.jp-carousel-light .jp-carousel-next-button:hover span,.jp-carousel-light .jp-carousel-previous-button:hover span{opacity:.8}.jp-carousel-light .jp-carousel-close-hint:hover,.jp-carousel-light .jp-carousel-titleanddesc div{color:#000!important}.jp-carousel-light .jp-carousel-comment .comment-author a,.jp-carousel-light .jp-carousel-comments p a,.jp-carousel-light .jp-carousel-info h2 a,.jp-carousel-light .jp-carousel-titleanddesc p a{color:#1e8cbe!important}.jp-carousel-light .jp-carousel-comment .comment-author a:hover,.jp-carousel-light .jp-carousel-comments p a:hover,.jp-carousel-light .jp-carousel-info h2 a:hover,.jp-carousel-light .jp-carousel-titleanddesc p a:hover{color:#f1831e!important}.jp-carousel-light .jp-carousel-comment,.jp-carousel-light .jp-carousel-comment p,.jp-carousel-light .jp-carousel-info h2,.jp-carou
3721 sel-light .jp-carousel-titleanddesc,.jp-carousel-light .jp-carousel-titleanddesc p,.jp-carousel-light .jp-carousel-titleanddesc p b,.jp-carousel-light .jp-carousel-titleanddesc p em,.jp-carousel-light .jp-carousel-titleanddesc p i,.jp-carousel-light .jp-carousel-titleanddesc p strong,.jp-carousel-light div.jp-carousel-buttons a{color:#666}.jp-carousel-light .jp-carousel-buttons{border-bottom-color:#f0f0f0;background:#f5f5f5}.jp-carousel-light div.jp-carousel-buttons a:hover{text-decoration:none;color:#f1831e}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:4px -56px;padding-left:24px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#2ea2cc;color:#fff}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -176px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{backgroun
3722 d-position:5px -36px}.jp-carousel-light div#carousel-reblog-box{background:#eee;box-shadow:0 2px 10px rgba(0,0,0,.1);border:1px solid #ddd}.jp-carousel-light #carousel-reblog-box textarea{color:#666;border:1px solid #cfcfcf;background:#fff}.jp-carousel-light #carousel-reblog-box .canceltext{color:#888}.jp-carousel-light #carousel-reblog-box .canceltext a{color:#666}.jp-carousel-light #carousel-reblog-box select{background:#eee;color:#333;border:1px solid #aaa}#jp-carousel-comment-form-button-submit,.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit{color:#333;background:#fff;border:1px solid #aaa}.jp-carousel-light .jp-carousel-image-meta{background:#fafafa;border:1px solid #eee;border-top-color:#f5f5f5;border-left-color:#f5f5f5;color:#333}.jp-carousel-light .jp-carousel-image-meta li{color:#000!important}.jp-carousel-light .jp-carousel-close-hint{color:#ccc}.jp-carousel-light .jp-carousel-close-hint span{background-color:#fff;border-color:#ccc}.jp-carousel-light #
3723 jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#aaa}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus{color:#333}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#ddd}.jp-carousel-light a.jp-carousel-image-download{background-position:0 -122px}.jp-carousel-light a.jp-carousel-image-download:hover{background-position:0 -122px;color:#f1831e}.jp-carousel-light textarea#jp-carousel-comment-form-comment-field{background:#fbfbfb;color:#333;border:1px solid #dfdfdf;box-shadow:inset 2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input{background:#fbfbfb;border:1px solid #dfdfdf;color:#333;box-shadow:inset 2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus{background:#fbfbfb;color:#333}.jp-carousel-light #jp-carousel-comment-post-results span{background:#f7f7f7;border:1px solid #dfdfdf;box-shadow:inset 0 0 5px rgba(0,0,
3724 0,.05)}.jp-carousel-light .jp-carousel-slide{background-color:#fff}.jp-carousel-light .jp-carousel-titleanddesc{border-top:1px solid #eee}@media only screen and (max-width:760px){.jp-carousel-info{margin:0 10px!important}.jp-carousel-buttons,.jp-carousel-next-button,.jp-carousel-previous-button{display:none!important}.jp-carousel-image-meta{float:none!important;width:100%!important;-moz-box-sizing:border-box;box-sizing:border-box}.jp-carousel-close-hint{font-weight:800!important;font-size:26px!important;position:fixed!important;top:-10px}.jp-carousel-slide img{filter:alpha(opacity=100);opacity:1}.jp-carousel-wrap{background-color:#000}.jp-carousel-fadeaway{display:none}#jp-carousel-comment-form-container{display:none!important}.jp-carousel-titleanddesc{padding-top:0!important;border:none!important}.jp-carousel-titleanddesc-title{font-size:1em!important}.jp-carousel-left-column-wrapper{padding:0;width:100%!important}.jp-carousel-photo-info{left:0!important;width:100%!important}}.cont
3725 act-form .clear-form{clear:both}.contact-form input[type=email],.contact-form input[type=text]{width:300px;max-width:98%;margin-bottom:13px}.contact-form select{margin-bottom:13px}.contact-form textarea{height:200px;width:80%;float:none;margin-bottom:13px}.contact-form input[type=checkbox],.contact-form input[type=radio]{float:none;margin-bottom:13px}.contact-form label{margin-bottom:3px;float:none;font-weight:700;display:block}.contact-form label.checkbox,.contact-form label.radio{margin-bottom:3px;float:none;font-weight:700;display:inline-block}.contact-form label span{color:#AAA;margin-left:4px;font-weight:400}.contact-form-submission{margin-bottom:4em;padding:1.5em 1em}.contact-form-submission p{margin:0 auto}.form-errors .form-error-message{color:red}.textwidget .contact-form input[type=email],.textwidget .contact-form input[type=text],.textwidget .contact-form textarea{width:250px;max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box}#jetpack-check-feedback-spam{marg
3726 in:1px 8px 0 0}.jetpack-check-feedback-spam-spinner{display:inline-block;margin-top:7px}.infinite-loader{color:#000;display:block;height:28px;text-indent:-9999px}#infinite-handle span{background:#333;border-radius:1px;color:#eee;cursor:pointer;font-size:13px;padding:6px 16px}#infinite-handle span button,#infinite-handle span button:focus,#infinite-handle span button:hover{display:inline;position:static;padding:0;margin:0;border:none;line-height:inherit;background:0 0;color:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}#infinite-handle span button::-moz-focus-inner{margin:0;padding:0;border:none}@media (max-width:800px){#infinite-handle span:before{display:none}#infinite-handle span{display:block}}#infinite-footer{position:fixed;bottom:-50px;left:0;width:100%}#infinite-footer a{text-decoration:none}#infinite-footer .blog-credits a:hover,#infinite-footer .blog-info a:hover{color:#444;text-decoration:underline}#infinite-footer .container{background:rg
3727 ba(255,255,255,.8);border-color:#ccc;border-color:rgba(0,0,0,.1);border-style:solid;border-width:1px 0 0;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 auto;overflow:hidden;padding:1px 20px;width:780px}#infinite-footer .blog-credits,#infinite-footer .blog-info{-moz-box-sizing:border-box;box-sizing:border-box;line-height:25px}#infinite-footer .blog-info{float:left;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:40%}#infinite-footer .blog-credits{font-weight:400;float:right;width:60%}#infinite-footer .blog-info a{color:#111;font-size:14px;font-weight:700}#infinite-footer .blog-credits{color:#888;font-size:12px;text-align:right}#infinite-footer .blog-credits a{color:#666}.infinity-end.neverending #infinite-footer{display:none}@media (max-width:640px){#infinite-footer .container{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#infinite-footer .blog-info{width:30%}#infinite-footer .blog-credits{width:70%}#infinite-footer .blog-credit
3728 s,#infinite-footer .blog-info a{font-size:10px}}@media (max-width:640px){#infinite-footer{position:static}}#wpadminbar li#wp-admin-bar-admin-bar-likes-widget{width:61px;overflow:hidden}#wpadminbar iframe.admin-bar-likes-widget{width:61px;height:28px;min-height:28px;border-width:0;position:absolute;top:0}div.jetpack-likes-widget-wrapper{width:100%;min-height:50px;position:relative}div.jetpack-likes-widget-wrapper .sd-link-color{font-size:12px}div.jetpack-likes-widget-wrapper.slim-likes-widget{width:1px;min-height:0}#likes-other-gravatars{display:none;position:absolute;padding:10px 10px 12px;background-color:#2e4453;border-width:0;box-shadow:0 0 10px #2e4453;box-shadow:0 0 10px rgba(46,68,83,.6);min-width:130px;z-index:1000}#likes-other-gravatars *{line-height:normal}#likes-other-gravatars .likes-text{color:#fff;font-size:12px;padding-bottom:8px}#likes-other-gravatars li,#likes-other-gravatars ul{margin:0;padding:0;text-indent:0;list-style-type:none}#likes-other-gravatars li::before{c
3729 ontent:""}#likes-other-gravatars ul.wpl-avatars{overflow:auto;display:block;max-height:190px}#likes-other-gravatars ul.wpl-avatars li{width:32px;height:32px;float:left;margin:0 5px 5px 0}#likes-other-gravatars ul.wpl-avatars li a{margin:0 2px 0 0;border-bottom:none!important;display:block}#likes-other-gravatars ul.wpl-avatars li a img{background:0 0;border:none;margin:0!important;padding:0!important;position:static}div.sd-box{border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.13)}.comment-likes-widget,.entry-content .post-likes-widget,.post-likes-widget{margin:0;border-width:0;display:block}.post-likes-widget-placeholder{margin:0;border-width:0;position:relative}.post-likes-widget-placeholder .button{display:none}.post-likes-widget-placeholder .loading{color:#999;font-size:12px}.slim-likes-widget .post-likes-widget{width:auto;float:none}div.sharedaddy.sd-like-enabled .sd-like h3{display:none}div.sharedaddy.sd-like-enabled .sd-like .post-likes-widget{width:100%;float:none;pos
3730 ition:absolute;top:0}.comment-likes-widget{width:100%}.pd-rating{display:block!important}.sd-gplus .sd-title{display:none}#jp-relatedposts{display:none;padding-top:1em;margin:1em 0;position:relative;clear:both}.jp-relatedposts:after{content:'';display:block;clear:both}#jp-relatedposts h3.jp-relatedposts-headline{margin:0 0 1em;display:inline-block;float:left;font-size:9pt;font-weight:700;font-family:inherit}#jp-relatedposts h3.jp-relatedposts-headline em:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}#jp-relatedposts h3.jp-relatedposts-headline em{font-style:normal;font-weight:700}#jp-relatedposts .jp-relatedposts-items{clear:left}#jp-relatedposts .jp-relatedposts-items-visual{margin-right:-20px}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{float:left;width:33%;margin:0 0 1em;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}#jp-relatedposts .jp-rel
3731 atedposts-items-visual .jp-relatedposts-post{padding-right:20px;filter:alpha(opacity=80);-moz-opacity:.8;opacity:.8}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n+4),#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post:nth-child(3n+4){clear:both}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover{filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items p,#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-size:14px;line-height:20px;margin:0}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs{position:relative}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay{position:absolute;top:0;bottom:0;left:0;right:0;display:block}#jp-relatedposts .jp-relatedposts-it
3732 ems p{margin-bottom:0}#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{text-transform:none;margin:0;font-family:inherit;display:block;max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a{font-size:inherit;font-weight:400;text-decoration:none;filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span{display:block;max-width:90%;overflow:hidden;text-overflow:ellipsis}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post span{max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-co
3733 ntext,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{opacity:.6}#jp-relatedposts .jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt,.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{display:none}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt{overflow:hidden}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs span{margin-bottom:1em}@media only screen and (max-width:640px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:50%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n){clear:left}#jp-relatedposts .jp-relatedposts-items-visual{margin-right:20px}}@media only screen and (max-width:320px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:100%;clear:both;margin:0 0 1em}}#jp-post-flair{padding-top:.5em}#content div.sharedaddy,#main d
3734 iv.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{margin:0 0 1em;display:inline-block;line-height:1.2;font-size:9pt;font-weight:700}div.sharedaddy h3.sd-title:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;margin-bottom:1em}body.highlander-light h3.sd-title:before{border-top:1px solid rgba(0,0,0,.2)}body.highlander-dark h3.sd-title:before{border-top:1px solid rgba(255,255,255,.4)}.sd-content ul{padding:0!important;margin:0 0 .7em!important;list-style:none!important}.sd-content ul li{display:inline-block}.sd-block.sd-gplus{margin:0 0 .5em}.sd-gplus .sd-content{font-size:12px}#sharing_email .sharing_send,.sd-content ul li .option a.share-ustom,.sd-content ul li a.sd-button,.sd-content ul li.advanced a.share-more,.sd-content ul li.preview-item div.option.option-smart-off a,.sd-social-icon .sd-content ul li a.sd-button,.sd-social-icon-text .sd-content ul li a.sd-button,.sd-social-official .sd-content>ul>li .digg_button >a,.sd-social-
3735 official .sd-content>ul>li>a.sd-button,.sd-social-text .sd-content ul li a.sd-button{text-decoration:none!important;display:inline-block;margin:0 5px 5px 0;font-size:12px;font-family:"Open Sans",sans-serif;font-weight:400;border-radius:3px;color:#777!important;background:#f8f8f8;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,.08);text-shadow:none;line-height:23px;padding:1px 8px 0 5px}.sd-content ul li .option a.share-ustom span,.sd-content ul li a.sd-button>span,.sd-content ul li.advanced a.share-more span,.sd-content ul li.preview-item div.option.option-smart-off a span,.sd-social-icon-text .sd-content ul li a.sd-button>span,.sd-social-official .sd-content>ul>li .digg_button >a span,.sd-social-official .sd-content>ul>li>a.sd-button span,.sd-social-text .sd-content ul li a.sd-button span{line-height:23px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button,.sd-social-official .sd-co
3736 ntent>ul>li .digg_button>a,.sd-social-official .sd-content>ul>li>a.sd-button{line-height:17px;box-shadow:none;vertical-align:top}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,.sd-social-official .sd-content>ul>li .digg_button>a:before,.sd-social-official .sd-content>ul>li>a.sd-button:before{margin-bottom:-1px;top:0}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon .sd-content ul li a.sd-button:hover,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:hover,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li .digg_button>a:hover,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-official .sd-content>ul>li>a.sd-button:hover,.sd-social-text .sd-content ul li a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:hover{color:
3737 #555;background:#fafafa;border:1px solid #999}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.16)}.sd-content ul li a.sd-button:before{display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font:400 16px/1 Genericons;vertical-align:top;position:relative;top:3px;text-align:center}.sd-content ul li{margin:0!important;padding:0}.sd-content ul li.preview-item a.sd-button span,.sd-social-icon-text .sd-content ul li a span,.sd-social-official .sd-content ul li a.sd-button span{margin-left:3px}.sd-content ul li.preview-item.no-icon a.sd-button span{margin-left:0}.sd-content ul li.no-icon a:before,.sd-social-text .sd-content ul li a:before{display:none}body .sd-content ul li.share-custom.no-
3738 icon a span,body .sd-social-text .sd-content ul li.share-custom a span{background-image:none;background-position:-500px -500px!important;background-repeat:no-repeat!important;padding-left:0;height:0;line-height:inherit}.sd-social-icon .sd-content ul li a.share-more{position:relative;top:2px}.sd-social-icon .sd-content ul li a.share-more span{margin-left:3px}.sd-content ul li.share-print div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-print a:before,.sd-social-icon-text .sd-content li.share-print a:before,.sd-social-official .sd-content li.share-print a:before,.sd-social-text .sd-content ul li.share-print a:before{content:'\f469'}.sd-content ul li.share-email div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-email a:before,.sd-social-icon-text .sd-content li.share-email a:before,.sd-social-official .sd-content li.share-email a:before,.sd-social-text .sd-content ul li.share-email a:before{content:'\f410'}.sd-content ul li.share-l
3739 inkedin div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-linkedin a:before,.sd-social-icon-text .sd-content li.share-linkedin a:before,.sd-social-text .sd-content ul li.share-linkedin a:before{content:'\f207'}.sd-content ul li.share-twitter div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-twitter a:before,.sd-social-icon-text .sd-content li.share-twitter a:before,.sd-social-text .sd-content ul li.share-twitter a:before{content:'\f202'}.sd-content ul li.share-reddit div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-reddit a:before,.sd-social-icon-text .sd-content li.share-reddit a:before,.sd-social-text .sd-content ul li.share-reddit a:before{content:'\f222'}.sd-content ul li.share-tumblr div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-tumblr a:before,.sd-social-icon-text .sd-content li.share-tumblr a:before,.sd-social-text .sd-content ul li.share-tumblr a:before{content:'\
3740 f214'}.sd-content ul li.share-pocket div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pocket a:before,.sd-social-icon-text .sd-content li.share-pocket a:before,.sd-social-text .sd-content ul li.share-pocket a:before{content:'\f224'}.sd-content ul li.share-skype div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-skype a:before,.sd-social-icon-text .sd-content li.share-skype a:before,.sd-social-text .sd-content ul li.share-skype a:before{content:'\f220'}.sd-content ul li.share-pinterest div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pinterest a:before,.sd-social-icon-text .sd-content li.share-pinterest a:before,.sd-social-text .sd-content ul li.share-pinterest a:before{content:'\f209'}.sd-content ul li.share-google-plus-1 div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-google-plus-1 a:before,.sd-social-icon-text .sd-content li.share-google-plus-1 a:before,.sd-social-text .s
3741 d-content ul li.share-google-plus-1 a:before{content:'\f218'}.sd-content ul li.share-facebook div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-facebook a:before,.sd-social-icon-text .sd-content li.share-facebook a:before,.sd-social-text .sd-content ul li.share-facebook a:before{content:'\f204'}.sd-content ul li.share-press-this div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-press-this a:before,.sd-social-icon-text .sd-content li.share-press-this a:before,.sd-social-official .sd-content li.share-press-this a:before,.sd-social-text .sd-content ul li.share-press-this a:before{content:'\f205'}.sd-social-official .sd-content li.share-press-this a:before{color:#2ba1cb}.sd-content ul li.advanced a.share-more:before,.sd-social-icon .sd-content ul a.share-more:before,.sd-social-icon-text .sd-content a.share-more:before,.sd-social-official .sd-content a.share-more:before,.sd-social-text .sd-content ul a.share-more:before{content:'\f415
3742 '}.sd-social-official .sd-content a.share-more:before{color:#2ba1cb}.sd-social .sd-button .share-count{background:#2ea2cc;color:#fff;border-radius:10px;display:inline-block;text-align:center;font-size:10px;padding:1px 3px;line-height:1}.sd-social-official .sd-content ul,.sd-social-official .sd-content ul li{line-height:25px!important}.sd-social-official .sd-content>ul>li>a.sd-button span{line-height:1}.sd-social-official .sd-content ul:after{content:".";display:block;height:0;clear:both;visibility:hidden}.sd-social-official .sd-content li.share-press-this a{margin:0 0 5px}.sd-social-official .sd-content ul>li{display:block;float:left;margin:0 10px 5px 0!important;height:25px}.sd-social-official .fb-share-button>span{vertical-align:top!important}.sd-social-official .sd-content .pocket_button iframe{width:98px}.sd-social-official .sd-content .skypeShare{width:55px}.googleplus1_button .g-plus{vertical-align:top!important}.reddit_button iframe{margin-top:1px}.googleplus1_button iframe,.
3743 linkedin_button>span,.pinterest_button,.pocket_button iframe,.twitter_button{margin:0!important}body .sd-social-official li a.share-more,body .sd-social-official li.share-custom a,body .sd-social-official li.share-digg a,body .sd-social-official li.share-email a,body .sd-social-official li.share-press-this a,body .sd-social-official li.share-print{position:relative;top:0}body .sd-social-icon .sd-content li.share-custom>a{padding:2px 3px 0;position:relative;top:4px}body .sd-content ul li.share-custom a.share-icon span,body .sd-social-icon .sd-content li.share-custom a span,body .sd-social-icon-text .sd-content li.share-custom a span,body .sd-social-official .sd-content li.share-custom a span,body .sd-social-text .sd-content li.share-custom a span{background-size:16px 16px;background-repeat:no-repeat;margin-left:0;padding:0 0 0 19px;display:inline-block;height:16px;line-height:16px}body .sd-social-icon .sd-content li.share-custom a span{width:0}body .sd-social-icon .sd-content li.shar
3744 e-custom a span{padding-left:16px!important}.sharing-hidden .inner{position:absolute;z-index:2;border:1px solid #ccc;padding:10px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);border-radius:2px;margin-top:5px;max-width:400px}.sharing-hidden .inner ul{margin:0!important}.sd-social-official .sd-content .sharing-hidden ul>li.share-end{clear:both;margin:0;height:0}.sharing-hidden .inner:after,.sharing-hidden .inner:before{position:absolute;z-index:1;top:-8px;left:20px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:8px solid #ccc;content:"";display:block}.sharing-hidden .inner:after{z-index:2;top:-7px;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:8px solid #fff}.sharing-hidden ul{margin:0}.sd-social-icon .sd-content ul li[class*=share-] a,.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a{border-radius:50%;-webkit-border-radi
3745 us:50%;border:0;box-shadow:none;padding:8px;position:relative;top:-2px;line-height:1;width:auto;height:auto;margin-bottom:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button>span,.sd-social-icon .sd-content ul li[class*=share-] div.option a span{line-height:1}.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a:hover{border:none;opacity:.6}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button:before{top:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button.share-custom{padding:8px 8px 6px;top:5px}.sd-social-icon .sd-content ul li a.sd-button.share-more{margin-left:10px}.sd-social-icon .sd-content ul li:first-child a.sd-button.share-more{margin-left:0}.sd-social-icon .sd-button span.share-count{position:absolute;bottom:0;right:0;border-radius:0;background:#555;font-size:9px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button{background:#e9e9e9;margin-top:2px;text-indent:0}.sd-social-
3746 icon .sd-content ul li[class*=share-].share-tumblr a.sd-button{background:#2c4762;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-facebook a.sd-button{background:#3b5998;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-twitter a.sd-button{background:#00acee;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pinterest a.sd-button{background:#ca1f27;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-digg a.sd-button{color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-press-this a.sd-button{background:#1e8cbe;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-linkedin a.sd-button{background:#0077b5;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-google-plus-1 a.sd-button{background:#dd4b39;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pocket a.sd-button{background:#ee4056;color
3747 :#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-skype a.sd-button{background:#00AFF0;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-reddit a.sd-button{background:#cee3f8;color:#555!important}.sharing-screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.sharing-screen-reader-text:active,.sharing-screen-reader-text:focus,.sharing-screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}#sharing_email{width:342px;position:absolute;z-index:1001;border:1px solid #ccc;padding:15px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);text-align:left}div.sharedaddy.sharedaddy-dark #sharing_email{border-color:#fff}#sharing_email .errors{colo
3748 r:#fff;background-color:#771a09;font-size:12px;padding:5px 8px;line-height:1;margin:10px 0 0}#sharing_email label{font-size:12px;color:#333;font-weight:700;display:block;padding:0 0 4px;text-align:left;text-shadow:none}#sharing_email form{margin:0}#sharing_email input[type=email],#sharing_email input[type=text]{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid #ccc;margin-bottom:1em;background:#fff;font-size:12px;color:#333;max-width:none;padding:1px 3px}#jetpack-source_f_name{display:none!important;position:absolute!important;left:-9000px}#sharing_email .sharing_cancel{padding:0 0 0 1em;font-size:12px;text-shadow:none}#sharing_email .recaptcha{width:312px;height:123px;margin:0 0 1em}.slideshow-window{background-color:#222;border:20px solid #222;border-radius:10px;height:0;margin-bottom:20px;overflow:hidden;padding-top:30px!important;padding-bottom:56.25%!important;position:relative;z-index:1}.slideshow-window.slideshow-white{
3749 background-color:#fff;border-color:#fff}.slideshow-window,.slideshow-window *{-moz-box-sizing:content-box;box-sizing:content-box}.slideshow-loading{height:100%;text-align:center;margin:auto}body div.slideshow-window * img{background-color:transparent!important;background-image:none!important;border-width:0!important;display:block;margin:0 auto;max-width:100%;max-height:100%;padding:0!important;position:relative;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);top:50%}.slideshow-loading img{vertical-align:middle}.slideshow-slide{display:none;height:100%!important;left:0;margin:auto;position:absolute;text-align:center;top:0;width:100%!important}.slideshow-slide img{vertical-align:middle}.slideshow-line-height-hack{overflow:hidden;width:0;font-size:0}.slideshow-slide-caption{font-size:13px;font-family:"Helvetica Neue",sans-serif;color:#f7f7f7;text-shadow:#222 1px 1px 2px;line-height:25px;height:25px;position:absolute;bottom:5px;left:0;z-index
3750 :100;width:100%;text-align:center}.slideshow-controls{z-index:1000;position:absolute;bottom:30px;margin:auto;text-align:center;width:100%;-ms-filter:"alpha(Opacity=50)";opacity:.5;direction:ltr;transition:300ms opacity ease-out}.slideshow-window:hover .slideshow-controls{-ms-filter:"alpha(Opacity=100)";opacity:1}body div div.slideshow-controls a,body div div.slideshow-controls a:hover{border:2px solid rgba(255,255,255,.1)!important;background-color:#000!important;background-color:rgba(0,0,0,.6)!important;background-image:url(../modules/shortcodes/img/slideshow-controls.png)!important;background-repeat:no-repeat;background-size:142px 16px!important;background-position:-34px 8px!important;color:#222!important;margin:0 5px!important;padding:0!important;display:inline-block!important;zoom:1;height:32px!important;width:32px!important;line-height:32px!important;text-align:center!important;-khtml-border-radius:10em!important;border-radius:10em!important;transition:300ms border-color ease-o
3751 ut}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body div div.slideshow-controls a,body div div.slideshow-controls a:hover{background-image:url(../modules/shortcodes/img/slideshow-controls-2x.png)!important}}body div div.slideshow-controls a:hover{border-color:rgba(255,255,255,1)!important}body div div.slideshow-controls a:first-child{background-position:-76px 8px!important}body div div.slideshow-controls a:last-child{background-position:-117px 8px!important}body div div.slideshow-controls a.running,body div div.slideshow-controls a:nth-child(2){background-position:-34px 8px!important}body div div.slideshow-controls a.paused{background-position:9px 8px!important}.slideshow-controls a img{border:50px dotted #f0f}body.presentation-wrapper-fullscreen-parent,html.presentation-wrapper-fullscreen-parent{overflow:hidden!important}.presentation-wrapper-fullscreen-parent #wpadminbar{display:none}.presentation-wrapper-fullscreen,.presentation-wrapper-fullscreen-parent{min-width:
3752 100%!important;min-height:100%!important;position:absolute!important;top:0!important;right:0!important;bottom:0!important;left:0!important;margin:0!important;padding:0!important;z-index:10000!important}.presentation-wrapper-fullscreen{background-color:gray;border:none!important}.presentation-wrapper-fullscreen .nav-arrow-left,.presentation-wrapper-fullscreen .nav-arrow-right{z-index:20001}.presentation-wrapper-fullscreen .nav-fullscreen-button{z-index:20002}.presentation-wrapper{margin:20px auto;border:1px solid #e5e5e5;overflow:hidden;line-height:normal}.presentation{position:relative;margin:0;overflow:hidden;outline:0}.presentation,.presentation .step{background-repeat:no-repeat;background-position:center;background-size:100% 100%}.presentation .step.fade:not(.active){opacity:0}.presentation .slide-content{padding:30px}.presentation .nav-arrow-left,.presentation .nav-arrow-right,.presentation .nav-fullscreen-button{position:absolute;width:34px;background-repeat:no-repeat;z-index:2
3753 ;opacity:0;transition:opacity .25s}.presentation .nav-arrow-left,.presentation .nav-arrow-right{height:100%;background-image:url(../modules/shortcodes/images/slide-nav.png);background-size:450% 61px}.presentation .nav-arrow-left{left:0;background-position:4px 50%}.presentation .nav-arrow-right{right:0;background-position:-120px 50%}.presentation .nav-fullscreen-button{width:32px;height:32px;margin:4px;bottom:0;right:0;z-index:3;background-image:url(../modules/shortcodes/images/expand.png);background-size:100% 100%}.presentation:hover .nav-arrow-left,.presentation:hover .nav-arrow-right{opacity:1}.presentation:hover .nav-fullscreen-button{opacity:.8}.presentation-wrapper-fullscreen .nav-fullscreen-button{background-image:url(../modules/shortcodes/images/collapse.png)}.presentation .autoplay-overlay{height:15%;width:80%;margin:30% 10%;position:relative;z-index:100;display:table;border-radius:50px;background-color:#e5e5e5;background-color:rgba(0,0,0,.75);transition:opacity .5s}.present
3754 ation .autoplay-overlay .overlay-msg{position:relative;display:table-cell;text-align:center;vertical-align:middle;color:#fff}.presentation .will-fade{opacity:0}.presentation .do-fade{opacity:1;transition:opacity .5s}#subscribe-email input{width:95%}.comment-subscription-form .subscribe-label{display:inline!important}.jetpack-video-wrapper{margin-bottom:1.6em}.jetpack-video-wrapper>.wp-video,.jetpack-video-wrapper>embed,.jetpack-video-wrapper>iframe,.jetpack-video-wrapper>object{margin-bottom:0}.jetpack-social-navigation ul{display:block;margin:0 0 1.5em;padding:0}.jetpack-social-navigation li{display:inline-block;margin:0;line-height:1}.jetpack-social-navigation a{border:0;height:1em;text-decoration:none;width:1em}.jetpack-social-navigation a:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Genericons;font-size:1em;font-style:normal;font-weight:400;height:1em;line-height:1;speak:none;text-decoration:inherit;vertical-align:t
3755 op;width:1em;content:"\f415"}.jetpack-social-navigation a[href*="codepen.io"]:before{content:"\f216"}.jetpack-social-navigation a[href*="digg.com"]:before{content:"\f221"}.jetpack-social-navigation a[href*="dribbble.com"]:before{content:"\f201"}.jetpack-social-navigation a[href*="dropbox.com"]:before{content:"\f225"}.jetpack-social-navigation a[href*="mailto:"]:before{content:"\f410"}.jetpack-social-navigation a[href*="facebook.com"]:before{content:"\f203"}.jetpack-social-navigation a[href*="flickr.com"]:before{content:"\f211"}.jetpack-social-navigation a[href*="foursquare.com"]:before{content:"\f226"}.jetpack-social-navigation a[href*="github.com"]:before{content:"\f200"}.jetpack-social-navigation a[href*="plus.google.com"]:before{content:"\f206"}.jetpack-social-navigation a[href*="instagram.com"]:before{content:"\f215"}.jetpack-social-navigation a[href*="linkedin.com"]:before{content:"\f208"}.jetpack-social-navigation a[href*="path.com"]:before{content:"\f219"}.jetpack-social-navi
3756 gation a[href*="pinterest.com"]:before{content:"\f210"}.jetpack-social-navigation a[href*="getpocket.com"]:before{content:"\f224"}.jetpack-social-navigation a[href*="polldaddy.com"]:before{content:"\f217"}.jetpack-social-navigation a[href*="reddit.com"]:before{content:"\f222"}.jetpack-social-navigation a[href$="/feed/"]:before{content:"\f413"}.jetpack-social-navigation a[href*="skype:"]:before{content:"\f220"}.jetpack-social-navigation a[href*="spotify.com"]:before{content:"\f515"}.jetpack-social-navigation a[href*="stumbleupon.com"]:before{content:"\f223"}.jetpack-social-navigation a[href*="tumblr.com"]:before{content:"\f214"}.jetpack-social-navigation a[href*="twitch.tv"]:before{content:"\f516"}.jetpack-social-navigation a[href*="twitter.com"]:before{content:"\f202"}.jetpack-social-navigation a[href*="vimeo.com"]:before{content:"\f212"}.jetpack-social-navigation a[href*="vine.co"]:before{content:"\f517"}.jetpack-social-navigation a[href*="wordpress.com"]:before,.jetpack-social-nav
3757 igation a[href*="wordpress.org"]:before{content:"\f205"}.jetpack-social-navigation a[href*="youtube.com"]:before{content:"\f213"}.tiled-gallery{clear:both;margin:0 0 20px;overflow:hidden}.tiled-gallery img{margin:2px!important}.tiled-gallery .gallery-group{float:left;position:relative}.tiled-gallery .tiled-gallery-item{float:left;margin:0;position:relative;width:inherit}.tiled-gallery .gallery-row{overflow:hidden}.tiled-gallery .tiled-gallery-item a{background:0 0;border:none;color:inherit;margin:0;padding:0;text-decoration:none;width:auto}.tiled-gallery .tiled-gallery-item img,.tiled-gallery .tiled-gallery-item img:hover{background:0 0;border:none;box-shadow:none;max-width:100%;padding:0;vertical-align:middle}.tiled-gallery-caption{background:#eee;background:rgba(255,255,255,.8);color:#333;font-size:13px;font-weight:400;overflow:hidden;padding:10px 0;position:absolute;bottom:0;text-indent:10px;text-overflow:ellipsis;width:100%;white-space:nowrap}.tiled-gallery .tiled-gallery-item-s
3758 mall .tiled-gallery-caption{font-size:11px}.widget-gallery .tiled-gallery-unresized{visibility:hidden;height:0;overflow:hidden}.tiled-gallery .tiled-gallery-item img.grayscale{position:absolute;left:0;top:0}.tiled-gallery .tiled-gallery-item img.grayscale:hover{opacity:0}.tiled-gallery.type-circle .tiled-gallery-item img{border-radius:50%!important}.tiled-gallery.type-circle .tiled-gallery-caption{display:none;opacity:0}.jetpack-display-remote-posts{margin:5px 0 20px}.jetpack-display-remote-posts h4{font-size:90%;margin:5px 0;padding:0}.jetpack-display-remote-posts h4 a{text-decoration:none}.jetpack-display-remote-posts p{margin:0!important;padding:0;line-height:1.4em!important;font-size:90%}.jetpack-display-remote-posts img{max-width:100%}.widget-grofile h4{margin:1em 0 .5em}.widget-grofile ul.grofile-urls{margin-left:0;overflow:hidden}.widget-grofile ul.grofile-accounts li{list-style:none;display:inline}.widget-grofile ul.grofile-accounts li::before{content:""!important}.widget-gr
3759 ofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite.png);background-repeat:no-repeat;width:16px;height:16px;float:left;margin-right:8px;margin-bottom:8px}.rtl .widget-grofile .grofile-accounts-logo{margin-left:8px;margin-right:0}.grofile-thumbnail{width:500px;max-width:100%}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite-2x.png);background-size:16px 784px}}div[class^=gr_custom_container]{border:1px solid gray;border-radius:10px;padding:10px 5px;background-color:#FFF;color:#000}div[class^=gr_custom_container] a{color:#000}h2[class^=gr_custom_header]{display:none}div[class^=gr_custom_each_container]{width:100%;clear:both;margin-bottom:10px;overflow:auto;padding-bottom:4px;border-bottom:1px sol
3760 id #aaa}div[class^=gr_custom_book_container]{float:right;overflow:hidden;height:60px;margin-left:4px;width:39px}div[class^=gr_custom_author]{font-size:10px}div[class^=gr_custom_tags]{font-size:10px;color:gray}div[class^=gr_custom_rating]{display:none}.widget_wpcom_social_media_icons_widget ul{list-style-type:none;margin-left:0}.widget_wpcom_social_media_icons_widget li{border:0;display:inline;margin-right:.5em}.widget_wpcom_social_media_icons_widget li a{border:0;text-decoration:none}.widget_wpcom_social_media_icons_widget .genericon{font-family:Genericons}.widget_wpcom_social_media_icons_widget .screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.widget_wpcom_social_media_icons_widget .screen-reader-text:active,.widget_wpcom_social_media_icons_widget .screen-reader-text:focus,.widget_wpcom_social_media_icons_widget .screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);cl
3761 ip:auto!important;color:#21759b;display:block;font-size:14px;font-size:.875rem;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.widgets-grid-layout{width:100%}.widgets-grid-layout:after,.widgets-grid-layout:before{content:" ";display:table}.widgets-grid-layout:after{clear:both}.widget-grid-view-image{float:left;max-width:50%}.widget-grid-view-image a{display:block;margin:0 2px 4px 0}.widget-grid-view-image:image:nth-child(even){float:right}.widget-grid-view-image:nth-child(even) a{margin:0 0 4px 2px}.widgets-grid-layout .widget-grid-view-image img{max-width:100%;height:auto}.widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:0 0;clear:none;float:left;margin:0 -5px -3px 0;padding:0 8px 6px 0;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:0 0;margin:0;padding:0;border:0}.widgets-mul
3762 ti-column-grid .avatar{vertical-align:middle}.widgets-list-layout{padding:0;margin:0;list-style-type:none}.widgets-list-layout li:after,.widgets-list-layout li:before{content:"";display:table}.widgets-list-layout li:after{clear:both}.widgets-list-layout li{zoom:1;margin-bottom:1em;list-style-type:none!important}.widgets-list-layout .widgets-list-layout-blavatar{float:left;width:21.276596%;max-width:40px;height:auto}.widgets-list-layout-links{float:right;width:73.404255%}.widgets-list-layout span{opacity:.5}.widgets-list-layout span:hover{opacity:.8}
3763 \ No newline at end of file
3764 +.jp-carousel-wrap *{line-height:inherit}.jp-carousel-overlay{background:#000}div.jp-carousel-fadeaway{position:fixed;bottom:0;z-index:2147483647;width:100%;height:15px}.jp-carousel-next-button span,.jp-carousel-previous-button span{background:url(../modules/carousel/images/arrows.png) center center/200px 126px no-repeat}.jp-carousel-msg{font-family:"Open Sans",sans-serif;font-style:normal;display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:center;margin:25px 20px 0 2px;background-color:#fff;border-left:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.jp-carousel-next-button span,.jp-carousel-previous-button span{background-image:url(../modules/carousel/images/arrows-2x.png)}}.jp-carousel-wrap{font-family:"Helvetica Neue",sans-serif!important}.jp-
3765 carousel-info{position:absolute;bottom:0;text-align:left!important;-webkit-font-smoothing:subpixel-antialiased!important}.jp-carousel-info ::selection{background:#68c9e8;color:#fff}.jp-carousel-info ::-moz-selection{background:#68c9e8;color:#fff}.jp-carousel-photo-info{position:relative;left:25%;width:50%}.jp-carousel-transitions .jp-carousel-photo-info{transition:400ms ease-out}.jp-carousel-info h2{background:none!important;border:none!important;color:#999;display:block!important;font:400 13px/1.25em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;margin:7px 0 0!important;padding:10px 0 0!important;overflow:hidden;text-align:left;text-shadow:none!important;text-transform:none!important;-webkit-font-smoothing:subpixel-antialiased}.jp-carousel-next-button,.jp-carousel-previous-button{text-indent:-9999px;overflow:hidden;cursor:pointer}.jp-carousel-next-button span,.jp-carousel-previous-button span{position:absolute;top:0;bottom:0;width:82px;zoom:1;filter:alpha(opacity
3766 =20);opacity:.2}.jp-carousel-transitions .jp-carousel-next-button span,.jp-carousel-transitions .jp-carousel-previous-button span{transition:500ms opacity ease-out}.jp-carousel-next-button:hover span,.jp-carousel-previous-button:hover span{filter:alpha(opacity=60);opacity:.6}.jp-carousel-next-button span{background-position:-110px center;right:0}.jp-carousel-previous-button span{background-position:-10px center;left:0}.jp-carousel-buttons{margin:-18px -20px 15px;padding:8px 10px;border-bottom:1px solid #222;background:#222;text-align:center}div.jp-carousel-buttons a{border:none!important;color:#999;font:400 11px/1.2em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;padding:5px 2px 5px 0;text-decoration:none!important;text-shadow:none!important;vertical-align:middle;-webkit-font-smoothing:subpixel-antialiased}div.jp-carousel-buttons a:hover{color:#68c9e8;border:none!important}.jp-carousel-transitions div.jp-carousel-buttons a:hover{transition:none!important}.jp-carou
3767 sel-next-button,.jp-carousel-previous-button,.jp-carousel-slide,.jp-carousel-slide img{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.jp-carousel-slide{position:fixed;width:0;bottom:0;background-color:#000;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}.jp-carousel-slide.selected{position:absolute!important;filter:alpha(opacity=100);opacity:1}.jp-carousel-slide{filter:alpha(opacity=25);opacity:.25}.jp-carousel-slide img{display:block;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;background:none!important;border:none!important;padding:0!important;box-shadow:0 2px 8px rgba(0,0,0,.1);zoom:1}.jp-carousel-transitions .jp-carousel-slide{transition:opacity 400ms linear}.jp-carousel-close-hint{color:#999;cursor:default;letter-spacing:0!important;padding:.35em 0 0;position:absolute;text-align:l
3768 eft;width:90%}.jp-carousel-transitions .jp-carousel-close-hint{transition:color 200ms linear}.jp-carousel-close-hint span{cursor:pointer;background-color:#000;background-color:rgba(0,0,0,.8);display:block;height:22px;font:400 24px/1 "Helvetica Neue",sans-serif!important;line-height:22px;margin:0 0 0 .4em;text-align:center;vertical-align:middle;width:22px;border-radius:4px}.jp-carousel-transitions .jp-carousel-close-hint span{transition:border-color 200ms linear}.jp-carousel-close-hint:hover{cursor:default;color:#fff}.jp-carousel-close-hint:hover span{border-color:#fff}a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background:url(../modules/carousel/images/carousel-sprite.png?5) 0 0/16px 200px no-repeat}div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{margin:0 14px 0 0!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#303030;paddi
3769 ng-right:8px!important;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;margin:0 2px 0 -12px!important}div.jp-carousel-buttons a.jp-carousel-reblog,div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{background-position:6px -36px;padding-right:auto!important;padding-left:26px!important;color:#999}div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -156px;padding-left:19px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{cursor:default}div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:6px -56px;color:#68c9e8}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background-image:url(../
3770 modules/carousel/images/carousel-sprite-2x.png?5)}}div#carousel-reblog-box{background:#222;padding:3px 0 0;display:none;margin:5px auto 0;border-radius:2px;box-shadow:0 0 20px rgba(0,0,0,.9);height:74px;width:565px}#carousel-reblog-box textarea{background:#999;font:13px/1.4 "Helvetica Neue",sans-serif!important;color:#444;padding:3px 6px;width:370px;height:48px;float:left;margin:6px 9px 0;border:1px solid #666;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:2px}#carousel-reblog-box textarea:focus{background:#ccc;color:#222}#carousel-reblog-box label{color:#aaa;font-size:11px;padding-right:2px;padding-left:2px;display:inline;font-weight:400}#carousel-reblog-box select{width:110px;padding:0;font-size:12px;font-family:"Helvetica Neue",sans-serif!important;background:#333;color:#eee;border:1px solid #444;margin-top:5px}#carousel-reblog-box .submit,#wrapper #carousel-reblog-box p.response{float:left;width:154px;padding-top:0;padding-left:1px;overflow:hidden;height:34px;margin:3
3771 px 0 0 2px!important}#wrapper #carousel-reblog-box p.response{font-size:13px;clear:none;padding-left:2px;height:34px;color:#aaa}#carousel-reblog-box input#carousel-reblog-submit,#jp-carousel-comment-form-button-submit{font:13px/24px "Helvetica Neue",sans-serif!important;margin-top:8px;padding:0 10px!important;border-radius:1em;height:24px;color:#333;cursor:pointer;font-weight:400;background:#aaa;border:1px solid #444}#carousel-reblog-box input#carousel-reblog-submit:hover,#jp-carousel-comment-form-button-submit:hover{background:#ccc}#carousel-reblog-box .canceltext{color:#aaa;font-size:11px;line-height:24px}#carousel-reblog-box .canceltext a{color:#fff}.jp-carousel-titleanddesc{border-top:1px solid #222;color:#999;font-size:15px;padding-top:24px;margin-bottom:20px;font-weight:400}.jp-carousel-titleanddesc-title{font:300 1.5em/1.1 "Helvetica Neue",sans-serif!important;text-transform:none!important;color:#fff;margin:0 0 15px;padding:0}.jp-carousel-titleanddesc-desc p{color:#999;line-h
3772 eight:1.4;margin-bottom:.75em}.jp-carousel-comments p a,.jp-carousel-info h2 a,.jp-carousel-titleanddesc p a{color:#fff!important;border:none!important;text-decoration:underline!important;font-weight:400!important;font-style:normal!important}.jp-carousel-titleanddesc p b,.jp-carousel-titleanddesc p strong{font-weight:700;color:#999}.jp-carousel-titleanddesc p em,.jp-carousel-titleanddesc p i{font-style:italic;color:#999}.jp-carousel-comments p a:hover,.jp-carousel-info h2 a:hover,.jp-carousel-titleanddesc p a:hover{color:#68c9e8!important}.jp-carousel-titleanddesc p:empty{display:none}.jp-carousel-left-column-wrapper h1:after,.jp-carousel-left-column-wrapper h1:before,.jp-carousel-photo-info h1:after,.jp-carousel-photo-info h1:before{content:none!important}.jp-carousel-image-meta{background:#111;border:1px solid #222;color:#fff;font:12px/1.4 "Helvetica Neue",sans-serif!important;overflow:hidden;padding:18px 20px;width:209px!important}.jp-carousel-image-meta h5,.jp-carousel-image-met
3773 a li{font-family:"Helvetica Neue",sans-serif!important;position:inherit!important;top:auto!important;right:auto!important;left:auto!important;bottom:auto!important;background:none!important;border:none!important;font-weight:400!important;line-height:1.3em!important}.jp-carousel-image-meta ul{margin:0!important;padding:0!important;list-style:none!important}.jp-carousel-image-meta li{width:48%!important;float:left!important;margin:0 2% 15px 0!important;color:#fff!important;font-size:13px!important}.jp-carousel-image-meta h5{color:#999!important;text-transform:uppercase!important;font-size:10px!important;margin:0 0 2px!important;letter-spacing:.1em!important}a.jp-carousel-image-download{padding-left:23px;display:inline-block;clear:both;color:#999;line-height:1;font-weight:400;font-size:13px;text-decoration:none;background-position:0 -82px}a.jp-carousel-image-download span.photo-size{font-size:11px;border-radius:1em;margin-left:2px;display:inline-block}a.jp-carousel-image-download span.
3774 photo-size-times{padding:0 1px 0 2px}a.jp-carousel-image-download:hover{background-position:0 -122px;color:#68c9e8;border:none!important}.jp-carousel-image-map{position:relative;margin:-20px -20px 20px;border-bottom:1px solid rgba(255,255,255,.17);height:154px}.jp-carousel-image-map img.gmap-main{border-top-left-radius:6px;border-right:1px solid rgba(255,255,255,.17)}.jp-carousel-image-map div.gmap-topright{width:94px;height:154px;position:absolute;top:0;right:0}.jp-carousel-image-map div.imgclip{overflow:hidden;border-top-right-radius:6px}.jp-carousel-image-map div.gmap-topright img{margin-left:-40px}.jp-carousel-image-map img.gmap-bottomright{position:absolute;top:96px;right:0}.jp-carousel-comments{font:15px/1.7 "Helvetica Neue",sans-serif!important;font-weight:400;background:none}.jp-carousel-comments p a:active,.jp-carousel-comments p a:focus,.jp-carousel-comments p a:hover{color:#68c9e8!important}.jp-carousel-comment{background:none;color:#999;margin-bottom:20px;clear:left;over
3775 flow:auto;width:100%}.jp-carousel-comment p{color:#999!important}.jp-carousel-comment .comment-author{font-size:13px;font-weight:400;padding:0;width:auto;display:inline;float:none;border:none;margin:0}.jp-carousel-comment .comment-author a{color:#fff}.jp-carousel-comment .comment-gravatar{float:left}.jp-carousel-comment .comment-content{border:none;margin-left:85px;padding:0}.jp-carousel-comment .avatar{margin:0 20px 0 0;border-radius:4px;border:none!important;padding:0!important;background-color:transparent!important}.jp-carousel-comment .comment-date{color:#999;margin-top:4px;font-size:11px;display:inline;float:right}#jp-carousel-comment-form{margin:0 0 10px!important;float:left;width:100%}textarea#jp-carousel-comment-form-comment-field{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:15px/1.4 "Helvetica Neue",sans-serif!important;width:100%;padding:10px 10px 5px;margin:0;float:none;height:147px;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:3px;ove
3776 rflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box}textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#555}textarea#jp-carousel-comment-form-comment-field:focus{background:#ccc;color:#222}textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#aaa}#jp-carousel-comment-form-spinner{color:#fff;margin:22px 0 0 10px;display:block;width:20px;height:20px;float:left}#jp-carousel-comment-form-submit-and-info-wrapper{display:none;overflow:hidden;width:100%}#jp-carousel-comment-form-commenting-as input{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:13px/1.4 "Helvetica Neue",sans-serif!important;padding:3px 6px;float:left;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:2px;width:285px}#jp-carousel-comment-form-commenting-as input:focus{background:#ccc;color:#222}#jp-carousel-comment-form-commenting-as p{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:22px 0 0;float:left}#jp-
3777 carousel-comment-form-commenting-as fieldset{float:left;border:none;margin:20px 0 0;padding:0;clear:both}#jp-carousel-comment-form-commenting-as label{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:0 20px 3px 0;float:left;width:100px}#jp-carousel-comment-form-button-submit{margin-top:20px;float:right}#jp-carousel-comment-form-container,#js-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-post-results{display:none;overflow:auto;width:100%}#jp-carousel-comment-post-results span{display:block;text-align:center;margin-top:20px;width:100%;overflow:auto;padding:1em 0;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(0,0,0,.7);border-radius:2px;font:13px/1.4 "Helvetica Neue",sans-serif!important;border:1px solid rgba(255,255,255,.17);box-shadow:inset 0 0 5px 5px rgba(0,0,0,1)}.jp-carousel-comment-post-error{color:#DF4926}#jp-carousel-comments-closed{display:none;color:#999}#jp-carousel-comments-loading{font:400
3778 15px/1.7 "Helvetica Neue",sans-serif!important;display:none;color:#999;text-align:left;margin-bottom:20px}.jp-carousel-light .jp-carousel-overlay{background:#fff}.jp-carousel-light .jp-carousel-next-button:hover span,.jp-carousel-light .jp-carousel-previous-button:hover span{opacity:.8}.jp-carousel-light .jp-carousel-close-hint:hover,.jp-carousel-light .jp-carousel-titleanddesc div{color:#000!important}.jp-carousel-light .jp-carousel-comment .comment-author a,.jp-carousel-light .jp-carousel-comments p a,.jp-carousel-light .jp-carousel-info h2 a,.jp-carousel-light .jp-carousel-titleanddesc p a{color:#1e8cbe!important}.jp-carousel-light .jp-carousel-comment .comment-author a:hover,.jp-carousel-light .jp-carousel-comments p a:hover,.jp-carousel-light .jp-carousel-info h2 a:hover,.jp-carousel-light .jp-carousel-titleanddesc p a:hover{color:#f1831e!important}.jp-carousel-light .jp-carousel-comment,.jp-carousel-light .jp-carousel-comment p,.jp-carousel-light .jp-carousel-info h2,.jp-carou
3779 sel-light .jp-carousel-titleanddesc,.jp-carousel-light .jp-carousel-titleanddesc p,.jp-carousel-light .jp-carousel-titleanddesc p b,.jp-carousel-light .jp-carousel-titleanddesc p em,.jp-carousel-light .jp-carousel-titleanddesc p i,.jp-carousel-light .jp-carousel-titleanddesc p strong,.jp-carousel-light div.jp-carousel-buttons a{color:#666}.jp-carousel-light .jp-carousel-buttons{border-bottom-color:#f0f0f0;background:#f5f5f5}.jp-carousel-light div.jp-carousel-buttons a:hover{text-decoration:none;color:#f1831e}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:4px -56px;padding-left:24px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#2ea2cc;color:#fff}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -176px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{backgroun
3780 d-position:5px -36px}.jp-carousel-light div#carousel-reblog-box{background:#eee;box-shadow:0 2px 10px rgba(0,0,0,.1);border:1px solid #ddd}.jp-carousel-light #carousel-reblog-box textarea{color:#666;border:1px solid #cfcfcf;background:#fff}.jp-carousel-light #carousel-reblog-box .canceltext{color:#888}.jp-carousel-light #carousel-reblog-box .canceltext a{color:#666}.jp-carousel-light #carousel-reblog-box select{background:#eee;color:#333;border:1px solid #aaa}#jp-carousel-comment-form-button-submit,.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit{color:#333;background:#fff;border:1px solid #aaa}.jp-carousel-light .jp-carousel-image-meta{background:#fafafa;border:1px solid #eee;border-top-color:#f5f5f5;border-left-color:#f5f5f5;color:#333}.jp-carousel-light .jp-carousel-image-meta li{color:#000!important}.jp-carousel-light .jp-carousel-close-hint{color:#ccc}.jp-carousel-light .jp-carousel-close-hint span{background-color:#fff;border-color:#ccc}.jp-carousel-light #
3781 jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#aaa}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus{color:#333}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#ddd}.jp-carousel-light a.jp-carousel-image-download{background-position:0 -122px}.jp-carousel-light a.jp-carousel-image-download:hover{background-position:0 -122px;color:#f1831e}.jp-carousel-light textarea#jp-carousel-comment-form-comment-field{background:#fbfbfb;color:#333;border:1px solid #dfdfdf;box-shadow:inset 2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input{background:#fbfbfb;border:1px solid #dfdfdf;color:#333;box-shadow:inset 2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus{background:#fbfbfb;color:#333}.jp-carousel-light #jp-carousel-comment-post-results span{background:#f7f7f7;border:1px solid #dfdfdf;box-shadow:inset 0 0 5px rgba(0,0,
3782 0,.05)}.jp-carousel-light .jp-carousel-slide{background-color:#fff}.jp-carousel-light .jp-carousel-titleanddesc{border-top:1px solid #eee}@media only screen and (max-width:760px){.jp-carousel-info{margin:0 10px!important}.jp-carousel-buttons,.jp-carousel-next-button,.jp-carousel-previous-button{display:none!important}.jp-carousel-image-meta{float:none!important;width:100%!important;-moz-box-sizing:border-box;box-sizing:border-box}.jp-carousel-close-hint{font-weight:800!important;font-size:26px!important;position:fixed!important;top:-10px}.jp-carousel-slide img{filter:alpha(opacity=100);opacity:1}.jp-carousel-wrap{background-color:#000}.jp-carousel-fadeaway{display:none}#jp-carousel-comment-form-container{display:none!important}.jp-carousel-titleanddesc{padding-top:0!important;border:none!important}.jp-carousel-titleanddesc-title{font-size:1em!important}.jp-carousel-left-column-wrapper{padding:0;width:100%!important}.jp-carousel-photo-info{left:0!important;width:100%!important}}.cont
3783 act-form .clear-form{clear:both}.contact-form input[type=email],.contact-form input[type=text]{width:300px;max-width:98%;margin-bottom:13px}.contact-form select{margin-bottom:13px}.contact-form textarea{height:200px;width:80%;float:none;margin-bottom:13px}.contact-form input[type=checkbox],.contact-form input[type=radio]{float:none;margin-bottom:13px}.contact-form label{margin-bottom:3px;float:none;font-weight:700;display:block}.contact-form label.checkbox,.contact-form label.radio{margin-bottom:3px;float:none;font-weight:700;display:inline-block}.contact-form label span{color:#AAA;margin-left:4px;font-weight:400}.contact-form-submission{margin-bottom:4em;padding:1.5em 1em}.contact-form-submission p{margin:0 auto}.form-errors .form-error-message{color:red}.textwidget .contact-form input[type=email],.textwidget .contact-form input[type=text],.textwidget .contact-form textarea{width:250px;max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box}#jetpack-check-feedback-spam{marg
3784 in:1px 8px 0 0}.jetpack-check-feedback-spam-spinner{display:inline-block;margin-top:7px}.infinite-loader{color:#000;display:block;height:28px;text-indent:-9999px}#infinite-handle span{background:#333;border-radius:1px;color:#eee;cursor:pointer;font-size:13px;padding:6px 16px}#infinite-handle span button,#infinite-handle span button:focus,#infinite-handle span button:hover{display:inline;position:static;padding:0;margin:0;border:none;line-height:inherit;background:0 0;color:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}#infinite-handle span button::-moz-focus-inner{margin:0;padding:0;border:none}@media (max-width:800px){#infinite-handle span:before{display:none}#infinite-handle span{display:block}}#infinite-footer{position:fixed;bottom:-50px;left:0;width:100%}#infinite-footer a{text-decoration:none}#infinite-footer .blog-credits a:hover,#infinite-footer .blog-info a:hover{color:#444;text-decoration:underline}#infinite-footer .container{background:rg
3785 ba(255,255,255,.8);border-color:#ccc;border-color:rgba(0,0,0,.1);border-style:solid;border-width:1px 0 0;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 auto;overflow:hidden;padding:1px 20px;width:780px}#infinite-footer .blog-credits,#infinite-footer .blog-info{-moz-box-sizing:border-box;box-sizing:border-box;line-height:25px}#infinite-footer .blog-info{float:left;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:40%}#infinite-footer .blog-credits{font-weight:400;float:right;width:60%}#infinite-footer .blog-info a{color:#111;font-size:14px;font-weight:700}#infinite-footer .blog-credits{color:#888;font-size:12px;text-align:right}#infinite-footer .blog-credits a{color:#666}.infinity-end.neverending #infinite-footer{display:none}@media (max-width:640px){#infinite-footer .container{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#infinite-footer .blog-info{width:30%}#infinite-footer .blog-credits{width:70%}#infinite-footer .blog-credit
3786 s,#infinite-footer .blog-info a{font-size:10px}}@media (max-width:640px){#infinite-footer{position:static}}#wpadminbar li#wp-admin-bar-admin-bar-likes-widget{width:61px;overflow:hidden}#wpadminbar iframe.admin-bar-likes-widget{width:61px;height:28px;min-height:28px;border-width:0;position:absolute;top:0}div.jetpack-likes-widget-wrapper{width:100%;min-height:50px;position:relative}div.jetpack-likes-widget-wrapper .sd-link-color{font-size:12px}div.jetpack-likes-widget-wrapper.slim-likes-widget{width:1px;min-height:0}#likes-other-gravatars{display:none;position:absolute;padding:10px 10px 12px;background-color:#2e4453;border-width:0;box-shadow:0 0 10px #2e4453;box-shadow:0 0 10px rgba(46,68,83,.6);min-width:130px;z-index:1000}#likes-other-gravatars *{line-height:normal}#likes-other-gravatars .likes-text{color:#fff;font-size:12px;padding-bottom:8px}#likes-other-gravatars li,#likes-other-gravatars ul{margin:0;padding:0;text-indent:0;list-style-type:none}#likes-other-gravatars li::before{c
3787 ontent:""}#likes-other-gravatars ul.wpl-avatars{overflow:auto;display:block;max-height:190px}#likes-other-gravatars ul.wpl-avatars li{width:32px;height:32px;float:left;margin:0 5px 5px 0}#likes-other-gravatars ul.wpl-avatars li a{margin:0 2px 0 0;border-bottom:none!important;display:block}#likes-other-gravatars ul.wpl-avatars li a img{background:0 0;border:none;margin:0!important;padding:0!important;position:static}div.sd-box{border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.13)}.comment-likes-widget,.entry-content .post-likes-widget,.post-likes-widget{margin:0;border-width:0;display:block}.post-likes-widget-placeholder{margin:0;border-width:0;position:relative}.post-likes-widget-placeholder .button{display:none}.post-likes-widget-placeholder .loading{color:#999;font-size:12px}.slim-likes-widget .post-likes-widget{width:auto;float:none}div.sharedaddy.sd-like-enabled .sd-like h3{display:none}div.sharedaddy.sd-like-enabled .sd-like .post-likes-widget{width:100%;float:none;pos
3788 ition:absolute;top:0}.comment-likes-widget{width:100%}.pd-rating{display:block!important}.sd-gplus .sd-title{display:none}#jp-relatedposts{display:none;padding-top:1em;margin:1em 0;position:relative;clear:both}.jp-relatedposts:after{content:'';display:block;clear:both}#jp-relatedposts h3.jp-relatedposts-headline{margin:0 0 1em;display:inline-block;float:left;font-size:9pt;font-weight:700;font-family:inherit}#jp-relatedposts h3.jp-relatedposts-headline em:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}#jp-relatedposts h3.jp-relatedposts-headline em{font-style:normal;font-weight:700}#jp-relatedposts .jp-relatedposts-items{clear:left}#jp-relatedposts .jp-relatedposts-items-visual{margin-right:-20px}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{float:left;width:33%;margin:0 0 1em;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}#jp-relatedposts .jp-rel
3789 atedposts-items-visual .jp-relatedposts-post{padding-right:20px;filter:alpha(opacity=80);-moz-opacity:.8;opacity:.8}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n+4),#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post:nth-child(3n+4){clear:both}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover{filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items p,#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-size:14px;line-height:20px;margin:0}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs{position:relative}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay{position:absolute;top:0;bottom:0;left:0;right:0;display:block;border-bottom:0}#jp-relatedposts .jp
3790 -relatedposts-items p{margin-bottom:0}#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{text-transform:none;margin:0;font-family:inherit;display:block;max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a{font-size:inherit;font-weight:400;text-decoration:none;filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span{display:block;max-width:90%;overflow:hidden;text-overflow:ellipsis}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post span{max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-rela
3791 tedposts-post-context,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{opacity:.6}#jp-relatedposts .jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt,.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{display:none}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt{overflow:hidden}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs span{margin-bottom:1em}@media only screen and (max-width:640px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:50%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n){clear:left}#jp-relatedposts .jp-relatedposts-items-visual{margin-right:20px}}@media only screen and (max-width:320px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:100%;clear:both;margin:0 0 1em}}#jp-post-flair{padding-top:.5em}#content div.sh
3792 aredaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{margin:0 0 1em;display:inline-block;line-height:1.2;font-size:9pt;font-weight:700}div.sharedaddy h3.sd-title:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;margin-bottom:1em}body.highlander-light h3.sd-title:before{border-top:1px solid rgba(0,0,0,.2)}body.highlander-dark h3.sd-title:before{border-top:1px solid rgba(255,255,255,.4)}.sd-content ul{padding:0!important;margin:0 0 .7em!important;list-style:none!important}.sd-content ul li{display:inline-block}.sd-block.sd-gplus{margin:0 0 .5em}.sd-gplus .sd-content{font-size:12px}#sharing_email .sharing_send,.sd-content ul li .option a.share-ustom,.sd-content ul li a.sd-button,.sd-content ul li.advanced a.share-more,.sd-content ul li.preview-item div.option.option-smart-off a,.sd-social-icon .sd-content ul li a.sd-button,.sd-social-icon-text .sd-content ul li a.sd-button,.sd-social-official .sd-content>ul>li .digg_butto
3793 n >a,.sd-social-official .sd-content>ul>li>a.sd-button,.sd-social-text .sd-content ul li a.sd-button{text-decoration:none!important;display:inline-block;margin:0 5px 5px 0;font-size:12px;font-family:"Open Sans",sans-serif;font-weight:400;border-radius:3px;color:#777!important;background:#f8f8f8;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,.08);text-shadow:none;line-height:23px;padding:1px 8px 0 5px}.sd-content ul li .option a.share-ustom span,.sd-content ul li a.sd-button>span,.sd-content ul li.advanced a.share-more span,.sd-content ul li.preview-item div.option.option-smart-off a span,.sd-social-icon-text .sd-content ul li a.sd-button>span,.sd-social-official .sd-content>ul>li .digg_button >a span,.sd-social-official .sd-content>ul>li>a.sd-button span,.sd-social-text .sd-content ul li a.sd-button span{line-height:23px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button,.sd-social
3794 -official .sd-content>ul>li .digg_button>a,.sd-social-official .sd-content>ul>li>a.sd-button{line-height:17px;box-shadow:none;vertical-align:top}.sd-social-official .sd-content ul li a.sd-button>span{line-height:17px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,.sd-social-official .sd-content>ul>li .digg_button>a:before,.sd-social-official .sd-content>ul>li>a.sd-button:before{margin-bottom:-1px}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon .sd-content ul li a.sd-button:hover,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:hover,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li .digg_button>a:hover,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-official .sd-content>ul>li>a.sd-button:hover,.sd-social-text .sd-content u
3795 l li a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:hover{color:#555;background:#fafafa;border:1px solid #999}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.16)}.sd-content ul li a.sd-button:before{display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font:400 18px/1 social-logos;vertical-align:top;text-align:center}.sd-social-icon-text ul li a.sd-button:before{position:relative;top:2px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-content ul li a.sd-button:before{position:relative;top:2px}}.sd-social-official ul li a.sd-button:before{position:relative;top:-2px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-social-official ul li a.sd-button:be
3796 fore{top:0}}.sd-content ul li{margin:0!important;padding:0}.sd-content ul li.preview-item a.sd-button span,.sd-social-icon-text .sd-content ul li a span,.sd-social-official .sd-content ul li a.sd-button span{margin-left:3px}.sd-content ul li.preview-item.no-icon a.sd-button span{margin-left:0}.sd-content ul li.no-icon a:before,.sd-social-text .sd-content ul li a:before{display:none}body .sd-content ul li.share-custom.no-icon a span,body .sd-social-text .sd-content ul li.share-custom a span{background-image:none;background-position:-500px -500px!important;background-repeat:no-repeat!important;padding-left:0;height:0;line-height:inherit}.sd-social-icon .sd-content ul li a.share-more{position:relative;top:-4px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-social-icon .sd-content ul li a.share-more{top:2px}}@-moz-document url-prefix(){.sd-social-icon .sd-content ul li a.share-more{top:2px}}.sd-social-icon .sd-content ul li a.share-more span{margin-left:3px}.sd-content ul li.s
3797 hare-print div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-print a:before,.sd-social-icon-text .sd-content li.share-print a:before,.sd-social-official .sd-content li.share-print a:before,.sd-social-text .sd-content ul li.share-print a:before{content:'\f469'}.sd-content ul li.share-email div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-email a:before,.sd-social-icon-text .sd-content li.share-email a:before,.sd-social-official .sd-content li.share-email a:before,.sd-social-text .sd-content ul li.share-email a:before{content:'\f410'}.sd-content ul li.share-linkedin div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-linkedin a:before,.sd-social-icon-text .sd-content li.share-linkedin a:before,.sd-social-text .sd-content ul li.share-linkedin a:before{content:'\f207'}.sd-content ul li.share-twitter div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-twitter a:before,.sd-social-icon-
3798 text .sd-content li.share-twitter a:before,.sd-social-text .sd-content ul li.share-twitter a:before{content:'\f202'}.sd-content ul li.share-reddit div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-reddit a:before,.sd-social-icon-text .sd-content li.share-reddit a:before,.sd-social-text .sd-content ul li.share-reddit a:before{content:'\f222'}.sd-content ul li.share-tumblr div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-tumblr a:before,.sd-social-icon-text .sd-content li.share-tumblr a:before,.sd-social-text .sd-content ul li.share-tumblr a:before{content:'\f607'}.sd-content ul li.share-pocket div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pocket a:before,.sd-social-icon-text .sd-content li.share-pocket a:before,.sd-social-text .sd-content ul li.share-pocket a:before{content:'\f224'}.sd-content ul li.share-pinterest div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pinteres
3799 t a:before,.sd-social-icon-text .sd-content li.share-pinterest a:before,.sd-social-text .sd-content ul li.share-pinterest a:before{content:'\f210'}.sd-content ul li.share-google-plus-1 div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-google-plus-1 a:before,.sd-social-icon-text .sd-content li.share-google-plus-1 a:before,.sd-social-text .sd-content ul li.share-google-plus-1 a:before{content:'\f218'}.sd-content ul li.share-facebook div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-facebook a:before,.sd-social-icon-text .sd-content li.share-facebook a:before,.sd-social-text .sd-content ul li.share-facebook a:before{content:'\f203'}.sd-content ul li.share-press-this div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-press-this a:before,.sd-social-icon-text .sd-content li.share-press-this a:before,.sd-social-official .sd-content li.share-press-this a:before,.sd-social-text .sd-content ul li.share-press-this
3800 a:before{content:'\f205'}.sd-social-official .sd-content li.share-press-this a:before{color:#2ba1cb}.sd-content ul li.share-telegram div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-telegram a:before,.sd-social-icon-text .sd-content li.share-telegram a:before,.sd-social-official .sd-content li.share-telegram a:before,.sd-social-text .sd-content ul li.share-telegram a:before{content:'\f606'}.sd-social-official .sd-content li.share-telegram a:before{color:#08c}.sd-content ul li.share-skype div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-skype a:before,.sd-social-icon-text .sd-content li.share-skype a:before,.sd-social-text .sd-content ul li.share-skype a:before{content:'\f220'}.sd-content ul li.advanced a.share-more:before,.sd-social-icon .sd-content ul a.share-more:before,.sd-social-icon-text .sd-content a.share-more:before,.sd-social-official .sd-content a.share-more:before,.sd-social-text .sd-content ul a.share-more:before{co
3801 ntent:'\f415'}.sd-social-official .sd-content a.share-more:before{color:#2ba1cb}.sd-content ul li.share-jetpack-whatsapp div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-jetpack-whatsapp a:before,.sd-social-icon-text .sd-content li.share-jetpack-whatsapp a:before,.sd-social-official .sd-content li.share-jetpack-whatsapp a:before,.sd-social-text .sd-content ul li.share-jetpack-whatsapp a:before{content:'\f608'}.sd-social-official .sd-content li.share-jetpack-whatsapp a:before{color:#43d854}.sd-social-icon .sd-content ul li[class*=share-].share-jetpack-whatsapp a.sd-button{background:#43d854;color:#fff!important}.sd-social .sd-button .share-count{background:#2ea2cc;color:#fff;border-radius:10px;display:inline-block;text-align:center;font-size:10px;padding:1px 3px;line-height:1}.sd-social-official .sd-content ul,.sd-social-official .sd-content ul li{line-height:25px!important}.sd-social-official .sd-content>ul>li>a.sd-button span{line-height:1}.sd-social-off
3802 icial .sd-content ul:after{content:".";display:block;height:0;clear:both;visibility:hidden}.sd-social-official .sd-content li.share-press-this a{margin:0 0 5px}.sd-social-official .sd-content ul>li{display:block;float:left;margin:0 10px 5px 0!important;height:25px}.sd-social-official .fb-share-button>span{vertical-align:top!important}.sd-social-official .sd-content .pocket_button iframe{width:98px}.googleplus1_button .g-plus{vertical-align:top!important}.reddit_button iframe{margin-top:1px}.googleplus1_button iframe,.linkedin_button>span,.pinterest_button,.pocket_button iframe,.twitter_button{margin:0!important}.sd-social-official .sd-content .share-skype{width:55px}body .sd-social-official li a.share-more,body .sd-social-official li.share-custom a,body .sd-social-official li.share-digg a,body .sd-social-official li.share-email a,body .sd-social-official li.share-press-this a,body .sd-social-official li.share-print{position:relative;top:0}body .sd-social-icon .sd-content li.share-cu
3803 stom>a{padding:2px 3px 0;position:relative;top:4px}body .sd-content ul li.share-custom a.share-icon span,body .sd-social-icon .sd-content li.share-custom a span,body .sd-social-icon-text .sd-content li.share-custom a span,body .sd-social-official .sd-content li.share-custom a span,body .sd-social-text .sd-content li.share-custom a span{background-size:16px 16px;background-repeat:no-repeat;margin-left:0;padding:0 0 0 19px;display:inline-block;height:16px;line-height:16px}body .sd-social-icon .sd-content li.share-custom a span{width:0;padding-left:16px!important}.sharing-hidden .inner{position:absolute;z-index:2;border:1px solid #ccc;padding:10px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);border-radius:2px;margin-top:5px;max-width:400px}.sharing-hidden .inner ul{margin:0!important}.sd-social-official .sd-content .sharing-hidden ul>li.share-end{clear:both;margin:0!important;height:0!important}.sharing-hidden .inner:after,.sharing-hidden .inner:before{position:absolute;z-index
3804 :1;top:-8px;left:20px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:8px solid #ccc;content:"";display:block}.sharing-hidden .inner:after{z-index:2;top:-7px;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:8px solid #fff}.sharing-hidden ul{margin:0}.sd-social-icon .sd-content ul li[class*=share-] a,.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a{border-radius:50%;-webkit-border-radius:50%;border:0;box-shadow:none;padding:7px;position:relative;top:-2px;line-height:1;width:auto;height:auto;margin-bottom:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button>span,.sd-social-icon .sd-content ul li[class*=share-] div.option a span{line-height:1}.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a:hover{border:none;opacity:.6}.sd-social-icon .sd-content ul li[c
3805 lass*=share-] a.sd-button:before{top:1px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button.share-custom{padding:8px 8px 6px;top:5px}.sd-social-icon .sd-content ul li a.sd-button.share-more{margin-left:10px}.sd-social-icon .sd-content ul li:first-child a.sd-button.share-more{margin-left:0}.sd-social-icon .sd-button span.share-count{position:absolute;bottom:0;right:0;border-radius:0;background:#555;font-size:9px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button{background:#e9e9e9;margin-top:2px;text-indent:0}.sd-social-icon .sd-content ul li[class*=share-].share-tumblr a.sd-button{background:#2c4762;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-facebook a.sd-button{background:#3b5998;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-twitter a.sd-button{background:#00acee;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pinterest a.sd-button{background:#ca1f27;color:#fff!important}.
3806 sd-social-icon .sd-content ul li[class*=share-].share-digg a.sd-button{color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-press-this a.sd-button{background:#1e8cbe;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-telegram a.sd-button{background:#08c;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-linkedin a.sd-button{background:#0077b5;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-google-plus-1 a.sd-button{background:#dd4b39;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pocket a.sd-button{background:#ee4056;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-reddit a.sd-button{background:#cee3f8;color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-skype a.sd-button{background:#00AFF0;color:#fff!important}.sharing-screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;wi
3807 dth:1px;overflow:hidden}.sharing-screen-reader-text:active,.sharing-screen-reader-text:focus,.sharing-screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}#sharing_email{width:342px;position:absolute;z-index:1001;border:1px solid #ccc;padding:15px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);text-align:left}div.sharedaddy.sharedaddy-dark #sharing_email{border-color:#fff}#sharing_email .errors{color:#fff;background-color:#771a09;font-size:12px;padding:5px 8px;line-height:1;margin:10px 0 0}#sharing_email label{font-size:12px;color:#333;font-weight:700;display:block;padding:0 0 4px;text-align:left;text-shadow:none}#sharing_email form{margin:0}#sharing_email input[type=email],#sharing_email input[type=text]{width:100%;box-sizing:bord
3808 er-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid #ccc;margin-bottom:1em;background:#fff;font-size:12px;color:#333;max-width:none;padding:1px 3px}#jetpack-source_f_name{display:none!important;position:absolute!important;left:-9000px}#sharing_email .sharing_cancel{padding:0 0 0 1em;font-size:12px;text-shadow:none}#sharing_email .recaptcha{width:312px;height:123px;margin:0 0 1em}.slideshow-window{background-color:#222;border:20px solid #222;border-radius:10px;height:0;margin-bottom:20px;overflow:hidden;padding-top:30px!important;padding-bottom:56.25%!important;position:relative;z-index:1}.slideshow-window.slideshow-white{background-color:#fff;border-color:#fff}.slideshow-window,.slideshow-window *{-moz-box-sizing:content-box;box-sizing:content-box}.slideshow-loading{height:100%;text-align:center;margin:auto}body div.slideshow-window * img{background-color:transparent!important;background-image:none!important;border-width:0!important;display:block;margin:
3809 0 auto;max-width:100%;max-height:100%;padding:0!important;position:relative;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);top:50%}.slideshow-loading img{vertical-align:middle}.slideshow-slide{display:none;height:100%!important;left:0;margin:auto;position:absolute;text-align:center;top:0;width:100%!important}.slideshow-slide img{vertical-align:middle}.slideshow-line-height-hack{overflow:hidden;width:0;font-size:0}.slideshow-slide-caption{font-size:13px;font-family:"Helvetica Neue",sans-serif;color:#f7f7f7;text-shadow:#222 1px 1px 2px;line-height:25px;height:25px;position:absolute;bottom:5px;left:0;z-index:100;width:100%;text-align:center}.slideshow-controls{z-index:1000;position:absolute;bottom:30px;margin:auto;text-align:center;width:100%;-ms-filter:"alpha(Opacity=50)";opacity:.5;direction:ltr;transition:300ms opacity ease-out}.slideshow-window:hover .slideshow-controls{-ms-filter:"alpha(Opacity=100)";opacity:1}body div div.slideshow-co
3810 ntrols a,body div div.slideshow-controls a:hover{border:2px solid rgba(255,255,255,.1)!important;background-color:#000!important;background-color:rgba(0,0,0,.6)!important;background-image:url(../modules/shortcodes/img/slideshow-controls.png)!important;background-repeat:no-repeat;background-size:142px 16px!important;background-position:-34px 8px!important;color:#222!important;margin:0 5px!important;padding:0!important;display:inline-block!important;zoom:1;height:32px!important;width:32px!important;line-height:32px!important;text-align:center!important;-khtml-border-radius:10em!important;border-radius:10em!important;transition:300ms border-color ease-out}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body div div.slideshow-controls a,body div div.slideshow-controls a:hover{background-image:url(../modules/shortcodes/img/slideshow-controls-2x.png)!important}}body div div.slideshow-controls a:hover{border-color:rgba(255,255,255,1)!important}body div div.slideshow-controls a:
3811 first-child{background-position:-76px 8px!important}body div div.slideshow-controls a:last-child{background-position:-117px 8px!important}body div div.slideshow-controls a.running,body div div.slideshow-controls a:nth-child(2){background-position:-34px 8px!important}body div div.slideshow-controls a.paused{background-position:9px 8px!important}.slideshow-controls a img{border:50px dotted #f0f}body.presentation-wrapper-fullscreen-parent,html.presentation-wrapper-fullscreen-parent{overflow:hidden!important}.presentation-wrapper-fullscreen-parent #wpadminbar{display:none}.presentation-wrapper-fullscreen,.presentation-wrapper-fullscreen-parent{min-width:100%!important;min-height:100%!important;position:absolute!important;top:0!important;right:0!important;bottom:0!important;left:0!important;margin:0!important;padding:0!important;z-index:10000!important}.presentation-wrapper-fullscreen{background-color:gray;border:none!important}.presentation-wrapper-fullscreen .nav-arrow-left,.presentati
3812 on-wrapper-fullscreen .nav-arrow-right{z-index:20001}.presentation-wrapper-fullscreen .nav-fullscreen-button{z-index:20002}.presentation-wrapper{margin:20px auto;border:1px solid #e5e5e5;overflow:hidden;line-height:normal}.presentation{position:relative;margin:0;overflow:hidden;outline:0}.presentation,.presentation .step{background-repeat:no-repeat;background-position:center;background-size:100% 100%}.presentation .step.fade:not(.active){opacity:0}.presentation .slide-content{padding:30px}.presentation .nav-arrow-left,.presentation .nav-arrow-right,.presentation .nav-fullscreen-button{position:absolute;width:34px;background-repeat:no-repeat;z-index:2;opacity:0;transition:opacity .25s}.presentation .nav-arrow-left,.presentation .nav-arrow-right{height:100%;background-image:url(../modules/shortcodes/images/slide-nav.png);background-size:450% 61px}.presentation .nav-arrow-left{left:0;background-position:4px 50%}.presentation .nav-arrow-right{right:0;background-position:-120px 50%}.pres
3813 entation .nav-fullscreen-button{width:32px;height:32px;margin:4px;bottom:0;right:0;z-index:3;background-image:url(../modules/shortcodes/images/expand.png);background-size:100% 100%}.presentation:hover .nav-arrow-left,.presentation:hover .nav-arrow-right{opacity:1}.presentation:hover .nav-fullscreen-button{opacity:.8}.presentation-wrapper-fullscreen .nav-fullscreen-button{background-image:url(../modules/shortcodes/images/collapse.png)}.presentation .autoplay-overlay{height:15%;width:80%;margin:30% 10%;position:relative;z-index:100;display:table;border-radius:50px;background-color:#e5e5e5;background-color:rgba(0,0,0,.75);transition:opacity .5s}.presentation .autoplay-overlay .overlay-msg{position:relative;display:table-cell;text-align:center;vertical-align:middle;color:#fff}.presentation .will-fade{opacity:0}.presentation .do-fade{opacity:1;transition:opacity .5s}#subscribe-email input{width:95%}.comment-subscription-form .subscribe-label{display:inline!important}.jetpack-video-wrappe
3814 r{margin-bottom:1.6em}.jetpack-video-wrapper>.wp-video,.jetpack-video-wrapper>embed,.jetpack-video-wrapper>iframe,.jetpack-video-wrapper>object{margin-bottom:0}.jetpack-social-navigation ul{display:block;margin:0 0 1.5em;padding:0}.jetpack-social-navigation li{display:inline-block;margin:0;line-height:1}.jetpack-social-navigation a{border:0;height:1em;text-decoration:none;width:1em}.jetpack-social-navigation a:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Genericons;font-size:1em;font-style:normal;font-weight:400;height:1em;line-height:1;speak:none;text-decoration:inherit;vertical-align:top;width:1em;content:"\f415"}.jetpack-social-navigation a[href*="codepen.io"]:before{content:"\f216"}.jetpack-social-navigation a[href*="digg.com"]:before{content:"\f221"}.jetpack-social-navigation a[href*="dribbble.com"]:before{content:"\f201"}.jetpack-social-navigation a[href*="dropbox.com"]:before{content:"\f225"}.jetpack-social-navig
3815 ation a[href*="mailto:"]:before{content:"\f410"}.jetpack-social-navigation a[href*="facebook.com"]:before{content:"\f203"}.jetpack-social-navigation a[href*="flickr.com"]:before{content:"\f211"}.jetpack-social-navigation a[href*="foursquare.com"]:before{content:"\f226"}.jetpack-social-navigation a[href*="github.com"]:before{content:"\f200"}.jetpack-social-navigation a[href*="plus.google.com"]:before{content:"\f206"}.jetpack-social-navigation a[href*="instagram.com"]:before{content:"\f215"}.jetpack-social-navigation a[href*="linkedin.com"]:before{content:"\f208"}.jetpack-social-navigation a[href*="path.com"]:before{content:"\f219"}.jetpack-social-navigation a[href*="pinterest.com"]:before{content:"\f210"}.jetpack-social-navigation a[href*="getpocket.com"]:before{content:"\f224"}.jetpack-social-navigation a[href*="polldaddy.com"]:before{content:"\f217"}.jetpack-social-navigation a[href*="reddit.com"]:before{content:"\f222"}.jetpack-social-navigation a[href$="/feed/"]:before{content:"\
3816 f413"}.jetpack-social-navigation a[href*="skype:"]:before{content:"\f220"}.jetpack-social-navigation a[href*="spotify.com"]:before{content:"\f515"}.jetpack-social-navigation a[href*="stumbleupon.com"]:before{content:"\f223"}.jetpack-social-navigation a[href*="tumblr.com"]:before{content:"\f214"}.jetpack-social-navigation a[href*="twitch.tv"]:before{content:"\f516"}.jetpack-social-navigation a[href*="twitter.com"]:before{content:"\f202"}.jetpack-social-navigation a[href*="vimeo.com"]:before{content:"\f212"}.jetpack-social-navigation a[href*="vine.co"]:before{content:"\f517"}.jetpack-social-navigation a[href*="wordpress.com"]:before,.jetpack-social-navigation a[href*="wordpress.org"]:before{content:"\f205"}.jetpack-social-navigation a[href*="youtube.com"]:before{content:"\f213"}.tiled-gallery{clear:both;margin:0 0 20px;overflow:hidden}.tiled-gallery img{margin:2px!important}.tiled-gallery .gallery-group{float:left;position:relative}.tiled-gallery .tiled-gallery-item{float:left;margin:
3817 0;position:relative;width:inherit}.tiled-gallery .gallery-row{overflow:hidden}.tiled-gallery .tiled-gallery-item a{background:0 0;border:none;color:inherit;margin:0;padding:0;text-decoration:none;width:auto}.tiled-gallery .tiled-gallery-item img,.tiled-gallery .tiled-gallery-item img:hover{background:0 0;border:none;box-shadow:none;max-width:100%;padding:0;vertical-align:middle}.tiled-gallery-caption{background:#eee;background:rgba(255,255,255,.8);color:#333;font-size:13px;font-weight:400;overflow:hidden;padding:10px 0;position:absolute;bottom:0;text-indent:10px;text-overflow:ellipsis;width:100%;white-space:nowrap}.tiled-gallery .tiled-gallery-item-small .tiled-gallery-caption{font-size:11px}.widget-gallery .tiled-gallery-unresized{visibility:hidden;height:0;overflow:hidden}.tiled-gallery .tiled-gallery-item img.grayscale{position:absolute;left:0;top:0}.tiled-gallery .tiled-gallery-item img.grayscale:hover{opacity:0}.tiled-gallery.type-circle .tiled-gallery-item img{border-radius:50
3818 %!important}.tiled-gallery.type-circle .tiled-gallery-caption{display:none;opacity:0}.jetpack-display-remote-posts{margin:5px 0 20px}.jetpack-display-remote-posts h4{font-size:90%;margin:5px 0;padding:0}.jetpack-display-remote-posts h4 a{text-decoration:none}.jetpack-display-remote-posts p{margin:0!important;padding:0;line-height:1.4em!important;font-size:90%}.jetpack-display-remote-posts img{max-width:100%}.widget-grofile h4{margin:1em 0 .5em}.widget-grofile ul.grofile-urls{margin-left:0;overflow:hidden}.widget-grofile ul.grofile-accounts li{list-style:none;display:inline}.widget-grofile ul.grofile-accounts li::before{content:""!important}.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite.png);background-repeat:no-repeat;width:16px;height:16px;float:left;margin-right:8px;margin-bottom:8px}.rtl .widget-grofile .grofile-accounts-logo{margin-left:8px;margin-right:0}.grofile-thumbnail{width:500px;max-width:100%}@media only screen and (
3819 -webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite-2x.png);background-size:16px 784px}}div[class^=gr_custom_container]{border:1px solid gray;border-radius:10px;padding:10px 5px;background-color:#FFF;color:#000}div[class^=gr_custom_container] a{color:#000}h2[class^=gr_custom_header]{display:none}div[class^=gr_custom_each_container]{width:100%;clear:both;margin-bottom:10px;overflow:auto;padding-bottom:4px;border-bottom:1px solid #aaa}div[class^=gr_custom_book_container]{float:right;overflow:hidden;height:60px;margin-left:4px;width:39px}div[class^=gr_custom_author]{font-size:10px}div[class^=gr_custom_tags]{font-size:10px;color:gray}div[class^=gr_custom_rating]{display:none}.widget_wpcom_social_media_icons_widget ul{list-style-type:none;margin-left:0}.widget_wp
3820 com_social_media_icons_widget li{border:0;display:inline;margin-right:.5em}.widget_wpcom_social_media_icons_widget li a{border:0;text-decoration:none}.widget_wpcom_social_media_icons_widget .genericon{font-family:Genericons}.widget_wpcom_social_media_icons_widget .screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.widget_wpcom_social_media_icons_widget .screen-reader-text:active,.widget_wpcom_social_media_icons_widget .screen-reader-text:focus,.widget_wpcom_social_media_icons_widget .screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-size:.875rem;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.widgets-grid-layout{width:100%}.widgets-grid-layout:after,.widgets-grid-layout:before{content:" ";display:table}.widgets-grid
3821 -layout:after{clear:both}.widget-grid-view-image{float:left;max-width:50%}.widget-grid-view-image a{display:block;margin:0 2px 4px 0}.widget-grid-view-image:image:nth-child(even){float:right}.widget-grid-view-image:nth-child(even) a{margin:0 0 4px 2px}.widgets-grid-layout .widget-grid-view-image img{max-width:100%;height:auto}.widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:0 0;clear:none;float:left;margin:0 -5px -3px 0;padding:0 8px 6px 0;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:0 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widgets-list-layout{padding:0;margin:0;list-style-type:none}.widgets-list-layout li:after,.widgets-list-layout li:before{content:"";display:table}.widgets-list-layout li:after{clear:both}.widgets-list-layout li{zoom:1;margin-bottom:1em;list-style-type:none!important}.widgets-list-layout .widg
3822 ets-list-layout-blavatar{float:left;width:21.276596%;max-width:40px;height:auto}.widgets-list-layout-links{float:right;width:73.404255%}.widgets-list-layout span{opacity:.5}.widgets-list-layout span:hover{opacity:.8}
3823 \ No newline at end of file
3824
3825 diff --git a/plugins/jetpack/functions.global.php b/plugins/jetpack/functions.global.php
3826 new file mode 100644
3827 index 0000000..3a08e30
3828 --- /dev/null
3829 +++ b/plugins/jetpack/functions.global.php
3830 @@ -0,0 +1,10 @@
3831 +<?php
3832 +/**
3833 + * This file is meant to be the home for any generic & reusable functions
3834 + * that can be accessed anywhere within Jetpack.
3835 + *
3836 + * This file is loaded whether or not Jetpack is active.
3837 + *
3838 + * Please namespace with jetpack_
3839 + * Please write docblocks
3840 + */
3841
3842 diff --git a/plugins/jetpack/functions.photon.php b/plugins/jetpack/functions.photon.php
3843 index 419b8b5..d6cf13d 100644
3844 --- a/plugins/jetpack/functions.photon.php
3845 +++ b/plugins/jetpack/functions.photon.php
3846 @@ -12,6 +12,21 @@
3847 function jetpack_photon_url( $image_url, $args = array(), $scheme = null ) {
3848 $image_url = trim( $image_url );
3849
3850 + if ( class_exists( 'Jetpack') ) {
3851 + /**
3852 + * Disables Photon URL processing for local development
3853 + *
3854 + * @module photon
3855 + *
3856 + * @since 4.1.0
3857 + *
3858 + * @param bool false Result of Jetpack::is_development_mode.
3859 + */
3860 + if ( true === apply_filters( 'jetpack_photon_development_mode', Jetpack::is_development_mode() ) ) {
3861 + return $image_url;
3862 + }
3863 + }
3864 +
3865 /**
3866 * Allow specific image URls to avoid going through Photon.
3867 *
3868
3869 diff --git a/plugins/jetpack/jetpack.php b/plugins/jetpack/jetpack.php
3870 index f6dc9ec..f01791d 100644
3871 --- a/plugins/jetpack/jetpack.php
3872 +++ b/plugins/jetpack/jetpack.php
3873 @@ -5,7 +5,7 @@
3874 * Plugin URI: http://jetpack.com
3875 * Description: Bring the power of the WordPress.com cloud to your self-hosted WordPress. Jetpack enables you to connect your blog to a WordPress.com account to use the powerful features normally only available to WordPress.com users.
3876 * Author: Automattic
3877 - * Version: 4.0.4
3878 + * Version: 4.1.1
3879 * Author URI: http://jetpack.com
3880 * License: GPL2+
3881 * Text Domain: jetpack
3882 @@ -14,7 +14,7 @@
3883
3884 define( 'JETPACK__MINIMUM_WP_VERSION', '4.4' );
3885
3886 -define( 'JETPACK__VERSION', '4.0.4' );
3887 +define( 'JETPACK__VERSION', '4.1.1' );
3888 define( 'JETPACK_MASTER_USER', true );
3889 define( 'JETPACK__API_VERSION', 1 );
3890 define( 'JETPACK__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
3891 @@ -57,6 +57,7 @@ require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-error.php' );
3892 require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-heartbeat.php' );
3893 require_once( JETPACK__PLUGIN_DIR . 'class.photon.php' );
3894 require_once( JETPACK__PLUGIN_DIR . 'functions.photon.php' );
3895 +require_once( JETPACK__PLUGIN_DIR . 'functions.global.php' );
3896 require_once( JETPACK__PLUGIN_DIR . 'functions.compat.php' );
3897 require_once( JETPACK__PLUGIN_DIR . 'functions.gallery.php' );
3898 require_once( JETPACK__PLUGIN_DIR . 'require-lib.php' );
3899
3900 diff --git a/plugins/jetpack/json-endpoints.php b/plugins/jetpack/json-endpoints.php
3901 index a735e04..a8ea54a 100644
3902 --- a/plugins/jetpack/json-endpoints.php
3903 +++ b/plugins/jetpack/json-endpoints.php
3904 @@ -31,17 +31,21 @@ require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-embeds-endpoint.p
3905 require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-site-endpoint.php' );
3906 require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-taxonomies-endpoint.php' );
3907 require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-taxonomy-endpoint.php' );
3908 +require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-term-endpoint.php' );
3909 require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-comments-endpoint.php' );
3910 require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-media-endpoint.php' );
3911 require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-post-types-endpoint.php' );
3912 +require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-post-type-taxonomies-endpoint.php' );
3913 require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-posts-endpoint.php' );
3914 require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-roles-endpoint.php' );
3915 +require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-terms-endpoint.php' );
3916 require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-users-endpoint.php' );
3917 require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-user-endpoint.php' );
3918 require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-comment-endpoint.php' );
3919 require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-media-endpoint.php' );
3920 require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-post-endpoint.php' );
3921 require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-taxonomy-endpoint.php' );
3922 +require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-term-endpoint.php' );
3923 require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-user-endpoint.php' );
3924 require_once( $json_endpoints_dir . 'class.wpcom-json-api-upload-media-endpoint.php' );
3925 require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-settings-endpoint.php' );
3926 @@ -201,6 +205,22 @@ new WPCOM_JSON_API_List_Post_Types_Endpoint( array (
3927 )
3928 ) );
3929
3930 +new WPCOM_JSON_API_List_Post_Type_Taxonomies_Endpoint( array (
3931 + 'description' => 'Get a list of taxonomies associated with a post type.',
3932 + 'group' => 'taxonomy',
3933 + 'stat' => 'sites:X:post-types:X:taxonomies',
3934 + 'method' => 'GET',
3935 + 'path' => '/sites/%s/post-types/%s/taxonomies',
3936 + 'path_labels' => array(
3937 + '$site' => '(int|string) Site ID or domain',
3938 + '$post_type' => '(string) Post type',
3939 + ),
3940 + 'response_format' => array(
3941 + 'found' => '(int) The number of taxonomies found',
3942 + 'taxonomies' => '(array:taxonomy) A list of available taxonomies',
3943 + )
3944 +) );
3945 +
3946 /*
3947 * Shortcode endpoints
3948 */
3949 @@ -528,7 +548,7 @@ new WPCOM_JSON_API_Update_Post_Endpoint( array(
3950 'description' => 'Create a post.',
3951 'group' => 'posts',
3952 'stat' => 'posts:new',
3953 - 'new_version' => '1.1',
3954 + 'new_version' => '1.2',
3955 'max_version' => '1',
3956 'method' => 'POST',
3957 'path' => '/sites/%s/posts/new',
3958 @@ -595,6 +615,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
3959 'description' => 'Create a post.',
3960 'group' => 'posts',
3961 'stat' => 'posts:new',
3962 + 'new_version' => '1.2',
3963 'min_version' => '1.1',
3964 'max_version' => '1.1',
3965 'method' => 'POST',
3966 @@ -628,6 +649,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
3967 'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
3968 'parent' => "(int) The post ID of the new post's parent.",
3969 'type' => "(string) The post type. Defaults to 'post'. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
3970 + 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of terms (name or id)',
3971 'categories' => "(array|string) Comma-separated list or array of categories (name or id)",
3972 'tags' => "(array|string) Comma-separated list or array of tags (name or id)",
3973 'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
3974 @@ -698,8 +720,10 @@ new WPCOM_JSON_API_Update_Post_v1_2_Endpoint( array(
3975 'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
3976 'parent' => "(int) The post ID of the new post's parent.",
3977 'type' => "(string) The post type. Defaults to 'post'. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
3978 + 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of term names',
3979 'categories' => "(array|string) Comma-separated list or array of category names",
3980 'tags' => "(array|string) Comma-separated list or array of tag names",
3981 + 'terms_by_id' => '(object) Mapping of taxonomy to comma-separated list or array of term IDs',
3982 'categories_by_id' => "(array|string) Comma-separated list or array of category IDs",
3983 'tags_by_id' => "(array|string) Comma-separated list or array of tag IDs",
3984 'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
3985 @@ -737,7 +761,7 @@ new WPCOM_JSON_API_Update_Post_Endpoint( array(
3986 'description' => 'Edit a post.',
3987 'group' => 'posts',
3988 'stat' => 'posts:1:POST',
3989 - 'new_version' => '1.1',
3990 + 'new_version' => '1.2',
3991 'max_version' => '1',
3992 'method' => 'POST',
3993 'path' => '/sites/%s/posts/%d',
3994 @@ -760,6 +784,7 @@ new WPCOM_JSON_API_Update_Post_Endpoint( array(
3995 'private' => 'Privately publish the post.',
3996 'draft' => 'Save the post as a draft.',
3997 'pending' => 'Mark the post as pending editorial approval.',
3998 + 'trash' => 'Set the post as trashed.',
3999 ),
4000 'sticky' => array(
4001 'false' => 'Post is not marked as sticky.',
4002 @@ -802,6 +827,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
4003 'description' => 'Edit a post.',
4004 'group' => 'posts',
4005 'stat' => 'posts:1:POST',
4006 + 'new_version' => '1.2',
4007 'min_version' => '1.1',
4008 'max_version' => '1.1',
4009 'method' => 'POST',
4010 @@ -826,6 +852,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
4011 'draft' => 'Save the post as a draft.',
4012 'future' => 'Schedule the post (alias for publish; you must also set a future date).',
4013 'pending' => 'Mark the post as pending editorial approval.',
4014 + 'trash' => 'Set the post as trashed.',
4015 ),
4016 'sticky' => array(
4017 'false' => 'Post is not marked as sticky.',
4018 @@ -833,6 +860,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
4019 ),
4020 'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
4021 'parent' => "(int) The post ID of the new post's parent.",
4022 + 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of terms (name or id)',
4023 'categories' => "(array|string) Comma-separated list or array of categories (name or id)",
4024 'tags' => "(array|string) Comma-separated list or array of tags (name or id)",
4025 'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
4026 @@ -892,6 +920,7 @@ new WPCOM_JSON_API_Update_Post_v1_2_Endpoint( array(
4027 'draft' => 'Save the post as a draft.',
4028 'future' => 'Schedule the post (alias for publish; you must also set a future date).',
4029 'pending' => 'Mark the post as pending editorial approval.',
4030 + 'trash' => 'Set the post as trashed.',
4031 ),
4032 'sticky' => array(
4033 'false' => 'Post is not marked as sticky.',
4034 @@ -899,6 +928,8 @@ new WPCOM_JSON_API_Update_Post_v1_2_Endpoint( array(
4035 ),
4036 'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
4037 'parent' => "(int) The post ID of the new post's parent.",
4038 + 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of term names',
4039 + 'terms_by_id' => '(object) Mapping of taxonomy to comma-separated list or array of term IDs',
4040 'categories' => "(array|string) Comma-separated list or array of category names",
4041 'categories_by_id' => "(array|string) Comma-separated list or array of category IDs",
4042 'tags' => "(array|string) Comma-separated list or array of tag names",
4043 @@ -1909,6 +1940,133 @@ new WPCOM_JSON_API_Update_Taxonomy_Endpoint( array(
4044 )
4045 ) );
4046
4047 +new WPCOM_JSON_API_List_Terms_Endpoint( array(
4048 + 'description' => 'Get a list of a site\'s terms by taxonomy.',
4049 + 'group' => 'taxonomy',
4050 + 'stat' => 'terms',
4051 + 'method' => 'GET',
4052 + 'path' => '/sites/%s/taxonomies/%s/terms',
4053 + 'path_labels' => array(
4054 + '$site' => '(int|string) Site ID or domain',
4055 + '$taxonomy' => '(string) Taxonomy',
4056 + ),
4057 + 'query_parameters' => array(
4058 + 'number' => '(int=100) The number of terms to return. Limit: 1000.',
4059 + 'offset' => '(int=0) 0-indexed offset.',
4060 + 'page' => '(int) Return the Nth 1-indexed page of terms. Takes precedence over the <code>offset</code> parameter.',
4061 + 'search' => '(string) Limit response to include only terms whose names or slugs match the provided search query.',
4062 + 'order' => array(
4063 + 'ASC' => 'Return terms in ascending order.',
4064 + 'DESC' => 'Return terms in descending order.',
4065 + ),
4066 + 'order_by' => array(
4067 + 'name' => 'Order by the name of each tag.',
4068 + 'count' => 'Order by the number of posts in each tag.',
4069 + ),
4070 + ),
4071 + 'response_format' => array(
4072 + 'found' => '(int) The number of terms returned.',
4073 + 'terms' => '(array) Array of tag objects.',
4074 + ),
4075 + 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/taxonomies/post_tags/terms?number=5'
4076 +) );
4077 +
4078 +new WPCOM_JSON_API_Get_Term_Endpoint( array(
4079 + 'description' => 'Get information about a single term.',
4080 + 'group' => 'taxonomy',
4081 + 'stat' => 'terms:1',
4082 + 'method' => 'GET',
4083 + 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s',
4084 + 'path_labels' => array(
4085 + '$site' => '(int|string) Site ID or domain',
4086 + '$taxonomy' => '(string) Taxonomy',
4087 + '$slug' => '(string) Term slug',
4088 + ),
4089 + 'response_format' => array(
4090 + 'ID' => '(int) The term ID.',
4091 + 'name' => '(string) The name of the term.',
4092 + 'slug' => '(string) The slug of the term.',
4093 + 'description' => '(string) The description of the term.',
4094 + 'post_count' => '(int) The number of posts using this term.',
4095 + 'parent' => '(int) The parent ID for the term, if hierarchical.',
4096 + ),
4097 + 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/taxonomies/post_tag/terms/slug:wordpresscom'
4098 +) );
4099 +
4100 +new WPCOM_JSON_API_Update_Term_Endpoint( array(
4101 + 'description' => 'Create a new term.',
4102 + 'group' => 'taxonomy',
4103 + 'stat' => 'terms:new',
4104 + 'method' => 'POST',
4105 + 'path' => '/sites/%s/taxonomies/%s/terms/new',
4106 + 'path_labels' => array(
4107 + '$site' => '(int|string) Site ID or domain',
4108 + '$taxonomy' => '(string) Taxonomy',
4109 + ),
4110 + 'request_format' => array(
4111 + 'name' => '(string) Name of the term',
4112 + 'description' => '(string) A description of the term',
4113 + ),
4114 + 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/new',
4115 + 'example_request_data' => array(
4116 + 'headers' => array(
4117 + 'authorization' => 'Bearer YOUR_API_TOKEN'
4118 + ),
4119 + 'body' => array(
4120 + 'name' => 'Ribs & Chicken'
4121 + )
4122 + )
4123 +) );
4124 +
4125 +new WPCOM_JSON_API_Update_Term_Endpoint( array(
4126 + 'description' => 'Edit a term.',
4127 + 'group' => 'taxonomy',
4128 + 'stat' => 'terms:1:POST',
4129 + 'method' => 'POST',
4130 + 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s',
4131 + 'path_labels' => array(
4132 + '$site' => '(int|string) Site ID or domain',
4133 + '$taxonomy' => '(string) Taxonomy',
4134 + '$slug' => '(string) The term slug',
4135 + ),
4136 + 'request_format' => array(
4137 + 'name' => '(string) Name of the term',
4138 + 'description' => '(string) A description of the term',
4139 + ),
4140 + 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/slug:testing-term',
4141 + 'example_request_data' => array(
4142 + 'headers' => array(
4143 + 'authorization' => 'Bearer YOUR_API_TOKEN'
4144 + ),
4145 + 'body' => array(
4146 + 'description' => 'The most delicious'
4147 + )
4148 + )
4149 +) );
4150 +
4151 +new WPCOM_JSON_API_Update_Term_Endpoint( array(
4152 + 'description' => 'Delete a term.',
4153 + 'group' => 'taxonomy',
4154 + 'stat' => 'terms:1:delete',
4155 + 'method' => 'POST',
4156 + 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s/delete',
4157 + 'path_labels' => array(
4158 + '$site' => '(int|string) Site ID or domain',
4159 + '$taxonomy' => '(string) Taxonomy',
4160 + '$slug' => '(string) The term slug',
4161 + ),
4162 + 'response_format' => array(
4163 + 'slug' => '(string) The slug of the deleted term',
4164 + 'success' => '(bool) Whether the operation was successful',
4165 + ),
4166 + 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/slug:$term/delete',
4167 + 'example_request_data' => array(
4168 + 'headers' => array(
4169 + 'authorization' => 'Bearer YOUR_API_TOKEN'
4170 + ),
4171 + )
4172 +) );
4173 +
4174 new WPCOM_JSON_API_List_Roles_Endpoint( array(
4175 'description' => 'List the user roles of a site.',
4176 'group' => '__do_not_document',
4177
4178 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php
4179 index 82359f6..d8de129 100644
4180 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php
4181 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php
4182 @@ -121,7 +121,7 @@ abstract class WPCOM_JSON_API_Comment_Endpoint extends WPCOM_JSON_API_Endpoint {
4183 'ID' => (int) $post->ID,
4184 'title' => (string) get_the_title( $post->ID ),
4185 'type' => (string) $post->post_type,
4186 - 'link' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
4187 + 'link' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
4188 );
4189 break;
4190 case 'author' :
4191 @@ -155,7 +155,7 @@ abstract class WPCOM_JSON_API_Comment_Endpoint extends WPCOM_JSON_API_Endpoint {
4192 $response[$key] = (object) array(
4193 'ID' => (int) $parent->comment_ID,
4194 'type' => (string) ( $parent->comment_type ? $parent->comment_type : 'comment' ),
4195 - 'link' => (string) $this->get_comment_link( $blog_id, $parent->comment_ID ),
4196 + 'link' => (string) $this->links->get_comment_link( $blog_id, $parent->comment_ID ),
4197 );
4198 } else {
4199 $response[$key] = false;
4200 @@ -177,14 +177,12 @@ abstract class WPCOM_JSON_API_Comment_Endpoint extends WPCOM_JSON_API_Endpoint {
4201 case 'meta' :
4202 $response[$key] = (object) array(
4203 'links' => (object) array(
4204 - 'self' => (string) $this->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID ),
4205 - 'help' => (string) $this->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'help' ),
4206 - 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
4207 - 'post' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $comment->comment_post_ID ),
4208 - 'replies' => (string) $this->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'replies/' ),
4209 -// 'author' => (string) $this->get_user_link( $comment->user_id ),
4210 -// 'via' => (string) $this->get_post_link( $ping_origin_blog_id, $ping_origin_post_id ), // Ping/trackbacks
4211 - 'likes' => (string) $this->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'likes/' ),
4212 + 'self' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID ),
4213 + 'help' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'help' ),
4214 + 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
4215 + 'post' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $comment->comment_post_ID ),
4216 + 'replies' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'replies/' ),
4217 + 'likes' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'likes/' ),
4218 ),
4219 );
4220 break;
4221
4222 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php
4223 index 517630a..6f79222 100644
4224 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php
4225 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php
4226 @@ -10,13 +10,19 @@ class WPCOM_JSON_API_Get_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_End
4227
4228 $args = $this->query_args();
4229
4230 - if ( false === strpos( $path, '/posts/slug:' ) ) {
4231 - $get_by = 'ID';
4232 - } else {
4233 - $get_by = 'name';
4234 + if ( false !== strpos( $path, '/posts/slug:' ) ) {
4235 + $post_id = $this->get_platform()->get_site( $blog_id )->get_post_id_by_name( $post_id );
4236 + if ( is_wp_error( $post_id ) ) {
4237 + return $post_id;
4238 + }
4239 }
4240
4241 - $return = $this->get_post_by( $get_by, $post_id, $args['context'] );
4242 + if ( defined( 'IS_WPCOM' ) && IS_WPCOM &&
4243 + ! in_array( get_post_type( $post_id ), array( false, 'post', 'page', 'revision' ) ) ) {
4244 + $this->load_theme_functions();
4245 + }
4246 +
4247 + $return = $this->get_post_by( 'ID', $post_id, $args['context'] );
4248
4249 if ( !$return || is_wp_error( $return ) ) {
4250 return $return;
4251
4252 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-endpoint.php
4253 index 852b6e8..95a42b4 100644
4254 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-endpoint.php
4255 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-endpoint.php
4256 @@ -1,5 +1,4 @@
4257 <?php
4258 -
4259 class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4260
4261 public static $site_format = array(
4262 @@ -28,6 +27,24 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4263 'meta' => '(object) Meta data',
4264 );
4265
4266 + protected static $no_member_fields = array(
4267 + 'ID',
4268 + 'name',
4269 + 'description',
4270 + 'URL',
4271 + 'jetpack',
4272 + 'post_count',
4273 + 'subscribers_count',
4274 + 'lang',
4275 + 'locale',
4276 + 'icon',
4277 + 'logo',
4278 + 'visible',
4279 + 'is_private',
4280 + 'is_following',
4281 + 'meta',
4282 + );
4283 +
4284 protected static $site_options_format = array(
4285 'timezone',
4286 'gmt_offset',
4287 @@ -68,21 +85,26 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4288 'frame_nonce',
4289 'page_on_front',
4290 'page_for_posts',
4291 + 'headstart',
4292 'ak_vp_bundle_enabled'
4293 );
4294
4295 - protected static $jetpack_response_field_additions = array(
4296 + protected static $jetpack_response_field_additions = array(
4297 + 'subscribers_count',
4298 + );
4299 +
4300 + protected static $jetpack_response_field_member_additions = array(
4301 'capabilities',
4302 'plan',
4303 - 'subscribers_count'
4304 );
4305
4306 - protected static $jetpack_response_option_additions = array(
4307 + protected static $jetpack_response_option_additions = array(
4308 'publicize_permanently_disabled',
4309 'ak_vp_bundle_enabled'
4310 );
4311
4312 private $site;
4313 +
4314 // protected $compact = null;
4315 protected $fields_to_include = '_all';
4316 protected $options_to_include = '_all';
4317 @@ -103,6 +125,11 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4318 return $blog_id;
4319 }
4320
4321 + // TODO: enable this when we can do so without being interfered with by
4322 + // other endpoints that might be wrapping this one.
4323 + // Uncomment and see failing test: test_jetpack_site_should_have_true_jetpack_property_via_site_meta
4324 + // $this->filter_fields_and_options();
4325 +
4326 $response = $this->build_current_site_response();
4327
4328 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
4329 @@ -118,40 +145,36 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4330 $this->options_to_include = empty( $query_args['options'] ) ? '_all' : array_map( 'trim', explode( ',', $query_args['options'] ) );
4331 }
4332
4333 - protected function include_response_field( $field ) {
4334 - if ( is_array( $this->fields_to_include ) ) {
4335 - return in_array( $field, $this->fields_to_include );
4336 - }
4337 - return true;
4338 - }
4339 -
4340 /**
4341 * Collects the necessary information to return for a site's response.
4342 *
4343 * @return (array)
4344 */
4345 public function build_current_site_response() {
4346 +
4347 $blog_id = (int) $this->api->get_blog_id_for_output();
4348
4349 - $this->site = wpcom_get_sal_site( $blog_id );
4350 + $this->site = $this->get_platform()->get_site( $blog_id );
4351
4352 - // Allow update in later versions
4353 /**
4354 - * Filter the structure of information about the site to return.
4355 - *
4356 - * @module json-api
4357 - *
4358 - * @since 3.9.3
4359 - *
4360 - * @param array $site_format Data structure.
4361 - */
4362 - $response_format = apply_filters( 'sites_site_format', self::$site_format );
4363 + * Filter the structure of information about the site to return.
4364 + *
4365 + * @module json-api
4366 + *
4367 + * @since 3.9.3
4368 + *
4369 + * @param array $site_format Data structure.
4370 + */
4371 $default_fields = array_keys( apply_filters( 'sites_site_format', self::$site_format ) );
4372
4373 $response_keys = is_array( $this->fields_to_include ) ?
4374 array_intersect( $default_fields, $this->fields_to_include ) :
4375 $default_fields;
4376
4377 + if ( ! is_user_member_of_blog( get_current_user(), $blog_id ) ) {
4378 + $response_keys = array_intersect( $response_keys, self::$no_member_fields );
4379 + }
4380 +
4381 return $this->render_response_keys( $response_keys );
4382 }
4383
4384 @@ -179,13 +202,13 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4385 $response[ $key ] = $this->site->blog_id;
4386 break;
4387 case 'name' :
4388 - $response[ $key ] = (string) htmlspecialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES );
4389 + $response[ $key ] = $this->site->get_name();
4390 break;
4391 case 'description' :
4392 - $response[ $key ] = (string) htmlspecialchars_decode( get_bloginfo( 'description' ), ENT_QUOTES );
4393 + $response[ $key ] = $this->site->get_description();
4394 break;
4395 case 'URL' :
4396 - $response[ $key ] = (string) home_url();
4397 + $response[ $key ] = $this->site->get_url();
4398 break;
4399 case 'user_can_manage' :
4400 $response[ $key ] = $this->site->user_can_manage();
4401 @@ -200,7 +223,7 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4402 break;
4403 case 'post_count' :
4404 if ( $is_user_logged_in ) {
4405 - $response[ $key ] = (int) wp_count_posts( 'post' )->publish;
4406 + $response[ $key ] = $this->site->get_post_count();
4407 }
4408 break;
4409 case 'icon' :
4410 @@ -217,7 +240,7 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4411 $response[ $key ] = $this->site->is_following();
4412 break;
4413 case 'options':
4414 - // small optimisation - don't recalculate
4415 + // small optimisation - don't recalculate
4416 $all_options = apply_filters( 'sites_site_options_format', self::$site_options_format );
4417
4418 $options_response_keys = is_array( $this->options_to_include ) ?
4419 @@ -228,7 +251,7 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4420
4421 $this->site->after_render_options( $options );
4422
4423 - $response[ $key ] = $options;
4424 + $response[ $key ] = (object) $options;
4425 break;
4426 case 'meta':
4427 $this->build_meta_response( $response );
4428 @@ -242,16 +265,16 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4429 case 'jetpack' :
4430 $response[ $key ] = $this->site->is_jetpack();
4431 break;
4432 - case 'single_user_site' :
4433 + case 'single_user_site' :
4434 $response[ $key ] = $this->site->is_single_user_site();
4435 break;
4436 - case 'is_vip' :
4437 + case 'is_vip' :
4438 $response[ $key ] = $this->site->is_vip();
4439 break;
4440 case 'is_multisite' :
4441 $response[ $key ] = $this->site->is_multisite();
4442 break;
4443 - case 'capabilities' :
4444 + case 'capabilities' :
4445 $response[ $key ] = $this->site->get_capabilities();
4446 break;
4447 case 'jetpack_modules':
4448 @@ -270,148 +293,141 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4449
4450 protected function render_option_keys( &$options_response_keys ) {
4451 if ( ! current_user_can( 'edit_posts' ) ) {
4452 - return;
4453 + return array();
4454 }
4455
4456 - global $wp_version;
4457 -
4458 $options = array();
4459 + $site = $this->site;
4460
4461 - $custom_front_page = ( 'page' === get_option( 'show_on_front' ) );
4462 + $custom_front_page = $site->is_custom_front_page();
4463 +
4464
4465 foreach ( $options_response_keys as $key ) {
4466 switch ( $key ) {
4467 case 'timezone' :
4468 - $options[ $key ] = (string) get_option( 'timezone_string' );
4469 + $options[ $key ] = $site->get_timezone();
4470 break;
4471 case 'gmt_offset' :
4472 - $options[ $key ] = (float) get_option( 'gmt_offset' );
4473 + $options[ $key ] = $site->get_gmt_offset();
4474 break;
4475 case 'videopress_enabled' :
4476 - $options[ $key ] = $this->site->has_videopress();
4477 + $options[ $key ] = $site->has_videopress();
4478 break;
4479 case 'upgraded_filetypes_enabled' :
4480 - $options[ $key ] = $this->site->upgraded_filetypes_enabled();
4481 + $options[ $key ] = $site->upgraded_filetypes_enabled();
4482 break;
4483 case 'login_url' :
4484 - $options[ $key ] = wp_login_url();
4485 + $options[ $key ] = $site->get_login_url();
4486 break;
4487 case 'admin_url' :
4488 - $options[ $key ] = get_admin_url();
4489 + $options[ $key ] = $site->get_admin_url();
4490 break;
4491 case 'is_mapped_domain' :
4492 - $options[ $key ] = $this->site->is_mapped_domain();
4493 + $options[ $key ] = $site->is_mapped_domain();
4494 break;
4495 case 'is_redirect' :
4496 - $options[ $key ] = $this->site->is_redirect();
4497 + $options[ $key ] = $site->is_redirect();
4498 break;
4499 case 'unmapped_url' :
4500 - $options[ $key ] = get_site_url( $this->site->blog_id );
4501 + $options[ $key ] = $site->get_unmapped_url();
4502 break;
4503 case 'featured_images_enabled' :
4504 - $options[ $key ] = $this->site->featured_images_enabled();
4505 + $options[ $key ] = $site->featured_images_enabled();
4506 break;
4507 case 'theme_slug' :
4508 - $options[ $key ] = get_option( 'stylesheet' );
4509 + $options[ $key ] = $site->get_theme_slug();
4510 break;
4511 case 'header_image' :
4512 - $options[ $key ] = get_theme_mod( 'header_image_data' );
4513 + $options[ $key ] = $site->get_header_image();
4514 break;
4515 case 'background_color' :
4516 - $options[ $key ] = get_theme_mod( 'background_color' );
4517 + $options[ $key ] = $site->get_background_color();
4518 break;
4519 case 'image_default_link_type' :
4520 - $options[ $key ] = get_option( 'image_default_link_type' );
4521 + $options[ $key ] = $site->get_image_default_link_type();
4522 break;
4523 case 'image_thumbnail_width' :
4524 - $options[ $key ] = (int) get_option( 'thumbnail_size_w' );
4525 + $options[ $key ] = $site->get_image_thumbnail_width();
4526 break;
4527 case 'image_thumbnail_height' :
4528 - $options[ $key ] = (int) get_option( 'thumbnail_size_h' );
4529 + $options[ $key ] = $site->get_image_thumbnail_height();
4530 break;
4531 case 'image_thumbnail_crop' :
4532 - $options[ $key ] = get_option( 'thumbnail_crop' );
4533 + $options[ $key ] = $site->get_image_thumbnail_crop();
4534 break;
4535 case 'image_medium_width' :
4536 - $options[ $key ] = (int) get_option( 'medium_size_w' );
4537 + $options[ $key ] = $site->get_image_medium_width();
4538 break;
4539 case 'image_medium_height' :
4540 - $options[ $key ] = (int) get_option( 'medium_size_h' );
4541 + $options[ $key ] = $site->get_image_medium_height();
4542 break;
4543 case 'image_large_width' :
4544 - $options[ $key ] = (int) get_option( 'large_size_w' );
4545 + $options[ $key ] = $site->get_image_large_width();
4546 break;
4547 case 'image_large_height' :
4548 - $options[ $key ] = (int) get_option( 'large_size_h' );
4549 + $options[ $key ] = $site->get_image_large_height();
4550 break;
4551 case 'permalink_structure' :
4552 - $options[ $key ] = get_option( 'permalink_structure' );
4553 + $options[ $key ] = $site->get_permalink_structure();
4554 break;
4555 case 'post_formats' :
4556 - $options[ $key ] = $this->site->get_post_formats();
4557 + $options[ $key ] = $site->get_post_formats();
4558 break;
4559 case 'default_post_format' :
4560 - $options[ $key ] = get_option( 'default_post_format' );
4561 + $options[ $key ] = $site->get_default_post_format();
4562 break;
4563 case 'default_category' :
4564 - $options[ $key ] = (int) get_option( 'default_category' );
4565 + $options[ $key ] = $site->get_default_category();
4566 break;
4567 case 'allowed_file_types' :
4568 - $options[ $key ] = $this->site->allowed_file_types();
4569 + $options[ $key ] = $site->allowed_file_types();
4570 break;
4571 case 'show_on_front' :
4572 - $options[ $key ] = get_option( 'show_on_front' );
4573 + $options[ $key ] = $site->get_show_on_front();
4574 break;
4575 /** This filter is documented in modules/likes.php */
4576 case 'default_likes_enabled' :
4577 - $options[ $key ] = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
4578 + $options[ $key ] = $site->get_default_likes_enabled();
4579 break;
4580 case 'default_sharing_status' :
4581 - $default_sharing_status = false;
4582 - if ( class_exists( 'Sharing_Service' ) ) {
4583 - $ss = new Sharing_Service();
4584 - $blog_services = $ss->get_blog_services();
4585 - $default_sharing_status = ! empty( $blog_services['visible'] );
4586 - }
4587 - $options[ $key ] = (bool) $default_sharing_status;
4588 + $options[ $key ] = $site->get_default_sharing_status();
4589 break;
4590 case 'default_comment_status' :
4591 - $options[ $key ] = 'closed' !== get_option( 'default_comment_status' );
4592 + $options[ $key ] = $site->get_default_comment_status();
4593 break;
4594 case 'default_ping_status' :
4595 - $options[ $key ] = 'closed' !== get_option( 'default_ping_status' );
4596 + $options[ $key ] = $site->default_ping_status();
4597 break;
4598 case 'software_version' :
4599 - $options[ $key ] = $wp_version;
4600 + $options[ $key ] = $site->get_wordpress_version();
4601 break;
4602 case 'created_at' :
4603 - $options[ $key ] = $this->site->get_registered_date();
4604 + $options[ $key ] = $site->get_registered_date();
4605 break;
4606 case 'wordads' :
4607 - $options[ $key ] = $this->site->has_wordads();
4608 + $options[ $key ] = $site->has_wordads();
4609 break;
4610 case 'publicize_permanently_disabled' :
4611 - $publicize_permanently_disabled = false;
4612 - if ( function_exists( 'is_publicize_permanently_disabled' ) ) {
4613 - $publicize_permanently_disabled = is_publicize_permanently_disabled( $this->site->blog_id );
4614 - }
4615 - $options[ $key ] = $publicize_permanently_disabled;
4616 + $options[ $key ] = $site->is_publicize_permanently_disabled();
4617 break;
4618 case 'frame_nonce' :
4619 - $options[ $key ] = $this->site->get_frame_nonce();
4620 + $options[ $key ] = $site->get_frame_nonce();
4621 break;
4622 case 'page_on_front' :
4623 if ( $custom_front_page ) {
4624 - $options[ $key ] = (int) get_option( 'page_on_front' );
4625 + $options[ $key ] = $site->get_page_on_front();
4626 }
4627 break;
4628 case 'page_for_posts' :
4629 if ( $custom_front_page ) {
4630 - $options[ $key ] = (int) get_option( 'page_for_posts' );
4631 + $options[ $key ] = $site->get_page_for_posts();
4632 }
4633 break;
4634 + case 'headstart' :
4635 + $options[ $key ] = $site->is_headstart();
4636 + break;
4637 case 'ak_vp_bundle_enabled' :
4638 - $options[ $key ] = $this->site->get_ak_vp_bundle_enabled();
4639 + $options[ $key ] = $site->get_ak_vp_bundle_enabled();
4640 }
4641 }
4642
4643 @@ -419,22 +435,20 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4644 }
4645
4646 protected function build_meta_response( &$response ) {
4647 - $xmlrpc_scheme = apply_filters( 'wpcom_json_api_xmlrpc_scheme', parse_url( get_option( 'home' ), PHP_URL_SCHEME ) );
4648 - $xmlrpc_url = site_url( 'xmlrpc.php', $xmlrpc_scheme );
4649 $response['meta'] = (object) array(
4650 'links' => (object) array(
4651 - 'self' => (string) $this->get_site_link( $this->site->blog_id ),
4652 - 'help' => (string) $this->get_site_link( $this->site->blog_id, 'help' ),
4653 - 'posts' => (string) $this->get_site_link( $this->site->blog_id, 'posts/' ),
4654 - 'comments' => (string) $this->get_site_link( $this->site->blog_id, 'comments/' ),
4655 - 'xmlrpc' => (string) $xmlrpc_url,
4656 + 'self' => (string) $this->links->get_site_link( $this->site->blog_id ),
4657 + 'help' => (string) $this->links->get_site_link( $this->site->blog_id, 'help' ),
4658 + 'posts' => (string) $this->links->get_site_link( $this->site->blog_id, 'posts/' ),
4659 + 'comments' => (string) $this->links->get_site_link( $this->site->blog_id, 'comments/' ),
4660 + 'xmlrpc' => (string) $this->site->get_xmlrpc_url(),
4661 ),
4662 );
4663 }
4664
4665 // apply any WPCOM-only response components to a Jetpack site response
4666 public function decorate_jetpack_response( &$response ) {
4667 - $this->site = wpcom_get_sal_site( $blog_id );
4668 + $this->site = $this->get_platform()->get_site( $response->ID );
4669
4670 // ensure the response is marked as being from Jetpack
4671 $response->jetpack = true;
4672 @@ -445,14 +459,32 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4673 $response->{ $key } = $value;
4674 }
4675
4676 + if ( is_user_member_of_blog( get_current_user(), $response->ID ) ) {
4677 + $wpcom_member_response = $this->render_response_keys( self::$jetpack_response_field_member_additions );
4678 +
4679 + foreach( $wpcom_member_response as $key => $value ) {
4680 + $response->{ $key } = $value;
4681 + }
4682 + } else {
4683 + // ensure private data is not rendered for non members of the site
4684 + unset( $response->options );
4685 + unset( $response->is_vip );
4686 + unset( $response->single_user_site );
4687 + unset( $response->is_private );
4688 + unset( $response->capabilities );
4689 + unset( $response->lang );
4690 + unset( $response->user_can_manage );
4691 + unset( $response->is_multisite );
4692 + unset( $response->plan );
4693 + }
4694 +
4695 // render additional options
4696 if ( $response->options ) {
4697 $wpcom_options_response = $this->render_option_keys( self::$jetpack_response_option_additions );
4698
4699 - foreach( $wpcom_options_response as $key => $value ) {
4700 + foreach ( $wpcom_options_response as $key => $value ) {
4701 $response->options[ $key ] = $value;
4702 }
4703 - return (string) get_bloginfo( 'language' );
4704 }
4705
4706 return $response; // possibly no need since it's modified in place
4707
4708 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php
4709 index 6f693e9..898df41 100644
4710 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php
4711 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php
4712 @@ -1,11 +1,4 @@
4713 <?php
4714 -/*
4715 - * WARNING: This file is distributed verbatim in Jetpack.
4716 - * There should be nothing WordPress.com specific in this file.
4717 - *
4718 - * @hide-in-jetpack
4719 - */
4720 -
4721 class WPCOM_JSON_API_GET_Site_V1_2_Endpoint extends WPCOM_JSON_API_GET_Site_Endpoint {
4722
4723 public static $site_format = array(
4724 @@ -13,7 +6,9 @@ class WPCOM_JSON_API_GET_Site_V1_2_Endpoint extends WPCOM_JSON_API_GET_Site_Endp
4725 'name' => '(string) Title of site',
4726 'description' => '(string) Tagline or description of site',
4727 'URL' => '(string) Full URL to the site',
4728 + 'capabilities' => '(array) Array of capabilities for the current user on this site.',
4729 'jetpack' => '(bool) Whether the site is a Jetpack site or not',
4730 + 'is_multisite' => '(bool) Whether the site is a Multisite site or not. Always true for WP.com sites.',
4731 'post_count' => '(int) The number of posts the site has',
4732 'subscribers_count' => '(int) The number of subscribers the site has',
4733 'locale' => '(string) Primary locale code of the site',
4734 @@ -21,31 +16,23 @@ class WPCOM_JSON_API_GET_Site_V1_2_Endpoint extends WPCOM_JSON_API_GET_Site_Endp
4735 'logo' => '(array) The site logo, set in the Customizer',
4736 'visible' => '(bool) If this site is visible in the user\'s site list',
4737 'is_private' => '(bool) If the site is a private site or not',
4738 + 'single_user_site' => '(bool) Whether the site is single user. Only returned for WP.com sites and for Jetpack sites with version 3.4 or higher.',
4739 + 'is_vip' => '(bool) If the site is a VIP site or not.',
4740 'is_following' => '(bool) If the current user is subscribed to this site in the reader',
4741 'options' => '(array) An array of options/settings for the blog. Only viewable by users with post editing rights to the site. Note: Post formats is deprecated, please see /sites/$id/post-formats/',
4742 + 'plan' => '(array) Details of the current plan for this site.',
4743 'updates' => '(array) An array of available updates for plugins, themes, wordpress, and languages.',
4744 'jetpack_modules' => '(array) A list of active Jetpack modules.',
4745 'meta' => '(object) Meta data',
4746 );
4747
4748 +
4749 function callback( $path = '', $blog_id = 0 ) {
4750 add_filter( 'sites_site_format', array( $this, 'site_format' ) );
4751
4752 return parent::callback( $path, $blog_id );
4753 }
4754
4755 - //V1.2 renames lang to locale
4756 - protected function process_locale( $key, $is_user_logged_in ) {
4757 - if ( $is_user_logged_in && 'locale' == $key ) {
4758 - if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
4759 - if ( ! is_jetpack_site() ) {
4760 - return (string) get_blog_lang_code();
4761 - }
4762 - }
4763 - }
4764 - return false;
4765 - }
4766 -
4767 public function site_format( $format ) {
4768 return self::$site_format;
4769 }
4770
4771 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-term-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-term-endpoint.php
4772 new file mode 100644
4773 index 0000000..fcb9a6f
4774 --- /dev/null
4775 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-term-endpoint.php
4776 @@ -0,0 +1,38 @@
4777 +<?php
4778 +/*
4779 + * WARNING: This file is distributed verbatim in Jetpack.
4780 + * There should be nothing WordPress.com specific in this file.
4781 + *
4782 + * @hide-in-jetpack
4783 + */
4784 +
4785 +class WPCOM_JSON_API_Get_Term_Endpoint extends WPCOM_JSON_API_Endpoint {
4786 + // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
4787 + function callback( $path = '', $blog_id = 0, $taxonomy = 'category', $slug = 0 ) {
4788 + $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
4789 + if ( is_wp_error( $blog_id ) ) {
4790 + return $blog_id;
4791 + }
4792 +
4793 + if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
4794 + $this->load_theme_functions();
4795 + }
4796 +
4797 + $taxonomy_meta = get_taxonomy( $taxonomy );
4798 + if ( false === $taxonomy_meta || ( ! $taxonomy_meta->public &&
4799 + ! current_user_can( $taxonomy_meta->cap->assign_terms ) ) ) {
4800 + return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
4801 + }
4802 +
4803 + $args = $this->query_args();
4804 + $term = $this->get_taxonomy( $slug, $taxonomy, $args['context'] );
4805 + if ( ! $term || is_wp_error( $term ) ) {
4806 + return $term;
4807 + }
4808 +
4809 + /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
4810 + do_action( 'wpcom_json_api_objects', 'terms' );
4811 +
4812 + return $term;
4813 + }
4814 +}
4815
4816 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php
4817 index 9b80601..cdb0d46 100644
4818 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php
4819 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php
4820 @@ -229,7 +229,9 @@ class WPCOM_JSON_API_List_Comments_Endpoint extends WPCOM_JSON_API_Comment_Endpo
4821 if ( $args['hierarchical'] ) {
4822 $walker = new WPCOM_JSON_API_List_Comments_Walker;
4823 $comment_ids = $walker->paged_walk( $comments, get_option( 'thread_comments_depth', -1 ), isset( $args['page'] ) ? $args['page'] : 1 , $args['number'] );
4824 - $comments = array_map( 'get_comment', $comment_ids );
4825 + if ( ! empty( $comment_ids ) ) {
4826 + $comments = array_map( 'get_comment', $comment_ids );
4827 + }
4828 }
4829
4830 $return = array();
4831 @@ -244,10 +246,12 @@ class WPCOM_JSON_API_List_Comments_Endpoint extends WPCOM_JSON_API_Comment_Endpo
4832 break;
4833 case 'comments' :
4834 $return_comments = array();
4835 - foreach ( $comments as $comment ) {
4836 - $the_comment = $this->get_comment( $comment->comment_ID, $args['context'] );
4837 - if ( $the_comment && !is_wp_error( $the_comment ) ) {
4838 - $return_comments[] = $the_comment;
4839 + if ( ! empty( $comments ) ) {
4840 + foreach ( $comments as $comment ) {
4841 + $the_comment = $this->get_comment( $comment->comment_ID, $args['context'] );
4842 + if ( $the_comment && !is_wp_error( $the_comment ) ) {
4843 + $return_comments[] = $the_comment;
4844 + }
4845 }
4846 }
4847
4848
4849 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php
4850 index e5cfd7f..35efd1d 100644
4851 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php
4852 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php
4853 @@ -36,4 +36,4 @@ class WPCOM_JSON_API_List_Embeds_Endpoint extends WPCOM_JSON_API_Endpoint {
4854
4855 return $output;
4856 }
4857 -}
4858 +}
4859 \ No newline at end of file
4860
4861 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php
4862 index a5b2354..fc2e479 100644
4863 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php
4864 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php
4865 @@ -40,7 +40,6 @@ class WPCOM_JSON_API_List_Media_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint {
4866 'post_type' => 'attachment',
4867 'post_status' => 'inherit',
4868 'post_parent' => isset( $args['post_ID'] ) ? $args['post_ID'] : null,
4869 - 'offset' => isset( $args['offset'] ) ? $args['offset'] : null,
4870 'posts_per_page' => $args['number'],
4871 'post_mime_type' => isset( $args['mime_type'] ) ? $args['mime_type'] : null,
4872 'order' => isset( $args['order'] ) ? $args['order'] : 'DESC',
4873
4874 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-type-taxonomies-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-type-taxonomies-endpoint.php
4875 new file mode 100644
4876 index 0000000..be03713
4877 --- /dev/null
4878 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-type-taxonomies-endpoint.php
4879 @@ -0,0 +1,71 @@
4880 +<?php
4881 +/*
4882 + * WARNING: This file is distributed verbatim in Jetpack.
4883 + * There should be nothing WordPress.com specific in this file.
4884 + *
4885 + * @hide-in-jetpack
4886 + */
4887 +
4888 +class WPCOM_JSON_API_List_Post_Type_Taxonomies_Endpoint extends WPCOM_JSON_API_Endpoint {
4889 + static $taxonomy_keys_to_include = array(
4890 + 'name' => 'name',
4891 + 'label' => 'label',
4892 + 'labels' => 'labels',
4893 + 'description' => 'description',
4894 + 'hierarchical' => 'hierarchical',
4895 + 'public' => 'public',
4896 + 'cap' => 'capabilities',
4897 + );
4898 +
4899 + // /sites/%s/post-types/%s/taxonomies -> $blog_id, $post_type
4900 + function callback( $path = '', $blog_id = 0, $post_type = 'post' ) {
4901 + $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
4902 + if ( is_wp_error( $blog_id ) ) {
4903 + return $blog_id;
4904 + }
4905 +
4906 + if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
4907 + $this->load_theme_functions();
4908 + }
4909 +
4910 + /** This filter is documented in jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php */
4911 + if ( apply_filters( 'rest_api_localize_response', false ) ) {
4912 + // API localization occurs after the initial taxonomies have been
4913 + // registered, so re-register if localizing response
4914 + create_initial_taxonomies();
4915 + }
4916 +
4917 + $args = $this->query_args();
4918 +
4919 + $post_type_object = get_post_type_object( $post_type );
4920 + if ( ! $post_type_object || ( ! $post_type_object->publicly_queryable && (
4921 + ! current_user_can( $post_type_object->cap->edit_posts ) ) ) ) {
4922 + return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
4923 + }
4924 +
4925 + // Get a list of available taxonomies
4926 + $taxonomy_objects = get_object_taxonomies( $post_type, 'objects' );
4927 +
4928 + // Construct array of formatted objects
4929 + $formatted_taxonomy_objects = array();
4930 + foreach ( $taxonomy_objects as $taxonomy_object ) {
4931 + // Omit private taxonomies unless user has assign capability
4932 + if ( ! $taxonomy_object->public && ! current_user_can( $taxonomy_object->cap->assign_terms ) ) {
4933 + continue;
4934 + }
4935 +
4936 + // Include only the desired keys in the response
4937 + $formatted_taxonomy_object = array();
4938 + foreach ( self::$taxonomy_keys_to_include as $key => $value ) {
4939 + $formatted_taxonomy_object[ $value ] = $taxonomy_object->{ $key };
4940 + }
4941 +
4942 + $formatted_taxonomy_objects[] = $formatted_taxonomy_object;
4943 + }
4944 +
4945 + return array(
4946 + 'found' => count( $formatted_taxonomy_objects ),
4947 + 'taxonomies' => $formatted_taxonomy_objects,
4948 + );
4949 + }
4950 +}
4951
4952 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php
4953 index e7521ab..c18719f 100644
4954 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php
4955 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php
4956 @@ -8,6 +8,7 @@ class WPCOM_JSON_API_List_Post_Types_Endpoint extends WPCOM_JSON_API_Endpoint {
4957 'description' => 'description',
4958 'map_meta_cap' => 'map_meta_cap',
4959 'cap' => 'capabilities',
4960 + 'hierarchical' => 'hierarchical',
4961 );
4962
4963 // /sites/%s/post-types -> $blog_id
4964 @@ -23,9 +24,15 @@ class WPCOM_JSON_API_List_Post_Types_Endpoint extends WPCOM_JSON_API_Endpoint {
4965
4966 $args = $this->query_args();
4967
4968 - // API localization occurs after the initial post types have been
4969 - // registered, so re-register if localizing response
4970 + /**
4971 + * Whether API responses should be returned in a custom locale. False
4972 + * for Jetpack; may be true for WP.com requests.
4973 + *
4974 + * @since 3.9.2
4975 + */
4976 if ( apply_filters( 'rest_api_localize_response', false ) ) {
4977 + // API localization occurs after the initial post types have been
4978 + // registered, so re-register if localizing response
4979 create_initial_post_types();
4980 }
4981
4982
4983 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-endpoint.php
4984 index ca1c5a1..1ab369f 100644
4985 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-endpoint.php
4986 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-endpoint.php
4987 @@ -104,7 +104,7 @@ class WPCOM_JSON_API_List_Posts_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
4988
4989 if ( isset( $args['meta_key'] ) ) {
4990 $show = false;
4991 - if ( $this->is_metadata_public( $args['meta_key'] ) )
4992 + if ( WPCOM_JSON_API_Metadata::is_public( $args['meta_key'] ) )
4993 $show = true;
4994 if ( current_user_can( 'edit_post_meta', $query['post_type'], $args['meta_key'] ) )
4995 $show = true;
4996
4997 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php
4998 index 1f00936..61953a1 100644
4999 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php
5000 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php
5001 @@ -115,7 +115,7 @@ class WPCOM_JSON_API_List_Posts_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_E
5002
5003 if ( isset( $args['meta_key'] ) ) {
5004 $show = false;
5005 - if ( $this->is_metadata_public( $args['meta_key'] ) )
5006 + if ( WPCOM_JSON_API_Metadata::is_public( $args['meta_key'] ) )
5007 $show = true;
5008 if ( current_user_can( 'edit_post_meta', $query['post_type'], $args['meta_key'] ) )
5009 $show = true;
5010 @@ -296,7 +296,7 @@ class WPCOM_JSON_API_List_Posts_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_E
5011 if ( ! is_array( $args['type'] ) ) {
5012 $return[$key] = (object) array(
5013 'links' => (object) array(
5014 - 'counts' => (string) $this->get_site_link( $blog_id, 'post-counts/' . $args['type'] ),
5015 + 'counts' => (string) $this->links->get_site_link( $blog_id, 'post-counts/' . $args['type'] ),
5016 )
5017 );
5018 }
5019
5020 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php
5021 index 28a4235..9b2fc1a 100644
5022 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php
5023 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php
5024 @@ -19,9 +19,9 @@ class WPCOM_JSON_API_List_Shortcodes_Endpoint extends WPCOM_JSON_API_Endpoint {
5025 foreach ( $shortcode_tags as $tag => $class ) {
5026 if ( '__return_false' == $class )
5027 continue;
5028 - $output['shortcodes'][] = $tag;
5029 + $output['shortcodes'][] = $tag;
5030 }
5031
5032 return $output;
5033 }
5034 -}
5035 +}
5036 \ No newline at end of file
5037
5038 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-terms-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-terms-endpoint.php
5039 new file mode 100644
5040 index 0000000..c015e34
5041 --- /dev/null
5042 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-terms-endpoint.php
5043 @@ -0,0 +1,87 @@
5044 +<?php
5045 +/*
5046 + * WARNING: This file is distributed verbatim in Jetpack.
5047 + * There should be nothing WordPress.com specific in this file.
5048 + *
5049 + * @hide-in-jetpack
5050 + */
5051 +
5052 +class WPCOM_JSON_API_List_Terms_Endpoint extends WPCOM_JSON_API_Endpoint {
5053 + // /sites/%s/taxonomies/%s/terms -> $blog_id, $taxonomy
5054 + function callback( $path = '', $blog_id = 0, $taxonomy = 'category' ) {
5055 + $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
5056 + if ( is_wp_error( $blog_id ) ) {
5057 + return $blog_id;
5058 + }
5059 +
5060 + if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
5061 + $this->load_theme_functions();
5062 + }
5063 +
5064 + $taxonomy_meta = get_taxonomy( $taxonomy );
5065 + if ( false === $taxonomy_meta || ( ! $taxonomy_meta->public &&
5066 + ! current_user_can( $taxonomy_meta->cap->assign_terms ) ) ) {
5067 + return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
5068 + }
5069 +
5070 + $args = $this->query_args();
5071 + $args = $this->process_args( $args );
5072 +
5073 + $formatted_terms = $this->get_formatted_terms( $taxonomy, $args );
5074 +
5075 + if ( ! empty( $formatted_terms ) ) {
5076 + /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
5077 + do_action( 'wpcom_json_api_objects', 'terms', count( $formatted_terms ) );
5078 + }
5079 +
5080 + return array(
5081 + 'found' => (int) $this->get_found( $taxonomy, $args ),
5082 + 'terms' => (array) $formatted_terms
5083 + );
5084 + }
5085 +
5086 + function process_args( $args ) {
5087 + $args['get'] = 'all';
5088 +
5089 + if ( $args['number'] < 1 ) {
5090 + $args['number'] = 100;
5091 + } elseif ( 1000 < $args['number'] ) {
5092 + return new WP_Error( 'invalid_number', 'The number parameter must be less than or equal to 1000.', 400 );
5093 + }
5094 +
5095 + if ( isset( $args['page'] ) ) {
5096 + if ( $args['page'] < 1 ) {
5097 + $args['page'] = 1;
5098 + }
5099 +
5100 + $args['offset'] = ( $args['page'] - 1 ) * $args['number'];
5101 + unset( $args['page'] );
5102 + }
5103 +
5104 + if ( $args['offset'] < 0 ) {
5105 + $args['offset'] = 0;
5106 + }
5107 +
5108 + $args['orderby'] = $args['order_by'];
5109 + unset( $args['order_by'] );
5110 +
5111 + unset( $args['context'], $args['pretty'], $args['http_envelope'], $args['fields'] );
5112 + return $args;
5113 + }
5114 +
5115 + function get_found( $taxonomy, $args ) {
5116 + unset( $args['offset'] );
5117 + return wp_count_terms( $taxonomy, $args );
5118 + }
5119 +
5120 + function get_formatted_terms( $taxonomy, $args ) {
5121 + $terms = get_terms( $taxonomy, $args );
5122 +
5123 + $formatted_terms = array();
5124 + foreach ( $terms as $term ) {
5125 + $formatted_terms[] = $this->format_taxonomy( $term, $taxonomy, 'display' );
5126 + }
5127 +
5128 + return $formatted_terms;
5129 + }
5130 +}
5131
5132 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php
5133 index 225bfa0..fe658f9 100644
5134 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php
5135 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php
5136 @@ -19,13 +19,14 @@ class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
5137
5138 if ( $args['number'] < 1 ) {
5139 $args['number'] = 20;
5140 - } elseif ( 100 < $args['number'] ) {
5141 - return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 100.', 400 );
5142 + } elseif ( 1000 < $args['number'] ) {
5143 + return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 1000.', 400 );
5144 }
5145
5146 if ( $authors_only ) {
5147 - if ( empty( $args['type'] ) )
5148 + if ( empty( $args['type'] ) ) {
5149 $args['type'] = 'post';
5150 + }
5151
5152 if ( ! $this->is_post_type_allowed( $args['type'] ) ) {
5153 return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
5154 @@ -47,8 +48,9 @@ class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
5155 'fields' => 'ID',
5156 );
5157
5158 - if ( $authors_only )
5159 + if ( $authors_only ) {
5160 $query['who'] = 'authors';
5161 + }
5162
5163 if ( ! empty( $args['search'] ) ) {
5164 $query['search'] = $args['search'];
5165 @@ -72,7 +74,7 @@ class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
5166 foreach ( array_keys( $this->response_format ) as $key ) {
5167 switch ( $key ) {
5168 case 'found' :
5169 - $return[$key] = (int) $user_query->get_total();
5170 + $return[ $key ] = (int) $user_query->get_total();
5171 break;
5172 case 'users' :
5173 $users = array();
5174 @@ -89,7 +91,7 @@ class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
5175 }
5176 }
5177
5178 - $return[$key] = $users;
5179 + $return[ $key ] = $users;
5180 break;
5181 }
5182 }
5183
5184 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php
5185 index c77ce8d..fe61e71 100644
5186 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php
5187 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php
5188 @@ -454,11 +454,14 @@ class WPCOM_JSON_API_Menus_Complexify extends WPCOM_JSON_API_Menus_Translator {
5189 protected function location_name_exists( $location_name ) {
5190 $widget_location_names = wp_list_pluck( WPCOM_JSON_API_Menus_Widgets::get(), 'name' );
5191
5192 + $existing_locations = get_nav_menu_locations();
5193 +
5194 if ( ! is_array( get_registered_nav_menus() ) ) {
5195 return false;
5196 }
5197
5198 return array_key_exists( $location_name, get_registered_nav_menus() ) ||
5199 + array_key_exists( $location_name, $existing_locations ) ||
5200 in_array( $location_name, $widget_location_names );
5201 }
5202
5203
5204 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php
5205 index 9dc1a1f..d28d969 100644
5206 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php
5207 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php
5208 @@ -272,7 +272,7 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
5209 $response[$key] = (object) array(
5210 'ID' => (int) $parent->ID,
5211 'type' => (string) $parent->post_type,
5212 - 'link' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $parent->ID ),
5213 + 'link' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $parent->ID ),
5214 'title' => $parent_title,
5215 );
5216 } else {
5217 @@ -443,7 +443,7 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
5218 foreach ( (array) has_meta( $post_id ) as $meta ) {
5219 // Don't expose protected fields.
5220 $show = false;
5221 - if ( $this->is_metadata_public( $meta['meta_key'] ) )
5222 + if ( WPCOM_JSON_API_Metadata::is_public( $meta['meta_key'] ) )
5223 $show = true;
5224 if ( current_user_can( 'edit_post_meta', $post_id , $meta['meta_key'] ) )
5225 $show = true;
5226 @@ -467,13 +467,11 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
5227 case 'meta' :
5228 $response[$key] = (object) array(
5229 'links' => (object) array(
5230 - 'self' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
5231 - 'help' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'help' ),
5232 - 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
5233 -// 'author' => (string) $this->get_user_link( $post->post_author ),
5234 -// 'via' => (string) $this->get_post_link( $reblog_origin_blog_id, $reblog_origin_post_id ),
5235 - 'replies' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'replies/' ),
5236 - 'likes' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'likes/' ),
5237 + 'self' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
5238 + 'help' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'help' ),
5239 + 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
5240 + 'replies' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'replies/' ),
5241 + 'likes' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'likes/' ),
5242 ),
5243 );
5244 break;
5245 @@ -665,7 +663,11 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
5246 return new WP_Error( 'invalid_post', 'Invalid post', 400 );
5247 }
5248
5249 - $posts = get_posts( array( 'name' => $name ) );
5250 + $posts = get_posts( array(
5251 + 'name' => $name,
5252 + 'numberposts' => 1,
5253 + 'post_type' => $this->_get_whitelisted_post_types(),
5254 + ) );
5255
5256 if ( ! $posts || ! isset( $posts[0]->ID ) || ! $posts[0]->ID ) {
5257 $page = get_page_by_path( $name );
5258
5259 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php
5260 index 30783d1..93dade6 100644
5261 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php
5262 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php
5263 @@ -43,6 +43,7 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
5264 'menu_order' => '(int) (Pages Only) The order pages should appear in.',
5265 'page_template' => '(string) (Pages Only) The page template this page is using.',
5266 'publicize_URLs' => '(array:URL) Array of Twitter and Facebook URLs published by this post.',
5267 + 'terms' => '(object) Hash of taxonomy names mapping to a hash of terms keyed by term name.',
5268 'tags' => '(object:tag) Hash of tags (keyed by tag name) applied to the post.',
5269 'categories' => '(object:category) Hash of categories (keyed by category name) applied to the post.',
5270 'attachments' => '(object:attachment) Hash of post attachments (keyed by attachment ID). Returns the most recent 20 attachments. Use the `/sites/$site/media` endpoint to query the attachments beyond the default of 20 that are returned here.',
5271 @@ -66,31 +67,6 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
5272 parent::__construct( $args );
5273 }
5274
5275 - function is_metadata_public( $key ) {
5276 - if ( empty( $key ) )
5277 - return false;
5278 -
5279 - // Default whitelisted meta keys.
5280 - $whitelisted_meta = array( '_thumbnail_id' );
5281 -
5282 - // whitelist of metadata that can be accessed
5283 - /** This filter is documented in json-endpoints/class.wpcom-json-api-post-endpoint.php */
5284 - if ( in_array( $key, apply_filters( 'rest_api_allowed_public_metadata', $whitelisted_meta ) ) )
5285 - return true;
5286 -
5287 - if ( 0 === strpos( $key, 'geo_' ) )
5288 - return true;
5289 -
5290 - if ( 0 === strpos( $key, '_wpas_' ) )
5291 - return true;
5292 -
5293 - return false;
5294 - }
5295 -
5296 - function the_password_form() {
5297 - return __( 'This post is password protected.', 'jetpack' );
5298 - }
5299 -
5300 /**
5301 * Get a post by a specified field and value
5302 *
5303 @@ -100,15 +76,14 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
5304 * @return array Post
5305 **/
5306 function get_post_by( $field, $field_value, $context = 'display' ) {
5307 - global $blog_id;
5308
5309 - /** This filter is documented in class.json-api-endpoints.php */
5310 - $is_jetpack = true === apply_filters( 'is_jetpack_site', false, $blog_id );
5311 + // validate input
5312 + if ( ! in_array( $field, array( 'ID', 'name' ) ) ) {
5313 + return new WP_Error( 'invalid_field', 'Invalid API FIELD', 400 );
5314 + }
5315
5316 - if ( defined( 'GEO_LOCATION__CLASS' ) && class_exists( GEO_LOCATION__CLASS ) ) {
5317 - $geo = call_user_func( array( GEO_LOCATION__CLASS, 'init' ) );
5318 - } else {
5319 - $geo = false;
5320 + if ( ! in_array( $context, array( 'display', 'edit' ) ) ) {
5321 + return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
5322 }
5323
5324 if ( 'display' === $context ) {
5325 @@ -123,415 +98,178 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
5326 add_shortcode( 'gallery', array( &$this, 'win8_gallery_shortcode' ) );
5327 }
5328
5329 - switch ( $field ) {
5330 - case 'name' :
5331 - $post_id = $this->get_post_id_by_name( $field_value );
5332 - if ( is_wp_error( $post_id ) ) {
5333 - return $post_id;
5334 - }
5335 - break;
5336 - default :
5337 - $post_id = (int) $field_value;
5338 - break;
5339 - }
5340 + // fetch SAL post
5341 + $post = $this->get_sal_post_by( $field, $field_value, $context );
5342
5343 - $post = get_post( $post_id, OBJECT, $context );
5344 + if ( is_wp_error( $post ) ) {
5345 + return $post;
5346 + }
5347
5348 - if ( !$post || is_wp_error( $post ) ) {
5349 - return new WP_Error( 'unknown_post', 'Unknown post', 404 );
5350 - }
5351 + $GLOBALS['post'] = $post;
5352
5353 - if ( ! $this->is_post_type_allowed( $post->post_type ) && ( ! function_exists( 'is_post_freshly_pressed' ) || ! is_post_freshly_pressed( $post->ID ) ) ) {
5354 - return new WP_Error( 'unknown_post', 'Unknown post', 404 );
5355 + // TODO: not sure where this one should go
5356 + if ( 'display' === $context ) {
5357 + setup_postdata( $post );
5358 }
5359
5360 - // Permissions
5361 - $capabilities = $this->get_current_user_capabilities( $post );
5362 + $response = $this->render_response_keys( $post, $context, array_keys( $this->post_object_format ) );
5363
5364 - switch ( $context ) {
5365 - case 'edit' :
5366 - if ( ! $capabilities['edit_post'] ) {
5367 - return new WP_Error( 'unauthorized', 'User cannot edit post', 403 );
5368 - }
5369 - break;
5370 - case 'display' :
5371 - break;
5372 - default :
5373 - return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
5374 - }
5375 + unset( $GLOBALS['post'] );
5376
5377 - $can_view = $this->user_can_view_post( $post->ID );
5378 - if ( !$can_view || is_wp_error( $can_view ) ) {
5379 - return $can_view;
5380 - }
5381 + return $response;
5382 + }
5383
5384 - $GLOBALS['post'] = $post;
5385 + protected function get_sal_post_by( $field, $field_value, $context ) {
5386 + global $blog_id;
5387
5388 - if ( 'display' === $context ) {
5389 - setup_postdata( $post );
5390 - }
5391 + $site = $this->get_platform()->get_site( $blog_id );
5392 +
5393 + $post = ( $field === 'name' ) ?
5394 + $site->get_post_by_name( $field_value, $context ) :
5395 + $site->get_post_by_id( $field_value, $context );
5396
5397 - $response = array();
5398 - foreach ( array_keys( $this->post_object_format ) as $key ) {
5399 + return $post;
5400 + }
5401 +
5402 + private function render_response_keys( $post, $context, $keys ) {
5403 + foreach ( $keys as $key ) {
5404 switch ( $key ) {
5405 case 'ID' :
5406 // explicitly cast all output
5407 $response[$key] = (int) $post->ID;
5408 break;
5409 case 'site_ID' :
5410 - $response[$key] = (int) $this->api->get_blog_id_for_output();
5411 + $response[$key] = $post->site->get_id();
5412 break;
5413 case 'author' :
5414 - $response[$key] = (object) $this->get_author( $post, 'edit' === $context && $capabilities['edit_post'] );
5415 + $response[$key] = $post->get_author();
5416 break;
5417 case 'date' :
5418 - $response[$key] = (string) $this->format_date( $post->post_date_gmt, $post->post_date );
5419 + $response[$key] = $post->get_date();
5420 break;
5421 case 'modified' :
5422 - $response[$key] = (string) $this->format_date( $post->post_modified_gmt, $post->post_modified );
5423 + $response[$key] = $post->get_modified_date();
5424 break;
5425 case 'title' :
5426 - if ( 'display' === $context ) {
5427 - $response[$key] = (string) get_the_title( $post->ID );
5428 - } else {
5429 - $response[$key] = (string) htmlspecialchars_decode( $post->post_title, ENT_QUOTES );
5430 - }
5431 + $response[$key] = $post->get_title();
5432 break;
5433 case 'URL' :
5434 - if ( 'revision' === $post->post_type ) {
5435 - $response[$key] = (string) esc_url_raw( get_permalink( $post->post_parent ) );
5436 - } else {
5437 - $response[$key] = (string) esc_url_raw( get_permalink( $post->ID ) );
5438 - }
5439 + $response[$key] = $post->get_url();
5440 break;
5441 case 'short_URL' :
5442 - $response[$key] = (string) esc_url_raw( wp_get_shortlink( $post->ID ) );
5443 + $response[$key] = $post->get_shortlink();
5444 break;
5445 case 'content' :
5446 - if ( 'display' === $context ) {
5447 - add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
5448 - $response[$key] = (string) $this->get_the_post_content_for_display();
5449 - remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
5450 - } else {
5451 - $response[$key] = (string) $post->post_content;
5452 - }
5453 + $response[$key] = $post->get_content();
5454 break;
5455 case 'excerpt' :
5456 - if ( 'display' === $context ) {
5457 - add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
5458 - ob_start();
5459 - the_excerpt();
5460 - $response[$key] = (string) ob_get_clean();
5461 - remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
5462 - } else {
5463 - $response[$key] = htmlspecialchars_decode( (string) $post->post_excerpt, ENT_QUOTES );
5464 - }
5465 + $response[$key] = $post->get_excerpt();
5466 break;
5467 case 'status' :
5468 - $response[$key] = (string) get_post_status( $post->ID );
5469 + $response[$key] = $post->get_status();
5470 break;
5471 case 'sticky' :
5472 - $response[$key] = (bool) is_sticky( $post->ID );
5473 + $response[$key] = $post->is_sticky();
5474 break;
5475 case 'slug' :
5476 - $response[$key] = (string) $post->post_name;
5477 + $response[$key] = $post->get_slug();
5478 break;
5479 case 'guid' :
5480 - $response[$key] = (string) $post->guid;
5481 + $response[$key] = $post->get_guid();
5482 break;
5483 case 'password' :
5484 - $response[$key] = (string) $post->post_password;
5485 - if ( 'edit' === $context ) {
5486 - $response[$key] = htmlspecialchars_decode( (string) $response[$key], ENT_QUOTES );
5487 - }
5488 + $response[$key] = $post->get_password();
5489 break;
5490 case 'parent' : // (object|false)
5491 - if ( $post->post_parent ) {
5492 - $parent = get_post( $post->post_parent );
5493 - if ( 'display' === $context ) {
5494 - $parent_title = (string) get_the_title( $parent->ID );
5495 - } else {
5496 - $parent_title = (string) htmlspecialchars_decode( $post->post_title, ENT_QUOTES );
5497 - }
5498 - $response[$key] = (object) array(
5499 - 'ID' => (int) $parent->ID,
5500 - 'type' => (string) $parent->post_type,
5501 - 'link' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $parent->ID ),
5502 - 'title' => $parent_title,
5503 - );
5504 - } else {
5505 - $response[$key] = false;
5506 - }
5507 + $response[$key] = $post->get_parent();
5508 break;
5509 case 'type' :
5510 - $response[$key] = (string) $post->post_type;
5511 + $response[$key] = $post->get_type();
5512 break;
5513 case 'discussion' :
5514 - $response[$key] = array(
5515 - 'comments_open' => (bool) comments_open( $post->ID ),
5516 - 'comment_status' => (string) $post->comment_status,
5517 - 'pings_open' => (bool) pings_open( $post->ID ),
5518 - 'ping_status' => (string) $post->ping_status,
5519 - 'comment_count' => (int) $post->comment_count,
5520 - );
5521 + $response[$key] = $post->get_discussion();
5522 break;
5523 case 'likes_enabled' :
5524 - /** This filter is documented in modules/likes.php */
5525 - $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
5526 - $post_likes_switched = (bool) get_post_meta( $post->ID, 'switch_like_status', true );
5527 - $post_likes_enabled = $sitewide_likes_enabled;
5528 - if ( $post_likes_switched ) {
5529 - $post_likes_enabled = ! $post_likes_enabled;
5530 - }
5531 - $response[$key] = (bool) $post_likes_enabled;
5532 + $response[$key] = $post->is_likes_enabled();
5533 break;
5534 case 'sharing_enabled' :
5535 - $show = true;
5536 - /** This filter is documented in modules/sharedaddy/sharing-service.php */
5537 - $show = apply_filters( 'sharing_show', $show, $post );
5538 -
5539 - $switched_status = get_post_meta( $post->ID, 'sharing_disabled', false );
5540 -
5541 - if ( !empty( $switched_status ) )
5542 - $show = false;
5543 - $response[$key] = (bool) $show;
5544 + $response[$key] = $post->is_sharing_enabled();
5545 break;
5546 case 'like_count' :
5547 - $response[$key] = (int) $this->api->post_like_count( $blog_id, $post->ID );
5548 + $response[$key] = $post->get_like_count();
5549 break;
5550 case 'i_like' :
5551 - $response[$key] = (bool) $this->api->is_liked( $blog_id, $post->ID );
5552 + $response[$key] = $post->is_liked();
5553 break;
5554 case 'is_reblogged':
5555 - $response[$key] = (bool) $this->api->is_reblogged( $blog_id, $post->ID );
5556 + $response[$key] = $post->is_reblogged();
5557 break;
5558 case 'is_following':
5559 - $response[$key] = (bool) $this->api->is_following( $blog_id );
5560 + $response[$key] = $post->is_following();
5561 break;
5562 case 'global_ID':
5563 - $response[$key] = (string) $this->api->add_global_ID( $blog_id, $post->ID );
5564 + $response[$key] = $post->get_global_id();
5565 break;
5566 case 'featured_image' :
5567 - if ( $is_jetpack && ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
5568 - $response[ $key ] = get_post_meta( $post->ID, '_jetpack_featured_image', true );
5569 - } else {
5570 - $image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full' );
5571 - if ( is_array( $image_attributes ) && isset( $image_attributes[0] ) ) {
5572 - $response[ $key ] = (string) $image_attributes[0];
5573 - } else {
5574 - $response[ $key ] = '';
5575 - }
5576 - }
5577 + $response[$key] = $post->get_featured_image();
5578 break;
5579 case 'post_thumbnail' :
5580 - $response[$key] = null;
5581 -
5582 - $thumb_id = get_post_thumbnail_id( $post->ID );
5583 - if ( ! empty( $thumb_id ) ) {
5584 - $attachment = get_post( $thumb_id );
5585 - if ( ! empty( $attachment ) )
5586 - $featured_image_object = $this->get_attachment( $attachment );
5587 -
5588 - if ( ! empty( $featured_image_object ) ) {
5589 - $response[$key] = (object) $featured_image_object;
5590 - }
5591 - }
5592 + $response[$key] = $post->get_post_thumbnail();
5593 break;
5594 case 'format' :
5595 - $response[$key] = (string) get_post_format( $post->ID );
5596 - if ( !$response[$key] ) {
5597 - $response[$key] = 'standard';
5598 - }
5599 + $response[$key] = $post->get_format();
5600 break;
5601 case 'geo' : // (object|false)
5602 - if ( !$geo ) {
5603 - $response[$key] = false;
5604 - } else {
5605 - $geo_data = $geo->get_geo( 'post', $post->ID );
5606 - $response[$key] = false;
5607 - if ( $geo_data ) {
5608 - $geo_data = array_intersect_key( $geo_data, array( 'latitude' => true, 'longitude' => true, 'address' => true, 'public' => true ) );
5609 - if ( $geo_data ) {
5610 - $response[$key] = (object) array(
5611 - 'latitude' => isset( $geo_data['latitude'] ) ? (float) $geo_data['latitude'] : 0,
5612 - 'longitude' => isset( $geo_data['longitude'] ) ? (float) $geo_data['longitude'] : 0,
5613 - 'address' => isset( $geo_data['address'] ) ? (string) $geo_data['address'] : '',
5614 - );
5615 - } else {
5616 - $response[$key] = false;
5617 - }
5618 - // Private
5619 - if ( !isset( $geo_data['public'] ) || !$geo_data['public'] ) {
5620 - if ( 'edit' !== $context || ! $capabilities['edit_post'] ) {
5621 - // user can't access
5622 - $response[$key] = false;
5623 - }
5624 - }
5625 - }
5626 - }
5627 + $response[$key] = $post->get_geo();
5628 break;
5629 case 'menu_order':
5630 - $response[$key] = (int) $post->menu_order;
5631 + $response[$key] = $post->get_menu_order();
5632 break;
5633 case 'page_template':
5634 - $response[$key] = (string) get_post_meta( $post->ID, '_wp_page_template', true );
5635 + $response[$key] = $post->get_page_template();
5636 break;
5637 case 'publicize_URLs' :
5638 - $publicize_URLs = array();
5639 - $publicize = get_post_meta( $post->ID, 'publicize_results', true );
5640 - if ( $publicize ) {
5641 - foreach ( $publicize as $service => $data ) {
5642 - switch ( $service ) {
5643 - case 'twitter' :
5644 - foreach ( $data as $datum ) {
5645 - $publicize_URLs[] = esc_url_raw( "https://twitter.com/{$datum['user_id']}/status/{$datum['post_id']}" );
5646 - }
5647 - break;
5648 - case 'fb' :
5649 - foreach ( $data as $datum ) {
5650 - $publicize_URLs[] = esc_url_raw( "https://www.facebook.com/permalink.php?story_fbid={$datum['post_id']}&id={$datum['user_id']}" );
5651 - }
5652 - break;
5653 - }
5654 - }
5655 - }
5656 - $response[$key] = (array) $publicize_URLs;
5657 + $response[$key] = $post->get_publicize_urls();
5658 + break;
5659 + case 'terms':
5660 + $response[$key] = $post->get_terms();
5661 break;
5662 case 'tags' :
5663 - $response[$key] = array();
5664 - $terms = wp_get_post_tags( $post->ID );
5665 - foreach ( $terms as $term ) {
5666 - if ( !empty( $term->name ) ) {
5667 - $response[$key][$term->name] = $this->format_taxonomy( $term, 'post_tag', 'display' );
5668 - }
5669 - }
5670 - $response[$key] = (object) $response[$key];
5671 + $response[$key] = $post->get_tags();
5672 break;
5673 case 'categories':
5674 - $response[$key] = array();
5675 - $terms = wp_get_object_terms( $post->ID, 'category', array( 'fields' => 'all' ) );
5676 - foreach ( $terms as $term ) {
5677 - if ( !empty( $term->name ) ) {
5678 - $response[$key][$term->name] = $this->format_taxonomy( $term, 'category', 'display' );
5679 - }
5680 - }
5681 - $response[$key] = (object) $response[$key];
5682 + $response[$key] = $post->get_categories();
5683 break;
5684 case 'attachments':
5685 - $response[$key] = array();
5686 - $_attachments = new WP_Query( array( 'post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'posts_per_page' => '20' ) );
5687 - foreach ( $_attachments->posts as $attachment ) {
5688 - $response[$key][$attachment->ID] = $this->get_media_item_v1_1( $attachment->ID );
5689 - }
5690 - $response['attachment_count'] = $_attachments->found_posts;
5691 - $response[$key] = (object) $response[$key];
5692 + list( $attachments, $attachment_count ) = $post->get_attachments_and_count();
5693 + $response[$key] = $attachments;
5694 + $response['attachment_count'] = $attachment_count;
5695 break;
5696 case 'metadata' : // (array|false)
5697 - $metadata = array();
5698 - foreach ( (array) has_meta( $post_id ) as $meta ) {
5699 - // Don't expose protected fields.
5700 - $show = false;
5701 - if ( $this->is_metadata_public( $meta['meta_key'] ) )
5702 - $show = true;
5703 - if ( current_user_can( 'edit_post_meta', $post_id , $meta['meta_key'] ) )
5704 - $show = true;
5705 -
5706 - if ( !$show )
5707 - continue;
5708 -
5709 - $metadata[] = array(
5710 - 'id' => $meta['meta_id'],
5711 - 'key' => $meta['meta_key'],
5712 - 'value' => maybe_unserialize( $meta['meta_value'] ),
5713 - );
5714 - }
5715 -
5716 - if ( ! empty( $metadata ) ) {
5717 - $response[$key] = $metadata;
5718 - } else {
5719 - $response[$key] = false;
5720 - }
5721 + $response[$key] = $post->get_metadata();
5722 break;
5723 case 'meta' :
5724 - $response[$key] = (object) array(
5725 - 'links' => (object) array(
5726 - 'self' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
5727 - 'help' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'help' ),
5728 - 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
5729 -// 'author' => (string) $this->get_user_link( $post->post_author ),
5730 -// 'via' => (string) $this->get_post_link( $reblog_origin_blog_id, $reblog_origin_post_id ),
5731 - 'replies' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'replies/' ),
5732 - 'likes' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'likes/' ),
5733 - ),
5734 - );
5735 -
5736 - // add autosave link if a more recent autosave exists
5737 - if ( 'edit' === $context ) {
5738 - $autosave = wp_get_post_autosave( $post_id );
5739 - if ( $autosave && $autosave->post_modified > $post->post_modified )
5740 - $response[$key]->links->autosave = (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ) . '/autosave';
5741 - }
5742 -
5743 + $response[$key] = $post->get_meta();
5744 break;
5745 case 'capabilities' :
5746 - $response[$key] = $capabilities;
5747 + $response[$key] = $post->get_current_user_capabilities();
5748 break;
5749 case 'revisions' :
5750 - if ( 'edit' !== $context ) {
5751 - continue;
5752 - }
5753 - $revisions = array();
5754 - $post_revisions = wp_get_post_revisions( $post->ID );
5755 -
5756 - foreach ( $post_revisions as $_post ) {
5757 - $revisions[] = $_post->ID;
5758 + $revisions = $post->get_revisions();
5759 + if ( $revisions ) {
5760 + $response[$key] = $revisions;
5761 }
5762 -
5763 - $response[$key] = $revisions;
5764 -
5765 break;
5766 case 'other_URLs' :
5767 - $other_urls = array();
5768 -
5769 - if ( 'publish' !== $post->post_status ) {
5770 - $other_urls = $this->get_post_permalink_suggestions( $post->ID, $post->post_title );
5771 - }
5772 -
5773 - $response[$key] = (object) $other_urls;
5774 + $response[$key] = $post->get_other_urls();
5775 break;
5776 }
5777 }
5778
5779 - // WPCOM_JSON_API_Post_Endpoint::find_featured_worthy_media( $post );
5780 - // $response['featured_media'] = self::find_featured_media( $response );
5781 -
5782 - unset( $GLOBALS['post'] );
5783 return $response;
5784 }
5785
5786 - // No Blog ID parameter. No Post ID parameter. Depends on globals.
5787 - // Expects setup_postdata() to already have been run
5788 - function get_the_post_content_for_display() {
5789 - global $pages, $page;
5790 -
5791 - $old_pages = $pages;
5792 - $old_page = $page;
5793 -
5794 - $content = join( "\n\n", $pages );
5795 - $content = preg_replace( '/<!--more(.*?)?-->/', '', $content );
5796 - $pages = array( $content );
5797 - $page = 1;
5798 -
5799 - ob_start();
5800 - the_content();
5801 - $return = ob_get_clean();
5802 -
5803 - $pages = $old_pages;
5804 - $page = $old_page;
5805 -
5806 - return $return;
5807 - }
5808 -
5809 + // TODO: factor this out
5810 function get_blog_post( $blog_id, $post_id, $context = 'display' ) {
5811 $blog_id = $this->api->get_blog_id( $blog_id );
5812 if ( !$blog_id || is_wp_error( $blog_id ) ) {
5813 @@ -543,26 +281,6 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
5814 return $post;
5815 }
5816
5817 - /**
5818 - * Supporting featured media in post endpoints. Currently on for wpcom blogs
5819 - * since it's calling WPCOM_JSON_API_Read_Endpoint methods which presently
5820 - * rely on wpcom specific functionality.
5821 - *
5822 - * @param WP_Post $post
5823 - * @return object list of featured media
5824 - */
5825 - public static function find_featured_media( &$post ) {
5826 -
5827 - if ( class_exists( 'WPCOM_JSON_API_Read_Endpoint' ) ) {
5828 - return WPCOM_JSON_API_Read_Endpoint::find_featured_worthy_media( (array) $post );
5829 - } else {
5830 - return (object) array();
5831 - }
5832 -
5833 - }
5834 -
5835 -
5836 -
5837 function win8_gallery_shortcode( $attr ) {
5838 global $post;
5839
5840 @@ -623,90 +341,4 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
5841 }
5842 }
5843 }
5844 -
5845 - /**
5846 - * Returns attachment object.
5847 - *
5848 - * @param $attachment attachment row
5849 - *
5850 - * @return (object)
5851 - */
5852 - function get_attachment( $attachment ) {
5853 - $metadata = wp_get_attachment_metadata( $attachment->ID );
5854 -
5855 - $result = array(
5856 - 'ID' => (int) $attachment->ID,
5857 - 'URL' => (string) wp_get_attachment_url( $attachment->ID ),
5858 - 'guid' => (string) $attachment->guid,
5859 - 'mime_type' => (string) $attachment->post_mime_type,
5860 - 'width' => (int) isset( $metadata['width'] ) ? $metadata['width'] : 0,
5861 - 'height' => (int) isset( $metadata['height'] ) ? $metadata['height'] : 0,
5862 - );
5863 -
5864 - if ( isset( $metadata['duration'] ) ) {
5865 - $result['duration'] = (int) $metadata['duration'];
5866 - }
5867 -
5868 - /** This filter is documented in class.jetpack-sync.php */
5869 - return (object) apply_filters( 'get_attachment', $result );
5870 - }
5871 -
5872 - /**
5873 - * Get post-specific user capabilities
5874 - * @param WP_Post $post post object
5875 - * @return array array of post-level permissions; 'publish_post', 'delete_post', 'edit_post'
5876 - */
5877 - function get_current_user_capabilities( $post ) {
5878 - return array(
5879 - 'publish_post' => current_user_can( 'publish_post', $post ),
5880 - 'delete_post' => current_user_can( 'delete_post', $post ),
5881 - 'edit_post' => current_user_can( 'edit_post', $post )
5882 - );
5883 - }
5884 -
5885 - /**
5886 - * Get extra post permalink suggestions
5887 - * @param int $postID
5888 - * @param string $title
5889 - * @return array array of permalink suggestions: 'permalink_URL', 'suggested_slug'
5890 - */
5891 - function get_post_permalink_suggestions( $postID, $title ) {
5892 - $suggestions = array();
5893 - list( $suggestions['permalink_URL'], $suggestions['suggested_slug'] ) = get_sample_permalink( $postID, $title );
5894 - return $suggestions;
5895 - }
5896 -
5897 - /**
5898 - * Get post ID by name
5899 - *
5900 - * Attempts to match name on post title and page path
5901 - *
5902 - * @param string $name
5903 - *
5904 - * @return int|object Post ID on success, WP_Error object on failure
5905 - **/
5906 - protected function get_post_id_by_name( $name ) {
5907 - $name = sanitize_title( $name );
5908 -
5909 - if ( ! $name ) {
5910 - return new WP_Error( 'invalid_post', 'Invalid post', 400 );
5911 - }
5912 -
5913 - $posts = get_posts( array( 'name' => $name ) );
5914 -
5915 - if ( ! $posts || ! isset( $posts[0]->ID ) || ! $posts[0]->ID ) {
5916 - $page = get_page_by_path( $name );
5917 -
5918 - if ( ! $page ) {
5919 - return new WP_Error( 'unknown_post', 'Unknown post', 404 );
5920 - }
5921 -
5922 - $post_id = $page->ID;
5923 - } else {
5924 - $post_id = (int) $posts[0]->ID;
5925 - }
5926 -
5927 - return $post_id;
5928 - }
5929 -
5930 }
5931
5932 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-endpoint.php
5933 index fe4cf85..30c90e4 100644
5934 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-endpoint.php
5935 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-endpoint.php
5936 @@ -29,13 +29,6 @@ class WPCOM_JSON_API_Render_Embed_Endpoint extends WPCOM_JSON_API_Render_Endpoin
5937 return new WP_Error( 'invalid_embed_url', 'The embed_url parameter must be a valid URL.', 400 );
5938 }
5939
5940 - // in order for oEmbed to fire in the `$wp_embed->shortcode` method, we need to set a post as the current post
5941 - $_posts = get_posts( array( 'posts_per_page' => 1, 'suppress_filters' => false ) );
5942 - if ( ! empty( $_posts ) ) {
5943 - global $post;
5944 - $post = array_shift( $_posts );
5945 - }
5946 -
5947 global $wp_embed;
5948 $render = $this->process_render( array( $this, 'do_embed' ), $embed_url );
5949
5950 @@ -54,8 +47,4 @@ class WPCOM_JSON_API_Render_Embed_Endpoint extends WPCOM_JSON_API_Render_Endpoin
5951 return $return;
5952 }
5953
5954 - function do_embed( $embed_url ) {
5955 - global $wp_embed;
5956 - return $wp_embed->shortcode( array(), $embed_url );
5957 - }
5958 }
5959 \ No newline at end of file
5960
5961 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-endpoint.php
5962 index 273429e..f2de7fc 100644
5963 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-endpoint.php
5964 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-endpoint.php
5965 @@ -8,7 +8,7 @@ abstract class WPCOM_JSON_API_Render_Endpoint extends WPCOM_JSON_API_Endpoint {
5966 * props to o2's o2_Read_API::poll() function for inspiration.
5967 *
5968 * In short we figure out what scripts load for a "normal" page load by executing wp_head and wp_footer
5969 - * then we render our shortcode (to both get our result, and to have the shortcode files enqueue their resources)
5970 + * then we render the embed/shortcode (to both get our result, and to have the shortcode files enqueue their resources)
5971 * then we load wp_head and wp_footer again to see what new resources were added
5972 * finally we find out the url to the source file and any extra info (like media or init js)
5973 */
5974 @@ -96,7 +96,7 @@ abstract class WPCOM_JSON_API_Render_Endpoint extends WPCOM_JSON_API_Endpoint {
5975 $media = esc_attr( $wp_styles->registered[ $handle ]->args );
5976 }
5977
5978 - // add to an aray so we can return all this info
5979 + // add to an array so we can return all this info
5980 $styles[ $handle ] = array (
5981 'src' => $src,
5982 'media' => $media,
5983 @@ -121,4 +121,25 @@ abstract class WPCOM_JSON_API_Render_Endpoint extends WPCOM_JSON_API_Endpoint {
5984 return $ver;
5985 }
5986
5987 + /**
5988 + * given a shortcode, process and return the result
5989 + */
5990 + function do_shortcode( $shortcode ) {
5991 + return do_shortcode( $shortcode );
5992 + }
5993 +
5994 + /**
5995 + * given a one-line embed URL, process and return the result
5996 + */
5997 + function do_embed( $embed_url ) {
5998 + // in order for oEmbed to fire in the `$wp_embed->shortcode` method, we need to set a post as the current post
5999 + $_posts = get_posts( array( 'posts_per_page' => 1, 'suppress_filters' => false ) );
6000 + if ( ! empty( $_posts ) ) {
6001 + global $post;
6002 + $post = array_shift( $_posts );
6003 + }
6004 +
6005 + global $wp_embed;
6006 + return $wp_embed->shortcode( array(), $embed_url );
6007 + }
6008 }
6009 \ No newline at end of file
6010
6011 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php
6012 index 055f84d..8b52cfd 100644
6013 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php
6014 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php
6015 @@ -41,10 +41,4 @@ class WPCOM_JSON_API_Render_Shortcode_Endpoint extends WPCOM_JSON_API_Render_End
6016
6017 return $return;
6018 }
6019 -
6020 - function do_shortcode( $shortcode ) {
6021 - $result = do_shortcode( $shortcode );
6022 - return $result;
6023 - }
6024 -
6025 }
6026 \ No newline at end of file
6027
6028 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php
6029 index e497caf..2bca826 100644
6030 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php
6031 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php
6032 @@ -30,10 +30,10 @@ abstract class WPCOM_JSON_API_Sharing_Button_Endpoint extends WPCOM_JSON_API_End
6033 // Status is either "disabled" or the visibility value
6034 $response['visibility'] = $this->get_button_visibility( $button );
6035 }
6036 -
6037 - if ( ! empty( $button->genericon ) ) {
6038 +
6039 + if ( ! empty( $button->icon ) ) {
6040 // Only pre-defined sharing buttons include genericon
6041 - $response['genericon'] = $button->genericon;
6042 + $response['genericon'] = $button->icon;
6043 }
6044
6045 if ( method_exists( $button, 'get_options' ) ) {
6046
6047 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php
6048 index d021851..efcc84d 100644
6049 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php
6050 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php
6051 @@ -192,7 +192,13 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
6052 'twitter_via' => (string) get_option( 'twitter_via' ),
6053 'jetpack-twitter-cards-site-tag' => (string) get_option( 'jetpack-twitter-cards-site-tag' ),
6054 'eventbrite_api_token' => $eventbrite_api_token,
6055 - 'holidaysnow' => $holiday_snow
6056 + 'holidaysnow' => $holiday_snow,
6057 + 'gmt_offset' => get_option( 'gmt_offset' ),
6058 + 'timezone_string' => get_option( 'timezone_string' ),
6059 + 'jetpack_testimonial' => (bool) get_option( 'jetpack_testimonial', '0' ),
6060 + 'jetpack_testimonial_posts_per_page' => (int) get_option( 'jetpack_testimonial_posts_per_page', '10' ),
6061 + 'jetpack_portfolio' => (bool) get_option( 'jetpack_portfolio', '0' ),
6062 + 'jetpack_portfolio_posts_per_page' => (int) get_option( 'jetpack_portfolio_posts_per_page', '10' ),
6063 );
6064
6065 //allow future versions of this endpoint to support additional settings keys
6066 @@ -346,11 +352,22 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
6067 $business_plugins->activate_plugin( 'wp-google-analytics' );
6068 break;
6069
6070 + case 'jetpack_testimonial':
6071 + case 'jetpack_portfolio':
6072 case 'jetpack_comment_likes_enabled':
6073 // settings are stored as 1|0
6074 $coerce_value = (int) $value;
6075 if ( update_option( $key, $coerce_value ) ) {
6076 - $updated[ $key ] = $value;
6077 + $updated[ $key ] = (bool) $value;
6078 + }
6079 + break;
6080 +
6081 + case 'jetpack_testimonial_posts_per_page':
6082 + case 'jetpack_portfolio_posts_per_page':
6083 + // settings are stored as numeric
6084 + $coerce_value = (int) $value;
6085 + if ( update_option( $key, $coerce_value ) ) {
6086 + $updated[ $key ] = $coerce_value;
6087 }
6088 break;
6089
6090 @@ -388,6 +405,24 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
6091 }
6092 break;
6093
6094 + case 'timezone_string':
6095 + // Map UTC+- timezones to gmt_offsets and set timezone_string to empty
6096 + // https://github.com/WordPress/WordPress/blob/4.4.2/wp-admin/options.php#L175
6097 + if ( ! empty( $value ) && preg_match( '/^UTC[+-]/', $value ) ) {
6098 + $gmt_offset = preg_replace( '/UTC\+?/', '', $value );
6099 + if ( update_option( 'gmt_offset', $gmt_offset ) ) {
6100 + $updated[ 'gmt_offset' ] = $gmt_offset;
6101 + }
6102 +
6103 + $value = '';
6104 + }
6105 +
6106 + // Always set timezone_string either with the given value or with an
6107 + // empty string
6108 + if ( update_option( $key, $value ) ) {
6109 + $updated[ $key ] = $value;
6110 + }
6111 + break;
6112
6113 default:
6114 //allow future versions of this endpoint to support additional settings keys
6115 @@ -410,7 +445,6 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
6116 if ( update_option( $key, $value ) ) {
6117 $updated[ $key ] = $value;
6118 }
6119 -
6120 }
6121 }
6122
6123
6124 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-user-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-user-endpoint.php
6125 index 84a8384..7a61ce1 100644
6126 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-user-endpoint.php
6127 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-user-endpoint.php
6128 @@ -43,12 +43,9 @@ class WPCOM_JSON_API_Site_User_Endpoint extends WPCOM_JSON_API_Endpoint {
6129 return $this->get_user( $user->ID );
6130 } else if ( 'POST' === $this->api->method ) {
6131 if ( ! current_user_can_for_blog( $blog_id, 'promote_users' ) ) {
6132 - return new WP_Error( 'unauthorized', 'User cannot promote users for specified site', 403 );
6133 + return new WP_Error( 'unauthorized_no_promote_cap', 'User cannot promote users for specified site', 403 );
6134 }
6135 - if ( get_current_user_id() == $user_id ) {
6136 - return new WP_Error( 'unauthorized', 'You cannot change your own role', 403 );
6137 - }
6138 - return $this->update_user( $user_id );
6139 + return $this->update_user( $user_id, $blog_id );
6140 } else {
6141 return new WP_Error( 'bad_request', 'An unsupported request method was used.' );
6142 }
6143 @@ -69,15 +66,25 @@ class WPCOM_JSON_API_Site_User_Endpoint extends WPCOM_JSON_API_Endpoint {
6144 *
6145 * @return (array)
6146 */
6147 - public function update_user( $user_id ) {
6148 + public function update_user( $user_id, $blog_id ) {
6149 $input = $this->input();
6150 $user['ID'] = $user_id;
6151 - if ( ! ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
6152 + $is_wpcom = defined( 'IS_WPCOM' ) && IS_WPCOM;
6153 +
6154 + if ( get_current_user_id() == $user_id && isset( $input['roles'] ) ) {
6155 + return new WP_Error( 'unauthorized', 'You cannot change your own role', 403 );
6156 + }
6157 +
6158 + if ( $is_wpcom && $user_id !== get_current_user_id() && $user_id == wpcom_get_blog_owner( $blog_id ) ) {
6159 + return new WP_Error( 'unauthorized_edit_owner', 'Current user can not edit blog owner', 403 );
6160 + }
6161 +
6162 + if ( ! $is_wpcom ) {
6163 foreach ( $input as $key => $value ) {
6164 if ( ! is_array( $value ) ) {
6165 $value = trim( $value );
6166 }
6167 - $value = wp_unslash( $value );
6168 + $value = wp_unslash( $value );
6169 switch ( $key ) {
6170 case 'first_name':
6171 case 'last_name':
6172
6173 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-invites-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-invites-endpoint.php
6174 index 85a1ab9..689cef8 100644
6175 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-invites-endpoint.php
6176 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-invites-endpoint.php
6177 @@ -36,7 +36,7 @@ class WPCOM_JSON_API_Update_Invites_Endpoint extends WPCOM_JSON_API_Endpoint {
6178 'invite_key' => $invite_id,
6179 'deleted' => $this->delete_invite(),
6180 );
6181 - } else {
6182 + } else if ( $this->api->ends_with( $this->path, '/resend' ) ) {
6183 $returnValue = array(
6184 'result' => $this->is_wpcom ? $this->resend_wpcom_invite() : $this->resend_self_hosted_invite()
6185 );
6186
6187 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php
6188 index dcf84a3..5393260 100644
6189 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php
6190 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php
6191 @@ -89,6 +89,10 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
6192 return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
6193 }
6194
6195 + if ( isset( $input['status'] ) && 'trash' === $input['status'] && ! current_user_can( 'delete_post', $post_id ) ) {
6196 + return new WP_Error( 'unauthorized', 'User cannot delete post', 403 );
6197 + }
6198 +
6199 $post = get_post( $post_id );
6200 $_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
6201 $post_type = get_post_type_object( $_post_type );
6202 @@ -559,7 +563,7 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
6203
6204 if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
6205 continue;
6206 - } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || $this->is_metadata_public( $meta->key ) ) {
6207 + } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) {
6208 add_post_meta( $post_id, $meta->key, $meta->value );
6209 }
6210
6211 @@ -568,11 +572,11 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
6212
6213 if ( ! isset( $meta->value ) ) {
6214 continue;
6215 - } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
6216 + } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
6217 update_metadata_by_mid( 'post', $meta->id, $meta->value );
6218 - } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
6219 + } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
6220 update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
6221 - } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
6222 + } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
6223 update_post_meta( $post_id, $meta->key, $meta->value );
6224 }
6225
6226 @@ -685,7 +689,7 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
6227 return $featured_image;
6228 }
6229
6230 - $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id );
6231 + $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id, 'image' );
6232
6233 if ( empty( $featured_image_id ) || ! is_int( $featured_image_id ) )
6234 return false;
6235
6236 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php
6237 index 9f0bf59..d69c7d0 100644
6238 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php
6239 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php
6240 @@ -36,16 +36,21 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
6241 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
6242 remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 );
6243 add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) );
6244 - }
6245
6246 - // 'future' is an alias for 'publish' for now
6247 - if ( 'future' === $input['status'] ) {
6248 - $input['status'] = 'publish';
6249 + if ( $this->should_load_theme_functions( $post_id ) ) {
6250 + $this->load_theme_functions();
6251 + }
6252 }
6253
6254 +
6255 if ( $new ) {
6256 $input = $this->input( true );
6257
6258 + // 'future' is an alias for 'publish' for now
6259 + if ( 'future' === $input['status'] ) {
6260 + $input['status'] = 'publish';
6261 + }
6262 +
6263 if ( 'revision' === $input['type'] ) {
6264 if ( ! isset( $input['parent'] ) ) {
6265 return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
6266 @@ -94,6 +99,15 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
6267 return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
6268 }
6269
6270 + if ( isset( $input['status'] ) && 'trash' === $input['status'] && ! current_user_can( 'delete_post', $post_id ) ) {
6271 + return new WP_Error( 'unauthorized', 'User cannot delete post', 403 );
6272 + }
6273 +
6274 + // 'future' is an alias for 'publish' for now
6275 + if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
6276 + $input['status'] = 'publish';
6277 + }
6278 +
6279 $post = get_post( $post_id );
6280 $_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
6281 $post_type = get_post_type_object( $_post_type );
6282 @@ -149,26 +163,50 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
6283 unset( $input['parent'] );
6284 }
6285
6286 - $tax_input = array();
6287 + $input['terms'] = isset( $input['terms'] ) ? (array) $input['terms'] : array();
6288
6289 - foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $key => $taxonomy ) {
6290 - if ( ! isset( $input[ $key ] ) ) {
6291 - continue;
6292 + // Convert comma-separated terms to array before attempting to
6293 + // merge with hardcoded taxonomies
6294 + foreach ( $input['terms'] as $taxonomy => $terms ) {
6295 + if ( is_string( $terms ) ) {
6296 + $input['terms'][ $taxonomy ] = explode( ',', $terms );
6297 + } else if ( ! is_array( $terms ) ) {
6298 + $input['terms'][ $taxonomy ] = array();
6299 }
6300 + }
6301
6302 - $tax_input[ $taxonomy ] = array();
6303 + // For each hard-coded taxonomy, merge into terms object
6304 + foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $taxonomy_key => $taxonomy ) {
6305 + if ( ! isset( $input[ $taxonomy_key ] ) ) {
6306 + continue;
6307 + }
6308
6309 - $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
6310 + if ( ! isset( $input['terms'][ $taxonomy ] ) ) {
6311 + $input['terms'][ $taxonomy ] = array();
6312 + }
6313
6314 - if ( is_array( $input[$key] ) ) {
6315 - $terms = $input[$key];
6316 - } else {
6317 - $terms = explode( ',', $input[$key] );
6318 + $terms = $input[ $taxonomy_key ];
6319 + if ( is_string( $terms ) ) {
6320 + $terms = explode( ',', $terms );
6321 + } else if ( ! is_array( $terms ) ) {
6322 + continue;
6323 }
6324
6325 + $input['terms'][ $taxonomy ] = array_merge(
6326 + $input['terms'][ $taxonomy ],
6327 + $terms
6328 + );
6329 + }
6330 +
6331 + $tax_input = array();
6332 +
6333 + foreach ( $input['terms'] as $taxonomy => $terms ) {
6334 + $tax_input[ $taxonomy ] = array();
6335 + $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
6336 +
6337 foreach ( $terms as $term ) {
6338 /**
6339 - * `curl --data 'category[]=123'` should be interpreted as a category ID,
6340 + * `curl --data 'terms[category][]=123'` should be interpreted as a category ID,
6341 * not a category whose name is '123'.
6342 *
6343 * Consequence: To add a category/tag whose name is '123', the client must
6344 @@ -190,7 +228,7 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
6345 $tax = get_taxonomy( $taxonomy );
6346
6347 // see https://core.trac.wordpress.org/ticket/26409
6348 - if ( 'category' === $taxonomy && ! current_user_can( $tax->cap->edit_terms ) ) {
6349 + if ( $is_hierarchical && ! current_user_can( $tax->cap->edit_terms ) ) {
6350 continue;
6351 } else if ( ! current_user_can( $tax->cap->assign_terms ) ) {
6352 continue;
6353 @@ -201,10 +239,10 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
6354
6355 if ( ! is_wp_error( $term_info ) ) {
6356 if ( $is_hierarchical ) {
6357 - // Categories must be added by ID
6358 + // Hierarchical terms must be added by ID
6359 $tax_input[$taxonomy][] = (int) $term_info['term_id'];
6360 } else {
6361 - // Tags must be added by name
6362 + // Non-hierarchical terms must be added by name
6363 if ( is_int( $term ) ) {
6364 $term = get_term( $term, $taxonomy );
6365 $tax_input[$taxonomy][] = $term->name;
6366 @@ -216,11 +254,11 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
6367 }
6368 }
6369
6370 - if ( isset( $input['categories'] ) && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
6371 + if ( isset( $input['terms']['category'] ) && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
6372 $tax_input['category'][] = get_option( 'default_category' );
6373 }
6374
6375 - unset( $input['tags'], $input['categories'] );
6376 + unset( $input['terms'], $input['tags'], $input['categories'] );
6377
6378 $insert = array();
6379
6380 @@ -573,7 +611,7 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
6381
6382 if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
6383 continue;
6384 - } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || $this->is_metadata_public( $meta->key ) ) {
6385 + } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) {
6386 add_post_meta( $post_id, $meta->key, $meta->value );
6387 }
6388
6389 @@ -582,11 +620,11 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
6390
6391 if ( ! isset( $meta->value ) ) {
6392 continue;
6393 - } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
6394 + } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
6395 update_metadata_by_mid( 'post', $meta->id, $meta->value );
6396 - } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
6397 + } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
6398 update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
6399 - } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
6400 + } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
6401 update_post_meta( $post_id, $meta->key, $meta->value );
6402 }
6403
6404 @@ -617,7 +655,8 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
6405 $return['media_errors'] = $media_results['errors'];
6406
6407 if ( 'publish' !== $post->post_status ) {
6408 - $return['other_URLs'] = (object) $this->get_post_permalink_suggestions( $post_id, $input['title'] );
6409 + $sal_site = $this->get_sal_post_by( 'ID', $post_id, $args['context'] );
6410 + $return['other_URLs'] = (object) $sal_site->get_permalink_suggestions( $input['title'] );
6411 }
6412
6413 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
6414 @@ -696,7 +735,7 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
6415 return $featured_image;
6416 }
6417
6418 - $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id );
6419 + $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id, 'image' );
6420
6421 if ( empty( $featured_image_id ) || ! is_int( $featured_image_id ) )
6422 return false;
6423 @@ -724,4 +763,15 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
6424
6425 return $_user->ID;
6426 }
6427 +
6428 + protected function should_load_theme_functions( $post_id = null ) {
6429 + if ( empty( $post_id ) ) {
6430 + $input = $this->input( true );
6431 + $type = $input['type'];
6432 + } else {
6433 + $type = get_post_type( $post_id );
6434 + }
6435 +
6436 + return ! empty( $type ) && ! in_array( $type, array( 'post', 'page', 'revision' ) );
6437 + }
6438 }
6439
6440 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php
6441 index cd7dae8..6acef29 100644
6442 --- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php
6443 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php
6444 @@ -11,16 +11,20 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
6445 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
6446 remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 );
6447 add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) );
6448 - }
6449
6450 - // 'future' is an alias for 'publish' for now
6451 - if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
6452 - $input['status'] = 'publish';
6453 + if ( $this->should_load_theme_functions( $post_id ) ) {
6454 + $this->load_theme_functions();
6455 + }
6456 }
6457
6458 if ( $new ) {
6459 $input = $this->input( true );
6460
6461 + // 'future' is an alias for 'publish' for now
6462 + if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
6463 + $input['status'] = 'publish';
6464 + }
6465 +
6466 if ( 'revision' === $input['type'] ) {
6467 if ( ! isset( $input['parent'] ) ) {
6468 return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
6469 @@ -69,6 +73,15 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
6470 return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
6471 }
6472
6473 + if ( isset( $input['status'] ) && 'trash' === $input['status'] && ! current_user_can( 'delete_post', $post_id ) ) {
6474 + return new WP_Error( 'unauthorized', 'User cannot delete post', 403 );
6475 + }
6476 +
6477 + // 'future' is an alias for 'publish' for now
6478 + if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
6479 + $input['status'] = 'publish';
6480 + }
6481 +
6482 $post = get_post( $post_id );
6483 $_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
6484 $post_type = get_post_type_object( $_post_type );
6485 @@ -124,22 +137,54 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
6486 unset( $input['parent'] );
6487 }
6488
6489 - /* add taxonomies by name */
6490 - $tax_input = array();
6491 - foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $key => $taxonomy ) {
6492 - if ( ! isset( $input[ $key ] ) ) {
6493 - continue;
6494 + foreach ( array( '', '_by_id' ) as $term_key_suffix ) {
6495 + $term_input_key = 'terms' . $term_key_suffix;
6496 + if ( isset( $input[ $term_input_key ] ) ) {
6497 + $input[ $term_input_key ] = (array) $input[ $term_input_key ];
6498 + } else {
6499 + $input[ $term_input_key ] = array();
6500 }
6501
6502 - $tax_input[ $taxonomy ] = array();
6503 + // Convert comma-separated terms to array before attempting to
6504 + // merge with hardcoded taxonomies
6505 + foreach ( $input[ $term_input_key ] as $taxonomy => $terms ) {
6506 + if ( is_string( $terms ) ) {
6507 + $input[ $term_input_key ][ $taxonomy ] = explode( ',', $terms );
6508 + } else if ( ! is_array( $terms ) ) {
6509 + $input[ $term_input_key ][ $taxonomy ] = array();
6510 + }
6511 + }
6512
6513 - $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
6514 + // For each hard-coded taxonomy, merge into terms object
6515 + foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $key_prefix => $taxonomy ) {
6516 + $taxonomy_key = $key_prefix . $term_key_suffix;
6517 + if ( ! isset( $input[ $taxonomy_key ] ) ) {
6518 + continue;
6519 + }
6520
6521 - if ( is_array( $input[$key] ) ) {
6522 - $terms = $input[$key];
6523 - } else {
6524 - $terms = explode( ',', $input[$key] );
6525 + if ( ! isset( $input[ $term_input_key ][ $taxonomy ] ) ) {
6526 + $input[ $term_input_key ][ $taxonomy ] = array();
6527 + }
6528 +
6529 + $terms = $input[ $taxonomy_key ];
6530 + if ( is_string( $terms ) ) {
6531 + $terms = explode( ',', $terms );
6532 + } else if ( ! is_array( $terms ) ) {
6533 + continue;
6534 + }
6535 +
6536 + $input[ $term_input_key ][ $taxonomy ] = array_merge(
6537 + $input[ $term_input_key ][ $taxonomy ],
6538 + $terms
6539 + );
6540 }
6541 + }
6542 +
6543 + /* add terms by name */
6544 + $tax_input = array();
6545 + foreach ( $input['terms'] as $taxonomy => $terms ) {
6546 + $tax_input[ $taxonomy ] = array();
6547 + $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
6548
6549 foreach ( $terms as $term ) {
6550 /**
6551 @@ -154,7 +199,7 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
6552 $tax = get_taxonomy( $taxonomy );
6553
6554 // see https://core.trac.wordpress.org/ticket/26409
6555 - if ( 'category' === $taxonomy && ! current_user_can( $tax->cap->edit_terms ) ) {
6556 + if ( $is_hierarchical && ! current_user_can( $tax->cap->edit_terms ) ) {
6557 continue;
6558 } else if ( ! current_user_can( $tax->cap->assign_terms ) ) {
6559 continue;
6560 @@ -165,22 +210,18 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
6561
6562 if ( ! is_wp_error( $term_info ) ) {
6563 if ( $is_hierarchical ) {
6564 - // Categories must be added by ID
6565 + // Hierarchical terms must be added by ID
6566 $tax_input[$taxonomy][] = (int) $term_info['term_id'];
6567 } else {
6568 - // Tags must be added by name
6569 + // Non-hierarchical terms must be added by name
6570 $tax_input[$taxonomy][] = $term;
6571 }
6572 }
6573 }
6574 }
6575
6576 - /* add taxonomies by ID */
6577 - foreach ( array( 'categories_by_id' => 'category', 'tags_by_id' => 'post_tag' ) as $key => $taxonomy ) {
6578 - if ( ! isset( $input[ $key ] ) ) {
6579 - continue;
6580 - }
6581 -
6582 + /* add terms by ID */
6583 + foreach ( $input['terms_by_id'] as $taxonomy => $terms ) {
6584 // combine with any previous selections
6585 if ( ! isset( $tax_input[ $taxonomy ] ) || ! is_array( $tax_input[ $taxonomy ] ) ) {
6586 $tax_input[ $taxonomy ] = array();
6587 @@ -188,12 +229,6 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
6588
6589 $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
6590
6591 - if ( is_array( $input[$key] ) ) {
6592 - $terms = $input[$key];
6593 - } else {
6594 - $terms = explode( ',', $input[$key] );
6595 - }
6596 -
6597 foreach ( $terms as $term ) {
6598 $term = (string) $term; // ctype_digit compat
6599 if ( ! ctype_digit( $term ) ) {
6600 @@ -215,12 +250,12 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
6601 }
6602 }
6603
6604 - if ( ( isset( $input['categories'] ) || isset( $input['categories_by_id'] ) )
6605 - && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
6606 + if ( ( isset( $input['terms']['category'] ) || isset( $input['terms_by_id']['category'] ) )
6607 + && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
6608 $tax_input['category'][] = get_option( 'default_category' );
6609 }
6610
6611 - unset( $input['tags'], $input['categories'], $input['tags_by_id'], $input['categories_by_id'] );
6612 + unset( $input['terms'], $input['tags'], $input['categories'], $input['terms_by_id'], $input['tags_by_id'], $input['categories_by_id'] );
6613
6614 $insert = array();
6615
6616 @@ -573,7 +608,7 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
6617
6618 if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
6619 continue;
6620 - } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || $this->is_metadata_public( $meta->key ) ) {
6621 + } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) {
6622 add_post_meta( $post_id, $meta->key, $meta->value );
6623 }
6624
6625 @@ -582,11 +617,11 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
6626
6627 if ( ! isset( $meta->value ) ) {
6628 continue;
6629 - } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
6630 + } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
6631 update_metadata_by_mid( 'post', $meta->id, $meta->value );
6632 - } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
6633 + } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
6634 update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
6635 - } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
6636 + } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
6637 update_post_meta( $post_id, $meta->key, $meta->value );
6638 }
6639
6640 @@ -616,8 +651,9 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
6641 if ( ! empty( $media_results['errors'] ) )
6642 $return['media_errors'] = $media_results['errors'];
6643
6644 - if ( ! $new && 'publish' !== $post->post_status && isset( $input['title'] ) ) {
6645 - $return['other_URLs'] = (object) $this->get_post_permalink_suggestions( $post_id, $input['title'] );
6646 + if ( 'publish' !== $return['status'] && isset( $input['title'] )) {
6647 + $sal_site = $this->get_sal_post_by( 'ID', $post_id, $args['context'] );
6648 + $return['other_URLs'] = (object) $sal_site->get_permalink_suggestions( $input['title'] );
6649 }
6650
6651 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
6652 @@ -625,4 +661,15 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
6653
6654 return $return;
6655 }
6656 +
6657 + protected function should_load_theme_functions( $post_id = null ) {
6658 + if ( empty( $post_id ) ) {
6659 + $input = $this->input( true );
6660 + $type = $input['type'];
6661 + } else {
6662 + $type = get_post_type( $post_id );
6663 + }
6664 +
6665 + return ! empty( $type ) && ! in_array( $type, array( 'post', 'page', 'revision' ) );
6666 + }
6667 }
6668
6669 diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-term-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-term-endpoint.php
6670 new file mode 100644
6671 index 0000000..499a429
6672 --- /dev/null
6673 +++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-term-endpoint.php
6674 @@ -0,0 +1,164 @@
6675 +<?php
6676 +/*
6677 + * WARNING: This file is distributed verbatim in Jetpack.
6678 + * There should be nothing WordPress.com specific in this file.
6679 + *
6680 + * @hide-in-jetpack
6681 + */
6682 +
6683 +class WPCOM_JSON_API_Update_Term_Endpoint extends WPCOM_JSON_API_Taxonomy_Endpoint {
6684 + // /sites/%s/taxonomies/%s/terms/new -> $blog_id, $taxonomy
6685 + // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
6686 + // /sites/%s/taxonomies/%s/terms/slug:%s/delete -> $blog_id, $taxonomy, $slug
6687 + function callback( $path = '', $blog_id = 0, $taxonomy = 'category', $slug = 0 ) {
6688 + $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
6689 + if ( is_wp_error( $blog_id ) ) {
6690 + return $blog_id;
6691 + }
6692 +
6693 + if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
6694 + $this->load_theme_functions();
6695 + }
6696 +
6697 + $user = wp_get_current_user();
6698 + if ( ! $user || is_wp_error( $user ) || ! $user->ID ) {
6699 + return new WP_Error( 'authorization_required', 'An active access token must be used to manage taxonomies.', 403 );
6700 + }
6701 +
6702 + $taxonomy_meta = get_taxonomy( $taxonomy );
6703 + if ( false === $taxonomy_meta || (
6704 + ! $taxonomy_meta->public &&
6705 + ! current_user_can( $taxonomy_meta->cap->manage_terms ) &&
6706 + ! current_user_can( $taxonomy_meta->cap->edit_terms ) &&
6707 + ! current_user_can( $taxonomy_meta->cap->delete_terms ) ) ) {
6708 + return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
6709 + }
6710 +
6711 + if ( $this->api->ends_with( $path, '/delete' ) ) {
6712 + return $this->delete_term( $path, $blog_id, $slug, $taxonomy );
6713 + } else if ( $this->api->ends_with( $path, '/new' ) ) {
6714 + return $this->new_term( $path, $blog_id, $taxonomy );
6715 + }
6716 +
6717 + return $this->update_term( $path, $blog_id, $slug, $taxonomy );
6718 + }
6719 +
6720 + // /sites/%s/taxonomies/%s/terms/new -> $blog_id, $taxonomy
6721 + function new_term( $path, $blog_id, $taxonomy ) {
6722 + $args = $this->query_args();
6723 + $input = $this->input();
6724 + if ( ! is_array( $input ) || ! $input || ! strlen( $input['name'] ) ) {
6725 + return new WP_Error( 'invalid_input', 'Unknown data passed', 400 );
6726 + }
6727 +
6728 + $tax = get_taxonomy( $taxonomy );
6729 + if ( ! current_user_can( $tax->cap->manage_terms ) ) {
6730 + return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
6731 + }
6732 +
6733 + if ( ! isset( $input['parent'] ) || ! is_taxonomy_hierarchical( $taxonomy ) ) {
6734 + $input['parent'] = 0;
6735 + }
6736 +
6737 + if ( $term = get_term_by( 'name', $input['name'], $taxonomy ) ) {
6738 + // get_term_by is not case-sensitive, but a name with different casing is allowed
6739 + // also, the exact same name is allowed as long as the parents are different
6740 + if ( $input['name'] === $term->name && $input['parent'] === $term->parent ) {
6741 + return new WP_Error( 'duplicate', 'A taxonomy with that name already exists', 409 );
6742 + }
6743 + }
6744 +
6745 + $data = wp_insert_term( addslashes( $input['name'] ), $taxonomy, array(
6746 + 'description' => addslashes( $input['description'] ),
6747 + 'parent' => $input['parent']
6748 + ) );
6749 +
6750 + if ( is_wp_error( $data ) ) {
6751 + return $data;
6752 + }
6753 +
6754 + $term = get_term_by( 'id', $data['term_id'], $taxonomy );
6755 +
6756 + $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
6757 + if ( ! $return || is_wp_error( $return ) ) {
6758 + return $return;
6759 + }
6760 +
6761 + /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
6762 + do_action( 'wpcom_json_api_objects', 'terms' );
6763 + return $return;
6764 + }
6765 +
6766 + // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
6767 + function update_term( $path, $blog_id, $slug, $taxonomy ) {
6768 + $tax = get_taxonomy( $taxonomy );
6769 + if ( ! current_user_can( $tax->cap->edit_terms ) ) {
6770 + return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
6771 + }
6772 +
6773 + $term = get_term_by( 'slug', $slug, $taxonomy );
6774 + if ( ! $term || is_wp_error( $term ) ) {
6775 + return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
6776 + }
6777 +
6778 + $args = $this->query_args();
6779 + $input = $this->input( false );
6780 + if ( ! is_array( $input ) || ! $input ) {
6781 + return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
6782 + }
6783 +
6784 + $update = array();
6785 + if ( ! empty( $input['parent'] ) || is_taxonomy_hierarchical( $taxonomy ) ) {
6786 + $update['parent'] = $input['parent'];
6787 + }
6788 +
6789 + if ( ! empty( $input['description'] ) ) {
6790 + $update['description'] = addslashes( $input['description'] );
6791 + }
6792 +
6793 + if ( ! empty( $input['name'] ) ) {
6794 + $update['name'] = addslashes( $input['name'] );
6795 + }
6796 +
6797 + $data = wp_update_term( $term->term_id, $taxonomy, $update );
6798 + $term = get_term_by( 'id', $data['term_id'], $taxonomy );
6799 +
6800 + $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
6801 + if ( ! $return || is_wp_error( $return ) ) {
6802 + return $return;
6803 + }
6804 +
6805 + /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
6806 + do_action( 'wpcom_json_api_objects', 'terms' );
6807 + return $return;
6808 + }
6809 +
6810 + // /sites/%s/taxonomies/%s/terms/slug:%s/delete -> $blog_id, $taxonomy, $slug
6811 + function delete_term( $path, $blog_id, $slug, $taxonomy ) {
6812 + $term = get_term_by( 'slug', $slug, $taxonomy );
6813 + $tax = get_taxonomy( $taxonomy );
6814 + if ( ! current_user_can( $tax->cap->delete_terms ) ) {
6815 + return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
6816 + }
6817 +
6818 + if ( ! $term || is_wp_error( $term ) ) {
6819 + return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
6820 + }
6821 +
6822 + $args = $this->query_args();
6823 + $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
6824 + if ( ! $return || is_wp_error( $return ) ) {
6825 + return $return;
6826 + }
6827 +
6828 + /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
6829 + do_action( 'wpcom_json_api_objects', 'terms' );
6830 +
6831 + wp_delete_term( $term->term_id, $taxonomy );
6832 +
6833 + return array(
6834 + 'slug' => (string) $term->slug,
6835 + 'success' => true
6836 + );
6837 + }
6838 +}
6839
6840 diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php
6841 index 3236862..fca8173 100644
6842 --- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php
6843 +++ b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php
6844 @@ -148,6 +148,8 @@ class Jetpack_JSON_API_Plugins_Modify_Endpoint extends Jetpack_JSON_API_Plugins_
6845 remove_action( 'upgrader_process_complete', 'wp_version_check' );
6846 remove_action( 'upgrader_process_complete', 'wp_update_themes' );
6847
6848 + $result = false;
6849 +
6850 foreach ( $this->plugins as $plugin ) {
6851
6852 if ( ! in_array( $plugin, $plugin_updates_needed ) ) {
6853
6854 diff --git a/plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js b/plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js
6855 index 9ca642a..5a5bf22 100644
6856 --- a/plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js
6857 +++ b/plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js
6858 @@ -80,6 +80,7 @@ function AtD_restore_if_proofreading() {
6859 }
6860 }
6861
6862 +/* exported AtD_unbind_proofreader_listeners */
6863 function AtD_unbind_proofreader_listeners() {
6864 jQuery('#save-post, #post-preview, #publish, #edButtonPreview').unbind('focus', AtD_restore_if_proofreading );
6865 jQuery('#add_poll, #add_image, #add_video, #add_audio, #add_media').unbind('click', AtD_restore_if_proofreading );
6866 @@ -110,7 +111,7 @@ function AtD_check(button) {
6867 AtD_qtbutton = button;
6868 }
6869
6870 - if ( !jQuery('#content').size() ) {
6871 + if ( !jQuery('#content').length ) {
6872 if ( 'undefined' !== typeof callback ) {
6873 callback( 0 );
6874 }
6875
6876 diff --git a/plugins/jetpack/modules/after-the-deadline/atd.core.js b/plugins/jetpack/modules/after-the-deadline/atd.core.js
6877 index 9ebf52e..f62f68e 100644
6878 --- a/plugins/jetpack/modules/after-the-deadline/atd.core.js
6879 +++ b/plugins/jetpack/modules/after-the-deadline/atd.core.js
6880 @@ -6,7 +6,7 @@
6881 * Contact : raffi@××××××××××.com
6882 */
6883
6884 -/* jshint sub: true, devel: true, onevar: false, smarttabs: true */
6885 +/* jshint sub: true, devel: true, onevar: false, smarttabs: true, loopfunc: true */
6886 /* exported EXPORTED_SYMBOLS, atd_sprintf */
6887
6888 /* EXPORTED_SYMBOLS is set so this file can be a JavaScript Module */
6889
6890 diff --git a/plugins/jetpack/modules/after-the-deadline/jquery.atd.js b/plugins/jetpack/modules/after-the-deadline/jquery.atd.js
6891 index 7d7e768..703edad 100644
6892 --- a/plugins/jetpack/modules/after-the-deadline/jquery.atd.js
6893 +++ b/plugins/jetpack/modules/after-the-deadline/jquery.atd.js
6894 @@ -14,7 +14,7 @@
6895 * Contact : willis.rh@×××××.com
6896 */
6897
6898 -/* jshint onevar: false, sub: true, smarttabs: true */
6899 +/* jshint onevar: false, sub: true, smarttabs: true, loopfunc: true */
6900 /* global AtDCore, AtD_proofread_click_count, CSSHttpRequest, ActiveXObject */
6901
6902 var AtD =
6903
6904 diff --git a/plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js b/plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js
6905 index 90f4aec..34cb2e3 100644
6906 --- a/plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js
6907 +++ b/plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js
6908 @@ -15,7 +15,7 @@
6909 * Moxiecode Spell Checker plugin released under the LGPL with TinyMCE
6910 */
6911
6912 -/* jshint onevar: false, sub: true, devel: true */
6913 +/* jshint onevar: false, sub: true, devel: true, loopfunc: true */
6914 /* global tinymce, AtDCore, AtD_proofread_click_count */
6915
6916 (function()
6917
6918 diff --git a/plugins/jetpack/modules/carousel/jetpack-carousel.js b/plugins/jetpack/modules/carousel/jetpack-carousel.js
6919 index c7531d2..4601a1b 100644
6920 --- a/plugins/jetpack/modules/carousel/jetpack-carousel.js
6921 +++ b/plugins/jetpack/modules/carousel/jetpack-carousel.js
6922 @@ -947,6 +947,10 @@ jQuery(document).ready(function($) {
6923 medium_width = parseInt( medium_size_parts[0], 10 ),
6924 medium_height = parseInt( medium_size_parts[1], 10 );
6925
6926 + // Assign max width and height.
6927 + args.orig_max_width = args.max_width;
6928 + args.orig_max_height = args.max_height;
6929 +
6930 // Give devices with a higher devicePixelRatio higher-res images (Retina display = 2, Android phones = 1.5, etc)
6931 if ( 'undefined' !== typeof window.devicePixelRatio && window.devicePixelRatio > 1 ) {
6932 args.max_width = args.max_width * window.devicePixelRatio;
6933 @@ -968,6 +972,11 @@ jQuery(document).ready(function($) {
6934 var origPhotonUrl = args.large_file;
6935 if ( -1 !== largeFileIndex ) {
6936 origPhotonUrl = args.large_file.substring( 0, largeFileIndex );
6937 + // If we have a really large image load a smaller version
6938 + // that is closer to the viewable size
6939 + if ( args.orig_width > args.max_width || args.orig_height > args.max_height ) {
6940 + origPhotonUrl += '?fit=' + args.orig_max_width + '%2C' + args.orig_max_height;
6941 + }
6942 }
6943 return origPhotonUrl;
6944 }
6945
6946 diff --git a/plugins/jetpack/modules/comments/comments.php b/plugins/jetpack/modules/comments/comments.php
6947 index 1143eb7..c66e757 100644
6948 --- a/plugins/jetpack/modules/comments/comments.php
6949 +++ b/plugins/jetpack/modules/comments/comments.php
6950 @@ -152,15 +152,11 @@ class Jetpack_Comments extends Highlander_Comments_Base {
6951 return $avatar;
6952 }
6953
6954 - if ( false === strpos( $comment->comment_author_url, '/www.facebook.com/' ) && false === strpos( $comment->comment_author_url, '/twitter.com/' ) ) {
6955 - // It's neither FB nor Twitter - bail
6956 - return $avatar;
6957 - }
6958 -
6959 - // It's a FB or Twitter avatar
6960 + // Detect whether it's a Facebook or Twitter avatar
6961 $foreign_avatar = get_comment_meta( $comment->comment_ID, 'hc_avatar', true );
6962 - if ( empty( $foreign_avatar ) ) {
6963 - // Can't find the avatar details - bail
6964 + $foreign_avatar_hostname = parse_url( $foreign_avatar, PHP_URL_HOST );
6965 + if ( ! $foreign_avatar_hostname ||
6966 + ! preg_match( '/\.?(graph\.facebook\.com|twimg\.com)$/', $foreign_avatar_hostname ) ) {
6967 return $avatar;
6968 }
6969
6970
6971 diff --git a/plugins/jetpack/modules/contact-form/admin.php b/plugins/jetpack/modules/contact-form/admin.php
6972 index ea7c557..e0ef1db 100644
6973 --- a/plugins/jetpack/modules/contact-form/admin.php
6974 +++ b/plugins/jetpack/modules/contact-form/admin.php
6975 @@ -1,15 +1,4 @@
6976 <?php
6977 -
6978 -function grunion_menu_alter() {
6979 - if( is_rtl() ){
6980 - wp_enqueue_style( 'grunion-menu-alter', plugins_url( 'css/rtl/menu-alter-rtl.css', __FILE__ ) );
6981 - } else {
6982 - wp_enqueue_style( 'grunion-menu-alter', plugins_url( 'css/menu-alter.css', __FILE__ ) );
6983 - }
6984 -}
6985 -
6986 -add_action( 'admin_enqueue_scripts', 'grunion_menu_alter' );
6987 -
6988 /**
6989 * Add a contact form button to the post composition screen
6990 */
6991 @@ -85,13 +74,6 @@ function grunion_admin_css() {
6992 color: #D98500;
6993 }
6994
6995 -#icon-edit.icon32-posts-feedback, #icon-post.icon32-posts-feedback { background: url("<?php echo GRUNION_PLUGIN_URL; ?>images/grunion-menu-big.png") no-repeat !important; }
6996 -@media only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5) {
6997 - #icon-edit.icon32-posts-feedback, #icon-post.icon32-posts-feedback { background: url("<?php echo GRUNION_PLUGIN_URL; ?>images/grunion-menu-big-2x.png") no-repeat !important; background-size: 30px 31px !important; }
6998 -}
6999 -
7000 -#icon-edit.icon32-posts-feedback { background-position: 2px 2px !important; }
7001 -
7002 </style>
7003
7004 <?php
7005
7006 diff --git a/plugins/jetpack/modules/contact-form/css/menu-alter.css b/plugins/jetpack/modules/contact-form/css/menu-alter.css
7007 deleted file mode 100644
7008 index 47ac09c..0000000
7009 --- a/plugins/jetpack/modules/contact-form/css/menu-alter.css
7010 +++ /dev/null
7011 @@ -1,73 +0,0 @@
7012 -#menu-posts-feedback .wp-menu-image img {
7013 - display: none;
7014 -}
7015 -
7016 -#adminmenu .menu-icon-feedback div.wp-menu-image {
7017 - background: none !important;
7018 -}
7019 -
7020 -#adminmenu .menu-icon-feedback div.wp-menu-image:before {
7021 - content: '\f175';
7022 - margin-left: -1px;
7023 -}
7024 -
7025 -.jetpack-contact-form-icon:before {
7026 - content: '\f175';
7027 - color: #888;
7028 - vertical-align: text-bottom;
7029 - font: normal 18px/1 'dashicons';
7030 - speak: none;
7031 - -webkit-font-smoothing: antialiased;
7032 - -moz-osx-font-smoothing: grayscale;
7033 -}
7034 -
7035 -.pre-mp6 #adminmenu .menu-icon-feedback:hover div.wp-menu-image,
7036 -.pre-mp6 #adminmenu .menu-icon-feedback.wp-has-current-submenu div.wp-menu-image,
7037 -.pre-mp6 #adminmenu .menu-icon-feedback.current div.wp-menu-image {
7038 - background: url(../images/grunion-menu-hover.png) no-repeat 7px 7px !important;
7039 - background-size: 15px 16px !important;
7040 -}
7041 -
7042 -.pre-mp6 #adminmenu .menu-icon-feedback div.wp-menu-image {
7043 - background: url(../images/grunion-menu.png) no-repeat 7px 7px !important;
7044 - background-size: 15px 16px !important;
7045 -}
7046 -
7047 -.pre-mp6 #adminmenu .menu-icon-feedback div.wp-menu-image:before {
7048 - display: none;
7049 -}
7050 -
7051 -.pre-mp6 .jetpack-contact-form-icon {
7052 - background: url(../images/grunion-form.png) no-repeat;
7053 - width: 16px;
7054 - height: 16px;
7055 - display: inline-block;
7056 - vertical-align: middle;
7057 - background-size: 13px 12px !important;
7058 -}
7059 -
7060 -.pre-mp6 .jetpack-contact-form-icon:before {
7061 - display: none;
7062 -}
7063 -
7064 -@media only screen and (min--moz-device-pixel-ratio: 1.5),
7065 - only screen and (-o-min-device-pixel-ratio: 3/2),
7066 - only screen and (-webkit-min-device-pixel-ratio: 1.5),
7067 - only screen and (min-device-pixel-ratio: 1.5) {
7068 -
7069 - .pre-mp6 #adminmenu .menu-icon-feedback:hover div.wp-menu-image,
7070 - .pre-mp6 #adminmenu .menu-icon-feedback.wp-has-current-submenu div.wp-menu-image,
7071 - .pre-mp6 #adminmenu .menu-icon-feedback.current div.wp-menu-image {
7072 - background-image: url(../images/grunion-menu-hover-2x.png);
7073 - }
7074 -
7075 - .pre-mp6 #adminmenu .menu-icon-feedback div.wp-menu-image {
7076 - background-image: url(../images/grunion-menu-2x.png);
7077 - }
7078 -
7079 - .pre-mp6 .jetpack-contact-form-icon {
7080 - background-image: url(../images/grunion-form-2x.png);
7081 - vertical-align: bottom;
7082 - }
7083 -
7084 -}
7085
7086 diff --git a/plugins/jetpack/modules/contact-form/grunion-contact-form.php b/plugins/jetpack/modules/contact-form/grunion-contact-form.php
7087 index 343cd2f..cda94cc 100644
7088 --- a/plugins/jetpack/modules/contact-form/grunion-contact-form.php
7089 +++ b/plugins/jetpack/modules/contact-form/grunion-contact-form.php
7090 @@ -109,6 +109,7 @@ class Grunion_Contact_Form_Plugin {
7091 if ( is_admin() ) {
7092 add_action( 'admin_init', array( $this, 'download_feedback_as_csv' ) );
7093 add_action( 'admin_footer-edit.php', array( $this, 'export_form' ) );
7094 + add_action( 'current_screen', array( $this, 'unread_count' ) );
7095 }
7096
7097 // custom post type we'll use to keep copies of the feedback items
7098 @@ -120,7 +121,7 @@ class Grunion_Contact_Form_Plugin {
7099 'not_found' => __( 'No feedback found', 'jetpack' ),
7100 'not_found_in_trash' => __( 'No feedback found', 'jetpack' )
7101 ),
7102 - 'menu_icon' => GRUNION_PLUGIN_URL . '/images/grunion-menu.png',
7103 + 'menu_icon' => 'dashicons-feedback',
7104 'show_ui' => TRUE,
7105 'show_in_admin_bar' => FALSE,
7106 'public' => FALSE,
7107 @@ -191,6 +192,29 @@ class Grunion_Contact_Form_Plugin {
7108 }
7109
7110 /**
7111 + * Display the count of new feedback entries received. It's reset when user visits the Feedback screen.
7112 + *
7113 + * @since 4.1.0
7114 + */
7115 + function unread_count( $screen ) {
7116 + if ( isset( $screen->post_type ) && 'feedback' == $screen->post_type ) {
7117 + update_option( 'feedback_unread_count', 0 );
7118 + } else {
7119 + global $menu;
7120 + foreach ( $menu as $index => $menu_item ) {
7121 + if ( 'edit.php?post_type=feedback' == $menu_item[2] ) {
7122 + $unread = get_option( 'feedback_unread_count', 0 );
7123 + if ( $unread > 0 ) {
7124 + $unread_count = current_user_can( 'publish_pages' ) ? " <span class='feedback-unread count-{$unread} awaiting-mod'><span class='feedback-unread-count'>" . number_format_i18n( $unread ) . "</span></span>" : '';
7125 + $menu[ $index ][0] .= $unread_count;
7126 + }
7127 + break;
7128 + }
7129 + }
7130 + }
7131 + }
7132 +
7133 + /**
7134 * Handles all contact-form POST submissions
7135 *
7136 * Conditionally attached to `template_redirect`
7137 @@ -1904,6 +1928,17 @@ class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
7138 'Reply-To: "' . $comment_author . '" <' . $reply_to_addr . ">\r\n" .
7139 "Content-Type: text/html; charset=\"" . get_option('blog_charset') . "\"";
7140
7141 + // Build feedback reference
7142 + $feedback_time = current_time( 'mysql' );
7143 + $feedback_title = "{$comment_author} - {$feedback_time}";
7144 + $feedback_id = md5( $feedback_title );
7145 +
7146 + $all_values = array_merge( $all_values, array(
7147 + 'entry_title' => the_title_attribute( 'echo=0' ),
7148 + 'entry_permalink' => esc_url( get_permalink( get_the_ID() ) ),
7149 + 'feedback_id' => $feedback_id,
7150 + ) );
7151 +
7152 /** This filter is already documented in modules/contact-form/admin.php */
7153 $subject = apply_filters( 'contact_form_subject', $contact_form_subject, $all_values );
7154 $url = $widget ? home_url( '/' ) : get_permalink( $post->ID );
7155 @@ -1913,8 +1948,6 @@ class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
7156 $time = date_i18n( $date_time_format, current_time( 'timestamp' ) );
7157
7158 // keep a copy of the feedback as a custom post type
7159 - $feedback_time = current_time( 'mysql' );
7160 - $feedback_title = "{$comment_author} - {$feedback_time}";
7161 $feedback_status = $is_spam === TRUE ? 'spam' : 'publish';
7162
7163 foreach ( (array) $akismet_values as $av_key => $av_value ) {
7164 @@ -1946,14 +1979,20 @@ class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
7165 'post_parent' => (int) $post->ID,
7166 'post_title' => addslashes( wp_kses( $feedback_title, array() ) ),
7167 'post_content' => addslashes( wp_kses( $comment_content . "\n<!--more-->\n" . "AUTHOR: {$comment_author}\nAUTHOR EMAIL: {$comment_author_email}\nAUTHOR URL: {$comment_author_url}\nSUBJECT: {$subject}\nIP: {$comment_author_IP}\n" . print_r( $all_values, TRUE ), array() ) ), // so that search will pick up this data
7168 - 'post_name' => md5( $feedback_title ),
7169 + 'post_name' => $feedback_id,
7170 ) );
7171
7172 // once insert has finished we don't need this filter any more
7173 - remove_filter( 'wp_insert_post_data', array( $plugin, 'insert_feedback_filter' ), 10, 2 );
7174 + remove_filter( 'wp_insert_post_data', array( $plugin, 'insert_feedback_filter' ), 10 );
7175
7176 update_post_meta( $post_id, '_feedback_extra_fields', $this->addslashes_deep( $extra_values ) );
7177
7178 + if ( 'publish' == $feedback_status ) {
7179 + // Increase count of unread feedback.
7180 + $unread = get_option( 'feedback_unread_count', 0 ) + 1;
7181 + update_option( 'feedback_unread_count', $unread );
7182 + }
7183 +
7184 if ( defined( 'AKISMET_VERSION' ) ) {
7185 update_post_meta( $post_id, '_feedback_akismet_values', $this->addslashes_deep( $akismet_values ) );
7186 }
7187
7188 diff --git a/plugins/jetpack/modules/contact-form/images/grunion-menu-2x.png b/plugins/jetpack/modules/contact-form/images/grunion-menu-2x.png
7189 deleted file mode 100644
7190 index e3807b1..0000000
7191 Binary files a/plugins/jetpack/modules/contact-form/images/grunion-menu-2x.png and /dev/null differ
7192
7193 diff --git a/plugins/jetpack/modules/contact-form/images/grunion-menu-big-2x.png b/plugins/jetpack/modules/contact-form/images/grunion-menu-big-2x.png
7194 deleted file mode 100644
7195 index ace939a..0000000
7196 Binary files a/plugins/jetpack/modules/contact-form/images/grunion-menu-big-2x.png and /dev/null differ
7197
7198 diff --git a/plugins/jetpack/modules/contact-form/images/grunion-menu-big.png b/plugins/jetpack/modules/contact-form/images/grunion-menu-big.png
7199 deleted file mode 100644
7200 index c8b944b..0000000
7201 Binary files a/plugins/jetpack/modules/contact-form/images/grunion-menu-big.png and /dev/null differ
7202
7203 diff --git a/plugins/jetpack/modules/contact-form/images/grunion-menu-hover-2x.png b/plugins/jetpack/modules/contact-form/images/grunion-menu-hover-2x.png
7204 deleted file mode 100644
7205 index 97b943e..0000000
7206 Binary files a/plugins/jetpack/modules/contact-form/images/grunion-menu-hover-2x.png and /dev/null differ
7207
7208 diff --git a/plugins/jetpack/modules/contact-form/images/grunion-menu-hover.png b/plugins/jetpack/modules/contact-form/images/grunion-menu-hover.png
7209 deleted file mode 100644
7210 index 6849b80..0000000
7211 Binary files a/plugins/jetpack/modules/contact-form/images/grunion-menu-hover.png and /dev/null differ
7212
7213 diff --git a/plugins/jetpack/modules/contact-form/images/grunion-menu.png b/plugins/jetpack/modules/contact-form/images/grunion-menu.png
7214 deleted file mode 100644
7215 index 94697e6..0000000
7216 Binary files a/plugins/jetpack/modules/contact-form/images/grunion-menu.png and /dev/null differ
7217
7218 diff --git a/plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php b/plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php
7219 index 97dc2c2..c6427bb 100644
7220 --- a/plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php
7221 +++ b/plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php
7222 @@ -31,6 +31,10 @@ foreach ( $GLOBALS['csstidy']['all_properties'] as $property => $levels ) {
7223 }
7224 }
7225
7226 +// Add `display` to the list of properties that can be used multiple times in a single selector
7227 +$GLOBALS['csstidy']['multiple_properties'][] = 'display';
7228 +
7229 +// Allow vendor prefixes for any property that is allowed to be used multiple times inside a single selector
7230 foreach ( $GLOBALS['csstidy']['multiple_properties'] as $property ) {
7231 if ( '-' != $property[0] ) {
7232 $GLOBALS['csstidy']['multiple_properties'][] = '-o-' . $property;
7233
7234 diff --git a/plugins/jetpack/modules/custom-css/custom-css.php b/plugins/jetpack/modules/custom-css/custom-css.php
7235 index 48428e9..88aea4f 100644
7236 --- a/plugins/jetpack/modules/custom-css/custom-css.php
7237 +++ b/plugins/jetpack/modules/custom-css/custom-css.php
7238 @@ -962,7 +962,7 @@ class Jetpack_Custom_CSS {
7239
7240 $safecss_post = Jetpack_Custom_CSS::get_post();
7241
7242 - if ( ! empty( $safecss_post ) && 0 < $safecss_post['ID'] && wp_get_post_revisions( $safecss_post['ID'] ) )
7243 + if ( ! empty( $safecss_post ) && 0 < $safecss_post['ID'] && wp_get_post_revisions( $safecss_post['ID'], array( 'posts_per_page' => 1 ) ) )
7244 add_meta_box( 'revisionsdiv', __( 'CSS Revisions', 'jetpack' ), array( __CLASS__, 'revisions_meta_box' ), 'editcss', 'side' );
7245 ?>
7246 <div class="wrap">
7247
7248 diff --git a/plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js b/plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js
7249 index b1cc6e3..1ea72a5 100644
7250 --- a/plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js
7251 +++ b/plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js
7252 @@ -32,7 +32,6 @@
7253 },
7254
7255 checkFirst: function() {
7256 - console.log( 'first!' );
7257 NovaCheckBoxes.inputs.first().prop( 'checked', true );
7258 },
7259
7260 @@ -40,6 +39,9 @@
7261 if ( $( this ).is( ':checked' ) ) {
7262 return NovaCheckBoxes.inputs.not( this ).prop( 'checked', false );
7263 } else {
7264 + if ( $( this ).closest( '#nova_menuchecklist' ).find( ':checked' ).length > 0 ) {
7265 + return $( this ).prop( 'checked', false );
7266 + }
7267 return NovaCheckBoxes.checkFirst();
7268 }
7269 }
7270
7271 diff --git a/plugins/jetpack/modules/custom-post-types/nova.php b/plugins/jetpack/modules/custom-post-types/nova.php
7272 index a336d25..9940855 100644
7273 --- a/plugins/jetpack/modules/custom-post-types/nova.php
7274 +++ b/plugins/jetpack/modules/custom-post-types/nova.php
7275 @@ -526,9 +526,12 @@ class Nova_Restaurant {
7276 ), wp_nonce_url( $url, 'nova_move_item_down_' . $post_id ) );
7277 $menu_item = get_post($post_id);
7278 $this->get_menu_by_post_id( $post_id );
7279 + if ( $term_id = $this->get_menu_by_post_id( $post_id ) ) {
7280 + $term_id = $term_id->term_id;
7281 + }
7282 ?>
7283 <input type="hidden" class="menu-order-value" name="nova_order[<?php echo (int) $post_id ?>]" value="<?php echo esc_attr( $menu_item->menu_order ) ?>" />
7284 - <input type="hidden" class='nova-menu-term' name="nova_menu_term[<?php echo (int) $post_id ?>]" value="<?php echo esc_attr( $this->get_menu_by_post_id( $post_id )->term_id ); ?>">
7285 + <input type="hidden" class='nova-menu-term' name="nova_menu_term[<?php echo (int) $post_id ?>]" value="<?php echo esc_attr( $term_id ); ?>">
7286
7287 <span class="hide-if-js">
7288 &nbsp; &nbsp; &mdash; <a class="nova-move-item-up" data-post-id="<?php echo (int) $post_id; ?>" href="<?php echo esc_url( $up_url ); ?>">up</a>
7289 @@ -766,16 +769,25 @@ class Nova_Restaurant {
7290
7291 $term = $this->get_menu_item_menu_leaf( $post->ID );
7292
7293 - if ( false !== $last_term_id && $last_term_id === $term->term_id )
7294 - return;
7295 + $term_id = $term instanceof WP_Term ? $term->term_id : null;
7296
7297 - $last_term_id = $term->term_id;
7298 + if ( false !== $last_term_id && $last_term_id === $term_id ) {
7299 + return;
7300 + }
7301
7302 - $parent_count = 0;
7303 - $current_term = $term;
7304 - while ( $current_term->parent ) {
7305 - $parent_count++;
7306 - $current_term = get_term( $current_term->parent, self::MENU_TAX );
7307 + if ( is_null( $term_id ) ) {
7308 + $last_term_id = null;
7309 + $term_name = '';
7310 + $parent_count = 0;
7311 + } else {
7312 + $last_term_id = $term->term_id;
7313 + $term_name = $term->name;
7314 + $parent_count = 0;
7315 + $current_term = $term;
7316 + while ( $current_term->parent ) {
7317 + $parent_count++;
7318 + $current_term = get_term( $current_term->parent, self::MENU_TAX );
7319 + }
7320 }
7321
7322 $non_order_column_count = $wp_list_table->get_column_count() - 1;
7323 @@ -786,22 +798,22 @@ class Nova_Restaurant {
7324
7325 $up_url = add_query_arg( array(
7326 'action' => 'move-menu-up',
7327 - 'term_id' => (int) $term->term_id,
7328 - ), wp_nonce_url( $url, 'nova_move_menu_up_' . $term->term_id ) );
7329 + 'term_id' => (int) $term_id,
7330 + ), wp_nonce_url( $url, 'nova_move_menu_up_' . $term_id ) );
7331
7332 $down_url = add_query_arg( array(
7333 'action' => 'move-menu-down',
7334 - 'term_id' => (int) $term->term_id,
7335 - ), wp_nonce_url( $url, 'nova_move_menu_down_' . $term->term_id ) );
7336 + 'term_id' => (int) $term_id,
7337 + ), wp_nonce_url( $url, 'nova_move_menu_down_' . $term_id ) );
7338
7339 ?>
7340 - <tr class="no-items menu-label-row" data-term_id="<?php echo esc_attr( $term->term_id ) ?>">
7341 + <tr class="no-items menu-label-row" data-term_id="<?php echo esc_attr( $term_id ) ?>">
7342 <td class="colspanchange" colspan="<?php echo (int) $non_order_column_count; ?>">
7343 <h3><?php
7344 echo str_repeat( ' &mdash; ', (int) $parent_count );
7345
7346 - if ( ! is_wp_error( $term ) ) {
7347 - echo esc_html( sanitize_term_field( 'name', $term->name, $term->term_id, self::MENU_TAX, 'display' ) );
7348 + if ( $term instanceof WP_Term ) {
7349 + echo esc_html( sanitize_term_field( 'name', $term_name, $term_id, self::MENU_TAX, 'display' ) );
7350 edit_term_link( __( 'edit', 'jetpack' ), '<span class="edit-nova-section"><span class="dashicon dashicon-edit"></span>', '</span>', $term );
7351
7352 } else {
7353 @@ -810,7 +822,7 @@ class Nova_Restaurant {
7354 ?></h3>
7355 </td>
7356 <td>
7357 - <?php if ( ! is_wp_error( $term ) ) { ?>
7358 + <?php if ( $term instanceof WP_Term ) { ?>
7359 <a class="nova-move-menu-up" title="<?php esc_attr_e( 'Move menu section up', 'jetpack' ); ?>" href="<?php echo esc_url( $up_url ); ?>"><?php esc_html_e( 'UP', 'jetpack' ); ?></a>
7360 <br />
7361 <a class="nova-move-menu-down" title="<?php esc_attr_e( 'Move menu section down', 'jetpack' ); ?>" href="<?php echo esc_url( $down_url ); ?>"><?php esc_html_e( 'DOWN', 'jetpack' ); ?></a>
7362
7363 diff --git a/plugins/jetpack/modules/custom-post-types/portfolios.php b/plugins/jetpack/modules/custom-post-types/portfolios.php
7364 index 21ef148..920fcbd 100644
7365 --- a/plugins/jetpack/modules/custom-post-types/portfolios.php
7366 +++ b/plugins/jetpack/modules/custom-post-types/portfolios.php
7367 @@ -57,6 +57,7 @@ class Jetpack_Portfolio {
7368 add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
7369 add_filter( sprintf( 'manage_%s_posts_columns', self::CUSTOM_POST_TYPE), array( $this, 'edit_admin_columns' ) );
7370 add_filter( sprintf( 'manage_%s_posts_custom_column', self::CUSTOM_POST_TYPE), array( $this, 'image_column' ), 10, 2 );
7371 + add_action( 'customize_register', array( $this, 'customize_register' ) );
7372
7373 add_image_size( 'jetpack-portfolio-admin-thumb', 50, 50, true );
7374 add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) );
7375 @@ -387,6 +388,68 @@ class Jetpack_Portfolio {
7376 }
7377
7378 /**
7379 + * Adds portfolio section to the Customizer.
7380 + */
7381 + function customize_register( $wp_customize ) {
7382 + $options = get_theme_support( self::CUSTOM_POST_TYPE );
7383 +
7384 + if ( ( ! isset( $options[0]['title'] ) || true !== $options[0]['title'] ) && ( ! isset( $options[0]['content'] ) || true !== $options[0]['content'] ) && ( ! isset( $options[0]['featured-image'] ) || true !== $options[0]['featured-image'] ) ) {
7385 + return;
7386 + }
7387 +
7388 + $wp_customize->add_section( 'jetpack_portfolio', array(
7389 + 'title' => esc_html__( 'Portfolio', 'jetpack' ),
7390 + 'theme_supports' => self::CUSTOM_POST_TYPE,
7391 + 'priority' => 130,
7392 + ) );
7393 +
7394 + if ( isset( $options[0]['title'] ) && true === $options[0]['title'] ) {
7395 + $wp_customize->add_setting( 'jetpack_portfolio_title', array(
7396 + 'default' => esc_html__( 'Projects', 'jetpack' ),
7397 + 'type' => 'option',
7398 + 'sanitize_callback' => 'sanitize_text_field',
7399 + 'sanitize_js_callback' => 'sanitize_text_field',
7400 + ) );
7401 +
7402 + $wp_customize->add_control( 'jetpack_portfolio_title', array(
7403 + 'section' => 'jetpack_portfolio',
7404 + 'label' => esc_html__( 'Portfolio Archive Title', 'jetpack' ),
7405 + 'type' => 'text',
7406 + ) );
7407 + }
7408 +
7409 + if ( isset( $options[0]['content'] ) && true === $options[0]['content'] ) {
7410 + $wp_customize->add_setting( 'jetpack_portfolio_content', array(
7411 + 'default' => '',
7412 + 'type' => 'option',
7413 + 'sanitize_callback' => 'wp_kses_post',
7414 + 'sanitize_js_callback' => 'wp_kses_post',
7415 + ) );
7416 +
7417 + $wp_customize->add_control( 'jetpack_portfolio_content', array(
7418 + 'section' => 'jetpack_portfolio',
7419 + 'label' => esc_html__( 'Portfolio Archive Content', 'jetpack' ),
7420 + 'type' => 'textarea',
7421 + ) );
7422 + }
7423 +
7424 + if ( isset( $options[0]['featured-image'] ) && true === $options[0]['featured-image'] ) {
7425 + $wp_customize->add_setting( 'jetpack_portfolio_featured_image', array(
7426 + 'default' => '',
7427 + 'type' => 'option',
7428 + 'sanitize_callback' => 'attachment_url_to_postid',
7429 + 'sanitize_js_callback' => 'attachment_url_to_postid',
7430 + 'theme_supports' => 'post-thumbnails',
7431 + ) );
7432 +
7433 + $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'jetpack_portfolio_featured_image', array(
7434 + 'section' => 'jetpack_portfolio',
7435 + 'label' => esc_html__( 'Portfolio Archive Featured Image', 'jetpack' ),
7436 + ) ) );
7437 + }
7438 + }
7439 +
7440 + /**
7441 * Follow CPT reading setting on CPT archive and taxonomy pages
7442 */
7443 function query_reading_setting( $query ) {
7444
7445 diff --git a/plugins/jetpack/modules/custom-post-types/testimonial.php b/plugins/jetpack/modules/custom-post-types/testimonial.php
7446 index dfe9de4..9b0e0c3 100644
7447 --- a/plugins/jetpack/modules/custom-post-types/testimonial.php
7448 +++ b/plugins/jetpack/modules/custom-post-types/testimonial.php
7449 @@ -470,7 +470,7 @@ class Jetpack_Testimonial {
7450 ) );
7451 $wp_customize->add_control( 'jetpack_testimonials[page-title]', array(
7452 'section' => 'jetpack_testimonials',
7453 - 'label' => esc_html__( 'Testimonial Page Title', 'jetpack' ),
7454 + 'label' => esc_html__( 'Testimonial Archive Title', 'jetpack' ),
7455 'type' => 'text',
7456 ) );
7457
7458 @@ -482,7 +482,7 @@ class Jetpack_Testimonial {
7459 $wp_customize->add_control( new Jetpack_Testimonial_Textarea_Control( $wp_customize, 'jetpack_testimonials[page-content]', array(
7460 'section' => 'jetpack_testimonials',
7461 'settings' => 'jetpack_testimonials[page-content]',
7462 - 'label' => esc_html__( 'Testimonial Page Content', 'jetpack' ),
7463 + 'label' => esc_html__( 'Testimonial Archive Content', 'jetpack' ),
7464 ) ) );
7465
7466 $wp_customize->add_setting( 'jetpack_testimonials[featured-image]', array(
7467 @@ -493,7 +493,7 @@ class Jetpack_Testimonial {
7468 ) );
7469 $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'jetpack_testimonials[featured-image]', array(
7470 'section' => 'jetpack_testimonials',
7471 - 'label' => esc_html__( 'Testimonial Page Featured Image', 'jetpack' ),
7472 + 'label' => esc_html__( 'Testimonial Archive Featured Image', 'jetpack' ),
7473 ) ) );
7474
7475 // The featured image control doesn't display properly in the Customizer unless we coerce
7476
7477 diff --git a/plugins/jetpack/modules/gravatar-hovercards.php b/plugins/jetpack/modules/gravatar-hovercards.php
7478 index 33897ee..d96fcba 100644
7479 --- a/plugins/jetpack/modules/gravatar-hovercards.php
7480 +++ b/plugins/jetpack/modules/gravatar-hovercards.php
7481 @@ -81,7 +81,7 @@ jQuery( function($) {
7482 }
7483 } ).parents( 'tr' );
7484 var ftr = tr.parents( 'table' ).find( 'tr:first' );
7485 - if ( ftr.size() && !ftr.find( '#gravatar_disable_hovercards' ).size() ) {
7486 + if ( ftr.length && !ftr.find( '#gravatar_disable_hovercards' ).length ) {
7487 ftr.after( tr );
7488 }
7489 } );
7490
7491 diff --git a/plugins/jetpack/modules/infinite-scroll.php b/plugins/jetpack/modules/infinite-scroll.php
7492 index 81cb271..20d326e 100644
7493 --- a/plugins/jetpack/modules/infinite-scroll.php
7494 +++ b/plugins/jetpack/modules/infinite-scroll.php
7495 @@ -95,7 +95,8 @@ class Jetpack_Infinite_Scroll_Extras {
7496 * @return html
7497 */
7498 public function setting_google_analytics() {
7499 - echo '<label><input name="infinite_scroll_google_analytics" type="checkbox" value="1" ' . checked( true, (bool) get_option( $this->option_name_google_analytics, false ), false ) . ' /> ' . __( 'Track each Infinite Scroll post load as a page view in Google Analytics', 'jetpack' ) . '</br><small>' . __( 'By checking the box above, each new set of posts loaded via Infinite Scroll will be recorded as a page view in Google Analytics.', 'jetpack' ) . '</small>' . '</label>';
7500 + echo '<label><input name="infinite_scroll_google_analytics" type="checkbox" value="1" ' . checked( true, (bool) get_option( $this->option_name_google_analytics, false ), false ) . ' /> ' . esc_html__( 'Track each Infinite Scroll post load as a page view in Google Analytics', 'jetpack' ) . '</label>';
7501 + echo '<p class="description">' . esc_html__( 'Check the box above to record each new set of posts loaded via Infinite Scroll as a page view in Google Analytics.', 'jetpack' ) . '</p>';
7502 }
7503
7504 /**
7505
7506 diff --git a/plugins/jetpack/modules/infinite-scroll/infinity.js b/plugins/jetpack/modules/infinite-scroll/infinity.js
7507 index b19817d..d2827a3 100644
7508 --- a/plugins/jetpack/modules/infinite-scroll/infinity.js
7509 +++ b/plugins/jetpack/modules/infinite-scroll/infinity.js
7510 @@ -629,6 +629,20 @@ Scroller.prototype.updateURL = function( page ) {
7511 }
7512
7513 /**
7514 + * Pause scrolling.
7515 + */
7516 +Scroller.prototype.pause = function() {
7517 + this.disabled = true;
7518 +};
7519 +
7520 +/**
7521 + * Resume scrolling.
7522 + */
7523 +Scroller.prototype.resume = function() {
7524 + this.disabled = false;
7525 +};
7526 +
7527 +/**
7528 * Ready, set, go!
7529 */
7530 $( document ).ready( function() {
7531
7532 diff --git a/plugins/jetpack/modules/infinite-scroll/infinity.php b/plugins/jetpack/modules/infinite-scroll/infinity.php
7533 index 4d4043c..0aba8d2 100644
7534 --- a/plugins/jetpack/modules/infinite-scroll/infinity.php
7535 +++ b/plugins/jetpack/modules/infinite-scroll/infinity.php
7536 @@ -331,7 +331,7 @@ class The_Neverending_Home_Page {
7537 return;
7538
7539 // Add the setting field [infinite_scroll] and place it in Settings > Reading
7540 - add_settings_field( self::$option_name_enabled, '<span id="infinite-scroll-options">' . __( 'To infinity and beyond', 'jetpack' ) . '</span>', array( $this, 'infinite_setting_html' ), 'reading' );
7541 + add_settings_field( self::$option_name_enabled, '<span id="infinite-scroll-options">' . esc_html__( 'Infinite Scroll Behavior', 'jetpack' ) . '</span>', array( $this, 'infinite_setting_html' ), 'reading' );
7542 register_setting( 'reading', self::$option_name_enabled, 'esc_attr' );
7543 }
7544
7545 @@ -346,7 +346,8 @@ class The_Neverending_Home_Page {
7546 if ( self::get_settings()->footer_widgets || 'click' == self::get_settings()->requested_type ) {
7547 echo '<label>' . $notice . '</label>';
7548 } else {
7549 - echo '<label><input name="infinite_scroll" type="checkbox" value="1" ' . checked( 1, '' !== get_option( self::$option_name_enabled ), false ) . ' /> ' . __( 'Scroll Infinitely', 'jetpack' ) . '</br><small>' . sprintf( __( '(Shows %s posts on each load)', 'jetpack' ), number_format_i18n( self::get_settings()->posts_per_page ) ) . '</small>' . '</label>';
7550 + echo '<label><input name="infinite_scroll" type="checkbox" value="1" ' . checked( 1, '' !== get_option( self::$option_name_enabled ), false ) . ' /> ' . esc_html__( 'Check to load posts as you scroll. Uncheck to show clickable button to load posts', 'jetpack' ) . '</label>';
7551 + echo '<p class="description">' . sprintf( esc_html__( 'Shows %s posts on each load.', 'jetpack' ), number_format_i18n( self::get_settings()->posts_per_page ) ) . '</p>';
7552 }
7553 }
7554
7555
7556 diff --git a/plugins/jetpack/modules/likes.php b/plugins/jetpack/modules/likes.php
7557 index cb9c477..33dacce 100644
7558 --- a/plugins/jetpack/modules/likes.php
7559 +++ b/plugins/jetpack/modules/likes.php
7560 @@ -19,7 +19,7 @@ Jetpack::dns_prefetch( array(
7561 ) );
7562
7563 class Jetpack_Likes {
7564 - public $version = '20151215';
7565 + public $version = '20160429';
7566
7567 public static function init() {
7568 static $instance = NULL;
7569 @@ -320,7 +320,7 @@ class Jetpack_Likes {
7570 header = table.prevAll( 'h3:first' ),
7571 newParent = $( '#moderation_notify' ).parent( 'label' ).parent();
7572
7573 - if ( !table.size() || !header.size() || !newParent.size() ) {
7574 + if ( !table.length || !header.length || !newParent.length ) {
7575 return;
7576 }
7577
7578
7579 diff --git a/plugins/jetpack/modules/likes/queuehandler.js b/plugins/jetpack/modules/likes/queuehandler.js
7580 index 031bb0d..ef67dc1 100644
7581 --- a/plugins/jetpack/modules/likes/queuehandler.js
7582 +++ b/plugins/jetpack/modules/likes/queuehandler.js
7583 @@ -1,4 +1,4 @@
7584 -/* global pm, wpcom_reblog */
7585 +/* global pm, wpcom_reblog, JSON */
7586
7587 var jetpackLikesWidgetQueue = [];
7588 var jetpackLikesWidgetBatch = [];
7589
7590 diff --git a/plugins/jetpack/modules/manage.php b/plugins/jetpack/modules/manage.php
7591 index f924914..e084e9d 100644
7592 --- a/plugins/jetpack/modules/manage.php
7593 +++ b/plugins/jetpack/modules/manage.php
7594 @@ -7,9 +7,9 @@
7595 * Recommendation Order: 3
7596 * First Introduced: 3.4
7597 * Requires Connection: Yes
7598 - * Auto Activate: No
7599 + * Auto Activate: Yes
7600 * Module Tags: Centralized Management, Recommended
7601 - * Feature: Recommended, Jumpstart
7602 + * Feature: Recommended
7603 * Additional Search Queries: manage, management, remote
7604 */
7605
7606
7607 diff --git a/plugins/jetpack/modules/publicize/ui.php b/plugins/jetpack/modules/publicize/ui.php
7608 index 92551f1..4f91873 100644
7609 --- a/plugins/jetpack/modules/publicize/ui.php
7610 +++ b/plugins/jetpack/modules/publicize/ui.php
7611 @@ -23,7 +23,17 @@ class Publicize_UI {
7612
7613 function init() {
7614 // Show only to users with the capability required to manage their Publicize connections.
7615 - if ( ! current_user_can( 'publish_posts' ) ) {
7616 + /**
7617 + * Filter what user capability is required to use the publicize form on the edit post page. Useful if publish post capability has been removed from role.
7618 + *
7619 + * @module publicize
7620 + *
7621 + * @since 4.1.0
7622 + *
7623 + * @param string $capability User capability needed to use publicize
7624 + */
7625 + $capability = apply_filters( 'jetpack_publicize_capability', 'publish_posts' );
7626 + if ( ! current_user_can( $capability ) ) {
7627 return;
7628 }
7629
7630 @@ -312,7 +322,7 @@ class Publicize_UI {
7631 <script type="text/javascript">
7632 jQuery( function($) {
7633 var wpasTitleCounter = $( '#wpas-title-counter' ),
7634 - wpasTwitterCheckbox = $( '.wpas-submit-twitter' ).size(),
7635 + wpasTwitterCheckbox = $( '.wpas-submit-twitter' ).length,
7636 wpasTitle = $('#wpas-title').keyup( function() {
7637 var length = wpasTitle.val().length;
7638 wpasTitleCounter.text( length );
7639 @@ -338,7 +348,7 @@ jQuery( function($) {
7640 $('#publicize-form').slideDown( 'fast', function() {
7641 wpasTitle.focus();
7642 if ( !wpasTitle.text() ) {
7643 - var url = $('#shortlink').size() ? $('#shortlink').val() : '';
7644 + var url = $('#shortlink').length ? $('#shortlink').val() : '';
7645
7646 var defaultMessage = $.trim( '<?php printf( $default_prefix, 'url' ); printf( $default_message, '$("#title").val()', 'url' ); printf( $default_suffix, 'url' ); ?>' );
7647
7648
7649 diff --git a/plugins/jetpack/modules/related-posts/jetpack-related-posts.php b/plugins/jetpack/modules/related-posts/jetpack-related-posts.php
7650 index d61d4e7..5a5d1ae 100644
7651 --- a/plugins/jetpack/modules/related-posts/jetpack-related-posts.php
7652 +++ b/plugins/jetpack/modules/related-posts/jetpack-related-posts.php
7653 @@ -468,10 +468,10 @@ EOT;
7654
7655 var update_preview = function() {
7656 var html = '';
7657 - if ( $( 'input[name="jetpack_relatedposts[show_headline]"]:checked' ).size() ) {
7658 + if ( $( 'input[name="jetpack_relatedposts[show_headline]"]:checked' ).length ) {
7659 html += '$related_headline';
7660 }
7661 - if ( $( 'input[name="jetpack_relatedposts[show_thumbnails]"]:checked' ).size() ) {
7662 + if ( $( 'input[name="jetpack_relatedposts[show_thumbnails]"]:checked' ).length ) {
7663 html += '$related_with_images';
7664 } else {
7665 html += '$related_without_images';
7666
7667 diff --git a/plugins/jetpack/modules/related-posts/related-posts.css b/plugins/jetpack/modules/related-posts/related-posts.css
7668 index 987b45d..8aaeb94 100644
7669 --- a/plugins/jetpack/modules/related-posts/related-posts.css
7670 +++ b/plugins/jetpack/modules/related-posts/related-posts.css
7671 @@ -105,6 +105,7 @@
7672 left:0;
7673 right:0;
7674 display:block;
7675 + border-bottom: 0;
7676 }
7677
7678 #jp-relatedposts .jp-relatedposts-items p {
7679
7680 diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css b/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css
7681 index f4e1b36..a0f428a 100644
7682 --- a/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css
7683 +++ b/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css
7684 @@ -101,7 +101,7 @@ li.service span:before {
7685 color: #555;
7686 display: inline-block;
7687 -webkit-font-smoothing: antialiased;
7688 - font: normal 16px/1 'Noticons', 'Genericons';
7689 + font: normal 18px/1 'social-logos';
7690 vertical-align: top;
7691 position: relative;
7692 top: 1px;
7693 @@ -134,9 +134,6 @@ li.service.share-tumblr span:before {
7694 li.service.share-pocket span:before {
7695 content: '\f224';
7696 }
7697 -li.service.share-skype span:before {
7698 - content: '\f220';
7699 -}
7700 li.service.share-pinterest span:before {
7701 content: '\f209';
7702 }
7703 @@ -144,12 +141,20 @@ li.service.share-google-plus-1 span:before {
7704 content: '\f218';
7705 }
7706 li.service.share-facebook span:before {
7707 - content: '\f204';
7708 + content: '\f203';
7709 }
7710 li.service.share-press-this span:before { /* Fixme: remove this button in favor of reblog */
7711 content: '\f205';
7712 }
7713 -
7714 +li.service.share-telegram span:before {
7715 + content: '\f606';
7716 +}
7717 +li.service.share-jetpack-whatsapp span:before {
7718 + content: '\f608';
7719 +}
7720 +li.service.share-skype span:before {
7721 + content: '\f220';
7722 +}
7723
7724 /**
7725 * Preview section
7726 @@ -311,8 +316,7 @@ body.settings_page_sharing .advanced input[type=submit] {
7727 background: url(images/linkedin-smart.png) no-repeat top center;
7728 background-size: 99px 18px;
7729 width:99px;
7730 - height:18px;
7731 - margin-top: 1px;
7732 + height:20px;
7733 }
7734
7735 .preview-google-plus-1 .option-smart-on {
7736 @@ -349,7 +353,49 @@ body.settings_page_sharing .advanced input[type=submit] {
7737 width: 60px;
7738 height: 20px;
7739 }
7740 +@media
7741 +(-webkit-min-device-pixel-ratio: 1.25),
7742 +(min-resolution: 120dpi) {
7743 + .preview-digg .option-smart-on {
7744 + background-image: url(images/smart-digg@××.png);
7745 + }
7746
7747 + .preview-reddit .option-smart-on {
7748 + background-image: url(images/smart-reddit@××.png);
7749 + }
7750 +
7751 + .preview-facebook .option-smart-on {
7752 + background-image: url(images/smart-like@××.png);
7753 + }
7754 +
7755 + .preview-twitter .option-smart-on {
7756 + background-image: url(images/smart-twitter@××.png?1);
7757 + }
7758 +
7759 + .preview-linkedin .option-smart-on {
7760 + background-image: url(images/linkedin-smart@××.png);
7761 + }
7762 +
7763 + .preview-google-plus-1 .option-smart-on {
7764 + background-image: url(images/smart-googleplus1@××.png);
7765 + }
7766 +
7767 + .preview-tumblr .option-smart-on {
7768 + background-image: url(images/smart-tumblr@××.png);
7769 + }
7770 +
7771 + .preview-pinterest .option-smart-on {
7772 + background-image: url(images/smart-pinterest@××.png);
7773 + }
7774 +
7775 + .preview-pocket .option-smart-on {
7776 + background-image: url(images/smart-pocket@××.png);
7777 + }
7778 +
7779 + .preview-skype .option-smart-on {
7780 + background-image: url(images/smart-skype@××.png);
7781 + }
7782 +}
7783
7784 /**
7785 * Overflow sharing dialog
7786
7787 diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css b/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css
7788 index 1807d0a..0b56d04 100644
7789 --- a/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css
7790 +++ b/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css
7791 @@ -1 +1 @@
7792 -#services-config{min-width:700px;width:100%;float:right}#services-config h3{font-weight:400;font-size:15px;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;color:#464646}#available-services,#enabled-services,#live-preview{padding:20px 0 0;width:100%;border-spacing:0}#enabled-services .ui-sortable{min-height:50px}#enabled-services{padding-bottom:20px}#available-services,#enabled-services{border-bottom:2px solid #ccc}#live-preview{border-bottom:1px solid #dfdfdf;padding-bottom:60px}#available-services h3,#enabled-services h3,#live-preview h3{padding:0;margin-top:0;margin-bottom:1em}body.settings_page_sharing .description{width:180px;vertical-align:top}body.settings_page_sharing .description p{font-size:13px;font-style:italic}body.settings_page_sharing .services{padding:0 20px;vertical-align:top}body.settings_page_sharing .services ul li{float:right;cursor:move}body.settings_page_sharing .services ul li.divider{border:none;padding:0;background:0 0;cursor:default}body.settin
7793 gs_page_sharing ul.services-hidden{margin-bottom:0}#available-services .service,#enabled-services .service{margin-left:10px;padding:5px 5px 5px 10px;border-radius:3px;border:1px solid #bbb;background:center center no-repeat #f8f8f8}#available-services .service:hover,#enabled-services .service:hover{background:#fff;border:1px solid #bbb;box-shadow:0 1px 3px rgba(0,0,0,.2)}li.service span:before{color:#555;display:inline-block;-webkit-font-smoothing:antialiased;font:400 16px/1 Noticons,Genericons;vertical-align:top;position:relative;top:1px;margin-left:3px;width:16px;height:16px;text-align:center}li.service.share-print span:before{content:'\f469'}li.service.share-digg span:before{content:'\f221'}li.service.share-email span:before{content:'\f410'}li.service.share-linkedin span:before{content:'\f207'}li.service.share-twitter span:before{content:'\f202'}li.service.share-reddit span:before{content:'\f222'}li.service.share-tumblr span:before{content:'\f214'}li.service.share-pocket span:bef
7794 ore{content:'\f224'}li.service.share-skype span:before{content:'\f220'}li.service.share-pinterest span:before{content:'\f209'}li.service.share-google-plus-1 span:before{content:'\f218'}li.service.share-facebook span:before{content:'\f204'}li.service.share-press-this span:before{content:'\f205'}body.settings_page_sharing ul.preview{float:right;margin:0}body.settings_page_sharing ul.preview li.preview-item,body.settings_page_sharing ul.preview li.preview-item a{cursor:default;text-decoration:none}div.sd-social-icon .inner li.preview-item a span,div.sd-social-icon ul.preview li.preview-item a span{display:none}div.sd-social-icon ul.preview li.preview-item.preview-custom a span{display:inline-block}.services .preview li.share-custom a{text-decoration:none}.services ul li.end-fix{clear:both;float:none;visibility:hidden;padding:0;margin:0;height:20px;width:0}#enabled-services h2{font-size:20px;padding-top:0;font-weight:400!important;color:#999}body.settings_page_sharing #live-preview h2{f
7795 ont-size:20px;font-weight:400!important;color:#e3e3e3}body.settings_page_sharing .clearing{clear:both}body.settings_page_sharing .options .options-left{float:right}body.settings_page_sharing .input label{font-size:11px;line-height:16px}body.settings_page_sharing .advanced-form{padding:10px 10px 8px 14px;margin-right:-24px;display:none;border-top:1px #e3e3e3 solid;margin-top:4px}body.settings_page_sharing .utility{float:left;padding-top:10px;padding-left:10px;font-size:10px}body.settings_page_sharing .advanced input[type=submit]{float:right;margin-top:10px;margin-left:10px}.services li.dropzone{border:1px dashed #999;border-radius:3px;background:#e3e3e3;margin-left:10px;padding:5px;height:18px}.advanced-form .form-table th{width:auto!important}.advanced-form .button-secondary{margin-top:0!important}#hidden-drop-target{background:#e1e1e1;border:1px solid #cdcdcd;width:29%;padding:10px;vertical-align:top}#hidden-drop-target p{font-size:13px;font-style:italic;margin:0 0 10px}.preview li
7796 .preview-item{background-position:0 5px;cursor:default}.preview .option-smart-on{margin:3px 0 0 5px}.preview-digg .option-smart-on{background:url(images/smart-digg.png) top right/76px 17px no-repeat;width:76px;height:17px;margin-top:2px}.preview-reddit .option-smart-on{background:url(images/smart-reddit.png) top right/104px 21px no-repeat;width:104px;height:21px}.preview-facebook .option-smart-on{background:url(images/smart-like.png) top right/85px 20px no-repeat;width:85px;height:20px}.preview-twitter .option-smart-on{background:url(images/smart-twitter.png?1) top right/60px 20px no-repeat;width:60px;height:20px}.preview-linkedin .option-smart-on{background:url(images/linkedin-smart.png) top center/99px 18px no-repeat;width:99px;height:18px;margin-top:1px}.preview-google-plus-1 .option-smart-on{background:url(images/smart-googleplus1.png) top right/96px 20px no-repeat;width:96px;height:20px}.preview-tumblr .option-smart-on{background:url(images/smart-tumblr.png) top right/62px 20px
7797 no-repeat;width:62px;height:20px}.preview-pinterest .option-smart-on{background:url(images/smart-pinterest.png) top right/39px 20px no-repeat;width:39px;height:20px}.preview-pocket .option-smart-on{background:url(images/smart-pocket.png) top right/60px 20px no-repeat;width:60px;height:20px}.preview-skype .option-smart-on{background:url(images/smart-skype.png) top right/60px 20px no-repeat;width:60px;height:20px}.services .sharing-hidden li{background-color:transparent}.sharing-hidden li.share-end{clear:both;height:0;padding:0!important;margin:0!important;width:0;visibility:hidden;float:none}.preview .sharing-label{font-weight:700;border:0;padding:4px 0 0 6px}#services-config a.remove{background:#ddd;color:#fff;padding:0 4px 2px;border-radius:15px;-moz-border-radius:15px;-webkit-border-radius:15px;text-decoration:none;font-weight:700;font-size:10px}#services-config a.remove:hover{background:red}.sd-social-icon .inner a.sd-button span,.sd-social-icon .inner a.share-icon span{display:
7798 inline-block;overflow:hidden;width:0;text-indent:100%}
7799 \ No newline at end of file
7800 +#services-config{min-width:700px;width:100%;float:right}#services-config h3{font-weight:400;font-size:15px;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;color:#464646}#available-services,#enabled-services,#live-preview{padding:20px 0 0;width:100%;border-spacing:0}#enabled-services .ui-sortable{min-height:50px}#enabled-services{padding-bottom:20px}#available-services,#enabled-services{border-bottom:2px solid #ccc}#live-preview{border-bottom:1px solid #dfdfdf;padding-bottom:60px}#available-services h3,#enabled-services h3,#live-preview h3{padding:0;margin-top:0;margin-bottom:1em}body.settings_page_sharing .description{width:180px;vertical-align:top}body.settings_page_sharing .description p{font-size:13px;font-style:italic}body.settings_page_sharing .services{padding:0 20px;vertical-align:top}body.settings_page_sharing .services ul li{float:right;cursor:move}body.settings_page_sharing .services ul li.divider{border:none;padding:0;background:0 0;cursor:default}body.settin
7801 gs_page_sharing ul.services-hidden{margin-bottom:0}#available-services .service,#enabled-services .service{margin-left:10px;padding:5px 5px 5px 10px;border-radius:3px;border:1px solid #bbb;background:center center no-repeat #f8f8f8}#available-services .service:hover,#enabled-services .service:hover{background:#fff;border:1px solid #bbb;box-shadow:0 1px 3px rgba(0,0,0,.2)}li.service span:before{color:#555;display:inline-block;-webkit-font-smoothing:antialiased;font:400 18px/1 social-logos;vertical-align:top;position:relative;top:1px;margin-left:3px;width:16px;height:16px;text-align:center}li.service.share-print span:before{content:'\f469'}li.service.share-digg span:before{content:'\f221'}li.service.share-email span:before{content:'\f410'}li.service.share-linkedin span:before{content:'\f207'}li.service.share-twitter span:before{content:'\f202'}li.service.share-reddit span:before{content:'\f222'}li.service.share-tumblr span:before{content:'\f214'}li.service.share-pocket span:before{con
7802 tent:'\f224'}li.service.share-pinterest span:before{content:'\f209'}li.service.share-google-plus-1 span:before{content:'\f218'}li.service.share-facebook span:before{content:'\f203'}li.service.share-press-this span:before{content:'\f205'}li.service.share-telegram span:before{content:'\f606'}li.service.share-jetpack-whatsapp span:before{content:'\f608'}li.service.share-skype span:before{content:'\f220'}body.settings_page_sharing ul.preview{float:right;margin:0}body.settings_page_sharing ul.preview li.preview-item,body.settings_page_sharing ul.preview li.preview-item a{cursor:default;text-decoration:none}div.sd-social-icon .inner li.preview-item a span,div.sd-social-icon ul.preview li.preview-item a span{display:none}div.sd-social-icon ul.preview li.preview-item.preview-custom a span{display:inline-block}.services .preview li.share-custom a{text-decoration:none}.services ul li.end-fix{clear:both;float:none;visibility:hidden;padding:0;margin:0;height:20px;width:0}#enabled-services h2{fo
7803 nt-size:20px;padding-top:0;font-weight:400!important;color:#999}body.settings_page_sharing #live-preview h2{font-size:20px;font-weight:400!important;color:#e3e3e3}body.settings_page_sharing .clearing{clear:both}body.settings_page_sharing .options .options-left{float:right}body.settings_page_sharing .input label{font-size:11px;line-height:16px}body.settings_page_sharing .advanced-form{padding:10px 10px 8px 14px;margin-right:-24px;display:none;border-top:1px #e3e3e3 solid;margin-top:4px}body.settings_page_sharing .utility{float:left;padding-top:10px;padding-left:10px;font-size:10px}body.settings_page_sharing .advanced input[type=submit]{float:right;margin-top:10px;margin-left:10px}.services li.dropzone{border:1px dashed #999;border-radius:3px;background:#e3e3e3;margin-left:10px;padding:5px;height:18px}.advanced-form .form-table th{width:auto!important}.advanced-form .button-secondary{margin-top:0!important}#hidden-drop-target{background:#e1e1e1;border:1px solid #cdcdcd;width:29%;paddi
7804 ng:10px;vertical-align:top}#hidden-drop-target p{font-size:13px;font-style:italic;margin:0 0 10px}.preview li.preview-item{background-position:0 5px;cursor:default}.preview .option-smart-on{margin:3px 0 0 5px}.preview-digg .option-smart-on{background:url(images/smart-digg.png) top right/76px 17px no-repeat;width:76px;height:17px;margin-top:2px}.preview-reddit .option-smart-on{background:url(images/smart-reddit.png) top right/104px 21px no-repeat;width:104px;height:21px}.preview-facebook .option-smart-on{background:url(images/smart-like.png) top right/85px 20px no-repeat;width:85px;height:20px}.preview-twitter .option-smart-on{background:url(images/smart-twitter.png?1) top right/60px 20px no-repeat;width:60px;height:20px}.preview-linkedin .option-smart-on{background:url(images/linkedin-smart.png) top center/99px 18px no-repeat;width:99px;height:20px}.preview-google-plus-1 .option-smart-on{background:url(images/smart-googleplus1.png) top right/96px 20px no-repeat;width:96px;height:20p
7805 x}.preview-tumblr .option-smart-on{background:url(images/smart-tumblr.png) top right/62px 20px no-repeat;width:62px;height:20px}.preview-pinterest .option-smart-on{background:url(images/smart-pinterest.png) top right/39px 20px no-repeat;width:39px;height:20px}.preview-pocket .option-smart-on{background:url(images/smart-pocket.png) top right/60px 20px no-repeat;width:60px;height:20px}.preview-skype .option-smart-on{background:url(images/smart-skype.png) top right/60px 20px no-repeat;width:60px;height:20px}@media (-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.preview-digg .option-smart-on{background-image:url(images/smart-digg@××.png)}.preview-reddit .option-smart-on{background-image:url(images/smart-reddit@××.png)}.preview-facebook .option-smart-on{background-image:url(images/smart-like@××.png)}.preview-twitter .option-smart-on{background-image:url(images/smart-twitter@××.png?1)}.preview-linkedin .option-smart-on{background-image:url(images/linkedin-smart@××.png)}.pre
7806 view-google-plus-1 .option-smart-on{background-image:url(images/smart-googleplus1@××.png)}.preview-tumblr .option-smart-on{background-image:url(images/smart-tumblr@××.png)}.preview-pinterest .option-smart-on{background-image:url(images/smart-pinterest@××.png)}.preview-pocket .option-smart-on{background-image:url(images/smart-pocket@××.png)}.preview-skype .option-smart-on{background-image:url(images/smart-skype@××.png)}}.services .sharing-hidden li{background-color:transparent}.sharing-hidden li.share-end{clear:both;height:0;padding:0!important;margin:0!important;width:0;visibility:hidden;float:none}.preview .sharing-label{font-weight:700;border:0;padding:4px 0 0 6px}#services-config a.remove{background:#ddd;color:#fff;padding:0 4px 2px;border-radius:15px;-moz-border-radius:15px;-webkit-border-radius:15px;text-decoration:none;font-weight:700;font-size:10px}#services-config a.remove:hover{background:red}.sd-social-icon .inner a.sd-button span,.sd-social-icon .inner a.share-icon span{d
7807 isplay:inline-block;overflow:hidden;width:0;text-indent:100%}
7808 \ No newline at end of file
7809
7810 diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing.css b/plugins/jetpack/modules/sharedaddy/admin-sharing.css
7811 index c61df08..3702d08 100644
7812 --- a/plugins/jetpack/modules/sharedaddy/admin-sharing.css
7813 +++ b/plugins/jetpack/modules/sharedaddy/admin-sharing.css
7814 @@ -101,7 +101,7 @@ li.service span:before {
7815 color: #555;
7816 display: inline-block;
7817 -webkit-font-smoothing: antialiased;
7818 - font: normal 16px/1 'Noticons', 'Genericons';
7819 + font: normal 18px/1 'social-logos';
7820 vertical-align: top;
7821 position: relative;
7822 top: 1px;
7823 @@ -134,9 +134,6 @@ li.service.share-tumblr span:before {
7824 li.service.share-pocket span:before {
7825 content: '\f224';
7826 }
7827 -li.service.share-skype span:before {
7828 - content: '\f220';
7829 -}
7830 li.service.share-pinterest span:before {
7831 content: '\f209';
7832 }
7833 @@ -144,12 +141,20 @@ li.service.share-google-plus-1 span:before {
7834 content: '\f218';
7835 }
7836 li.service.share-facebook span:before {
7837 - content: '\f204';
7838 + content: '\f203';
7839 }
7840 li.service.share-press-this span:before { /* Fixme: remove this button in favor of reblog */
7841 content: '\f205';
7842 }
7843 -
7844 +li.service.share-telegram span:before {
7845 + content: '\f606';
7846 +}
7847 +li.service.share-jetpack-whatsapp span:before {
7848 + content: '\f608';
7849 +}
7850 +li.service.share-skype span:before {
7851 + content: '\f220';
7852 +}
7853
7854 /**
7855 * Preview section
7856 @@ -311,8 +316,7 @@ body.settings_page_sharing .advanced input[type=submit] {
7857 background: url(images/linkedin-smart.png) no-repeat top center;
7858 background-size: 99px 18px;
7859 width:99px;
7860 - height:18px;
7861 - margin-top: 1px;
7862 + height:20px;
7863 }
7864
7865 .preview-google-plus-1 .option-smart-on {
7866 @@ -349,7 +353,49 @@ body.settings_page_sharing .advanced input[type=submit] {
7867 width: 60px;
7868 height: 20px;
7869 }
7870 +@media
7871 +(-webkit-min-device-pixel-ratio: 1.25),
7872 +(min-resolution: 120dpi) {
7873 + .preview-digg .option-smart-on {
7874 + background-image: url(images/smart-digg@××.png);
7875 + }
7876
7877 + .preview-reddit .option-smart-on {
7878 + background-image: url(images/smart-reddit@××.png);
7879 + }
7880 +
7881 + .preview-facebook .option-smart-on {
7882 + background-image: url(images/smart-like@××.png);
7883 + }
7884 +
7885 + .preview-twitter .option-smart-on {
7886 + background-image: url(images/smart-twitter@××.png?1);
7887 + }
7888 +
7889 + .preview-linkedin .option-smart-on {
7890 + background-image: url(images/linkedin-smart@××.png);
7891 + }
7892 +
7893 + .preview-google-plus-1 .option-smart-on {
7894 + background-image: url(images/smart-googleplus1@××.png);
7895 + }
7896 +
7897 + .preview-tumblr .option-smart-on {
7898 + background-image: url(images/smart-tumblr@××.png);
7899 + }
7900 +
7901 + .preview-pinterest .option-smart-on {
7902 + background-image: url(images/smart-pinterest@××.png);
7903 + }
7904 +
7905 + .preview-pocket .option-smart-on {
7906 + background-image: url(images/smart-pocket@××.png);
7907 + }
7908 +
7909 + .preview-skype .option-smart-on {
7910 + background-image: url(images/smart-skype@××.png);
7911 + }
7912 +}
7913
7914 /**
7915 * Overflow sharing dialog
7916
7917 diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing.js b/plugins/jetpack/modules/sharedaddy/admin-sharing.js
7918 index ad30eb6..831c96a 100644
7919 --- a/plugins/jetpack/modules/sharedaddy/admin-sharing.js
7920 +++ b/plugins/jetpack/modules/sharedaddy/admin-sharing.js
7921 @@ -123,7 +123,12 @@
7922 $( '#live-preview div.sharedaddy' ).addClass( 'sd-social-icon' );
7923 } else if ( 'official' === button_style ) {
7924 $( '#live-preview ul.preview .advanced, .sharing-hidden .inner ul .advanced' ).each( function( /*i*/ ) {
7925 - if ( !$( this ).hasClass( 'preview-press-this' ) && !$( this ).hasClass( 'preview-email' ) && !$( this ).hasClass( 'preview-print' ) && !$( this ).hasClass( 'share-custom' ) ) {
7926 + if ( !$( this ).hasClass( 'preview-press-this' ) &&
7927 + !$( this ).hasClass( 'preview-email' ) &&
7928 + !$( this ).hasClass( 'preview-print' ) &&
7929 + !$( this ).hasClass( 'preview-telegram' ) &&
7930 + !$( this ).hasClass( 'preview-jetpack-whatsapp' ) &&
7931 + !$( this ).hasClass( 'share-custom' ) ) {
7932 $( this ).find( '.option a span' ).html( '' ).parent().removeClass( 'sd-button' ).parent().attr( 'class', 'option option-smart-on' );
7933 }
7934 } );
7935 @@ -287,15 +292,15 @@
7936 $( '.service' ).on( 'keydown', function ( e ) {
7937
7938 // Reposition if one of the directional keys is pressed
7939 - switch ( e.keyCode ) {
7940 - case 13: keyboardDragDrop( $( this ) ); break; // Enter
7941 - case 32: keyboardDragDrop( $( this ) ); break; // Space
7942 - case 37: keyboardChangeOrder( $( this ), 'left' ); break; // Left
7943 - case 39: keyboardChangeOrder( $( this ), 'right' ); break; // Right
7944 - default: return true; // Exit and bubble
7945 - }
7946 -
7947 - e.preventDefault();
7948 + switch ( e.keyCode ) {
7949 + case 13: keyboardDragDrop( $( this ) ); break; // Enter
7950 + case 32: keyboardDragDrop( $( this ) ); break; // Space
7951 + case 37: keyboardChangeOrder( $( this ), 'left' ); break; // Left
7952 + case 39: keyboardChangeOrder( $( this ), 'right' ); break; // Right
7953 + default: return true; // Exit and bubble
7954 + }
7955 +
7956 + e.preventDefault();
7957 });
7958
7959 function keyboardChangeOrder( $this, dir ) {
7960 @@ -346,7 +351,7 @@
7961 // Add focus
7962 nextSibling.next().focus();
7963 }
7964 -
7965 +
7966 //Save changes
7967 save_services();
7968 }
7969 @@ -370,7 +375,7 @@
7970
7971 // Move it to the appropriate area and add focus back to service
7972 $( '.' + dropzone ).prepend( thisService ).find( 'li:first-child' ).focus();
7973 -
7974 +
7975 //Save changes
7976 save_services();
7977 }
7978
7979 diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing.min.css b/plugins/jetpack/modules/sharedaddy/admin-sharing.min.css
7980 index ca0413d..b0e172c 100644
7981 --- a/plugins/jetpack/modules/sharedaddy/admin-sharing.min.css
7982 +++ b/plugins/jetpack/modules/sharedaddy/admin-sharing.min.css
7983 @@ -1 +1 @@
7984 -#services-config{min-width:700px;width:100%;float:left}#services-config h3{font-weight:400;font-size:15px;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;color:#464646}#available-services,#enabled-services,#live-preview{padding:20px 0 0;width:100%;border-spacing:0}#enabled-services .ui-sortable{min-height:50px}#enabled-services{padding-bottom:20px}#available-services,#enabled-services{border-bottom:2px solid #ccc}#live-preview{border-bottom:1px solid #dfdfdf;padding-bottom:60px}#available-services h3,#enabled-services h3,#live-preview h3{padding:0;margin-top:0;margin-bottom:1em}body.settings_page_sharing .description{width:180px;vertical-align:top}body.settings_page_sharing .description p{font-size:13px;font-style:italic}body.settings_page_sharing .services{padding:0 20px;vertical-align:top}body.settings_page_sharing .services ul li{float:left;cursor:move}body.settings_page_sharing .services ul li.divider{border:none;padding:0;background:0 0;cursor:default}body.settings
7985 _page_sharing ul.services-hidden{margin-bottom:0}#available-services .service,#enabled-services .service{margin-right:10px;padding:5px 10px 5px 5px;border-radius:3px;border:1px solid #bbb;background:center center no-repeat #f8f8f8}#available-services .service:hover,#enabled-services .service:hover{background:#fff;border:1px solid #bbb;box-shadow:0 1px 3px rgba(0,0,0,.2)}li.service span:before{color:#555;display:inline-block;-webkit-font-smoothing:antialiased;font:400 16px/1 Noticons,Genericons;vertical-align:top;position:relative;top:1px;margin-right:3px;width:16px;height:16px;text-align:center}li.service.share-print span:before{content:'\f469'}li.service.share-digg span:before{content:'\f221'}li.service.share-email span:before{content:'\f410'}li.service.share-linkedin span:before{content:'\f207'}li.service.share-twitter span:before{content:'\f202'}li.service.share-reddit span:before{content:'\f222'}li.service.share-tumblr span:before{content:'\f214'}li.service.share-pocket span:bef
7986 ore{content:'\f224'}li.service.share-skype span:before{content:'\f220'}li.service.share-pinterest span:before{content:'\f209'}li.service.share-google-plus-1 span:before{content:'\f218'}li.service.share-facebook span:before{content:'\f204'}li.service.share-press-this span:before{content:'\f205'}body.settings_page_sharing ul.preview{float:left;margin:0}body.settings_page_sharing ul.preview li.preview-item,body.settings_page_sharing ul.preview li.preview-item a{cursor:default;text-decoration:none}div.sd-social-icon .inner li.preview-item a span,div.sd-social-icon ul.preview li.preview-item a span{display:none}div.sd-social-icon ul.preview li.preview-item.preview-custom a span{display:inline-block}.services .preview li.share-custom a{text-decoration:none}.services ul li.end-fix{clear:both;float:none;visibility:hidden;padding:0;margin:0;height:20px;width:0}#enabled-services h2{font-size:20px;padding-top:0;font-weight:400!important;color:#999}body.settings_page_sharing #live-preview h2{fo
7987 nt-size:20px;font-weight:400!important;color:#e3e3e3}body.settings_page_sharing .clearing{clear:both}body.settings_page_sharing .options .options-left{float:left}body.settings_page_sharing .input label{font-size:11px;line-height:16px}body.settings_page_sharing .advanced-form{padding:10px 14px 8px 10px;margin-left:-24px;display:none;border-top:1px #e3e3e3 solid;margin-top:4px}body.settings_page_sharing .utility{float:right;padding-top:10px;padding-right:10px;font-size:10px}body.settings_page_sharing .advanced input[type=submit]{float:left;margin-top:10px;margin-right:10px}.services li.dropzone{border:1px dashed #999;border-radius:3px;background:#e3e3e3;margin-right:10px;padding:5px;height:18px}.advanced-form .form-table th{width:auto!important}.advanced-form .button-secondary{margin-top:0!important}#hidden-drop-target{background:#e1e1e1;border:1px solid #cdcdcd;width:29%;padding:10px;vertical-align:top}#hidden-drop-target p{font-size:13px;font-style:italic;margin:0 0 10px}.preview li
7988 .preview-item{background-position:0 5px;cursor:default}.preview .option-smart-on{margin:3px 5px 0 0}.preview-digg .option-smart-on{background:url(images/smart-digg.png) top left/76px 17px no-repeat;width:76px;height:17px;margin-top:2px}.preview-reddit .option-smart-on{background:url(images/smart-reddit.png) top left/104px 21px no-repeat;width:104px;height:21px}.preview-facebook .option-smart-on{background:url(images/smart-like.png) top left/85px 20px no-repeat;width:85px;height:20px}.preview-twitter .option-smart-on{background:url(images/smart-twitter.png?1) top left/60px 20px no-repeat;width:60px;height:20px}.preview-linkedin .option-smart-on{background:url(images/linkedin-smart.png) top center/99px 18px no-repeat;width:99px;height:18px;margin-top:1px}.preview-google-plus-1 .option-smart-on{background:url(images/smart-googleplus1.png) top left/96px 20px no-repeat;width:96px;height:20px}.preview-tumblr .option-smart-on{background:url(images/smart-tumblr.png) top left/62px 20px no-re
7989 peat;width:62px;height:20px}.preview-pinterest .option-smart-on{background:url(images/smart-pinterest.png) top left/39px 20px no-repeat;width:39px;height:20px}.preview-pocket .option-smart-on{background:url(images/smart-pocket.png) top left/60px 20px no-repeat;width:60px;height:20px}.preview-skype .option-smart-on{background:url(images/smart-skype.png) top left/60px 20px no-repeat;width:60px;height:20px}.services .sharing-hidden li{background-color:transparent}.sharing-hidden li.share-end{clear:both;height:0;padding:0!important;margin:0!important;width:0;visibility:hidden;float:none}.preview .sharing-label{font-weight:700;border:0;padding:4px 6px 0 0}#services-config a.remove{background:#ddd;color:#fff;padding:0 4px 2px;border-radius:15px;-moz-border-radius:15px;-webkit-border-radius:15px;text-decoration:none;font-weight:700;font-size:10px}#services-config a.remove:hover{background:red}.sd-social-icon .inner a.sd-button span,.sd-social-icon .inner a.share-icon span{display:inline-bl
7990 ock;overflow:hidden;width:0;text-indent:100%}
7991 \ No newline at end of file
7992 +#services-config{min-width:700px;width:100%;float:left}#services-config h3{font-weight:400;font-size:15px;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;color:#464646}#available-services,#enabled-services,#live-preview{padding:20px 0 0;width:100%;border-spacing:0}#enabled-services .ui-sortable{min-height:50px}#enabled-services{padding-bottom:20px}#available-services,#enabled-services{border-bottom:2px solid #ccc}#live-preview{border-bottom:1px solid #dfdfdf;padding-bottom:60px}#available-services h3,#enabled-services h3,#live-preview h3{padding:0;margin-top:0;margin-bottom:1em}body.settings_page_sharing .description{width:180px;vertical-align:top}body.settings_page_sharing .description p{font-size:13px;font-style:italic}body.settings_page_sharing .services{padding:0 20px;vertical-align:top}body.settings_page_sharing .services ul li{float:left;cursor:move}body.settings_page_sharing .services ul li.divider{border:none;padding:0;background:0 0;cursor:default}body.settings
7993 _page_sharing ul.services-hidden{margin-bottom:0}#available-services .service,#enabled-services .service{margin-right:10px;padding:5px 10px 5px 5px;border-radius:3px;border:1px solid #bbb;background:center center no-repeat #f8f8f8}#available-services .service:hover,#enabled-services .service:hover{background:#fff;border:1px solid #bbb;box-shadow:0 1px 3px rgba(0,0,0,.2)}li.service span:before{color:#555;display:inline-block;-webkit-font-smoothing:antialiased;font:400 18px/1 social-logos;vertical-align:top;position:relative;top:1px;margin-right:3px;width:16px;height:16px;text-align:center}li.service.share-print span:before{content:'\f469'}li.service.share-digg span:before{content:'\f221'}li.service.share-email span:before{content:'\f410'}li.service.share-linkedin span:before{content:'\f207'}li.service.share-twitter span:before{content:'\f202'}li.service.share-reddit span:before{content:'\f222'}li.service.share-tumblr span:before{content:'\f214'}li.service.share-pocket span:before{con
7994 tent:'\f224'}li.service.share-pinterest span:before{content:'\f209'}li.service.share-google-plus-1 span:before{content:'\f218'}li.service.share-facebook span:before{content:'\f203'}li.service.share-press-this span:before{content:'\f205'}li.service.share-telegram span:before{content:'\f606'}li.service.share-jetpack-whatsapp span:before{content:'\f608'}li.service.share-skype span:before{content:'\f220'}body.settings_page_sharing ul.preview{float:left;margin:0}body.settings_page_sharing ul.preview li.preview-item,body.settings_page_sharing ul.preview li.preview-item a{cursor:default;text-decoration:none}div.sd-social-icon .inner li.preview-item a span,div.sd-social-icon ul.preview li.preview-item a span{display:none}div.sd-social-icon ul.preview li.preview-item.preview-custom a span{display:inline-block}.services .preview li.share-custom a{text-decoration:none}.services ul li.end-fix{clear:both;float:none;visibility:hidden;padding:0;margin:0;height:20px;width:0}#enabled-services h2{fon
7995 t-size:20px;padding-top:0;font-weight:400!important;color:#999}body.settings_page_sharing #live-preview h2{font-size:20px;font-weight:400!important;color:#e3e3e3}body.settings_page_sharing .clearing{clear:both}body.settings_page_sharing .options .options-left{float:left}body.settings_page_sharing .input label{font-size:11px;line-height:16px}body.settings_page_sharing .advanced-form{padding:10px 14px 8px 10px;margin-left:-24px;display:none;border-top:1px #e3e3e3 solid;margin-top:4px}body.settings_page_sharing .utility{float:right;padding-top:10px;padding-right:10px;font-size:10px}body.settings_page_sharing .advanced input[type=submit]{float:left;margin-top:10px;margin-right:10px}.services li.dropzone{border:1px dashed #999;border-radius:3px;background:#e3e3e3;margin-right:10px;padding:5px;height:18px}.advanced-form .form-table th{width:auto!important}.advanced-form .button-secondary{margin-top:0!important}#hidden-drop-target{background:#e1e1e1;border:1px solid #cdcdcd;width:29%;paddi
7996 ng:10px;vertical-align:top}#hidden-drop-target p{font-size:13px;font-style:italic;margin:0 0 10px}.preview li.preview-item{background-position:0 5px;cursor:default}.preview .option-smart-on{margin:3px 5px 0 0}.preview-digg .option-smart-on{background:url(images/smart-digg.png) top left/76px 17px no-repeat;width:76px;height:17px;margin-top:2px}.preview-reddit .option-smart-on{background:url(images/smart-reddit.png) top left/104px 21px no-repeat;width:104px;height:21px}.preview-facebook .option-smart-on{background:url(images/smart-like.png) top left/85px 20px no-repeat;width:85px;height:20px}.preview-twitter .option-smart-on{background:url(images/smart-twitter.png?1) top left/60px 20px no-repeat;width:60px;height:20px}.preview-linkedin .option-smart-on{background:url(images/linkedin-smart.png) top center/99px 18px no-repeat;width:99px;height:20px}.preview-google-plus-1 .option-smart-on{background:url(images/smart-googleplus1.png) top left/96px 20px no-repeat;width:96px;height:20px}.pr
7997 eview-tumblr .option-smart-on{background:url(images/smart-tumblr.png) top left/62px 20px no-repeat;width:62px;height:20px}.preview-pinterest .option-smart-on{background:url(images/smart-pinterest.png) top left/39px 20px no-repeat;width:39px;height:20px}.preview-pocket .option-smart-on{background:url(images/smart-pocket.png) top left/60px 20px no-repeat;width:60px;height:20px}.preview-skype .option-smart-on{background:url(images/smart-skype.png) top left/60px 20px no-repeat;width:60px;height:20px}@media (-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.preview-digg .option-smart-on{background-image:url(images/smart-digg@××.png)}.preview-reddit .option-smart-on{background-image:url(images/smart-reddit@××.png)}.preview-facebook .option-smart-on{background-image:url(images/smart-like@××.png)}.preview-twitter .option-smart-on{background-image:url(images/smart-twitter@××.png?1)}.preview-linkedin .option-smart-on{background-image:url(images/linkedin-smart@××.png)}.preview-goog
7998 le-plus-1 .option-smart-on{background-image:url(images/smart-googleplus1@××.png)}.preview-tumblr .option-smart-on{background-image:url(images/smart-tumblr@××.png)}.preview-pinterest .option-smart-on{background-image:url(images/smart-pinterest@××.png)}.preview-pocket .option-smart-on{background-image:url(images/smart-pocket@××.png)}.preview-skype .option-smart-on{background-image:url(images/smart-skype@××.png)}}.services .sharing-hidden li{background-color:transparent}.sharing-hidden li.share-end{clear:both;height:0;padding:0!important;margin:0!important;width:0;visibility:hidden;float:none}.preview .sharing-label{font-weight:700;border:0;padding:4px 6px 0 0}#services-config a.remove{background:#ddd;color:#fff;padding:0 4px 2px;border-radius:15px;-moz-border-radius:15px;-webkit-border-radius:15px;text-decoration:none;font-weight:700;font-size:10px}#services-config a.remove:hover{background:red}.sd-social-icon .inner a.sd-button span,.sd-social-icon .inner a.share-icon span{display:in
7999 line-block;overflow:hidden;width:0;text-indent:100%}
8000 \ No newline at end of file
8001
8002 diff --git a/plugins/jetpack/modules/sharedaddy/sharing-service.php b/plugins/jetpack/modules/sharedaddy/sharing-service.php
8003 index 8966600..a551329 100644
8004 --- a/plugins/jetpack/modules/sharedaddy/sharing-service.php
8005 +++ b/plugins/jetpack/modules/sharedaddy/sharing-service.php
8006 @@ -44,18 +44,20 @@ class Sharing_Service {
8007 // if you update this list, please update the REST API tests
8008 // in bin/tests/api/suites/SharingTest.php
8009 $services = array(
8010 - 'email' => 'Share_Email',
8011 - 'print' => 'Share_Print',
8012 - 'facebook' => 'Share_Facebook',
8013 - 'linkedin' => 'Share_LinkedIn',
8014 - 'reddit' => 'Share_Reddit',
8015 - 'twitter' => 'Share_Twitter',
8016 - 'press-this' => 'Share_PressThis',
8017 - 'google-plus-1' => 'Share_GooglePlus1',
8018 - 'tumblr' => 'Share_Tumblr',
8019 - 'pinterest' => 'Share_Pinterest',
8020 - 'pocket' => 'Share_Pocket',
8021 - 'skype' => 'Share_Skype',
8022 + 'email' => 'Share_Email',
8023 + 'print' => 'Share_Print',
8024 + 'facebook' => 'Share_Facebook',
8025 + 'linkedin' => 'Share_LinkedIn',
8026 + 'reddit' => 'Share_Reddit',
8027 + 'twitter' => 'Share_Twitter',
8028 + 'press-this' => 'Share_PressThis',
8029 + 'google-plus-1' => 'Share_GooglePlus1',
8030 + 'tumblr' => 'Share_Tumblr',
8031 + 'pinterest' => 'Share_Pinterest',
8032 + 'pocket' => 'Share_Pocket',
8033 + 'telegram' => 'Share_Telegram',
8034 + 'jetpack-whatsapp' => 'Jetpack_Share_WhatsApp',
8035 + 'skype' => 'Share_Skype',
8036 );
8037
8038 if ( $include_custom ) {
8039 @@ -557,7 +559,7 @@ function sharing_add_header() {
8040
8041 if ( count( $enabled['all'] ) > 0 && sharing_maybe_enqueue_scripts() ) {
8042 wp_enqueue_style( 'sharedaddy', plugin_dir_url( __FILE__ ) .'sharing.css', array(), JETPACK__VERSION );
8043 - wp_enqueue_style( 'genericons' );
8044 + wp_enqueue_style( 'social-logos' );
8045 }
8046
8047 }
8048
8049 diff --git a/plugins/jetpack/modules/sharedaddy/sharing-sources.php b/plugins/jetpack/modules/sharedaddy/sharing-sources.php
8050 index 5edb4c0..1fc6cef 100644
8051 --- a/plugins/jetpack/modules/sharedaddy/sharing-sources.php
8052 +++ b/plugins/jetpack/modules/sharedaddy/sharing-sources.php
8053 @@ -512,7 +512,7 @@ class Share_Email extends Sharing_Source {
8054 ?>
8055
8056 <img style="float: right; display: none" class="loading" src="<?php
8057 - /** This filter is documented in modules/shortcodes/audio.php */
8058 + /** This filter is documented in modules/stats.php */
8059 echo apply_filters( 'jetpack_static_url', plugin_dir_url( __FILE__ ) . 'images/loading.gif' ); ?>" alt="loading" width="16" height="16" />
8060 <input type="submit" value="<?php esc_attr_e( 'Send Email', 'jetpack' ); ?>" class="sharing_send" />
8061 <a rel="nofollow" href="#cancel" class="sharing_cancel"><?php _e( 'Cancel', 'jetpack' ); ?></a>
8062 @@ -1602,6 +1602,49 @@ class Share_Pocket extends Sharing_Source {
8063
8064 }
8065
8066 +class Share_Telegram extends Sharing_Source {
8067 + public $shortname = 'telegram';
8068 +
8069 + public function __construct( $id, array $settings ) {
8070 + parent::__construct( $id, $settings );
8071 + }
8072 +
8073 + public function get_name() {
8074 + return __( 'Telegram', 'jetpack' );
8075 + }
8076 + public function process_request( $post, array $post_data ) {
8077 + // Record stats
8078 + parent::process_request( $post, $post_data );
8079 + $telegram_url = esc_url_raw( 'https://telegram.me/share/url?url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&text=' . rawurlencode( $this->get_share_title( $post->ID ) ) );
8080 + wp_redirect( $telegram_url );
8081 + exit;
8082 + }
8083 +
8084 + public function get_display( $post ) {
8085 + return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Telegram', 'share to', 'jetpack' ), __( 'Click to share on Telegram', 'jetpack' ), 'share=telegram' );
8086 + }
8087 +
8088 + function display_footer() {
8089 + $this->js_dialog( $this->shortname, array( 'width' => 450, 'height' => 450 ) );
8090 + }
8091 +}
8092 +
8093 +class Jetpack_Share_WhatsApp extends Sharing_Source {
8094 + public $shortname = 'jetpack-whatsapp';
8095 +
8096 + public function __construct( $id, array $settings ) {
8097 + parent::__construct( $id, $settings );
8098 + }
8099 +
8100 + public function get_name() {
8101 + return __( 'WhatsApp', 'jetpack' );
8102 + }
8103 +
8104 + public function get_display( $post ) {
8105 + return $this->get_link( 'whatsapp://send?text=' . rawurlencode( $this->get_share_title( $post->ID ) ) . ' ' . rawurlencode( get_permalink( $post->ID ) ), _x( 'WhatsApp', 'share to', 'jetpack' ), __( 'Click to share on WhatsApp', 'jetpack' ) );
8106 + }
8107 +}
8108 +
8109 class Share_Skype extends Sharing_Source {
8110 public $shortname = 'skype';
8111 public $genericon = '\f220';
8112
8113 diff --git a/plugins/jetpack/modules/sharedaddy/sharing.css b/plugins/jetpack/modules/sharedaddy/sharing.css
8114 index 3d6565b..0684548 100644
8115 --- a/plugins/jetpack/modules/sharedaddy/sharing.css
8116 +++ b/plugins/jetpack/modules/sharedaddy/sharing.css
8117 @@ -114,12 +114,14 @@ body.highlander-dark h3.sd-title:before {
8118 vertical-align: top;
8119 }
8120
8121 +.sd-social-official .sd-content ul li a.sd-button>span {
8122 + line-height: 17px;
8123 +}
8124 .sd-social-official .sd-content>ul>li>a.sd-button:before,
8125 .sd-social-official .sd-content>ul>li .digg_button>a:before,
8126 .sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,
8127 .sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before {
8128 margin-bottom: -1px;
8129 - top: 0;
8130 }
8131
8132 .sd-social-icon .sd-content ul li a.sd-button:hover,
8133 @@ -145,18 +147,39 @@ body.highlander-dark h3.sd-title:before {
8134 box-shadow: inset 0 1px 0 rgba(0,0,0,.16);
8135 }
8136
8137 -
8138 /* All icons */
8139 .sd-content ul li a.sd-button:before {
8140 display: inline-block;
8141 -webkit-font-smoothing: antialiased;
8142 -moz-osx-font-smoothing: grayscale;
8143 - font: normal 16px/1 'Genericons';
8144 + font: normal 18px/1 'social-logos';
8145 vertical-align: top;
8146 - position: relative;
8147 - top: 3px;
8148 text-align: center;
8149 }
8150 +/* text + icon styles should have relative and top position */
8151 +.sd-social-icon-text ul li a.sd-button:before {
8152 + position: relative;
8153 + top: 2px;
8154 +}
8155 +
8156 +/* Make it look great in Chrome and Safari */
8157 +@media screen and (-webkit-min-device-pixel-ratio:0) {
8158 + .sd-content ul li a.sd-button:before {
8159 + position: relative;
8160 + top: 2px;
8161 + }
8162 +}
8163 +
8164 +.sd-social-official ul li a.sd-button:before {
8165 + position: relative;
8166 + top: -2px;
8167 +}
8168 +/* Make it look great in Chrome and Safari */
8169 +@media screen and (-webkit-min-device-pixel-ratio:0) {
8170 + .sd-social-official ul li a.sd-button:before {
8171 + top: 0px;
8172 + }
8173 +}
8174
8175 .sd-content ul li {
8176 margin: 0 !important;
8177 @@ -190,8 +213,20 @@ body .sd-content ul li.share-custom.no-icon a span {
8178
8179 .sd-social-icon .sd-content ul li a.share-more {
8180 position: relative;
8181 - top: 2px;
8182 + top: -4px;
8183 }
8184 +@media screen and (-webkit-min-device-pixel-ratio:0) {
8185 + .sd-social-icon .sd-content ul li a.share-more {
8186 + top: 2px;
8187 + }
8188 +}
8189 +/* Firefox specific hack to make the share more button look better on Firefox. */
8190 +@-moz-document url-prefix() {
8191 + .sd-social-icon .sd-content ul li a.share-more {
8192 + top: 2px;
8193 + }
8194 +}
8195 +
8196 .sd-social-icon .sd-content ul li a.share-more span {
8197 margin-left: 3px;
8198 }
8199 @@ -235,25 +270,20 @@ body .sd-content ul li.share-custom.no-icon a span {
8200 .sd-social-text .sd-content ul li.share-tumblr a:before,
8201 .sd-content ul li.share-tumblr div.option.option-smart-off a:before,
8202 .sd-social-icon-text .sd-content li.share-tumblr a:before {
8203 - content: '\f214';
8204 + content: '\f607';
8205 }
8206 +
8207 .sd-social-icon .sd-content ul li.share-pocket a:before,
8208 .sd-social-text .sd-content ul li.share-pocket a:before,
8209 .sd-content ul li.share-pocket div.option.option-smart-off a:before,
8210 .sd-social-icon-text .sd-content li.share-pocket a:before {
8211 content: '\f224';
8212 }
8213 -.sd-social-icon .sd-content ul li.share-skype a:before,
8214 -.sd-social-text .sd-content ul li.share-skype a:before,
8215 -.sd-content ul li.share-skype div.option.option-smart-off a:before,
8216 -.sd-social-icon-text .sd-content li.share-skype a:before {
8217 - content: '\f220';
8218 -}
8219 .sd-social-icon .sd-content ul li.share-pinterest a:before,
8220 .sd-social-text .sd-content ul li.share-pinterest a:before,
8221 .sd-content ul li.share-pinterest div.option.option-smart-off a:before,
8222 .sd-social-icon-text .sd-content li.share-pinterest a:before {
8223 - content: '\f209';
8224 + content: '\f210';
8225 }
8226 .sd-social-icon .sd-content ul li.share-google-plus-1 a:before,
8227 .sd-social-text .sd-content ul li.share-google-plus-1 a:before,
8228 @@ -265,7 +295,7 @@ body .sd-content ul li.share-custom.no-icon a span {
8229 .sd-social-text .sd-content ul li.share-facebook a:before,
8230 .sd-content ul li.share-facebook div.option.option-smart-off a:before,
8231 .sd-social-icon-text .sd-content li.share-facebook a:before {
8232 - content: '\f204';
8233 + content: '\f203';
8234 }
8235 .sd-social-icon .sd-content ul li.share-press-this a:before,
8236 .sd-social-text .sd-content ul li.share-press-this a:before,
8237 @@ -277,6 +307,22 @@ body .sd-content ul li.share-custom.no-icon a span {
8238 .sd-social-official .sd-content li.share-press-this a:before {
8239 color: #2ba1cb;
8240 }
8241 +.sd-social-icon .sd-content ul li.share-telegram a:before,
8242 +.sd-social-text .sd-content ul li.share-telegram a:before,
8243 +.sd-content ul li.share-telegram div.option.option-smart-off a:before,
8244 +.sd-social-icon-text .sd-content li.share-telegram a:before,
8245 +.sd-social-official .sd-content li.share-telegram a:before {
8246 + content: '\f606';
8247 +}
8248 +.sd-social-official .sd-content li.share-telegram a:before {
8249 + color: #0088cc;
8250 +}
8251 +.sd-social-icon .sd-content ul li.share-skype a:before,
8252 +.sd-social-text .sd-content ul li.share-skype a:before,
8253 +.sd-content ul li.share-skype div.option.option-smart-off a:before,
8254 +.sd-social-icon-text .sd-content li.share-skype a:before {
8255 + content: '\f220';
8256 +}
8257 .sd-social-icon .sd-content ul a.share-more:before,
8258 .sd-social-text .sd-content ul a.share-more:before,
8259 .sd-content ul li.advanced a.share-more:before,
8260 @@ -288,6 +334,20 @@ body .sd-content ul li.share-custom.no-icon a span {
8261 color: #2ba1cb;
8262 }
8263
8264 +.sd-social-icon .sd-content ul li.share-jetpack-whatsapp a:before,
8265 +.sd-social-text .sd-content ul li.share-jetpack-whatsapp a:before,
8266 +.sd-content ul li.share-jetpack-whatsapp div.option.option-smart-off a:before,
8267 +.sd-social-icon-text .sd-content li.share-jetpack-whatsapp a:before,
8268 +.sd-social-official .sd-content li.share-jetpack-whatsapp a:before {
8269 + content: '\f608';
8270 +}
8271 +.sd-social-official .sd-content li.share-jetpack-whatsapp a:before {
8272 + color: #43d854;
8273 +}
8274 +.sd-social-icon .sd-content ul li[class*='share-'].share-jetpack-whatsapp a.sd-button {
8275 + background: #43d854;
8276 + color: #fff !important;
8277 +}
8278
8279 /* Share count */
8280 .sd-social .sd-button .share-count {
8281 @@ -339,9 +399,6 @@ body .sd-content ul li.share-custom.no-icon a span {
8282 width: 98px;
8283 }
8284
8285 -.sd-social-official .sd-content .skypeShare {
8286 - width: 55px;
8287 -}
8288
8289 /* Individual official buttons */
8290 .googleplus1_button .g-plus {
8291 @@ -356,6 +413,10 @@ body .sd-content ul li.share-custom.no-icon a span {
8292 margin: 0 !important;
8293 }
8294
8295 +.sd-social-official .sd-content .share-skype {
8296 + width: 55px;
8297 +}
8298 +
8299 body .sd-social-official li.share-print ,
8300 body .sd-social-official li.share-email a,
8301 body .sd-social-official li.share-custom a,
8302 @@ -394,9 +455,6 @@ body .sd-social-icon .sd-content li.share-custom a span {
8303 width: 0;
8304 }
8305
8306 -body .sd-content li.share-custom a:hover span {
8307 -}
8308 -
8309 body .sd-social-icon .sd-content li.share-custom a span {
8310 padding-left: 16px !important;
8311 }
8312 @@ -423,8 +481,8 @@ body .sd-social-icon .sd-content li.share-custom a span {
8313
8314 .sd-social-official .sd-content .sharing-hidden ul>li.share-end {
8315 clear: both;
8316 - margin: 0;
8317 - height: 0;
8318 + margin: 0 !important;
8319 + height: 0 !important;
8320 }
8321
8322 .sharing-hidden .inner:before, .sharing-hidden .inner:after {
8323 @@ -465,7 +523,7 @@ body .sd-social-icon .sd-content li.share-custom a span {
8324 -webkit-border-radius: 50%;
8325 border: 0;
8326 box-shadow: none;
8327 - padding: 8px;
8328 + padding: 7px;
8329 position: relative;
8330 top: -2px;
8331 line-height: 1;
8332 @@ -485,8 +543,11 @@ body .sd-social-icon .sd-content li.share-custom a span {
8333 opacity: .6;
8334 }
8335
8336 +
8337 +
8338 .sd-social-icon .sd-content ul li[class*='share-'] a.sd-button:before {
8339 - top: 0;
8340 + top: 1px;
8341 + top: 0px\9; /* IE8 and below */
8342 }
8343
8344 .sd-social-icon .sd-content ul li[class*='share-'] a.sd-button.share-custom {
8345 @@ -548,6 +609,11 @@ body .sd-social-icon .sd-content li.share-custom a span {
8346 color: #fff !important;
8347 }
8348
8349 +.sd-social-icon .sd-content ul li[class*='share-'].share-telegram a.sd-button {
8350 + background: #0088cc;
8351 + color: #fff !important;
8352 +}
8353 +
8354 .sd-social-icon .sd-content ul li[class*='share-'].share-linkedin a.sd-button {
8355 background: #0077b5;
8356 color: #fff !important;
8357 @@ -563,16 +629,15 @@ body .sd-social-icon .sd-content li.share-custom a span {
8358 color: #fff !important;
8359 }
8360
8361 -.sd-social-icon .sd-content ul li[class*='share-'].share-skype a.sd-button {
8362 - background: #00AFF0;
8363 - color: #fff !important;
8364 -}
8365 -
8366 .sd-social-icon .sd-content ul li[class*='share-'].share-reddit a.sd-button {
8367 background: #cee3f8;
8368 color: #555555 !important;
8369 }
8370
8371 +.sd-social-icon .sd-content ul li[class*='share-'].share-skype a.sd-button {
8372 + background: #00AFF0;
8373 + color: #fff !important;
8374 +}
8375
8376 /**
8377 * Screen Reader Text for "Icon Only" option
8378 @@ -680,3 +745,4 @@ div.sharedaddy.sharedaddy-dark #sharing_email {
8379 height: 123px;
8380 margin: 0 0 1em 0;
8381 }
8382 +
8383
8384 diff --git a/plugins/jetpack/modules/sharedaddy/sharing.js b/plugins/jetpack/modules/sharedaddy/sharing.js
8385 index 96a26b4..ac287a2 100644
8386 --- a/plugins/jetpack/modules/sharedaddy/sharing.js
8387 +++ b/plugins/jetpack/modules/sharedaddy/sharing.js
8388 @@ -204,7 +204,7 @@ var updateLinkedInCount = function( data ) {
8389 $more_sharing_pane.data( 'justSlid', false );
8390 }, 300 );
8391
8392 - if ( $more_sharing_pane.find( '.share-google-plus-1' ).size() ) {
8393 + if ( $more_sharing_pane.find( '.share-google-plus-1' ).length ) {
8394 // The pane needs to stay open for the Google+ Button
8395 return;
8396 }
8397
8398 diff --git a/plugins/jetpack/modules/sharedaddy/sharing.php b/plugins/jetpack/modules/sharedaddy/sharing.php
8399 index 72dc3a0..2f69d5a 100644
8400 --- a/plugins/jetpack/modules/sharedaddy/sharing.php
8401 +++ b/plugins/jetpack/modules/sharedaddy/sharing.php
8402 @@ -23,10 +23,16 @@ class Sharing_Admin {
8403 }
8404
8405 public function sharing_head() {
8406 - wp_enqueue_script( 'sharing-js', WP_SHARING_PLUGIN_URL.'admin-sharing.js', array( 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable', 'jquery-form' ), 2 );
8407 - wp_enqueue_style( 'sharing-admin', WP_SHARING_PLUGIN_URL.'admin-sharing.css', false, JETPACK__VERSION );
8408 - wp_enqueue_style( 'sharing', WP_SHARING_PLUGIN_URL.'sharing.css', false, JETPACK__VERSION );
8409 - wp_enqueue_style( 'genericons' );
8410 + wp_enqueue_script( 'sharing-js', WP_SHARING_PLUGIN_URL . 'admin-sharing.js', array( 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable', 'jquery-form' ), 2 );
8411 + $postfix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
8412 + if ( is_rtl() ) {
8413 + wp_enqueue_style( 'sharing-admin', WP_SHARING_PLUGIN_URL . 'admin-sharing-rtl' . $postfix . '.css', false, JETPACK__VERSION );
8414 + } else {
8415 + wp_enqueue_style( 'sharing-admin', WP_SHARING_PLUGIN_URL . 'admin-sharing' . $postfix . '.css', false, JETPACK__VERSION );
8416 + }
8417 + wp_enqueue_style( 'sharing', WP_SHARING_PLUGIN_URL . 'sharing.css', false, JETPACK__VERSION );
8418 +
8419 + wp_enqueue_style( 'social-logos' );
8420 wp_enqueue_script( 'sharing-js-fe', WP_SHARING_PLUGIN_URL . 'sharing.js', array( ), 4 );
8421
8422 add_thickbox();
8423
8424 diff --git a/plugins/jetpack/modules/shortcodes.php b/plugins/jetpack/modules/shortcodes.php
8425 index 320de04..f218199 100644
8426 --- a/plugins/jetpack/modules/shortcodes.php
8427 +++ b/plugins/jetpack/modules/shortcodes.php
8428 @@ -9,7 +9,7 @@
8429 * Requires Connection: No
8430 * Auto Activate: Yes
8431 * Module Tags: Photos and Videos, Social, Writing, Appearance
8432 - * Additional Search Queries: shortcodes, shortcode, embeds, media, bandcamp, blip.tv, dailymotion, digg, facebook, flickr, google calendars, google maps, google+, polldaddy, recipe, recipes, scribd, slideshare, slideshow, slideshows, soundcloud, ted, twitter, vimeo, vine, youtube
8433 + * Additional Search Queries: shortcodes, shortcode, embeds, media, bandcamp, blip.tv, dailymotion, facebook, flickr, google calendars, google maps, google+, polldaddy, recipe, recipes, scribd, slideshare, slideshow, slideshows, soundcloud, ted, twitter, vimeo, vine, youtube
8434 */
8435
8436 /**
8437 @@ -59,16 +59,12 @@ function jetpack_load_shortcodes() {
8438 $shortcode_includes = apply_filters( 'jetpack_shortcodes_to_include', $shortcode_includes );
8439
8440 foreach ( $shortcode_includes as $include ) {
8441 - if ( version_compare( $wp_version, '3.6-z', '>=' ) && stristr( $include, 'audio.php' ) ) {
8442 - continue;
8443 - }
8444 -
8445 include $include;
8446 }
8447 }
8448
8449 /**
8450 - * Runs preg_replace so that replacements don't happen within open tags.
8451 + * Runs preg_replace so that replacements don't happen within open tags.
8452 * Parameters are the same as preg_replace, with an added optional search param for improved performance
8453 *
8454 * @param String $pattern
8455 @@ -85,7 +81,7 @@ function jetpack_preg_replace_outside_tags( $pattern, $replacement, $content, $s
8456 if ( $search && false === strpos( $content, $search ) ) {
8457 return $content;
8458 }
8459 -
8460 +
8461 $textarr = wp_html_split( $content );
8462 unset( $content );
8463 foreach( $textarr as &$element ) {
8464 @@ -93,12 +89,12 @@ function jetpack_preg_replace_outside_tags( $pattern, $replacement, $content, $s
8465 continue;
8466 $element = preg_replace( $pattern, $replacement, $element );
8467 }
8468 -
8469 +
8470 return join( $textarr );
8471 }
8472
8473 /**
8474 - * Runs preg_replace_callback so that replacements don't happen within open tags.
8475 + * Runs preg_replace_callback so that replacements don't happen within open tags.
8476 * Parameters are the same as preg_replace, with an added optional search param for improved performance
8477 *
8478 * @param String $pattern
8479 @@ -115,7 +111,7 @@ function jetpack_preg_replace_callback_outside_tags( $pattern, $callback, $conte
8480 if ( $search && false === strpos( $content, $search ) ) {
8481 return $content;
8482 }
8483 -
8484 +
8485 $textarr = wp_html_split( $content );
8486 unset( $content );
8487 foreach( $textarr as &$element ) {
8488 @@ -123,28 +119,8 @@ function jetpack_preg_replace_callback_outside_tags( $pattern, $callback, $conte
8489 continue;
8490 $element = preg_replace_callback( $pattern, $callback, $element );
8491 }
8492 -
8493 - return join( $textarr );
8494 -}
8495 -
8496 -global $wp_version;
8497 -
8498 -if ( version_compare( $wp_version, '3.6-z', '>=' ) ) {
8499 - add_filter( 'shortcode_atts_audio', 'jetpack_audio_atts_handler', 10, 3 );
8500 -
8501 - function jetpack_audio_atts_handler( $out, $pairs, $atts ) {
8502 - if( isset( $atts[0] ) )
8503 - $out['src'] = $atts[0];
8504 -
8505 - return $out;
8506 - }
8507
8508 - function jetpack_shortcode_get_audio_id( $atts ) {
8509 - if ( isset( $atts[ 0 ] ) )
8510 - return $atts[ 0 ];
8511 - else
8512 - return 0;
8513 - }
8514 + return join( $textarr );
8515 }
8516
8517 if ( ! function_exists( 'jetpack_shortcode_get_wpvideo_id' ) ) {
8518
8519 diff --git a/plugins/jetpack/modules/shortcodes/audio.php b/plugins/jetpack/modules/shortcodes/audio.php
8520 index a408f2a..88c1309 100644
8521 --- a/plugins/jetpack/modules/shortcodes/audio.php
8522 +++ b/plugins/jetpack/modules/shortcodes/audio.php
8523 @@ -1,435 +1,6 @@
8524 <?php
8525 -
8526 /**
8527 -* Class wrapper for audio shortcode
8528 -*/
8529 -class AudioShortcode {
8530 -
8531 - static $add_script = false;
8532 -
8533 - /**
8534 - * Add all the actions & resgister the shortcode
8535 - */
8536 - function __construct() {
8537 - add_shortcode( 'audio', array( $this, 'audio_shortcode' ) );
8538 - add_action( 'wp_enqueue_scripts', array( $this, 'check_infinite' ) );
8539 - add_action( 'infinite_scroll_render', array( $this, 'audio_shortcode_infinite' ), 11 );
8540 - }
8541 -
8542 - /**
8543 - * Return the $url of the audio
8544 - */
8545 - static function get_audio_id( $atts ) {
8546 - if ( isset( $atts[0] ) )
8547 - return $atts[0];
8548 - else
8549 - return 0;
8550 - }
8551 -
8552 - /**
8553 - * Shortcode for audio
8554 - * [audio http://wpcom.files.wordpress.com/2007/01/mattmullenweg-interview.mp3|width=180|titles=1|artists=2]
8555 - *
8556 - * The important question here is whether the shortcode applies to widget_text:
8557 - * add_filter('widget_text', 'do_shortcode');
8558 - * */
8559 - function audio_shortcode( $atts ) {
8560 - global $ap_playerID;
8561 - global $post;
8562 -
8563 - if ( ! is_array( $atts ) ) {
8564 - return '<!-- Audio shortcode passed invalid attributes -->';
8565 - }
8566 -
8567 - if ( ! isset( $atts[0] ) ) {
8568 - if ( isset( $atts['src'] ) ) {
8569 - $atts[0] = $atts['src'];
8570 - unset( $atts['src'] );
8571 - } else {
8572 - return '<!-- Audio shortcode source not set -->';
8573 - }
8574 - }
8575 -
8576 - $post_id = 0;
8577 - if ( isset( $post ) ) {
8578 - $post_id = $post->ID;
8579 - }
8580 -
8581 - // add the special .js
8582 - wp_enqueue_script(
8583 - 'audio-shortcode',
8584 - plugins_url( 'js/audio-shortcode.js', __FILE__ ),
8585 - array( 'jquery' ),
8586 - '1.1',
8587 - true);
8588 -
8589 - // alert the infinite scroll renderer that it should try to load the script
8590 - self::$add_script = true;
8591 - $atts[0] = strip_tags( join( ' ', $atts ) );
8592 - $src = ltrim( $atts[0], '=' );
8593 -
8594 - /**
8595 - * Set the audio player default colors.
8596 - *
8597 - * @module shortcodes
8598 - *
8599 - * @since 1.4.0
8600 - *
8601 - * @param array $ap_options {
8602 - * The default colors for the audio player in hexidecimal format (e.g. 0x#F8F8F8).
8603 - *
8604 - * @type string $bg Background color.
8605 - * @type string $leftbg Left background color.
8606 - * @type string $lefticon Left icon color.
8607 - * @type string $rightbg Right background color.
8608 - * @type string $rightbghover Right background hover color.
8609 - * @type string $righticon Right icon color.
8610 - * @type string $righticonhover Right icon hover color.
8611 - * @type string $text Text color.
8612 - * @type string $slider Slider color.
8613 - * @type string $track Track color.
8614 - * @type string $border Border color.
8615 - * @type string $loader Loader color.
8616 - */
8617 - $ap_options = apply_filters(
8618 - 'audio_player_default_colors',
8619 - array(
8620 - "bg" => "0xF8F8F8",
8621 - "leftbg" => "0xEEEEEE",
8622 - "lefticon" => "0x666666",
8623 - "rightbg" => "0xCCCCCC",
8624 - "rightbghover" => "0x999999",
8625 - "righticon" => "0x666666",
8626 - "righticonhover" => "0xFFFFFF",
8627 - "text" => "0x666666",
8628 - "slider" => "0x666666",
8629 - "track" => "0xFFFFFF",
8630 - "border" => "0x666666",
8631 - "loader" => "0x9FFFB8"
8632 - ) );
8633 -
8634 - if ( ! isset( $ap_playerID ) ) {
8635 - $ap_playerID = 1;
8636 - } else {
8637 - $ap_playerID++;
8638 - }
8639 -
8640 - if ( ! isset( $load_audio_script ) ) {
8641 - $load_audio_script = true;
8642 - }
8643 -
8644 - // prep the audio files
8645 - $src = trim( $src, ' "' );
8646 - $options = array();
8647 - $data = preg_split( "/\|/", $src );
8648 - $sound_file = $data[0];
8649 - $sound_files = explode( ',', $sound_file );
8650 -
8651 - if ( is_ssl() ) {
8652 - for ( $i = 0; $i < count( $sound_files ); $i++ ) {
8653 - $sound_files[ $i ] = preg_replace( '#^http://([^.]+).files.wordpress.com/#', 'https://$1.files.wordpress.com/', $sound_files[ $i ] );
8654 - }
8655 - }
8656 -
8657 - $sound_files = array_map( 'trim', $sound_files );
8658 - $sound_files = array_map( array( $this, 'rawurlencode_spaces' ), $sound_files );
8659 - $sound_files = array_map( 'esc_url_raw', $sound_files ); // Ensure each is a valid URL
8660 - $num_files = count( $sound_files );
8661 - $sound_types = array(
8662 - 'mp3' => 'mpeg',
8663 - 'wav' => 'wav',
8664 - 'ogg' => 'ogg',
8665 - 'oga' => 'ogg',
8666 - 'm4a' => 'mp4',
8667 - 'aac' => 'mp4',
8668 - 'webm' => 'webm'
8669 - );
8670 -
8671 - for ( $i = 1; $i < count( $data ); $i++ ) {
8672 - $pair = explode( "=", $data[$i] );
8673 - if ( strtolower( $pair[0] ) != 'autostart' ) {
8674 - $options[$pair[0]] = $pair[1];
8675 - }
8676 - }
8677 -
8678 - // Merge runtime options to default colour options
8679 - // (runtime options overwrite default options)
8680 - foreach ( $ap_options as $key => $default ) {
8681 - if ( isset( $options[$key] ) ) {
8682 - if ( preg_match( '/^(0x)?[a-f0-9]{6}$/i', $default ) && !preg_match( '/^(0x)?[a-f0-9]{6}$/i', $options[$key] ) ) {
8683 - // Default is a hex color, but input is not
8684 - $options[$key] = $default;
8685 - }
8686 - } else {
8687 - $options[$key] = $default;
8688 - }
8689 - }
8690 - $options['soundFile'] = join( ',', $sound_files ); // Rebuild the option with our now sanitized data
8691 - $flash_vars = array();
8692 - foreach ( $options as $key => $value ) {
8693 - $flash_vars[] = rawurlencode( $key ) . '=' . rawurlencode( $value );
8694 - }
8695 - $flash_vars = implode( '&amp;', $flash_vars );
8696 - $flash_vars = esc_attr( $flash_vars );
8697 -
8698 - // extract some of the options to insert into the markup
8699 - if ( isset( $options['bgcolor'] ) && preg_match( '/^(0x)?[a-f0-9]{6}$/i', $options['bgcolor'] ) ) {
8700 - $bgcolor = preg_replace( '/^(0x)?/', '#', $options['bgcolor'] );
8701 - $bgcolor = esc_attr( $bgcolor );
8702 - } else {
8703 - $bgcolor = '#FFFFFF';
8704 - }
8705 -
8706 - if ( isset( $options['width'] ) ) {
8707 - $width = intval( $options['width'] );
8708 - } else {
8709 - $width = 290;
8710 - }
8711 -
8712 - $loop = '';
8713 - $script_loop = 'false';
8714 - if ( isset( $options['loop'] ) && 'yes' == $options['loop'] ) {
8715 - $script_loop = 'true';
8716 - if ( 1 == $num_files ) {
8717 - $loop = 'loop';
8718 - }
8719 - }
8720 -
8721 - $volume = 0.6;
8722 - if ( isset( $options['initialvolume'] ) &&
8723 - 0.0 < floatval( $options['initialvolume'] ) &&
8724 - 100.0 >= floatval( $options['initialvolume'] ) ) {
8725 -
8726 - $volume = floatval( $options['initialvolume'] )/100.0;
8727 - }
8728 -
8729 - $file_artists = array_pad( array(), $num_files, '' );
8730 - if ( isset( $options['artists'] ) ) {
8731 - $artists = preg_split( '/,/', $options['artists'] );
8732 - foreach ( $artists as $i => $artist ) {
8733 - $file_artists[$i] = esc_html( $artist ) . ' - ';
8734 - }
8735 - }
8736 -
8737 - // generate default titles
8738 - $file_titles = array();
8739 - for ( $i = 0; $i < $num_files; $i++ ) {
8740 - $file_titles[] = 'Track #' . ($i+1);
8741 - }
8742 -
8743 - // replace with real titles if they exist
8744 - if ( isset( $options['titles'] ) ) {
8745 - $titles = preg_split( '/,/', $options['titles'] );
8746 - foreach ( $titles as $i => $title ) {
8747 - $file_titles[$i] = esc_html( $title );
8748 - }
8749 - }
8750 -
8751 - // fallback for the fallback, just a download link
8752 - $not_supported = '';
8753 - foreach ( $sound_files as $sfile ) {
8754 - $not_supported .= sprintf(
8755 - __( 'Download: <a href="%s">%s</a><br />', 'jetpack' ),
8756 - esc_url( $sfile ),
8757 - esc_html( basename( $sfile ) ) );
8758 - }
8759 -
8760 - // HTML5 audio tag
8761 - $html5_audio = '';
8762 - $all_mp3 = true;
8763 - $add_audio = true;
8764 - $num_good = 0;
8765 - $to_remove = array();
8766 - foreach ( $sound_files as $i => $sfile ) {
8767 - $file_extension = pathinfo( $sfile, PATHINFO_EXTENSION );
8768 - if ( ! preg_match( '/^(mp3|wav|ogg|oga|m4a|aac|webm)$/i', $file_extension ) ) {
8769 - $html5_audio .= '<!-- Audio shortcode unsupported audio format -->';
8770 - if ( 1 == $num_files ) {
8771 - $html5_audio .= $not_supported;
8772 - }
8773 -
8774 - $to_remove[] = $i; // make a note of the bad files
8775 - $all_mp3 = false;
8776 - continue;
8777 - } elseif ( ! preg_match( '/^mp3$/i', $file_extension ) ) {
8778 - $all_mp3 = false;
8779 - }
8780 -
8781 - if ( 0 == $i ) { // only need one player
8782 - $html5_audio .= <<<AUDIO
8783 - <span id="wp-as-{$post_id}_{$ap_playerID}-container">
8784 - <audio id='wp-as-{$post_id}_{$ap_playerID}' controls preload='none' $loop style='background-color:$bgcolor;width:{$width}px;'>
8785 - <span id="wp-as-{$post_id}_{$ap_playerID}-nope">$not_supported</span>
8786 - </audio>
8787 - </span>
8788 - <br />
8789 -AUDIO;
8790 - }
8791 - $num_good++;
8792 - }
8793 -
8794 - // player controls, if needed
8795 - if ( 1 < $num_files ) {
8796 - $html5_audio .= <<<CONTROLS
8797 - <span id='wp-as-{$post_id}_{$ap_playerID}-controls' style='display:none;'>
8798 - <a id='wp-as-{$post_id}_{$ap_playerID}-prev'
8799 - href='javascript:audioshortcode.prev_track( "{$post_id}_{$ap_playerID}" );'
8800 - style='font-size:1.5em;'>&laquo;</a>
8801 - |
8802 - <a id='wp-as-{$post_id}_{$ap_playerID}-next'
8803 - href='javascript:audioshortcode.next_track( "{$post_id}_{$ap_playerID}", true, $script_loop );'
8804 - style='font-size:1.5em;'>&raquo;</a>
8805 - </span>
8806 -CONTROLS;
8807 - }
8808 - $html5_audio .= "<span id='wp-as-{$post_id}_{$ap_playerID}-playing'></span>";
8809 -
8810 - /**
8811 - * Sets external resource URL.
8812 - *
8813 - * @module shortcodes
8814 - *
8815 - * @since 1.4.0
8816 - *
8817 - * @param string $args URL of external resource.
8818 - *
8819 - */
8820 - $swfurl = apply_filters(
8821 - 'jetpack_static_url',
8822 - set_url_scheme( "http://en.wordpress.com/wp-content/plugins/audio-player/player.swf" )
8823 - );
8824 -
8825 - // all the fancy javascript is causing Google Reader to break, just include flash in GReader
8826 - // override html5 audio code w/ just not supported code
8827 - if ( is_feed() ) {
8828 - $html5_audio = $not_supported;
8829 - }
8830 -
8831 - if ( $all_mp3 ) {
8832 - // process regular flash player, inserting HTML5 tags into object as fallback
8833 - $audio_tags = <<<FLASH
8834 - <object id='wp-as-{$post_id}_{$ap_playerID}-flash' type='application/x-shockwave-flash' data='$swfurl' width='$width' height='24'>
8835 - <param name='movie' value='$swfurl' />
8836 - <param name='FlashVars' value='{$flash_vars}' />
8837 - <param name='quality' value='high' />
8838 - <param name='menu' value='false' />
8839 - <param name='bgcolor' value='$bgcolor' />
8840 - <param name='wmode' value='opaque' />
8841 - $html5_audio
8842 - </object>
8843 -FLASH;
8844 - } else { // just HTML5 for non-mp3 versions
8845 - $audio_tags = $html5_audio;
8846 - }
8847 -
8848 - // strip out all the bad files before it reaches .js
8849 - foreach ( $to_remove as $i ) {
8850 - array_splice( $sound_files, $i, 1 );
8851 - array_splice( $file_artists, $i, 1 );
8852 - array_splice( $file_titles, $i, 1 );
8853 - }
8854 -
8855 - // mashup the artist/titles for the script
8856 - $script_titles = array();
8857 - for ( $i = 0; $i < $num_files; $i++ ) {
8858 - if ( isset( $file_artists[ $i ] ) && isset( $file_titles[ $i ] ) ) {
8859 - $script_titles[] = $file_artists[ $i ] . $file_titles[ $i ];
8860 - }
8861 - }
8862 -
8863 - // javacript to control audio
8864 - $script_files = json_encode( $sound_files );
8865 - $script_titles = json_encode( $script_titles );
8866 - $script = <<<SCRIPT
8867 - <script type='text/javascript'>
8868 - //<![CDATA[
8869 - (function() {
8870 - var prep = function() {
8871 - if ( 'undefined' === typeof window.audioshortcode ) { return; }
8872 - audioshortcode.prep(
8873 - '{$post_id}_{$ap_playerID}',
8874 - $script_files,
8875 - $script_titles,
8876 - $volume,
8877 - $script_loop
8878 - );
8879 - };
8880 - if ( 'undefined' === typeof jQuery ) {
8881 - if ( document.addEventListener ) {
8882 - window.addEventListener( 'load', prep, false );
8883 - } else if ( document.attachEvent ) {
8884 - window.attachEvent( 'onload', prep );
8885 - }
8886 - } else {
8887 - jQuery(document).on( 'ready as-script-load', prep );
8888 - }
8889 - })();
8890 - //]]>
8891 - </script>
8892 -SCRIPT;
8893 -
8894 - // add the special javascript, if needed
8895 - if ( 0 < $num_good && ! is_feed() ) {
8896 - $audio_tags .= $script;
8897 - }
8898 -
8899 - return "<span style='text-align:left;display:block;'><p>$audio_tags</p></span>";
8900 - }
8901 -
8902 - /**
8903 - * If the theme uses infinite scroll, include jquery at the start
8904 - */
8905 - function check_infinite() {
8906 - if ( current_theme_supports( 'infinite-scroll' ) && class_exists( 'The_Neverending_Home_Page' ) && The_Neverending_Home_Page::archive_supports_infinity() )
8907 - wp_enqueue_script( 'jquery' );
8908 - }
8909 -
8910 -
8911 - /**
8912 - * Dynamically load the .js, if needed
8913 - *
8914 - * This hooks in late (priority 11) to infinite_scroll_render to determine
8915 - * a posteriori if a shortcode has been called.
8916 - */
8917 - function audio_shortcode_infinite() {
8918 - // only try to load if a shortcode has been called
8919 - if( self::$add_script ) {
8920 - $script_url = json_encode( esc_url_raw( plugins_url( 'js/audio-shortcode.js', __FILE__ ) ) );
8921 -
8922 - // if the script hasn't been loaded, load it
8923 - // if the script loads successfully, fire an 'as-script-load' event
8924 - echo <<<SCRIPT
8925 - <script type='text/javascript'>
8926 - //<![CDATA[
8927 - if ( typeof window.audioshortcode === 'undefined' ) {
8928 - var wp_as_js = document.createElement( 'script' );
8929 - wp_as_js.type = 'text/javascript';
8930 - wp_as_js.src = $script_url;
8931 - wp_as_js.async = true;
8932 - wp_as_js.onload = function() {
8933 - jQuery( document.body ).trigger( 'as-script-load' );
8934 - };
8935 - document.getElementsByTagName( 'head' )[0].appendChild( wp_as_js );
8936 - } else {
8937 - jQuery( document.body ).trigger( 'as-script-load' );
8938 - }
8939 - //]]>
8940 - </script>
8941 -SCRIPT;
8942 - }
8943 - }
8944 -
8945 - /**
8946 - * Fixes URLs that have been pasted with spaces:
8947 - * [audio http://example.com/Some Cool Music.mp3]
8948 - *
8949 - * @param string $url
8950 - * @return string
8951 - */
8952 - function rawurlencode_spaces( $url ) {
8953 - return str_replace( ' ', rawurlencode( ' ' ), $url );
8954 - }
8955 -}
8956 -
8957 -// kick it all off
8958 -new AudioShortcode();
8959 + * Deprecated. No longer needed.
8960 + *
8961 + * @package Jetpack
8962 + */
8963
8964 diff --git a/plugins/jetpack/modules/shortcodes/css/recipes-print.css b/plugins/jetpack/modules/shortcodes/css/recipes-print.css
8965 index b3e76af..48e0517 100644
8966 --- a/plugins/jetpack/modules/shortcodes/css/recipes-print.css
8967 +++ b/plugins/jetpack/modules/shortcodes/css/recipes-print.css
8968 @@ -1,3 +1,36 @@
8969 .jetpack-recipe-meta li.jetpack-recipe-print {
8970 display: none;
8971 }
8972 +
8973 +.jetpack-recipe-title {
8974 + font-size: 16pt;
8975 +}
8976 +
8977 +.jetpack-recipe-content img {
8978 + display: inline-block !important;
8979 + max-width: 100%;
8980 +}
8981 +
8982 +.jetpack-recipe-image {
8983 + display: none !important;
8984 +}
8985 +
8986 +.jetpack-recipe-content .aligncenter {
8987 + display: block !important;
8988 + margin: 0 auto 1em !important;
8989 + text-align: center !important;
8990 +}
8991 +
8992 +.jetpack-recipe-content .alignright {
8993 + float: right !important;
8994 + margin: 0 0 .5em 1em !important;
8995 +}
8996 +
8997 +.jetpack-recipe-content .alignleft {
8998 + float: left !important;
8999 + margin: 0 1em .5em 0 !important;
9000 +}
9001 +
9002 +.jetpack-recipe-content .alignnone {
9003 + display: inline-block;
9004 +}
9005
9006 diff --git a/plugins/jetpack/modules/shortcodes/css/recipes.css b/plugins/jetpack/modules/shortcodes/css/recipes.css
9007 index 08b9b00..63ab216 100644
9008 --- a/plugins/jetpack/modules/shortcodes/css/recipes.css
9009 +++ b/plugins/jetpack/modules/shortcodes/css/recipes.css
9010 @@ -31,3 +31,6 @@
9011 padding-right: 0;
9012 text-align: right;
9013 }
9014 +.jetpack-recipe-notes {
9015 + font-style: italic;
9016 +}
9017
9018 diff --git a/plugins/jetpack/modules/shortcodes/css/rtl/recipes-rtl.css b/plugins/jetpack/modules/shortcodes/css/rtl/recipes-rtl.css
9019 index 26da7d1..57d9759 100644
9020 --- a/plugins/jetpack/modules/shortcodes/css/rtl/recipes-rtl.css
9021 +++ b/plugins/jetpack/modules/shortcodes/css/rtl/recipes-rtl.css
9022 @@ -1,4 +1,4 @@
9023 -/* This file was automatically generated on Feb 24 2014 16:44:25 */
9024 +/* This file was automatically generated on Apr 19 2016 09:36:47 */
9025
9026 .jetpack-recipe {
9027 border: 1px solid #f2f2f2;
9028 @@ -33,3 +33,6 @@
9029 padding-left: 0;
9030 text-align: left;
9031 }
9032 +.jetpack-recipe-notes {
9033 + font-style: italic;
9034 +}
9035
9036 diff --git a/plugins/jetpack/modules/shortcodes/js/audio-shortcode.js b/plugins/jetpack/modules/shortcodes/js/audio-shortcode.js
9037 deleted file mode 100644
9038 index 511fd1b..0000000
9039 --- a/plugins/jetpack/modules/shortcodes/js/audio-shortcode.js
9040 +++ /dev/null
9041 @@ -1,159 +0,0 @@
9042 -/* jshint onevar:false */
9043 -/* global audioshortcode */
9044 -
9045 -// Note: This file no longer exists on wpcom.
9046 -
9047 -(function($) {
9048 -
9049 -window.audioshortcode = {
9050 -
9051 - /**
9052 - * Prep the audio player once the page is ready, add listeners, etc
9053 - */
9054 - prep: function( player_id, files, titles, volume, loop ) {
9055 - // check if the player has already been prepped, no-op if it has
9056 - var container = $( '#wp-as-' + player_id + '-container' );
9057 - if ( container.hasClass( 'wp-as-prepped' ) ) {
9058 - return;
9059 - }
9060 - container.addClass( 'wp-as-prepped' );
9061 -
9062 - // browser doesn't support HTML5 audio, no-op
9063 - if ( ! document.createElement('audio').canPlayType ) {
9064 - return;
9065 - }
9066 -
9067 - // if the browser removed the script, no-op
9068 - var player = $( '#wp-as-' + player_id ).get(0);
9069 - if ( typeof player === 'undefined' ) {
9070 - return;
9071 - }
9072 -
9073 - this[player_id] = [];
9074 - this[player_id].i = 0;
9075 - this[player_id].files = files;
9076 - this[player_id].titles = titles;
9077 - player.volume = volume;
9078 -
9079 - var type_map = {
9080 - 'mp3': 'mpeg',
9081 - 'wav': 'wav',
9082 - 'ogg': 'ogg',
9083 - 'oga': 'ogg',
9084 - 'm4a': 'mp4',
9085 - 'aac': 'mp4',
9086 - 'webm': 'webm'
9087 - };
9088 -
9089 - // strip out all the files that can't be played
9090 - for ( var i = this[player_id].files.length-1; i >= 0; i-- ) {
9091 - var extension = this[player_id].files[i].split( '.' ).pop();
9092 - var type = 'audio/' + type_map[extension];
9093 - if ( ! player.canPlayType( type ) ) {
9094 - this.remove_track( player_id, i );
9095 - }
9096 - }
9097 -
9098 - // bail if there are no more good files
9099 - if ( 0 === this[player_id].files.length ) {
9100 - return;
9101 - }
9102 - player.src = this[player_id].files[0];
9103 -
9104 - // show the controls if there are still 2+ files remaining
9105 - if ( 1 < this[player_id].files.length ) {
9106 - $( '#wp-as-' + player_id + '-controls' ).show();
9107 - }
9108 -
9109 - player.addEventListener( 'error', function() {
9110 - audioshortcode.remove_track( player_id, audioshortcode[player_id].i );
9111 - if ( 0 < audioshortcode[player_id].files.length ) {
9112 - audioshortcode[player_id].i--;
9113 - audioshortcode.next_track( player_id, false, loop );
9114 - }
9115 - }, false );
9116 -
9117 - player.addEventListener( 'ended', function() {
9118 - audioshortcode.next_track( player_id, false, loop );
9119 - }, false );
9120 -
9121 - player.addEventListener( 'play', function() {
9122 - var i = audioshortcode[player_id].i;
9123 - var titles = audioshortcode[player_id].titles;
9124 - $( '#wp-as-' + player_id + '-playing' ).text( ' ' + titles[i] );
9125 - }, false );
9126 -
9127 - player.addEventListener( 'pause', function() {
9128 - $( '#wp-as-' + player_id + '-playing' ).text( '' );
9129 - }, false );
9130 - },
9131 -
9132 - /**
9133 - * Remove the track and update the player/controls if needed
9134 - */
9135 - remove_track: function( player_id, index ) {
9136 - this[player_id].files.splice( index, 1 );
9137 - this[player_id].titles.splice( index, 1 );
9138 -
9139 - // get rid of player/controls if they can't be played
9140 - if ( 0 === this[player_id].files.length ) {
9141 - $( '#wp-as-' + player_id + '-container' ).html( $( '#wp-as-' + player_id + '-nope' ).html() );
9142 - $( '#wp-as-' + player_id + '-controls' ).html( '' );
9143 - } else if ( 1 === this[player_id].files.length ) {
9144 - $( '#wp-as-' + player_id + '-controls' ).html( '' );
9145 - }
9146 - },
9147 -
9148 - /**
9149 - * Change the src of the player, load the file, then play it
9150 - */
9151 - start_track: function( player_id, file ) {
9152 - var player = $( '#wp-as-' + player_id ).get(0);
9153 - player.src = file;
9154 - player.load();
9155 - player.play();
9156 - },
9157 -
9158 - /**
9159 - * Play the previous track
9160 - */
9161 - prev_track: function( player_id ) {
9162 - var player = $( '#wp-as-' + player_id ).get(0);
9163 - var files = this[player_id].files;
9164 - if ( player.paused || 0 === this[player_id].i ) {
9165 - return;
9166 - }
9167 -
9168 - player.pause();
9169 - if ( 0 < this[player_id].i ) {
9170 - this[player_id].i--;
9171 - this.start_track( player_id, files[this[player_id].i] );
9172 - }
9173 - },
9174 -
9175 - /**
9176 - * Play the next track
9177 - */
9178 - next_track: function( player_id, fromClick, loop ) {
9179 - var player = $( '#wp-as-' + player_id ).get(0);
9180 - var files = this[player_id].files;
9181 - if ( fromClick && ( player.paused || files.length-1 === this[player_id].i ) ) {
9182 - return;
9183 - }
9184 -
9185 - player.pause();
9186 - if ( files.length-1 > this[player_id].i ) {
9187 - this[player_id].i++;
9188 - this.start_track( player_id, files[this[player_id].i] );
9189 - } else if ( loop ) {
9190 - this[player_id].i = 0;
9191 - this.start_track( player_id, 0 );
9192 - } else {
9193 - this[player_id].i = 0;
9194 - player.src = files[0];
9195 - $( '#wp-as-' + player_id + '-playing' ).text( '' );
9196 - }
9197 - }
9198 -};
9199 -
9200 -})(jQuery);
9201
9202 diff --git a/plugins/jetpack/modules/shortcodes/recipe.php b/plugins/jetpack/modules/shortcodes/recipe.php
9203 index 7288e2a..1a8f7a0 100644
9204 --- a/plugins/jetpack/modules/shortcodes/recipe.php
9205 +++ b/plugins/jetpack/modules/shortcodes/recipe.php
9206 @@ -1,23 +1,41 @@
9207 <?php
9208 +
9209 /**
9210 * Embed recipe 'cards' in post, with basic styling and print functionality
9211 *
9212 + * To Do
9213 + * - defaults settings
9214 + * - basic styles/themecolor styles
9215 + * - validation/sanitization
9216 + * - print styles
9217 */
9218 -
9219 class Jetpack_Recipes {
9220
9221 private $scripts_and_style_included = false;
9222
9223 function __construct() {
9224 add_action( 'init', array( $this, 'action_init' ) );
9225 +
9226 + // Add itemprop to allowed tags for wp_kses_post, so we can use it for better Schema compliance.
9227 + global $allowedposttags;
9228 + $tags = array( 'li', 'ol', 'img' );
9229 + foreach ( $tags as $tag ) {
9230 + if ( ! is_array( $allowedposttags[ $tag ] ) ) {
9231 + $allowedposttags[ $tag ] = array();
9232 + }
9233 + $allowedposttags[ $tag ]['itemprop'] = array();
9234 + }
9235 }
9236
9237 function action_init() {
9238 // Enqueue styles if [recipe] exists
9239 add_action( 'wp_head', array( $this, 'add_scripts' ), 1 );
9240
9241 - // Render [recipe]
9242 + // Render [recipe], along with other shortcodes that can be nested within.
9243 add_shortcode( 'recipe', array( $this, 'recipe_shortcode' ) );
9244 + add_shortcode( 'recipe-notes', array( $this, 'recipe_notes_shortcode' ) );
9245 + add_shortcode( 'recipe-ingredients', array( $this, 'recipe_ingredients_shortcode' ) );
9246 + add_shortcode( 'recipe-directions', array( $this, 'recipe_directions_shortcode' ) );
9247 }
9248
9249 /**
9250 @@ -39,39 +57,41 @@ class Jetpack_Recipes {
9251 return;
9252 }
9253
9254 - if( is_rtl() ) {
9255 - wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/rtl/recipes-rtl.css', __FILE__ ), array(), '20130919' );
9256 + if ( is_rtl() ) {
9257 + wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/rtl/recipes-rtl.css', __FILE__ ), array(), '20130919' );
9258 } else {
9259 - wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/recipes.css', __FILE__ ), array(), '20130919' );
9260 + wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/recipes.css', __FILE__ ), array(), '20130919' );
9261 }
9262
9263 + wp_add_inline_style( 'jetpack-recipes-style', self::themecolor_styles() ); // add $themecolors-defined styles
9264
9265 wp_enqueue_script( 'jetpack-recipes-printthis', plugins_url( '/js/recipes-printthis.js', __FILE__ ), array( 'jquery' ), '20131230' );
9266 - wp_enqueue_script( 'jetpack-recipes-js', plugins_url( '/js/recipes.js', __FILE__ ), array( 'jquery', 'jetpack-recipes-printthis' ), '20131230' );
9267 + wp_enqueue_script( 'jetpack-recipes-js', plugins_url( '/js/recipes.js', __FILE__ ), array( 'jquery', 'jetpack-recipes-printthis' ), '20131230' );
9268
9269 - $title_var = wp_title( '|', false, 'right' );
9270 + $title_var = wp_title( '|', false, 'right' );
9271 $print_css_var = plugins_url( '/css/recipes-print.css', __FILE__ );
9272
9273 - wp_localize_script( 'jetpack-recipes-js', 'jetpack_recipes_vars', array(
9274 - 'pageTitle' => $title_var,
9275 - 'loadCSS' => $print_css_var
9276 - ) );
9277 + wp_localize_script( 'jetpack-recipes-js', 'jetpack_recipes_vars', array( 'pageTitle' => $title_var, 'loadCSS' => $print_css_var ) );
9278 }
9279
9280 /**
9281 * Our [recipe] shortcode.
9282 * Prints recipe data styled to look good on *any* theme.
9283 *
9284 - * @return resume_shortcode_html
9285 + * @return string HTML for recipe shortcode.
9286 */
9287 static function recipe_shortcode( $atts, $content = '' ) {
9288 - $atts = shortcode_atts( array(
9289 - 'title' => '', //string
9290 - 'servings' => '', //intval
9291 - 'time' => '', //string
9292 - 'difficulty' => '', //string
9293 - 'print' => '', //string
9294 - ), $atts, 'recipe' );
9295 + $atts = shortcode_atts(
9296 + array(
9297 + 'title' => '', //string
9298 + 'servings' => '', //intval
9299 + 'time' => '', //string
9300 + 'difficulty' => '', //string
9301 + 'print' => '', //string
9302 + 'image' => '', //string
9303 + 'description' => '', //string
9304 + ), $atts, 'recipe'
9305 + );
9306
9307 return self::recipe_shortcode_html( $atts, $content );
9308 }
9309 @@ -79,52 +99,74 @@ class Jetpack_Recipes {
9310 /**
9311 * The recipe output
9312 *
9313 - * @return Html
9314 + * @return string HTML output
9315 */
9316 static function recipe_shortcode_html( $atts, $content = '' ) {
9317 - $html = false;
9318 + // Add itemprop to allowed tags for wp_kses_post, so we can use it for better Schema compliance.
9319 + global $allowedtags;
9320 + $allowedtags['li'] = array( 'itemprop' => array () );
9321
9322 $html = '<div class="hrecipe jetpack-recipe" itemscope itemtype="http://schema.org/Recipe">';
9323
9324 // Print the recipe title if exists
9325 - if ( '' != $atts['title'] ) {
9326 + if ( '' !== $atts['title'] ) {
9327 $html .= '<h3 class="jetpack-recipe-title" itemprop="name">' . esc_html( $atts['title'] ) . '</h3>';
9328 }
9329
9330 // Print the recipe meta if exists
9331 - if ( '' != $atts['servings'] || '' != $atts['time'] || '' != $atts['difficulty'] || '' != $atts['print'] ) {
9332 + if ( '' !== $atts['servings'] || '' != $atts['time'] || '' != $atts['difficulty'] || '' != $atts['print'] ) {
9333 $html .= '<ul class="jetpack-recipe-meta">';
9334
9335 - if ( '' != $atts['servings'] ) {
9336 - $html .= sprintf( '<li class="jetpack-recipe-servings" itemprop="recipeYield"><strong>%1$s: </strong>%2$s</li>',
9337 - __( 'Servings', 'jetpack' ),
9338 + if ( '' !== $atts['servings'] ) {
9339 + $html .= sprintf(
9340 + '<li class="jetpack-recipe-servings" itemprop="recipeYield"><strong>%1$s: </strong>%2$s</li>',
9341 + esc_html_x( 'Servings', 'recipe', 'jetpack' ),
9342 esc_html( $atts['servings'] )
9343 );
9344 }
9345
9346 - if ( '' != $atts['time'] ) {
9347 - $html .= sprintf( '<li class="jetpack-recipe-time" itemprop="totalTime"><strong>%1$s: </strong>%2$s</li>',
9348 - __( 'Time', 'jetpack' ),
9349 + if ( '' !== $atts['time'] ) {
9350 + $html .= sprintf(
9351 + '<li class="jetpack-recipe-time" itemprop="totalTime"><strong>%1$s: </strong>%2$s</li>',
9352 + esc_html_x( 'Time', 'recipe', 'jetpack' ),
9353 esc_html( $atts['time'] )
9354 );
9355 }
9356
9357 - if ( '' != $atts['difficulty'] ) {
9358 - $html .= sprintf( '<li class="jetpack-recipe-difficulty"><strong>%1$s: </strong>%2$s</li>',
9359 - __( 'Difficulty', 'jetpack' ),
9360 + if ( '' !== $atts['difficulty'] ) {
9361 + $html .= sprintf(
9362 + '<li class="jetpack-recipe-difficulty"><strong>%1$s: </strong>%2$s</li>',
9363 + esc_html_x( 'Difficulty', 'recipe', 'jetpack' ),
9364 esc_html( $atts['difficulty'] )
9365 );
9366 }
9367
9368 - if ( 'false' != $atts['print'] ) {
9369 - $html .= sprintf( '<li class="jetpack-recipe-print"><a href="#">%s</a></li>',
9370 - __( 'Print', 'jetpack' )
9371 + if ( 'false' !== $atts['print'] ) {
9372 + $html .= sprintf(
9373 + '<li class="jetpack-recipe-print"><a href="#">%1$s</a></li>',
9374 + esc_html_x( 'Print', 'recipe', 'jetpack' )
9375 );
9376 }
9377
9378 $html .= '</ul>';
9379 }
9380
9381 + // Output the image, if we have one.
9382 + if ( '' !== $atts['image'] ) {
9383 + $html .= sprintf(
9384 + '<img class="jetpack-recipe-image" itemprop="thumbnailUrl" src="%1$s" />',
9385 + esc_url( $atts['image'] )
9386 + );
9387 + }
9388 +
9389 + // Output the description, if we have one.
9390 + if ( '' !== $atts['description'] ) {
9391 + $html .= sprintf(
9392 + '<p class="jetpack-recipe-description">%1$s</p>',
9393 + esc_html( $atts['description'] )
9394 + );
9395 + }
9396 +
9397 // Print content between codes
9398 $html .= '<div class="jetpack-recipe-content">' . do_shortcode( $content ) . '</div>';
9399
9400 @@ -142,6 +184,196 @@ class Jetpack_Recipes {
9401 // Return the HTML block
9402 return $html;
9403 }
9404 +
9405 + /**
9406 + * Our [recipe-notes] shortcode.
9407 + * Outputs notes, styled in a div.
9408 + *
9409 + * @return string HTML for recipe notes shortcode.
9410 + */
9411 + static function recipe_notes_shortcode( $atts, $content = '' ) {
9412 + $atts = shortcode_atts( array(
9413 + 'title' => '', //string
9414 + ), $atts, 'recipe-notes' );
9415 +
9416 + $html ='';
9417 +
9418 + // Print a title if one exists.
9419 + if ( '' !== $atts['title'] ) {
9420 + $html .= '<h4 class="jetpack-recipe-notes-title">' . esc_html( $atts['title'] ) . '</h4>';
9421 + }
9422 +
9423 + $html .= '<div class="jetpack-recipe-notes">';
9424 +
9425 + // Format content using list functionality, if desired.
9426 + $html .= self::output_list_content( $content, 'notes' );
9427 +
9428 + $html .= '</div>';
9429 +
9430 + // Sanitize html.
9431 + $html = wp_kses_post( $html );
9432 +
9433 + // Return the HTML block.
9434 + return $html;
9435 + }
9436 +
9437 + /**
9438 + * Our [recipe-ingredients] shortcode.
9439 + * Outputs notes, styled in a div.
9440 + *
9441 + * @return string HTML for recipe ingredients shortcode.
9442 + */
9443 + static function recipe_ingredients_shortcode( $atts, $content = '' ) {
9444 + $atts = shortcode_atts( array(
9445 + 'title' => esc_html_x( 'Ingredients', 'recipe', 'jetpack' ), //string
9446 + ), $atts, 'recipe-ingredients' );
9447 +
9448 + $html = '<div class="jetpack-recipe-ingredients">';
9449 +
9450 + // Print a title unless the user has opted to exclude it.
9451 + if ( 'false' !== $atts['title'] ) {
9452 + $html .= '<h4 class="jetpack-recipe-ingredients-title">' . esc_html( $atts['title'] ) . '</h4>';
9453 + }
9454 +
9455 + // Format content using list functionality.
9456 + $html .= self::output_list_content( $content, 'ingredients' );
9457 +
9458 + $html .= '</div>';
9459 +
9460 + // Sanitize html.
9461 + $html = wp_kses_post( $html );
9462 +
9463 + // Return the HTML block.
9464 + return $html;
9465 + }
9466 +
9467 + /**
9468 + * Reusable function to check for shortened formatting.
9469 + * Basically, users can create lists with the following shorthand:
9470 + * - item one
9471 + * - item two
9472 + * - item three
9473 + * And we'll magically convert it to a list. This has the added benefit
9474 + * of including itemprops for the recipe schema.
9475 + *
9476 + * @return string content formatted as a list item
9477 + */
9478 + static function output_list_content( $content, $type ) {
9479 + $html ='';
9480 +
9481 + switch ( $type ) {
9482 + case 'directions' :
9483 + $list_item_replacement = '<li class="jetpack-recipe-directions">${1}</li>';
9484 + $itemprop = ' itemprop="recipeInstructions"';
9485 + $listtype = 'ol';
9486 + break;
9487 + case 'ingredients' :
9488 + $list_item_replacement = '<li class="jetpack-recipe-ingredient">${1}</li>';
9489 + $itemprop = ' itemprop="recipeIngredient"';
9490 + $listtype = 'ul';
9491 + break;
9492 + default:
9493 + $list_item_replacement = '<li class="jetpack-recipe-notes">${1}</li>';
9494 + $itemprop = '';
9495 + $listtype = 'ul';
9496 + }
9497 +
9498 + // Check to see if the user is trying to use shortened formatting.
9499 + if (
9500 + strpos( $content, '&#8211;' ) !== false ||
9501 + strpos( $content, '&#8212;' ) !== false ||
9502 + strpos( $content, '-' ) !== false ||
9503 + strpos( $content, '*' ) !== false ||
9504 + strpos( $content, '#' ) !== false ||
9505 + strpos( $content, '–' ) !== false || // ndash
9506 + strpos( $content, '—' ) !== false || // mdash
9507 + preg_match( '/\d+\.\s/', $content )
9508 + ) {
9509 + // Remove breaks and extra whitespace
9510 + $content = str_replace( "<br />\n", "\n", $content );
9511 + $content = trim( $content );
9512 +
9513 + $ul_pattern = '/(?:^|\n|\<p\>)+(?:[\-–—]+|\&#8211;|\&#8212;|\*)+\h+(.*)/mi';
9514 + $ol_pattern = '/(?:^|\n|\<p\>)+(?:\d+\.|#+)+\h+(.*)/mi';
9515 +
9516 + preg_match_all( $ul_pattern, $content, $ul_matches );
9517 + preg_match_all( $ol_pattern, $content, $ol_matches );
9518 +
9519 + if ( 0 !== count( $ul_matches[0] ) || 0 !== count( $ol_matches[0] ) ) {
9520 +
9521 + if ( 0 !== count( $ol_matches[0] ) ) {
9522 + $listtype = 'ol';
9523 + $list_item_pattern = $ol_pattern;
9524 + } else {
9525 + $listtype = 'ul';
9526 + $list_item_pattern = $ul_pattern;
9527 + }
9528 + $html .= '<' . $listtype . $itemprop . '>';
9529 + $html .= preg_replace( $list_item_pattern, $list_item_replacement, $content );
9530 + $html .= '</' . $listtype . '>';
9531 +
9532 + // Strip out any empty <p> tags and stray </p> tags, because those are just silly.
9533 + $empty_p_pattern = '/(<p>)*\s*<\/p>/mi';
9534 + $html = preg_replace( $empty_p_pattern, '', $html );
9535 + } else {
9536 + $html .= do_shortcode( $content );
9537 + }
9538 + } else {
9539 + $html .= do_shortcode( $content );
9540 + }
9541 +
9542 + // Return our formatted content.
9543 + return $html;
9544 + }
9545 +
9546 + /**
9547 + * Our [recipe-directions] shortcode.
9548 + * Outputs notes, styled in a div.
9549 + *
9550 + * @return string HTML for recipe notes shortcode.
9551 + */
9552 + static function recipe_directions_shortcode( $atts, $content = '' ) {
9553 + $atts = shortcode_atts( array(
9554 + 'title' => esc_html_x( 'Directions', 'recipe', 'jetpack' ), //string
9555 + ), $atts, 'recipe-directions' );
9556 +
9557 + $html = '<div class="jetpack-recipe-directions">';
9558 +
9559 + // Print a title unless the user has specified to exclude it.
9560 + if ( 'false' !== $atts['title'] ) {
9561 + $html .= '<h4 class="jetpack-recipe-directions-title">' . esc_html( $atts['title'] ) . '</h4>';
9562 + }
9563 +
9564 + // Format content using list functionality.
9565 + $html .= self::output_list_content( $content, 'directions' );
9566 +
9567 + $html .= '</div>';
9568 +
9569 + // Sanitize html.
9570 + $html = wp_kses_post( $html );
9571 +
9572 + // Return the HTML block.
9573 + return $html;
9574 + }
9575 +
9576 + /**
9577 + * Use $themecolors array to style the Recipes shortcode
9578 + *
9579 + * @print style block
9580 + * @return string $style
9581 + */
9582 + function themecolor_styles() {
9583 + global $themecolors;
9584 + $style = '';
9585 +
9586 + if ( isset( $themecolors ) ) {
9587 + $style .= '.jetpack-recipe { border-color: #' . esc_attr( $themecolors['border'] ) . '; }';
9588 + $style .= '.jetpack-recipe-title { border-bottom-color: #' . esc_attr( $themecolors['link'] ) . '; }';
9589 + }
9590 +
9591 + return $style;
9592 + }
9593 +
9594 }
9595
9596 new Jetpack_Recipes();
9597
9598 diff --git a/plugins/jetpack/modules/shortcodes/twitter-timeline.php b/plugins/jetpack/modules/shortcodes/twitter-timeline.php
9599 index adde036..bce9d2a 100644
9600 --- a/plugins/jetpack/modules/shortcodes/twitter-timeline.php
9601 +++ b/plugins/jetpack/modules/shortcodes/twitter-timeline.php
9602 @@ -1,29 +1,42 @@
9603 <?php
9604 add_shortcode( 'twitter-timeline', 'twitter_timeline_shortcode' );
9605
9606 -function twitter_timeline_shortcode( $attr ) {
9607 -
9608 +function twitter_timeline_shortcode( $atts ) {
9609 $default_atts = array(
9610 'username' => '',
9611 'id' => '',
9612 - 'height' => '282',
9613 'width' => '450',
9614 + 'height' => '282',
9615 );
9616
9617 - $attr = shortcode_atts( $default_atts, $attr, 'twitter-timeline' );
9618 + $atts = shortcode_atts( $default_atts, $atts, 'twitter-timeline' );
9619
9620 - $attr['username'] = preg_replace( '/[^A-Za-z0-9_]+/', '', $attr['username'] );
9621 + $atts['username'] = preg_replace( '/[^A-Za-z0-9_]+/', '', $atts['username'] );
9622
9623 - if ( empty( $attr['username'] ) ) {
9624 - return '<!-- ' . __( 'Invalid Twitter Timeline username', 'jetpack' ) . ' -->';
9625 + if ( empty( $atts['username'] ) && ! is_numeric( $atts['id'] ) ) {
9626 + return '<!-- ' . __( 'Must specify Twitter Timeline id or username.', 'jetpack' ) . ' -->';
9627 }
9628
9629 - if ( ! is_numeric( $attr['id'] ) ) {
9630 - return '<!-- ' . __( 'Invalid Twitter Timeline id', 'jetpack' ) . ' -->';
9631 + $output = '<a class="twitter-timeline"';
9632 +
9633 + if ( is_numeric( $atts['width'] ) ) {
9634 + $output .= ' data-width="' . esc_attr( $atts['width'] ) . '"';
9635 + }
9636 + if ( is_numeric( $atts['height'] ) ) {
9637 + $output .= ' data-height="' . esc_attr( $atts['height'] ) . '"';
9638 }
9639 + if ( is_numeric( $atts['id'] ) ) {
9640 + $output .= ' data-widget-id="' . esc_attr( $atts['id'] ) . '"';
9641 + }
9642 + if ( ! empty( $atts['username'] ) ) {
9643 + $output .= ' href="' . esc_url( 'https://twitter.com/' . $atts['username'] ) . '"';
9644 + }
9645 +
9646 + $output .= '>';
9647 +
9648 + $output .= sprintf( __( 'Tweets by @%s', 'jetpack' ), $atts['username'] );
9649
9650 - $tweets_by = sprintf( __( 'Tweets by @%s', 'jetpack' ), $attr['username'] );
9651 - $output = '<a class="twitter-timeline" width="' . esc_attr( $attr['width'] ) . '" height="' . esc_attr( $attr['height'] ) . '" href="' . esc_url( 'https://twitter.com/' . $attr['username'] ) . '/" data-widget-id="' . esc_attr( $attr['id'] ) . '">' . esc_html( $tweets_by ) . '</a>';
9652 + $output .= '</a>';
9653
9654 wp_enqueue_script( 'jetpack-twitter-timeline' );
9655
9656
9657 diff --git a/plugins/jetpack/modules/shortcodes/untappd-menu.php b/plugins/jetpack/modules/shortcodes/untappd-menu.php
9658 new file mode 100644
9659 index 0000000..39a0e3c
9660 --- /dev/null
9661 +++ b/plugins/jetpack/modules/shortcodes/untappd-menu.php
9662 @@ -0,0 +1,65 @@
9663 +<?php
9664 +/**
9665 + * Untappd Shortcodes
9666 + * @author kraftbj
9667 + *
9668 + * [untappd-menu location="123" theme="123"]
9669 + * @since 4.1.0
9670 + * @param location int Location ID for the Untappd venue. Required.
9671 + * @param theme int Theme ID for the Untappd menu. Required.
9672 + */
9673 +
9674 +class Jetpack_Untappd {
9675 +
9676 + function __construct() {
9677 + add_action( 'init', array( $this, 'action_init' ) );
9678 + }
9679 +
9680 + function action_init() {
9681 + add_shortcode( 'untappd-menu', array( $this, 'menu_shortcode' ) );
9682 + }
9683 +
9684 + /**
9685 + * [untappd-menu] shortcode.
9686 + *
9687 + */
9688 + static function menu_shortcode( $atts, $content = '' ) {
9689 + // Let's bail if we don't have location or theme.
9690 + if ( ! isset( $atts['location'] ) || ! isset( $atts['theme'] ) ) {
9691 + if ( current_user_can( 'edit_posts') ){
9692 + return __( 'No location or theme ID provided in the untappd-menu shortcode.', 'jetpack' );
9693 + }
9694 + return;
9695 + }
9696 +
9697 + // Let's apply some defaults.
9698 + $atts = shortcode_atts( array(
9699 + 'location' => '',
9700 + 'theme' => '',
9701 + ), $atts, 'untappd-menu' );
9702 +
9703 + // We're going to clean the user input.
9704 + $atts = array_map( 'absint', $atts );
9705 +
9706 + if ( $atts['location'] < 1 || $atts['theme'] < 1 ){
9707 + return;
9708 + }
9709 +
9710 + static $untappd_menu = 1;
9711 +
9712 + $html = '<div id="menu-container-untappd-' . $untappd_menu . '" class="untappd-menu"></div>';
9713 + $html .= '<script type="text/javascript">' . PHP_EOL;
9714 + $html .= '!function(e,n){var t=document.createElement("script"),a=document.getElementsByTagName("script")[0];' . PHP_EOL;
9715 + $html .= 't.async=1,a.parentNode.insertBefore(t,a),t.onload=t.onreadystatechange=function(e,a){' . PHP_EOL;
9716 + $html .= '(a||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t=void 0,a||n&&n())},' . PHP_EOL;
9717 + $html .= 't.src=e}("https://embed-menu-preloader.untappdapi.com/embed-menu-preloader.min.js",function(){' . PHP_EOL;
9718 + $html .= 'PreloadEmbedMenu( "menu-container-untappd-' . $untappd_menu . '",' . $atts["location"] . ',' . $atts["theme"] . ' )});' . PHP_EOL;
9719 + $html .= '</script>';
9720 +
9721 + $untappd_menu++;
9722 +
9723 + return $html;
9724 + }
9725 +}
9726 +
9727 +new Jetpack_Untappd();
9728 \ No newline at end of file
9729
9730 diff --git a/plugins/jetpack/modules/shortcodes/videopress.php b/plugins/jetpack/modules/shortcodes/videopress.php
9731 index f876f1d..1de5209 100644
9732 --- a/plugins/jetpack/modules/shortcodes/videopress.php
9733 +++ b/plugins/jetpack/modules/shortcodes/videopress.php
9734 @@ -12,11 +12,6 @@ if ( ! Jetpack::is_module_active( 'videopress' ) ) {
9735 '//v0.wordpress.com',
9736 ) );
9737
9738 - /**
9739 - * We won't have any videos less than sixty pixels wide. That would be silly.
9740 - */
9741 - define( 'VIDEOPRESS_MIN_WIDTH', 60 );
9742 -
9743 include_once JETPACK__PLUGIN_DIR . 'modules/videopress/utility-functions.php';
9744 include_once JETPACK__PLUGIN_DIR . 'modules/videopress/shortcode.php';
9745
9746
9747 diff --git a/plugins/jetpack/modules/sitemaps/sitemaps.php b/plugins/jetpack/modules/sitemaps/sitemaps.php
9748 index b316ef4..a56b55a 100644
9749 --- a/plugins/jetpack/modules/sitemaps/sitemaps.php
9750 +++ b/plugins/jetpack/modules/sitemaps/sitemaps.php
9751 @@ -169,8 +169,15 @@ function jetpack_sitemap_namespaces() {
9752 * @return string
9753 */
9754 function jetpack_sitemap_initstr( $charset ) {
9755 + global $wp_rewrite;
9756 // URL to XSLT
9757 - $xsl = get_option( 'permalink_structure' ) ? home_url( '/sitemap.xsl' ) : home_url( '/?jetpack-sitemap-xsl=true' );
9758 + if ( $wp_rewrite->using_index_permalinks() ) {
9759 + $xsl = home_url( '/index.php/sitemap.xsl' );
9760 + } else if ( $wp_rewrite->using_permalinks() ) {
9761 + $xsl = home_url( '/sitemap.xsl' );
9762 + } else {
9763 + $xsl = home_url( '/?jetpack-sitemap-xsl=true' );
9764 + }
9765
9766 $initstr = '<?xml version="1.0" encoding="' . $charset . '"?>' . "\n";
9767 $initstr .= '<?xml-stylesheet type="text/xsl" href="' . esc_url( $xsl ) . '"?>' . "\n";
9768 @@ -241,7 +248,7 @@ function jetpack_print_news_sitemap_xsl() {
9769 * @link http://sitemaps.org/protocol.php Sitemaps.org protocol.
9770 */
9771 function jetpack_print_sitemap() {
9772 - global $wpdb;
9773 + global $wpdb, $post;
9774
9775 $xml = get_transient( 'jetpack_sitemap' );
9776
9777 @@ -291,6 +298,7 @@ function jetpack_print_sitemap() {
9778 unset( $initstr );
9779 $latest_mod = '';
9780 foreach ( $posts as $post ) {
9781 + setup_postdata( $post );
9782
9783 /**
9784 * Filter condition to allow skipping specific posts in sitemap.
9785 @@ -397,6 +405,7 @@ function jetpack_print_sitemap() {
9786 jetpack_sitemap_array_to_simplexml( array( 'url' => $url_node ), $tree );
9787 unset( $url );
9788 }
9789 + wp_reset_postdata();
9790 $blog_home = array(
9791 'loc' => esc_url( get_option( 'home' ) ),
9792 'changefreq' => 'daily',
9793 @@ -459,7 +468,7 @@ function jetpack_print_news_sitemap() {
9794 die();
9795 }
9796
9797 - global $wpdb;
9798 + global $wpdb, $post;
9799
9800 /**
9801 * Filter post types to be included in news sitemap.
9802 @@ -532,6 +541,7 @@ function jetpack_print_news_sitemap() {
9803 <?php
9804 $posts = $wpdb->get_results( $query );
9805 foreach ( $posts as $post ):
9806 + setup_postdata( $post );
9807
9808 /**
9809 * Filter condition to allow skipping specific posts in news sitemap.
9810 @@ -584,6 +594,7 @@ function jetpack_print_news_sitemap() {
9811
9812 jetpack_print_sitemap_item( $url );
9813 endforeach;
9814 + wp_reset_postdata();
9815 ?>
9816 </urlset>
9817 <?php
9818 @@ -605,11 +616,16 @@ function jetpack_print_news_sitemap() {
9819 * @return string Sitemap URL.
9820 */
9821 function jetpack_sitemap_uri() {
9822 - if ( get_option( 'permalink_structure' ) ) {
9823 + global $wp_rewrite;
9824 +
9825 + if ( $wp_rewrite->using_index_permalinks() ) {
9826 + $sitemap_url = home_url( '/index.php/sitemap.xml' );
9827 + } else if ( $wp_rewrite->using_permalinks() ) {
9828 $sitemap_url = home_url( '/sitemap.xml' );
9829 } else {
9830 $sitemap_url = home_url( '/?jetpack-sitemap=true' );
9831 }
9832 +
9833 /**
9834 * Filter sitemap URL relative to home URL.
9835 *
9836 @@ -628,11 +644,16 @@ function jetpack_sitemap_uri() {
9837 * @module sitemaps
9838 */
9839 function jetpack_news_sitemap_uri() {
9840 - if ( get_option( 'permalink_structure' ) ) {
9841 + global $wp_rewrite;
9842 +
9843 + if ( $wp_rewrite->using_index_permalinks() ) {
9844 + $news_sitemap_url = home_url( '/index.php/news-sitemap.xml' );
9845 + } else if ( $wp_rewrite->using_permalinks() ) {
9846 $news_sitemap_url = home_url( '/news-sitemap.xml' );
9847 } else {
9848 $news_sitemap_url = home_url( '/?jetpack-news-sitemap=true' );
9849 }
9850 +
9851 /**
9852 * Filter news sitemap URL relative to home URL.
9853 *
9854 @@ -758,4 +779,4 @@ function jetpack_sitemap_initialize() {
9855 }
9856
9857 // Initialize sitemaps once themes can filter the initialization.
9858 -add_action( 'after_setup_theme', 'jetpack_sitemap_initialize' );
9859 \ No newline at end of file
9860 +add_action( 'after_setup_theme', 'jetpack_sitemap_initialize' );
9861
9862 diff --git a/plugins/jetpack/modules/sso.php b/plugins/jetpack/modules/sso.php
9863 index d29380b..81b8f88 100644
9864 --- a/plugins/jetpack/modules/sso.php
9865 +++ b/plugins/jetpack/modules/sso.php
9866 @@ -1,4 +1,5 @@
9867 <?php
9868 +require_once( JETPACK__PLUGIN_DIR . 'modules/sso/class.jetpack-sso-helpers.php' );
9869
9870 /**
9871 * Module Name: Single Sign On
9872 @@ -21,32 +22,20 @@ class Jetpack_SSO {
9873
9874 self::$instance = $this;
9875
9876 - add_action( 'admin_init', array( $this, 'admin_init' ) );
9877 - add_action( 'admin_init', array( $this, 'register_settings' ) );
9878 - add_action( 'login_init', array( $this, 'login_init' ) );
9879 - add_action( 'delete_user', array( $this, 'delete_connection_for_user' ) );
9880 + add_action( 'admin_init', array( $this, 'maybe_authorize_user_after_sso' ), 1 );
9881 + add_action( 'admin_init', array( $this, 'register_settings' ) );
9882 + add_action( 'login_init', array( $this, 'login_init' ) );
9883 + add_action( 'delete_user', array( $this, 'delete_connection_for_user' ) );
9884 add_filter( 'jetpack_xmlrpc_methods', array( $this, 'xmlrpc_methods' ) );
9885 - add_action( 'init', array( $this, 'maybe_logout_user' ), 5 );
9886 + add_action( 'init', array( $this, 'maybe_logout_user' ), 5 );
9887 add_action( 'jetpack_modules_loaded', array( $this, 'module_configure_button' ) );
9888 + add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
9889 + add_action( 'login_form_logout', array( $this, 'store_wpcom_profile_cookies_on_logout' ) );
9890 + add_action( 'wp_login', array( 'Jetpack_SSO', 'clear_wpcom_profile_cookies' ) );
9891 + add_action( 'jetpack_unlinked_user', array( $this, 'delete_connection_for_user') );
9892
9893 // Adding this action so that on login_init, the action won't be sanitized out of the $action global.
9894 add_action( 'login_form_jetpack-sso', '__return_true' );
9895 -
9896 - if (
9897 - $this->should_hide_login_form() &&
9898 - /**
9899 - * Filter the display of the disclaimer message appearing when default WordPress login form is disabled.
9900 - *
9901 - * @module sso
9902 - *
9903 - * @since 2.8.0
9904 - *
9905 - * @param bool true Should the disclaimer be displayed. Default to true.
9906 - */
9907 - apply_filters( 'jetpack_sso_display_disclaimer', true )
9908 - ) {
9909 - add_action( 'login_message', array( $this, 'msg_login_by_jetpack' ) );
9910 - }
9911 }
9912
9913 /**
9914 @@ -56,8 +45,9 @@ class Jetpack_SSO {
9915 * @return Jetpack_SSO
9916 **/
9917 public static function get_instance() {
9918 - if( !is_null( self::$instance ) )
9919 + if ( ! is_null( self::$instance ) ) {
9920 return self::$instance;
9921 + }
9922
9923 return self::$instance = new Jetpack_SSO;
9924 }
9925 @@ -72,10 +62,7 @@ class Jetpack_SSO {
9926 Jetpack::module_configuration_screen( __FILE__, array( __CLASS__, 'module_configuration_screen' ) );
9927 }
9928
9929 - public static function module_configuration_load() {
9930 - // wp_safe_redirect( admin_url( 'options-general.php#configure-sso' ) );
9931 - // exit;
9932 - }
9933 + public static function module_configuration_load() {}
9934
9935 public static function module_configuration_head() {}
9936
9937 @@ -89,6 +76,28 @@ class Jetpack_SSO {
9938 <?php
9939 }
9940
9941 +
9942 + /**
9943 + * When the default login form is hidden, this method is called on the 'authenticate' filter with a priority of 30.
9944 + * This method disables the ability to submit the default login form.
9945 + *
9946 + * @param $user
9947 + *
9948 + * @return WP_Error
9949 + */
9950 + public function disable_default_login_form( $user ) {
9951 + if ( is_wp_error( $user ) ) {
9952 + return $user;
9953 + }
9954 +
9955 + /**
9956 + * Since we're returning an error that will be shown as a red notice, let's remove the
9957 + * informational "blue" notice.
9958 + */
9959 + remove_filter( 'login_message', array( $this, 'msg_login_by_jetpack' ) );
9960 + return new WP_Error( 'jetpack_sso_required', $this->get_sso_required_message() );
9961 + }
9962 +
9963 /**
9964 * If jetpack_force_logout == 1 in current user meta the user will be forced
9965 * to logout and reauthenticate with the site.
9966 @@ -96,11 +105,12 @@ class Jetpack_SSO {
9967 public function maybe_logout_user() {
9968 global $current_user;
9969
9970 - if( 1 == $current_user->jetpack_force_logout ) {
9971 + if ( 1 == $current_user->jetpack_force_logout ) {
9972 delete_user_meta( $current_user->ID, 'jetpack_force_logout' );
9973 self::delete_connection_for_user( $current_user->ID );
9974 wp_logout();
9975 wp_safe_redirect( wp_login_url() );
9976 + exit;
9977 }
9978 }
9979
9980 @@ -124,14 +134,13 @@ class Jetpack_SSO {
9981 $user_query = new WP_User_Query(
9982 array(
9983 'meta_key' => 'wpcom_user_id',
9984 - 'meta_value' => $user_id
9985 + 'meta_value' => $user_id,
9986 )
9987 );
9988 $user = $user_query->get_results();
9989 $user = $user[0];
9990
9991 -
9992 - if( $user instanceof WP_User ) {
9993 + if ( $user instanceof WP_User ) {
9994 $user = wp_set_current_user( $user->ID );
9995 update_user_meta( $user->ID, 'jetpack_force_logout', '1' );
9996 self::delete_connection_for_user( $user->ID );
9997 @@ -141,6 +150,70 @@ class Jetpack_SSO {
9998 }
9999
10000 /**
10001 + * Enqueues scripts and styles necessary for SSO login.
10002 + */
10003 + public function login_enqueue_scripts() {
10004 + global $action;
10005 +
10006 + if ( ! in_array( $action, array( 'jetpack-sso', 'login' ) ) ) {
10007 + return;
10008 + }
10009 +
10010 + if ( is_rtl() ) {
10011 + wp_enqueue_style( 'jetpack-sso-login', plugins_url( 'modules/sso/jetpack-sso-login-rtl.css', JETPACK__PLUGIN_FILE ), array( 'login', 'genericons' ), JETPACK__VERSION );
10012 + } else {
10013 + wp_enqueue_style( 'jetpack-sso-login', plugins_url( 'modules/sso/jetpack-sso-login.css', JETPACK__PLUGIN_FILE ), array( 'login', 'genericons' ), JETPACK__VERSION );
10014 + }
10015 +
10016 + wp_enqueue_script( 'jetpack-sso-login', plugins_url( 'modules/sso/jetpack-sso-login.js', JETPACK__PLUGIN_FILE ), array( 'jquery' ), JETPACK__VERSION );
10017 + }
10018 +
10019 + /**
10020 + * Enqueue styles neceessary for Jetpack SSO on users' profiles
10021 + */
10022 + public function admin_enqueue_scripts() {
10023 + $screen = get_current_screen();
10024 +
10025 + if ( empty( $screen ) || ! in_array( $screen->base, array( 'edit-user', 'profile' ) ) ) {
10026 + return;
10027 + }
10028 +
10029 + wp_enqueue_style( 'jetpack-sso-profile', plugins_url( 'modules/sso/jetpack-sso-profile.css', JETPACK__PLUGIN_FILE ), array( 'genericons' ), JETPACK__VERSION );
10030 + }
10031 +
10032 + /**
10033 + * Adds Jetpack SSO classes to login body
10034 + *
10035 + * @param array $classes Array of classes to add to body tag
10036 + * @return array Array of classes to add to body tag
10037 + */
10038 + public function login_body_class( $classes ) {
10039 + global $action;
10040 +
10041 + if ( ! in_array( $action, array( 'jetpack-sso', 'login' ) ) ) {
10042 + return $classes;
10043 + }
10044 +
10045 + // Always add the jetpack-sso class so that we can add SSO specific styling even when the SSO form isn't being displayed.
10046 + $classes[] = 'jetpack-sso';
10047 +
10048 + /**
10049 + * Should we show the SSO login form?
10050 + *
10051 + * $_GET['jetpack-sso-default-form'] is used to provide a fallback in case JavaScript is not enabled.
10052 + *
10053 + * The default_to_sso_login() method allows us to dynamically decide whether we show the SSO login form or not.
10054 + * The SSO module uses the method to display the default login form if we can not find a user to log in via SSO.
10055 + * But, the method could be filtered by a site admin to always show the default login form if that is preferred.
10056 + */
10057 + if ( empty( $_GET['jetpack-sso-show-default-form'] ) && Jetpack_SSO_Helpers::show_sso_login() ) {
10058 + $classes[] = 'jetpack-sso-form-display';
10059 + }
10060 +
10061 + return $classes;
10062 + }
10063 +
10064 + /**
10065 * Adds settings fields to Settings > General > Single Sign On that allows users to
10066 * turn off the login form on wp-login.php
10067 *
10068 @@ -157,26 +230,6 @@ class Jetpack_SSO {
10069
10070 /*
10071 * Settings > General > Single Sign On
10072 - * Checkbox for Remove default login form
10073 - */
10074 - /* Hide in 2.9
10075 - register_setting(
10076 - 'general',
10077 - 'jetpack_sso_remove_login_form',
10078 - array( $this, 'validate_settings_remove_login_form_checkbox' )
10079 - );
10080 -
10081 - add_settings_field(
10082 - 'jetpack_sso_remove_login_form',
10083 - __( 'Remove default login form?' , 'jetpack' ),
10084 - array( $this, 'render_remove_login_form_checkbox' ),
10085 - 'general',
10086 - 'jetpack_sso_settings'
10087 - );
10088 - */
10089 -
10090 - /*
10091 - * Settings > General > Single Sign On
10092 * Require two step authentication
10093 */
10094 register_setting(
10095 @@ -193,7 +246,6 @@ class Jetpack_SSO {
10096 'jetpack_sso_settings'
10097 );
10098
10099 -
10100 /*
10101 * Settings > General > Single Sign On
10102 */
10103 @@ -219,13 +271,17 @@ class Jetpack_SSO {
10104 * @since 2.7
10105 **/
10106 public function render_require_two_step() {
10107 - /** This filter is documented in modules/sso.php */
10108 - $require_two_step = 1 == apply_filters( 'jetpack_sso_require_two_step', get_option( 'jetpack_sso_require_two_step' ) );
10109 - $disabled = $require_two_step ? ' disabled="disabled"' : '';
10110 - echo '<label>';
10111 - echo '<input type="checkbox" name="jetpack_sso_require_two_step" ' . checked( $require_two_step, true, false ) . "$disabled>";
10112 - esc_html_e( 'Require Two-Step Authentication' , 'jetpack' );
10113 - echo '</label>';
10114 + ?>
10115 + <label>
10116 + <input
10117 + type="checkbox"
10118 + name="jetpack_sso_require_two_step"
10119 + <?php checked( Jetpack_SSO_Helpers::is_two_step_required() ); ?>
10120 + <?php disabled( Jetpack_SSO_Helpers::is_require_two_step_checkbox_disabled() ); ?>
10121 + >
10122 + <?php esc_html_e( 'Require Two-Step Authentication' , 'jetpack' ); ?>
10123 + </label>
10124 + <?php
10125 }
10126
10127 /**
10128 @@ -245,12 +301,17 @@ class Jetpack_SSO {
10129 * @since 2.9
10130 **/
10131 public function render_match_by_email() {
10132 - $match_by_email = 1 == $this->match_by_email();
10133 - $disabled = $match_by_email ? ' disabled="disabled"' : '';
10134 - echo '<label>';
10135 - echo '<input type="checkbox" name="jetpack_sso_match_by_email"' . checked( $match_by_email, true, false ) . "$disabled>";
10136 - esc_html_e( 'Match by Email', 'jetpack' );
10137 - echo '</label>';
10138 + ?>
10139 + <label>
10140 + <input
10141 + type="checkbox"
10142 + name="jetpack_sso_match_by_email"
10143 + <?php checked( Jetpack_SSO_Helpers::match_by_email() ); ?>
10144 + <?php disabled( Jetpack_SSO_Helpers::is_match_by_email_checkbox_disabled() ); ?>
10145 + >
10146 + <?php esc_html_e( 'Match by Email', 'jetpack' ); ?>
10147 + </label>
10148 + <?php
10149 }
10150
10151 /**
10152 @@ -264,46 +325,6 @@ class Jetpack_SSO {
10153 }
10154
10155 /**
10156 - * Builds the display for the checkbox allowing users to remove the default
10157 - * WordPress login form from wp-login.php. Displays in Settings > General
10158 - *
10159 - * @since 2.7
10160 - **/
10161 - public function render_remove_login_form_checkbox() {
10162 - if( $this->is_user_connected( get_current_user_id() ) ) {
10163 - echo '<a name="configure-sso"></a>';
10164 - echo '<input type="checkbox" name="jetpack_sso_remove_login_form[remove_login_form]" ' . checked( 1 == get_option( 'jetpack_sso_remove_login_form' ), true, false ) . '>';
10165 - echo '<p class="description">Removes default login form and disallows login via POST</p>';
10166 - } else {
10167 - echo 'Your account must be connected to WordPress.com before disabling the login form.';
10168 - echo '<br/>' . $this->button();
10169 - }
10170 - }
10171 -
10172 - /**
10173 - * Validate settings input from Settings > General
10174 - *
10175 - * @since 2.7
10176 - * @return boolean
10177 - **/
10178 - public function validate_settings_remove_login_form_checkbox( $input ) {
10179 - return ( isset( $input['remove_login_form'] ) )? 1: 0;
10180 - }
10181 -
10182 - /**
10183 - * Removes 'Lost your password?' text from the login form if user
10184 - * does not want to show the login form
10185 - *
10186 - * @since 2.7
10187 - * @return string
10188 - **/
10189 - public function remove_lost_password_text( $text ) {
10190 - if( 'Lost your password?' == $text )
10191 - $text = '';
10192 - return $text;
10193 - }
10194 -
10195 - /**
10196 * Checks to determine if the user wants to login on wp-login
10197 *
10198 * This function mostly exists to cover the exceptions to login
10199 @@ -318,42 +339,51 @@ class Jetpack_SSO {
10200 $wants_to_login = false;
10201
10202 // Cover default WordPress behavior
10203 - $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
10204 + $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'login';
10205
10206 // And now the exceptions
10207 $action = isset( $_GET['loggedout'] ) ? 'loggedout' : $action;
10208
10209 - if( 'login' == $action ) {
10210 + if ( 'login' == $action ) {
10211 $wants_to_login = true;
10212 }
10213
10214 return $wants_to_login;
10215 }
10216
10217 - private function bypass_login_forward_wpcom() {
10218 - /**
10219 - * Redirect the site's log in form to WordPress.com's log in form.
10220 - *
10221 - * @module sso
10222 - *
10223 - * @since 3.1.0
10224 - *
10225 - * @param bool false Should the site's log in form be automatically forwarded to WordPress.com's log in form.
10226 - */
10227 - return apply_filters( 'jetpack_sso_bypass_login_forward_wpcom', false );
10228 - }
10229 -
10230 function login_init() {
10231 global $action;
10232
10233 + if ( Jetpack_SSO_Helpers::should_hide_login_form() ) {
10234 + /**
10235 + * Since the default authenticate filters fire at priority 20 for checking username and password,
10236 + * let's fire at priority 30. wp_authenticate_spam_check is fired at priority 99, but since we return a
10237 + * WP_Error in disable_default_login_form, then we won't trigger spam processing logic.
10238 + */
10239 + add_filter( 'authenticate', array( $this, 'disable_default_login_form' ), 30 );
10240 +
10241 + /**
10242 + * Filter the display of the disclaimer message appearing when default WordPress login form is disabled.
10243 + *
10244 + * @module sso
10245 + *
10246 + * @since 2.8.0
10247 + *
10248 + * @param bool true Should the disclaimer be displayed. Default to true.
10249 + */
10250 + $display_sso_disclaimer = apply_filters( 'jetpack_sso_display_disclaimer', true );
10251 + if ( $display_sso_disclaimer ) {
10252 + add_filter( 'login_message', array( $this, 'msg_login_by_jetpack' ) );
10253 + }
10254 + }
10255 +
10256 /**
10257 - * If the user is attempting to logout AND the auto-forward to WordPress.com
10258 - * login is set then we need to ensure we do not auto-forward the user and get
10259 - * them stuck in an infinite logout loop.
10260 - */
10261 - if( isset( $_GET['loggedout'] ) && $this->bypass_login_forward_wpcom() ) {
10262 - add_filter( 'jetpack_remove_login_form', '__return_true' );
10263 - add_filter( 'gettext', array( $this, 'remove_lost_password_text' ) );
10264 + * If the user is attempting to logout AND the auto-forward to WordPress.com
10265 + * login is set then we need to ensure we do not auto-forward the user and get
10266 + * them stuck in an infinite logout loop.
10267 + */
10268 + if ( isset( $_GET['loggedout'] ) && Jetpack_SSO_Helpers::bypass_login_forward_wpcom() ) {
10269 + add_filter( 'jetpack_remove_login_form', '__return_true' );
10270 }
10271
10272 /**
10273 @@ -363,49 +393,59 @@ class Jetpack_SSO {
10274 */
10275 if (
10276 $this->wants_to_login()
10277 - && $this->bypass_login_forward_wpcom()
10278 + && Jetpack_SSO_Helpers::bypass_login_forward_wpcom()
10279 ) {
10280 add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
10281 $this->maybe_save_cookie_redirect();
10282 - wp_safe_redirect( $this->build_sso_url() );
10283 + $reauth = ! empty( $_GET['force_reauth'] );
10284 + $sso_url = $this->get_sso_url_or_die( $reauth );
10285 + JetpackTracking::record_user_event( 'sso_login_redirect_bypass_success' );
10286 + wp_safe_redirect( $sso_url );
10287 + exit;
10288 }
10289
10290 if ( 'login' === $action ) {
10291 - wp_enqueue_script( 'jquery' );
10292 - wp_enqueue_style( 'genericons' );
10293 - add_action( 'login_footer', array( $this, 'login_form' ) );
10294 - add_action( 'login_footer', array( $this, 'login_footer' ) );
10295 -/*
10296 - if ( get_option( 'jetpack_sso_remove_login_form' ) ) {
10297 - // Check to see if the user is attempting to login via the default login form.
10298 - // If so we need to deny it and forward elsewhere.
10299 - if( isset( $_REQUEST['wp-submit'] ) && 'Log In' == $_REQUEST['wp-submit'] ) {
10300 - wp_die( 'Login not permitted by this method. ');
10301 - }
10302 - add_filter( 'gettext', array( $this, 'remove_lost_password_text' ) );
10303 - }
10304 -*/
10305 + $this->display_sso_login_form();
10306 } elseif ( 'jetpack-sso' === $action ) {
10307 if ( isset( $_GET['result'], $_GET['user_id'], $_GET['sso_nonce'] ) && 'success' == $_GET['result'] ) {
10308 $this->handle_login();
10309 - wp_enqueue_script( 'jquery' );
10310 - wp_enqueue_style( 'genericons' );
10311 - add_action( 'login_footer', array( $this, 'login_form' ) );
10312 - add_action( 'login_footer', array( $this, 'login_footer' ) );
10313 + $this->display_sso_login_form();
10314 } else {
10315 if ( Jetpack::check_identity_crisis() ) {
10316 + JetpackTracking::record_user_event( 'sso_login_redirect_failed', array(
10317 + 'error_message' => 'identity_crisis'
10318 + ) );
10319 wp_die( __( "Error: This site's Jetpack connection is currently experiencing problems.", 'jetpack' ) );
10320 } else {
10321 $this->maybe_save_cookie_redirect();
10322 // Is it wiser to just use wp_redirect than do this runaround to wp_safe_redirect?
10323 add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
10324 - wp_safe_redirect( $this->build_sso_url() );
10325 + $reauth = ! empty( $_GET['force_reauth'] );
10326 + $sso_url = $this->get_sso_url_or_die( $reauth );
10327 + JetpackTracking::record_user_event( 'sso_login_redirect_success' );
10328 + wp_safe_redirect( $sso_url );
10329 + exit;
10330 }
10331 }
10332 }
10333 }
10334
10335 /**
10336 + * Ensures that we can get a nonce from WordPress.com via XML-RPC before setting
10337 + * up the hooks required to display the SSO form.
10338 + */
10339 + public function display_sso_login_form() {
10340 + $sso_nonce = self::request_initial_nonce();
10341 + if ( is_wp_error( $sso_nonce ) ) {
10342 + return;
10343 + }
10344 +
10345 + add_action( 'login_form', array( $this, 'login_form' ) );
10346 + add_filter( 'login_body_class', array( $this, 'login_body_class' ) );
10347 + add_action( 'login_enqueue_scripts', array( $this, 'login_enqueue_scripts' ) );
10348 + }
10349 +
10350 + /**
10351 * Conditionally save the redirect_to url as a cookie.
10352 */
10353 public static function maybe_save_cookie_redirect() {
10354 @@ -413,13 +453,13 @@ class Jetpack_SSO {
10355 return new WP_Error( 'headers_sent', __( 'Cannot deal with cookie redirects, as headers are already sent.', 'jetpack' ) );
10356 }
10357
10358 - // If we have something to redirect to
10359 if ( ! empty( $_GET['redirect_to'] ) ) {
10360 + // If we have something to redirect to
10361 $url = esc_url_raw( $_GET['redirect_to'] );
10362 setcookie( 'jetpack_sso_redirect_to', $url, time() + HOUR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, false, true );
10363 - // Otherwise, if it's already set
10364 +
10365 } elseif ( ! empty( $_COOKIE['jetpack_sso_redirect_to'] ) ) {
10366 - // Purge it.
10367 + // Otherwise, if it's already set, purge it.
10368 setcookie( 'jetpack_sso_redirect_to', ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
10369 }
10370
10371 @@ -431,95 +471,107 @@ class Jetpack_SSO {
10372 }
10373
10374 /**
10375 - * Determine if the login form should be hidden or not
10376 - *
10377 - * Method is private only because it is only used in this class so far.
10378 - * Feel free to change it later
10379 - *
10380 - * @return bool
10381 - **/
10382 - private function should_hide_login_form() {
10383 - /**
10384 - * Remove the default log in form, only leave the WordPress.com log in button.
10385 - *
10386 - * @module sso
10387 - *
10388 - * @since 3.1.0
10389 - *
10390 - * @param bool get_option( 'jetpack_sso_remove_login_form', false ) Should the default log in form be removed. Default to false.
10391 - */
10392 - return apply_filters( 'jetpack_remove_login_form', get_option( 'jetpack_sso_remove_login_form', false ) );
10393 - }
10394 -
10395 + * Outputs the Jetpack SSO button and description as well as the toggle link
10396 + * for switching between Jetpack SSO and default login.
10397 + */
10398 function login_form() {
10399 - $classes = '';
10400 -
10401 - if( $this->should_hide_login_form() ) {
10402 - $classes .= ' forced-sso';
10403 + $site_name = get_bloginfo( 'name' );
10404 + if ( ! $site_name ) {
10405 + $site_name = get_bloginfo( 'url' );
10406 }
10407 - echo '<div class="jetpack-sso-wrap' . $classes . '">' . $this->button() . '</div>';
10408 - }
10409
10410 - function login_footer() {
10411 - $hide_login_form = $this->should_hide_login_form();
10412 + $display_name = ! empty( $_COOKIE[ 'jetpack_sso_wpcom_name_' . COOKIEHASH ] )
10413 + ? $_COOKIE[ 'jetpack_sso_wpcom_name_' . COOKIEHASH ]
10414 + : false;
10415 + $gravatar = ! empty( $_COOKIE[ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH ] )
10416 + ? $_COOKIE[ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH ]
10417 + : false;
10418 +
10419 ?>
10420 - <style>
10421 - #loginform {
10422 - overflow: hidden;
10423 - padding-bottom: 26px;
10424 - }
10425 - .jetpack-sso-wrap {
10426 - <?php if ( $hide_login_form ) : ?>
10427 - text-align: center;
10428 - <?php else : ?>
10429 - float: right;
10430 - <?php endif; ?>
10431 - margin: 1em 0 0;
10432 - clear: right;
10433 - display: block;
10434 - }
10435 + <div id="jetpack-sso-wrap">
10436 + <?php if ( $display_name && $gravatar ) : ?>
10437 + <div id="jetpack-sso-wrap__user">
10438 + <img width="72" height="72" src="<?php echo esc_html( $gravatar ); ?>" />
10439 +
10440 + <h2>
10441 + <?php
10442 + echo wp_kses(
10443 + sprintf( __( 'Log in as <span>%s</span>', 'jetpack' ), esc_html( $display_name ) ),
10444 + array( 'span' => true )
10445 + );
10446 + ?>
10447 + </h2>
10448 + </div>
10449
10450 - <?php if ( $hide_login_form ) : ?>
10451 - .forced-sso .jetpack-sso.button {
10452 - font-size: 16px;
10453 - line-height: 27px;
10454 - height: 37px;
10455 - padding: 5px 12px 6px 47px;
10456 - }
10457 - .forced-sso .jetpack-sso.button:before {
10458 - font-size: 28px !important;
10459 - height: 37px;
10460 - padding: 5px 5px 4px;
10461 - width: 37px;
10462 - }
10463 - <?php endif; ?>
10464 - </style>
10465 - <script>
10466 - jQuery(document).ready(function($){
10467 - <?php if ( $hide_login_form ) : ?>
10468 - $( '#loginform' ).empty();
10469 <?php endif; ?>
10470 - $( '#loginform' ).append( $( '.jetpack-sso-wrap' ) );
10471
10472 - var $rememberme = $( '#rememberme' ),
10473 - $ssoButton = $( 'a.jetpack-sso.button' );
10474
10475 - $rememberme.on( 'change', function() {
10476 - var url = $ssoButton.prop( 'href' ),
10477 - isChecked = $rememberme.prop( 'checked' ) ? 1 : 0;
10478 + <div id="jetpack-sso-wrap__action">
10479 + <?php echo $this->build_sso_button( array(), 'is_primary' ); ?>
10480
10481 - if ( url.match( /&rememberme=\d/ ) ) {
10482 - url = url.replace( /&rememberme=\d/, '&rememberme=' + isChecked );
10483 - } else {
10484 - url += '&rememberme=' + isChecked;
10485 - }
10486 + <?php if ( $display_name && $gravatar ) : ?>
10487 + <a rel="nofollow" class="jetpack-sso-wrap__reauth" href="<?php echo esc_url( $this->build_sso_button_url( array( 'force_reauth' => '1' ) ) ); ?>">
10488 + <?php esc_html_e( 'Log in as a different WordPress.com user', 'jetpack' ); ?>
10489 + </a>
10490 + <?php else : ?>
10491 + <p>
10492 + <?php
10493 + echo esc_html(
10494 + sprintf(
10495 + __( 'You can now save time spent logging in by connecting your WordPress.com account to %s.', 'jetpack' ),
10496 + esc_html( $site_name )
10497 + )
10498 + );
10499 + ?>
10500 + </p>
10501 + <?php endif; ?>
10502 + </div>
10503 +
10504 + <?php if ( ! Jetpack_SSO_Helpers::should_hide_login_form() ) : ?>
10505 + <div class="jetpack-sso-or">
10506 + <span><?php esc_html_e( 'Or', 'jetpack' ); ?></span>
10507 + </div>
10508 +
10509 + <a href="<?php echo add_query_arg( 'jetpack-sso-show-default-form', '1' ); ?>" class="jetpack-sso-toggle wpcom">
10510 + <?php
10511 + esc_html_e( 'Log in with username and password', 'jetpack' )
10512 + ?>
10513 + </a>
10514 +
10515 + <a href="<?php echo add_query_arg( 'jetpack-sso-show-default-form', '0' ); ?>" class="jetpack-sso-toggle default">
10516 + <?php
10517 + esc_html_e( 'Log in with WordPress.com', 'jetpack' )
10518 + ?>
10519 + </a>
10520 + <?php endif; ?>
10521 + </div>
10522 + <?php
10523 + }
10524
10525 - $ssoButton.prop( 'href', url );
10526 - } ).change();
10527 + /**
10528 + * Clear the cookies that store the profile information for the last
10529 + * WPCOM user to connect.
10530 + */
10531 + static function clear_wpcom_profile_cookies() {
10532 + if ( isset( $_COOKIE[ 'jetpack_sso_wpcom_name_' . COOKIEHASH ] ) ) {
10533 + setcookie(
10534 + 'jetpack_sso_wpcom_name_' . COOKIEHASH,
10535 + ' ',
10536 + time() - YEAR_IN_SECONDS,
10537 + COOKIEPATH,
10538 + COOKIE_DOMAIN
10539 + );
10540 + }
10541
10542 - });
10543 - </script>
10544 - <?php
10545 + if ( isset( $_COOKIE[ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH ] ) ) {
10546 + setcookie(
10547 + 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH,
10548 + ' ',
10549 + time() - YEAR_IN_SECONDS,
10550 + COOKIEPATH,
10551 + COOKIE_DOMAIN
10552 + );
10553 + }
10554 }
10555
10556 static function delete_connection_for_user( $user_id ) {
10557 @@ -528,7 +580,7 @@ class Jetpack_SSO {
10558 }
10559 Jetpack::load_xml_rpc_client();
10560 $xml = new Jetpack_IXR_Client( array(
10561 - 'user_id' => $user_id
10562 + 'wpcom_user_id' => $user_id,
10563 ) );
10564 $xml->query( 'jetpack.sso.removeUser', $wpcom_user_id );
10565
10566 @@ -536,18 +588,23 @@ class Jetpack_SSO {
10567 return false;
10568 }
10569
10570 + // Clean up local data stored for SSO
10571 + delete_user_meta( $user_id, 'wpcom_user_id' );
10572 + delete_user_meta( $user_id, 'wpcom_user_data' );
10573 + self::clear_wpcom_profile_cookies();
10574 +
10575 return $xml->getResponse();
10576 }
10577
10578 static function request_initial_nonce() {
10579 Jetpack::load_xml_rpc_client();
10580 $xml = new Jetpack_IXR_Client( array(
10581 - 'user_id' => get_current_user_id()
10582 + 'user_id' => get_current_user_id(),
10583 ) );
10584 $xml->query( 'jetpack.sso.requestNonce' );
10585
10586 if ( $xml->isError() ) {
10587 - wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
10588 + return new WP_Error( $xml->getErrorCode(), $xml->getErrorMessage() );
10589 }
10590
10591 return $xml->getResponse();
10592 @@ -559,21 +616,29 @@ class Jetpack_SSO {
10593 function handle_login() {
10594 $wpcom_nonce = sanitize_key( $_GET['sso_nonce'] );
10595 $wpcom_user_id = (int) $_GET['user_id'];
10596 - $result = sanitize_key( $_GET['result'] );
10597
10598 Jetpack::load_xml_rpc_client();
10599 $xml = new Jetpack_IXR_Client( array(
10600 - 'user_id' => get_current_user_id()
10601 + 'user_id' => get_current_user_id(),
10602 ) );
10603 $xml->query( 'jetpack.sso.validateResult', $wpcom_nonce, $wpcom_user_id );
10604
10605 if ( $xml->isError() ) {
10606 - wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
10607 + $error_message = sanitize_text_field(
10608 + sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() )
10609 + );
10610 + JetpackTracking::record_user_event( 'sso_login_failed', array(
10611 + 'error_message' => $error_message
10612 + ) );
10613 + wp_die( $error_message );
10614 }
10615
10616 $user_data = $xml->getResponse();
10617
10618 if ( empty( $user_data ) ) {
10619 + JetpackTracking::record_user_event( 'sso_login_failed', array(
10620 + 'error_message' => 'invalid_response_data'
10621 + ) );
10622 wp_die( __( 'Error, invalid response data.', 'jetpack' ) );
10623 }
10624
10625 @@ -587,46 +652,35 @@ class Jetpack_SSO {
10626 *
10627 * @since 2.6.0
10628 *
10629 - * @param object $user_data User login information.
10630 + * @param object $user_data WordPress.com User information.
10631 */
10632 do_action( 'jetpack_sso_pre_handle_login', $user_data );
10633
10634 - /**
10635 - * Is it required to have 2-step authentication enabled on WordPress.com to use SSO?
10636 - *
10637 - * @module sso
10638 - *
10639 - * @since 2.8.0
10640 - *
10641 - * @param bool get_option( 'jetpack_sso_require_two_step' ) Does SSO require 2-step authentication?
10642 - */
10643 - $require_two_step = apply_filters( 'jetpack_sso_require_two_step', get_option( 'jetpack_sso_require_two_step' ) );
10644 - if( $require_two_step && 0 == (int) $user_data->two_step_enabled ) {
10645 + if ( Jetpack_SSO_Helpers::is_two_step_required() && 0 === (int) $user_data->two_step_enabled ) {
10646 $this->user_data = $user_data;
10647 +
10648 + JetpackTracking::record_user_event( 'sso_login_failed', array(
10649 + 'error_message' => 'error_msg_enable_two_step'
10650 + ) );
10651 +
10652 /** This filter is documented in core/src/wp-includes/pluggable.php */
10653 do_action( 'wp_login_failed', $user_data->login );
10654 - add_action( 'login_message', array( $this, 'error_msg_enable_two_step' ) );
10655 + add_filter( 'login_message', array( $this, 'error_msg_enable_two_step' ) );
10656 return;
10657 }
10658
10659 - if ( isset( $_GET['state'] ) && ( 0 < strpos( $_GET['state'], '|' ) ) ) {
10660 - list( $state, $nonce ) = explode( '|', $_GET['state'] );
10661 -
10662 - if ( wp_verify_nonce( $nonce, $state ) ) {
10663 - if ( 'sso-link-user' == $state ) {
10664 - $user = wp_get_current_user();
10665 - update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
10666 - add_filter( 'login_redirect', array( __CLASS__, 'profile_page_url' ) );
10667 - }
10668 - } else wp_nonce_ays();
10669 - }
10670 -
10671 - if ( empty( $user ) ) {
10672 - $user = $this->get_user_by_wpcom_id( $user_data->ID );
10673 + $user_found_with = '';
10674 + if ( empty( $user ) && isset( $user_data->external_user_id ) ) {
10675 + $user_found_with = 'external_user_id';
10676 + $user = get_user_by( 'id', intval( $user_data->external_user_id ) );
10677 + if ( $user ) {
10678 + update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
10679 + }
10680 }
10681
10682 // If we don't have one by wpcom_user_id, try by the email?
10683 - if ( empty( $user ) && self::match_by_email() ) {
10684 + if ( empty( $user ) && Jetpack_SSO_Helpers::match_by_email() ) {
10685 + $user_found_with = 'match_by_email';
10686 $user = get_user_by( 'email', $user_data->email );
10687 if ( $user ) {
10688 update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
10689 @@ -634,7 +688,7 @@ class Jetpack_SSO {
10690 }
10691
10692 // If we've still got nothing, create the user.
10693 - if ( empty( $user ) && ( get_option( 'users_can_register' ) || self::new_user_override() ) ) {
10694 + if ( empty( $user ) && ( get_option( 'users_can_register' ) || Jetpack_SSO_Helpers::new_user_override() ) ) {
10695 // If not matching by email we still need to verify the email does not exist
10696 // or this blows up
10697 /**
10698 @@ -642,7 +696,7 @@ class Jetpack_SSO {
10699 * been found in the first pass. If get_user_by( 'email' ) doesn't find the
10700 * user, then we know that email is unused, so it's safe to add.
10701 */
10702 - if ( self::match_by_email() || ! get_user_by( 'email', $user_data->email ) ) {
10703 + if ( Jetpack_SSO_Helpers::match_by_email() || ! get_user_by( 'email', $user_data->email ) ) {
10704 $username = $user_data->login;
10705
10706 if ( username_exists( $username ) ) {
10707 @@ -653,10 +707,17 @@ class Jetpack_SSO {
10708 while ( username_exists( $username ) ) {
10709 $username = $user_data->login . '_' . $user_data->ID . '_' . mt_rand();
10710 if ( $tries++ >= 5 ) {
10711 + JetpackTracking::record_user_event( 'sso_login_failed', array(
10712 + 'error_message' => 'could_not_create_username'
10713 + ) );
10714 wp_die( __( "Error: Couldn't create suitable username.", 'jetpack' ) );
10715 }
10716 }
10717
10718 + $user_found_with = Jetpack_SSO_Helpers::new_user_override()
10719 + ? 'user_created_new_user_override'
10720 + : 'user_created_users_can_register';
10721 +
10722 $password = wp_generate_password( 20 );
10723 $user_id = wp_create_user( $username, $password, $user_data->email );
10724 $user = get_userdata( $user_id );
10725 @@ -670,8 +731,11 @@ class Jetpack_SSO {
10726
10727 update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
10728 } else {
10729 + JetpackTracking::record_user_event( 'sso_login_failed', array(
10730 + 'error_message' => 'error_msg_email_already_exists'
10731 + ) );
10732 +
10733 $this->user_data = $user_data;
10734 - // do_action( 'wp_login_failed', $user_data->login );
10735 add_action( 'login_message', array( $this, 'error_msg_email_already_exists' ) );
10736 return;
10737 }
10738 @@ -684,13 +748,13 @@ class Jetpack_SSO {
10739 *
10740 * @since 2.6.0
10741 *
10742 - * @param array $user WordPress.com User information.
10743 - * @param object $user_data User Login information.
10744 + * @param array $user Local User information.
10745 + * @param object $user_data WordPress.com User Login information.
10746 */
10747 do_action( 'jetpack_sso_handle_login', $user, $user_data );
10748
10749 if ( $user ) {
10750 - // Cache the user's details, so we can present it back to them on their user screen.
10751 + // Cache the user's details, so we can present it back to them on their user screen
10752 update_user_meta( $user->ID, 'wpcom_user_data', $user_data );
10753
10754 $remember = false;
10755 @@ -714,7 +778,9 @@ class Jetpack_SSO {
10756 /** This filter is documented in core/src/wp-includes/user.php */
10757 do_action( 'wp_login', $user->user_login, $user );
10758
10759 - $_request_redirect_to = isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
10760 + wp_set_current_user( $user->ID );
10761 +
10762 + $_request_redirect_to = isset( $_REQUEST['redirect_to'] ) ? esc_url_raw( $_REQUEST['redirect_to'] ) : '';
10763 $redirect_to = user_can( $user, 'edit_posts' ) ? admin_url() : self::profile_page_url();
10764
10765 // If we have a saved redirect to request in a cookie
10766 @@ -725,6 +791,32 @@ class Jetpack_SSO {
10767 setcookie( 'jetpack_sso_redirect_to', ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
10768 }
10769
10770 + $is_user_connected = Jetpack::is_user_connected( $user->ID );
10771 + JetpackTracking::record_user_event( 'sso_user_logged_in', array(
10772 + 'user_found_with' => $user_found_with,
10773 + 'user_connected' => (bool) $is_user_connected,
10774 + 'user_role' => Jetpack::init()->translate_current_user_to_role()
10775 + ) );
10776 +
10777 + if ( ! $is_user_connected ) {
10778 + $calypso_env = ! empty( $_GET['calypso_env'] )
10779 + ? sanitize_key( $_GET['calypso_env'] )
10780 + : '';
10781 +
10782 + wp_safe_redirect(
10783 + add_query_arg(
10784 + array(
10785 + 'redirect_to' => $redirect_to,
10786 + 'request_redirect_to' => $_request_redirect_to,
10787 + 'calypso_env' => $calypso_env,
10788 + 'jetpack-sso-auth-redirect' => '1',
10789 + ),
10790 + admin_url()
10791 + )
10792 + );
10793 + exit;
10794 + }
10795 +
10796 wp_safe_redirect(
10797 /** This filter is documented in core/src/wp-login.php */
10798 apply_filters( 'login_redirect', $redirect_to, $_request_redirect_to, $user )
10799 @@ -732,57 +824,61 @@ class Jetpack_SSO {
10800 exit;
10801 }
10802
10803 + add_filter( 'jetpack_sso_default_to_sso_login', '__return_false' );
10804 +
10805 + JetpackTracking::record_user_event( 'sso_login_failed', array(
10806 + 'error_message' => 'cant_find_user'
10807 + ) );
10808 +
10809 $this->user_data = $user_data;
10810 /** This filter is documented in core/src/wp-includes/pluggable.php */
10811 do_action( 'wp_login_failed', $user_data->login );
10812 - add_action( 'login_message', array( $this, 'cant_find_user' ) );
10813 + add_filter( 'login_message', array( $this, 'cant_find_user' ) );
10814 }
10815
10816 static function profile_page_url() {
10817 return admin_url( 'profile.php' );
10818 }
10819
10820 - static function match_by_email() {
10821 - $match_by_email = ( 1 == get_option( 'jetpack_sso_match_by_email', true ) ) ? true: false;
10822 - $match_by_email = defined( 'WPCC_MATCH_BY_EMAIL' ) ? WPCC_MATCH_BY_EMAIL : $match_by_email;
10823 -
10824 - /**
10825 - * Link the local account to an account on WordPress.com using the same email address.
10826 - *
10827 - * @module sso
10828 - *
10829 - * @since 2.6.0
10830 - *
10831 - * @param bool $match_by_email Should we link the local account to an account on WordPress.com using the same email address. Default to false.
10832 - */
10833 - return apply_filters( 'jetpack_sso_match_by_email', $match_by_email );
10834 - }
10835 -
10836 - static function new_user_override() {
10837 - $new_user_override = defined( 'WPCC_NEW_USER_OVERRIDE' ) ? WPCC_NEW_USER_OVERRIDE : false;
10838 -
10839 - /**
10840 - * Allow users to register on your site with a WordPress.com account, even though you disallow normal registrations.
10841 - *
10842 - * @module sso
10843 - *
10844 - * @since 2.6.0
10845 - *
10846 - * @param bool $new_user_override Allow users to register on your site with a WordPress.com account. Default to false.
10847 - */
10848 - return apply_filters( 'jetpack_sso_new_user_override', $new_user_override );
10849 - }
10850 -
10851 function allowed_redirect_hosts( $hosts ) {
10852 if ( empty( $hosts ) ) {
10853 $hosts = array();
10854 }
10855 $hosts[] = 'wordpress.com';
10856 + $hosts[] = 'jetpack.wordpress.com';
10857
10858 return array_unique( $hosts );
10859 }
10860
10861 - function button( $args = array() ) {
10862 + /**
10863 + * Builds the "Login to WordPress.com" button that is displayed on the login page as well as user profile page.
10864 + *
10865 + * @param array $args An array of arguments to add to the SSO URL.
10866 + * @param boolean $is_primary Should the button have the `button-primary` class?
10867 + * @return string Returns the HTML markup for the button.
10868 + */
10869 + function build_sso_button( $args = array(), $is_primary = false ) {
10870 + $url = $this->build_sso_button_url( $args );
10871 + $classes = $is_primary
10872 + ? 'jetpack-sso button button-primary'
10873 + : 'jetpack-sso button';
10874 +
10875 + return sprintf(
10876 + '<a rel="nofollow" href="%1$s" class="%2$s"><span>%3$s %4$s</span></a>',
10877 + esc_url( $url ),
10878 + $classes,
10879 + '<span class="genericon genericon-wordpress"></span>',
10880 + esc_html__( 'Log in with WordPress.com', 'jetpack' )
10881 + );
10882 + }
10883 +
10884 + /**
10885 + * Builds a URL with `jetpack-sso` action and option args which is used to setup SSO.
10886 + *
10887 + * @param array $args An array of arguments to add to the SSO URL.
10888 + * @return string The URL used for SSO.
10889 + */
10890 + function build_sso_button_url( $args = array() ) {
10891 $defaults = array(
10892 'action' => 'jetpack-sso',
10893 );
10894 @@ -790,84 +886,107 @@ class Jetpack_SSO {
10895 $args = wp_parse_args( $args, $defaults );
10896
10897 if ( ! empty( $_GET['redirect_to'] ) ) {
10898 - $args['redirect_to'] = esc_url_raw( $_GET['redirect_to'] );
10899 + $args['redirect_to'] = urlencode( esc_url_raw( $_GET['redirect_to'] ) );
10900 }
10901
10902 - $url = add_query_arg( $args, wp_login_url() );
10903 + return add_query_arg( $args, wp_login_url() );
10904 + }
10905
10906 - $css = "<style>
10907 - .jetpack-sso.button {
10908 - position: relative;
10909 - padding-left: 37px;
10910 - }
10911 - .jetpack-sso.button:before {
10912 - display: block;
10913 - box-sizing: border-box;
10914 - padding: 7px 0 0;
10915 - text-align: center;
10916 - position: absolute;
10917 - top: -1px;
10918 - left: -1px;
10919 - border-radius: 2px 0 0 2px;
10920 - content: '\\f205';
10921 - background: #0074a2;
10922 - color: #fff;
10923 - -webkit-font-smoothing: antialiased;
10924 - width: 30px;
10925 - height: 107%;
10926 - height: calc( 100% + 2px );
10927 - font: normal 22px/1 Genericons !important;
10928 - text-shadow: none;
10929 - }
10930 - @media screen and (min-width: 783px) {
10931 - .jetpack-sso.button:before {
10932 - padding-top: 3px;
10933 - }
10934 - }
10935 - .jetpack-sso.button:hover {
10936 - border: 1px solid #aaa;
10937 - }";
10938 -
10939 - if ( version_compare( $GLOBALS['wp_version'], '3.8-alpha', '<' ) ) {
10940 - $css .= "
10941 - .jetpack-sso.button:before {
10942 - width: 25px;
10943 - font-size: 18px !important;
10944 - }
10945 - ";
10946 + /**
10947 + * Retrieves a WordPress.com SSO URL with appropriate query parameters or dies.
10948 + *
10949 + * @param boolean $reauth Should the user be forced to reauthenticate on WordPress.com?
10950 + * @param array $args Optional query parameters.
10951 + * @return string The WordPress.com SSO URL.
10952 + */
10953 + function get_sso_url_or_die( $reauth = false, $args = array() ) {
10954 + if ( empty( $reauth ) ) {
10955 + $sso_redirect = $this->build_sso_url( $args );
10956 + } else {
10957 + self::clear_wpcom_profile_cookies();
10958 + $sso_redirect = $this->build_reauth_and_sso_url( $args );
10959 }
10960
10961 - $css .= "</style>";
10962 + // If there was an error retrieving the SSO URL, then error.
10963 + if ( is_wp_error( $sso_redirect ) ) {
10964 + $error_message = sanitize_text_field(
10965 + sprintf( '%s: %s', $sso_redirect->get_error_code(), $sso_redirect->get_error_message() )
10966 + );
10967 + JetpackTracking::record_user_event( 'sso_login_redirect_failed', array(
10968 + 'error_message' => $error_message
10969 + ) );
10970 + wp_die( $error_message );
10971 + }
10972
10973 - $button = sprintf( '<a href="%1$s" class="jetpack-sso button">%2$s</a>', esc_url( $url ), esc_html__( 'Log in with WordPress.com', 'jetpack' ) );
10974 - return $button . $css;
10975 + return $sso_redirect;
10976 }
10977
10978 + /**
10979 + * Build WordPress.com SSO URL with appropriate query parameters.
10980 + *
10981 + * @param array $args Optional query parameters.
10982 + * @return string WordPress.com SSO URL
10983 + */
10984 function build_sso_url( $args = array() ) {
10985 + $sso_nonce = ! empty( $args['sso_nonce'] ) ? $args['sso_nonce'] : self::request_initial_nonce();
10986 $defaults = array(
10987 - 'action' => 'jetpack-sso',
10988 - 'site_id' => Jetpack_Options::get_option( 'id' ),
10989 - 'sso_nonce' => self::request_initial_nonce(),
10990 + 'action' => 'jetpack-sso',
10991 + 'site_id' => Jetpack_Options::get_option( 'id' ),
10992 + 'sso_nonce' => $sso_nonce,
10993 + 'calypso_auth' => '1',
10994 );
10995
10996 - if ( isset( $_GET['state'] ) && check_admin_referer( $_GET['state'] ) ) {
10997 - $defaults['state'] = rawurlencode( $_GET['state'] . '|' . $_GET['_wpnonce'] );
10998 + $args = wp_parse_args( $args, $defaults );
10999 +
11000 + if ( is_wp_error( $args['sso_nonce'] ) ) {
11001 + return $args['sso_nonce'];
11002 + }
11003 +
11004 + return add_query_arg( $args, 'https://wordpress.com/wp-login.php' );
11005 + }
11006 +
11007 + /**
11008 + * Build WordPress.com SSO URL with appropriate query parameters,
11009 + * including the parameters necessary to force the user to reauthenticate
11010 + * on WordPress.com.
11011 + *
11012 + * @param array $args Optional query parameters.
11013 + * @return string WordPress.com SSO URL
11014 + */
11015 + function build_reauth_and_sso_url( $args = array() ) {
11016 + $sso_nonce = ! empty( $args['sso_nonce'] ) ? $args['sso_nonce'] : self::request_initial_nonce();
11017 + $redirect = $this->build_sso_url( array( 'force_auth' => '1', 'sso_nonce' => $sso_nonce ) );
11018 +
11019 + if ( is_wp_error( $redirect ) ) {
11020 + return $redirect;
11021 }
11022
11023 + $defaults = array(
11024 + 'action' => 'jetpack-sso',
11025 + 'site_id' => Jetpack_Options::get_option( 'id' ),
11026 + 'sso_nonce' => $sso_nonce,
11027 + 'reauth' => '1',
11028 + 'redirect_to' => urlencode( $redirect ),
11029 + 'calypso_auth' => '1',
11030 + );
11031 +
11032 $args = wp_parse_args( $args, $defaults );
11033 - $url = add_query_arg( $args, 'https://wordpress.com/wp-login.php' );
11034
11035 - return $url;
11036 + if ( is_wp_error( $args['sso_nonce'] ) ) {
11037 + return $args['sso_nonce'];
11038 + }
11039 +
11040 + return add_query_arg( $args, 'https://wordpress.com/wp-login.php' );
11041 }
11042
11043 /**
11044 - * Determines local user associated with a given WordPress.com user ID.
11045 - *
11046 - * @since 2.6.0
11047 - *
11048 - * @param int $wpcom_user_id User ID from WordPress.com
11049 - * @return object Local user object if found, null if not.
11050 - */
11051 + * Determines local user associated with a given WordPress.com user ID.
11052 + *
11053 + * @since 2.6.0
11054 + *
11055 + * @param int $wpcom_user_id User ID from WordPress.com
11056 + * @return object Local user object if found, null if not.
11057 + */
11058 static function get_user_by_wpcom_id( $wpcom_user_id ) {
11059 $user_query = new WP_User_Query( array(
11060 'meta_key' => 'wpcom_user_id',
11061 @@ -888,9 +1007,19 @@ class Jetpack_SSO {
11062 * @return string
11063 **/
11064 public function error_msg_enable_two_step( $message ) {
11065 - $err = __( sprintf( 'This site requires two step authentication be enabled for your user account on WordPress.com. Please visit the <a href="%1$s" target="_blank"> Security Settings</a> page to enable two step', 'https://wordpress.com/me/security/two-step' ) , 'jetpack' );
11066 + $error = sprintf(
11067 + wp_kses(
11068 + __(
11069 + 'Two-Step Authentication is required to access this site. Please visit your <a href="%1$s" target="_blank">Security Settings</a> to configure <a href="%2$S" target="_blank">Two-step Authentication</a> for your account.',
11070 + 'jetpack'
11071 + ),
11072 + array( 'a' => array( 'href' => array() ) )
11073 + ),
11074 + 'https://wordpress.com/me/security/two-step',
11075 + 'https://support.wordpress.com/security/two-step-authentication/'
11076 + );
11077
11078 - $message .= sprintf( '<p class="message" id="login_error">%s</p>', $err );
11079 + $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
11080
11081 return $message;
11082 }
11083 @@ -904,24 +1033,30 @@ class Jetpack_SSO {
11084 * @return string
11085 */
11086 public function error_msg_email_already_exists( $message ) {
11087 - $err = __( sprintf( 'You already have an account on this site. Please visit your <a href="%1$s">profile page</a> page to link your account to WordPress.com!', admin_url( 'profile.php' ) ) , 'jetpack' );
11088 + $error = sprintf(
11089 + wp_kses(
11090 + __(
11091 + 'You already have an account on this site. Please <a href="%1$s">sign in</a> with your username and password and then connect to WordPress.com.',
11092 + 'jetpack'
11093 + ),
11094 + array( 'a' => array( 'href' => array() ) )
11095 + ),
11096 + esc_url_raw( add_query_arg( 'jetpack-sso-show-default-form', '1', wp_login_url() ) )
11097 + );
11098
11099 - $message .= sprintf( '<p class="message" id="login_error">%s</p>', $err );
11100 + $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
11101
11102 return $message;
11103 }
11104
11105 /**
11106 - * Message displayed when the site admin has disabled the default WordPress
11107 - * login form in Settings > General > Single Sign On
11108 + * Builds the translation ready string that is to be used when the site hides the default login form.
11109 *
11110 - * @since 2.7
11111 - * @param string $message
11112 + * @since 4.1.0
11113 * @return string
11114 - **/
11115 - public function msg_login_by_jetpack( $message ) {
11116 -
11117 - $msg = __( sprintf( 'Jetpack authenticates through WordPress.com — to log in, enter your WordPress.com username and password, or <a href="%1$s" target="_blank">visit WordPress.com</a> to create a free account now.', 'http://wordpress.com/signup' ) , 'jetpack' );
11118 + */
11119 + public function get_sso_required_message() {
11120 + $msg = esc_html__( 'A WordPress.com account is required to access this site. Click the button below to sign in or create a free WordPress.com account.', 'jetpack' );
11121
11122 /**
11123 * Filter the message displayed when the default WordPress login form is disabled.
11124 @@ -932,54 +1067,112 @@ class Jetpack_SSO {
11125 *
11126 * @param string $msg Disclaimer when default WordPress login form is disabled.
11127 */
11128 - $msg = apply_filters( 'jetpack_sso_disclaimer_message', $msg );
11129 + return apply_filters( 'jetpack_sso_disclaimer_message', $msg );
11130 + }
11131 +
11132 + /**
11133 + * Message displayed when the site admin has disabled the default WordPress
11134 + * login form in Settings > General > Single Sign On
11135 + *
11136 + * @since 2.7
11137 + * @param string $message
11138 + *
11139 + * @return string
11140 + **/
11141 + public function msg_login_by_jetpack( $message ) {
11142 + $msg = $this->get_sso_required_message();
11143 +
11144 + if ( empty( $msg ) ) {
11145 + return $message;
11146 + }
11147
11148 $message .= sprintf( '<p class="message">%s</p>', $msg );
11149 return $message;
11150 }
11151
11152 /**
11153 - * Error message displayed on the login form when the user attempts
11154 - * to post to the login form and it is disabled.
11155 + * Message displayed when the user can not be found after approving the SSO process on WordPress.com
11156 *
11157 - * @since 2.8
11158 * @param string $message
11159 - * @param string
11160 - **/
11161 - public function error_msg_login_method_not_allowed( $message ) {
11162 - $err = __( 'Login method not allowed' , 'jetpack' );
11163 - $message .= sprintf( '<p class="message" id="login_error">%s</p>', $err );
11164 + * @return string
11165 + */
11166 + function cant_find_user( $message ) {
11167 + $error = esc_html__(
11168 + "We couldn't find your account. If you already have an account, make sure you have connected to WordPress.com.",
11169 + 'jetpack'
11170 + );
11171 + $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
11172
11173 return $message;
11174 }
11175 - function cant_find_user( $message ) {
11176 - if ( self::match_by_email() ) {
11177 - $err_format = __( 'We couldn\'t find an account with the email <strong><code>%1$s</code></strong> to log you in with. If you already have an account on <strong>%2$s</strong>, please make sure that <strong><code>%1$s</code></strong> is configured as the email address, or that you have connected to WordPress.com on your profile page.', 'jetpack' );
11178 - } else {
11179 - $err_format = __( 'We couldn\'t find any account on <strong>%2$s</strong> that is linked to your WordPress.com account to log you in with. If you already have an account on <strong>%2$s</strong>, please make sure that you have connected to WordPress.com on your profile page.', 'jetpack' );
11180 +
11181 + /**
11182 + * When jetpack-sso-auth-redirect query parameter is set, will redirect user to
11183 + * WordPress.com authorization flow.
11184 + *
11185 + * We redirect here instead of in handle_login() because Jetpack::init()->build_connect_url
11186 + * calls menu_page_url() which doesn't work properly until admin menus are registered.
11187 + */
11188 + function maybe_authorize_user_after_sso() {
11189 + if ( empty( $_GET['jetpack-sso-auth-redirect'] ) ) {
11190 + return;
11191 }
11192 - $err = sprintf( $err_format, $this->user_data->email, get_bloginfo( 'name' ) );
11193 - $message .= sprintf( '<p class="message" id="login_error">%s</p>', $err );
11194 - return $message;
11195 +
11196 + $redirect_to = ! empty( $_GET['redirect_to'] ) ? esc_url_raw( $_GET['redirect_to'] ) : admin_url();
11197 + $request_redirect_to = ! empty( $_GET['request_redirect_to'] ) ? esc_url_raw( $_GET['request_redirect_to'] ) : $redirect_to;
11198 +
11199 + /** This filter is documented in core/src/wp-login.php */
11200 + $redirect_after_auth = apply_filters( 'login_redirect', $redirect_to, $request_redirect_to, wp_get_current_user() );
11201 +
11202 + /**
11203 + * Since we are passing this redirect to WordPress.com and therefore can not use wp_safe_redirect(),
11204 + * let's sanitize it here to make sure it's safe. If the redirect is not safe, then use admin_url().
11205 + */
11206 + $redirect_after_auth = wp_sanitize_redirect( $redirect_after_auth );
11207 + $redirect_after_auth = wp_validate_redirect( $redirect_after_auth, admin_url() );
11208 +
11209 + /**
11210 + * Return the raw connect URL with our redirect and attribute connection to SSO.
11211 + */
11212 + $connect_url = Jetpack::init()->build_connect_url( true, $redirect_after_auth, 'sso' );
11213 +
11214 + add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
11215 + wp_safe_redirect( $connect_url );
11216 + exit;
11217 }
11218
11219 /**
11220 - * Deal with user connections...
11221 + * Cache user's display name and Gravatar so it can be displayed on the login screen. These cookies are
11222 + * stored when the user logs out, and then deleted when the user logs in.
11223 */
11224 - function admin_init() {
11225 - add_action( 'show_user_profile', array( $this, 'edit_profile_fields' ) ); // For their own profile
11226 - add_action( 'edit_user_profile', array( $this, 'edit_profile_fields' ) ); // For folks editing others profiles
11227 + function store_wpcom_profile_cookies_on_logout() {
11228 + if ( ! Jetpack::is_user_connected( get_current_user_id() ) ) {
11229 + return;
11230 + }
11231
11232 - if ( isset( $_GET['jetpack_sso'] ) && 'purge' == $_GET['jetpack_sso'] && check_admin_referer( 'jetpack_sso_purge' ) ) {
11233 - $user = wp_get_current_user();
11234 - // Remove the connection on the wpcom end.
11235 - self::delete_connection_for_user( $user->ID );
11236 - // Clear it locally.
11237 - delete_user_meta( $user->ID, 'wpcom_user_id' );
11238 - delete_user_meta( $user->ID, 'wpcom_user_data' );
11239 - // Forward back to the profile page.
11240 - wp_safe_redirect( remove_query_arg( array( 'jetpack_sso', '_wpnonce' ) ) );
11241 + $user_data = $this->get_user_data( get_current_user_id() );
11242 + if ( ! $user_data ) {
11243 + return;
11244 }
11245 +
11246 + setcookie(
11247 + 'jetpack_sso_wpcom_name_' . COOKIEHASH,
11248 + $user_data->display_name,
11249 + time() + WEEK_IN_SECONDS,
11250 + COOKIEPATH,
11251 + COOKIE_DOMAIN
11252 + );
11253 +
11254 + setcookie(
11255 + 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH,
11256 + get_avatar_url(
11257 + $user_data->email,
11258 + array( 'size' => 144, 'default' => 'mystery' )
11259 + ),
11260 + time() + WEEK_IN_SECONDS,
11261 + COOKIEPATH,
11262 + COOKIE_DOMAIN
11263 + );
11264 }
11265
11266 /**
11267 @@ -990,7 +1183,7 @@ class Jetpack_SSO {
11268 * @return boolean
11269 **/
11270 public function is_user_connected( $user_id ) {
11271 - return $this->get_user_data( $user_id ) ;
11272 + return $this->get_user_data( $user_id );
11273 }
11274
11275 /**
11276 @@ -1003,95 +1196,6 @@ class Jetpack_SSO {
11277 public function get_user_data( $user_id ) {
11278 return get_user_meta( $user_id, 'wpcom_user_data', true );
11279 }
11280 -
11281 - function edit_profile_fields( $user ) {
11282 - wp_enqueue_style( 'genericons' );
11283 - ?>
11284 -
11285 - <h3 id="single-sign-on"><?php _e( 'Single Sign On', 'jetpack' ); ?></h3>
11286 - <p><?php _e( 'Connecting with Single Sign On enables you to log in via your WordPress.com account.', 'jetpack' ); ?></p>
11287 -
11288 - <?php if ( $this->is_user_connected( $user->ID ) ) : /* If the user is currently connected... */ ?>
11289 - <?php $user_data = $this->get_user_data( $user->ID ); ?>
11290 - <table class="form-table jetpack-sso-form-table">
11291 - <tbody>
11292 - <tr>
11293 - <td>
11294 - <div class="profile-card">
11295 - <?php echo get_avatar( $user_data->email ); ?>
11296 - <p class="connected"><strong><?php _e( 'Connected', 'jetpack' ); ?></strong></p>
11297 - <p><?php echo esc_html( $user_data->login ); ?></p>
11298 - <span class="two_step">
11299 - <?php
11300 - if( $user_data->two_step_enabled ) {
11301 - ?> <p class="enabled"><a href="https://wordpress.com/me/security/two-step" target="_blank"><?php _e( 'Two-Step Authentication Enabled', 'jetpack' ); ?></a></p> <?php
11302 - } else {
11303 - ?> <p class="disabled"><a href="https://wordpress.com/me/security/two-step" target="_blank"><?php _e( 'Two-Step Authentication Disabled', 'jetpack' ); ?></a></p> <?php
11304 - }
11305 - ?>
11306 - </span>
11307 -
11308 - </div>
11309 - <p><a class="button button-secondary" href="<?php echo esc_url( wp_nonce_url( add_query_arg( 'jetpack_sso', 'purge' ), 'jetpack_sso_purge' ) ); ?>"><?php _e( 'Unlink This Account', 'jetpack' ); ?></a></p>
11310 - </td>
11311 - </tr>
11312 - </tbody>
11313 - </table>
11314 -
11315 - <style>
11316 - .jetpack-sso-form-table td {
11317 - padding-left: 0;
11318 - }
11319 -
11320 - .jetpack-sso-form-table .profile-card {
11321 - padding: 10px;
11322 - background: #fff;
11323 - overflow: hidden;
11324 - max-width: 400px;
11325 - box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.1 );
11326 - margin-bottom: 1em;
11327 - }
11328 -
11329 - .jetpack-sso-form-table .profile-card img {
11330 - float: left;
11331 - margin-right: 1em;
11332 - width: 48px;
11333 - height: 48px;
11334 - }
11335 -
11336 - .jetpack-sso-form-table .profile-card .connected {
11337 - float: right;
11338 - margin-right: 0.5em;
11339 - color: #0a0;
11340 - }
11341 -
11342 - .jetpack-sso-form-table .profile-card p {
11343 - margin-top: 0.7em;
11344 - font-size: 1.2em;
11345 - }
11346 -
11347 - .jetpack-sso-form-table .profile-card .two_step .enabled a {
11348 - float: right;
11349 - color: #0a0;
11350 - }
11351 -
11352 - .jetpack-sso-form-table .profile-card .two_step .disabled a {
11353 - float: right;
11354 - color: red;
11355 - }
11356 - </style>
11357 -
11358 - <?php elseif ( get_current_user_id() == $user->ID && Jetpack::is_user_connected( $user->ID ) ) : ?>
11359 -
11360 - <?php echo $this->button( 'state=sso-link-user&_wpnonce=' . wp_create_nonce('sso-link-user') ); // update ?>
11361 -
11362 - <?php else : ?>
11363 -
11364 - <p><?php esc_html_e( wptexturize( __( "If you don't have a WordPress.com account yet, you can sign up for free in just a few seconds.", 'jetpack' ) ) ); ?></p>
11365 - <a href="<?php echo Jetpack::init()->build_connect_url( false, get_edit_profile_url( get_current_user_id() ) . '#single-sign-on' ); ?>" class="button button-connector" id="wpcom-connect"><?php esc_html_e( 'Link account with WordPress.com', 'jetpack' ); ?></a>
11366 -
11367 - <?php endif;
11368 - }
11369 }
11370
11371 Jetpack_SSO::get_instance();
11372
11373 diff --git a/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php b/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php
11374 new file mode 100644
11375 index 0000000..01587b8
11376 --- /dev/null
11377 +++ b/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php
11378 @@ -0,0 +1,159 @@
11379 +<?php
11380 +
11381 +if ( ! class_exists( 'Jetpack_SSO_Helpers' ) ) :
11382 +
11383 +/**
11384 + * A collection of helper functions used in the SSO module.
11385 + *
11386 + * @since 4.1.0
11387 + */
11388 +class Jetpack_SSO_Helpers {
11389 + /**
11390 + * Determine if the login form should be hidden or not
11391 + *
11392 + * @return bool
11393 + **/
11394 + static function should_hide_login_form() {
11395 + /**
11396 + * Remove the default log in form, only leave the WordPress.com log in button.
11397 + *
11398 + * @module sso
11399 + *
11400 + * @since 3.1.0
11401 + *
11402 + * @param bool get_option( 'jetpack_sso_remove_login_form', false ) Should the default log in form be removed. Default to false.
11403 + */
11404 + return (bool) apply_filters( 'jetpack_remove_login_form', get_option( 'jetpack_sso_remove_login_form', false ) );
11405 + }
11406 +
11407 + /**
11408 + * Returns a boolean value for whether logging in by matching the WordPress.com user email to a
11409 + * Jetpack site user's email is allowed.
11410 + *
11411 + * @return bool
11412 + */
11413 + static function match_by_email() {
11414 + $match_by_email = ( 1 == get_option( 'jetpack_sso_match_by_email', true ) ) ? true: false;
11415 + $match_by_email = defined( 'WPCC_MATCH_BY_EMAIL' ) ? WPCC_MATCH_BY_EMAIL : $match_by_email;
11416 +
11417 + /**
11418 + * Link the local account to an account on WordPress.com using the same email address.
11419 + *
11420 + * @module sso
11421 + *
11422 + * @since 2.6.0
11423 + *
11424 + * @param bool $match_by_email Should we link the local account to an account on WordPress.com using the same email address. Default to false.
11425 + */
11426 + return (bool) apply_filters( 'jetpack_sso_match_by_email', $match_by_email );
11427 + }
11428 +
11429 + /**
11430 + * Returns a boolean for whether users are allowed to register on the Jetpack site with SSO,
11431 + * even though the site disallows normal registrations.
11432 + *
11433 + * @return bool
11434 + */
11435 + static function new_user_override() {
11436 + $new_user_override = defined( 'WPCC_NEW_USER_OVERRIDE' ) ? WPCC_NEW_USER_OVERRIDE : false;
11437 +
11438 + /**
11439 + * Allow users to register on your site with a WordPress.com account, even though you disallow normal registrations.
11440 + *
11441 + * @module sso
11442 + *
11443 + * @since 2.6.0
11444 + *
11445 + * @param bool $new_user_override Allow users to register on your site with a WordPress.com account. Default to false.
11446 + */
11447 + return (bool) apply_filters( 'jetpack_sso_new_user_override', $new_user_override );
11448 + }
11449 +
11450 + /**
11451 + * Returns a boolean value for whether two-step authentication is required for SSO.
11452 + *
11453 + * @since 4.1.0
11454 + *
11455 + * @return bool
11456 + */
11457 + static function is_two_step_required() {
11458 + /**
11459 + * Is it required to have 2-step authentication enabled on WordPress.com to use SSO?
11460 + *
11461 + * @module sso
11462 + *
11463 + * @since 2.8.0
11464 + *
11465 + * @param bool get_option( 'jetpack_sso_require_two_step' ) Does SSO require 2-step authentication?
11466 + */
11467 + return (bool) apply_filters( 'jetpack_sso_require_two_step', get_option( 'jetpack_sso_require_two_step', false ) );
11468 + }
11469 +
11470 + /**
11471 + * Returns a boolean for whether a user that is attempting to log in will be automatically
11472 + * redirected to WordPress.com to begin the SSO flow.
11473 + *
11474 + * @return bool
11475 + */
11476 + static function bypass_login_forward_wpcom() {
11477 + /**
11478 + * Redirect the site's log in form to WordPress.com's log in form.
11479 + *
11480 + * @module sso
11481 + *
11482 + * @since 3.1.0
11483 + *
11484 + * @param bool false Should the site's log in form be automatically forwarded to WordPress.com's log in form.
11485 + */
11486 + return (bool) apply_filters( 'jetpack_sso_bypass_login_forward_wpcom', false );
11487 + }
11488 +
11489 + /**
11490 + * Returns a boolean for whether the SSO login form should be displayed as the default
11491 + * when both the default and SSO login form allowed.
11492 + *
11493 + * @since 4.1.0
11494 + *
11495 + * @return bool
11496 + */
11497 + static function show_sso_login() {
11498 + if ( self::should_hide_login_form() ) {
11499 + return true;
11500 + }
11501 +
11502 + /**
11503 + * Display the SSO login form as the default when both the default and SSO login forms are enabled.
11504 + *
11505 + * @module sso
11506 + *
11507 + * @since 4.1.0
11508 + *
11509 + * @param bool true Should the SSO login form be displayed by default when the default login form is also enabled?
11510 + */
11511 + return (bool) apply_filters( 'jetpack_sso_default_to_sso_login', true );
11512 + }
11513 +
11514 + /**
11515 + * Returns a boolean for whether the two step required checkbox, displayed on the Jetpack admin page, should be disabled.
11516 + *
11517 + * @since 4.1.0
11518 + *
11519 + * @return bool
11520 + */
11521 + static function is_require_two_step_checkbox_disabled() {
11522 + return (bool) has_filter( 'jetpack_sso_require_two_step' );
11523 + }
11524 +
11525 + /**
11526 + * Returns a boolean for whether the match by email checkbox, displayed on the Jetpack admin page, should be disabled.
11527 + *
11528 + * @since 4.1.0
11529 + *
11530 + * @return bool
11531 + */
11532 + static function is_match_by_email_checkbox_disabled() {
11533 + return defined( 'WPCC_MATCH_BY_EMAIL' ) || has_filter( 'jetpack_sso_match_by_email' );
11534 + }
11535 +}
11536 +
11537 +endif;
11538
11539 diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css
11540 new file mode 100644
11541 index 0000000..48cc5e4
11542 --- /dev/null
11543 +++ b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css
11544 @@ -0,0 +1,179 @@
11545 +#loginform {
11546 + /* We set !important because sometimes static is added inline */
11547 + position: relative !important;
11548 + padding-bottom: 92px;
11549 +}
11550 +
11551 +.jetpack-sso .message {
11552 + margin-top: 20px;
11553 +}
11554 +
11555 +.jetpack-sso #login .message:first-child,
11556 +.jetpack-sso #login h1 + .message {
11557 + margin-top: 0;
11558 +}
11559 +
11560 +.jetpack-sso-repositioned #loginform {
11561 + padding-bottom: 26px;
11562 +}
11563 +
11564 +#loginform #jetpack-sso-wrap,
11565 +#loginform #jetpack-sso-wrap * {
11566 + box-sizing: border-box;
11567 +}
11568 +
11569 +
11570 +#jetpack-sso-wrap__action,
11571 +#jetpack-sso-wrap__user{
11572 + display: none;
11573 +}
11574 +
11575 +.jetpack-sso-form-display #jetpack-sso-wrap__action,
11576 +.jetpack-sso-form-display #jetpack-sso-wrap__user {
11577 + display: block;
11578 +}
11579 +
11580 +#jetpack-sso-wrap {
11581 + position: absolute;
11582 + bottom: 20px;
11583 + padding: 0 24px;
11584 + margin-right: -24px;
11585 + margin-left: -24px;
11586 + width: 100%;
11587 +}
11588 +
11589 +.jetpack-sso-repositioned #jetpack-sso-wrap {
11590 + position: relative;
11591 + bottom: auto;
11592 + padding: 0;
11593 + margin-top: 16px;
11594 + margin-right: 0;
11595 + margin-left: 0;
11596 +}
11597 +
11598 +.jetpack-sso-form-display #jetpack-sso-wrap {
11599 + position: relative;
11600 + bottom: auto;
11601 + padding: 0;
11602 + margin-top: 0;
11603 + margin-right: 0;
11604 + margin-left: 0;
11605 +}
11606 +
11607 +#loginform #jetpack-sso-wrap p {
11608 + color: #777777;
11609 + margin-bottom: 16px;
11610 +}
11611 +
11612 +#jetpack-sso-wrap a {
11613 + display: block;
11614 + width: 100%;
11615 + text-align: center;
11616 + text-decoration: none;
11617 +}
11618 +
11619 +#jetpack-sso-wrap .jetpack-sso-toggle.wpcom {
11620 + display: none;
11621 +}
11622 +
11623 +.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom {
11624 + display: block;
11625 +}
11626 +
11627 +
11628 +.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default {
11629 + display: none;
11630 +}
11631 +
11632 +
11633 +.jetpack-sso-form-display #loginform > p,
11634 +.jetpack-sso-form-display #loginform > div {
11635 + display: none;
11636 +}
11637 +
11638 +.jetpack-sso-form-display #loginform #jetpack-sso-wrap {
11639 + display: block;
11640 +}
11641 +
11642 +.jetpack-sso-form-display #loginform {
11643 + padding: 26px 24px;
11644 +}
11645 +
11646 +.jetpack-sso-or {
11647 + margin-bottom: 16px;
11648 + position: relative;
11649 + text-align: center;
11650 +}
11651 +
11652 +.jetpack-sso-or:before {
11653 + background: #E5E5E5;
11654 + content: '';
11655 + height: 1px;
11656 + position: absolute;
11657 + right: 0;
11658 + top: 50%;
11659 + width: 100%;
11660 +}
11661 +.jetpack-sso-or span {
11662 + background: #fff;
11663 + color: #777;
11664 + position: relative;
11665 + padding: 0 8px;
11666 + text-transform: uppercase
11667 +}
11668 +
11669 +.jetpack-sso.button {
11670 + height: 36px;
11671 + line-height: 34px;
11672 + float: none;
11673 + margin-bottom: 16px;
11674 + position: relative;
11675 + width: 100%;
11676 +}
11677 +
11678 +.jetpack-sso.button > span {
11679 + position: relative;
11680 + padding-right: 30px;
11681 +}
11682 +
11683 +.jetpack-sso.button .genericon-wordpress {
11684 + position: absolute;
11685 + right: 0;
11686 + top: -3px;
11687 + font-size: 24px;
11688 +}
11689 +
11690 +@media screen and ( max-width: 782px ) {
11691 + .jetpack-sso.button {
11692 + line-height: 22px;
11693 + }
11694 +}
11695 +
11696 +#jetpack-sso-wrap__user img {
11697 + border-radius: 50%;
11698 + display: block;
11699 + margin: 0 auto 16px;
11700 +}
11701 +
11702 +#jetpack-sso-wrap__user h2 {
11703 + font-size: 21px;
11704 + font-weight: 300;
11705 + margin-bottom: 16px;
11706 + text-align: center;
11707 +}
11708 +
11709 +#jetpack-sso-wrap__user h2 span {
11710 + font-weight: bold;
11711 +}
11712 +
11713 +.jetpack-sso-wrap__reauth {
11714 + margin-bottom: 16px;
11715 +}
11716 +
11717 +.jetpack-sso-form-display #nav {
11718 + display: none;
11719 +}
11720 +
11721 +.jetpack-sso-form-display #backtoblog {
11722 + margin: 24px 0 0;
11723 +}
11724
11725 diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css
11726 new file mode 100644
11727 index 0000000..0445451
11728 --- /dev/null
11729 +++ b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css
11730 @@ -0,0 +1 @@
11731 +#loginform{position:relative!important;padding-bottom:92px}.jetpack-sso .message{margin-top:20px}.jetpack-sso #login .message:first-child,.jetpack-sso #login h1+.message{margin-top:0}.jetpack-sso-repositioned #loginform{padding-bottom:26px}#loginform #jetpack-sso-wrap,#loginform #jetpack-sso-wrap *{box-sizing:border-box}#jetpack-sso-wrap__action,#jetpack-sso-wrap__user{display:none}.jetpack-sso-form-display #jetpack-sso-wrap__action,.jetpack-sso-form-display #jetpack-sso-wrap__user{display:block}#jetpack-sso-wrap{position:absolute;bottom:20px;padding:0 24px;margin-right:-24px;margin-left:-24px;width:100%}.jetpack-sso-repositioned #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:16px;margin-right:0;margin-left:0}.jetpack-sso-form-display #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:0;margin-right:0;margin-left:0}#loginform #jetpack-sso-wrap p{color:#777;margin-bottom:16px}#jetpack-sso-wrap a{display:block;width:100%;text-align:center;text-d
11732 ecoration:none}#jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:none}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:block}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default,.jetpack-sso-form-display #loginform>div,.jetpack-sso-form-display #loginform>p{display:none}.jetpack-sso-form-display #loginform #jetpack-sso-wrap{display:block}.jetpack-sso-form-display #loginform{padding:26px 24px}.jetpack-sso-or{margin-bottom:16px;position:relative;text-align:center}.jetpack-sso-or:before{background:#E5E5E5;content:'';height:1px;position:absolute;right:0;top:50%;width:100%}.jetpack-sso-or span{background:#fff;color:#777;position:relative;padding:0 8px;text-transform:uppercase}.jetpack-sso.button{height:36px;line-height:34px;float:none;margin-bottom:16px;position:relative;width:100%}.jetpack-sso.button>span{position:relative;padding-right:30px}.jetpack-sso.button .genericon-wordpress{position:absolute;right:0;top:-3px;font-size:24px}@media
11733 screen and (max-width:782px){.jetpack-sso.button{line-height:22px}}#jetpack-sso-wrap__user img{border-radius:50%;display:block;margin:0 auto 16px}#jetpack-sso-wrap__user h2{font-size:21px;font-weight:300;margin-bottom:16px;text-align:center}#jetpack-sso-wrap__user h2 span{font-weight:700}.jetpack-sso-wrap__reauth{margin-bottom:16px}.jetpack-sso-form-display #nav{display:none}.jetpack-sso-form-display #backtoblog{margin:24px 0 0}
11734 \ No newline at end of file
11735
11736 diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login.css b/plugins/jetpack/modules/sso/jetpack-sso-login.css
11737 new file mode 100644
11738 index 0000000..f1da883
11739 --- /dev/null
11740 +++ b/plugins/jetpack/modules/sso/jetpack-sso-login.css
11741 @@ -0,0 +1,179 @@
11742 +#loginform {
11743 + /* We set !important because sometimes static is added inline */
11744 + position: relative !important;
11745 + padding-bottom: 92px;
11746 +}
11747 +
11748 +.jetpack-sso .message {
11749 + margin-top: 20px;
11750 +}
11751 +
11752 +.jetpack-sso #login .message:first-child,
11753 +.jetpack-sso #login h1 + .message {
11754 + margin-top: 0;
11755 +}
11756 +
11757 +.jetpack-sso-repositioned #loginform {
11758 + padding-bottom: 26px;
11759 +}
11760 +
11761 +#loginform #jetpack-sso-wrap,
11762 +#loginform #jetpack-sso-wrap * {
11763 + box-sizing: border-box;
11764 +}
11765 +
11766 +
11767 +#jetpack-sso-wrap__action,
11768 +#jetpack-sso-wrap__user{
11769 + display: none;
11770 +}
11771 +
11772 +.jetpack-sso-form-display #jetpack-sso-wrap__action,
11773 +.jetpack-sso-form-display #jetpack-sso-wrap__user {
11774 + display: block;
11775 +}
11776 +
11777 +#jetpack-sso-wrap {
11778 + position: absolute;
11779 + bottom: 20px;
11780 + padding: 0 24px;
11781 + margin-left: -24px;
11782 + margin-right: -24px;
11783 + width: 100%;
11784 +}
11785 +
11786 +.jetpack-sso-repositioned #jetpack-sso-wrap {
11787 + position: relative;
11788 + bottom: auto;
11789 + padding: 0;
11790 + margin-top: 16px;
11791 + margin-left: 0;
11792 + margin-right: 0;
11793 +}
11794 +
11795 +.jetpack-sso-form-display #jetpack-sso-wrap {
11796 + position: relative;
11797 + bottom: auto;
11798 + padding: 0;
11799 + margin-top: 0;
11800 + margin-left: 0;
11801 + margin-right: 0;
11802 +}
11803 +
11804 +#loginform #jetpack-sso-wrap p {
11805 + color: #777777;
11806 + margin-bottom: 16px;
11807 +}
11808 +
11809 +#jetpack-sso-wrap a {
11810 + display: block;
11811 + width: 100%;
11812 + text-align: center;
11813 + text-decoration: none;
11814 +}
11815 +
11816 +#jetpack-sso-wrap .jetpack-sso-toggle.wpcom {
11817 + display: none;
11818 +}
11819 +
11820 +.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom {
11821 + display: block;
11822 +}
11823 +
11824 +
11825 +.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default {
11826 + display: none;
11827 +}
11828 +
11829 +
11830 +.jetpack-sso-form-display #loginform > p,
11831 +.jetpack-sso-form-display #loginform > div {
11832 + display: none;
11833 +}
11834 +
11835 +.jetpack-sso-form-display #loginform #jetpack-sso-wrap {
11836 + display: block;
11837 +}
11838 +
11839 +.jetpack-sso-form-display #loginform {
11840 + padding: 26px 24px;
11841 +}
11842 +
11843 +.jetpack-sso-or {
11844 + margin-bottom: 16px;
11845 + position: relative;
11846 + text-align: center;
11847 +}
11848 +
11849 +.jetpack-sso-or:before {
11850 + background: #E5E5E5;
11851 + content: '';
11852 + height: 1px;
11853 + position: absolute;
11854 + left: 0;
11855 + top: 50%;
11856 + width: 100%;
11857 +}
11858 +.jetpack-sso-or span {
11859 + background: #fff;
11860 + color: #777;
11861 + position: relative;
11862 + padding: 0 8px;
11863 + text-transform: uppercase
11864 +}
11865 +
11866 +.jetpack-sso.button {
11867 + height: 36px;
11868 + line-height: 34px;
11869 + float: none;
11870 + margin-bottom: 16px;
11871 + position: relative;
11872 + width: 100%;
11873 +}
11874 +
11875 +.jetpack-sso.button > span {
11876 + position: relative;
11877 + padding-left: 30px;
11878 +}
11879 +
11880 +.jetpack-sso.button .genericon-wordpress {
11881 + position: absolute;
11882 + left: 0;
11883 + top: -3px;
11884 + font-size: 24px;
11885 +}
11886 +
11887 +@media screen and ( max-width: 782px ) {
11888 + .jetpack-sso.button {
11889 + line-height: 22px;
11890 + }
11891 +}
11892 +
11893 +#jetpack-sso-wrap__user img {
11894 + border-radius: 50%;
11895 + display: block;
11896 + margin: 0 auto 16px;
11897 +}
11898 +
11899 +#jetpack-sso-wrap__user h2 {
11900 + font-size: 21px;
11901 + font-weight: 300;
11902 + margin-bottom: 16px;
11903 + text-align: center;
11904 +}
11905 +
11906 +#jetpack-sso-wrap__user h2 span {
11907 + font-weight: bold;
11908 +}
11909 +
11910 +.jetpack-sso-wrap__reauth {
11911 + margin-bottom: 16px;
11912 +}
11913 +
11914 +.jetpack-sso-form-display #nav {
11915 + display: none;
11916 +}
11917 +
11918 +.jetpack-sso-form-display #backtoblog {
11919 + margin: 24px 0 0;
11920 +}
11921
11922 diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login.js b/plugins/jetpack/modules/sso/jetpack-sso-login.js
11923 new file mode 100644
11924 index 0000000..9de8c2b
11925 --- /dev/null
11926 +++ b/plugins/jetpack/modules/sso/jetpack-sso-login.js
11927 @@ -0,0 +1,47 @@
11928 +jQuery( document ).ready( function( $ ) {
11929 + var body = $( 'body' ),
11930 + rememberMe = $( '#rememberme' ),
11931 + ssoButton = $( 'a.jetpack-sso.button' ),
11932 + toggleSSO = $( '.jetpack-sso-toggle' ),
11933 + userLogin = $( '#user_login' ),
11934 + ssoWrap = $( '#jetpack-sso-wrap' ),
11935 + loginForm = $( '#loginform' ),
11936 + overflow = $( '<div style="overflow: auto;"></div>' );
11937 +
11938 + // The overflow div is a poor man's clearfloat. We reposition the remember me
11939 + // checkbox and the submit button within that to clear the float on the
11940 + // remember me checkbox. This is important since we're positioning the SSO
11941 + // UI under the submit button.
11942 + //
11943 + // @TODO: Remove this approach once core ticket 28528 is in and we have more actions in wp-login.php.
11944 + // See - https://core.trac.wordpress.org/ticket/28528
11945 + loginForm.append( overflow );
11946 + overflow.append( $( 'p.forgetmenot' ), $( 'p.submit' ) );
11947 +
11948 + // We reposition the SSO UI at the bottom of the login form which
11949 + // fixes a tab order issue. Then we override any styles for absolute
11950 + // positioning of the SSO UI.
11951 + loginForm.append( ssoWrap );
11952 + body.addClass( 'jetpack-sso-repositioned' );
11953 +
11954 + rememberMe.on( 'change', function() {
11955 + var url = ssoButton.prop( 'href' ),
11956 + isChecked = rememberMe.prop( 'checked' ) ? 1 : 0;
11957 +
11958 + if ( url.match( /&rememberme=\d/ ) ) {
11959 + url = url.replace( /&rememberme=\d/, '&rememberme=' + isChecked );
11960 + } else {
11961 + url += '&rememberme=' + isChecked;
11962 + }
11963 +
11964 + ssoButton.prop( 'href', url );
11965 + } ).change();
11966 +
11967 + toggleSSO.on( 'click', function( e ) {
11968 + e.preventDefault();
11969 + body.toggleClass( 'jetpack-sso-form-display' );
11970 + if ( ! body.hasClass( 'jetpack-sso-form-display' ) ) {
11971 + userLogin.focus();
11972 + }
11973 + } );
11974 +} );
11975
11976 diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login.min.css b/plugins/jetpack/modules/sso/jetpack-sso-login.min.css
11977 new file mode 100644
11978 index 0000000..311ade5
11979 --- /dev/null
11980 +++ b/plugins/jetpack/modules/sso/jetpack-sso-login.min.css
11981 @@ -0,0 +1 @@
11982 +#loginform{position:relative!important;padding-bottom:92px}.jetpack-sso .message{margin-top:20px}.jetpack-sso #login .message:first-child,.jetpack-sso #login h1+.message{margin-top:0}.jetpack-sso-repositioned #loginform{padding-bottom:26px}#loginform #jetpack-sso-wrap,#loginform #jetpack-sso-wrap *{box-sizing:border-box}#jetpack-sso-wrap__action,#jetpack-sso-wrap__user{display:none}.jetpack-sso-form-display #jetpack-sso-wrap__action,.jetpack-sso-form-display #jetpack-sso-wrap__user{display:block}#jetpack-sso-wrap{position:absolute;bottom:20px;padding:0 24px;margin-left:-24px;margin-right:-24px;width:100%}.jetpack-sso-repositioned #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:16px;margin-left:0;margin-right:0}.jetpack-sso-form-display #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:0;margin-left:0;margin-right:0}#loginform #jetpack-sso-wrap p{color:#777;margin-bottom:16px}#jetpack-sso-wrap a{display:block;width:100%;text-align:center;text-d
11983 ecoration:none}#jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:none}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:block}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default,.jetpack-sso-form-display #loginform>div,.jetpack-sso-form-display #loginform>p{display:none}.jetpack-sso-form-display #loginform #jetpack-sso-wrap{display:block}.jetpack-sso-form-display #loginform{padding:26px 24px}.jetpack-sso-or{margin-bottom:16px;position:relative;text-align:center}.jetpack-sso-or:before{background:#E5E5E5;content:'';height:1px;position:absolute;left:0;top:50%;width:100%}.jetpack-sso-or span{background:#fff;color:#777;position:relative;padding:0 8px;text-transform:uppercase}.jetpack-sso.button{height:36px;line-height:34px;float:none;margin-bottom:16px;position:relative;width:100%}.jetpack-sso.button>span{position:relative;padding-left:30px}.jetpack-sso.button .genericon-wordpress{position:absolute;left:0;top:-3px;font-size:24px}@media sc
11984 reen and (max-width:782px){.jetpack-sso.button{line-height:22px}}#jetpack-sso-wrap__user img{border-radius:50%;display:block;margin:0 auto 16px}#jetpack-sso-wrap__user h2{font-size:21px;font-weight:300;margin-bottom:16px;text-align:center}#jetpack-sso-wrap__user h2 span{font-weight:700}.jetpack-sso-wrap__reauth{margin-bottom:16px}.jetpack-sso-form-display #nav{display:none}.jetpack-sso-form-display #backtoblog{margin:24px 0 0}
11985 \ No newline at end of file
11986
11987 diff --git a/plugins/jetpack/modules/sso/jetpack-sso-profile.css b/plugins/jetpack/modules/sso/jetpack-sso-profile.css
11988 new file mode 100644
11989 index 0000000..1d6c1ac
11990 --- /dev/null
11991 +++ b/plugins/jetpack/modules/sso/jetpack-sso-profile.css
11992 @@ -0,0 +1,72 @@
11993 +.jetpack-sso.button {
11994 + position: relative;
11995 + padding-left: 37px;
11996 +}
11997 +.jetpack-sso.button:before {
11998 + display: block;
11999 + box-sizing: border-box;
12000 + padding: 7px 0 0;
12001 + text-align: center;
12002 + position: absolute;
12003 + top: -1px;
12004 + left: -1px;
12005 + border-radius: 2px 0 0 2px;
12006 + content: '\f205';
12007 + background: #0074a2;
12008 + color: #fff;
12009 + -webkit-font-smoothing: antialiased;
12010 + width: 30px;
12011 + height: 107%;
12012 + height: calc( 100% + 2px );
12013 + font: normal 22px/1 Genericons !important;
12014 + text-shadow: none;
12015 +}
12016 +@media screen and (min-width: 783px) {
12017 + .jetpack-sso.button:before {
12018 + padding-top: 3px;
12019 + }
12020 +}
12021 +.jetpack-sso.button:hover {
12022 + border: 1px solid #aaa;
12023 +}
12024 +
12025 +.jetpack-sso-form-table td {
12026 + padding-left: 0;
12027 +}
12028 +
12029 +.jetpack-sso-form-table .profile-card {
12030 + padding: 10px;
12031 + background: #fff;
12032 + overflow: hidden;
12033 + max-width: 400px;
12034 + box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.1 );
12035 + margin-bottom: 1em;
12036 +}
12037 +
12038 +.jetpack-sso-form-table .profile-card img {
12039 + float: left;
12040 + margin-right: 1em;
12041 + width: 48px;
12042 + height: 48px;
12043 +}
12044 +
12045 +.jetpack-sso-form-table .profile-card .connected {
12046 + float: right;
12047 + margin-right: 0.5em;
12048 + color: #0a0;
12049 +}
12050 +
12051 +.jetpack-sso-form-table .profile-card p {
12052 + margin-top: 0.7em;
12053 + font-size: 1.2em;
12054 +}
12055 +
12056 +.jetpack-sso-form-table .profile-card .two_step .enabled a {
12057 + float: right;
12058 + color: #0a0;
12059 +}
12060 +
12061 +.jetpack-sso-form-table .profile-card .two_step .disabled a {
12062 + float: right;
12063 + color: red;
12064 +}
12065
12066 diff --git a/plugins/jetpack/modules/stats.php b/plugins/jetpack/modules/stats.php
12067 index 9465a08..2040b68 100644
12068 --- a/plugins/jetpack/modules/stats.php
12069 +++ b/plugins/jetpack/modules/stats.php
12070 @@ -391,8 +391,18 @@ function stats_reports_page( $main_chart_only = false ) {
12071 </div>
12072 <div id="stats-loading-wrap" class="wrap">
12073 <p class="hide-if-no-js"><img width="32" height="32" alt="<?php esc_attr_e( 'Loading&hellip;', 'jetpack' ); ?>" src="<?php
12074 -/** This filter is documented in modules/shortcodes/audio.php */
12075 -echo esc_url( apply_filters( 'jetpack_static_url', "{$http}://en.wordpress.com/i/loading/loading-64.gif" ) ); ?>" /></p>
12076 +echo esc_url(
12077 + /**
12078 + * Sets external resource URL.
12079 + *
12080 + * @module stats
12081 + *
12082 + * @since 1.4.0
12083 + *
12084 + * @param string $args URL of external resource.
12085 + */
12086 + apply_filters( 'jetpack_static_url', "{$http}://en.wordpress.com/i/loading/loading-64.gif" )
12087 +); ?>" /></p>
12088 <p style="font-size: 11pt; margin: 0;"><a href="https://wordpress.com/stats/<?php echo $domain; ?>" target="_blank"><?php esc_html_e( 'View stats on WordPress.com right now', 'jetpack' ); ?></a></p>
12089 <p class="hide-if-js"><?php esc_html_e( 'Your Site Stats work better with JavaScript enabled.', 'jetpack' ); ?><br />
12090 <a href="<?php echo esc_url( $nojs_url ); ?>"><?php esc_html_e( 'View Site Stats without JavaScript', 'jetpack' ); ?></a>.</p>
12091
12092 diff --git a/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css b/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css
12093 index 34b0c87..8b0efbd 100644
12094 --- a/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css
12095 +++ b/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css
12096 @@ -474,6 +474,7 @@ iframe[src^="http://api.mixcloud.com/"] {
12097 opacity: 0.2;
12098 position: absolute;
12099 top: 0;
12100 + right: 0;
12101 width: 100%;
12102 }
12103
12104
12105 diff --git a/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css b/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css
12106 index 58fd42f..cd99a23 100644
12107 --- a/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css
12108 +++ b/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css
12109 @@ -474,6 +474,7 @@ iframe[src^="http://api.mixcloud.com/"] {
12110 opacity: 0.2;
12111 position: absolute;
12112 top: 0;
12113 + left: 0;
12114 width: 100%;
12115 }
12116
12117
12118 diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery.php
12119 index ee7a0c5..3d89a07 100644
12120 --- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery.php
12121 +++ b/plugins/jetpack/modules/tiled-gallery/tiled-gallery.php
12122 @@ -42,8 +42,10 @@ class Jetpack_Tiled_Gallery {
12123 $this->float = is_rtl() ? 'right' : 'left';
12124
12125 // Default to rectangular is tiled galleries are checked
12126 - if ( $this->tiles_enabled() && ( ! $this->atts['type'] || 'default' == $this->atts['type'] ) )
12127 - $this->atts['type'] = 'rectangular';
12128 + if ( $this->tiles_enabled() && ( ! $this->atts['type'] || 'default' == $this->atts['type'] ) ) {
12129 + /** This filter is already documented in functions.gallery.php */
12130 + $this->atts['type'] = apply_filters( 'jetpack_default_gallery_type', 'rectangular' );
12131 + }
12132
12133 if ( !$this->atts['orderby'] ) {
12134 $this->atts['orderby'] = sanitize_sql_orderby( $this->atts['orderby'] );
12135
12136 diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php
12137 index b6d94c6..70666bd 100644
12138 --- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php
12139 +++ b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php
12140 @@ -21,8 +21,7 @@ abstract class Jetpack_Tiled_Gallery_Item {
12141 $this->orig_file = wp_get_attachment_url( $this->image->ID );
12142 $this->link = $needs_attachment_link ? get_attachment_link( $this->image->ID ) : $this->orig_file;
12143
12144 - $this->img_src = add_query_arg( array( 'w' => $this->image->width, 'h' => $this->image->height, 'crop' => true ), $this->orig_file );
12145 -
12146 + $this->img_src = jetpack_photon_url( $this->orig_file, array( 'resize' => sprintf( '%d,%d', $this->image->width, $this->image->height ) ) );
12147 }
12148
12149 public function fuzzy_image_meta() {
12150
12151 diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js
12152 index 12f49f1..44a79f7 100644
12153 --- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js
12154 +++ b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js
12155 @@ -160,7 +160,7 @@
12156 attachPlainResize( tiledGalleries );
12157 }
12158
12159 - if ( wp && wp.customize && wp.customizerHasPartialWidgetRefresh() ) {
12160 + if ( 'undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh ) {
12161 wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
12162 if ( wp.isJetpackWidgetPlaced( placement, 'gallery' ) ) {
12163 tiledGalleries.findAndSetupNewGalleries();
12164
12165 diff --git a/plugins/jetpack/modules/videopress.php b/plugins/jetpack/modules/videopress.php
12166 index cdbab44..88d6040 100644
12167 --- a/plugins/jetpack/modules/videopress.php
12168 +++ b/plugins/jetpack/modules/videopress.php
12169 @@ -10,15 +10,10 @@
12170 * Additional Search Queries: video, videos, videopress
12171 */
12172
12173 -Jetpack::dns_prefetch( array(
12174 - '//v0.wordpress.com',
12175 -) );
12176 -
12177 -/**
12178 - * We won't have any videos less than sixty pixels wide. That would be silly.
12179 - */
12180 -define( 'VIDEOPRESS_MIN_WIDTH', 60 );
12181 -
12182 include_once dirname( __FILE__ ) . '/videopress/utility-functions.php';
12183 include_once dirname( __FILE__ ) . '/videopress/shortcode.php';
12184 include_once dirname( __FILE__ ) . '/videopress/videopress.php';
12185 +
12186 +if ( is_admin() ) {
12187 + include_once dirname(__FILE__) . '/videopress/editor-media-view.php';
12188 +}
12189
12190 diff --git a/plugins/jetpack/modules/videopress/class.videopress-player.php b/plugins/jetpack/modules/videopress/class.videopress-player.php
12191 index 778d518..1a7f042 100644
12192 --- a/plugins/jetpack/modules/videopress/class.videopress-player.php
12193 +++ b/plugins/jetpack/modules/videopress/class.videopress-player.php
12194 @@ -143,14 +143,17 @@ class VideoPress_Player {
12195 * @return string HTML string or empty string if error
12196 */
12197 public function asXML() {
12198 - if ( empty( $this->video ) || is_wp_error( $this->video ) )
12199 + if ( empty( $this->video ) || is_wp_error( $this->video ) ) {
12200 return '';
12201 + }
12202
12203 - if ( isset( $this->options['freedom'] ) && $this->options['freedom'] === true )
12204 - $content = $this->html5_static();
12205 - else
12206 + if ( isset( $this->options['force_flash'] ) && true === $this->options['force_flash'] ) {
12207 $content = $this->flash_embed();
12208
12209 + } else {
12210 + $content = $this->html5_static();
12211 + }
12212 +
12213 return $this->html_wrapper( $content );
12214 }
12215
12216 @@ -162,20 +165,29 @@ class VideoPress_Player {
12217 public function asHTML() {
12218 if ( empty( $this->video ) ) {
12219 $content = '';
12220 +
12221 } elseif ( is_wp_error( $this->video ) ) {
12222 $content = $this->error_message( $this->video );
12223 - } elseif ( isset( $this->options['force_flash'] ) && $this->options['force_flash'] === true ) {
12224 +
12225 + } elseif ( isset( $this->options['force_flash'] ) && true === $this->options['force_flash'] ) {
12226 $content = $this->flash_object();
12227 - } elseif ( isset( $this->video->restricted_embed ) && $this->video->restricted_embed === true ) {
12228 - if( $this->options['forcestatic'] )
12229 +
12230 + } elseif ( isset( $this->video->restricted_embed ) && true === $this->video->restricted_embed ) {
12231 +
12232 + if ( $this->options['forcestatic'] ) {
12233 $content = $this->flash_object();
12234 - else
12235 +
12236 + } else {
12237 $content = $this->html5_dynamic();
12238 - } elseif ( isset( $this->options['freedom'] ) && $this->options['freedom'] === true ) {
12239 + }
12240 +
12241 + } elseif ( isset( $this->options['freedom'] ) && true === $this->options['freedom'] ) {
12242 $content = $this->html5_static();
12243 +
12244 } else {
12245 $content = $this->html5_dynamic();
12246 }
12247 +
12248 return $this->html_wrapper( $content );
12249 }
12250
12251
12252 diff --git a/plugins/jetpack/modules/videopress/css/editor.css b/plugins/jetpack/modules/videopress/css/editor.css
12253 new file mode 100644
12254 index 0000000..69b79df
12255 --- /dev/null
12256 +++ b/plugins/jetpack/modules/videopress/css/editor.css
12257 @@ -0,0 +1,59 @@
12258 +/* VideoPress Settings Modal style overrides */
12259 +.mce-videopress-field-guid,
12260 +.mce-videopress-field-freedom,
12261 +.mce-videopress-field-flashonly {
12262 + display: none;
12263 +}
12264 +
12265 +.mce-videopress-checkbox .mce-checkbox {
12266 + left: 120px !important;
12267 + width: 100% !important; /* assigning a full width so the label area is clickable */
12268 +}
12269 +
12270 +.mce-videopress-checkbox .mce-label {
12271 + left: 150px !important;
12272 +}
12273 +
12274 +.mce-videopress-checkbox .mce-label-unit {
12275 + position: absolute;
12276 + left: 210px;
12277 + top: 5px;
12278 +}
12279 +
12280 +.mce-videopress-checkbox i.mce-i-checkbox {
12281 + background-color: #fff;
12282 + color: #1e8cbe;
12283 +}
12284 +
12285 +.mce-videopress-checkbox .mce-i-checkbox:before {
12286 + display: inline-block;
12287 + vertical-align: middle;
12288 + width: 16px;
12289 + font: 400 21px/1 dashicons;
12290 + speak: none;
12291 + -webkit-font-smoothing: antialiased;
12292 + -moz-osx-font-smoothing: grayscale;
12293 + margin: -3px 0 0 -3px;
12294 + content: "\f147";
12295 +}
12296 +
12297 +.mce-videopress-checkbox .mce-i-checkbox.mce-checked:before {
12298 + content: "\f147";
12299 +}
12300 +
12301 +div[class*=mce-videopress-field] input[type=number] {
12302 + width: 70px !important;
12303 + left: 120px !important;
12304 +}
12305 +
12306 +.mce-videopress-field-w .mce-label,
12307 +.mce-videopress-field-at .mce-label {
12308 + width: 115px !important;
12309 + text-align: right;
12310 +}
12311 +
12312 +.mce-videopress-field-unit {
12313 + position: absolute;
12314 + left: 210px;
12315 + top: 5px;
12316 +}
12317
12318 diff --git a/plugins/jetpack/modules/videopress/videopress-editor-style.css b/plugins/jetpack/modules/videopress/css/videopress-editor-style.css
12319 similarity index 100%
12320 rename from plugins/jetpack/modules/videopress/videopress-editor-style.css
12321 rename to plugins/jetpack/modules/videopress/css/videopress-editor-style.css
12322
12323 diff --git a/plugins/jetpack/modules/videopress/editor-media-view.php b/plugins/jetpack/modules/videopress/editor-media-view.php
12324 new file mode 100644
12325 index 0000000..13f72f7
12326 --- /dev/null
12327 +++ b/plugins/jetpack/modules/videopress/editor-media-view.php
12328 @@ -0,0 +1,213 @@
12329 +<?php
12330 +
12331 +/**
12332 + * WordPress Shortcode Editor View JS Code
12333 + */
12334 +function videopress_handle_editor_view_js() {
12335 + global $content_width;
12336 + $current_screen = get_current_screen();
12337 + if ( ! isset( $current_screen->id ) || $current_screen->base !== 'post' ) {
12338 + return;
12339 + }
12340 +
12341 + add_action( 'admin_print_footer_scripts', 'videopress_editor_view_js_templates' );
12342 +
12343 + wp_enqueue_style( 'videopress-editor-ui', plugins_url( 'css/editor.css', __FILE__ ) );
12344 + wp_enqueue_script( 'videopress-editor-view', plugins_url( 'js/editor-view.js', __FILE__ ), array( 'wp-util', 'jquery' ), false, true );
12345 + wp_localize_script( 'videopress-editor-view', 'vpEditorView', array(
12346 + 'home_url_host' => parse_url( home_url(), PHP_URL_HOST ),
12347 + 'min_content_width' => VIDEOPRESS_MIN_WIDTH,
12348 + 'content_width' => $content_width,
12349 + 'modal_labels' => array(
12350 + 'title' => esc_html__( 'VideoPress Shortcode', 'jetpack' ),
12351 + 'guid' => esc_html__( 'Video ID', 'jetpack' ),
12352 + 'w' => esc_html__( 'Video Width', 'jetpack' ),
12353 + 'w_unit' => esc_html__( 'pixels', 'jetpack' ),
12354 + /* Translators: example of usage of this is "Start Video After 10 seconds" */
12355 + 'at' => esc_html__( 'Start Video After', 'jetpack' ),
12356 + 'at_unit' => esc_html__( 'seconds', 'jetpack' ),
12357 + 'hd' => esc_html__( 'High definition on by default', 'jetpack' ),
12358 + 'permalink' => esc_html__( 'Link the video title to its URL on VideoPress.com', 'jetpack' ),
12359 + 'autoplay' => esc_html__( 'Autoplay video on page load', 'jetpack' ),
12360 + 'loop' => esc_html__( 'Loop video playback', 'jetpack' ),
12361 + 'freedom' => esc_html__( 'Use only Open Source codecs (may degrade performance)', 'jetpack' ),
12362 + 'flashonly' => esc_html__( 'Use legacy Flash Player (not recommended)', 'jetpack' ),
12363 + )
12364 + ) );
12365 +
12366 + add_editor_style( plugins_url( 'css/videopress-editor-style.css', __FILE__ ) );
12367 +}
12368 +add_action( 'admin_notices', 'videopress_handle_editor_view_js' );
12369 +
12370 +/**
12371 + * WordPress Editor Views
12372 + */
12373 +function videopress_editor_view_js_templates() {
12374 + /**
12375 + * This template uses the following parameters, and displays the video as an iframe:
12376 + * - data.guid // The guid of the video.
12377 + * - data.width // The width of the iframe.
12378 + * - data.height // The height of the iframe.
12379 + * - data.urlargs // Arguments serialized into a get string.
12380 + *
12381 + * In addition, the calling script will need to ensure that the following
12382 + * JS file is added to the header of the editor iframe:
12383 + * - https://s0.wp.com/wp-content/plugins/video/assets/js/next/videopress-iframe.js
12384 + */
12385 + ?>
12386 + <script type="text/html" id="tmpl-videopress_iframe_vnext">
12387 + <div class="tmpl-videopress_iframe_next" style="max-height:{{ data.height }}px;">
12388 + <div class="videopress-editor-wrapper" style="padding-top:{{ data.ratio }}%;">
12389 + <iframe style="display: block;" width="{{ data.width }}" height="{{ data.height }}" src="https://videopress.com/embed/{{ data.guid }}?{{ data.urlargs }}" frameborder='0' allowfullscreen></iframe>
12390 + </div>
12391 + </div>
12392 + </script>
12393 + <?php
12394 +}
12395 +
12396 +/*************************************************\
12397 +| This is the chunk that handles overriding core |
12398 +| media stuff so VideoPress can display natively. |
12399 +\*************************************************/
12400 +
12401 +/**
12402 + * Media Grid:
12403 + * Filter out any videopress video posters that we've downloaded,
12404 + * so that they don't seem to display twice.
12405 + */
12406 +add_filter( 'ajax_query_attachments_args', 'videopress_ajax_query_attachments_args' );
12407 +function videopress_ajax_query_attachments_args( $args ) {
12408 + $meta_query = array(
12409 + array(
12410 + 'key' => 'videopress_poster_image',
12411 + 'compare' => 'NOT EXISTS',
12412 + ),
12413 + );
12414 +
12415 + // If there was already a meta query, let's AND it via
12416 + // nesting it with our new one. No need to specify the
12417 + // relation, as it defaults to AND.
12418 + if ( ! empty( $args['meta_query'] ) ) {
12419 + $meta_query[] = $args['meta_query'];
12420 + }
12421 + $args['meta_query'] = $meta_query;
12422 +
12423 + return $args;
12424 +}
12425 +
12426 +/**
12427 + * Media List:
12428 + * Do the same as ^^ but for the list view.
12429 + */
12430 +add_action( 'pre_get_posts', 'videopress_media_list_table_query' );
12431 +function videopress_media_list_table_query( $query ) {
12432 + if ( is_admin() && $query->is_main_query() && ( 'upload' === get_current_screen()->id ) ) {
12433 + $meta_query = array(
12434 + array(
12435 + 'key' => 'videopress_poster_image',
12436 + 'compare' => 'NOT EXISTS',
12437 + ),
12438 + );
12439 +
12440 + if ( $old_meta_query = $query->get( 'meta_query' ) ) {
12441 + $meta_query[] = $old_meta_query;
12442 + }
12443 +
12444 + $query->set( 'meta_query', $meta_query );
12445 + }
12446 +}
12447 +
12448 +/**
12449 + * Make sure that any Video that has a VideoPress GUID passes that data back.
12450 + */
12451 +add_filter( 'wp_prepare_attachment_for_js', 'videopress_prepare_attachment_for_js' );
12452 +function videopress_prepare_attachment_for_js( $post ) {
12453 + if ( 'video' === $post['type'] ) {
12454 + $guid = get_post_meta( $post['id'], 'videopress_guid' );
12455 + if ( $guid ) {
12456 + $post['videopress_guid'] = $guid;
12457 + }
12458 + }
12459 + return $post;
12460 +}
12461 +
12462 +/**
12463 + * Wherever the Media Modal is deployed, also deploy our overrides.
12464 + */
12465 +add_action( 'wp_enqueue_media', 'add_videopress_media_overrides' );
12466 +function add_videopress_media_overrides() {
12467 + add_action( 'admin_print_footer_scripts', 'videopress_override_media_templates', 11 );
12468 +}
12469 +
12470 +/**
12471 + * Our video overrides!
12472 + *
12473 + * We have a template for the iframe to get injected.
12474 + */
12475 +function videopress_override_media_templates(){
12476 + ?>
12477 + <script type="text/html" id="tmpl-videopress_iframe_vnext">
12478 + <iframe style="display: block; max-width: 100%;" width="{{ data.width }}" height="{{ data.height }}" src="https://videopress.com/embed/{{ data.guid }}?{{ data.urlargs }}" frameborder='0' allowfullscreen></iframe>
12479 + </script>
12480 + <script>
12481 + (function( media ){
12482 + // This handles the media library modal attachment details display.
12483 + if ( 'undefined' !== typeof media.view.Attachment.Details.TwoColumn ) {
12484 + var TwoColumn = media.view.Attachment.Details.TwoColumn,
12485 + old_render = TwoColumn.prototype.render,
12486 + vp_template = wp.template('videopress_iframe_vnext');
12487 +
12488 + TwoColumn.prototype.render = function() {
12489 + // Have the original renderer run first.
12490 + old_render.apply( this, arguments );
12491 +
12492 + // Now our stuff!
12493 + if ( 'video' === this.model.get('type') ) {
12494 + if ( this.model.get('videopress_guid') ) {
12495 + this.$('.attachment-media-view .thumbnail-video').html( vp_template( {
12496 + guid : this.model.get('videopress_guid'),
12497 + width : this.model.get('width'),
12498 + height : this.model.get('height')
12499 + }));
12500 + }
12501 + }
12502 + };
12503 + } else { /* console.log( 'media.view.Attachment.Details.TwoColumn undefined' ); */ }
12504 +
12505 + // This handles the recreating of the core video shortcode when editing the mce embed.
12506 + if ( 'undefined' !== typeof media.video ) {
12507 + media.video.defaults.videopress_guid = '';
12508 +
12509 + // For some reason, even though we're not currently changing anything, the following proxy
12510 + // function is necessary to include the above default `videopress_guid` param. ¯\_(ツ)_/¯
12511 + var old_video_shortcode = media.video.shortcode;
12512 + media.video.shortcode = function( model ) {
12513 + // model.videopress_guid = 'FOOBAR';
12514 + return old_video_shortcode( model );
12515 + };
12516 + } else { /* console.log( 'media.video undefined' ); */ }
12517 +
12518 + })( wp.media );
12519 + </script>
12520 + <?php
12521 +}
12522 +
12523 +/**
12524 + * Properly inject VideoPress data into Core shortcodes, and
12525 + * generate videopress shortcodes for purely remote videos.
12526 + */
12527 +add_filter( 'media_send_to_editor', 'videopress_media_send_to_editor', 10, 3 );
12528 +function videopress_media_send_to_editor( $html, $id, $attachment ) {
12529 + $videopress_guid = get_post_meta( $id, 'videopress_guid', true );
12530 + if ( $videopress_guid && videopress_is_valid_guid( $videopress_guid ) ) {
12531 + if ( '[video ' === substr( $html, 0, 7 ) ) {
12532 + $replace = sprintf( ' videopress_guid="%1$s"][/video]', esc_attr( $videopress_guid ) );
12533 + $html = str_replace( '][/video]', $replace, $html );
12534 + } elseif ( '<a href=' === substr( $html, 0, 8 ) ) {
12535 + // We got here because `wp_attachment_is()` returned false for
12536 + // video, because there isn't a local copy of the file.
12537 + $html = sprintf( '[videopress %1$s]', esc_attr( $videopress_guid ) );
12538 + }
12539 + }
12540 + return $html;
12541 +}
12542 \ No newline at end of file
12543
12544 diff --git a/plugins/jetpack/modules/videopress/js/videopress-admin.js b/plugins/jetpack/modules/videopress/js/videopress-admin.js
12545 index c785111..5daac4f 100644
12546 --- a/plugins/jetpack/modules/videopress/js/videopress-admin.js
12547 +++ b/plugins/jetpack/modules/videopress/js/videopress-admin.js
12548 @@ -1,5 +1,5 @@
12549 /* jshint onevar: false, smarttabs: true, devel: true */
12550 -/* global VideoPressAdminSettings, setUserSetting */
12551 +/* global VideoPressAdminSettings, setUserSetting, JSON */
12552
12553 /**
12554 * VideoPress Admin
12555
12556 diff --git a/plugins/jetpack/modules/videopress/shortcode.php b/plugins/jetpack/modules/videopress/shortcode.php
12557 index a9dd148..39211e4 100644
12558 --- a/plugins/jetpack/modules/videopress/shortcode.php
12559 +++ b/plugins/jetpack/modules/videopress/shortcode.php
12560 @@ -139,117 +139,52 @@ function videopress_add_oembed_for_parameter( $oembed_provider ) {
12561 add_filter( 'oembed_fetch_url', 'videopress_add_oembed_for_parameter' );
12562
12563 /**
12564 - * WordPress Shortcode Editor View JS Code
12565 - */
12566 -function videopress_handle_editor_view_js() {
12567 - global $content_width;
12568 - $current_screen = get_current_screen();
12569 - if ( ! isset( $current_screen->id ) || $current_screen->base !== 'post' ) {
12570 - return;
12571 + * An intermediary shortcode parser for the Core `[video]` shortcode.
12572 + *
12573 + * This lets us convert legacy video embeds over to VideoPress embeds,
12574 + * if the video files have been uploaded and transcoded.
12575 + *
12576 + * @param $attr
12577 + *
12578 + * @return string|void
12579 + * /
12580 +function videopress_shortcode_override_for_core_shortcode( $raw_attr, $contents, $tag ) {
12581 + $attr = $raw_attr;
12582 + $videopress_guid = false;
12583 +
12584 + if ( isset( $attr['videopress_guid'] ) ) {
12585 + $videopress_guid = $attr['videopress_guid'];
12586 }
12587
12588 - add_action( 'admin_print_footer_scripts', 'videopress_editor_view_js_templates' );
12589 -
12590 - wp_enqueue_script( 'videopress-editor-view', plugins_url( 'js/editor-view.js', __FILE__ ), array( 'wp-util', 'jquery' ), false, true );
12591 - wp_localize_script( 'videopress-editor-view', 'vpEditorView', array(
12592 - 'home_url_host' => parse_url( home_url(), PHP_URL_HOST ),
12593 - 'min_content_width' => VIDEOPRESS_MIN_WIDTH,
12594 - 'content_width' => $content_width,
12595 - 'modal_labels' => array(
12596 - 'title' => esc_html__( 'VideoPress Shortcode', 'jetpack' ),
12597 - 'guid' => esc_html__( 'Video ID', 'jetpack' ),
12598 - 'w' => esc_html__( 'Video Width', 'jetpack' ),
12599 - 'w_unit' => esc_html__( 'pixels', 'jetpack' ),
12600 - /* Translators: example of usage of this is "Start Video After 10 seconds" */
12601 - 'at' => esc_html__( 'Start Video After', 'jetpack' ),
12602 - 'at_unit' => esc_html__( 'seconds', 'jetpack' ),
12603 - 'hd' => esc_html__( 'High definition on by default', 'jetpack' ),
12604 - 'permalink' => esc_html__( 'Link the video title to its URL on VideoPress.com', 'jetpack' ),
12605 - 'autoplay' => esc_html__( 'Autoplay video on page load', 'jetpack' ),
12606 - 'loop' => esc_html__( 'Loop video playback', 'jetpack' ),
12607 - 'freedom' => esc_html__( 'Use only Open Source codecs (may degrade performance)', 'jetpack' ),
12608 - 'flashonly' => esc_html__( 'Use legacy Flash Player (not recommended)', 'jetpack' ),
12609 - )
12610 - ) );
12611 -
12612 - add_editor_style( plugins_url( 'videopress-editor-style.css', __FILE__ ) );
12613 -}
12614 -add_action( 'admin_notices', 'videopress_handle_editor_view_js' );
12615 -
12616 -/**
12617 - * WordPress Editor Views
12618 - */
12619 -function videopress_editor_view_js_templates() {
12620 - /**
12621 - * This template uses the following parameters, and displays the video as an iframe:
12622 - * - data.guid // The guid of the video.
12623 - * - data.width // The width of the iframe.
12624 - * - data.height // The height of the iframe.
12625 - * - data.urlargs // Arguments serialized into a get string.
12626 - *
12627 - * In addition, the calling script will need to ensure that the following
12628 - * JS file is added to the header of the editor iframe:
12629 - * - https://s0.wp.com/wp-content/plugins/video/assets/js/next/videopress-iframe.js
12630 - */
12631 - ?>
12632 - <script type="text/html" id="tmpl-videopress_iframe_vnext">
12633 - <div class="tmpl-videopress_iframe_next" style="max-height:{{ data.height }}px;">
12634 - <div class="videopress-editor-wrapper" style="padding-top:{{ data.ratio }}%;">
12635 - <iframe style="display: block;" width="{{ data.width }}" height="{{ data.height }}" src="https://videopress.com/embed/{{ data.guid }}?{{ data.urlargs }}" frameborder='0' allowfullscreen></iframe>
12636 - </div>
12637 - </div>
12638 - </script>
12639 -
12640 - <!-- VideoPress Settings Modal style overrides -->
12641 - <style type="text/css">
12642 - .mce-videopress-field-guid, .mce-videopress-field-freedom, .mce-videopress-field-flashonly {
12643 - display: none;
12644 - }
12645 - .mce-videopress-checkbox .mce-checkbox {
12646 - left: 120px !important;
12647 - width: 100% !important; /* assigning a full width so the label area is clickable */
12648 - }
12649 + // If we can find a local media item from the provided url…
12650 + $media_id = videopress_get_attachment_id_by_url( $attr['src'] );
12651 + if ( $media_id ) {
12652 + // And that local media item has a VideoPress GUID attached to it…
12653 + $videopress_guid = get_post_meta( $media_id, 'videopress_guid', true );
12654 + }
12655
12656 - .mce-videopress-checkbox .mce-label {
12657 - left: 150px !important;
12658 - }
12659 - .mce-videopress-checkbox .mce-label-unit {
12660 - position: absolute;
12661 - left: 210px;
12662 - top: 5px;
12663 - }
12664 - .mce-videopress-checkbox i.mce-i-checkbox {
12665 - background-color: #fff;
12666 - color: #1e8cbe;
12667 + if ( $videopress_guid ) {
12668 + $videopress_attr = array( $videopress_guid );
12669 + if ( $attr['width'] ) {
12670 + $videopress_attr['w'] = (int) $attr['width'];
12671 }
12672 - .mce-videopress-checkbox .mce-i-checkbox:before {
12673 - display: inline-block;
12674 - vertical-align: middle;
12675 - width: 16px;
12676 - font: 400 21px/1 dashicons;
12677 - speak: none;
12678 - -webkit-font-smoothing: antialiased;
12679 - -moz-osx-font-smoothing: grayscale;
12680 - margin: -3px 0 0 -3px;
12681 - content: "\f147";
12682 + if ( $attr['autoplay'] ) {
12683 + $videopress_attr['autoplay'] = $attr['autoplay'];
12684 }
12685 - .mce-videopress-checkbox .mce-i-checkbox.mce-checked:before {
12686 - content: "\f147";
12687 + if ( $attr['loop'] ) {
12688 + $videopress_attr['loop'] = $attr['loop'];
12689 }
12690 - div[class*=mce-videopress-field] input[type=number] {
12691 - width: 70px !important;
12692 - left: 120px !important;
12693 - }
12694 - .mce-videopress-field-w .mce-label,
12695 - .mce-videopress-field-at .mce-label {
12696 - width: 115px !important;
12697 - text-align: right;
12698 - }
12699 - .mce-videopress-field-unit {
12700 - position: absolute;
12701 - left: 210px;
12702 - top: 5px;
12703 - }
12704 - </style>
12705 - <?php
12706 +
12707 + // Then display the VideoPress version of the stored GUID!
12708 + return videopress_shortcode_callback( $videopress_attr );
12709 + }
12710 +
12711 + // Nothing else caught, so fall back to the core shortcode.
12712 + return call_user_func( $GLOBALS['vp_original_video_shortcode_callback'], $raw_attr, $contents, $tag );
12713 }
12714 +// The callback should nearly always be `wp_video_shortcode` unless some other plugin
12715 +// has overridden it similarly to what we're doing here.
12716 +$GLOBALS['vp_original_video_shortcode_callback'] = $GLOBALS['shortcode_tags']['video'];
12717 +remove_shortcode( 'video' );
12718 +add_shortcode( 'video', 'videopress_shortcode_override_for_core_shortcode' );
12719 +/**/
12720
12721 diff --git a/plugins/jetpack/modules/videopress/utility-functions.php b/plugins/jetpack/modules/videopress/utility-functions.php
12722 index 99eb755..1c02b68 100644
12723 --- a/plugins/jetpack/modules/videopress/utility-functions.php
12724 +++ b/plugins/jetpack/modules/videopress/utility-functions.php
12725 @@ -1,4 +1,8 @@
12726 <?php
12727 +/**
12728 + * We won't have any videos less than sixty pixels wide. That would be silly.
12729 + */
12730 +defined( 'VIDEOPRESS_MIN_WIDTH' ) or define( 'VIDEOPRESS_MIN_WIDTH', 60 );
12731
12732 /**
12733 * Validate user-supplied guid values against expected inputs
12734 @@ -97,3 +101,104 @@ function videopress_get_attachment_id_by_url( $url ) {
12735 }
12736 return false;
12737 }
12738 +
12739 +/**
12740 + * Similar to `media_sideload_image` -- but returns an ID.
12741 + *
12742 + * @param $url
12743 + * @param $attachment_id
12744 + *
12745 + * @return int|mixed|object|WP_Error
12746 + */
12747 +function videopress_download_poster_image( $url, $attachment_id ) {
12748 + // Set variables for storage, fix file filename for query strings.
12749 + preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $url, $matches );
12750 + if ( ! $matches ) {
12751 + return new WP_Error( 'image_sideload_failed', __( 'Invalid image URL' ) );
12752 + }
12753 +
12754 + $file_array = array();
12755 + $file_array['name'] = basename( $matches[0] );
12756 + $file_array['tmp_name'] = download_url( $url );
12757 +
12758 + // If error storing temporarily, return the error.
12759 + if ( is_wp_error( $file_array['tmp_name'] ) ) {
12760 + return $file_array['tmp_name'];
12761 + }
12762 +
12763 + // Do the validation and storage stuff.
12764 + $thumbnail_id = media_handle_sideload( $file_array, $attachment_id, null );
12765 +
12766 + // Flag it as poster image, so we can exclude it from display.
12767 + update_post_meta( $thumbnail_id, 'videopress_poster_image', 1 );
12768 +
12769 + return $thumbnail_id;
12770 +}
12771 +
12772 +/**
12773 + * Creates a local media library item of a remote VideoPress video.
12774 + *
12775 + * @param $guid
12776 + * @param int $parent_id
12777 + *
12778 + * @return int|object
12779 + */
12780 +function create_local_media_library_for_videopress_guid( $guid, $parent_id = 0 ) {
12781 + $vp_data = videopress_get_video_details( $guid );
12782 + if ( ! $vp_data || is_wp_error( $vp_data ) ) {
12783 + return $vp_data;
12784 + }
12785 +
12786 + $args = array(
12787 + 'post_date' => $vp_data->upload_date,
12788 + 'post_title' => wp_kses( $vp_data->title, array() ),
12789 + 'post_content' => wp_kses( $vp_data->description, array() ),
12790 + 'post_mime_type' => 'video/videopress',
12791 + 'guid' => sprintf( 'https://videopress.com/v/%s', $guid ),
12792 + );
12793 +
12794 + $attachment_id = wp_insert_attachment( $args, null, $parent_id );
12795 +
12796 + if ( ! is_wp_error( $attachment_id ) ) {
12797 + update_post_meta( $attachment_id, 'videopress_guid', $guid );
12798 + wp_update_attachment_metadata( $attachment_id, array(
12799 + 'width' => $vp_data->width,
12800 + 'height' => $vp_data->height,
12801 + ) );
12802 +
12803 + $thumbnail_id = videopress_download_poster_image( $vp_data->poster, $attachment_id );
12804 + update_post_meta( $attachment_id, '_thumbnail_id', $thumbnail_id );
12805 + }
12806 +
12807 + return $attachment_id;
12808 +}
12809 +
12810 +if ( defined( 'WP_CLI' ) && WP_CLI ) {
12811 + /**
12812 + * Manage and import VideoPress videos.
12813 + */
12814 + class VideoPress_CLI extends WP_CLI_Command {
12815 + /**
12816 + * Import a VideoPress Video
12817 + *
12818 + * ## OPTIONS
12819 + *
12820 + * <guid>: Import the video with the specified guid
12821 + *
12822 + * ## EXAMPLES
12823 + *
12824 + * wp videopress import kUJmAcSf
12825 + *
12826 + */
12827 + public function import( $args ) {
12828 + $guid = $args[0];
12829 + $attachment_id = create_local_media_library_for_videopress_guid( $guid );
12830 + if ( $attachment_id && ! is_wp_error( $attachment_id ) ) {
12831 + WP_CLI::success( sprintf( __( 'The video has been imported as Attachment ID %d', 'jetpack' ), $attachment_id ) );
12832 + } else {
12833 + WP_CLI::error( __( 'An error has been encountered.', 'jetpack' ) );
12834 + }
12835 + }
12836 + }
12837 + WP_CLI::add_command( 'videopress', 'VideoPress_CLI' );
12838 +}
12839
12840 diff --git a/plugins/jetpack/modules/videopress/videopress.php b/plugins/jetpack/modules/videopress/videopress.php
12841 index 274b740..80a589f 100644
12842 --- a/plugins/jetpack/modules/videopress/videopress.php
12843 +++ b/plugins/jetpack/modules/videopress/videopress.php
12844 @@ -59,6 +59,7 @@ class Jetpack_VideoPress {
12845 }
12846
12847 add_filter( 'videopress_shortcode_options', array( $this, 'videopress_shortcode_options' ) );
12848 + add_filter( 'jetpack_xmlrpc_methods', array( $this, 'xmlrpc_methods' ) );
12849 }
12850
12851 function wp_ajax_videopress_get_upload_token() {
12852 @@ -731,6 +732,114 @@ class Jetpack_VideoPress {
12853 return $options;
12854 }
12855
12856 + /**
12857 + * Adds additional methods the WordPress xmlrpc API for handling VideoPress specific features
12858 + *
12859 + * @param array $methods
12860 + * @return array
12861 + */
12862 + public function xmlrpc_methods( $methods ) {
12863 +
12864 + $methods['jetpack.createMediaItem'] = array( $this, 'xmlrpc_create_media_item' );
12865 + $methods['jetpack.updateVideoPressInfo'] = array( $this, 'xmlrpc_update_videopress_info' );
12866 +
12867 + return $methods;
12868 + }
12869 +
12870 + /**
12871 + * Endpoint to allow the transcoding session to send updated information about the VideoPress video when it completes a stage of transcoding.
12872 + *
12873 + * @param array $vp_info
12874 + *
12875 + * @return array|bool
12876 + */
12877 + public function xmlrpc_update_videopress_info( $vp_info ) {
12878 +
12879 + $errors = null;
12880 + foreach ( $vp_info as $vp_item ) {
12881 + $id = $vp_item['post_id'];
12882 + $guid = $vp_item['guid'];
12883 +
12884 + $post = get_post( $id );
12885 +
12886 + if ( ! $post ) {
12887 + $errors[] = array(
12888 + 'id' => $id,
12889 + 'error' => 'Post not found',
12890 + );
12891 +
12892 + continue;
12893 + }
12894 +
12895 + $post->guid = $vp_item['original'];
12896 + $post->file = $vp_item['original'];
12897 +
12898 + wp_update_post( $post );
12899 +
12900 + // Update the vp guid and set it to a dirrect meta property.
12901 + update_post_meta( $id, 'videopress_guid', $guid );
12902 +
12903 + $meta = wp_get_attachment_metadata( $post->ID );
12904 + $meta['width'] = $vp_item['width'];
12905 + $meta['height'] = $vp_item['height'];
12906 + $meta['original']['url'] = $vp_item['original'];
12907 + $meta['videopress'] = $vp_item;
12908 + $meta['videopress']['url'] = 'https://videopress.com/v/' . $guid;
12909 +
12910 + // TODO: Add poster updating.
12911 +
12912 + wp_update_attachment_metadata( $post->ID, $meta );
12913 + }
12914 +
12915 + if ( count( $errors ) > 0 ) {
12916 + return array( 'errors' => $errors );
12917 +
12918 + } else {
12919 + return true;
12920 + }
12921 + }
12922 +
12923 + /**
12924 + * This is used by the WPCOM VideoPress uploader in order to create a media item with
12925 + * specific meta data about an uploaded file. After this, the transcoding session will
12926 + * update the meta information via the xmlrpc_update_videopress_info() method.
12927 + *
12928 + * Note: This method technically handles the creation of multiple media objects, though
12929 + * in practice this is never done.
12930 + *
12931 + * @param array $media
12932 + *
12933 + * @return array
12934 + */
12935 + public function xmlrpc_create_media_item( $media ) {
12936 + $created_items = array();
12937 +
12938 + foreach ( $media as $media_item ) {
12939 + $post = array(
12940 + 'post_type' => 'attachment',
12941 + 'post_mime_type' => 'video/videopress',
12942 + 'post_title' => sanitize_title( basename( $media_item['url'] ) ),
12943 + 'post_content' => '',
12944 + );
12945 +
12946 + $media_id = wp_insert_post( $post );
12947 +
12948 + wp_update_attachment_metadata( $media_id, array(
12949 + 'original' => array(
12950 + 'url' => $media_item['url'],
12951 + 'file' => $media_item['file'],
12952 + 'mime_type' => $media_item['type'],
12953 + ),
12954 + ) );
12955 +
12956 + $created_items[] = array(
12957 + 'id' => $media_id,
12958 + 'post' => get_post( $media_id ),
12959 + );
12960 + }
12961 +
12962 + return array( 'media' => $created_items );
12963 + }
12964 }
12965
12966 // Initialize the module.
12967
12968 diff --git a/plugins/jetpack/modules/widgets/contact-info.php b/plugins/jetpack/modules/widgets/contact-info.php
12969 index 5457f52..552f9b9 100644
12970 --- a/plugins/jetpack/modules/widgets/contact-info.php
12971 +++ b/plugins/jetpack/modules/widgets/contact-info.php
12972 @@ -18,9 +18,7 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
12973
12974 /**
12975 * Constructor
12976 - *
12977 - * @return void
12978 - **/
12979 + */
12980 function __construct() {
12981 $widget_ops = array(
12982 'classname' => 'widget_contact_info',
12983 @@ -44,8 +42,22 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
12984 * Enqueue scripts and styles.
12985 */
12986 public function enqueue_scripts() {
12987 + $google_url = 'https://maps.googleapis.com/maps/api/js';
12988 + /**
12989 + * Set a Google Maps API Key.
12990 + *
12991 + * @since 4.1.0
12992 + *
12993 + * @param string $key Google Maps API Key
12994 + */
12995 + $key = apply_filters( 'jetpack_google_maps_api_key', null );
12996 +
12997 + if ( ! empty( $key ) ) {
12998 + $google_url = add_query_arg( 'key', $key, $google_url );
12999 + }
13000 +
13001 wp_enqueue_script( 'jquery' );
13002 - wp_enqueue_script( 'google-maps', 'https://maps.googleapis.com/maps/api/js?sensor=false' );
13003 + wp_enqueue_script( 'google-maps', esc_url( $google_url, null, null ) );
13004 wp_enqueue_script( 'contact-info-map-js', plugins_url( 'contact-info/contact-info-map.js', __FILE__ ), array( 'jquery', 'google-maps' ), 20150127 );
13005 wp_enqueue_style( 'contact-info-map-css', plugins_url( 'contact-info/contact-info-map.css', __FILE__ ), null, 20150127 );
13006 }
13007 @@ -68,22 +80,23 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
13008 'lon' => null
13009 );
13010 }
13011 +
13012 /**
13013 * Outputs the HTML for this widget.
13014 *
13015 - * @param array An array of standard parameters for widgets in this theme
13016 - * @param array An array of settings for this widget instance
13017 + * @param array $args An array of standard parameters for widgets in this theme
13018 + * @param array $instance An array of settings for this widget instance
13019 + *
13020 * @return void Echoes it's output
13021 **/
13022 function widget( $args, $instance ) {
13023 $instance = wp_parse_args( $instance, $this->defaults() );
13024
13025 - extract( $args, EXTR_SKIP );
13026 + echo $args['before_widget'];
13027
13028 - echo $before_widget;
13029 -
13030 - if ( $instance['title'] != '' )
13031 - echo $before_title . $instance['title'] . $after_title;
13032 + if ( '' != $instance['title'] ) {
13033 + echo $args['before_title'] . $instance['title'] . $args['after_title'];
13034 + }
13035
13036 /**
13037 * Fires at the beginning of the Contact Info widget, after the title.
13038 @@ -94,10 +107,7 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
13039 */
13040 do_action( 'jetpack_contact_info_widget_start' );
13041
13042 - $map_link = 0;
13043 -
13044 -
13045 - if ( $instance['address'] != '' ) {
13046 + if ( '' != $instance['address'] ) {
13047
13048 $showmap = $instance['showmap'];
13049
13050 @@ -112,27 +122,21 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
13051 $map_link = $this->build_map_link( $instance['address'] );
13052
13053 echo '<div class="confit-address"><a href="' . esc_url( $map_link ) . '" target="_blank">' . str_replace( "\n", "<br/>", esc_html( $instance['address'] ) ) . "</a></div>";
13054 -
13055 -
13056 }
13057
13058 -
13059 - if ( $instance['phone'] != '' ) {
13060 -
13061 - if( wp_is_mobile() ) {
13062 - echo '<div class="confit-phone"><a href="'. esc_url( 'tel:'. $instance['phone'] ) . '">' . esc_html( $instance['phone'] ) . "</a></div>";
13063 - } else {
13064 + if ( '' != $instance['phone'] ) {
13065 + if ( wp_is_mobile() ) {
13066 + echo '<div class="confit-phone"><a href="' . esc_url( 'tel:' . $instance['phone'] ) . '">' . esc_html( $instance['phone'] ) . "</a></div>";
13067 + }
13068 + else {
13069 echo '<div class="confit-phone">' . esc_html( $instance['phone'] ) . '</div>';
13070 }
13071 -
13072 }
13073
13074 -
13075 - if ( $instance['hours'] != '' ) {
13076 + if ( '' != $instance['hours'] ) {
13077 echo '<div class="confit-hours">' . str_replace( "\n", "<br/>", esc_html( $instance['hours'] ) ) . "</div>";
13078 }
13079
13080 -
13081 /**
13082 * Fires at the end of Contact Info widget.
13083 *
13084 @@ -142,29 +146,35 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
13085 */
13086 do_action( 'jetpack_contact_info_widget_end' );
13087
13088 -
13089 - echo $after_widget;
13090 -
13091 + echo $args['after_widget'];
13092 }
13093
13094
13095 /**
13096 * Deals with the settings when they are saved by the admin. Here is
13097 * where any validation should be dealt with.
13098 - **/
13099 + *
13100 + * @param array $new_instance New configuration values
13101 + * @param array $old_instance Old configuration values
13102 + *
13103 + * @return array
13104 + */
13105 function update( $new_instance, $old_instance ) {
13106 $update_lat_lon = false;
13107 - if ( $this->urlencode_address( $old_instance['address'] ) != $this->urlencode_address( $new_instance['address'] ) ) {
13108 + if (
13109 + ! isset( $old_instance['address'] ) ||
13110 + $this->urlencode_address( $old_instance['address'] ) != $this->urlencode_address( $new_instance['address'] )
13111 + ) {
13112 $update_lat_lon = true;
13113 }
13114
13115 - $instance = array();
13116 - $instance['title'] = wp_kses( $new_instance['title'], array() );
13117 + $instance = array();
13118 + $instance['title'] = wp_kses( $new_instance['title'], array() );
13119 $instance['address'] = wp_kses( $new_instance['address'], array() );
13120 - $instance['phone'] = wp_kses( $new_instance['phone'], array() );
13121 - $instance['hours'] = wp_kses( $new_instance['hours'], array() );
13122 - $instance['lat'] = isset( $old_instance['lat'] ) ? floatval( $old_instance['lat'] ) : 0;
13123 - $instance['lon'] = isset( $old_instance['lon'] ) ? floatval( $old_instance['lon'] ) : 0;
13124 + $instance['phone'] = wp_kses( $new_instance['phone'], array() );
13125 + $instance['hours'] = wp_kses( $new_instance['hours'], array() );
13126 + $instance['lat'] = isset( $old_instance['lat'] ) ? floatval( $old_instance['lat'] ) : 0;
13127 + $instance['lon'] = isset( $old_instance['lon'] ) ? floatval( $old_instance['lon'] ) : 0;
13128
13129 if ( ! $instance['lat'] || ! $instance['lon'] ) {
13130 $update_lat_lon = true;
13131 @@ -174,8 +184,14 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
13132
13133 // Get the lat/lon of the user specified address.
13134 $address = $this->urlencode_address( $instance['address'] );
13135 - $path = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=" . $address;
13136 - $json = wp_remote_retrieve_body( wp_remote_get( $path ) );
13137 + $path = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=" . $address;
13138 + /** This action is documented in modules/widgets/contact-info.php */
13139 + $key = apply_filters( 'jetpack_google_maps_api_key', null );
13140 +
13141 + if ( ! empty( $key ) ) {
13142 + $path = add_query_arg( 'key', $key, $path );
13143 + }
13144 + $json = wp_remote_retrieve_body( wp_remote_get( esc_url( $path, null, null ) ) );
13145
13146 if ( ! $json ) {
13147 // The read failed :(
13148 @@ -185,12 +201,13 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
13149
13150 $json_obj = json_decode( $json );
13151
13152 - if ( $err = $json_obj->status == "ZERO_RESULTS" ) {
13153 + if ( "ZERO_RESULTS" == $json_obj->status ) {
13154 // The address supplied does not have a matching lat / lon.
13155 // No map is available.
13156 $instance['lat'] = "0";
13157 $instance['lon'] = "0";
13158 - } else {
13159 + }
13160 + else {
13161
13162 $loc = $json_obj->results[0]->geometry->location;
13163
13164 @@ -204,7 +221,8 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
13165
13166 if ( ! isset( $new_instance['showmap'] ) ) {
13167 $instance['showmap'] = 0;
13168 - } else {
13169 + }
13170 + else {
13171 $instance['showmap'] = intval( $new_instance['showmap'] );
13172 }
13173
13174 @@ -214,55 +232,77 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
13175
13176 /**
13177 * Displays the form for this widget on the Widgets page of the WP Admin area.
13178 - **/
13179 + *
13180 + * @param array $instance Instance configuration.
13181 + *
13182 + * @return void
13183 + */
13184 function form( $instance ) {
13185 $instance = wp_parse_args( $instance, $this->defaults() );
13186 - extract( $instance );
13187 -
13188 - $disabled = !$this->has_good_map( $instance );
13189 - ?>
13190 - <p><label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
13191 -
13192 - <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /></p>
13193 -
13194 - <p><label for="<?php echo esc_attr( $this->get_field_id( 'address' ) ); ?>"><?php esc_html_e( 'Address:', 'jetpack' ); ?></label>
13195 - <textarea class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'address' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'address' ) ); ?>"><?php echo esc_textarea( $address ); ?></textarea>
13196 - <?php
13197 - if ( $this->has_good_map( $instance ) ) {
13198 - ?>
13199 - <input class="" id="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'showmap' ) ); ?>" value="1" type="checkbox" <?php checked( $showmap , 1); ?> />
13200 - <label for="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>"><?php esc_html_e( 'Show map', 'jetpack' ); ?></label></p>
13201 - <?php
13202 - } else {
13203 - ?>
13204 - <span class="error-message"><?php _e( 'Sorry. We can not plot this address. A map will not be displayed. Is the address formatted correctly?', 'jetpack' ); ?></span></p>
13205 - <input id="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'showmap' ) ); ?>" value="<?php echo( intval( $instance['showmap'] ) ); ?>" type="hidden" />
13206 - <?php
13207 - }
13208 - ?>
13209 -
13210 - <p><label for="<?php echo esc_attr( $this->get_field_id( 'phone' ) ); ?>"><?php esc_html_e( 'Phone:', 'jetpack' ); ?></label>
13211 - <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'phone' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'phone' ) ); ?>" type="text" value="<?php echo esc_attr( $phone ); ?>" /></p>
13212 -
13213 - <p><label for="<?php echo esc_attr( $this->get_field_id( 'hours' ) ); ?>"><?php esc_html_e( 'Hours:', 'jetpack' ); ?></label>
13214 -
13215 - <textarea class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'hours' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'hours' ) ); ?>"><?php echo esc_textarea( $hours ); ?></textarea></p>
13216 -
13217 - <?php
13218 + ?>
13219 + <p>
13220 + <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
13221 + <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
13222 + </p>
13223 +
13224 + <p>
13225 + <label for="<?php echo esc_attr( $this->get_field_id( 'address' ) ); ?>"><?php esc_html_e( 'Address:', 'jetpack' ); ?></label>
13226 + <textarea class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'address' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'address' ) ); ?>"><?php echo esc_textarea( $instance['address'] ); ?></textarea>
13227 + <?php
13228 + if ( $this->has_good_map( $instance ) ) {
13229 + ?>
13230 + <input class="" id="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'showmap' ) ); ?>" value="1" type="checkbox" <?php checked( $instance['showmap'], 1 ); ?> />
13231 + <label for="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>"><?php esc_html_e( 'Show map', 'jetpack' ); ?></label>
13232 + <?php
13233 + }
13234 + else {
13235 + ?>
13236 + <span class="error-message"><?php _e( 'Sorry. We can not plot this address. A map will not be displayed. Is the address formatted correctly?', 'jetpack' ); ?></span>
13237 + <input id="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'showmap' ) ); ?>" value="<?php echo( intval( $instance['showmap'] ) ); ?>" type="hidden" />
13238 + <?php
13239 + }
13240 + ?>
13241 + </p>
13242 + <p>
13243 + <label for="<?php echo esc_attr( $this->get_field_id( 'phone' ) ); ?>"><?php esc_html_e( 'Phone:', 'jetpack' ); ?></label>
13244 + <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'phone' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'phone' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['phone'] ); ?>" />
13245 + </p>
13246 +
13247 + <p>
13248 + <label for="<?php echo esc_attr( $this->get_field_id( 'hours' ) ); ?>"><?php esc_html_e( 'Hours:', 'jetpack' ); ?></label>
13249 + <textarea class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'hours' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'hours' ) ); ?>"><?php echo esc_textarea( $instance['hours'] ); ?></textarea>
13250 + </p>
13251 +
13252 + <?php
13253 }
13254
13255
13256 + /**
13257 + * Generate a Google Maps link for the supplied address.
13258 + *
13259 + * @param string $address Address to link to.
13260 + *
13261 + * @return string
13262 + */
13263 function build_map_link( $address ) {
13264 // Google map urls have lots of available params but zoom (z) and query (q) are enough.
13265 return "http://maps.google.com/maps?z=16&q=" . $this->urlencode_address( $address );
13266 }
13267
13268
13269 + /**
13270 + * Builds map display HTML code from the supplied latitude and longitude.
13271 + *
13272 + * @param float $lat Map Latitude
13273 + * @param float $lon Map Longitude
13274 + *
13275 + * @return string HTML of the map
13276 + */
13277 function build_map( $lat, $lon ) {
13278 $this->enqueue_scripts();
13279
13280 - $lat = esc_attr( $lat );
13281 - $lon = esc_attr( $lon );
13282 + $lat = esc_attr( $lat );
13283 + $lon = esc_attr( $lon );
13284 $html = <<<EOT
13285 <div class="contact-map">
13286 <input type="hidden" class="contact-info-map-lat" value="$lat" />
13287 @@ -273,7 +313,13 @@ EOT;
13288 return $html;
13289 }
13290
13291 -
13292 + /**
13293 + * Encode an URL
13294 + *
13295 + * @param string $address The URL to encode
13296 + *
13297 + * @return string The encoded URL
13298 + */
13299 function urlencode_address( $address ) {
13300
13301 $address = strtolower( $address );
13302 @@ -284,10 +330,16 @@ EOT;
13303 return $address;
13304 }
13305
13306 -
13307 + /**
13308 + * Check if the instance has a valid Map location.
13309 + *
13310 + * @param array $instance Widget instance configuration.
13311 + *
13312 + * @return bool Whether or not there is a valid map.
13313 + */
13314 function has_good_map( $instance ) {
13315 // The lat and lon of an address that could not be plotted will have values of 0 and 0.
13316 - return ! ( $instance['lat'] == "0" && $instance['lon'] == "0" );
13317 + return ! ( "0" == $instance['lat'] && "0" == $instance['lon'] );
13318 }
13319
13320 }
13321
13322 diff --git a/plugins/jetpack/modules/widgets/contact-info/contact-info-map.js b/plugins/jetpack/modules/widgets/contact-info/contact-info-map.js
13323 index cf09d91..c703622 100644
13324 --- a/plugins/jetpack/modules/widgets/contact-info/contact-info-map.js
13325 +++ b/plugins/jetpack/modules/widgets/contact-info/contact-info-map.js
13326 @@ -31,7 +31,7 @@ jQuery( function( $ ) {
13327
13328 setupContactMaps();
13329
13330 - if ( wp && wp.customize && wp.customizerHasPartialWidgetRefresh() ) {
13331 + if ( 'undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh ) {
13332 wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
13333 if ( wp.isJetpackWidgetPlaced( placement, 'widget_contact_info' ) ) {
13334 setupContactMaps( placement.container );
13335
13336 diff --git a/plugins/jetpack/modules/widgets/gallery.php b/plugins/jetpack/modules/widgets/gallery.php
13337 index cfda090..e9f7565 100644
13338 --- a/plugins/jetpack/modules/widgets/gallery.php
13339 +++ b/plugins/jetpack/modules/widgets/gallery.php
13340 @@ -253,7 +253,7 @@ class Jetpack_Gallery_Widget extends WP_Widget {
13341
13342 foreach ( $instance['attachments'] as $attachment ) {
13343 $attachment_image_src = wp_get_attachment_image_src( $attachment->ID, 'full' );
13344 - $attachment_image_src = $attachment_image_src[0]; // [url, width, height]
13345 + $attachment_image_src = jetpack_photon_url( $attachment_image_src[0], array( 'w' => $this->_instance_width ) ); // [url, width, height]
13346
13347 $caption = wptexturize( strip_tags( $attachment->post_excerpt ) );
13348
13349
13350 diff --git a/plugins/jetpack/modules/widgets/image-widget.php b/plugins/jetpack/modules/widgets/image-widget.php
13351 index 8563cf1..3f34b36 100644
13352 --- a/plugins/jetpack/modules/widgets/image-widget.php
13353 +++ b/plugins/jetpack/modules/widgets/image-widget.php
13354 @@ -140,11 +140,34 @@ class Jetpack_Image_Widget extends WP_Widget {
13355 $instance['img_title'] = strip_tags( $new_instance['img_title'] );
13356 $instance['caption'] = wp_kses( stripslashes($new_instance['caption'] ), $allowed_caption_html );
13357 $instance['align'] = $new_instance['align'];
13358 - $instance['img_width'] = absint( $new_instance['img_width'] );
13359 - $instance['img_height'] = absint( $new_instance['img_height'] );
13360 $instance['link'] = esc_url( $new_instance['link'], null, 'display' );
13361 $instance['link_target_blank'] = isset( $new_instance['link_target_blank'] ) ? (bool) $new_instance['link_target_blank'] : false;
13362
13363 + $new_img_width = absint( $new_instance['img_width'] );
13364 + $new_img_height = absint( $new_instance['img_height'] );
13365 +
13366 + if ( ! empty( $instance['img_url'] ) && '' == $new_img_width && '' == $new_img_height ) {
13367 + // Download the url to a local temp file and then process it with getimagesize so we can optimize browser layout
13368 + $tmp_file = download_url( $instance['img_url'], 10 );
13369 + if ( ! is_wp_error( $tmp_file ) ) {
13370 + $size = getimagesize( $tmp_file );
13371 +
13372 + $width = $size[0];
13373 + $instance['img_width'] = absint( $width );
13374 +
13375 + $height = $size[1];
13376 + $instance['img_height'] = absint( $height );
13377 +
13378 + unlink( $tmp_file );
13379 + } else {
13380 + $instance['img_width'] = $new_img_width;
13381 + $instance['img_height'] = $new_img_height;
13382 + }
13383 + } else {
13384 + $instance['img_width'] = $new_img_width;
13385 + $instance['img_height'] = $new_img_height;
13386 + }
13387 +
13388 return $instance;
13389 }
13390
13391 @@ -169,30 +192,6 @@ class Jetpack_Image_Widget extends WP_Widget {
13392 $img_height = esc_attr( $instance['img_height'] );
13393 $link_target_blank = checked( $instance['link_target_blank'], true, false );
13394
13395 - if ( !empty( $instance['img_url'] ) ) {
13396 - // Download the url to a local temp file and then process it with getimagesize so we can optimize browser layout
13397 - $tmp_file = download_url( $instance['img_url'], 10 );
13398 - if ( ! is_wp_error( $tmp_file ) ) {
13399 - $size = getimagesize( $tmp_file );
13400 -
13401 - if ( '' == $instance['img_width'] ) {
13402 - $width = $size[0];
13403 - $img_width = $width;
13404 - } else {
13405 - $img_width = absint( $instance['img_width'] );
13406 - }
13407 -
13408 - if ( '' == $instance['img_height'] ) {
13409 - $height = $size[1];
13410 - $img_height = $height;
13411 - } else {
13412 - $img_height = absint( $instance['img_height'] );
13413 - }
13414 -
13415 - unlink( $tmp_file );
13416 - }
13417 - }
13418 -
13419 $link = esc_url( $instance['link'], null, 'display' );
13420
13421 echo '<p><label for="' . $this->get_field_id( 'title' ) . '">' . esc_html__( 'Widget title:', 'jetpack' ) . '
13422
13423 diff --git a/plugins/jetpack/modules/widgets/rsslinks-widget.php b/plugins/jetpack/modules/widgets/rsslinks-widget.php
13424 index 6086744..8bd6eec 100644
13425 --- a/plugins/jetpack/modules/widgets/rsslinks-widget.php
13426 +++ b/plugins/jetpack/modules/widgets/rsslinks-widget.php
13427 @@ -108,7 +108,7 @@ class Jetpack_RSS_Links_Widget extends WP_Widget {
13428 'image' => __( 'Image Link', 'jetpack' ),
13429 'text-image' => __( 'Text & Image Links', 'jetpack' )
13430 );
13431 - echo '<p><label for="' . $this->get_field_id( 'format' ) . '">' . __( 'Format:', 'jetpack' ) . '
13432 + echo '<p><label for="' . $this->get_field_id( 'format' ) . '">' . _x( 'Format:', 'Noun', 'jetpack' ) . '
13433 <select class="widefat" id="' . $this->get_field_id( 'format' ) . '" name="' . $this->get_field_name( 'format' ) . '" onchange="if ( this.value == \'text\' ) jQuery( \'#' . $this->get_field_id( 'image-settings' ) . '\' ).fadeOut(); else jQuery( \'#' . $this->get_field_id( 'image-settings' ) . '\' ).fadeIn();">';
13434 foreach ( $formats as $format_option => $label ) {
13435 echo '<option value="' . esc_attr( $format_option ) . '"';
13436
13437 diff --git a/plugins/jetpack/modules/widgets/top-posts.php b/plugins/jetpack/modules/widgets/top-posts.php
13438 index 9e0278b..0756a19 100644
13439 --- a/plugins/jetpack/modules/widgets/top-posts.php
13440 +++ b/plugins/jetpack/modules/widgets/top-posts.php
13441 @@ -245,7 +245,7 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
13442 if ( 'text' != $display ) {
13443 $get_image_options = array(
13444 'fallback_to_avatars' => true,
13445 - /** This filter is documented in modules/shortcodes/audio.php */
13446 + /** This filter is documented in modules/stats.php */
13447 'gravatar_default' => apply_filters( 'jetpack_static_url', set_url_scheme( 'http://en.wordpress.com/i/logo/white-gray-80.png' ) ),
13448 );
13449 if ( 'grid' == $display ) {
13450 @@ -450,6 +450,9 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
13451
13452 /**
13453 * Filter the number of days used to calculate Top Posts for the Top Posts widget.
13454 + * We do not recommend accessing more than 10 days of results at one.
13455 + * When more than 10 days of results are accessed at once, results should be cached via the WordPress transients API.
13456 + * Querying for -1 days will give results for an infinite number of days.
13457 *
13458 * @module widgets
13459 *
13460 @@ -460,14 +463,11 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
13461 */
13462 $days = (int) apply_filters( 'jetpack_top_posts_days', 2, $args );
13463
13464 - if ( $days < 1 ) {
13465 + /** Handling situations where the number of days makes no sense - allows for unlimited days where $days = -1 */
13466 + if ( 0 == $days || false == $days ) {
13467 $days = 2;
13468 }
13469
13470 - if ( $days > 10 ) {
13471 - $days = 10;
13472 - }
13473 -
13474 $post_view_posts = stats_get_csv( 'postviews', array( 'days' => absint( $days ), 'limit' => 11 ) );
13475 if ( ! $post_view_posts ) {
13476 return array();
13477
13478 diff --git a/plugins/jetpack/modules/widgets/twitter-timeline-admin.js b/plugins/jetpack/modules/widgets/twitter-timeline-admin.js
13479 new file mode 100644
13480 index 0000000..e6a6514
13481 --- /dev/null
13482 +++ b/plugins/jetpack/modules/widgets/twitter-timeline-admin.js
13483 @@ -0,0 +1,35 @@
13484 +jQuery( function( $ ) {
13485 + function twitterWidgetTypeChanged( widgetTypeSelector ) {
13486 + var selectedType = $( widgetTypeSelector ).val();
13487 + $( widgetTypeSelector )
13488 + .closest( '.jetpack-twitter-timeline-widget-type-container' )
13489 + .next( '.jetpack-twitter-timeline-widget-id-container' )
13490 + .find( 'label' )
13491 + .css( 'display', function() {
13492 + var labelType = $( this ).data( 'widget-type' );
13493 + if ( selectedType === labelType ) {
13494 + return '';
13495 + } else {
13496 + return 'none';
13497 + }
13498 + } );
13499 + }
13500 +
13501 + // We could either be in wp-admin/widgets.php or the Customizer.
13502 + var $container = $( '#customize-controls' );
13503 + if ( ! $container.length ) {
13504 + $container = $( '#wpbody' );
13505 + }
13506 +
13507 + // Observe widget settings for 'change' events of the 'type' property for
13508 + // current and future Twitter timeline widgets.
13509 + $container.on( 'change', '.jetpack-twitter-timeline-widget-type', function() {
13510 + twitterWidgetTypeChanged( this );
13511 + } );
13512 +
13513 + // Set the labels for currently existing widgets (including the "template"
13514 + // version that is copied when a new widget is added).
13515 + $container.find( '.jetpack-twitter-timeline-widget-type' ).each( function() {
13516 + twitterWidgetTypeChanged( this );
13517 + } );
13518 +} );
13519
13520 diff --git a/plugins/jetpack/modules/widgets/twitter-timeline.php b/plugins/jetpack/modules/widgets/twitter-timeline.php
13521 index fc22fc5..ef9ed60 100644
13522 --- a/plugins/jetpack/modules/widgets/twitter-timeline.php
13523 +++ b/plugins/jetpack/modules/widgets/twitter-timeline.php
13524 @@ -1,8 +1,11 @@
13525 <?php
13526
13527 /*
13528 - * Based on Evolution Twitter Timeline (http://wordpress.org/extend/plugins/evolution-twitter-timeline/)
13529 - * See: https://twitter.com/settings/widgets and https://dev.twitter.com/docs/embedded-timelines for details on Twitter Timelines
13530 + * Based on Evolution Twitter Timeline
13531 + * (http://wordpress.org/extend/plugins/evolution-twitter-timeline/)
13532 + * For details on Twitter Timelines see:
13533 + * - https://twitter.com/settings/widgets
13534 + * - https://dev.twitter.com/docs/embedded-timelines
13535 */
13536
13537 /**
13538 @@ -16,8 +19,8 @@ function jetpack_twitter_timeline_widget_init() {
13539
13540 class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
13541 /**
13542 - * Register widget with WordPress.
13543 - */
13544 + * Register widget with WordPress.
13545 + */
13546 public function __construct() {
13547 parent::__construct(
13548 'twitter_timeline',
13549 @@ -33,6 +36,8 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
13550 if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
13551 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
13552 }
13553 +
13554 + add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
13555 }
13556
13557 /**
13558 @@ -53,6 +58,16 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
13559 }
13560
13561 /**
13562 + * Enqueue script to improve admin UI
13563 + */
13564 + public function admin_scripts( $hook ) {
13565 + // This is still 'widgets.php' when managing widgets via the Customizer.
13566 + if ( 'widgets.php' === $hook ) {
13567 + wp_enqueue_script( 'twitter-timeline-admin', plugins_url( 'twitter-timeline-admin.js', __FILE__ ) );
13568 + }
13569 + }
13570 +
13571 + /**
13572 * Front-end display of widget.
13573 *
13574 * @see WP_Widget::widget()
13575 @@ -61,38 +76,52 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
13576 * @param array $instance Saved values from database.
13577 */
13578 public function widget( $args, $instance ) {
13579 - $instance['lang'] = substr( strtoupper( get_locale() ), 0, 2 );
13580 + $instance['lang'] = substr( strtoupper( get_locale() ), 0, 2 );
13581
13582 echo $args['before_widget'];
13583
13584 - if ( $instance['title'] ) {
13585 + if ( isset( $instance['title'] ) ) {
13586 /** This filter is documented in core/src/wp-includes/default-widgets.php */
13587 echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
13588 }
13589
13590 - $data_attribs = array( 'widget-id', 'theme', 'link-color', 'border-color', 'chrome', 'tweet-limit' );
13591 - $attribs = array( 'width', 'height', 'lang' );
13592 -
13593 // Start tag output
13594 + // This tag is transformed into the widget markup by Twitter's
13595 + // widgets.js code
13596 echo '<a class="twitter-timeline"';
13597
13598 + $data_attribs = array(
13599 + 'width',
13600 + 'height',
13601 + 'theme',
13602 + 'link-color',
13603 + 'border-color',
13604 + 'tweet-limit',
13605 + 'lang'
13606 + );
13607 foreach ( $data_attribs as $att ) {
13608 - if ( !empty( $instance[$att] ) ) {
13609 - if ( 'tweet-limit' == $att && 0 === $instance[$att] )
13610 - continue;
13611 -
13612 - if ( is_array( $instance[$att] ) )
13613 - echo ' data-' . esc_attr( $att ) . '="' . esc_attr( join( ' ', $instance['chrome'] ) ) . '"';
13614 - else
13615 - echo ' data-' . esc_attr( $att ) . '="' . esc_attr( $instance[$att] ) . '"';
13616 + if ( ! empty( $instance[ $att ] ) && ! is_array( $instance[ $att ] ) ) {
13617 + echo ' data-' . esc_attr( $att ) . '="' . esc_attr( $instance[ $att ] ) . '"';
13618 }
13619 }
13620
13621 - foreach ( $attribs as $att ) {
13622 - if ( !empty( $instance[$att] ) )
13623 - echo ' ' . esc_attr( $att ) . '="' . esc_attr( $instance[$att] ) . '"';
13624 + if ( ! empty( $instance['chrome'] ) && is_array( $instance['chrome'] ) ) {
13625 + echo ' data-chrome="' . esc_attr( join( ' ', $instance['chrome'] ) ) . '"';
13626 }
13627
13628 + $type = ( isset( $instance['type'] ) ? $instance['type'] : '' );
13629 + $widget_id = ( isset( $instance['widget-id'] ) ? $instance['widget-id'] : '' );
13630 + switch ( $type ) {
13631 + case 'profile':
13632 + echo ' href="https://twitter.com/' . esc_attr( $widget_id ) . '"';
13633 + break;
13634 + case 'widget-id':
13635 + default:
13636 + echo ' data-widget-id="' . esc_attr( $widget_id ) . '"';
13637 + break;
13638 + }
13639 +
13640 + // End tag output
13641 echo '>';
13642
13643 $timeline_placeholder = __( 'My Tweets', 'jetpack' );
13644 @@ -130,41 +159,71 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
13645 * @return array Updated safe values to be saved.
13646 */
13647 public function update( $new_instance, $old_instance ) {
13648 - $hex_regex = '/#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/';
13649 - $instance = array();
13650 - $instance['title'] = sanitize_text_field( $new_instance['title'] );
13651 - $instance['width'] = (int) $new_instance['width'];
13652 - $instance['height'] = (int) $new_instance['height'];
13653 - $instance['width'] = ( 0 !== (int) $new_instance['width'] ) ? (int) $new_instance['width'] : '';
13654 - $instance['height'] = ( 0 !== (int) $new_instance['height'] ) ? (int) $new_instance['height'] : '';
13655 - $instance['tweet-limit'] = ( 0 !== (int) $new_instance['tweet-limit'] ) ? (int) $new_instance['tweet-limit'] : null;
13656 + $instance = array();
13657 +
13658 + $instance['title'] = sanitize_text_field( $new_instance['title'] );
13659 +
13660 + $width = (int) $new_instance['width'];
13661 + if ( $width ) {
13662 + // From publish.twitter.com: 220 <= width <= 1200
13663 + $instance['width'] = min( max( $width, 220 ), 1200 );
13664 + } else {
13665 + $instance['width'] = '';
13666 + }
13667 +
13668 + $height = (int) $new_instance['height'];
13669 + if ( $height ) {
13670 + // From publish.twitter.com: height >= 200
13671 + $instance['height'] = max( $height, 200 );
13672 + } else {
13673 + $instance['height'] = '';
13674 + }
13675 +
13676 + $tweet_limit = (int) $new_instance['tweet-limit'];
13677 + $instance['tweet-limit'] = ( $tweet_limit ? $tweet_limit : null );
13678
13679 // If they entered something that might be a full URL, try to parse it out
13680 if ( is_string( $new_instance['widget-id'] ) ) {
13681 - if ( preg_match( '#https?://twitter\.com/settings/widgets/(\d+)#s', $new_instance['widget-id'], $matches ) ) {
13682 + if ( preg_match(
13683 + '#https?://twitter\.com/settings/widgets/(\d+)#s',
13684 + $new_instance['widget-id'],
13685 + $matches
13686 + ) ) {
13687 $new_instance['widget-id'] = $matches[1];
13688 }
13689 }
13690
13691 $instance['widget-id'] = sanitize_text_field( $new_instance['widget-id'] );
13692 - $instance['widget-id'] = is_numeric( $instance['widget-id'] ) ? $instance['widget-id'] : '';
13693
13694 + $hex_regex = '/#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/';
13695 foreach ( array( 'link-color', 'border-color' ) as $color ) {
13696 - $new_color = sanitize_text_field( $new_instance[$color] );
13697 + $new_color = sanitize_text_field( $new_instance[ $color ] );
13698 if ( preg_match( $hex_regex, $new_color ) ) {
13699 - $instance[$color] = $new_color;
13700 + $instance[ $color ] = $new_color;
13701 }
13702
13703 }
13704
13705 + $instance['type'] = 'widget-id';
13706 + if ( in_array( $new_instance['type'], array( 'widget-id', 'profile' ) ) ) {
13707 + $instance['type'] = $new_instance['type'];
13708 + }
13709 +
13710 $instance['theme'] = 'light';
13711 - if ( in_array( $new_instance['theme'], array( 'light', 'dark' ) ) )
13712 + if ( in_array( $new_instance['theme'], array( 'light', 'dark' ) ) ) {
13713 $instance['theme'] = $new_instance['theme'];
13714 + }
13715
13716 $instance['chrome'] = array();
13717 + $chrome_settings = array(
13718 + 'noheader',
13719 + 'nofooter',
13720 + 'noborders',
13721 + 'transparent'
13722 + );
13723 if ( isset( $new_instance['chrome'] ) ) {
13724 foreach ( $new_instance['chrome'] as $chrome ) {
13725 - if ( in_array( $chrome, array( 'noheader', 'nofooter', 'noborders', 'noscrollbar', 'transparent' ) ) ) {
13726 + if ( in_array( $chrome, $chrome_settings ) ) {
13727 $instance['chrome'][] = $chrome;
13728 }
13729 }
13730 @@ -173,6 +232,18 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
13731 return $instance;
13732 }
13733
13734 + /**
13735 + * Returns a link to the documentation for a feature of this widget on
13736 + * Jetpack or WordPress.com.
13737 + */
13738 + public function get_docs_link( $hash = '' ) {
13739 + if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
13740 + $base_url = 'https://support.wordpress.com/widgets/twitter-timeline-widget/';
13741 + } else {
13742 + $base_url = 'https://jetpack.com/support/extra-sidebar-widgets/twitter-timeline-widget/';
13743 + }
13744 + return '<a href="' . $base_url . $hash . '" target="_blank">( ? )</a>';
13745 + }
13746
13747 /**
13748 * Back-end widget form.
13749 @@ -195,68 +266,203 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
13750 );
13751
13752 $instance = wp_parse_args( (array) $instance, $defaults );
13753 +
13754 + if ( empty( $instance['type'] ) ) {
13755 + // Decide the correct widget type. If this is a pre-existing
13756 + // widget with a numeric widget ID, then the type should be
13757 + // 'widget-id', otherwise it should be 'profile'.
13758 + if ( ! empty( $instance['widget-id'] ) && is_numeric( $instance['widget-id'] ) ) {
13759 + $instance['type'] = 'widget-id';
13760 + } else {
13761 + $instance['type'] = 'profile';
13762 + }
13763 + }
13764 ?>
13765
13766 <p>
13767 - <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
13768 - <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
13769 + <label for="<?php echo $this->get_field_id( 'title' ); ?>">
13770 + <?php esc_html_e( 'Title:', 'jetpack' ); ?>
13771 + </label>
13772 + <input
13773 + class="widefat"
13774 + id="<?php echo $this->get_field_id( 'title' ); ?>"
13775 + name="<?php echo $this->get_field_name( 'title' ); ?>"
13776 + type="text"
13777 + value="<?php echo esc_attr( $instance['title'] ); ?>"
13778 + />
13779 </p>
13780
13781 <p>
13782 - <label for="<?php echo $this->get_field_id( 'width' ); ?>"><?php esc_html_e( 'Maximum Width (px):', 'jetpack' ); ?></label>
13783 - <input class="widefat" id="<?php echo $this->get_field_id( 'width' ); ?>" name="<?php echo $this->get_field_name( 'width' ); ?>" type="text" value="<?php echo esc_attr( $instance['width'] ); ?>" />
13784 + <label for="<?php echo $this->get_field_id( 'width' ); ?>">
13785 + <?php esc_html_e( 'Maximum Width (px; 220 to 1200):', 'jetpack' ); ?>
13786 + </label>
13787 + <input
13788 + class="widefat"
13789 + id="<?php echo $this->get_field_id( 'width' ); ?>"
13790 + name="<?php echo $this->get_field_name( 'width' ); ?>"
13791 + type="number" min="220" max="1200"
13792 + value="<?php echo esc_attr( $instance['width'] ); ?>"
13793 + />
13794 </p>
13795
13796 - <p>
13797 - <label for="<?php echo $this->get_field_id( 'height' ); ?>"><?php esc_html_e( 'Height (px):', 'jetpack' ); ?></label>
13798 - <input class="widefat" id="<?php echo $this->get_field_id( 'height' ); ?>" name="<?php echo $this->get_field_name( 'height' ); ?>" type="text" value="<?php echo esc_attr( $instance['height'] ); ?>" />
13799 + <p>
13800 + <label for="<?php echo $this->get_field_id( 'height' ); ?>">
13801 + <?php esc_html_e( 'Height (px; at least 200):', 'jetpack' ); ?>
13802 + </label>
13803 + <input
13804 + class="widefat"
13805 + id="<?php echo $this->get_field_id( 'height' ); ?>"
13806 + name="<?php echo $this->get_field_name( 'height' ); ?>"
13807 + type="number" min="200"
13808 + value="<?php echo esc_attr( $instance['height'] ); ?>"
13809 + />
13810 </p>
13811
13812 <p>
13813 - <label for="<?php echo $this->get_field_id( 'tweet-limit' ); ?>"><?php esc_html_e( '# of Tweets Shown:', 'jetpack' ); ?></label>
13814 - <input class="widefat" id="<?php echo $this->get_field_id( 'tweet-limit' ); ?>" name="<?php echo $this->get_field_name( 'tweet-limit' ); ?>" type="number" min="1" max="20" value="<?php echo esc_attr( $instance['tweet-limit'] ); ?>" />
13815 + <label for="<?php echo $this->get_field_id( 'tweet-limit' ); ?>">
13816 + <?php esc_html_e( '# of Tweets Shown:', 'jetpack' ); ?>
13817 + </label>
13818 + <input
13819 + class="widefat"
13820 + id="<?php echo $this->get_field_id( 'tweet-limit' ); ?>"
13821 + name="<?php echo $this->get_field_name( 'tweet-limit' ); ?>"
13822 + type="number" min="1" max="20"
13823 + value="<?php echo esc_attr( $instance['tweet-limit'] ); ?>"
13824 + />
13825 </p>
13826
13827 - <p><small>
13828 - <?php
13829 - echo wp_kses_post(
13830 - sprintf(
13831 - __( 'You need to <a href="%1$s" target="_blank">create a widget at Twitter.com</a>, and then enter your widget id (the long number found in the URL of your widget\'s config page) in the field below. <a href="%2$s" target="_blank">Read more</a>.', 'jetpack' ),
13832 - 'https://twitter.com/settings/widgets/new/user',
13833 - 'http://support.wordpress.com/widgets/twitter-timeline-widget/'
13834 - )
13835 - );
13836 - ?>
13837 - </small></p>
13838 - <p>
13839 - <label for="<?php echo $this->get_field_id( 'widget-id' ); ?>"><?php esc_html_e( 'Widget ID:', 'jetpack' ); ?> <a href="http://support.wordpress.com/widgets/twitter-timeline-widget/#widget-id" target="_blank">( ? )</a></label>
13840 - <input class="widefat" id="<?php echo $this->get_field_id( 'widget-id' ); ?>" name="<?php echo $this->get_field_name( 'widget-id' ); ?>" type="text" value="<?php echo esc_attr( $instance['widget-id'] ); ?>" />
13841 + <p class="jetpack-twitter-timeline-widget-type-container">
13842 + <label for="<?php echo $this->get_field_id( 'type' ); ?>">
13843 + <?php esc_html_e( 'Widget Type:', 'jetpack' ); ?>
13844 + <?php echo $this->get_docs_link( '#widget-type' ); ?>
13845 + </label>
13846 + <select
13847 + name="<?php echo $this->get_field_name( 'type' ); ?>"
13848 + id="<?php echo $this->get_field_id( 'type' ); ?>"
13849 + class="jetpack-twitter-timeline-widget-type widefat"
13850 + >
13851 + <option value="profile"<?php selected( $instance['type'], 'profile' ); ?>>
13852 + <?php esc_html_e( 'Profile', 'jetpack' ); ?>
13853 + </option>
13854 + <option value="widget-id"<?php selected( $instance['type'], 'widget-id' ); ?>>
13855 + <?php esc_html_e( 'Widget ID', 'jetpack' ); ?>
13856 + </option>
13857 + </select>
13858 + </p>
13859 +
13860 + <p class="jetpack-twitter-timeline-widget-id-container">
13861 + <label
13862 + for="<?php echo $this->get_field_id( 'widget-id' ); ?>"
13863 + data-widget-type="widget-id"
13864 + <?php echo ( 'widget-id' === $instance['type'] ? '' : 'style="display: none;"' ); ?>
13865 + >
13866 + <?php esc_html_e( 'Widget ID:', 'jetpack' ); ?>
13867 + <?php echo $this->get_docs_link( '#widget-id' ); ?>
13868 + </label>
13869 + <label
13870 + for="<?php echo $this->get_field_id( 'widget-id' ); ?>"
13871 + data-widget-type="profile"
13872 + <?php echo ( 'profile' === $instance['type'] ? '' : 'style="display: none;"' ); ?>
13873 + >
13874 + <?php esc_html_e( 'Twitter Username:', 'jetpack' ); ?>
13875 + <?php echo $this->get_docs_link( '#twitter-username' ); ?>
13876 + </label>
13877 + <input
13878 + class="widefat"
13879 + id="<?php echo $this->get_field_id( 'widget-id' ); ?>"
13880 + name="<?php echo $this->get_field_name( 'widget-id' ); ?>"
13881 + type="text"
13882 + value="<?php echo esc_attr( $instance['widget-id'] ); ?>"
13883 + />
13884 </p>
13885
13886 <p>
13887 - <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>"><?php esc_html_e( 'Layout Options:', 'jetpack' ); ?></label><br />
13888 - <input type="checkbox"<?php checked( in_array( 'noheader', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="noheader" /> <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>"><?php esc_html_e( 'No Header', 'jetpack' ); ?></label><br />
13889 - <input type="checkbox"<?php checked( in_array( 'nofooter', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-nofooter' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="nofooter" /> <label for="<?php echo $this->get_field_id( 'chrome-nofooter' ); ?>"><?php esc_html_e( 'No Footer', 'jetpack' ); ?></label><br />
13890 - <input type="checkbox"<?php checked( in_array( 'noborders', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-noborders' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="noborders" /> <label for="<?php echo $this->get_field_id( 'chrome-noborders' ); ?>"><?php esc_html_e( 'No Borders', 'jetpack' ); ?></label><br />
13891 - <input type="checkbox"<?php checked( in_array( 'noscrollbar', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-noscrollbar' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="noscrollbar" /> <label for="<?php echo $this->get_field_id( 'chrome-noscrollbar' ); ?>"><?php esc_html_e( 'No Scrollbar', 'jetpack' ); ?></label><br />
13892 - <input type="checkbox"<?php checked( in_array( 'transparent', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-transparent' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="transparent" /> <label for="<?php echo $this->get_field_id( 'chrome-transparent' ); ?>"><?php esc_html_e( 'Transparent Background', 'jetpack' ); ?></label>
13893 + <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>">
13894 + <?php esc_html_e( 'Layout Options:', 'jetpack' ); ?>
13895 + </label>
13896 + <br />
13897 + <input
13898 + type="checkbox"<?php checked( in_array( 'noheader', $instance['chrome'] ) ); ?>
13899 + id="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>"
13900 + name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
13901 + value="noheader"
13902 + />
13903 + <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>">
13904 + <?php esc_html_e( 'No Header', 'jetpack' ); ?>
13905 + </label>
13906 + <br />
13907 + <input
13908 + type="checkbox"<?php checked( in_array( 'nofooter', $instance['chrome'] ) ); ?>
13909 + id="<?php echo $this->get_field_id( 'chrome-nofooter' ); ?>"
13910 + name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
13911 + value="nofooter"
13912 + />
13913 + <label for="<?php echo $this->get_field_id( 'chrome-nofooter' ); ?>">
13914 + <?php esc_html_e( 'No Footer', 'jetpack' ); ?>
13915 + </label>
13916 + <br />
13917 + <input
13918 + type="checkbox"<?php checked( in_array( 'noborders', $instance['chrome'] ) ); ?>
13919 + id="<?php echo $this->get_field_id( 'chrome-noborders' ); ?>"
13920 + name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
13921 + value="noborders"
13922 + />
13923 + <label for="<?php echo $this->get_field_id( 'chrome-noborders' ); ?>">
13924 + <?php esc_html_e( 'No Borders', 'jetpack' ); ?>
13925 + </label>
13926 + <br />
13927 + <input
13928 + type="checkbox"<?php checked( in_array( 'transparent', $instance['chrome'] ) ); ?>
13929 + id="<?php echo $this->get_field_id( 'chrome-transparent' ); ?>"
13930 + name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
13931 + value="transparent"
13932 + />
13933 + <label for="<?php echo $this->get_field_id( 'chrome-transparent' ); ?>">
13934 + <?php esc_html_e( 'Transparent Background', 'jetpack' ); ?>
13935 + </label>
13936 </p>
13937
13938 <p>
13939 - <label for="<?php echo $this->get_field_id( 'link-color' ); ?>"><?php _e( 'Link Color (hex):', 'jetpack' ); ?></label>
13940 - <input class="widefat" id="<?php echo $this->get_field_id( 'link-color' ); ?>" name="<?php echo $this->get_field_name( 'link-color' ); ?>" type="text" value="<?php echo esc_attr( $instance['link-color'] ); ?>" />
13941 + <label for="<?php echo $this->get_field_id( 'link-color' ); ?>">
13942 + <?php _e( 'Link Color (hex):', 'jetpack' ); ?>
13943 + </label>
13944 + <input
13945 + class="widefat"
13946 + id="<?php echo $this->get_field_id( 'link-color' ); ?>"
13947 + name="<?php echo $this->get_field_name( 'link-color' ); ?>"
13948 + type="text"
13949 + value="<?php echo esc_attr( $instance['link-color'] ); ?>"
13950 + />
13951 </p>
13952
13953 <p>
13954 - <label for="<?php echo $this->get_field_id( 'border-color' ); ?>"><?php _e( 'Border Color (hex):', 'jetpack' ); ?></label>
13955 - <input class="widefat" id="<?php echo $this->get_field_id( 'border-color' ); ?>" name="<?php echo $this->get_field_name( 'border-color' ); ?>" type="text" value="<?php echo esc_attr( $instance['border-color'] ); ?>" />
13956 + <label for="<?php echo $this->get_field_id( 'border-color' ); ?>">
13957 + <?php _e( 'Border Color (hex):', 'jetpack' ); ?>
13958 + </label>
13959 + <input
13960 + class="widefat"
13961 + id="<?php echo $this->get_field_id( 'border-color' ); ?>"
13962 + name="<?php echo $this->get_field_name( 'border-color' ); ?>"
13963 + type="text"
13964 + value="<?php echo esc_attr( $instance['border-color'] ); ?>"
13965 + />
13966 </p>
13967
13968 <p>
13969 - <label for="<?php echo $this->get_field_id( 'theme' ); ?>"><?php _e( 'Timeline Theme:', 'jetpack' ); ?></label>
13970 - <select name="<?php echo $this->get_field_name( 'theme' ); ?>" id="<?php echo $this->get_field_id( 'theme' ); ?>" class="widefat">
13971 - <option value="light"<?php selected( $instance['theme'], 'light' ); ?>><?php esc_html_e( 'Light', 'jetpack' ); ?></option>
13972 - <option value="dark"<?php selected( $instance['theme'], 'dark' ); ?>><?php esc_html_e( 'Dark', 'jetpack' ); ?></option>
13973 + <label for="<?php echo $this->get_field_id( 'theme' ); ?>">
13974 + <?php _e( 'Timeline Theme:', 'jetpack' ); ?>
13975 + </label>
13976 + <select
13977 + name="<?php echo $this->get_field_name( 'theme' ); ?>"
13978 + id="<?php echo $this->get_field_id( 'theme' ); ?>"
13979 + class="widefat"
13980 + >
13981 + <option value="light"<?php selected( $instance['theme'], 'light' ); ?>>
13982 + <?php esc_html_e( 'Light', 'jetpack' ); ?>
13983 + </option>
13984 + <option value="dark"<?php selected( $instance['theme'], 'dark' ); ?>>
13985 + <?php esc_html_e( 'Dark', 'jetpack' ); ?>
13986 + </option>
13987 </select>
13988 </p>
13989 <?php
13990
13991 diff --git a/plugins/jetpack/readme.txt b/plugins/jetpack/readme.txt
13992 index b7e821b..b5e6c2d 100644
13993 --- a/plugins/jetpack/readme.txt
13994 +++ b/plugins/jetpack/readme.txt
13995 @@ -1,9 +1,9 @@
13996 === Jetpack by WordPress.com ===
13997 -Contributors: automattic, adamkheckler, aduth, akirk, allendav, alternatekev, andy, apeatling, azaozz, batmoo, barry, beaulebens, blobaugh, cainm, cfinke, chaselivingston, chellycat, csonnek, danielbachhuber, davoraltman, daniloercoli, designsimply, dllh, drawmyface, dsmart, dzver, ebinnion, eliorivero, enej, eoigal, ethitter, gcorne, georgestephanis, gibrown, goldsounds, hew, hugobaeta, hypertextranch, iammattthomas, iandunn, jacobshere, jblz, jeherve, jenhooks, jenia, jkudish, jmdodd, Joen, johnjamesjacoby, jshreve, koke, kraftbj, lamdayap, lancewillett, lschuyler, macmanx, martinremy, matt, matveb, mattwiebe, maverick3x6, mcsf, mdawaffe, michael-arestad, migueluy, mikeyarce, mkaz, nancythanki, nickmomrik, obenland, pento, professor44, ryancowles, richardmuscat, richardmtl, roccotripaldi, samhotchkiss, sdquirk, stephdau, tmoorewp, Viper007Bond, westi, yoavf, zinigor
13998 +Contributors: automattic, adamkheckler, aduth, akirk, allendav, alternatekev, andy, annezazu, apeatling, azaozz, batmoo, barry, beaulebens, blobaugh, cainm, cena, cfinke, chaselivingston, chellycat, csonnek, danielbachhuber, davoraltman, daniloercoli, designsimply, dllh, drawmyface, dsmart, dzver, ebinnion, eliorivero, enej, eoigal, ethitter, gcorne, georgestephanis, gibrown, goldsounds, hew, hugobaeta, hypertextranch, iammattthomas, iandunn, jacobshere, jblz, jeherve, jenhooks, jenia, jgs, jkudish, jmdodd, Joen, johnjamesjacoby, jshreve, koke, kraftbj, lamdayap, lancewillett, lschuyler, macmanx, martinremy, matt, matveb, mattwiebe, maverick3x6, mcsf, mdawaffe, michael-arestad, migueluy, mikeyarce, mkaz, nancythanki, nickmomrik, obenland, pento, professor44, rachelsquirrel, rdcoll, ryancowles, richardmuscat, richardmtl, roccotripaldi, samhotchkiss, scarstocea, sdquirk, stefmattana, stephdau, tmoorewp, Viper007Bond, westi, yoavf, zinigor
13999 Tags: WordPress.com, jet pack, comments, contact, gallery, performance, sharing, security, shortcodes, stats, subscriptions, widgets
14000 -Stable tag: 4.0.4
14001 +Stable tag: 4.1.1
14002 Requires at least: 4.4
14003 -Tested up to: 4.5.2
14004 +Tested up to: 4.5.3
14005
14006 Increase your traffic, view your stats, speed up your site, and protect yourself from hackers with Jetpack.
14007
14008 @@ -75,6 +75,80 @@ There are opportunities for developers at all levels to contribute. [Learn more
14009
14010 == Changelog ==
14011
14012 += 4.1.1 =
14013 +
14014 +* Release date: July 7th, 2016
14015 +
14016 +**Bug Fixes:**
14017 +
14018 +* SSO: Use high-resolution Gravatar images on the log-in form on Retina devices.
14019 +* Publicize: improve reliability of Publicize when publishing new posts.
14020 +
14021 += 4.1 =
14022 +
14023 +* Release date: July 6th, 2016
14024 +* Release Post: http://wp.me/p1moTy-3jd
14025 +
14026 +**Performance Enhancements:**
14027 +
14028 +* Carousel no longer loads full-size images in the previous and next previews, increasing the speed and performance of slideshows.
14029 +* We’ve improved Jetpack’s performance by making calls to the database more efficient; essentially, Jetpack is doing less on each page load, making things faster.
14030 +* We’ve improved Photon dev mode, eliminating unnecessary attempts to sync images.
14031 +
14032 +**Exciting Feature and UI Improvements:**
14033 +
14034 +* A new look: SSO, redesigned and refactored, provides a new and improved experience.
14035 +* Tracking made simple: quickly view the number of unread feedback submissions in your sidebar.
14036 +* Getting support just got easier! Access improved self-help tools in the Jetpack Debug menu.
14037 +* Greater control over Infinite Scroll: pause and resume Infinite Scroll with two new JavaScript methods.
14038 +* Improved Sharing: we’ve swapped image icons for icon fonts and added Telegram and WhatsApp buttons.
14039 +* Untappd shortcode: now you can sip and share your favorite craft brews. Cheers!
14040 +* Recipes, revamped: we’ve added new recipe shortcodes and options to create more detailed recipes.
14041 +* Improved Gallery Widgets now use Photon to resize and serve images.
14042 +
14043 +**Security:**
14044 +
14045 +* We’re continuing our efforts to harden Jetpack security by implementing the `hash_equals()` function in an effort to avoid timing attacks when comparing strings.
14046 +* We’ve made it easier to use SSL connections on ports `80` and `443`, improving our ability to communicate with an increased number of secure websites.
14047 +* You will now receive a warning for any failed attempts when connecting your website via SSL.
14048 +
14049 +**Slightly Less Exciting Feature Improvements:**
14050 +
14051 +* Updated the Infinite Scroll settings verbiage, which was a bit confusing.
14052 +* Removed Jetpack Audio Shortcode, which is no longer in use.
14053 +* Redesigned Jetpack banner notices to match core notification styles.
14054 +* Added an icon on a connected Jetpack user’s profile page, next to their name.
14055 +* Added the ability to edit Portfolio custom-post-type options in the Customizer.
14056 +* Added a new filter called `jetpack_publicize_capability` which allows you to override user role restrictions for Publicize.
14057 +* Improved the connection process between Jetpack and WordPress.com making it easier to start using Manage.
14058 +* Updated the Top Posts Widget so you can use and display posts that are older than 10 days.
14059 +* Updated the Twitter Timeline Widget to support updates made by Twitter.
14060 +* Improved the VideoPress Shortcode modal.
14061 +* Updated VideoPress, which now defaults to HTML5 videos when the `freedom` shortcode parameter is in use.
14062 +* Improved how Jetpack syncs by removing mock options.
14063 +* Updated the naming convention for feedback posts.
14064 +* Updated several JSON API endpoints to match WordPress.com endpoints, added support for custom taxonomies, and enabled trash as a valid status for the post update endpoint.
14065 +
14066 +**Improved Compatibility:**
14067 +
14068 +* A community member found and fixed a compatibility issue with our Open Graph Meta Tags and Bitly’s older plugin -- we now check to make sure we don’t create conflicts.
14069 +* We’ve fixed a rare scenario where an error would occur when other plugins or sites were using the `JETPACK__GLOTPRESS_LOCALES_PATH` constant.
14070 +
14071 +**Bug Fixes:**
14072 +
14073 +* Comment avatars are now retrieved in a manner more consistent with the login avatar, improving consistency and eliminating the possibility of a future bug.
14074 +* We eliminated PHP notices that were appearing when Custom Content Types were defined without labels or sections.
14075 +* PHP memory limits were reached in rare cases when a website had thousands of revisions of their Custom CSS. The issue is fixed -- happy editing!
14076 +* jQuery deprecated the `size()` function -- as a result, we’ve stopped using it as well.
14077 +* A PHP notice popped up when plugins were updated from the WordPress.com plugin management interface -- these notices will no longer appear.
14078 +* We fixed a bug where Photon wasn’t providing the original size for images that were being used outside of the post content.
14079 +* We eliminated the PHP notices that displayed when posts with slideshows were added to a sitemap.
14080 +* We fixed an error that was showing up in Sitemaps when a website permalink structure used `index.php`.
14081 +* We eliminated JavaScript errors that displayed when tiled galleries were viewed.
14082 +* We fixed an issue where image dimensions weren’t properly saved when added to a new widget.
14083 +* Since Google Maps API keys are now required to use maps, we’ve updated the Contact Info Widget to allow site owners to set up their keys.
14084 +* We fixed a bug where multiple `display` properties weren’t able to be saved in Custom CSS.
14085 +
14086 = 4.0.4 =
14087 Release date: June 20th, 2016
14088 Release Post: http://wp.me/p1moTy-3eT
14089
14090 diff --git a/plugins/jetpack/sal/class.json-api-date.php b/plugins/jetpack/sal/class.json-api-date.php
14091 new file mode 100644
14092 index 0000000..d51247c
14093 --- /dev/null
14094 +++ b/plugins/jetpack/sal/class.json-api-date.php
14095 @@ -0,0 +1,55 @@
14096 +<?php
14097 +
14098 +class WPCOM_JSON_API_Date {
14099 + /**
14100 + * Returns ISO 8601 formatted datetime: 2011-12-08T01:15:36-08:00
14101 + *
14102 + * @param $date_gmt (string) GMT datetime string.
14103 + * @param $date (string) Optional. Used to calculate the offset from GMT.
14104 + *
14105 + * @return string
14106 + */
14107 + static function format_date( $date_gmt, $date = null ) {
14108 + $timestamp_gmt = strtotime( "$date_gmt+0000" );
14109 +
14110 + if ( null === $date ) {
14111 + $timestamp = $timestamp_gmt;
14112 + $hours = $minutes = $west = 0;
14113 + } else {
14114 + $date_time = date_create( "$date+0000" );
14115 + if ( $date_time ) {
14116 + $timestamp = date_format( $date_time, 'U' );
14117 + } else {
14118 + $timestamp = 0;
14119 + }
14120 +
14121 + // "0000-00-00 00:00:00" == -62169984000
14122 + if ( - 62169984000 == $timestamp_gmt ) {
14123 + // WordPress sets post_date=now, post_date_gmt="0000-00-00 00:00:00" for all drafts
14124 + // WordPress sets post_modified=now, post_modified_gmt="0000-00-00 00:00:00" for new drafts
14125 +
14126 + // Try to guess the correct offset from the blog's options.
14127 + $timezone_string = get_option( 'timezone_string' );
14128 +
14129 + if ( $timezone_string && $date_time ) {
14130 + $timezone = timezone_open( $timezone_string );
14131 + if ( $timezone ) {
14132 + $offset = $timezone->getOffset( $date_time );
14133 + }
14134 + } else {
14135 + $offset = 3600 * get_option( 'gmt_offset' );
14136 + }
14137 + } else {
14138 + $offset = $timestamp - $timestamp_gmt;
14139 + }
14140 +
14141 + $west = $offset < 0;
14142 + $offset = abs( $offset );
14143 + $hours = (int) floor( $offset / 3600 );
14144 + $offset -= $hours * 3600;
14145 + $minutes = (int) floor( $offset / 60 );
14146 + }
14147 +
14148 + return (string) gmdate( 'Y-m-d\\TH:i:s', $timestamp ) . sprintf( '%s%02d:%02d', $west ? '-' : '+', $hours, $minutes );
14149 + }
14150 +}
14151 \ No newline at end of file
14152
14153 diff --git a/plugins/jetpack/sal/class.json-api-links.php b/plugins/jetpack/sal/class.json-api-links.php
14154 new file mode 100644
14155 index 0000000..b527856
14156 --- /dev/null
14157 +++ b/plugins/jetpack/sal/class.json-api-links.php
14158 @@ -0,0 +1,269 @@
14159 +<?php
14160 +
14161 +require_once dirname( __FILE__ ) . '/../class.json-api.php';
14162 +
14163 +class WPCOM_JSON_API_Links {
14164 + private $api;
14165 + private static $instance;
14166 +
14167 + public static function getInstance() {
14168 + if (null === static::$instance) {
14169 + static::$instance = new static();
14170 + }
14171 +
14172 + return static::$instance;
14173 + }
14174 +
14175 + // protect these methods for singleton
14176 + protected function __construct() {
14177 + $this->api = WPCOM_JSON_API::init();
14178 + }
14179 + private function __clone() { }
14180 + private function __wakeup() { }
14181 +
14182 + /**
14183 + * Generate a URL to an endpoint
14184 + *
14185 + * Used to construct meta links in API responses
14186 + *
14187 + * @param mixed $args Optional arguments to be appended to URL
14188 + * @return string Endpoint URL
14189 + **/
14190 + function get_link() {
14191 + $args = func_get_args();
14192 + $format = array_shift( $args );
14193 + $base = WPCOM_JSON_API__BASE;
14194 +
14195 + $path = array_pop( $args );
14196 +
14197 + if ( $path ) {
14198 + $path = '/' . ltrim( $path, '/' );
14199 + }
14200 +
14201 + $args[] = $path;
14202 +
14203 + // Escape any % in args before using sprintf
14204 + $escaped_args = array();
14205 + foreach ( $args as $arg_key => $arg_value ) {
14206 + $escaped_args[ $arg_key ] = str_replace( '%', '%%', $arg_value );
14207 + }
14208 +
14209 + $relative_path = vsprintf( "$format%s", $escaped_args );
14210 +
14211 + if ( ! wp_startswith( $relative_path, '.' ) ) {
14212 + // Generic version. Match the requested version as best we can
14213 + $api_version = $this->get_closest_version_of_endpoint( $format, $relative_path );
14214 + $base = substr( $base, 0, - 1 ) . $api_version;
14215 + }
14216 +
14217 + // escape any % in the relative path before running it through sprintf again
14218 + $relative_path = str_replace( '%', '%%', $relative_path );
14219 + // http, WPCOM_JSON_API__BASE, ... , path
14220 + // %s , %s , $format, %s
14221 + return esc_url_raw( sprintf( "https://%s$relative_path", $base ) );
14222 + }
14223 +
14224 + function get_me_link( $path = '' ) {
14225 + return $this->get_link( '/me', $path );
14226 + }
14227 +
14228 + function get_taxonomy_link( $blog_id, $taxonomy_id, $taxonomy_type, $path = '' ) {
14229 + switch ( $taxonomy_type ) {
14230 + case 'category':
14231 + return $this->get_link( '/sites/%d/categories/slug:%s', $blog_id, $taxonomy_id, $path );
14232 +
14233 + case 'post_tag':
14234 + return $this->get_link( '/sites/%d/tags/slug:%s', $blog_id, $taxonomy_id, $path );
14235 +
14236 + default:
14237 + return $this->get_link( '/sites/%d/taxonomies/%s/terms/slug:%s', $blog_id, $taxonomy_type, $taxonomy_id, $path );
14238 + }
14239 + }
14240 +
14241 + function get_media_link( $blog_id, $media_id, $path = '' ) {
14242 + return $this->get_link( '/sites/%d/media/%d', $blog_id, $media_id, $path );
14243 + }
14244 +
14245 + function get_site_link( $blog_id, $path = '' ) {
14246 + return $this->get_link( '/sites/%d', $blog_id, $path );
14247 + }
14248 +
14249 + function get_post_link( $blog_id, $post_id, $path = '' ) {
14250 + return $this->get_link( '/sites/%d/posts/%d', $blog_id, $post_id, $path );
14251 + }
14252 +
14253 + function get_comment_link( $blog_id, $comment_id, $path = '' ) {
14254 + return $this->get_link( '/sites/%d/comments/%d', $blog_id, $comment_id, $path );
14255 + }
14256 +
14257 + function get_publicize_connection_link( $blog_id, $publicize_connection_id, $path = '' ) {
14258 + return $this->get_link( '.1/sites/%d/publicize-connections/%d', $blog_id, $publicize_connection_id, $path );
14259 + }
14260 +
14261 + function get_publicize_connections_link( $keyring_token_id, $path = '' ) {
14262 + return $this->get_link( '.1/me/publicize-connections/?keyring_connection_ID=%d', $keyring_token_id, $path );
14263 + }
14264 +
14265 + function get_keyring_connection_link( $keyring_token_id, $path = '' ) {
14266 + return $this->get_link( '.1/me/keyring-connections/%d', $keyring_token_id, $path );
14267 + }
14268 +
14269 + function get_external_service_link( $external_service, $path = '' ) {
14270 + return $this->get_link( '.1/meta/external-services/%s', $external_service, $path );
14271 + }
14272 +
14273 + /**
14274 + * Try to find the closest supported version of an endpoint to the current endpoint
14275 + *
14276 + * For example, if we were looking at the path /animals/panda:
14277 + * - if the current endpoint is v1.3 and there is a v1.3 of /animals/%s available, we return 1.3
14278 + * - if the current endpoint is v1.3 and there is no v1.3 of /animals/%s known, we fall back to the
14279 + * maximum available version of /animals/%s, e.g. 1.1
14280 + *
14281 + * This method is used in get_link() to construct meta links for API responses.
14282 + *
14283 + * @param $template_path The generic endpoint path, e.g. /sites/%s
14284 + * @param $path string The current endpoint path, relative to the version, e.g. /sites/12345
14285 + * @param $method string Request method used to access the endpoint path
14286 + * @return string The current version, or otherwise the maximum version available
14287 + */
14288 + function get_closest_version_of_endpoint( $template_path, $path, $request_method = 'GET' ) {
14289 + static $closest_endpoint_cache;
14290 +
14291 + if ( ! $closest_endpoint_cache ) {
14292 + $closest_endpoint_cache = array();
14293 + }
14294 +
14295 + if ( ! isset( $closest_endpoint_cache[ $template_path ] ) ) {
14296 + $closest_endpoint_cache[ $template_path ] = array();
14297 + } elseif ( isset( $closest_endpoint_cache[ $template_path ][ $request_method ] ) ) {
14298 + return $closest_endpoint_cache[ $template_path ][ $request_method ];
14299 + }
14300 +
14301 + $path = untrailingslashit( $path );
14302 +
14303 + // /help is a special case - always use the current request version
14304 + if ( wp_endswith( $path, '/help' ) ) {
14305 + return $closest_endpoint_cache[ $template_path ][ $request_method ] = $this->api->version;
14306 + }
14307 +
14308 + static $matches;
14309 + if ( empty( $matches ) ) {
14310 + $matches = array();
14311 + } else {
14312 + // try to match out of saved matches
14313 + foreach( $matches as $match ) {
14314 + $regex = $match->regex;
14315 + if ( preg_match( "#^$regex\$#", $path ) ) {
14316 + return $closest_endpoint_cache[ $template_path ][ $request_method ] = $match->version;
14317 + }
14318 + }
14319 + }
14320 +
14321 + $endpoint_path_versions = $this->get_endpoint_path_versions();
14322 + $last_path_segment = $this->get_last_segment_of_relative_path( $path );
14323 + $max_version_found = null;
14324 +
14325 + foreach ( $endpoint_path_versions as $endpoint_last_path_segment => $endpoints ) {
14326 +
14327 + // Does the last part of the path match the path key? (e.g. 'posts')
14328 + // If the last part contains a placeholder (e.g. %s), we want to carry on
14329 + if ( $last_path_segment != $endpoint_last_path_segment && ! strstr( $endpoint_last_path_segment, '%' ) ) {
14330 + continue;
14331 + }
14332 +
14333 + foreach ( $endpoints as $endpoint ) {
14334 + // Does the request method match?
14335 + if ( ! in_array( $request_method, $endpoint['request_methods'] ) ) {
14336 + continue;
14337 + }
14338 +
14339 + $endpoint_path = untrailingslashit( $endpoint['path'] );
14340 + $endpoint_path_regex = str_replace( array( '%s', '%d' ), array( '([^/?&]+)', '(\d+)' ), $endpoint_path );
14341 +
14342 + if ( ! preg_match( "#^$endpoint_path_regex\$#", $path ) ) {
14343 + continue;
14344 + }
14345 +
14346 + // Make sure the endpoint exists at the same version
14347 + if ( version_compare( $this->api->version, $endpoint['min_version'], '>=') &&
14348 + version_compare( $this->api->version, $endpoint['max_version'], '<=') ) {
14349 + array_push( $matches, (object) array( 'version' => $this->api->version, 'regex' => $endpoint_path_regex ) );
14350 + return $closest_endpoint_cache[ $template_path ][ $request_method ] = $this->api->version;
14351 + }
14352 +
14353 + // If the endpoint doesn't exist at the same version, record the max version we found
14354 + if ( empty( $max_version_found ) || version_compare( $max_version_found['version'], $endpoint['max_version'], '<' ) ) {
14355 + $max_version_found = array( 'version' => $endpoint['max_version'], 'regex' => $endpoint_path_regex );
14356 + }
14357 + }
14358 + }
14359 +
14360 + // If the endpoint version is less than the requested endpoint version, return the max version found
14361 + if ( ! empty( $max_version_found ) ) {
14362 + array_push( $matches, (object) $max_version_found );
14363 + return $max_version_found['version'];
14364 + }
14365 +
14366 + // Otherwise, use the API version of the current request
14367 + return $this->api->version;
14368 + }
14369 +
14370 + /**
14371 + * Get an array of endpoint paths with their associated versions
14372 + *
14373 + * The result is cached for 30 minutes.
14374 + *
14375 + * @return array Array of endpoint paths, min_versions and max_versions, keyed by last segment of path
14376 + **/
14377 + protected function get_endpoint_path_versions() {
14378 +
14379 + static $cache_result;
14380 +
14381 + if ( ! empty ( $cache_result ) ) {
14382 + return $cache_result;
14383 + }
14384 +
14385 + /*
14386 + * Create a map of endpoints and their min/max versions keyed by the last segment of the path (e.g. 'posts')
14387 + * This reduces the search space when finding endpoint matches in get_closest_version_of_endpoint()
14388 + */
14389 + $endpoint_path_versions = array();
14390 +
14391 + foreach ( $this->api->endpoints as $key => $endpoint_objects ) {
14392 +
14393 + // The key contains a serialized path, min_version and max_version
14394 + list( $path, $min_version, $max_version ) = unserialize( $key );
14395 +
14396 + // Grab the last component of the relative path to use as the top-level key
14397 + $last_path_segment = $this->get_last_segment_of_relative_path( $path );
14398 +
14399 + $endpoint_path_versions[ $last_path_segment ][] = array(
14400 + 'path' => $path,
14401 + 'min_version' => $min_version,
14402 + 'max_version' => $max_version,
14403 + 'request_methods' => array_keys( $endpoint_objects )
14404 + );
14405 + }
14406 +
14407 + $cache_result = $endpoint_path_versions;
14408 +
14409 + return $endpoint_path_versions;
14410 + }
14411 +
14412 + /**
14413 + * Grab the last segment of a relative path
14414 + *
14415 + * @param string $path Path
14416 + * @return string Last path segment
14417 + */
14418 + protected function get_last_segment_of_relative_path( $path) {
14419 + $path_parts = array_filter( explode( '/', $path ) );
14420 +
14421 + if ( empty( $path_parts ) ) {
14422 + return null;
14423 + }
14424 +
14425 + return end( $path_parts );
14426 + }
14427 +}
14428
14429 diff --git a/plugins/jetpack/sal/class.json-api-metadata.php b/plugins/jetpack/sal/class.json-api-metadata.php
14430 new file mode 100644
14431 index 0000000..b4801d7
14432 --- /dev/null
14433 +++ b/plugins/jetpack/sal/class.json-api-metadata.php
14434 @@ -0,0 +1,39 @@
14435 +<?php
14436 +
14437 +/**
14438 + * Utility classes that don't necessarily have a home yet
14439 + */
14440 +
14441 +class WPCOM_JSON_API_Metadata {
14442 + public static function is_public( $key ) {
14443 + if ( empty( $key ) )
14444 + return false;
14445 +
14446 + // Default whitelisted meta keys.
14447 + $whitelisted_meta = array( '_thumbnail_id' );
14448 +
14449 + // whitelist of metadata that can be accessed
14450 + /** This filter is documented in json-endpoints/class.wpcom-json-api-post-endpoint.php */
14451 + if ( in_array( $key, apply_filters( 'rest_api_allowed_public_metadata', $whitelisted_meta ) ) )
14452 + return true;
14453 +
14454 + if ( 0 === strpos( $key, 'geo_' ) )
14455 + return true;
14456 +
14457 + if ( 0 === strpos( $key, '_wpas_' ) )
14458 + return true;
14459 +
14460 + return false;
14461 + }
14462 +
14463 + public static function is_internal_only( $key ) {
14464 +
14465 + if ( 0 === strpos( $key, '_jetpack_') )
14466 + return true;
14467 +
14468 + if ( 0 === strpos( $key, '_elasticsearch_') )
14469 + return true;
14470 +
14471 + return false;
14472 + }
14473 +}
14474 \ No newline at end of file
14475
14476 diff --git a/plugins/jetpack/sal/class.json-api-platform-jetpack.php b/plugins/jetpack/sal/class.json-api-platform-jetpack.php
14477 index c059b55..6643154 100644
14478 --- a/plugins/jetpack/sal/class.json-api-platform-jetpack.php
14479 +++ b/plugins/jetpack/sal/class.json-api-platform-jetpack.php
14480 @@ -1,12 +1,14 @@
14481 <?php
14482
14483 -class WPORG_Platform {
14484 - static function get_site( $blog_id ) {
14485 +require_once dirname( __FILE__ ) . '/class.json-api-platform.php';
14486 +
14487 +class WPORG_Platform extends SAL_Platform {
14488 + public function get_site( $blog_id ) {
14489 require_once dirname( __FILE__ ) . '/class.json-api-site-jetpack.php';
14490 - return new Jetpack_Site( $blog_id );
14491 + return new Jetpack_Site( $blog_id, $this );
14492 }
14493 }
14494
14495 -function wpcom_get_sal_site( $blog_id ) {
14496 - return WPORG_Platform::get_site( $blog_id );
14497 +function wpcom_get_sal_platform( $token ) {
14498 + return new WPORG_Platform( $token );
14499 }
14500
14501 diff --git a/plugins/jetpack/sal/class.json-api-platform.php b/plugins/jetpack/sal/class.json-api-platform.php
14502 index 61c7b55..42ba5b6 100644
14503 --- a/plugins/jetpack/sal/class.json-api-platform.php
14504 +++ b/plugins/jetpack/sal/class.json-api-platform.php
14505 @@ -1,5 +1,23 @@
14506 <?php
14507
14508 +require_once dirname( __FILE__ ) . '/class.json-api-token.php';
14509 +
14510 +abstract class SAL_Platform {
14511 + public $token;
14512 +
14513 + function __construct( $token ) {
14514 + if ( is_array( $token ) ) {
14515 + $token = SAL_Token::from_rest_token( $token );
14516 + } else {
14517 + $token = SAL_Token::for_anonymous_user();
14518 + }
14519 +
14520 + $this->token = $token;
14521 + }
14522 +
14523 + abstract public function get_site( $blog_id );
14524 +}
14525 +
14526 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
14527 require_once dirname( __FILE__ ) . '/class.json-api-platform-wpcom.php';
14528 } else {
14529
14530 diff --git a/plugins/jetpack/sal/class.json-api-post-base.php b/plugins/jetpack/sal/class.json-api-post-base.php
14531 new file mode 100644
14532 index 0000000..8a422e1
14533 --- /dev/null
14534 +++ b/plugins/jetpack/sal/class.json-api-post-base.php
14535 @@ -0,0 +1,667 @@
14536 +<?php
14537 +/**
14538 + * This class wraps a WP_Post and proxies any undefined attributes
14539 + * and methods to the wrapped class. We need to do this because at present
14540 + * the WP_Post class is marked as final (in 4.5 this will change, though it's
14541 + * not clear if there will be a mechanism to retrieve from the DB into the over-
14542 + * ridden class dynamically).
14543 + **/
14544 +
14545 +require_once dirname( __FILE__ ) . '/class.json-api-metadata.php';
14546 +require_once dirname( __FILE__ ) . '/class.json-api-date.php';
14547 +require_once ( ABSPATH . "wp-includes/post.php" );
14548 +
14549 +abstract class SAL_Post {
14550 + public $post;
14551 + public $context;
14552 + public $site;
14553 +
14554 + function __construct( $site, $post, $context ) {
14555 + $this->post = $post;
14556 + $this->context = $context;
14557 + $this->site = $site;
14558 + }
14559 +
14560 + public function __set( $key, $value ) {
14561 + $this->post->{ $key } = $value;
14562 + }
14563 +
14564 + public function __get( $key ) {
14565 + if ( $key === 'links' ) {
14566 + require_once dirname( __FILE__ ) . '/class.json-api-links.php';
14567 + return WPCOM_JSON_API_Links::getInstance();
14568 + }
14569 + return $this->post->{ $key };
14570 + }
14571 +
14572 + public function __call( $name, $arguments ) {
14573 + if ( is_callable( array( $this->post, $name ) ) ) {
14574 + return call_user_func_array( array( $this->post, $name ), $arguments );
14575 + } else {
14576 + trigger_error("Call to undefined method '{$name}'");
14577 + }
14578 + }
14579 +
14580 + public function __isset ( $name ) {
14581 + return isset( $this->post->{ $name } );
14582 + }
14583 +
14584 + abstract public function get_like_count();
14585 + abstract public function is_liked();
14586 + abstract public function is_reblogged();
14587 + abstract public function is_following();
14588 + abstract public function get_global_id();
14589 + abstract public function get_geo();
14590 +
14591 + public function get_menu_order() {
14592 + return (int) $this->post->menu_order;
14593 + }
14594 +
14595 + public function get_guid() {
14596 + return (string) $this->post->guid;
14597 + }
14598 +
14599 + public function get_type() {
14600 + return (string) $this->post->post_type;
14601 + }
14602 +
14603 + public function get_terms() {
14604 + $taxonomies = get_object_taxonomies( $this->post, 'objects' );
14605 + $terms = array();
14606 + foreach ( $taxonomies as $taxonomy ) {
14607 + if ( ! $taxonomy->public && ! current_user_can( $taxonomy->cap->assign_terms ) ) {
14608 + continue;
14609 + }
14610 +
14611 + $terms[ $taxonomy->name ] = array();
14612 +
14613 + $taxonomy_terms = wp_get_object_terms( $this->post->ID, $taxonomy->name, array( 'fields' => 'all' ) );
14614 + foreach ( $taxonomy_terms as $term ) {
14615 + $formatted_term = $this->format_taxonomy( $term, $taxonomy->name, 'display' );
14616 + $terms[ $taxonomy->name ][ $term->name ] = $formatted_term;
14617 + }
14618 +
14619 + $terms[ $taxonomy->name ] = (object) $terms[ $taxonomy->name ];
14620 + }
14621 +
14622 + return (object) $terms;
14623 + }
14624 +
14625 + public function get_tags() {
14626 + $tags = array();
14627 + $terms = wp_get_post_tags( $this->post->ID );
14628 + foreach ( $terms as $term ) {
14629 + if ( !empty( $term->name ) ) {
14630 + $tags[$term->name] = $this->format_taxonomy( $term, 'post_tag', 'display' );
14631 + }
14632 + }
14633 + return (object) $tags;
14634 + }
14635 +
14636 + public function get_categories() {
14637 + $categories = array();
14638 + $terms = wp_get_object_terms( $this->post->ID, 'category', array( 'fields' => 'all' ) );
14639 + foreach ( $terms as $term ) {
14640 + if ( !empty( $term->name ) ) {
14641 + $categories[$term->name] = $this->format_taxonomy( $term, 'category', 'display' );
14642 + }
14643 + }
14644 + return (object) $categories;
14645 + }
14646 +
14647 + public function get_attachments_and_count() {
14648 + $attachments = array();
14649 + $_attachments = new WP_Query( array( 'post_parent' => $this->post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'posts_per_page' => '20' ) );
14650 + foreach ( $_attachments->posts as $attachment ) {
14651 + $attachments[$attachment->ID] = $this->get_media_item_v1_1( $attachment->ID );
14652 + }
14653 + return array( (object) $attachments, (int) $_attachments->found_posts );
14654 + }
14655 +
14656 + public function get_metadata() {
14657 + $metadata = array();
14658 + foreach ( (array) has_meta( $this->post->ID ) as $meta ) {
14659 + // Don't expose protected fields.
14660 + $meta_key = $meta['meta_key'];
14661 +
14662 + $show = !( WPCOM_JSON_API_Metadata::is_internal_only( $meta_key ) )
14663 + &&
14664 + (
14665 + WPCOM_JSON_API_Metadata::is_public( $meta_key )
14666 + ||
14667 + current_user_can( 'edit_post_meta', $this->post->ID , $meta_key )
14668 + );
14669 +
14670 + if ( $show ) {
14671 + $metadata[] = array(
14672 + 'id' => $meta['meta_id'],
14673 + 'key' => $meta['meta_key'],
14674 + 'value' => maybe_unserialize( $meta['meta_value'] ),
14675 + );
14676 + }
14677 + }
14678 +
14679 + if ( ! empty( $metadata ) ) {
14680 + return $metadata;
14681 + } else {
14682 + return false;
14683 + }
14684 + }
14685 +
14686 + public function get_meta() {
14687 + $meta = (object) array(
14688 + 'links' => (object) array(
14689 + 'self' => (string) $this->get_post_link(),
14690 + 'help' => (string) $this->get_post_link( 'help' ),
14691 + 'site' => (string) $this->get_site_link(),
14692 + 'replies' => (string) $this->get_post_link( 'replies/' ),
14693 + 'likes' => (string) $this->get_post_link( 'likes/' ),
14694 + ),
14695 + );
14696 +
14697 + // add autosave link if a more recent autosave exists
14698 + if ( 'edit' === $this->context ) {
14699 + $autosave = wp_get_post_autosave( $this->post->ID );
14700 + if ( $autosave && $autosave->post_modified > $this->post->post_modified )
14701 + $meta->links->autosave = (string) $this->get_post_link() . '/autosave';
14702 + }
14703 +
14704 + return $meta;
14705 + }
14706 +
14707 + public function get_current_user_capabilities() {
14708 + return array(
14709 + 'publish_post' => current_user_can( 'publish_post', $this->post ),
14710 + 'delete_post' => current_user_can( 'delete_post', $this->post ),
14711 + 'edit_post' => current_user_can( 'edit_post', $this->post )
14712 + );
14713 + }
14714 +
14715 + public function get_revisions() {
14716 + if ( 'edit' !== $this->context ) {
14717 + return false;
14718 + }
14719 +
14720 + $revisions = array();
14721 + $post_revisions = wp_get_post_revisions( $this->post->ID );
14722 +
14723 + foreach ( $post_revisions as $_post ) {
14724 + $revisions[] = $_post->ID;
14725 + }
14726 +
14727 + return $revisions;
14728 + }
14729 +
14730 + public function get_other_urls() {
14731 + $other_urls = array();
14732 +
14733 + if ( 'publish' !== $this->post->post_status ) {
14734 + $other_urls = $this->get_permalink_suggestions( $this->post->post_title );
14735 + }
14736 +
14737 + return (object) $other_urls;
14738 + }
14739 +
14740 + protected function get_site_link() {
14741 + return $this->links->get_site_link( $this->site->get_id() );
14742 + }
14743 +
14744 + protected function get_post_link( $path = null ) {
14745 + return $this->links->get_post_link( $this->site->get_id(), $this->post->ID, $path );
14746 + }
14747 +
14748 + public function get_publicize_urls() {
14749 + $publicize_URLs = array();
14750 + $publicize = get_post_meta( $this->post->ID, 'publicize_results', true );
14751 + if ( $publicize ) {
14752 + foreach ( $publicize as $service => $data ) {
14753 + switch ( $service ) {
14754 + case 'twitter' :
14755 + foreach ( $data as $datum ) {
14756 + $publicize_URLs[] = esc_url_raw( "https://twitter.com/{$datum['user_id']}/status/{$datum['post_id']}" );
14757 + }
14758 + break;
14759 + case 'fb' :
14760 + foreach ( $data as $datum ) {
14761 + $publicize_URLs[] = esc_url_raw( "https://www.facebook.com/permalink.php?story_fbid={$datum['post_id']}&id={$datum['user_id']}" );
14762 + }
14763 + break;
14764 + }
14765 + }
14766 + }
14767 + return (array) $publicize_URLs;
14768 + }
14769 +
14770 + public function get_page_template() {
14771 + return (string) get_post_meta( $this->post->ID, '_wp_page_template', true );
14772 + }
14773 +
14774 + // note this is overridden in jetpack-shadow
14775 + public function get_featured_image() {
14776 + $image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $this->post->ID ), 'full' );
14777 + if ( is_array( $image_attributes ) && isset( $image_attributes[0] ) ) {
14778 + return (string) $image_attributes[0];
14779 + } else {
14780 + return '';
14781 + }
14782 + }
14783 +
14784 + public function get_post_thumbnail() {
14785 + $thumb = null;
14786 +
14787 + $thumb_id = get_post_thumbnail_id( $this->post->ID );
14788 +
14789 + if ( ! empty( $thumb_id ) ) {
14790 + $attachment = get_post( $thumb_id );
14791 + if ( ! empty( $attachment ) )
14792 + $featured_image_object = $this->get_attachment( $attachment );
14793 +
14794 + if ( ! empty( $featured_image_object ) ) {
14795 + $thumb = (object) $featured_image_object;
14796 + }
14797 + }
14798 +
14799 + return $thumb;
14800 + }
14801 +
14802 + public function get_format() {
14803 + $format = (string) get_post_format( $this->post->ID );
14804 + if ( !$format ) {
14805 + $format = 'standard';
14806 + }
14807 +
14808 + return $format;
14809 + }
14810 +
14811 + private function get_attachment( $attachment ) {
14812 + $metadata = wp_get_attachment_metadata( $attachment->ID );
14813 +
14814 + $result = array(
14815 + 'ID' => (int) $attachment->ID,
14816 + 'URL' => (string) wp_get_attachment_url( $attachment->ID ),
14817 + 'guid' => (string) $attachment->guid,
14818 + 'mime_type' => (string) $attachment->post_mime_type,
14819 + 'width' => (int) isset( $metadata['width'] ) ? $metadata['width'] : 0,
14820 + 'height' => (int) isset( $metadata['height'] ) ? $metadata['height'] : 0,
14821 + );
14822 +
14823 + if ( isset( $metadata['duration'] ) ) {
14824 + $result['duration'] = (int) $metadata['duration'];
14825 + }
14826 +
14827 + /** This filter is documented in class.jetpack-sync.php */
14828 + return (object) apply_filters( 'get_attachment', $result );
14829 + }
14830 +
14831 + public function get_date() {
14832 + return (string) WPCOM_JSON_API_Date::format_date( $this->post->post_date_gmt, $this->post->post_date );
14833 + }
14834 +
14835 + public function get_modified_date() {
14836 + return (string) WPCOM_JSON_API_Date::format_date( $this->post->post_modified_gmt, $this->post->post_modified );
14837 + }
14838 +
14839 + public function get_title() {
14840 + if ( 'display' === $this->context ) {
14841 + return (string) get_the_title( $this->post->ID );
14842 + } else {
14843 + return (string) htmlspecialchars_decode( $this->post->post_title, ENT_QUOTES );
14844 + }
14845 + }
14846 +
14847 + public function get_url() {
14848 + if ( 'revision' === $this->post->post_type ) {
14849 + return (string) esc_url_raw( get_permalink( $this->post->post_parent ) );
14850 + } else {
14851 + return (string) esc_url_raw( get_permalink( $this->post->ID ) );
14852 + }
14853 + }
14854 +
14855 + public function get_shortlink() {
14856 + return (string) esc_url_raw( wp_get_shortlink( $this->post->ID ) );
14857 + }
14858 +
14859 + public function get_content() {
14860 + if ( 'display' === $this->context ) {
14861 + // TODO: move this WPCOM-specific hack
14862 + add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
14863 + $content = (string) $this->get_the_post_content_for_display();
14864 + remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
14865 + return $content;
14866 + } else {
14867 + return (string) $this->post->post_content;
14868 + }
14869 + }
14870 +
14871 + public function get_excerpt() {
14872 + if ( 'display' === $this->context ) {
14873 + add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
14874 + ob_start();
14875 + the_excerpt();
14876 + $response = (string) ob_get_clean();
14877 + remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
14878 + } else {
14879 + $response = htmlspecialchars_decode( (string) $this->post->post_excerpt, ENT_QUOTES );
14880 + }
14881 + return $response;
14882 + }
14883 +
14884 + public function get_status() {
14885 + return (string) get_post_status( $this->post->ID );
14886 + }
14887 +
14888 + public function is_sticky() {
14889 + return (bool) is_sticky( $this->post->ID );
14890 + }
14891 +
14892 + public function get_slug() {
14893 + return (string) $this->post->post_name;
14894 + }
14895 +
14896 + public function get_password() {
14897 + $password = (string) $this->post->post_password;
14898 + if ( 'edit' === $this->context ) {
14899 + $password = htmlspecialchars_decode( (string) $password, ENT_QUOTES );
14900 + }
14901 + return $password;
14902 + }
14903 +
14904 + public function get_parent() {
14905 + if ( $this->post->post_parent ) {
14906 + $parent = get_post( $this->post->post_parent );
14907 + if ( 'display' === $this->context ) {
14908 + $parent_title = (string) get_the_title( $parent->ID );
14909 + } else {
14910 + $parent_title = (string) htmlspecialchars_decode( $this->post->post_title, ENT_QUOTES );
14911 + }
14912 + return (object) array(
14913 + 'ID' => (int) $parent->ID,
14914 + 'type' => (string) $parent->post_type,
14915 + 'link' => (string) $this->links->get_post_link( $this->site->get_id(), $parent->ID ),
14916 + 'title' => $parent_title,
14917 + );
14918 + } else {
14919 + return false;
14920 + }
14921 + }
14922 +
14923 + function the_password_form() {
14924 + return __( 'This post is password protected.', 'jetpack' );
14925 + }
14926 +
14927 + public function get_discussion() {
14928 + return array(
14929 + 'comments_open' => (bool) comments_open( $this->post->ID ),
14930 + 'comment_status' => (string) $this->post->comment_status,
14931 + 'pings_open' => (bool) pings_open( $this->post->ID ),
14932 + 'ping_status' => (string) $this->post->ping_status,
14933 + 'comment_count' => (int) $this->post->comment_count,
14934 + );
14935 + }
14936 +
14937 + public function is_likes_enabled() {
14938 + /** This filter is documented in modules/likes.php */
14939 + $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
14940 + $post_likes_switched = (bool) get_post_meta( $this->post->ID, 'switch_like_status', true );
14941 + $post_likes_enabled = $sitewide_likes_enabled;
14942 + if ( $post_likes_switched ) {
14943 + $post_likes_enabled = ! $post_likes_enabled;
14944 + }
14945 + return (bool) $post_likes_enabled;
14946 + }
14947 +
14948 + public function is_sharing_enabled() {
14949 + $show = true;
14950 + /** This filter is documented in modules/sharedaddy/sharing-service.php */
14951 + $show = apply_filters( 'sharing_show', $show, $this->post );
14952 +
14953 + $switched_status = get_post_meta( $this->post->ID, 'sharing_disabled', false );
14954 +
14955 + if ( !empty( $switched_status ) )
14956 + $show = false;
14957 +
14958 + return (bool) $show;
14959 + }
14960 +
14961 + // No Blog ID parameter. No Post ID parameter. Depends on globals.
14962 + // Expects setup_postdata() to already have been run
14963 + function get_the_post_content_for_display() {
14964 + global $pages, $page;
14965 +
14966 + $old_pages = $pages;
14967 + $old_page = $page;
14968 +
14969 + $content = join( "\n\n", $pages );
14970 + $content = preg_replace( '/<!--more(.*?)?-->/', '', $content );
14971 + $pages = array( $content );
14972 + $page = 1;
14973 +
14974 + ob_start();
14975 + the_content();
14976 + $return = ob_get_clean();
14977 +
14978 + $pages = $old_pages;
14979 + $page = $old_page;
14980 +
14981 + return $return;
14982 + }
14983 +
14984 + public function get_author() {
14985 + if ( 0 == $this->post->post_author )
14986 + return null;
14987 +
14988 + $show_email = $this->context === 'edit' && current_user_can( 'edit_post', $this->post );
14989 +
14990 + $user = get_user_by( 'id', $this->post->post_author );
14991 +
14992 + if ( ! $user || is_wp_error( $user ) ) {
14993 + trigger_error( 'Unknown user', E_USER_WARNING );
14994 +
14995 + return null;
14996 + }
14997 +
14998 + // TODO factor this out
14999 + if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
15000 + $active_blog = get_active_blog_for_user( $user->ID );
15001 + $site_id = $active_blog->get_id();
15002 + $profile_URL = "http://en.gravatar.com/{$user->user_login}";
15003 + } else {
15004 + $profile_URL = 'http://en.gravatar.com/' . md5( strtolower( trim( $user->user_email ) ) );
15005 + $site_id = -1;
15006 + }
15007 +
15008 + $author = array(
15009 + 'ID' => (int) $user->ID,
15010 + 'login' => (string) $user->user_login,
15011 + 'email' => $show_email ? (string) $user->user_email : false, // (string|bool)
15012 + 'name' => (string) $user->display_name,
15013 + 'first_name' => (string) $user->first_name,
15014 + 'last_name' => (string) $user->last_name,
15015 + 'nice_name' => (string) $user->user_nicename,
15016 + 'URL' => (string) esc_url_raw( $user->user_url ),
15017 + 'avatar_URL' => (string) esc_url_raw( $this->get_avatar_url( $user->user_email ) ),
15018 + 'profile_URL' => (string) esc_url_raw( $profile_URL )
15019 + );
15020 +
15021 + if ($site_id > -1) {
15022 + $author['site_ID'] = (int) $site_id;
15023 + }
15024 +
15025 + return (object) $author;
15026 + }
15027 +
15028 + protected abstract function get_avatar_url( $email, $avatar_size = 96 );
15029 +
15030 + /**
15031 + * Get extra post permalink suggestions
15032 + * @return array array of permalink suggestions: 'permalink_URL', 'suggested_slug'
15033 + */
15034 + public function get_permalink_suggestions( $title ) {
15035 + $suggestions = array();
15036 + list( $suggestions['permalink_URL'], $suggestions['suggested_slug'] ) = get_sample_permalink( $this->post->ID, $title );
15037 + return $suggestions;
15038 + }
15039 +
15040 + private function format_taxonomy( $taxonomy, $taxonomy_type, $context ) {
15041 + // Permissions
15042 + switch ( $context ) {
15043 + case 'edit' :
15044 + $tax = get_taxonomy( $taxonomy_type );
15045 + if ( !current_user_can( $tax->cap->edit_terms ) )
15046 + return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
15047 + break;
15048 + case 'display' :
15049 + if ( -1 == get_option( 'blog_public' ) && ! current_user_can( 'read' ) ) {
15050 + return new WP_Error( 'unauthorized', 'User cannot view taxonomy', 403 );
15051 + }
15052 + break;
15053 + default :
15054 + return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
15055 + }
15056 +
15057 + $response = array();
15058 + $response['ID'] = (int) $taxonomy->term_id;
15059 + $response['name'] = (string) $taxonomy->name;
15060 + $response['slug'] = (string) $taxonomy->slug;
15061 + $response['description'] = (string) $taxonomy->description;
15062 + $response['post_count'] = (int) $taxonomy->count;
15063 +
15064 + if ( is_taxonomy_hierarchical( $taxonomy_type ) ) {
15065 + $response['parent'] = (int) $taxonomy->parent;
15066 + }
15067 +
15068 + $response['meta'] = (object) array(
15069 + 'links' => (object) array(
15070 + 'self' => (string) $this->links->get_taxonomy_link( $this->site->get_id(), $taxonomy->slug, $taxonomy_type ),
15071 + 'help' => (string) $this->links->get_taxonomy_link( $this->site->get_id(), $taxonomy->slug, $taxonomy_type, 'help' ),
15072 + 'site' => (string) $this->links->get_site_link( $this->site->get_id() ),
15073 + ),
15074 + );
15075 +
15076 + return (object) $response;
15077 + }
15078 +
15079 + // TODO: factor this out into site
15080 + private function get_media_item_v1_1( $media_id ) {
15081 + $media_item = get_post( $media_id );
15082 +
15083 + if ( ! $media_item || is_wp_error( $media_item ) )
15084 + return new WP_Error( 'unknown_media', 'Unknown Media', 404 );
15085 +
15086 + $file = basename( wp_get_attachment_url( $media_item->ID ) );
15087 + $file_info = pathinfo( $file );
15088 + $ext = $file_info['extension'];
15089 +
15090 + $response = array(
15091 + 'ID' => $media_item->ID,
15092 + 'URL' => wp_get_attachment_url( $media_item->ID ),
15093 + 'guid' => $media_item->guid,
15094 + 'date' => (string) WPCOM_JSON_API_Date::format_date( $media_item->post_date_gmt, $media_item->post_date ),
15095 + 'post_ID' => $media_item->post_parent,
15096 + 'author_ID' => (int) $media_item->post_author,
15097 + 'file' => $file,
15098 + 'mime_type' => $media_item->post_mime_type,
15099 + 'extension' => $ext,
15100 + 'title' => $media_item->post_title,
15101 + 'caption' => $media_item->post_excerpt,
15102 + 'description' => $media_item->post_content,
15103 + 'alt' => get_post_meta( $media_item->ID, '_wp_attachment_image_alt', true ),
15104 + 'thumbnails' => array()
15105 + );
15106 +
15107 + if ( in_array( $ext, array( 'jpg', 'jpeg', 'png', 'gif' ) ) ) {
15108 + $metadata = wp_get_attachment_metadata( $media_item->ID );
15109 + if ( isset( $metadata['height'], $metadata['width'] ) ) {
15110 + $response['height'] = $metadata['height'];
15111 + $response['width'] = $metadata['width'];
15112 + }
15113 +
15114 + if ( isset( $metadata['sizes'] ) ) {
15115 + /**
15116 + * Filter the thumbnail sizes available for each attachment ID.
15117 + *
15118 + * @module json-api
15119 + *
15120 + * @since 3.9.0
15121 + *
15122 + * @param array $metadata['sizes'] Array of thumbnail sizes available for a given attachment ID.
15123 + * @param string $media_id Attachment ID.
15124 + */
15125 + $sizes = apply_filters( 'rest_api_thumbnail_sizes', $metadata['sizes'], $media_id );
15126 + if ( is_array( $sizes ) ) {
15127 + foreach ( $sizes as $size => $size_details ) {
15128 + $response['thumbnails'][ $size ] = dirname( $response['URL'] ) . '/' . $size_details['file'];
15129 + }
15130 + }
15131 + }
15132 +
15133 + if ( isset( $metadata['image_meta'] ) ) {
15134 + $response['exif'] = $metadata['image_meta'];
15135 + }
15136 + }
15137 +
15138 + if ( in_array( $ext, array( 'mp3', 'm4a', 'wav', 'ogg' ) ) ) {
15139 + $metadata = wp_get_attachment_metadata( $media_item->ID );
15140 + $response['length'] = $metadata['length'];
15141 + $response['exif'] = $metadata;
15142 + }
15143 +
15144 + if ( in_array( $ext, array( 'ogv', 'mp4', 'mov', 'wmv', 'avi', 'mpg', '3gp', '3g2', 'm4v' ) ) ) {
15145 + $metadata = wp_get_attachment_metadata( $media_item->ID );
15146 + if ( isset( $metadata['height'], $metadata['width'] ) ) {
15147 + $response['height'] = $metadata['height'];
15148 + $response['width'] = $metadata['width'];
15149 + }
15150 +
15151 + if ( isset( $metadata['length'] ) ) {
15152 + $response['length'] = $metadata['length'];
15153 + }
15154 +
15155 + // add VideoPress info
15156 + if ( function_exists( 'video_get_info_by_blogpostid' ) ) {
15157 + $info = video_get_info_by_blogpostid( $this->site->get_id(), $media_id );
15158 +
15159 + // Thumbnails
15160 + if ( function_exists( 'video_format_done' ) && function_exists( 'video_image_url_by_guid' ) ) {
15161 + $response['thumbnails'] = array( 'fmt_hd' => '', 'fmt_dvd' => '', 'fmt_std' => '' );
15162 + foreach ( $response['thumbnails'] as $size => $thumbnail_url ) {
15163 + if ( video_format_done( $info, $size ) ) {
15164 + $response['thumbnails'][ $size ] = video_image_url_by_guid( $info->guid, $size );
15165 + } else {
15166 + unset( $response['thumbnails'][ $size ] );
15167 + }
15168 + }
15169 + }
15170 +
15171 + $response['videopress_guid'] = $info->guid;
15172 + $response['videopress_processing_done'] = true;
15173 + if ( '0000-00-00 00:00:00' == $info->finish_date_gmt ) {
15174 + $response['videopress_processing_done'] = false;
15175 + }
15176 + }
15177 + }
15178 +
15179 + $response['thumbnails'] = (object) $response['thumbnails'];
15180 +
15181 + $response['meta'] = (object) array(
15182 + 'links' => (object) array(
15183 + 'self' => (string) $this->links->get_media_link( $this->site->get_id(), $media_id ),
15184 + 'help' => (string) $this->links->get_media_link( $this->site->get_id(), $media_id, 'help' ),
15185 + 'site' => (string) $this->links->get_site_link( $this->site->get_id() ),
15186 + ),
15187 + );
15188 +
15189 + // add VideoPress link to the meta
15190 + if ( in_array( $ext, array( 'ogv', 'mp4', 'mov', 'wmv', 'avi', 'mpg', '3gp', '3g2', 'm4v' ) ) ) {
15191 + if ( function_exists( 'video_get_info_by_blogpostid' ) ) {
15192 + $response['meta']->links->videopress = (string) $this->links->get_link( '/videos/%s', $response['videopress_guid'], '' );
15193 + }
15194 + }
15195 +
15196 + if ( $media_item->post_parent > 0 ) {
15197 + $response['meta']->links->parent = (string) $this->links->get_post_link( $this->site->get_id(), $media_item->post_parent );
15198 + }
15199 +
15200 + return (object) $response;
15201 + }
15202 +}
15203
15204 diff --git a/plugins/jetpack/sal/class.json-api-post-jetpack.php b/plugins/jetpack/sal/class.json-api-post-jetpack.php
15205 new file mode 100644
15206 index 0000000..f680313
15207 --- /dev/null
15208 +++ b/plugins/jetpack/sal/class.json-api-post-jetpack.php
15209 @@ -0,0 +1,34 @@
15210 +<?php
15211 +class Jetpack_Post extends SAL_Post {
15212 + public function get_like_count() {
15213 + return 0;
15214 + }
15215 +
15216 + public function is_liked() {
15217 + return false;
15218 + }
15219 +
15220 + public function is_reblogged() {
15221 + return false;
15222 + }
15223 +
15224 + public function is_following() {
15225 + return false;
15226 + }
15227 +
15228 + public function get_global_id() {
15229 + return '';
15230 + }
15231 +
15232 + public function get_geo() {
15233 + return false;
15234 + }
15235 +
15236 + protected function get_avatar_url( $email, $avatar_size = 96 ) {
15237 + $avatar_url = get_avatar_url( $email, array( 'size' => $avatar_size ) );
15238 + if ( !$avatar_url || is_wp_error( $avatar_url ) ) {
15239 + return '';
15240 + }
15241 + return $avatar_url;
15242 + }
15243 +}
15244
15245 diff --git a/plugins/jetpack/sal/class.json-api-site-base.php b/plugins/jetpack/sal/class.json-api-site-base.php
15246 index 8c8d511..c4f6afc 100644
15247 --- a/plugins/jetpack/sal/class.json-api-site-base.php
15248 +++ b/plugins/jetpack/sal/class.json-api-site-base.php
15249 @@ -1,14 +1,51 @@
15250 <?php
15251
15252 +/*
15253 + * WARNING: This file is distributed verbatim in Jetpack.
15254 + * There should be nothing WordPress.com specific in this file.
15255 + *
15256 + * @hide-in-jetpack
15257 + */
15258 +
15259 +require_once dirname( __FILE__ ) . '/class.json-api-date.php';
15260 +require_once dirname( __FILE__ ) . '/class.json-api-post-base.php';
15261
15262 /**
15263 * Base class for the Site Abstraction Layer (SAL)
15264 + * Note that this is the site "as seen by user $user_id with token $token", which
15265 + * is why we pass the token to the platform; these site instances are value objects
15266 + * to be used in the context of a single request for a single user.
15267 + * Also note that at present this class _assumes_ you've "switched to"
15268 + * the site in question, and functions like `get_bloginfo( 'name' )` will
15269 + * therefore return the correct value
15270 **/
15271 abstract class SAL_Site {
15272 public $blog_id;
15273 + public $platform;
15274
15275 - public function __construct( $blog_id ) {
15276 + public function __construct( $blog_id, $platform ) {
15277 $this->blog_id = $blog_id;
15278 + $this->platform = $platform;
15279 + }
15280 +
15281 + public function get_id() {
15282 + return $this->blog_id;
15283 + }
15284 +
15285 + public function get_name() {
15286 + return (string) htmlspecialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES );
15287 + }
15288 +
15289 + public function get_description() {
15290 + return (string) htmlspecialchars_decode( get_bloginfo( 'description' ), ENT_QUOTES );
15291 + }
15292 +
15293 + public function get_url() {
15294 + return (string) home_url();
15295 + }
15296 +
15297 + public function get_post_count() {
15298 + return (int) wp_count_posts( 'post' )->publish;
15299 }
15300
15301 abstract public function has_videopress();
15302 @@ -55,17 +92,224 @@ abstract class SAL_Site {
15303
15304 abstract public function after_render( &$response );
15305
15306 + // TODO - factor this out? Seems an odd thing to have on a site
15307 abstract public function after_render_options( &$options );
15308
15309 + // wrap a WP_Post object with SAL methods
15310 + abstract public function wrap_post( $post, $context );
15311 +
15312 +
15313 + public function get_post_by_id( $post_id, $context ) {
15314 + $post = get_post( $post_id, OBJECT, $context );
15315 +
15316 + if ( ! $post ) {
15317 + return new WP_Error( 'unknown_post', 'Unknown post', 404 );
15318 + }
15319 +
15320 + $wrapped_post = $this->wrap_post( $post, $context );
15321 +
15322 + // validate access
15323 + return $this->validate_access( $wrapped_post );
15324 + }
15325 +
15326 + /**
15327 + * Validate current user can access the post
15328 + *
15329 + * @return WP_Error or post
15330 + */
15331 + private function validate_access( $post ) {
15332 + $context = $post->context;
15333 +
15334 + if ( ! $this->is_post_type_allowed( $post->post_type )
15335 + &&
15336 + ( ! function_exists( 'is_post_freshly_pressed' ) || ! is_post_freshly_pressed( $post->ID ) ) ) {
15337 + return new WP_Error( 'unknown_post', 'Unknown post', 404 );
15338 + }
15339 +
15340 + switch ( $context ) {
15341 + case 'edit' :
15342 + if ( ! current_user_can( 'edit_post', $post ) ) {
15343 + return new WP_Error( 'unauthorized', 'User cannot edit post', 403 );
15344 + }
15345 + break;
15346 + case 'display' :
15347 + $can_view = $this->user_can_view_post( $post );
15348 + if ( is_wp_error( $can_view ) ) {
15349 + return $can_view;
15350 + }
15351 + break;
15352 + default :
15353 + return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
15354 + }
15355 +
15356 + return $post;
15357 + }
15358 +
15359 + // copied from class.json-api-endpoints.php
15360 + private function is_post_type_allowed( $post_type ) {
15361 + // if the post type is empty, that's fine, WordPress will default to post
15362 + if ( empty( $post_type ) )
15363 + return true;
15364 +
15365 + // allow special 'any' type
15366 + if ( 'any' == $post_type )
15367 + return true;
15368 +
15369 + // check for allowed types
15370 + if ( in_array( $post_type, $this->_get_whitelisted_post_types() ) )
15371 + return true;
15372 +
15373 + return false;
15374 + }
15375 +
15376 + // copied from class.json-api-endpoints.php
15377 + /**
15378 + * Gets the whitelisted post types that JP should allow access to.
15379 + *
15380 + * @return array Whitelisted post types.
15381 + */
15382 + private function _get_whitelisted_post_types() {
15383 + $allowed_types = array( 'post', 'page', 'revision' );
15384 +
15385 + /**
15386 + * Filter the post types Jetpack has access to, and can synchronize with WordPress.com.
15387 + *
15388 + * @module json-api
15389 + *
15390 + * @since 2.2.3
15391 + *
15392 + * @param array $allowed_types Array of whitelisted post types. Default to `array( 'post', 'page', 'revision' )`.
15393 + */
15394 + $allowed_types = apply_filters( 'rest_api_allowed_post_types', $allowed_types );
15395 +
15396 + return array_unique( $allowed_types );
15397 + }
15398 +
15399 + // copied and modified a little from class.json-api-endpoints.php
15400 + private function user_can_view_post( $post ) {
15401 + if ( !$post || is_wp_error( $post ) ) {
15402 + return false;
15403 + }
15404 +
15405 + if ( 'inherit' === $post->post_status ) {
15406 + $parent_post = get_post( $post->post_parent );
15407 + $post_status_obj = get_post_status_object( $parent_post->post_status );
15408 + } else {
15409 + $post_status_obj = get_post_status_object( $post->post_status );
15410 + }
15411 +
15412 + $authorized = (
15413 + $post_status_obj->public ||
15414 + ( is_user_logged_in() &&
15415 + (
15416 + ( $post_status_obj->protected && current_user_can( 'edit_post', $post->ID ) ) ||
15417 + ( $post_status_obj->private && current_user_can( 'read_post', $post->ID ) ) ||
15418 + ( 'trash' === $post->post_status && current_user_can( 'edit_post', $post->ID ) ) ||
15419 + 'auto-draft' === $post->post_status
15420 + )
15421 + )
15422 + );
15423 +
15424 + if ( ! $authorized ) {
15425 + return new WP_Error( 'unauthorized', 'User cannot view post', 403 );
15426 + }
15427 +
15428 + if (
15429 + -1 == get_option( 'blog_public' ) &&
15430 + /**
15431 + * Filter access to a specific post.
15432 + *
15433 + * @module json-api
15434 + *
15435 + * @since 3.4.0
15436 + *
15437 + * @param bool current_user_can( 'read_post', $post->ID ) Can the current user access the post.
15438 + * @param WP_Post $post Post data.
15439 + */
15440 + ! apply_filters(
15441 + 'wpcom_json_api_user_can_view_post',
15442 + current_user_can( 'read_post', $post->ID ),
15443 + $post
15444 + )
15445 + ) {
15446 + return new WP_Error( 'unauthorized', 'User cannot view post', array( 'status_code' => 403, 'error' => 'private_blog' ) );
15447 + }
15448 +
15449 + if ( strlen( $post->post_password ) && !current_user_can( 'edit_post', $post->ID ) ) {
15450 + return new WP_Error( 'unauthorized', 'User cannot view password protected post', array( 'status_code' => 403, 'error' => 'password_protected' ) );
15451 + }
15452 +
15453 + return true;
15454 + }
15455 +
15456 + /**
15457 + * Get post ID by name
15458 + *
15459 + * Attempts to match name on post title and page path
15460 + *
15461 + * @param string $name
15462 + *
15463 + * @return int|object Post ID on success, WP_Error object on failure
15464 + */
15465 + public function get_post_id_by_name( $name ) {
15466 + $name = sanitize_title( $name );
15467 +
15468 + if ( ! $name ) {
15469 + return new WP_Error( 'invalid_post', 'Invalid post', 400 );
15470 + }
15471 +
15472 + $posts = get_posts( array(
15473 + 'name' => $name,
15474 + 'numberposts' => 1,
15475 + 'post_type' => $this->_get_whitelisted_post_types(),
15476 + ) );
15477 +
15478 + if ( ! $posts || ! isset( $posts[0]->ID ) || ! $posts[0]->ID ) {
15479 + $page = get_page_by_path( $name );
15480 +
15481 + if ( ! $page ) {
15482 + return new WP_Error( 'unknown_post', 'Unknown post', 404 );
15483 + }
15484 +
15485 + return $page->ID;
15486 + }
15487 +
15488 + return (int) $posts[0]->ID;
15489 + }
15490 +
15491 + /**
15492 + * Get post by name
15493 + *
15494 + * Attempts to match name on post title and page path
15495 + *
15496 + * @param string $name
15497 + * @param string $context (display or edit)
15498 + *
15499 + * @return object Post object on success, WP_Error object on failure
15500 + **/
15501 + public function get_post_by_name( $name, $context ) {
15502 + $post_id = $this->get_post_id_by_name( $name );
15503 + if ( is_wp_error( $post_id ) ) {
15504 + return $post_id;
15505 + }
15506 +
15507 + return $this->get_post_by_id( $post_id, $context );
15508 + }
15509 +
15510 function user_can_manage() {
15511 - current_user_can( 'manage_options' ); // remove this attribute in favor of 'capabilities'
15512 + current_user_can( 'manage_options' );
15513 + }
15514 +
15515 + function get_xmlrpc_url() {
15516 + $xmlrpc_scheme = apply_filters( 'wpcom_json_api_xmlrpc_scheme', parse_url( get_option( 'home' ), PHP_URL_SCHEME ) );
15517 + return site_url( 'xmlrpc.php', $xmlrpc_scheme );
15518 }
15519
15520 function get_registered_date() {
15521 if ( function_exists( 'get_blog_details' ) ) {
15522 $blog_details = get_blog_details();
15523 if ( ! empty( $blog_details->registered ) ) {
15524 - return $this->format_date( $blog_details->registered );
15525 + return WPCOM_JSON_API_Date::format_date( $blog_details->registered );
15526 }
15527 }
15528
15529 @@ -134,55 +378,134 @@ abstract class SAL_Site {
15530 return $logo_setting;
15531 }
15532
15533 - /**
15534 - * Returns ISO 8601 formatted datetime: 2011-12-08T01:15:36-08:00
15535 - *
15536 - * @param $date_gmt (string) GMT datetime string.
15537 - * @param $date (string) Optional. Used to calculate the offset from GMT.
15538 - *
15539 - * @return string
15540 - */
15541 - function format_date( $date_gmt, $date = null ) {
15542 - $timestamp_gmt = strtotime( "$date_gmt+0000" );
15543 + function get_timezone() {
15544 + return (string) get_option( 'timezone_string' );
15545 + }
15546
15547 - if ( null === $date ) {
15548 - $timestamp = $timestamp_gmt;
15549 - $hours = $minutes = $west = 0;
15550 - } else {
15551 - $date_time = date_create( "$date+0000" );
15552 - if ( $date_time ) {
15553 - $timestamp = date_format( $date_time, 'U' );
15554 - } else {
15555 - $timestamp = 0;
15556 - }
15557 + function get_gmt_offset() {
15558 + return (float) get_option( 'gmt_offset' );
15559 + }
15560
15561 - // "0000-00-00 00:00:00" == -62169984000
15562 - if ( - 62169984000 == $timestamp_gmt ) {
15563 - // WordPress sets post_date=now, post_date_gmt="0000-00-00 00:00:00" for all drafts
15564 - // WordPress sets post_modified=now, post_modified_gmt="0000-00-00 00:00:00" for new drafts
15565 -
15566 - // Try to guess the correct offset from the blog's options.
15567 - $timezone_string = get_option( 'timezone_string' );
15568 -
15569 - if ( $timezone_string && $date_time ) {
15570 - $timezone = timezone_open( $timezone_string );
15571 - if ( $timezone ) {
15572 - $offset = $timezone->getOffset( $date_time );
15573 - }
15574 - } else {
15575 - $offset = 3600 * get_option( 'gmt_offset' );
15576 - }
15577 - } else {
15578 - $offset = $timestamp - $timestamp_gmt;
15579 - }
15580 + function get_login_url() {
15581 + return wp_login_url();
15582 + }
15583 +
15584 + function get_admin_url() {
15585 + return get_admin_url();
15586 + }
15587 +
15588 + function get_unmapped_url() {
15589 + return get_site_url( $this->blog_id );
15590 + }
15591 +
15592 + function get_theme_slug() {
15593 + return get_option( 'stylesheet' );
15594 + }
15595 +
15596 + function get_header_image() {
15597 + return get_theme_mod( 'header_image_data' );
15598 + }
15599 +
15600 + function get_background_color() {
15601 + return get_theme_mod( 'background_color' );
15602 + }
15603 +
15604 + function get_image_default_link_type() {
15605 + return get_option( 'image_default_link_type' );
15606 + }
15607 +
15608 + function get_image_thumbnail_width() {
15609 + return (int) get_option( 'thumbnail_size_w' );
15610 + }
15611
15612 - $west = $offset < 0;
15613 - $offset = abs( $offset );
15614 - $hours = (int) floor( $offset / 3600 );
15615 - $offset -= $hours * 3600;
15616 - $minutes = (int) floor( $offset / 60 );
15617 + function get_image_thumbnail_height() {
15618 + return (int) get_option( 'thumbnail_size_h' );
15619 + }
15620 +
15621 + function get_image_thumbnail_crop() {
15622 + return get_option( 'thumbnail_crop' );
15623 + }
15624 +
15625 + function get_image_medium_width() {
15626 + return (int) get_option( 'medium_size_w' );
15627 + }
15628 +
15629 + function get_image_medium_height() {
15630 + return (int) get_option( 'medium_size_h' );
15631 + }
15632 +
15633 + function get_image_large_width() {
15634 + return (int) get_option( 'large_size_w' );
15635 + }
15636 +
15637 + function get_image_large_height() {
15638 + return (int) get_option( 'large_size_h' );
15639 + }
15640 +
15641 + function get_permalink_structure() {
15642 + return get_option( 'permalink_structure' );
15643 + }
15644 +
15645 + function get_default_post_format() {
15646 + return get_option( 'default_post_format' );
15647 + }
15648 +
15649 + function get_default_category() {
15650 + return (int) get_option( 'default_category' );
15651 + }
15652 +
15653 + function get_show_on_front() {
15654 + return get_option( 'show_on_front' );
15655 + }
15656 +
15657 + function is_custom_front_page() {
15658 + return ( 'page' === $this->get_show_on_front() );
15659 + }
15660 +
15661 + function get_default_likes_enabled() {
15662 + return (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
15663 + }
15664 +
15665 + function get_default_sharing_status() {
15666 + $default_sharing_status = false;
15667 + if ( class_exists( 'Sharing_Service' ) ) {
15668 + $ss = new Sharing_Service();
15669 + $blog_services = $ss->get_blog_services();
15670 + $default_sharing_status = ! empty( $blog_services['visible'] );
15671 }
15672 + return (bool) $default_sharing_status;
15673 + }
15674 +
15675 + function get_default_comment_status() {
15676 + return 'closed' !== get_option( 'default_comment_status' );
15677 + }
15678 +
15679 + function default_ping_status() {
15680 + return 'closed' !== get_option( 'default_ping_status' );
15681 + }
15682 +
15683 + function is_publicize_permanently_disabled() {
15684 + $publicize_permanently_disabled = false;
15685 + if ( function_exists( 'is_publicize_permanently_disabled' ) ) {
15686 + $publicize_permanently_disabled = is_publicize_permanently_disabled( $this->blog_id );
15687 + }
15688 + return $publicize_permanently_disabled;
15689 + }
15690 +
15691 + function get_page_on_front() {
15692 + return (int) get_option( 'page_on_front' );
15693 + }
15694 +
15695 + function get_page_for_posts() {
15696 + return (int) get_option( 'page_for_posts' );
15697 + }
15698 +
15699 + function is_headstart() {
15700 + return get_option( 'headstart' );
15701 + }
15702
15703 - return (string) gmdate( 'Y-m-d\\TH:i:s', $timestamp ) . sprintf( '%s%02d:%02d', $west ? '-' : '+', $hours, $minutes );
15704 + function get_wordpress_version() {
15705 + global $wp_version;
15706 + return $wp_version;
15707 }
15708 }
15709
15710 diff --git a/plugins/jetpack/sal/class.json-api-site-jetpack-base.php b/plugins/jetpack/sal/class.json-api-site-jetpack-base.php
15711 index fac33f7..fdeec82 100644
15712 --- a/plugins/jetpack/sal/class.json-api-site-jetpack-base.php
15713 +++ b/plugins/jetpack/sal/class.json-api-site-jetpack-base.php
15714 @@ -111,9 +111,9 @@ abstract class Abstract_Jetpack_Site extends SAL_Site {
15715 **/
15716
15717 private function is_main_site( $response ) {
15718 - if ( isset( $response['options']['main_network_site'], $response['options']['unmapped_url'] ) ) {
15719 - $main_network_site_url = set_url_scheme( $response['options']['main_network_site'], 'http' );
15720 - $unmapped_url = set_url_scheme( $response['options']['unmapped_url'], 'http' );
15721 + if ( isset( $response['options']->main_network_site, $response['options']->unmapped_url ) ) {
15722 + $main_network_site_url = set_url_scheme( $response['options']->main_network_site, 'http' );
15723 + $unmapped_url = set_url_scheme( $response['options']->unmapped_url, 'http' );
15724 if ( $unmapped_url === $main_network_site_url ) {
15725 return true;
15726 }
15727
15728 diff --git a/plugins/jetpack/sal/class.json-api-site-jetpack.php b/plugins/jetpack/sal/class.json-api-site-jetpack.php
15729 index fcd420d..32dd7a3 100644
15730 --- a/plugins/jetpack/sal/class.json-api-site-jetpack.php
15731 +++ b/plugins/jetpack/sal/class.json-api-site-jetpack.php
15732 @@ -1,6 +1,7 @@
15733 <?php
15734
15735 require_once dirname( __FILE__ ) . '/class.json-api-site-jetpack-base.php';
15736 +require_once dirname( __FILE__ ) . '/class.json-api-post-jetpack.php';
15737
15738 // this code runs on Jetpack (.org) sites
15739 class Jetpack_Site extends Abstract_Jetpack_Site {
15740 @@ -123,4 +124,12 @@ class Jetpack_Site extends Abstract_Jetpack_Site {
15741
15742 function get_ak_vp_bundle_enabled() {}
15743
15744 + /**
15745 + * Post functions
15746 + */
15747 +
15748 + function wrap_post( $post, $context ) {
15749 + return new Jetpack_Post( $this, $post, $context );
15750 + }
15751 +
15752 }
15753
15754 diff --git a/plugins/jetpack/sal/class.json-api-token.php b/plugins/jetpack/sal/class.json-api-token.php
15755 new file mode 100644
15756 index 0000000..10b16f6
15757 --- /dev/null
15758 +++ b/plugins/jetpack/sal/class.json-api-token.php
15759 @@ -0,0 +1,60 @@
15760 +<?php
15761 +
15762 +/**
15763 + * So that we have a real class instead of just passing around an array
15764 + */
15765 +class SAL_Token {
15766 +
15767 + public $blog_id;
15768 + public $user_id;
15769 + public $scope;
15770 + public $client_id;
15771 + public $external_user_id;
15772 + public $external_user_code;
15773 + public $auth_type;
15774 +
15775 + function __construct( $blog_id, $user_id, $scope, $client_id, $external_user_id, $external_user_code, $auth_type ) {
15776 + $this->blog_id = $blog_id; // if blog_id is set and scope is not global, limit to that blog
15777 + $this->user_id = $user_id;
15778 + $this->client_id = $client_id;
15779 + $this->scope = $scope;
15780 + $this->external_user_id = $external_user_id;
15781 + $this->external_user_code = $external_user_code;
15782 + $this->auth_type = $auth_type;
15783 + }
15784 +
15785 + public function is_global() {
15786 + return $scope === 'global';
15787 + }
15788 +
15789 + static function for_anonymous_user() {
15790 + return new SAL_Token(
15791 + null,
15792 + get_current_user_id(),
15793 + null, // there's only ever one scope in our current API implementation, auth or global
15794 + null,
15795 + null,
15796 + null,
15797 + null
15798 + );
15799 + }
15800 +
15801 + static function from_rest_token( $token ) {
15802 + $user_id = isset( $token['user_id'] ) ? $token['user_id'] : get_current_user_id();
15803 + $scope = isset( $token['scope'] ) ? $token['scope'][0] : null;
15804 + $client_id = isset( $token['client_id'] ) ? $token['client_id'] : null;
15805 + $external_user_id = isset( $token['external_user_id'] ) ? $token['external_user_id'] : null;
15806 + $external_user_code = isset( $token['external_user_code'] ) ? $token['external_user_code'] : null;
15807 + $auth = isset( $token['auth'] ) ? $token['auth'] : null;
15808 +
15809 + return new SAL_Token(
15810 + $token['blog_id'],
15811 + $user_id,
15812 + $scope, // there's only ever one scope in our current API implementation, auth or global
15813 + $client_id,
15814 + $external_user_id,
15815 + $external_user_code,
15816 + $auth
15817 + );
15818 + }
15819 +}
15820
15821 diff --git a/plugins/jetpack/scss/organisms/_banners.scss b/plugins/jetpack/scss/organisms/_banners.scss
15822 index 38e2903..035c1cb 100644
15823 --- a/plugins/jetpack/scss/organisms/_banners.scss
15824 +++ b/plugins/jetpack/scss/organisms/_banners.scss
15825 @@ -1,350 +1,28 @@
15826 -#message.jp-identity-crisis {
15827 - display: table;
15828 - padding: 0;
15829 - background: #d94f4f;
15830 - border: none;
15831 - color: #fff;
15832 -
15833 - .service-mark {
15834 - display: table-cell;
15835 - vertical-align: middle;
15836 - padding: 0 20px;
15837 - &:before {
15838 - font-family: "jetpack" !important;
15839 - content: "\f102";
15840 - font-size: 40px;
15841 - line-height: 1;
15842 - color: #fff;
15843 - }
15844 - }
15845 - .jp-id-banner__content {
15846 - display: table;
15847 - padding: 10px 10px 10px 0;
15848 -
15849 - .success-notice {
15850 - color: #fff;
15851 - }
15852 -
15853 - .banner-content {
15854 - display: table-row;
15855 -
15856 - p {
15857 - margin: 0;
15858 - font-size: 13px;
15859 - color: #fff;
15860 - opacity: 1.0;
15861 -
15862 - strong {
15863 - text-decoration: none;
15864 - font-weight: 600;
15865 - color: #fff;
15866 - opacity: 1.0;
15867 - }
15868 - }
15869 -
15870 - a {
15871 - display: inline-block;
15872 - color: rgba(255, 255, 255, 0.80);
15873 - border-bottom: 1px solid rgba(255, 255, 255, 0.5);
15874 - text-decoration: none;
15875 - -webkit-transform: all 1s ease;
15876 - }
15877 - }
15878 - .jp-btn-group {
15879 - display: table-row;
15880 -
15881 - a {
15882 - display: inline-block;
15883 - margin: 10px 0 0 0;
15884 - padding: 0 0 1px 0;
15885 - color: rgba(255, 255, 255, 0.80);
15886 - border-bottom: 1px solid rgba(255, 255, 255, 0.5);
15887 - text-decoration: none;
15888 - -webkit-transform: all 1s ease;
15889 -
15890 - &:hover {
15891 - color: rgba(255, 255, 255, 1.0);
15892 - border-bottom: 1px solid rgba(255, 255, 255, 0.80);
15893 - }
15894 - }
15895 -
15896 - .idc-separator {
15897 - margin: 0 6px;
15898 - }
15899 - }
15900 - }
15901 -}
15902 -
15903 -#message.jp-banner {
15904 - position: relative;
15905 - margin-bottom: 26px;
15906 - padding: 17px 44px 17px 0;
15907 - border: none;
15908 - background: #81a844;
15909 - color: #fff;
15910 - overflow: hidden;
15911 - box-sizing: border-box;
15912 -
15913 - &:after {
15914 - content: '';
15915 - position: absolute;
15916 - bottom: 0;
15917 - right: -100px;
15918 - width: 100%;
15919 - height: 50px;
15920 - background: url('../images/the-footcloud.svg') right bottom no-repeat;
15921 - pointer-events: none;
15922 - z-index: 1;
15923 -
15924 - @media ( max-width: 830px ) {
15925 - display: none;
15926 - }
15927 - }
15928 - a {
15929 - color: #fff;
15930 - }
15931 - h2 {
15932 - display: block;
15933 - margin: 0;
15934 - padding: 0;
15935 - color: #fff;
15936 - font-size: 20px;
15937 - line-height: 1.3;
15938 - font-weight: normal;
15939 -
15940 - + p {
15941 - margin-top: 10px;
15942 - }
15943 - }
15944 -}
15945 -
15946 -.jp-banner a {
15947 - padding: 0;
15948 -}
15949 -
15950 -#message .jp-banner__content {
15951 - color: #dfffcc;
15952 - padding: 0 0 0 20px;
15953 - box-sizing: border-box;
15954 - width: 50%;
15955 -
15956 - @media ( max-width: 768px ) {
15957 - width: 100%;
15958 -
15959 - &.is-connection {
15960 - width: 100%;
15961 - }
15962 - }
15963 -
15964 - a {
15965 - text-decoration: underline;
15966 - /* Medium.com text underline hack - doesn't work well on small mobile devices... reverting to traditional underline
15967 - background-image: linear-gradient(to bottom, rgba(0,0,0,0) 75%, #fff 50%);
15968 - background-repeat: repeat-x;
15969 - background-size: 2px 2px;
15970 - background-position: 0 95%;
15971 - display: inline-block;
15972 -
15973 - @media not all, only screen and (min-resolution: 2dppx), only screen and (-webkit-min-device-pixel-ratio: 2) {
15974 - background-image: linear-gradient(to bottom, rgba(0,0,0,0) 75%, #fff 75%);
15975 - background-repeat: repeat-x;
15976 - }
15977 - */
15978 - }
15979 - p {
15980 - margin: 0;
15981 +.updated { // utlizes some core styles, overrides some others
15982 + &.jp-banner {
15983 + position: relative;
15984 padding: 0;
15985 - line-height: 1.5;
15986 - }
15987 -}
15988 -
15989 -#message .jp-banner__action-container {
15990 - position: absolute;
15991 - top: 0;
15992 - right: 0;
15993 - padding-left: 20px;
15994 - width: 50%;
15995 - height: 100%;
15996 - box-sizing: border-box;
15997 -
15998 - @media ( max-width: 768px ) {
15999 - position: static;
16000 - margin: 14px 0 9px;
16001 - width: 100%;
16002 - }
16003 - &.is-full-width {
16004 - position: static;
16005 - margin: 14px 0 9px;
16006 - width: 100%;
16007 - height: auto;
16008 - }
16009 - &.is-connection {
16010 -
16011 - @media ( max-width: 768px ) {
16012 - width: 100%;
16013 - }
16014 - }
16015 -}
16016 -
16017 -// 'activate now' banner displayed on dashboard
16018 -#message {
16019 - &.is-opt-in {
16020 - .jp-banner__content {
16021 - width: 60%;
16022 - }
16023 - .jp-banner__action-container {
16024 - width: 40%;
16025 - }
16026 -
16027 - @media ( max-width: 768px ) {
16028 - .jp-banner__content, .jp-banner__action-container {
16029 - width: 100%;
16030 - }
16031 - }
16032 - }
16033 -}
16034 -
16035 -#message .jp-banner__button {
16036 - display: inline-block;
16037 - position: absolute;
16038 - top: 50%;
16039 - right: 125px;
16040 - margin-top: -23px;
16041 - padding: em(12px, 21px) em(18px, 21px) em(8px, 21px) em(12px, 21px);
16042 - border-radius: 6px;
16043 - box-sizing: border-box;
16044 - background: #518d2a;
16045 - box-shadow:
16046 - 0 4px 0 #3e6c20,
16047 - 0 2px 3px rgba(0,0,0,.2);
16048 - font: 400 1.5em/1 'Open Sans', Helvetica, sans-serif;
16049 - transition: all .1s ease-in-out;
16050 -
16051 - @media ( max-width: 1175px ){
16052 - font-size: 1.25em;
16053 - right: 110px;
16054 - }
16055 -
16056 - @media ( max-width: 830px ){
16057 - right: 45px;
16058 - }
16059 -
16060 - @media ( max-width: 768px ) {
16061 - position: static;
16062 - margin: 0;
16063 - }
16064 - @media ( max-width: 420px ) {
16065 - display: block;
16066 - width: 100%;
16067 - text-align: center;
16068 - font-size: 1.1em;
16069 - right: 0;
16070 }
16071 - &:hover,
16072 - &:focus {
16073 - box-shadow:
16074 - 0 4px 0 #3e6c20,
16075 - 0 2px 3px rgba(0,0,0,.2);
16076 - }
16077 - &:active {
16078 - outline: none;
16079 - transform: translateY(2px);
16080 - box-shadow:
16081 - 0 0px 0 #3e6c20,
16082 - 0 0 0 rgba(0,0,0,.2);
16083
16084 - &:after {
16085 - // fixes buggy clicks
16086 - top: -2px;
16087 - }
16088 + .jp-banner__header {
16089 + font-size: 18px;
16090 + font-weight: 400;
16091 + margin-top: 0;
16092 }
16093 - &:before {
16094 - content: '';
16095 - display: inline-block;
16096 - position: relative;
16097 - vertical-align: middle;
16098 - background: url('../images/connect-plug.svg') center center no-repeat;
16099 - background-size: 100%;
16100 - top: -2px;
16101 - margin-right: 13px;
16102 - width: 22px;
16103 - height: 22px;
16104
16105 - @media ( max-width: 420px ) {
16106 - display: none;
16107 - }
16108 + .jp-banner__button-container {
16109 + padding: 12px 0 0;
16110 }
16111 }
16112
16113 -#message .is-full-width .jp-banner__button {
16114 - position: static;
16115 - margin: 0;
16116 +.jp-banner .notice-dismiss {
16117 + text-decoration: none;
16118 }
16119
16120 -// Changes icon for opt-in message
16121 -#message .is-opt-in .jp-banner__button:before {
16122 - content: "\f147";
16123 - width: 20px;
16124 - height: 20px;
16125 - background: none;
16126 - font: normal 20px/1 Dashicons;
16127 +.jp-banner__description {
16128 + font-size: 14px;
16129 }
16130
16131 -#message .jp-banner__dismiss {
16132 - position: absolute;
16133 - top: 0;
16134 - right: 0;
16135 - width: 44px;
16136 - height: 44px;
16137 - text-align: center;
16138 - z-index: 99;
16139 -
16140 - &:before {
16141 - color: #a7c979;
16142 - content: '\f158';
16143 - font: normal 20px/44px 'dashicons';
16144 - }
16145 - &:hover {
16146 - opacity: 0.8;
16147 - }
16148 - &:active {
16149 - opacity: 1;
16150 - outline: none;
16151 - }
16152 -}
16153 -
16154 -// temporary styles for protect module error. banners to be rebuilt soon. - Jeff Golenski
16155 -
16156 -#message.jp-banner.protect-error {
16157 - background: #fff;
16158 - border-left: 4px #d94f4f solid;
16159 -
16160 - .jp-banner__content {
16161 - color: #444;
16162 - h2, a {
16163 - color: #d94f4f;
16164 - }
16165 - a:hover {
16166 - color: darken(#d94f4f, 5%);
16167 - }
16168 - }
16169 -
16170 - .jp-banner__button {
16171 - background: #d94f4f;
16172 - box-shadow: none;
16173 - color: #fff;
16174 -
16175 - &:hover,
16176 - &:focus,
16177 - &:active {
16178 - box-shadow: none;
16179 - }
16180 - &:hover {
16181 - background: darken(#d94f4f, 5%);
16182 - }
16183 - }
16184 -
16185 - .jp-banner__dismiss:before {
16186 - color: #a0a5aa;
16187 - }
16188 -}
16189 +.jp-banner__description-container {
16190 + padding: 16px;
16191 +}
16192 \ No newline at end of file
16193
16194 diff --git a/plugins/jetpack/scss/templates/_connection-landing.scss b/plugins/jetpack/scss/templates/_connection-landing.scss
16195 index 98cef93..5b2e945 100644
16196 --- a/plugins/jetpack/scss/templates/_connection-landing.scss
16197 +++ b/plugins/jetpack/scss/templates/_connection-landing.scss
16198 @@ -575,6 +575,13 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
16199 .feat {
16200 @include vertalign;
16201 }
16202 +
16203 + &.activated .feat {
16204 + right: 50%;
16205 + -ms-transform: translate(50%,-50%);
16206 + -webkit-transform: translate(50%,-50%);
16207 + transform: translate(50%,-50%);
16208 + }
16209 } // go-to
16210 }
16211
16212 @@ -791,11 +798,6 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
16213 top: -1px;
16214 }
16215 }
16216 - .goto {
16217 - .feat a {
16218 - float: left;
16219 - }
16220 - }
16221 }
16222 } // nux-intro
16223
16224
16225 diff --git a/plugins/jetpack/views/admin/admin-page.php b/plugins/jetpack/views/admin/admin-page.php
16226 index 8588013..c53824f 100644
16227 --- a/plugins/jetpack/views/admin/admin-page.php
16228 +++ b/plugins/jetpack/views/admin/admin-page.php
16229 @@ -147,14 +147,14 @@
16230 ?>
16231 <?php if ( current_user_can( 'jetpack_manage_modules' ) && $data['is_user_connected'] && ! Jetpack::is_development_mode() ) : ?>
16232 <div id="manage-row" class="j-row goto <?php echo ( $manage_active ) ? 'activated' : ''; ?>">
16233 - <div class="feat j-col j-lrg-7 j-md-8 j-sm-7">
16234 + <div class="feat j-col <?php echo ( $manage_active ) ? '' : 'j-lrg-7 j-md-8 j-sm-7'; ?>">
16235 <a href="<?php echo esc_url( 'https://wordpress.com/plugins/' . $normalized_site_url . '?from=jpnux' ); ?>" class="button button-primary manage-cta-active" target="_blank" style="display: <?php echo ( $manage_active ) ? 'inline-block' : 'none'; ?>;" title="<?php esc_attr_e( 'Go to WordPress.com to try these features', 'jetpack' ); ?>"><?php _e( 'Go to WordPress.com', 'jetpack' ); ?></a>
16236 <label for="active-manage" class="button button-primary form-toggle manage-cta-inactive" style="display: <?php echo ( $manage_active ) ? 'none' : 'inline-block'; ?>" title="<?php esc_attr_e( 'Activate free WordPress.com features', 'jetpack' ); ?>"><?php _e( 'Activate features', 'jetpack' ); ?></label>
16237 </div>
16238 + <?php if ( ! $manage_active ) : ?>
16239 <div class="act j-col j-lrg-5 j-md-4 j-sm-5">
16240 <div class="module-action">
16241 <span>
16242 - <?php $manage_active = Jetpack::is_module_active( 'manage' ); ?>
16243 <input class="is-compact form-toggle" type="checkbox" id="active-manage" <?php echo ( $manage_active ) ? 'checked' : ''; ?> />
16244 <label class="form-toggle__label" for="active-manage">
16245 <img class="module-spinner-manage" style="display: none;" width="16" height="16" src="<?php echo esc_url( includes_url( 'images/spinner-2x.gif' ) ); ?>" alt="Loading ..." />
16246 @@ -166,6 +166,7 @@
16247 </span>
16248 </div>
16249 </div>
16250 + <?php endif; ?>
16251 </div><?php // j-row ?>
16252 <?php endif; ?>
16253
16254
16255 diff --git a/plugins/jetpack/views/admin/network-settings.php b/plugins/jetpack/views/admin/network-settings.php
16256 index b0008a5..6ff9b1a 100644
16257 --- a/plugins/jetpack/views/admin/network-settings.php
16258 +++ b/plugins/jetpack/views/admin/network-settings.php
16259 @@ -11,7 +11,7 @@
16260 <div class="wrap">
16261 <h2><?php _e( 'Network Settings', 'jetpack' ); ?></h2>
16262 <form action="edit.php?action=jetpack-network-settings" method="POST">
16263 - <h3><?php _e( 'Global', 'jetpack' ); ?></h3>
16264 + <h3><?php _ex( 'Global', 'Affects all sites in a Multisite network.', 'jetpack' ); ?></h3>
16265 <p><?php _e( 'These settings affect all sites on the network.', 'jetpack' ); ?></p>
16266 <?php wp_nonce_field( 'jetpack-network-settings' ); ?>
16267 <table class="form-table">
16268 @@ -50,7 +50,7 @@
16269 </tr>
16270 /**/ ?>
16271 </table>
16272 -
16273 +
16274 <?php /* Remove the toggles for 2.9, re-evaluate how they're done and added for a 3.0 release. They don't feel quite right yet.
16275 <?php
16276 $display_modules = ( 1 == $this->get_option( 'manage_auto_activated_modules' ) )? 'block': 'none';