summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2016-07-28 23:29:30 -0400
committerAnthony G. Basile <blueness@gentoo.org>2016-07-28 23:29:30 -0400
commit5c4552fad98db23b2698e8a598bf20f42cb430ef (patch)
tree61fc1f692646288704376f32d914eeef152e375e
parentUpdate plugin jecpack to 4.0.4 (diff)
downloadblogs-gentoo-5c4552fad98db23b2698e8a598bf20f42cb430ef.tar.gz
blogs-gentoo-5c4552fad98db23b2698e8a598bf20f42cb430ef.tar.bz2
blogs-gentoo-5c4552fad98db23b2698e8a598bf20f42cb430ef.zip
Update plugin jetpack to 4.1.1
-rw-r--r--plugins/jetpack/3rd-party/3rd-party.php1
-rw-r--r--plugins/jetpack/3rd-party/bitly.php9
-rw-r--r--plugins/jetpack/3rd-party/vaultpress.php13
-rw-r--r--plugins/jetpack/_inc/jetpack.js2
-rw-r--r--plugins/jetpack/_inc/jp.js6
-rw-r--r--plugins/jetpack/_inc/jquery.jetpack-resize.js2
-rw-r--r--plugins/jetpack/_inc/lib/class.media-extractor.php1
-rw-r--r--plugins/jetpack/_inc/social-logos.php14
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.css257
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.eotbin0 -> 9982 bytes
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.html428
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.min.css1
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.ttfbin0 -> 9792 bytes
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.woff2bin0 -> 5628 bytes
-rw-r--r--plugins/jetpack/changelog.txt67
-rw-r--r--plugins/jetpack/class.jetpack-client-server.php137
-rw-r--r--plugins/jetpack/class.jetpack-data.php13
-rw-r--r--plugins/jetpack/class.jetpack-debugger.php73
-rw-r--r--plugins/jetpack/class.jetpack-jitm.php23
-rw-r--r--plugins/jetpack/class.jetpack-signature.php23
-rw-r--r--plugins/jetpack/class.jetpack-tracks.php2
-rw-r--r--plugins/jetpack/class.jetpack.php409
-rw-r--r--plugins/jetpack/class.json-api-endpoints.php325
-rw-r--r--plugins/jetpack/class.photon.php4
-rw-r--r--plugins/jetpack/css/dashboard-widget.css.map2
-rw-r--r--plugins/jetpack/css/jetpack-admin-rtl.css11
-rw-r--r--plugins/jetpack/css/jetpack-admin-rtl.min.css2
-rw-r--r--plugins/jetpack/css/jetpack-admin.css9
-rw-r--r--plugins/jetpack/css/jetpack-admin.css.map2
-rw-r--r--plugins/jetpack/css/jetpack-admin.min.css2
-rw-r--r--plugins/jetpack/css/jetpack-admin.min.css.map2
-rw-r--r--plugins/jetpack/css/jetpack-banners.css328
-rw-r--r--plugins/jetpack/css/jetpack-banners.css.map2
-rw-r--r--plugins/jetpack/css/jetpack-banners.min.css5
-rw-r--r--plugins/jetpack/css/jetpack-banners.min.css.map2
-rw-r--r--plugins/jetpack/css/jetpack-rtl.css2
-rw-r--r--plugins/jetpack/css/jetpack.css2
-rw-r--r--plugins/jetpack/functions.global.php10
-rw-r--r--plugins/jetpack/functions.photon.php15
-rw-r--r--plugins/jetpack/jetpack.php5
-rw-r--r--plugins/jetpack/json-endpoints.php162
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php18
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php16
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-endpoint.php220
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php25
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-term-endpoint.php38
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php14
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php2
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php1
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-type-taxonomies-endpoint.php71
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php11
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-endpoint.php2
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php4
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php4
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-terms-endpoint.php87
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php14
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php3
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php22
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php526
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-endpoint.php11
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-render-endpoint.php25
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php6
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php6
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php40
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-site-user-endpoint.php23
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-invites-endpoint.php2
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php14
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php102
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php125
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-term-endpoint.php164
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php2
-rw-r--r--plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js3
-rw-r--r--plugins/jetpack/modules/after-the-deadline/atd.core.js2
-rw-r--r--plugins/jetpack/modules/after-the-deadline/jquery.atd.js2
-rw-r--r--plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js2
-rw-r--r--plugins/jetpack/modules/carousel/jetpack-carousel.js9
-rw-r--r--plugins/jetpack/modules/comments/comments.php12
-rw-r--r--plugins/jetpack/modules/contact-form/admin.php18
-rw-r--r--plugins/jetpack/modules/contact-form/css/menu-alter.css73
-rw-r--r--plugins/jetpack/modules/contact-form/grunion-contact-form.php49
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-menu-2x.pngbin546 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-menu-big-2x.pngbin340 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-menu-big.pngbin352 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-menu-hover-2x.pngbin611 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-menu-hover.pngbin278 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-menu.pngbin157 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php4
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css.php2
-rw-r--r--plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js4
-rw-r--r--plugins/jetpack/modules/custom-post-types/nova.php46
-rw-r--r--plugins/jetpack/modules/custom-post-types/portfolios.php63
-rw-r--r--plugins/jetpack/modules/custom-post-types/testimonial.php6
-rw-r--r--plugins/jetpack/modules/gravatar-hovercards.php2
-rw-r--r--plugins/jetpack/modules/infinite-scroll.php3
-rw-r--r--plugins/jetpack/modules/infinite-scroll/infinity.js14
-rw-r--r--plugins/jetpack/modules/infinite-scroll/infinity.php5
-rw-r--r--plugins/jetpack/modules/likes.php4
-rw-r--r--plugins/jetpack/modules/likes/queuehandler.js2
-rw-r--r--plugins/jetpack/modules/manage.php4
-rw-r--r--plugins/jetpack/modules/publicize/ui.php16
-rw-r--r--plugins/jetpack/modules/related-posts/jetpack-related-posts.php4
-rw-r--r--plugins/jetpack/modules/related-posts/related-posts.css1
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css62
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css2
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing.css62
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing.js29
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing.min.css2
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing-service.php28
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing-sources.php45
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing.css126
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing.js2
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing.php14
-rw-r--r--plugins/jetpack/modules/shortcodes.php38
-rw-r--r--plugins/jetpack/modules/shortcodes/audio.php437
-rw-r--r--plugins/jetpack/modules/shortcodes/css/recipes-print.css33
-rw-r--r--plugins/jetpack/modules/shortcodes/css/recipes.css3
-rw-r--r--plugins/jetpack/modules/shortcodes/css/rtl/recipes-rtl.css5
-rw-r--r--plugins/jetpack/modules/shortcodes/js/audio-shortcode.js159
-rw-r--r--plugins/jetpack/modules/shortcodes/recipe.php302
-rw-r--r--plugins/jetpack/modules/shortcodes/twitter-timeline.php35
-rw-r--r--plugins/jetpack/modules/shortcodes/untappd-menu.php65
-rw-r--r--plugins/jetpack/modules/shortcodes/videopress.php5
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemaps.php33
-rw-r--r--plugins/jetpack/modules/sso.php1090
-rw-r--r--plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php159
-rw-r--r--plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css179
-rw-r--r--plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/sso/jetpack-sso-login.css179
-rw-r--r--plugins/jetpack/modules/sso/jetpack-sso-login.js47
-rw-r--r--plugins/jetpack/modules/sso/jetpack-sso-login.min.css1
-rw-r--r--plugins/jetpack/modules/sso/jetpack-sso-profile.css72
-rw-r--r--plugins/jetpack/modules/stats.php14
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css1
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentysixteen.css1
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery.php6
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php3
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js2
-rw-r--r--plugins/jetpack/modules/videopress.php13
-rw-r--r--plugins/jetpack/modules/videopress/class.videopress-player.php30
-rw-r--r--plugins/jetpack/modules/videopress/css/editor.css59
-rw-r--r--plugins/jetpack/modules/videopress/css/videopress-editor-style.css (renamed from plugins/jetpack/modules/videopress/videopress-editor-style.css)0
-rw-r--r--plugins/jetpack/modules/videopress/editor-media-view.php213
-rw-r--r--plugins/jetpack/modules/videopress/js/videopress-admin.js2
-rw-r--r--plugins/jetpack/modules/videopress/shortcode.php149
-rw-r--r--plugins/jetpack/modules/videopress/utility-functions.php105
-rw-r--r--plugins/jetpack/modules/videopress/videopress.php109
-rw-r--r--plugins/jetpack/modules/widgets/contact-info.php214
-rw-r--r--plugins/jetpack/modules/widgets/contact-info/contact-info-map.js2
-rw-r--r--plugins/jetpack/modules/widgets/gallery.php2
-rw-r--r--plugins/jetpack/modules/widgets/image-widget.php51
-rw-r--r--plugins/jetpack/modules/widgets/rsslinks-widget.php2
-rw-r--r--plugins/jetpack/modules/widgets/top-posts.php12
-rw-r--r--plugins/jetpack/modules/widgets/twitter-timeline-admin.js35
-rw-r--r--plugins/jetpack/modules/widgets/twitter-timeline.php348
-rw-r--r--plugins/jetpack/readme.txt80
-rw-r--r--plugins/jetpack/sal/class.json-api-date.php55
-rw-r--r--plugins/jetpack/sal/class.json-api-links.php269
-rw-r--r--plugins/jetpack/sal/class.json-api-metadata.php39
-rw-r--r--plugins/jetpack/sal/class.json-api-platform-jetpack.php12
-rw-r--r--plugins/jetpack/sal/class.json-api-platform.php18
-rw-r--r--plugins/jetpack/sal/class.json-api-post-base.php667
-rw-r--r--plugins/jetpack/sal/class.json-api-post-jetpack.php34
-rw-r--r--plugins/jetpack/sal/class.json-api-site-base.php419
-rw-r--r--plugins/jetpack/sal/class.json-api-site-jetpack-base.php6
-rw-r--r--plugins/jetpack/sal/class.json-api-site-jetpack.php9
-rw-r--r--plugins/jetpack/sal/class.json-api-token.php60
-rw-r--r--plugins/jetpack/scss/organisms/_banners.scss354
-rw-r--r--plugins/jetpack/scss/templates/_connection-landing.scss12
-rw-r--r--plugins/jetpack/views/admin/admin-page.php5
-rw-r--r--plugins/jetpack/views/admin/network-settings.php4
170 files changed, 7162 insertions, 3790 deletions
diff --git a/plugins/jetpack/3rd-party/3rd-party.php b/plugins/jetpack/3rd-party/3rd-party.php
index 6ba6a189..2bab75b8 100644
--- a/plugins/jetpack/3rd-party/3rd-party.php
+++ b/plugins/jetpack/3rd-party/3rd-party.php
@@ -10,3 +10,4 @@ require_once( JETPACK__PLUGIN_DIR . '3rd-party/wpml.php' );
require_once( JETPACK__PLUGIN_DIR . '3rd-party/bitly.php' );
require_once( JETPACK__PLUGIN_DIR . '3rd-party/bbpress.php' );
require_once( JETPACK__PLUGIN_DIR . '3rd-party/woocommerce.php' );
+require_once( JETPACK__PLUGIN_DIR . '3rd-party/vaultpress.php' );
diff --git a/plugins/jetpack/3rd-party/bitly.php b/plugins/jetpack/3rd-party/bitly.php
index 9d087b77..eeca3b7f 100644
--- a/plugins/jetpack/3rd-party/bitly.php
+++ b/plugins/jetpack/3rd-party/bitly.php
@@ -7,7 +7,10 @@
if( class_exists( 'Bitly' ) ) {
if( isset( $GLOBALS['bitly'] ) ) {
- remove_action( 'wp_head', array( $GLOBALS['bitly'], 'og_tags' ) );
+ if ( method_exists( $GLOBALS['bitly'], 'og_tags' ) ) {
+ remove_action( 'wp_head', array( $GLOBALS['bitly'], 'og_tags' ) );
+ }
+
add_action( 'wp_head', 'jetpack_bitly_og_tag', 100 );
}
@@ -21,7 +24,9 @@ if( class_exists( 'Bitly' ) ) {
function jetpack_bitly_og_tag() {
if( has_filter( 'wp_head', 'jetpack_og_tags') === false ) {
// Add the bitly part again back if we don't have any jetpack_og_tags added
- $GLOBALS['bitly']->og_tags();
+ if ( method_exists( $GLOBALS['bitly'], 'og_tags' ) ) {
+ $GLOBALS['bitly']->og_tags();
+ }
} elseif ( isset( $GLOBALS['posts'] ) && $GLOBALS['posts'][0]->ID > 0 ) {
printf( "<meta property=\"bitly:url\" content=\"%s\" /> \n", esc_attr( $GLOBALS['bitly']->get_bitly_link_for_post_id( $GLOBALS['posts'][0]->ID ) ) );
}
diff --git a/plugins/jetpack/3rd-party/vaultpress.php b/plugins/jetpack/3rd-party/vaultpress.php
new file mode 100644
index 00000000..d2c1374c
--- /dev/null
+++ b/plugins/jetpack/3rd-party/vaultpress.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * For backward compatibility with VaultPress 1.8.3 to play nicely with Jetpack 4.1
+ */
+add_action( 'init', 'jetpack_vaultpress_sync_options' );
+function jetpack_vaultpress_sync_options() {
+ if ( ! class_exists( 'VaultPress' ) ) {
+ return;
+ }
+ $vaultpress = VaultPress::init();
+ Jetpack_Sync::sync_options( __FILE__, $vaultpress->auto_register_option, $vaultpress->option_name );
+}
diff --git a/plugins/jetpack/_inc/jetpack.js b/plugins/jetpack/_inc/jetpack.js
index fd3512de..4d636083 100644
--- a/plugins/jetpack/_inc/jetpack.js
+++ b/plugins/jetpack/_inc/jetpack.js
@@ -18,7 +18,7 @@ jetpack = {
didDebug: false,
init: function() {
- jetpack.numModules = jQuery( 'div.jetpack-module' ).not( '.placeholder' ).size();
+ jetpack.numModules = jQuery( 'div.jetpack-module' ).not( '.placeholder' ).length;
jetpack.container = jQuery( 'div.module-container' );
jetpack.level_modules();
diff --git a/plugins/jetpack/_inc/jp.js b/plugins/jetpack/_inc/jp.js
index 15faad11..72499bb2 100644
--- a/plugins/jetpack/_inc/jp.js
+++ b/plugins/jetpack/_inc/jp.js
@@ -306,8 +306,8 @@
$( checkBox ).prop( 'checked', true );
});
- $( '.jumpstart-spinner, .jstart, #jumpstart-cta, .manage-cta-inactive' ).hide();
- $( '.jumpstart-message, .manage-cta-active' ).toggle();
+ $( '.jumpstart-spinner, .jstart, #jumpstart-cta' ).hide();
+ $( '.jumpstart-message' ).toggle();
$( '#jump-start-area' ).delay( 5000 ).hide( 600 );
// Log Jump Start event in MC Stats
@@ -391,7 +391,7 @@
// Manual element alteration for Manage, since it's not part of the template
if ( 'manage' === data.thisModuleSlug ) {
if ( response.activated ) {
- thisLabel.show().html( 'ACTIVE' );
+ $( '#manage-row .module-action' ).hide();
$( '#manage-row' ).addClass( 'activated' );
} else {
thisLabel.show().html( 'INACTIVE' );
diff --git a/plugins/jetpack/_inc/jquery.jetpack-resize.js b/plugins/jetpack/_inc/jquery.jetpack-resize.js
index 2fb6a2f7..14d60b24 100644
--- a/plugins/jetpack/_inc/jquery.jetpack-resize.js
+++ b/plugins/jetpack/_inc/jquery.jetpack-resize.js
@@ -1,4 +1,4 @@
-/* global Jetpack */
+/* global Jetpack, JSON */
/**
* Resizeable Iframes.
*
diff --git a/plugins/jetpack/_inc/lib/class.media-extractor.php b/plugins/jetpack/_inc/lib/class.media-extractor.php
index 855c3fe8..e09da8f2 100644
--- a/plugins/jetpack/_inc/lib/class.media-extractor.php
+++ b/plugins/jetpack/_inc/lib/class.media-extractor.php
@@ -24,7 +24,6 @@ class Jetpack_Media_Meta_Extractor {
'hulu',
'ted',
'wpvideo',
- 'audio',
);
/**
diff --git a/plugins/jetpack/_inc/social-logos.php b/plugins/jetpack/_inc/social-logos.php
new file mode 100644
index 00000000..c7c7187e
--- /dev/null
+++ b/plugins/jetpack/_inc/social-logos.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Globally registers the 'social-logos' style and font.
+ *
+ * This ensures any theme or plugin using it is on the latest version of Social Logos, and helps to avoid conflicts.
+ */
+add_action( 'init', 'jetpack_register_social_logos', 1 );
+function jetpack_register_social_logos() {
+ if ( ! wp_style_is( 'social-logos', 'registered' ) ) {
+ $post_fix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
+ wp_register_style( 'social-logos', plugins_url( 'social-logos/social-logos' . $post_fix . '.css', __FILE__ ), false, '1' );
+ }
+}
+
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.css b/plugins/jetpack/_inc/social-logos/social-logos.css
new file mode 100644
index 00000000..38c4b007
--- /dev/null
+++ b/plugins/jetpack/_inc/social-logos/social-logos.css
@@ -0,0 +1,257 @@
+/* Generated by grunt-webfont */
+
+
+
+@font-face {
+ font-family:"social-logos";
+ src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
+ font-weight:normal;
+ 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:normal;
+ font-style:normal;
+}
+
+.social-logo {
+ font-family:"social-logos";
+ display:inline-block;
+ vertical-align:middle;
+ line-height:1;
+ font-weight:normal;
+ font-style:normal;
+ speak:none;
+ text-decoration:inherit;
+ text-transform:none;
+ text-rendering:auto;
+ -webkit-font-smoothing:antialiased;
+ -moz-osx-font-smoothing:grayscale;
+}
+
+
+/* Icons */
+
+
+.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:before {
+ 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-logo__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";
+}
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.eot b/plugins/jetpack/_inc/social-logos/social-logos.eot
new file mode 100644
index 00000000..9b8a76f2
--- /dev/null
+++ b/plugins/jetpack/_inc/social-logos/social-logos.eot
Binary files differ
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.html b/plugins/jetpack/_inc/social-logos/social-logos.html
new file mode 100644
index 00000000..94119b4d
--- /dev/null
+++ b/plugins/jetpack/_inc/social-logos/social-logos.html
@@ -0,0 +1,428 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>social-logos</title>
+ <style>
+ body {
+ margin:0;
+ padding:10px 20px;
+ background:#fff;
+ color:#222;
+ }
+ h1, div, footer {
+ font-family:"Helvetica Neue", Arial, sans-serif;
+ }
+ h1 {
+ margin:0 0 20px;
+ font-size:32px;
+ font-weight:normal;
+ }
+ .icons {
+ margin-bottom:40px;
+ -webkit-column-count:5;
+ -moz-column-count:5;
+ column-count:5;
+ -webkit-column-gap:20px;
+ -moz-column-gap:20px;
+ column-gap:20px;
+ }
+ .icons__item,
+ .icons__item i {
+ line-height:2em;
+ cursor:pointer;
+ overflow:hidden;
+ }
+ .icons__item:hover {
+ color:#3c90be;
+ }
+ .icons__item i {
+ display:inline-block;
+ width:32px;
+ text-align:center;
+ }
+ .icons__item:hover i {
+ -webkit-transform:scale(1.5);
+ transform:scale(1.5);
+ }
+ footer {
+ margin-top:40px;
+ font-size:14px;
+ color:#999;
+ }
+
+ /* Generated by grunt-webfont */
+
+
+
+@font-face {
+ font-family:"social-logos";
+ src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
+ font-weight:normal;
+ 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:normal;
+ font-style:normal;
+}
+
+.social-logo {
+ font-family:"social-logos";
+ display:inline-block;
+ vertical-align:middle;
+ line-height:1;
+ font-weight:normal;
+ font-style:normal;
+ speak:none;
+ text-decoration:inherit;
+ text-transform:none;
+ text-rendering:auto;
+ -webkit-font-smoothing:antialiased;
+ -moz-osx-font-smoothing:grayscale;
+}
+
+
+/* Icons */
+
+
+.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:before {
+ 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-logo__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";
+}
+
+ </style>
+ </head>
+ <body>
+ <h1>social-logos</h1>
+
+ <div class="icons" id="icons">
+
+ <div class="icons__item" data-name="amazon"><i class="social-logo social-logo__amazon"></i> social-logo__amazon</div>
+
+ <div class="icons__item" data-name="behance"><i class="social-logo social-logo__behance"></i> social-logo__behance</div>
+
+ <div class="icons__item" data-name="blogger-alt"><i class="social-logo social-logo__blogger-alt"></i> social-logo__blogger-alt</div>
+
+ <div class="icons__item" data-name="blogger"><i class="social-logo social-logo__blogger"></i> social-logo__blogger</div>
+
+ <div class="icons__item" data-name="codepen"><i class="social-logo social-logo__codepen"></i> social-logo__codepen</div>
+
+ <div class="icons__item" data-name="dribbble"><i class="social-logo social-logo__dribbble"></i> social-logo__dribbble</div>
+
+ <div class="icons__item" data-name="dropbox"><i class="social-logo social-logo__dropbox"></i> social-logo__dropbox</div>
+
+ <div class="icons__item" data-name="eventbrite"><i class="social-logo social-logo__eventbrite"></i> social-logo__eventbrite</div>
+
+ <div class="icons__item" data-name="facebook"><i class="social-logo social-logo__facebook"></i> social-logo__facebook</div>
+
+ <div class="icons__item" data-name="feed"><i class="social-logo social-logo__feed"></i> social-logo__feed</div>
+
+ <div class="icons__item" data-name="flickr"><i class="social-logo social-logo__flickr"></i> social-logo__flickr</div>
+
+ <div class="icons__item" data-name="foursquare"><i class="social-logo social-logo__foursquare"></i> social-logo__foursquare</div>
+
+ <div class="icons__item" data-name="ghost"><i class="social-logo social-logo__ghost"></i> social-logo__ghost</div>
+
+ <div class="icons__item" data-name="github"><i class="social-logo social-logo__github"></i> social-logo__github</div>
+
+ <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>
+
+ <div class="icons__item" data-name="google-plus"><i class="social-logo social-logo__google-plus"></i> social-logo__google-plus</div>
+
+ <div class="icons__item" data-name="instagram"><i class="social-logo social-logo__instagram"></i> social-logo__instagram</div>
+
+ <div class="icons__item" data-name="linkedin"><i class="social-logo social-logo__linkedin"></i> social-logo__linkedin</div>
+
+ <div class="icons__item" data-name="mail"><i class="social-logo social-logo__mail"></i> social-logo__mail</div>
+
+ <div class="icons__item" data-name="medium"><i class="social-logo social-logo__medium"></i> social-logo__medium</div>
+
+ <div class="icons__item" data-name="path-alt"><i class="social-logo social-logo__path-alt"></i> social-logo__path-alt</div>
+
+ <div class="icons__item" data-name="path"><i class="social-logo social-logo__path"></i> social-logo__path</div>
+
+ <div class="icons__item" data-name="pinterest-alt"><i class="social-logo social-logo__pinterest-alt"></i> social-logo__pinterest-alt</div>
+
+ <div class="icons__item" data-name="pinterest"><i class="social-logo social-logo__pinterest"></i> social-logo__pinterest</div>
+
+ <div class="icons__item" data-name="pocket"><i class="social-logo social-logo__pocket"></i> social-logo__pocket</div>
+
+ <div class="icons__item" data-name="polldaddy"><i class="social-logo social-logo__polldaddy"></i> social-logo__polldaddy</div>
+
+ <div class="icons__item" data-name="print"><i class="social-logo social-logo__print"></i> social-logo__print</div>
+
+ <div class="icons__item" data-name="reddit"><i class="social-logo social-logo__reddit"></i> social-logo__reddit</div>
+
+ <div class="icons__item" data-name="share"><i class="social-logo social-logo__share"></i> social-logo__share</div>
+
+ <div class="icons__item" data-name="skype"><i class="social-logo social-logo__skype"></i> social-logo__skype</div>
+
+ <div class="icons__item" data-name="spotify"><i class="social-logo social-logo__spotify"></i> social-logo__spotify</div>
+
+ <div class="icons__item" data-name="squarespace"><i class="social-logo social-logo__squarespace"></i> social-logo__squarespace</div>
+
+ <div class="icons__item" data-name="stumbleupon"><i class="social-logo social-logo__stumbleupon"></i> social-logo__stumbleupon</div>
+
+ <div class="icons__item" data-name="telegram"><i class="social-logo social-logo__telegram"></i> social-logo__telegram</div>
+
+ <div class="icons__item" data-name="tumblr-alt"><i class="social-logo social-logo__tumblr-alt"></i> social-logo__tumblr-alt</div>
+
+ <div class="icons__item" data-name="tumblr"><i class="social-logo social-logo__tumblr"></i> social-logo__tumblr</div>
+
+ <div class="icons__item" data-name="twitch"><i class="social-logo social-logo__twitch"></i> social-logo__twitch</div>
+
+ <div class="icons__item" data-name="twitter-alt"><i class="social-logo social-logo__twitter-alt"></i> social-logo__twitter-alt</div>
+
+ <div class="icons__item" data-name="twitter"><i class="social-logo social-logo__twitter"></i> social-logo__twitter</div>
+
+ <div class="icons__item" data-name="vimeo"><i class="social-logo social-logo__vimeo"></i> social-logo__vimeo</div>
+
+ <div class="icons__item" data-name="whatsapp"><i class="social-logo social-logo__whatsapp"></i> social-logo__whatsapp</div>
+
+ <div class="icons__item" data-name="wordpress"><i class="social-logo social-logo__wordpress"></i> social-logo__wordpress</div>
+
+ <div class="icons__item" data-name="xanga"><i class="social-logo social-logo__xanga"></i> social-logo__xanga</div>
+
+ <div class="icons__item" data-name="youtube"><i class="social-logo social-logo__youtube"></i> social-logo__youtube</div>
+
+ </div>
+
+
+
+ <h1>Usage</h1>
+ <pre><code>&lt;i class=&quot;social-logo social-logo__<span id="name">name</span>&quot;&gt;&lt;/i&gt;</code></pre>
+
+
+ <footer>Generated by <a href="https://github.com/sapegin/grunt-webfont">grunt-webfont</a>.</footer>
+
+ <script>
+ (function() {
+ document.getElementById('icons').onclick = function(e) {
+ e = e || window.event;
+ var name = e.target.getAttribute('data-name') || e.target.parentNode.getAttribute('data-name');
+ document.getElementById('name').innerHTML = name;
+
+ }
+ })();
+ </script>
+ </body>
+</html>
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.min.css b/plugins/jetpack/_inc/social-logos/social-logos.min.css
new file mode 100644
index 00000000..6c8b93da
--- /dev/null
+++ b/plugins/jetpack/_inc/social-logos/social-logos.min.css
@@ -0,0 +1 @@
+@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:before{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-logo__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"} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.ttf b/plugins/jetpack/_inc/social-logos/social-logos.ttf
new file mode 100644
index 00000000..9b7f5289
--- /dev/null
+++ b/plugins/jetpack/_inc/social-logos/social-logos.ttf
Binary files differ
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.woff2 b/plugins/jetpack/_inc/social-logos/social-logos.woff2
new file mode 100644
index 00000000..51f2a4f9
--- /dev/null
+++ b/plugins/jetpack/_inc/social-logos/social-logos.woff2
Binary files differ
diff --git a/plugins/jetpack/changelog.txt b/plugins/jetpack/changelog.txt
index 595b0b94..de01d3b1 100644
--- a/plugins/jetpack/changelog.txt
+++ b/plugins/jetpack/changelog.txt
@@ -1,4 +1,69 @@
-== Changelog ==
+== Changelog ==
+
+= 4.1 =
+
+* Release date: July 6th, 2016
+* Release Post: http://wp.me/p1moTy-3jd
+
+**Performance Enhancements:**
+
+* Carousel no longer loads full-size images in the previous and next previews, increasing the speed and performance of slideshows.
+* 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.
+* We’ve improved Photon dev mode, eliminating unnecessary attempts to sync images.
+
+**Exciting Feature and UI Improvements:**
+
+* A new look: SSO, redesigned and refactored, provides a new and improved experience.
+* Tracking made simple: quickly view the number of unread feedback submissions in your sidebar.
+* Getting support just got easier! Access improved self-help tools in the Jetpack Debug menu.
+* Greater control over Infinite Scroll: pause and resume Infinite Scroll with two new JavaScript methods.
+* Improved Sharing: we’ve swapped image icons for icon fonts and added Telegram and WhatsApp buttons.
+* Untappd shortcode: now you can sip and share your favorite craft brews. Cheers!
+* Recipes, revamped: we’ve added new recipe shortcodes and options to create more detailed recipes.
+* Improved Gallery Widgets now use Photon to resize and serve images.
+
+**Security:**
+
+* 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.
+* 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.
+* You will now receive a warning for any failed attempts when connecting your website via SSL.
+
+**Slightly Less Exciting Feature Improvements:**
+
+* Updated the Infinite Scroll settings verbiage, which was a bit confusing.
+* Removed Jetpack Audio Shortcode, which is no longer in use.
+* Redesigned Jetpack banner notices to match core notification styles.
+* Added an icon on a connected Jetpack user’s profile page, next to their name.
+* Added the ability to edit Portfolio custom-post-type options in the Customizer.
+* Added a new filter called `jetpack_publicize_capability` which allows you to override user role restrictions for Publicize.
+* Improved the connection process between Jetpack and WordPress.com making it easier to start using Manage.
+* Updated the Top Posts Widget so you can use and display posts that are older than 10 days.
+* Updated the Twitter Timeline Widget to support updates made by Twitter.
+* Improved the VideoPress Shortcode modal.
+* Updated VideoPress, which now defaults to HTML5 videos when the `freedom` shortcode parameter is in use.
+* Improved how Jetpack syncs by removing mock options.
+* Updated the naming convention for feedback posts.
+* 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.
+
+**Improved Compatibility:**
+
+* 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.
+* We’ve fixed a rare scenario where an error would occur when other plugins or sites were using the `JETPACK__GLOTPRESS_LOCALES_PATH` constant.
+
+**Bug Fixes:**
+
+* Comment avatars are now retrieved in a manner more consistent with the login avatar, improving consistency and eliminating the possibility of a future bug.
+* We eliminated PHP notices that were appearing when Custom Content Types were defined without labels or sections.
+* 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!
+* jQuery deprecated the `size()` function -- as a result, we’ve stopped using it as well.
+* A PHP notice popped up when plugins were updated from the WordPress.com plugin management interface -- these notices will no longer appear.
+* We fixed a bug where Photon wasn’t providing the original size for images that were being used outside of the post content.
+* We eliminated the PHP notices that displayed when posts with slideshows were added to a sitemap.
+* We fixed an error that was showing up in Sitemaps when a website permalink structure used `index.php`.
+* We eliminated JavaScript errors that displayed when tiled galleries were viewed.
+* We fixed an issue where image dimensions weren’t properly saved when added to a new widget.
+* 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.
+* We fixed a bug where multiple `display` properties weren’t able to be saved in Custom CSS.
= 4.0.4 =
Release date: June 20th, 2016
diff --git a/plugins/jetpack/class.jetpack-client-server.php b/plugins/jetpack/class.jetpack-client-server.php
index 16dad5d2..02ea5f64 100644
--- a/plugins/jetpack/class.jetpack-client-server.php
+++ b/plugins/jetpack/class.jetpack-client-server.php
@@ -42,7 +42,7 @@ class Jetpack_Client_Server {
$jetpack_unique_connection = array(
'connected' => 0,
'disconnected' => 0,
- 'version' => '3.6.1'
+ 'version' => '3.6.1',
);
update_option( 'jetpack_unique_connection', $jetpack_unique_connection );
@@ -58,81 +58,78 @@ class Jetpack_Client_Server {
$jetpack_unique_connection['connected'] += 1;
Jetpack_Options::update_option( 'unique_connection', $jetpack_unique_connection );
- do {
- $jetpack = $this->get_jetpack();
- $role = $jetpack->translate_current_user_to_role();
-
- if ( ! $role ) {
- return new Jetpack_Error( 'no_role', 'Invalid request.', 400 );
- }
+ $jetpack = $this->get_jetpack();
+ $role = $jetpack->translate_current_user_to_role();
- $cap = $jetpack->translate_role_to_cap( $role );
- if ( !$cap ) {
- return new Jetpack_Error( 'no_cap', 'Invalid request.', 400 );
- }
+ if ( ! $role ) {
+ return new Jetpack_Error( 'no_role', 'Invalid request.', 400 );
+ }
- if ( ! empty( $data['error'] ) ) {
- return new Jetpack_Error( $data['error'], 'Error included in the request.', 400 );
- }
+ $cap = $jetpack->translate_role_to_cap( $role );
+ if ( ! $cap ) {
+ return new Jetpack_Error( 'no_cap', 'Invalid request.', 400 );
+ }
- if ( ! isset( $data['state'] ) ) {
- return new Jetpack_Error( 'no_state', 'Request must include state.', 400 );
- }
+ if ( ! empty( $data['error'] ) ) {
+ return new Jetpack_Error( $data['error'], 'Error included in the request.', 400 );
+ }
- if ( ! ctype_digit( $data['state'] ) ) {
- return new Jetpack_Error( $data['error'], 'State must be an integer.', 400 );
- }
+ if ( ! isset( $data['state'] ) ) {
+ return new Jetpack_Error( 'no_state', 'Request must include state.', 400 );
+ }
- $current_user_id = get_current_user_id();
- if ( $current_user_id != $data['state'] ) {
- return new Jetpack_Error( 'wrong_state', 'State does not match current user.', 400 );
- }
+ if ( ! ctype_digit( $data['state'] ) ) {
+ return new Jetpack_Error( $data['error'], 'State must be an integer.', 400 );
+ }
- if ( empty( $data['code'] ) ) {
- return new Jetpack_Error( 'no_code', 'Request must include an authorization code.', 400 );
- }
+ $current_user_id = get_current_user_id();
+ if ( $current_user_id != $data['state'] ) {
+ return new Jetpack_Error( 'wrong_state', 'State does not match current user.', 400 );
+ }
- $token = $this->get_token( $data );
+ if ( empty( $data['code'] ) ) {
+ return new Jetpack_Error( 'no_code', 'Request must include an authorization code.', 400 );
+ }
- if ( is_wp_error( $token ) ) {
- $code = $token->get_error_code();
- if ( empty( $code ) ) {
- $code = 'invalid_token';
- }
- return new Jetpack_Error( $code, $token->get_error_message(), 400 );
- }
+ $token = $this->get_token( $data );
- if ( ! $token ) {
- return new Jetpack_Error( 'no_token', 'Error generating token.', 400 );
+ if ( is_wp_error( $token ) ) {
+ $code = $token->get_error_code();
+ if ( empty( $code ) ) {
+ $code = 'invalid_token';
}
+ return new Jetpack_Error( $code, $token->get_error_message(), 400 );
+ }
- $is_master_user = ! Jetpack::is_active();
+ if ( ! $token ) {
+ return new Jetpack_Error( 'no_token', 'Error generating token.', 400 );
+ }
- Jetpack::update_user_token( $current_user_id, sprintf( '%s.%d', $token, $current_user_id ), $is_master_user );
+ $is_master_user = ! Jetpack::is_active();
+ Jetpack::update_user_token( $current_user_id, sprintf( '%s.%d', $token, $current_user_id ), $is_master_user );
- if ( ! $is_master_user ) {
- // Don't activate anything since we are just connecting a user.
- return 'linked';
- }
+ if ( ! $is_master_user ) {
+ // Don't activate anything since we are just connecting a user.
+ return 'linked';
+ }
- $redirect_on_activation_error = ( 'client' === $data['auth_type'] ) ? true : false;
- if ( $active_modules = Jetpack_Options::get_option( 'active_modules' ) ) {
- Jetpack_Options::delete_option( 'active_modules' );
+ $redirect_on_activation_error = ( 'client' === $data['auth_type'] ) ? true : false;
+ if ( $active_modules = Jetpack_Options::get_option( 'active_modules' ) ) {
+ Jetpack_Options::delete_option( 'active_modules' );
- Jetpack::activate_default_modules( 999, 1, $active_modules, $redirect_on_activation_error );
- } else {
- Jetpack::activate_default_modules( false, false, array(), $redirect_on_activation_error );
- }
+ Jetpack::activate_default_modules( 999, 1, $active_modules, $redirect_on_activation_error );
+ } else {
+ Jetpack::activate_default_modules( false, false, array(), $redirect_on_activation_error );
+ }
- // Sync all registers options and constants
- /** This action is documented in class.jetpack.php */
- do_action( 'jetpack_sync_all_registered_options' );
+ // Sync all registers options and constants
+ /** This action is documented in class.jetpack.php */
+ do_action( 'jetpack_sync_all_registered_options' );
- // Start nonce cleaner
- wp_clear_scheduled_hook( 'jetpack_clean_nonces' );
- wp_schedule_event( time(), 'hourly', 'jetpack_clean_nonces' );
- } while ( false );
+ // Start nonce cleaner
+ wp_clear_scheduled_hook( 'jetpack_clean_nonces' );
+ wp_schedule_event( time(), 'hourly', 'jetpack_clean_nonces' );
return 'authorized';
}
@@ -169,7 +166,7 @@ class Jetpack_Client_Server {
}
$client_secret = Jetpack_Data::get_access_token();
- if ( !$client_secret ) {
+ if ( ! $client_secret ) {
return new Jetpack_Error( 'client_secret', __( 'You need to register your Jetpack before connecting it.', 'jetpack' ) );
}
@@ -206,21 +203,23 @@ class Jetpack_Client_Server {
$code = wp_remote_retrieve_response_code( $response );
$entity = wp_remote_retrieve_body( $response );
- if ( $entity )
+ if ( $entity ) {
$json = json_decode( $entity );
- else
+ } else {
$json = false;
+ }
- if ( 200 != $code || !empty( $json->error ) ) {
- if ( empty( $json->error ) )
+ if ( 200 != $code || ! empty( $json->error ) ) {
+ if ( empty( $json->error ) ) {
return new Jetpack_Error( 'unknown', '', $code );
+ }
$error_description = isset( $json->error_description ) ? sprintf( __( 'Error Details: %s', 'jetpack' ), (string) $json->error_description ) : '';
return new Jetpack_Error( (string) $json->error, $error_description, $code );
}
- if ( empty( $json->access_token ) || !is_scalar( $json->access_token ) ) {
+ if ( empty( $json->access_token ) || ! is_scalar( $json->access_token ) ) {
return new Jetpack_Error( 'access_token', '', $code );
}
@@ -231,18 +230,23 @@ class Jetpack_Client_Server {
if ( empty( $json->scope ) ) {
return new Jetpack_Error( 'scope', 'No Scope', $code );
}
+
@list( $role, $hmac ) = explode( ':', $json->scope );
if ( empty( $role ) || empty( $hmac ) ) {
return new Jetpack_Error( 'scope', 'Malformed Scope', $code );
}
+
if ( $jetpack->sign_role( $role ) !== $json->scope ) {
return new Jetpack_Error( 'scope', 'Invalid Scope', $code );
}
- if ( !$cap = $jetpack->translate_role_to_cap( $role ) )
+ if ( ! $cap = $jetpack->translate_role_to_cap( $role ) ) {
return new Jetpack_Error( 'scope', 'No Cap', $code );
- if ( ! current_user_can( $cap ) )
+ }
+
+ if ( ! current_user_can( $cap ) ) {
return new Jetpack_Error( 'scope', 'current_user_cannot', $code );
+ }
/**
* Fires after user has successfully received an auth token.
@@ -269,5 +273,4 @@ class Jetpack_Client_Server {
public function do_exit() {
exit;
}
-
}
diff --git a/plugins/jetpack/class.jetpack-data.php b/plugins/jetpack/class.jetpack-data.php
index 727bd059..c6eda4e1 100644
--- a/plugins/jetpack/class.jetpack-data.php
+++ b/plugins/jetpack/class.jetpack-data.php
@@ -55,6 +55,19 @@ class Jetpack_Data {
return new WP_Error( 'fail_domain_empty', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as it is empty.', 'jetpack' ), $domain ) );
}
+ /**
+ * Skips the usuable domain check when connecting a site.
+ *
+ * Allows site administrators with domains that fail gethostname-based checks to pass the request to WP.com
+ *
+ * @since 4.1.0
+ *
+ * @param bool If the check should be skipped. Default false.
+ */
+ if ( apply_filters( 'jetpack_skip_usuable_domain_check', false ) ) {
+ return true;
+ }
+
// None of the explicit localhosts.
$forbidden_domains = array(
'wordpress.com',
diff --git a/plugins/jetpack/class.jetpack-debugger.php b/plugins/jetpack/class.jetpack-debugger.php
index 30bf0740..aabbff33 100644
--- a/plugins/jetpack/class.jetpack-debugger.php
+++ b/plugins/jetpack/class.jetpack-debugger.php
@@ -4,7 +4,11 @@ class Jetpack_Debugger {
private static function is_jetpack_support_open() {
try {
- $response = wp_remote_request( "http://jetpack.com/is-support-open" );
+ $url = add_query_arg( 'ver', JETPACK__VERSION, 'https://jetpack.com/is-support-open/' );
+ $response = wp_remote_request( esc_url_raw( $url ) );
+ if ( is_wp_error( $response ) ) {
+ return false;
+ }
$body = wp_remote_retrieve_body( $response );
$json = json_decode( $body );
return ( ( bool ) $json->is_support_open );
@@ -55,10 +59,11 @@ class Jetpack_Debugger {
$debug_info .= "\r\n" . esc_html( "JETPACK__PLUGIN_DIR: " . JETPACK__PLUGIN_DIR );
$debug_info .= "\r\n" . esc_html( "SITE_URL: " . site_url() );
$debug_info .= "\r\n" . esc_html( "HOME_URL: " . home_url() );
- $debug_info .= "\r\n" . esc_html( "SERVER_PORT: " . $_SERVER['SERVER_PORT'] );
-
foreach ( array (
+ 'HTTP_HOST',
+ 'SERVER_PORT',
+ 'HTTPS',
'GD_PHP_HANDLER',
'HTTP_AKAMAI_ORIGIN_HOP',
'HTTP_CF_CONNECTING_IP',
@@ -77,15 +82,12 @@ class Jetpack_Debugger {
'HTTP_X_VARNISH',
'REMOTE_ADDR'
) as $header ) {
- if( isset( $_SERVER[$header] ) ) {
- $debug_info .= "\r\n" . esc_html( 'IP HEADER: '.$header . ": " . $_SERVER[$header] );
- } else {
- $debug_info .= "\r\n" . esc_html( 'IP HEADER: '.$header . ": Not Set" );
+ if ( isset( $_SERVER[ $header ] ) ) {
+ $debug_info .= "\r\n" . esc_html( $header . ": " . $_SERVER[ $header ] );
}
}
-
- $debug_info .= "\r\n" . esc_html( "PROTECT_TRUSTED_HEADER: " . json_encode(get_site_option( 'trusted_ip_header' )));
+ $debug_info .= "\r\n" . esc_html( "PROTECT_TRUSTED_HEADER: " . json_encode( get_site_option( 'trusted_ip_header' ) ) );
$debug_info .= "\r\n\r\nTEST RESULTS:\r\n\r\n";
$debug_raw_info = '';
@@ -118,7 +120,11 @@ class Jetpack_Debugger {
add_filter( 'http_request_timeout', array( 'Jetpack_Debugger', 'jetpack_increase_timeout' ) );
$tests['SELF']['result'] = wp_remote_get( $testsite_url . $self_xml_rpc_url );
- $tests['SELF']['fail_message'] = esc_html__( 'It looks like your site can not communicate properly with Jetpack.', 'jetpack' );
+ if ( is_wp_error( $tests['SELF']['result'] ) && 0 == strpos( $tests['SELF']['result']->get_error_message(), 'Operation timed out' ) ){
+ $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' );
+ } else {
+ $tests['SELF']['fail_message'] = esc_html__( 'It looks like your site can not communicate properly with Jetpack.', 'jetpack' );
+ }
remove_filter( 'http_request_timeout', array( 'Jetpack_Debugger', 'jetpack_increase_timeout' ) );
@@ -245,13 +251,13 @@ class Jetpack_Debugger {
<input name="your_email" type="text" id="your_email" value="<?php esc_html_e( $current_user->user_email, 'jetpack'); ?>" size="40">
</div>
- <div id="toggle_debug_info" class="formbox">
+ <div id="toggle_debug_form_info" class="formbox">
<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>
</div>
- <div id="debug_info_div" class="formbox" style="display:none">
+ <div id="debug_info_form_div" class="formbox" style="display:none">
<label class="h" for="debug_info"><?php esc_html_e( 'Debug Info', 'jetpack' ); ?></label>
- <textarea name="debug_info" cols="40" rows="7" id="debug_info"><?php echo esc_attr( $debug_info ); ?></textarea>
+ <textarea name="debug_info" cols="40" rows="7" id="debug_form_info"><?php echo esc_attr( $debug_info ); ?></textarea>
</div>
<div style="clear: both;"></div>
@@ -264,7 +270,12 @@ class Jetpack_Debugger {
<div style="clear: both;"></div>
</form>
<?php endif; ?>
- </div>
+ </div> <!-- contact-message, hidden by default. -->
+ <div id="toggle_debug_info"><a href="#"><?php _e( 'View Advanced Debug Results', 'jetpack' ); ?></a></div>
+ <div id="debug_info_div" style="display:none">
+ <h4><?php esc_html_e( 'Debug Info', 'jetpack' ); ?></h4>
+ <div id="debug_info"><?php echo wpautop( esc_html( $debug_info ) ); ?></div>
+ </div>
</div>
<?php
}
@@ -336,7 +347,7 @@ class Jetpack_Debugger {
margin: 0 0 25px 0;
}
- .formbox input[type="text"], .formbox input[type="email"], .formbox input[type="url"], .formbox textarea {
+ .formbox input[type="text"], .formbox input[type="email"], .formbox input[type="url"], .formbox textarea, #debug_info_div {
border: 1px solid #e5e5e5;
border-radius: 11px;
box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);
@@ -385,11 +396,16 @@ class Jetpack_Debugger {
display: list-item;
}
+ #debug_info_div, #toggle_debug_info, #debug_info_div p {
+ font-size: smaller;
+ }
+
</style>
<script type="text/javascript">
jQuery( document ).ready( function($) {
- $('#debug_info').prepend('jQuery version: ' + jQuery.fn.jquery + "\r\n");
+ $( '#debug_info' ).prepend( 'jQuery version: ' + jQuery.fn.jquery + "\r\n" );
+ $( '#debug_form_info' ).prepend( 'jQuery version: ' + jQuery.fn.jquery + "\r\n" );
$( '.jetpack-test-error .jetpack-test-heading' ).on( 'click', function() {
$( this ).parents( '.jetpack-test-error' ).find( '.jetpack-test-details' ).slideToggle();
@@ -397,33 +413,38 @@ class Jetpack_Debugger {
} );
$( '.jetpack-show-contact-form a' ).on( 'click', function() {
- $('#contact-message').slideToggle();
+ $( '#contact-message' ).slideToggle();
return false;
} );
$( '#toggle_debug_info a' ).on( 'click', function() {
- $('#debug_info_div').slideToggle();
+ $( '#debug_info_div' ).slideToggle();
+ return false;
+ } );
+
+ $( '#toggle_debug_form_info a' ).on( 'click', function() {
+ $( '#debug_info_form_div' ).slideToggle();
return false;
} );
- $('form#contactme').on("submit", function(e){
- var form = $(this);
- var message = form.find('#did');
- var name = form.find('#your_name');
- var email = form.find('#your_email')
+ $( 'form#contactme' ).on( "submit", function(e){
+ var form = $( this );
+ var message = form.find( '#did' );
+ var name = form.find( '#your_name' );
+ var email = form.find( '#your_email' )
var validation_error = false;
if( !name.val() ) {
- name.parents('.formbox').addClass('error');
+ name.parents( '.formbox' ).addClass( 'error' );
validation_error = true;
}
if( !email.val() ) {
- email.parents('.formbox').addClass('error');
+ email.parents( '.formbox' ).addClass( 'error' );
validation_error = true;
}
if ( validation_error ) {
return false;
}
- message.val(message.val() + "\r\n\r\n----------------------------------------------\r\n\r\nDEBUG INFO:\r\n" + $('#debug_info').val() );
+ message.val( message.val() + "\r\n\r\n----------------------------------------------\r\n\r\nDEBUG INFO:\r\n" + $('#debug_info').val() );
return true;
});
diff --git a/plugins/jetpack/class.jetpack-jitm.php b/plugins/jetpack/class.jetpack-jitm.php
index 9f98a932..69854458 100644
--- a/plugins/jetpack/class.jetpack-jitm.php
+++ b/plugins/jetpack/class.jetpack-jitm.php
@@ -84,7 +84,7 @@ class Jetpack_JITM {
<a href="#" data-module="manage" class="dismiss"><span class="genericon genericon-close"></span></a>
<div class="jp-emblem">
- <?php echo self::get_jp_emblem(); ?>
+ <?php echo Jetpack::get_jp_emblem(); ?>
</div>
<p class="msg">
<?php esc_html_e( 'Reduce security risks with automated plugin updates.', 'jetpack' ); ?>
@@ -115,7 +115,7 @@ class Jetpack_JITM {
<a href="#" data-module="photon" class="dismiss"><span class="genericon genericon-close"></span></a>
<div class="jp-emblem">
- <?php echo self::get_jp_emblem(); ?>
+ <?php echo Jetpack::get_jp_emblem(); ?>
</div>
<p class="msg">
<?php esc_html_e( 'Speed up your photos and save bandwidth costs by using a free content delivery network.', 'jetpack' ); ?>
@@ -144,7 +144,7 @@ class Jetpack_JITM {
<a href="#" data-module="photon" class="dismiss"><span class="genericon genericon-close"></span></a>
<div class="jp-emblem">
- <?php echo self::get_jp_emblem(); ?>
+ <?php echo Jetpack::get_jp_emblem(); ?>
</div>
<p class="msg">
<?php esc_html_e( 'Let Jetpack deliver your images optimized and faster than ever.', 'jetpack' ); ?>
@@ -212,7 +212,7 @@ class Jetpack_JITM {
<a href="#" data-module="manage-pi" class="dismiss"><span class="genericon genericon-close"></span></a>
<div class="jp-emblem">
- <?php echo self::get_jp_emblem(); ?>
+ <?php echo Jetpack::get_jp_emblem(); ?>
</div>
<?php if ( ! $manage_active ) : ?>
<p class="msg">
@@ -254,7 +254,7 @@ class Jetpack_JITM {
<div class="jp-jitm">
<a href="#" data-module="editor" class="dismiss"><span class="genericon genericon-close"></span></a>
<div class="jp-emblem">
- <?php echo self::get_jp_emblem(); ?>
+ <?php echo Jetpack::get_jp_emblem(); ?>
</div>
<p class="msg">
<?php esc_html_e( 'Try the brand new editor.', 'jetpack' ); ?>
@@ -285,7 +285,7 @@ class Jetpack_JITM {
<a href="#" data-module="stats" class="dismiss"><span class="genericon genericon-close"></span></a>
<div class="jp-emblem">
- <?php echo self::get_jp_emblem(); ?>
+ <?php echo Jetpack::get_jp_emblem(); ?>
</div>
<p class="msg">
<?php esc_html_e( 'Track detailed stats on this post and the rest of your site.', 'jetpack' ); ?>
@@ -453,17 +453,6 @@ class Jetpack_JITM {
// so if it's not an array, it means no JITM was dismissed
return is_array( self::$jetpack_hide_jitm );
}
-
- /**
- * Return string containing the Jetpack logo.
- *
- * @since 3.9.0
- *
- * @return string
- */
- function get_jp_emblem() {
- 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>';
- }
}
/**
* Filter to turn off all just in time messages
diff --git a/plugins/jetpack/class.jetpack-signature.php b/plugins/jetpack/class.jetpack-signature.php
index b2c621f6..45c74a12 100644
--- a/plugins/jetpack/class.jetpack-signature.php
+++ b/plugins/jetpack/class.jetpack-signature.php
@@ -1,5 +1,8 @@
<?php
+// These constants can be set in wp-config.php to ensure sites behind proxies will still work.
+// Setting these constants, though, is *not* the preferred method. It's better to configure
+// the proxy to send the X-Forwarded-Port header.
defined( 'JETPACK_SIGNATURE__HTTP_PORT' ) or define( 'JETPACK_SIGNATURE__HTTP_PORT' , 80 );
defined( 'JETPACK_SIGNATURE__HTTPS_PORT' ) or define( 'JETPACK_SIGNATURE__HTTPS_PORT', 443 );
defined( 'JETPACK__WPCOM_JSON_API_HOST' ) or define( 'JETPACK__WPCOM_JSON_API_HOST', 'public-api.wordpress.com' );
@@ -32,10 +35,26 @@ class Jetpack_Signature {
}
}
+ $host_port = isset( $_SERVER['HTTP_X_FORWARDED_PORT'] ) ? $_SERVER['HTTP_X_FORWARDED_PORT'] : $_SERVER['SERVER_PORT'];
+
if ( is_ssl() ) {
- $port = JETPACK_SIGNATURE__HTTPS_PORT == $_SERVER['SERVER_PORT'] ? '' : $_SERVER['SERVER_PORT'];
+ // 443: Standard Port
+ // 80: Assume we're behind a proxy without X-Forwarded-Port. Hardcoding "80" here means most sites
+ // with SSL termination proxies (self-served, Cloudflare, etc.) don't need to fiddle with
+ // the JETPACK_SIGNATURE__HTTPS_PORT constant. The code also implies we can't talk to a
+ // site at https://example.com:80/ (which would be a strange configuration).
+ // JETPACK_SIGNATURE__HTTPS_PORT: Set this constant in wp-config.php to the backend webserver's port
+ // if the site is behind a proxy running on port 443 without
+ // X-Forwarded-Port and the backend's port is *not* 80. It's better,
+ // though, to configure the proxy to send X-Forwarded-Port.
+ $port = in_array( $host_port, array( 443, 80, JETPACK_SIGNATURE__HTTPS_PORT ) ) ? '' : $host_port;
} else {
- $port = JETPACK_SIGNATURE__HTTP_PORT == $_SERVER['SERVER_PORT'] ? '' : $_SERVER['SERVER_PORT'];
+ // 80: Standard Port
+ // JETPACK_SIGNATURE__HTTPS_PORT: Set this constant in wp-config.php to the backend webserver's port
+ // if the site is behind a proxy running on port 80 without
+ // X-Forwarded-Port. It's better, though, to configure the proxy to
+ // send X-Forwarded-Port.
+ $port = in_array( $host_port, array( 80, JETPACK_SIGNATURE__HTTP_PORT ) ) ? '' : $host_port;
}
$url = "{$scheme}://{$_SERVER['HTTP_HOST']}:{$port}" . stripslashes( $_SERVER['REQUEST_URI'] );
diff --git a/plugins/jetpack/class.jetpack-tracks.php b/plugins/jetpack/class.jetpack-tracks.php
index 35c98374..7e1696c6 100644
--- a/plugins/jetpack/class.jetpack-tracks.php
+++ b/plugins/jetpack/class.jetpack-tracks.php
@@ -58,7 +58,7 @@ class JetpackTracking {
self::record_user_event( 'module_deactivated', array( 'module' => $module ) );
}
- static function record_user_event( $event_type, $data ) {
+ static function record_user_event( $event_type, $data= array() ) {
$user = wp_get_current_user();
$site_url = get_option( 'siteurl' );
diff --git a/plugins/jetpack/class.jetpack.php b/plugins/jetpack/class.jetpack.php
index a88ab0db..19ad2637 100644
--- a/plugins/jetpack/class.jetpack.php
+++ b/plugins/jetpack/class.jetpack.php
@@ -317,8 +317,6 @@ class Jetpack {
self::$instance->plugin_upgrade();
- add_action( 'init', array( __CLASS__, 'perform_security_reporting' ) );
-
}
return self::$instance;
@@ -346,6 +344,8 @@ class Jetpack {
* @since 3.3.0
*/
do_action( 'jetpack_sync_all_registered_options' );
+
+ Jetpack::maybe_set_version_option();
}
}
}
@@ -536,8 +536,13 @@ class Jetpack {
add_action( 'wp_ajax_jetpack-sync-reindex-trigger', array( $this, 'sync_reindex_trigger' ) );
add_action( 'wp_ajax_jetpack-sync-reindex-status', array( $this, 'sync_reindex_status' ) );
+ // returns HTTPS support status
+ add_action( 'wp_ajax_jetpack-recheck-ssl', array( $this, 'ajax_recheck_ssl' ) );
+
// Jump Start AJAX callback function
add_action( 'wp_ajax_jetpack_jumpstart_ajax', array( $this, 'jetpack_jumpstart_ajax_callback' ) );
+
+ // If any module option is updated before Jump Start is dismissed, hide Jump Start.
add_action( 'update_option', array( $this, 'jumpstart_has_updated_module_option' ) );
// Identity Crisis AJAX callback function
@@ -906,28 +911,10 @@ class Jetpack {
if ( Jetpack::is_development_mode() ) {
$caps = array( 'manage_options' );
break;
+ } else {
+ $caps = array( 'read' );
}
-
- // Don't ever show to subscribers, but allow access to the page if they're trying to unlink.
- if ( ! current_user_can( 'edit_posts' ) ) {
- if ( isset( $_GET['redirect'] ) && 'sub-unlink' == $_GET['redirect'] ) {
- // We need this in order to unlink the user.
- $this->admin_page_load();
- }
- if ( ! wp_verify_nonce( 'jetpack-unlink' ) ) {
- $caps = array( 'do_not_allow' );
- break;
- }
- }
-
- if ( ! self::is_active() && ! current_user_can( 'jetpack_connect' ) ) {
- $caps = array( 'do_not_allow' );
- break;
- }
- /**
- * Pass through. If it's not development mode, these should match the admin page.
- * Let users disconnect if it's development mode, just in case things glitch.
- */
+ break;
case 'jetpack_connect_user' :
if ( Jetpack::is_development_mode() ) {
$caps = array( 'do_not_allow' );
@@ -1015,6 +1002,12 @@ class Jetpack {
require_once( JETPACK__PLUGIN_DIR . '_inc/genericons.php' );
jetpack_register_genericons();
+ /**
+ * Register the social logos
+ */
+ require_once( JETPACK__PLUGIN_DIR . '_inc/social-logos.php' );
+ jetpack_register_social_logos();
+
if ( ! wp_style_is( 'jetpack-icons', 'registered' ) )
wp_register_style( 'jetpack-icons', plugins_url( 'css/jetpack-icons.min.css', JETPACK__PLUGIN_FILE ), false, JETPACK__VERSION );
}
@@ -1488,7 +1481,7 @@ class Jetpack {
/**
* Filters Jetpack's development mode.
*
- * @see http://jetpack.com/support/development-mode/
+ * @see https://jetpack.com/support/development-mode/
*
* @since 2.2.1
*
@@ -1509,19 +1502,19 @@ class Jetpack {
$notice = sprintf(
/* translators: %s is a URL */
__( 'In <a href="%s" target="_blank">Development Mode</a>, via the JETPACK_DEV_DEBUG constant being defined in wp-config.php or elsewhere.', 'jetpack' ),
- 'http://jetpack.com/support/development-mode/'
+ 'https://jetpack.com/support/development-mode/'
);
} elseif ( site_url() && false === strpos( site_url(), '.' ) ) {
$notice = sprintf(
/* translators: %s is a URL */
__( 'In <a href="%s" target="_blank">Development Mode</a>, via site URL lacking a dot (e.g. http://localhost).', 'jetpack' ),
- 'http://jetpack.com/support/development-mode/'
+ 'https://jetpack.com/support/development-mode/'
);
} else {
$notice = sprintf(
/* translators: %s is a URL */
__( 'In <a href="%s" target="_blank">Development Mode</a>, via the jetpack_development_mode filter.', 'jetpack' ),
- 'http://jetpack.com/support/development-mode/'
+ 'https://jetpack.com/support/development-mode/'
);
}
@@ -2596,6 +2589,9 @@ class Jetpack {
$modules[ $index ]['short_description'] = $i18n_module['description'];
}
}
+ if ( Jetpack::is_module_active( 'manage' ) ) {
+ unset( $modules['manage'] );
+ }
return $modules;
}
@@ -3139,6 +3135,15 @@ p {
Jetpack_Options::update_option( 'user_tokens', $tokens );
+ /**
+ * Fires after the current user has been unlinked from WordPress.com.
+ *
+ * @since 4.1.0
+ *
+ * @param int $user_id The current user's ID.
+ */
+ do_action( 'jetpack_unlinked_user', $user_id );
+
return true;
}
@@ -3330,9 +3335,6 @@ p {
// Show the notice on the Dashboard only for now
add_action( 'load-index.php', array( $this, 'prepare_manage_jetpack_notice' ) );
-
- // Identity crisis notices
- add_action( 'jetpack_notices', array( $this, 'alert_identity_crisis' ) );
}
// If the plugin has just been disconnected from WP.com, show the survey notice
@@ -3340,8 +3342,8 @@ p {
add_action( 'jetpack_notices', array( $this, 'disconnect_survey_notice' ) );
}
- if ( current_user_can( 'manage_options' ) && 'ALWAYS' == JETPACK_CLIENT__HTTPS && ! self::permit_ssl() ) {
- add_action( 'admin_notices', array( $this, 'alert_required_ssl_fail' ) );
+ if ( current_user_can( 'manage_options' ) && 'AUTO' == JETPACK_CLIENT__HTTPS && ! self::permit_ssl() ) {
+ add_action( 'jetpack_notices', array( $this, 'alert_auto_ssl_fail' ) );
}
add_action( 'load-plugins.php', array( $this, 'intercept_plugin_error_scrape_init' ) );
@@ -3358,6 +3360,11 @@ p {
// Jetpack Manage Activation Screen from .com
Jetpack::module_configuration_activation_screen( 'manage', array( $this, 'manage_activate_screen' ) );
+
+ // Add custom column in wp-admin/users.php to show whether user is linked.
+ add_filter( 'manage_users_columns', array( $this, 'jetpack_icon_user_connected' ) );
+ add_action( 'manage_users_custom_column', array( $this, 'jetpack_show_user_connected_icon' ), 10, 3 );
+ add_action( 'admin_print_styles', array( $this, 'jetpack_user_col_style' ) );
}
function admin_body_class( $admin_body_class = '' ) {
@@ -3609,8 +3616,8 @@ p {
// Help Sidebar
$current_screen->set_help_sidebar(
'<p><strong>' . __( 'For more information:', 'jetpack' ) . '</strong></p>' .
- '<p><a href="http://jetpack.com/faq/" target="_blank">' . __( 'Jetpack FAQ', 'jetpack' ) . '</a></p>' .
- '<p><a href="http://jetpack.com/support/" target="_blank">' . __( 'Jetpack Support', 'jetpack' ) . '</a></p>' .
+ '<p><a href="https://jetpack.com/faq/" target="_blank">' . __( 'Jetpack FAQ', 'jetpack' ) . '</a></p>' .
+ '<p><a href="https://jetpack.com/support/" target="_blank">' . __( 'Jetpack Support', 'jetpack' ) . '</a></p>' .
'<p><a href="' . Jetpack::admin_url( array( 'page' => 'jetpack-debugger' ) ) .'">' . __( 'Jetpack Debugging Center', 'jetpack' ) . '</a></p>'
);
}
@@ -3694,16 +3701,17 @@ p {
$dismiss_and_deactivate_url = wp_nonce_url( Jetpack::admin_url( '?page=jetpack&jetpack-notice=dismiss' ), 'jetpack-deactivate' );
?>
- <div id="message" class="updated jetpack-message jp-banner" style="display:block !important;">
- <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>
+ <div id="message" class="updated jp-banner">
+ <a href="<?php echo esc_url( $dismiss_and_deactivate_url ); ?>" class="notice-dismiss" title="<?php esc_attr_e( 'Dismiss this notice', 'jetpack' ); ?>"></a>
<?php if ( in_array( Jetpack_Options::get_option( 'activated' ) , array( 1, 2, 3 ) ) ) : ?>
- <div class="jp-banner__content is-connection">
- <h2><?php _e( 'Your Jetpack is almost ready!', 'jetpack' ); ?></h2>
- <p><?php _e( 'Connect now to enable features like Stats, Likes, and Social Sharing.', 'jetpack' ); ?></p>
- </div>
- <div class="jp-banner__action-container is-connection">
- <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>
- </div>
+ <div class="jp-banner__description-container">
+ <h2 class="jp-banner__header"><?php _e( 'Your Jetpack is almost ready!', 'jetpack' ); ?></h2>
+ <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>
+ <p class="jp-banner__button-container">
+ <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>
+ <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>
+ </p>
+ </div>
<?php else : ?>
<div class="jp-banner__content">
<h2><?php _e( 'Jetpack is installed!', 'jetpack' ) ?></h2>
@@ -3747,15 +3755,16 @@ p {
*/
?>
- <div id="message" class="updated jetpack-message jp-banner is-opt-in" style="display:block !important;">
- <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>
- <div class="jp-banner__content">
- <h2><?php esc_html_e( 'New in Jetpack: Centralized Site Management', 'jetpack' ); ?></h2>
- <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>
- </div>
- <div class="jp-banner__action-container is-opt-in">
- <a href="<?php echo esc_url( $opt_in_url ); ?>" class="jp-banner__button" id="wpcom-connect"><?php _e( 'Activate now', 'jetpack' ); ?></a>
- </div>
+ <div id="message" class="updated jp-banner">
+ <a href="<?php echo esc_url( $opt_out_url ); ?>" class="notice-dismiss" title="<?php esc_attr_e( 'Dismiss this notice', 'jetpack' ); ?>"></a>
+ <div class="jp-banner__description-container">
+ <h2 class="jp-banner__header"><?php esc_html_e( 'Jetpack Centralized Site Management', 'jetpack' ); ?></h2>
+ <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>
+ <p class="jp-banner__button-container">
+ <a href="<?php echo esc_url( $opt_in_url ); ?>" class="button button-primary" id="wpcom-connect"><?php _e( 'Activate Jetpack Manage', 'jetpack' ); ?></a>
+ <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>
+ </p>
+ </div>
</div>
<?php
}
@@ -3780,7 +3789,7 @@ p {
?>
<div class="wrap">
<div id="message" class="jetpack-message is-opt-in">
- <?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' ); ?>
+ <?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' ); ?>
</div>
</div>
<?php
@@ -3937,9 +3946,14 @@ p {
wp_redirect( $connect_url );
exit;
} else {
- Jetpack::state( 'message', 'already_authorized' );
- wp_safe_redirect( Jetpack::admin_url() );
- exit;
+ if ( ! isset( $_GET['calypso_env'] ) ) {
+ Jetpack::state( 'message', 'already_authorized' );
+ wp_safe_redirect( Jetpack::admin_url() );
+ } else {
+ $connect_url = $this->build_connect_url( true, false, 'iframe' );
+ $connect_url .= '&already_authorized=true';
+ wp_redirect( $connect_url );
+ }
}
}
@@ -4069,7 +4083,7 @@ p {
$this->error = __( 'Cheatin&#8217; uh?', 'jetpack' );
break;
case 'access_denied' :
- $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>';
+ $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>';
break;
case 'wrong_state' :
$this->error = __( 'You need to stay logged in to your WordPress blog while you authorize Jetpack.', 'jetpack' );
@@ -4595,7 +4609,10 @@ p {
'admin.php?page=jetpack-settings' ), $url );
}
} else {
- require_once JETPACK__GLOTPRESS_LOCALES_PATH;
+ if ( defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) && include_once JETPACK__GLOTPRESS_LOCALES_PATH ) {
+ $gp_locale = GP_Locales::by_field( 'wp_locale', get_locale() );
+ }
+
$role = $this->translate_current_user_to_role();
$signed_role = $this->sign_role( $role );
@@ -4603,8 +4620,6 @@ p {
$redirect = $redirect ? esc_url_raw( $redirect ) : esc_url_raw( menu_page_url( 'jetpack', false ) );
- $gp_locale = GP_Locales::by_field( 'wp_locale', get_locale() );
-
if( isset( $_REQUEST['is_multisite'] ) ) {
$redirect = Jetpack_Network::init()->get_url( 'network_admin_page' );
}
@@ -4652,7 +4667,7 @@ p {
}
if ( isset( $_GET['calypso_env'] ) ) {
- $url = add_query_arg( 'calypso_env', $_GET['calypso_env'], $url );
+ $url = add_query_arg( 'calypso_env', sanitize_key( $_GET['calypso_env'] ), $url );
}
return $raw ? $url : esc_url( $url );
@@ -4842,7 +4857,7 @@ p {
$activate_url = Jetpack::init()->opt_in_jetpack_manage_url();
- $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' );
+ $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' );
// $extra = __( 'To use Site Management, you need to first activate JSON API to allow remote management of your site. ', 'jetpack' );
} ?>
@@ -4894,6 +4909,15 @@ p {
exit;
}
+ function ajax_recheck_ssl() {
+ check_ajax_referer( 'recheck-ssl', 'ajax-nonce' );
+ $result = Jetpack::permit_ssl( true );
+ wp_send_json( array(
+ 'enabled' => $result,
+ 'message' => get_transient( 'jetpack_https_test_message' )
+ ) );
+ }
+
/* Client API */
/**
@@ -4921,13 +4945,8 @@ p {
// default : case 'AUTO' :
}
- // Yay! Your host is good!
- if ( self::permit_ssl() && wp_http_supports( array( 'ssl' => true ) ) ) {
- return $url;
- }
-
- // Boo! Your host is bad and makes Jetpack cry!
- return set_url_scheme( $url, 'http' );
+ // we now return the unmodified SSL URL by default, as a security precaution
+ return $url;
}
/**
@@ -4939,12 +4958,14 @@ p {
public static function permit_ssl( $force_recheck = false ) {
// Do some fancy tests to see if ssl is being supported
if ( $force_recheck || false === ( $ssl = get_transient( 'jetpack_https_test' ) ) ) {
+ $message = '';
if ( 'https' !== substr( JETPACK__API_BASE, 0, 5 ) ) {
$ssl = 0;
} else {
switch ( JETPACK_CLIENT__HTTPS ) {
case 'NEVER':
$ssl = 0;
+ $message = __( 'JETPACK_CLIENT__HTTPS is set to NEVER', 'jetpack' );
break;
case 'ALWAYS':
case 'AUTO':
@@ -4955,32 +4976,77 @@ p {
// If it's not 'NEVER', test to see
if ( $ssl ) {
- $response = wp_remote_get( JETPACK__API_BASE . 'test/1/' );
- if ( is_wp_error( $response ) || ( 'OK' !== wp_remote_retrieve_body( $response ) ) ) {
+ if ( ! wp_http_supports( array( 'ssl' => true ) ) ) {
$ssl = 0;
+ $message = __( 'WordPress reports no SSL support', 'jetpack' );
+ } else {
+ $response = wp_remote_get( JETPACK__API_BASE . 'test/1/' );
+ if ( is_wp_error( $response ) ) {
+ $ssl = 0;
+ $message = __( 'WordPress reports no SSL support', 'jetpack' );
+ } elseif ( 'OK' !== wp_remote_retrieve_body( $response ) ) {
+ $ssl = 0;
+ $message = __( 'Response was not OK: ', 'jetpack' ) . wp_remote_retrieve_body( $response );
+ }
}
}
}
set_transient( 'jetpack_https_test', $ssl, DAY_IN_SECONDS );
+ set_transient( 'jetpack_https_test_message', $message, DAY_IN_SECONDS );
}
return (bool) $ssl;
}
/*
- * Displays an admin_notice, alerting the user to their JETPACK_CLIENT__HTTPS constant being 'ALWAYS' but SSL isn't working.
+ * Displays an admin_notice, alerting the user to their JETPACK_CLIENT__HTTPS constant being 'AUTO' but SSL isn't working.
*/
- public function alert_required_ssl_fail() {
+ public function alert_auto_ssl_fail() {
if ( ! current_user_can( 'manage_options' ) )
return;
+
+ $ajax_nonce = wp_create_nonce( 'recheck-ssl' );
?>
- <div id="message" class="error jetpack-message jp-identity-crisis">
+ <div id="jetpack-ssl-warning" class="error jp-identity-crisis">
<div class="jp-banner__content">
- <h2><?php _e( 'Something is being cranky!', 'jetpack' ); ?></h2>
- <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>
+ <h2><?php _e( 'Outbound HTTPS not working', 'jetpack' ); ?></h2>
+ <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>
+ <p>
+ <?php _e( 'Jetpack will re-test for HTTPS support once a day, but you can click here to try again immediately: ', 'jetpack' ); ?>
+ <a href="#" id="jetpack-recheck-ssl-button"><?php _e( 'Try again', 'jetpack' ); ?></a>
+ <span id="jetpack-recheck-ssl-output"><?php echo get_transient( 'jetpack_https_test_message' ); ?></span>
+ </p>
+ <p>
+ <?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' ),
+ esc_url( Jetpack::admin_url( array( 'page' => 'jetpack-debugger' ) ) ),
+ esc_url( 'https://jetpack.com/support/getting-started-with-jetpack/troubleshooting-tips/' ) ); ?>
+ </p>
</div>
</div>
+ <style>
+ #jetpack-recheck-ssl-output { margin-left: 5px; color: red; }
+ </style>
+ <script type="text/javascript">
+ jQuery( document ).ready( function( $ ) {
+ $( '#jetpack-recheck-ssl-button' ).click( function( e ) {
+ var $this = $( this );
+ $this.html( <?php echo json_encode( __( 'Checking', 'jetpack' ) ); ?> );
+ $( '#jetpack-recheck-ssl-output' ).html( '' );
+ e.preventDefault();
+ var data = { action: 'jetpack-recheck-ssl', 'ajax-nonce': '<?php echo $ajax_nonce; ?>' };
+ $.post( ajaxurl, data )
+ .done( function( response ) {
+ if ( response.enabled ) {
+ $( '#jetpack-ssl-warning' ).hide();
+ } else {
+ this.html( <?php echo json_encode( __( 'Try again', 'jetpack' ) ); ?> );
+ $( '#jetpack-recheck-ssl-output' ).html( 'SSL Failed: ' + response.message );
+ }
+ }.bind( $this ) );
+ } );
+ } );
+ </script>
<?php
}
@@ -5731,11 +5797,11 @@ p {
wp_die( $die_error );
} else if ( is_wp_error( $signature ) ) {
wp_die( $die_error );
- } else if ( $signature !== $_GET['signature'] ) {
+ } else if ( ! hash_equals( $signature, $_GET['signature'] ) ) {
if ( is_ssl() ) {
// 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
$signature = $jetpack_signature->sign_current_request( array( 'scheme' => 'http', 'body' => null, 'method' => 'GET' ) );
- if ( ! $signature || is_wp_error( $signature ) || $signature !== $_GET['signature'] ) {
+ if ( ! $signature || is_wp_error( $signature ) || ! hash_equals( $signature, $_GET['signature'] ) ) {
wp_die( $die_error );
}
} else {
@@ -6238,135 +6304,6 @@ p {
}
/**
- * Displays an admin_notice, alerting the user to an identity crisis.
- */
- public function alert_identity_crisis() {
- // @todo temporary killing of feature in 3.8.1 as it revealed a number of scenarios not foreseen.
- if ( ! Jetpack::is_development_version() ) {
- return;
- }
-
- // @todo temporary copout for dealing with domain mapping
- // @see https://github.com/Automattic/jetpack/issues/2702
- if ( is_multisite() && defined( 'SUNRISE' ) && ! Jetpack::is_development_version() ) {
- return;
- }
-
- if ( ! current_user_can( 'jetpack_disconnect' ) ) {
- return;
- }
-
- if ( ! $errors = self::check_identity_crisis() ) {
- return;
- }
-
- // Only show on dashboard and jetpack pages
- $screen = get_current_screen();
- if ( 'dashboard' !== $screen->base && ! did_action( 'jetpack_notices' ) ) {
- return;
- }
-
- // Include the js!
- $ajax_nonce = wp_create_nonce( 'resolve-identity-crisis' );
- $this->identity_crisis_js( $ajax_nonce );
-
- // Include the CSS!
- if ( ! wp_script_is( 'jetpack', 'done' ) ) {
- $this->admin_banner_styles();
- }
-
- if ( ! array_key_exists( 'error_code', $errors ) ) {
- $key = 'siteurl';
- if ( ! $errors[ $key ] ) {
- $key = 'home';
- }
- } else {
- $key = 'error_code';
- // 401 is the only error we care about. Any other errors should not trigger the alert.
- if ( 401 !== $errors[ $key ] ) {
- return;
- }
- }
-
- ?>
-
- <style>
- .jp-identity-crisis .jp-btn-group {
- margin: 15px 0;
- }
- .jp-identity-crisis strong {
- color: #518d2a;
- }
- .jp-identity-crisis.dismiss {
- display: none;
- }
- .jp-identity-crisis .button {
- margin-right: 4px;
- }
- </style>
-
- <div id="message" class="error jetpack-message jp-identity-crisis stay-visible">
- <div class="service-mark"></div>
- <div class="jp-id-banner__content">
- <!-- <h3 class="banner-title"><?php _e( 'Something\'s not quite right with your Jetpack connection! Let\'s fix that.', 'jetpack' ); ?></h3> -->
-
- <div class="jp-id-crisis-question" id="jp-id-crisis-question-1">
- <?php
- // 401 means that this site has been disconnected from wpcom, but the remote site still thinks it's connected.
- if ( 'error_code' == $key && '401' == $errors[ $key ] ) : ?>
- <div class="banner-content">
- <p><?php
- /* translators: %s is a URL */
- 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/' );
- ?></p>
- </div>
- <div class="jp-btn-group">
- <a href="#" class="reset-connection"><?php _e( 'Reset the connection', 'jetpack' ); ?></a>
- <span class="idc-separator">|</span>
- <a href="<?php echo esc_url( wp_nonce_url( Jetpack::admin_url( 'jetpack-notice=dismiss' ), 'jetpack-deactivate' ) ); ?>"><?php _e( 'Deactivate Jetpack', 'jetpack' ); ?></a>
- </div>
- <?php else : ?>
- <div class="banner-content">
- <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>
- </div>
- <div class="jp-btn-group">
- <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>
- <span class="spinner"></span>
- </div>
- <?php endif ; ?>
- </div>
-
- <div class="jp-id-crisis-question" id="jp-id-crisis-question-2" style="display: none;">
- <div class="banner-content">
- <p><?php printf(
- /* translators: %1$s, %2$s and %3$s are URLs */
- __(
- '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>',
- 'jetpack'
- ),
- $errors[ $key ],
- (string) get_option( $key ),
- 'https://jetpack.com/support/what-does-resetting-the-connection-mean/'
- ); ?></p>
- </div>
- <div class="jp-btn-group">
- <a href="#" class="reset-connection"><?php _e( 'Reset the connection', 'jetpack' ); ?></a> <span class="idc-separator">|</span>
- <a href="#" class="is-dev-env"><?php _e( 'This is a development environment', 'jetpack' ); ?></a> <span class="idc-separator">|</span>
- <a href="https://jetpack.com/contact-support/" class="contact-support"><?php _e( 'Submit a support ticket', 'jetpack' ); ?></a>
- <span class="spinner"></span>
- </div>
- </div>
-
- <div class="jp-id-crisis-success" id="jp-id-crisis-success" style="display: none;">
- <h3 class="success-notice"><?php printf( __( 'Thanks for taking the time to sort things out. We&#039;ve updated our records accordingly!', 'jetpack' ) ); ?></h3>
- </div>
- </div>
- </div>
-
- <?php
- }
-
- /**
* Maybe Use a .min.css stylesheet, maybe not.
*
* Hooks onto `plugins_url` filter at priority 1, and accepts all 3 args.
@@ -6525,6 +6462,7 @@ p {
'wpl_sharing_2014_1' => null,
'jetpack-tools-to-include' => 'jetpack_tools_to_include',
'jetpack_identity_crisis_options_to_check' => null,
+ 'audio_player_default_colors' => null,
);
// This is a silly loop depth. Better way?
@@ -7014,11 +6952,6 @@ p {
<?php endif; ?>
</div>
-
- <?php if ( ! current_user_can( 'edit_posts' ) && self::is_user_connected() ) : ?>
- <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>
- <?php endif; ?>
-
</footer>
<?php
}
@@ -7095,4 +7028,56 @@ p {
return true;
}
+ /**
+ * Return string containing the Jetpack logo.
+ *
+ * @since 3.9.0
+ *
+ * @return string
+ */
+ public static function get_jp_emblem() {
+ 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>';
+ }
+
+ /*
+ * Adds a "blank" column in the user admin table to display indication of user connection.
+ */
+ function jetpack_icon_user_connected( $columns ) {
+ $columns['user_jetpack'] = '';
+ return $columns;
+ }
+
+ /*
+ * Show Jetpack icon if the user is linked.
+ */
+ function jetpack_show_user_connected_icon( $val, $col, $user_id ) {
+ if ( 'user_jetpack' == $col && Jetpack::is_user_connected( $user_id ) ) {
+ $emblem_html = sprintf(
+ '<a title="%1$s" class="jp-emblem-user-admin">%2$s</a>',
+ esc_attr__( 'This user is linked and ready to fly with Jetpack.', 'jetpack' ),
+ Jetpack::get_jp_emblem()
+ );
+ return $emblem_html;
+ }
+
+ return $val;
+ }
+
+ /*
+ * Style the Jetpack user column
+ */
+ function jetpack_user_col_style() {
+ global $current_screen;
+ if ( 'users' == $current_screen->base ) { ?>
+ <style>
+ .fixed .column-user_jetpack {
+ width: 21px;
+ }
+ .jp-emblem-user-admin path {
+ fill: #8cc258;
+ }
+ </style>
+ <?php }
+ }
+
}
diff --git a/plugins/jetpack/class.json-api-endpoints.php b/plugins/jetpack/class.json-api-endpoints.php
index 7c655ad0..934def31 100644
--- a/plugins/jetpack/class.json-api-endpoints.php
+++ b/plugins/jetpack/class.json-api-endpoints.php
@@ -1,12 +1,18 @@
<?php
require_once( dirname( __FILE__ ) . '/json-api-config.php' );
+require_once( dirname( __FILE__ ) . '/sal/class.json-api-links.php' );
+require_once( dirname( __FILE__ ) . '/sal/class.json-api-metadata.php' );
+require_once( dirname( __FILE__ ) . '/sal/class.json-api-date.php' );
// Endpoint
abstract class WPCOM_JSON_API_Endpoint {
// The API Object
public $api;
+ // The link-generating utility class
+ public $links;
+
public $pass_wpcom_user_details = false;
// One liner.
@@ -193,6 +199,7 @@ abstract class WPCOM_JSON_API_Endpoint {
}
$this->api = WPCOM_JSON_API::init(); // Auto-add to WPCOM_JSON_API
+ $this->links = WPCOM_JSON_API_Links::getInstance();
/** Example Request/Response ******************************************/
@@ -643,6 +650,18 @@ abstract class WPCOM_JSON_API_Endpoint {
);
$return[$key] = (array) $this->cast_and_filter( $value, $docs, false, $for_output );
break;
+ case 'taxonomy':
+ $docs = array(
+ 'name' => '(string) The taxonomy slug',
+ 'label' => '(string) The taxonomy human-readable name',
+ 'labels' => '(object) Mapping of labels for the taxonomy',
+ 'description' => '(string) The taxonomy description',
+ 'hierarchical' => '(bool) Whether the taxonomy is hierarchical',
+ 'public' => '(bool) Whether the taxonomy is public',
+ 'capabilities' => '(object) Mapping of current user capabilities for the taxonomy',
+ );
+ $return[$key] = (array) $this->cast_and_filter( $value, $docs, false, $for_output );
+ break;
default :
$method_name = $type['type'] . '_docs';
@@ -1132,9 +1151,9 @@ abstract class WPCOM_JSON_API_Endpoint {
$response['meta'] = (object) array(
'links' => (object) array(
- 'self' => (string) $this->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
- 'help' => (string) $this->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
- 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
+ 'self' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
+ 'help' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
+ 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
),
);
@@ -1244,21 +1263,21 @@ abstract class WPCOM_JSON_API_Endpoint {
$response['meta'] = (object) array(
'links' => (object) array(
- 'self' => (string) $this->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
- 'help' => (string) $this->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
- 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
+ 'self' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
+ 'help' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
+ 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
),
);
// add VideoPress link to the meta
if ( in_array( $ext, array( 'ogv', 'mp4', 'mov', 'wmv', 'avi', 'mpg', '3gp', '3g2', 'm4v' ) ) ) {
if ( function_exists( 'video_get_info_by_blogpostid' ) ) {
- $response['meta']->links->videopress = (string) $this->get_link( '/videos/%s', $response['videopress_guid'], '' );
+ $response['meta']->links->videopress = (string) $this->links->get_link( '/videos/%s', $response['videopress_guid'], '' );
}
}
if ( $media_item->post_parent > 0 ) {
- $response['meta']->links->parent = (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $media_item->post_parent );
+ $response['meta']->links->parent = (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $media_item->post_parent );
}
return (object) $response;
@@ -1299,14 +1318,15 @@ abstract class WPCOM_JSON_API_Endpoint {
$response['description'] = (string) $taxonomy->description;
$response['post_count'] = (int) $taxonomy->count;
- if ( 'category' === $taxonomy_type )
+ if ( is_taxonomy_hierarchical( $taxonomy_type ) ) {
$response['parent'] = (int) $taxonomy->parent;
+ }
$response['meta'] = (object) array(
'links' => (object) array(
- 'self' => (string) $this->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type ),
- 'help' => (string) $this->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type, 'help' ),
- 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
+ 'self' => (string) $this->links->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type ),
+ 'help' => (string) $this->links->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type, 'help' ),
+ 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
),
);
@@ -1322,47 +1342,7 @@ abstract class WPCOM_JSON_API_Endpoint {
* @return string
*/
function format_date( $date_gmt, $date = null ) {
- $timestamp_gmt = strtotime( "$date_gmt+0000" );
-
- if ( null === $date ) {
- $timestamp = $timestamp_gmt;
- $hours = $minutes = $west = 0;
- } else {
- $date_time = date_create( "$date+0000" );
- if ( $date_time ) {
- $timestamp = date_format( $date_time, 'U' );
- } else {
- $timestamp = 0;
- }
-
- // "0000-00-00 00:00:00" == -62169984000
- if ( -62169984000 == $timestamp_gmt ) {
- // WordPress sets post_date=now, post_date_gmt="0000-00-00 00:00:00" for all drafts
- // WordPress sets post_modified=now, post_modified_gmt="0000-00-00 00:00:00" for new drafts
-
- // Try to guess the correct offset from the blog's options.
- $timezone_string = get_option( 'timezone_string' );
-
- if ( $timezone_string && $date_time ) {
- $timezone = timezone_open( $timezone_string );
- if ( $timezone ) {
- $offset = $timezone->getOffset( $date_time );
- }
- } else {
- $offset = 3600 * get_option( 'gmt_offset' );
- }
- } else {
- $offset = $timestamp - $timestamp_gmt;
- }
-
- $west = $offset < 0;
- $offset = abs( $offset );
- $hours = (int) floor( $offset / 3600 );
- $offset -= $hours * 3600;
- $minutes = (int) floor( $offset / 60 );
- }
-
- return (string) gmdate( 'Y-m-d\\TH:i:s', $timestamp ) . sprintf( '%s%02d:%02d', $west ? '-' : '+', $hours, $minutes );
+ return WPCOM_JSON_API_Date::format_date( $date_gmt, $date );
}
/**
@@ -1536,235 +1516,6 @@ abstract class WPCOM_JSON_API_Endpoint {
}
/**
- * Try to find the closest supported version of an endpoint to the current endpoint
- *
- * For example, if we were looking at the path /animals/panda:
- * - if the current endpoint is v1.3 and there is a v1.3 of /animals/%s available, we return 1.3
- * - if the current endpoint is v1.3 and there is no v1.3 of /animals/%s known, we fall back to the
- * maximum available version of /animals/%s, e.g. 1.1
- *
- * This method is used in get_link() to construct meta links for API responses.
- *
- * @param $path string The current endpoint path, relative to the version
- * @param $method string Request method used to access the endpoint path
- * @return string The current version, or otherwise the maximum version available
- */
- function get_closest_version_of_endpoint( $path, $request_method = 'GET' ) {
-
- $path = untrailingslashit( $path );
-
- // /help is a special case - always use the current request version
- if ( wp_endswith( $path, '/help' ) ) {
- return $this->api->version;
- }
-
- static $matches;
- if ( empty( $matches ) ) {
- $matches = array();
- } else {
- // try to match out of saved matches
- foreach( $matches as $match ) {
- $regex = $match->regex;
- if ( preg_match( "#^$regex\$#", $path ) ) {
- return $match->version;
- }
- }
- }
-
- $endpoint_path_versions = $this->get_endpoint_path_versions();
- $last_path_segment = $this->get_last_segment_of_relative_path( $path );
- $max_version_found = null;
-
- foreach ( $endpoint_path_versions as $endpoint_last_path_segment => $endpoints ) {
-
- // Does the last part of the path match the path key? (e.g. 'posts')
- // If the last part contains a placeholder (e.g. %s), we want to carry on
- if ( $last_path_segment != $endpoint_last_path_segment && ! strstr( $endpoint_last_path_segment, '%' ) ) {
- continue;
- }
-
- foreach ( $endpoints as $endpoint ) {
- // Does the request method match?
- if ( ! in_array( $request_method, $endpoint['request_methods'] ) ) {
- continue;
- }
-
- $endpoint_path = untrailingslashit( $endpoint['path'] );
- $endpoint_path_regex = str_replace( array( '%s', '%d' ), array( '([^/?&]+)', '(\d+)' ), $endpoint_path );
-
- if ( ! preg_match( "#^$endpoint_path_regex\$#", $path ) ) {
- continue;
- }
-
- // Make sure the endpoint exists at the same version
- if ( version_compare( $this->api->version, $endpoint['min_version'], '>=') &&
- version_compare( $this->api->version, $endpoint['max_version'], '<=') ) {
- array_push( $matches, (object) array( 'version' => $this->api->version, 'regex' => $endpoint_path_regex ) );
- return $this->api->version;
- }
-
- // If the endpoint doesn't exist at the same version, record the max version we found
- if ( empty( $max_version_found ) || version_compare( $max_version_found['version'], $endpoint['max_version'], '<' ) ) {
- $max_version_found = array( 'version' => $endpoint['max_version'], 'regex' => $endpoint_path_regex );
- }
- }
- }
-
- // If the endpoint version is less than the requested endpoint version, return the max version found
- if ( ! empty( $max_version_found ) ) {
- array_push( $matches, (object) $max_version_found );
- return $max_version_found['version'];
- }
-
- // Otherwise, use the API version of the current request
- return $this->api->version;
- }
-
- /**
- * Get an array of endpoint paths with their associated versions
- *
- * The result is cached for 30 minutes.
- *
- * @return array Array of endpoint paths, min_versions and max_versions, keyed by last segment of path
- **/
- protected function get_endpoint_path_versions() {
-
- static $cache_result;
-
- if ( ! empty ( $cache_result ) ) {
- return $cache_result;
- }
-
- /*
- * Create a map of endpoints and their min/max versions keyed by the last segment of the path (e.g. 'posts')
- * This reduces the search space when finding endpoint matches in get_closest_version_of_endpoint()
- */
- $endpoint_path_versions = array();
-
- foreach ( $this->api->endpoints as $key => $endpoint_objects ) {
-
- // The key contains a serialized path, min_version and max_version
- list( $path, $min_version, $max_version ) = unserialize( $key );
-
- // Grab the last component of the relative path to use as the top-level key
- $last_path_segment = $this->get_last_segment_of_relative_path( $path );
-
- $endpoint_path_versions[ $last_path_segment ][] = array(
- 'path' => $path,
- 'min_version' => $min_version,
- 'max_version' => $max_version,
- 'request_methods' => array_keys( $endpoint_objects )
- );
- }
-
- $cache_result = $endpoint_path_versions;
-
- return $endpoint_path_versions;
- }
-
- /**
- * Grab the last segment of a relative path
- *
- * @param string $path Path
- * @return string Last path segment
- */
- protected function get_last_segment_of_relative_path( $path) {
- $path_parts = array_filter( explode( '/', $path ) );
-
- if ( empty( $path_parts ) ) {
- return null;
- }
-
- return end( $path_parts );
- }
-
- /**
- * Generate a URL to an endpoint
- *
- * Used to construct meta links in API responses
- *
- * @param mixed $args Optional arguments to be appended to URL
- * @return string Endpoint URL
- **/
- function get_link() {
- $args = func_get_args();
- $format = array_shift( $args );
- $base = WPCOM_JSON_API__BASE;
-
- $path = array_pop( $args );
-
- if ( $path ) {
- $path = '/' . ltrim( $path, '/' );
- }
-
- $args[] = $path;
-
- // Escape any % in args before using sprintf
- $escaped_args = array();
- foreach ( $args as $arg_key => $arg_value ) {
- $escaped_args[ $arg_key ] = str_replace( '%', '%%', $arg_value );
- }
-
- $relative_path = vsprintf( "$format%s", $escaped_args );
-
- if ( ! wp_startswith( $relative_path, '.' ) ) {
- // Generic version. Match the requested version as best we can
- $api_version = $this->get_closest_version_of_endpoint( $relative_path );
- $base = substr( $base, 0, - 1 ) . $api_version;
- }
-
- // escape any % in the relative path before running it through sprintf again
- $relative_path = str_replace( '%', '%%', $relative_path );
- // http, WPCOM_JSON_API__BASE, ... , path
- // %s , %s , $format, %s
- return esc_url_raw( sprintf( "%s://%s$relative_path", $this->api->public_api_scheme, $base ) );
- }
-
- function get_me_link( $path = '' ) {
- return $this->get_link( '/me', $path );
- }
-
- function get_taxonomy_link( $blog_id, $taxonomy_id, $taxonomy_type, $path = '' ) {
- if ( 'category' === $taxonomy_type )
- return $this->get_link( '/sites/%d/categories/slug:%s', $blog_id, $taxonomy_id, $path );
- else
- return $this->get_link( '/sites/%d/tags/slug:%s', $blog_id, $taxonomy_id, $path );
- }
-
- function get_media_link( $blog_id, $media_id, $path = '' ) {
- return $this->get_link( '/sites/%d/media/%d', $blog_id, $media_id, $path );
- }
-
- function get_site_link( $blog_id, $path = '' ) {
- return $this->get_link( '/sites/%d', $blog_id, $path );
- }
-
- function get_post_link( $blog_id, $post_id, $path = '' ) {
- return $this->get_link( '/sites/%d/posts/%d', $blog_id, $post_id, $path );
- }
-
- function get_comment_link( $blog_id, $comment_id, $path = '' ) {
- return $this->get_link( '/sites/%d/comments/%d', $blog_id, $comment_id, $path );
- }
-
- function get_publicize_connection_link( $blog_id, $publicize_connection_id, $path = '' ) {
- return $this->get_link( '.1/sites/%d/publicize-connections/%d', $blog_id, $publicize_connection_id, $path );
- }
-
- function get_publicize_connections_link( $keyring_token_id, $path = '' ) {
- return $this->get_link( '.1/me/publicize-connections/?keyring_connection_ID=%d', $keyring_token_id, $path );
- }
-
- function get_keyring_connection_link( $keyring_token_id, $path = '' ) {
- return $this->get_link( '.1/me/keyring-connections/%d', $keyring_token_id, $path );
- }
-
- function get_external_service_link( $external_service, $path = '' ) {
- return $this->get_link( '.1/meta/external-services/%s', $external_service, $path );
- }
-
-
- /**
* Check whether a user can view or edit a post type
* @param string $post_type post type to check
* @param string $context 'display' or 'edit'
@@ -1949,7 +1700,7 @@ abstract class WPCOM_JSON_API_Endpoint {
}
- function handle_media_sideload( $url, $parent_post_id = 0 ) {
+ function handle_media_sideload( $url, $parent_post_id = 0, $type = 'any' ) {
if ( ! function_exists( 'download_url' ) || ! function_exists( 'media_handle_sideload' ) )
return false;
@@ -1965,8 +1716,8 @@ abstract class WPCOM_JSON_API_Endpoint {
// First check to see if we get a mime-type match by file, otherwise, check to
// see if WordPress supports this file as an image. If neither, then it is not supported.
- if ( ! $this->is_file_supported_for_sideloading( $tmp ) && ! file_is_displayable_image( $tmp ) ) {
- unlink( $tmp );
+ if ( ! $this->is_file_supported_for_sideloading( $tmp ) && 'image' === $type && ! file_is_displayable_image( $tmp ) ) {
+ @unlink( $tmp );
return false;
}
@@ -2128,6 +1879,10 @@ abstract class WPCOM_JSON_API_Endpoint {
return 'GET' == $this->method || ( $this->allow_unauthorized_request && in_array( $origin, $complete_access_origins ) );
}
+ function get_platform() {
+ return wpcom_get_sal_platform( $this->api->token_details );
+ }
+
/**
* Return endpoint response
*
diff --git a/plugins/jetpack/class.photon.php b/plugins/jetpack/class.photon.php
index 6e0f2ef7..6bfca649 100644
--- a/plugins/jetpack/class.photon.php
+++ b/plugins/jetpack/class.photon.php
@@ -733,12 +733,16 @@ class Jetpack_Photon {
* Filters an array of image `sizes` values, using $content_width instead of image's full size.
*
* @since 4.0.4
+ * @since 4.1.0 Returns early for images not within the_content.
* @param array $sizes An array of media query breakpoints.
* @param array $size Width and height of the image
* @uses Jetpack::get_content_width
* @return array An array of media query breakpoints.
*/
public function filter_sizes( $sizes, $size ) {
+ if ( ! doing_filter( 'the_content' ) ){
+ return $sizes;
+ }
$content_width = Jetpack::get_content_width();
if ( ! $content_width ) {
$content_width = 1000;
diff --git a/plugins/jetpack/css/dashboard-widget.css.map b/plugins/jetpack/css/dashboard-widget.css.map
index 0aa5b78b..0699b906 100644
--- a/plugins/jetpack/css/dashboard-widget.css.map
+++ b/plugins/jetpack/css/dashboard-widget.css.map
@@ -1 +1 @@
-{"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;ECZE,WAAA;EACC,YAAS;EDcX;AACD;EAAA,WAAA;EACE,YAAU;EACV,oBAAW;EAEZ","file":"dashboard-widget.css"} \ No newline at end of file
+{"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;EAIC","file":"dashboard-widget.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin-rtl.css b/plugins/jetpack/css/jetpack-admin-rtl.css
index 24fcfa52..dc676b3f 100644
--- a/plugins/jetpack/css/jetpack-admin-rtl.css
+++ b/plugins/jetpack/css/jetpack-admin-rtl.css
@@ -3474,6 +3474,12 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
-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;
}
@@ -3669,9 +3675,6 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
position: relative;
top: -1px;
}
- .nux-intro .wpcom .goto .feat a {
- float: right;
- }
.nux-foot .j-col {
border: none;
@@ -3769,6 +3772,6 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
@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.error{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-btn{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-width: 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-details .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-details 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;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}}
.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-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}}
@media (min-width: 900px){.j-security .first-header{padding-bottom:225px}}
-.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-overflow: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-connect .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-block}#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;-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: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-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-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:#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%;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-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: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}
+.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-overflow: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-connect .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-block}#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;-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: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-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-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-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:#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%;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{padding: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}
/*# sourceMappingURL=jetpack-admin.min.css.map */ \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin-rtl.min.css b/plugins/jetpack/css/jetpack-admin-rtl.min.css
index a211cd78..150698d4 100644
--- a/plugins/jetpack/css/jetpack-admin-rtl.min.css
+++ b/plugins/jetpack/css/jetpack-admin-rtl.min.css
@@ -32,6 +32,6 @@
@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.error{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-btn{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-width: 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-details .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-details 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;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}}
.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-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}}
@media (min-width: 900px){.j-security .first-header{padding-bottom:225px}}
-.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-overflow: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-connect .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-block}#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;-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: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-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-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:#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%;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-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: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}
+.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-overflow: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-connect .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-block}#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;-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: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-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-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-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:#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%;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{padding: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}
/*# sourceMappingURL=jetpack-admin.min.css.map */ \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin.css b/plugins/jetpack/css/jetpack-admin.css
index 7ea8e636..6c3577c7 100644
--- a/plugins/jetpack/css/jetpack-admin.css
+++ b/plugins/jetpack/css/jetpack-admin.css
@@ -3474,6 +3474,12 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
-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;
}
@@ -3669,9 +3675,6 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
position: relative;
top: -1px;
}
- .nux-intro .wpcom .goto .feat a {
- float: left;
- }
.nux-foot .j-col {
border: none;
diff --git a/plugins/jetpack/css/jetpack-admin.css.map b/plugins/jetpack/css/jetpack-admin.css.map
index ca5822bf..0bfa8cc7 100644
--- a/plugins/jetpack/css/jetpack-admin.css.map
+++ b/plugins/jetpack/css/jetpack-admin.css.map
@@ -1 +1 @@
-{"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"} \ No newline at end of file
+{"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"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin.min.css b/plugins/jetpack/css/jetpack-admin.min.css
index a1423135..f6c28748 100644
--- a/plugins/jetpack/css/jetpack-admin.min.css
+++ b/plugins/jetpack/css/jetpack-admin.min.css
@@ -32,6 +32,6 @@
@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{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{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: 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 .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-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-details 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;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}}
.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-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}}
@media (min-width: 900px){.j-security .first-header{padding-bottom:225px}}
-.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: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-connect .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-block}#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.10em;-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:11px;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-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-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: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:#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%;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-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}.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}
+.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: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-connect .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-block}#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.10em;-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:11px;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-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 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: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:#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%;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: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}
/*# sourceMappingURL=jetpack-admin.min.css.map */ \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin.min.css.map b/plugins/jetpack/css/jetpack-admin.min.css.map
index 64fcfd8d..8d83afd9 100644
--- a/plugins/jetpack/css/jetpack-admin.min.css.map
+++ b/plugins/jetpack/css/jetpack-admin.min.css.map
@@ -1 +1 @@
-{"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":"AAKA,OACC,WACA,CAAA,aACA,CAAA,0BAEC,YACA,CAAA,aAGD,CAAA,YACC,WAIF,CAAA,MACC,eACA,CAAA,UACA,CAAA,UACA,CAAA,iBAID,CAAA,kBACC,QAAU,eACV,CAAA,OAAU,gBACV,CAAA,OAAU,UACV,CAAA,OAAU,gBACV,CAAA,OAAU,gBACV,CAAA,OAAU,UACV,CAAA,OAAU,gBACV,CAAA,OAAU,gBACV,CAAA,OAAU,UACV,CAAA,QAAU,gBACV,CAAA,QAAU,gBACV,CAAA,QAAU,WAAW,CAAA,ACCnB,CAAA,yBDKF,QAAU,eACV,CAAA,OAAU,gBACV,CAAA,OAAU,UACV,CAAA,OAAU,gBACV,CAAA,OAAU,gBACV,CAAA,OAAU,UACV,CAAA,OAAU,gBACV,CAAA,OAAU,gBACV,CAAA,OAAU,UACV,CAAA,QAAU,gBACV,CAAA,QAAU,gBACV,CAAA,QAAU,WAAW,CAAA,AChBnB,CAAA,yBDsBF,SAAU,eACV,CAAA,QAAU,gBACV,CAAA,QAAU,UACV,CAAA,QAAU,gBACV,CAAA,QAAU,gBACV,CAAA,QAAU,UACV,CAAA,QAAU,gBACV,CAAA,QAAU,gBACV,CAAA,QAAU,UACV,CAAA,SAAW,gBACX,CAAA,SAAW,gBACX,CAAA,SAAW,WAAW,CAAA,AEjEvB,CAAA,iCAKC,WACA,CAAA,kDACA,CAAA,cACA,CAAA,eACA,CAAA,kCAQD,CAAA,iBAMC,WACA,CAAA,UAQD,CAAA,CACC,cACA,CAAA,oBACA,CAAA,oBAEA,CAAA,SACC,cAED,CAAA,OACC,cAED,CAAA,OACC,oBASF,CAAA,OACC,iBAOD,CAAA,mBAEC,YAGD,CAAA,GACC,gBACA,CAAA,oBAOD,CAAA,EACC,gBAQD,CAAA,QACC,SACA,CAAA,QACA,CAAA,SAID,CAAA,QACC,gBAID,CAAA,EACC,cACA,CAAA,UACA,CAAA,QACA,CAAA,yBACA,CAAA,YACA,CAAA,SCzGD,CAAA,GACC,sBCDD,CAAA,yBACC,GACC,6BAAA,CAED,oBAAA,CAAA,GACC,8BAAA,CAED,qBAAA,CAAA,IACC,2BAAA,CAAmB,kBAAA,CARrB,AAQqB,CAIrB,iBAXC,GACC,6BAAA,CAED,oBAAA,CAAA,GACC,8BAAA,CAED,qBAAA,CAAA,IACC,2BAAA,CAAmB,kBAAA,CAAA,AAIrB,CAAA,0BACC,GACC,2BAAA,CAED,kBAAA,CAAA,GACC,8BAAA,CAED,qBAAA,CAAA,GACC,8BAAA,CAED,qBAAA,CAAA,IACC,2BAAA,CAAmB,kBAAA,CAXrB,AAWqB,CAIrB,kBAdC,GACC,2BAAA,CAED,kBAAA,CAAA,GACC,8BAAA,CAED,qBAAA,CAAA,GACC,8BAAA,CAED,qBAAA,CAAA,IACC,2BAAA,CAAmB,kBAAA,CAAA,AAIrB,CAAA,0BACE,GACA,6CAAA,CAED,oCAAA,CAAA,IACC,kDAAA,CAA0C,yCAAA,CAL5C,AAK4C,CCjC5C,kBD6BE,GACA,6CAAA,CAED,oCAAA,CAAA,IACC,kDAAA,CAA0C,yCAAA,CAAA,ACjC5C,CAAA,yBAEC,+BAED,CAAA,+BACC,qBACA,CAAA,iBACA,CAAA,2BACA,CAAA,aACA,CAAA,4DACA,CAAA,qCACA,CAAA,kBACA,CAAA,iBAEA,CAAA,+CACC,cAED,CAAA,uFAEC,WACA,CAAA,kBAED,CAAA,6CACC,mBACA,CAAA,WAGF,CAAA,oBAEC,mBACA,CAAA,aAEA,CAAA,4BACC,cAED,CAAA,qDAEC,mBACA,CAAA,UAED,CAAA,4BACC,mBACA,CAAA,UACA,CAAA,yDAKF,CAAA,iBACC,qBACA,CAAA,iBACA,CAAA,qCACA,CAAA,UACA,CAAA,kEACA,CAAA,kBACA,CAAA,SACA,CAAA,iBACA,CAAA,oDAIA,CAAA,yBACC,WAED,CAAA,+CAEC,WACA,CAAA,kBACA,CAAA,oDAID,CAAA,wBACC,QACA,CAAA,gDAIA,CAAA,8BAEC,SAGF,CAAA,wBACC,WACA,CAAA,oBACA,CAAA,iBACA,CAAA,QACA,CAAA,iBACA,CAAA,UACA,CAAA,WACA,CAAA,qBACA,CAAA,oEACA,CAAA,oBAED,CAAA,uBAEC,WACA,CAAA,iBACA,CAAA,KACA,CAAA,MACA,CAAA,UACA,CAAA,WJ7EC,CAAA,0BIuBH,kBAyDE,oBAEA,CAAA,wBACC,SACA,CAAA,UACA,CAAA,WAAY,CJrFZ,AIqFY,CJrFZ,yBIyFD,yBACC,MAAM,CJ1FN,AI0FM,CJ1FN,yBIuBH,kBAuEE,oBACA,CAAA,eAEA,CAAA,wBACC,WACA,CAAA,WACA,CAAA,gBAAiB,CAAA,CAAA;AAIpB,cACC,qBACA,CAAA,WACA,CAAA,iBACA,CAAA,uBACA,CAAA,aACA,CAAA,mDACA,CAAA,qCACA,CAAA,kBACA,CAAA,YACA,CAAA,iBAEA,CAAA,qBACC,cAED,CAAA,uCAEC,WACA,CAAA,kBAED,CAAA,oBACC,YCjJF,CAAA,UACC,4BACA,CAAA,wDACA,CAAA,gUAIA,CAAA,kBACA,CAAA,iBCbD,CAAA,UACC,sBACA,CAAA,4CACA,CAAA,mQAIA,CAAA,kBACA,CAAA,iBAGD,CAAA,qDACC,WACC,sBACA,CAAA,kEAAmE,CAAA,ACXpE,CAAA,iBACC,qBAED,CAAA,kBACC,kBACA,CAAA,UAED,CAAA,kBACC,SACA,CAAA,SCdF,CAAA,kBAGC,2BAAA,CAID,qBAAA,CAAA,gBACC,mBACA,CAAA,UACA,CAAA,gBAHD,AASA,CAAA,WARC,mBACA,CAAA,UACA,CAAA,gBAMD,CAAA,eACC,iBAED,CAAA,UACC,kBACA,CAAA,SAGD,CAAA,0CACC,2BAGD,CAAA,kBACC,iBAGD,CAAA,WACC,mBACA,CAAA,QACA,CAAA,WACA,CAAA,eACA,CAAA,UACA,CAAA,UACA,CAAA,kCAEA,CAAA,oBACC,mBRfC,CAAA,yBQmBH,yFAME,iBACA,CAAA,cAAe,CR1Bd,AQ0Bc,CR1Bd,yBQmBH,yFAUE,cAAc,CAAA,CAAA;AR7Bb,0BQiCH,4BAEE,eAAe,CAAA,CAAA;AAUjB,0BAEC,gBACA,CAAA,aAEA,CAAA,+BACC,iBRnDC,CAAA,yBQuDH,cAEE,aAAa,CAAA,CAAA;ARzDZ,2BQ6DH,YAEE,mBACA,CAAA,YAAa,CRhEZ,AQgEY,CRhEZ,yBQ6DH,YAME,qBAAoB,CAAA,CAAA;AAKrB,0CAEC,SAED,CAAA,2CACC,iBACA,CAAA,gBACA,CAAA,QAIF,CAAA,mBACC,kBACA,CAAA,URrFE,CAAA,0BQmFH,oBAKE,mBACA,CAAA,YAAa,CAAA,CAAA;ARzFZ,2BQ6FH,wBAEE,mBC9Gc,CAAA,CAAA;ADkHhB,YACC,gBACA,CAAA,aAQD,CAAA,OACC,OACA,CAAA,OACA,CAAA,kBAGA,CAAA,cACC,iBAGD,CAAA,aACC,oBACA,CAAA,gBAGA,CAAA,2BACC,qBACA,CAAA,iBACA,CAAA,WACA,CAAA,gBACA,CAAA,kEACA,CAAA,uEACA,CAAA,0BACA,CAAA,UACA,CAAA,gBACA,CAAA,kBAEA,CAAA,gCACC,oBACA,CAAA,iBAID,CAAA,kCACC,WACA,CAAA,iBACA,CAAA,KACA,CAAA,MACA,CAAA,UACA,CAAA,WAEA,CAAA,0BAIH,CAAA,6CACC,iBAIF,CAAA,SACC,WAEA,CAAA,YACC,SRnKC,CAAA,yBQ+JH,UAOE,eAAe,CAAA,CAAA;AAIjB,UACC,YAEA,CAAA,YACC,SAMD,CAAA,gCACC,SAED,CAAA,0DACC,UAED,CAAA,4FACC,YAED,CAAA,+BACC,aAQF,CAAA,SAKC,kBACA,CAAA,iBACA,CAAA,SACA,CAAA,wBACA,CAAA,uDAGC,CAAA,0BACC,cAED,CAAA,4BACC,iBRtNA,CAAA,yBQqND,6BAIE,iBACA,CAAA,SAAU,CAAA,AAIb,CAAA,yBAEC,cAED,CAAA,YACC,0BACA,CAAA,oBACA,CAAA,UACA,CAAA,8EACA,CAAA,iBACA,CAAA,sCACA,CAAA,SAEA,CAAA,mBACC,iBR5OA,CAAA,0BQkOF,aAaE,sBACA,CAAA,mBAAmB,CRhPnB,AQgPmB,CRhPnB,yBQkOF,aAiBE,gBACA,CAAA,cAAe,CRpPf,AQoPe,CRpPf,yBQkOF,aAqBE,cACA,CAAA,qBACA,CAAA,cACA,CAAA,eAAgB,CAAA,CAAA;AAInB,gCACC,mBACA,CAAA,eAGD,CAAA,MACC,kBACA,CAAA,aACA,CAAA,OACA,CAAA,SACA,CAAA,2CAAA,CAEA,mCAAA,CAAA,mBACC,SACA,CAAA,WACA,CAAA,YACA,CAAA,4BAAA,CACA,oBAAA,CAAA,+BAAA,CAED,uBAAA,CAAA,mBACC,SACA,CAAA,UACA,CAAA,WACA,CAAA,4BAAA,CACA,oBAAA,CAAA,+BAAA,CAGF,uBAAA,CAAA,QACC,kBACA,CAAA,gBACA,CAAA,aACA,CAAA,kBACA,CAAA,SAEA,CAAA,WACC,gBACA,CAAA,aACA,CAAA,8EACA,CAAA,0BRpSC,CAAA,yBQgSF,YAOE,gBACA,CAAA,cAAe,CRxSf,AQwSe,CRxSf,yBQgSF,YAWE,aAAa,CAAA,AAGf,CAAA,cACC,WACA,CAAA,iBACA,CAAA,WACA,CAAA,MACA,CAAA,kBACA,CAAA,UACA,CAAA,YACA,CAAA,gEACA,CAAA,mBACA,CAAA,URxTC,CAAA,0BQyRH,SAkCE,iBACA,CAAA,mBAEA,CAAA,cACC,0BAA0B,CR/T1B,AQ+T0B,CR/T1B,yBQyRH,SA0CE,iBACA,CAAA,mBAAoB,CRpUnB,AQoUmB,CRpUnB,yBQyRH,SA8CE,gBACA,CAAA,sBAAuB,CAAA,CAAA;AAGzB,WAIC,aACA,CAAA,iBACA,CAAA,iBACA,CAAA,SACA,CAAA,wBAMA,CALA,uDAOA,CAAA,gBACC,WACA,CAAA,iBACA,CAAA,QACA,CAAA,MACA,CAAA,kBACA,CAAA,UACA,CAAA,YACA,CAAA,mEACA,CAAA,mBACA,CAAA,SRrWC,CAAA,yBQ2UH,WA6BE,YAAY,CAAA,CAAA;AAQd,UACC,6BACA,CAAA,+BACA,CAAA,eACA,CAAA,iBACA,CAAA,2BACA,CAAA,iBACA,CAAA,SAGA,CAAA,gBACC,WACA,CAAA,aACA,CAAA,iBACA,CAAA,KACA,CAAA,WACA,CAAA,UAED,CAAA,sCACC,cACA,CAAA,oBRpYC,CAAA,yBQgXH,UAuBE,aAAa,CAAA,CAAA;AAGf,6BAEC,eACA,CAAA,aACA,CAAA,sEACA,CAAA,iBR/YE,CAAA,yBQ0YH,6BASE,eAAe,CRnZd,AQmZc,CRnZd,yBQ0YH,6BAYE,eAAe,CAAA,CAAA;AAGjB,mBACC,cAGD,CAAA,gBAEC,kBACA,CAAA,UACA,CAAA,iBACA,CAAA,WACA,CAAA,8BRnaE,CAAA,0BQ6ZH,iBASE,wBACA,CAAA,gBACA,CAAA,eAEA,CAAA,gDACC,cAED,CAAA,4BACC,MACA,CAAA,eAAgB,CAAA,CAAA;AAInB,SACC,gCAAA,CAEA,uBAAA,CAAA,WACC,qBACA,CAAA,aACA,CAAA,mBACA,CAAA,eACA,CAAA,eAED,CAAA,UACC,SACA,CAAA,aAED,CAAA,eACC,WACA,CAAA,iBACA,CAAA,QACA,CAAA,MACA,CAAA,UACA,CAAA,WACA,CAAA,2BACA,CAAA,UACA,CAAA,+BAAA,CACA,uBAAA,CAAA,8BAGD,CAAA,cACC,mCAAA,CAEA,8BAFA,CAEA,0BAAA,CAAA,iBACC,cAED,CAAA,2BACC,sBACA,CAAA,kBAED,CAAA,yBACC,YAED,CAAA,qBACC,kCAAA,CR5dA,6BQ4dA,CR5dA,yBAAA,CAAA,0BQ+dA,kBACC,cAED,CAAA,2BACC,sBACA,CAAA,kBAED,CAAA,yBACC,YAAY,CAAA,AAKf,CAAA,qBACC,gBACA,CAAA,UACA,CAAA,WACA,CAAA,qBACA,CAAA,kBAEA,CAAA,gCACC,qDACA,CAAA,yBAEA,CAAA,uJAJD,iCASE,oDAAoD,CAAA,AAGtD,CAAA,uCACC,4DACA,CAAA,yBAEA,CAAA,uJAJD,wCASE,2DAA2D,CAAA,AAG7D,CAAA,qCACC,0DACA,CAAA,yBAEA,CAAA,uJAJD,sCASE,yDAAyD,CAAA,AAG3D,CAAA,+BAGC,YACA,CAAA,kBAIH,CAAA,oBACC,cACA,CAAA,+BACA,CAAA,qBACA,CAAA,kBAEA,CAAA,mCACC,gBACA,CAAA,iBRviBC,CAAA,0BQqiBF,oCAKE,sBACA,CAAA,kBAAmB,CR3iBnB,AQ2iBmB,CR3iBnB,yBQ+hBH,qBAgBE,iBAAiB,CAAA,CAAA;AAQnB,KACC,WACA,CAAA,kBAEA,CAAA,OACC,eACA,CAAA,eACA,CAAA,mBACA,CAAA,eAED,CAAA,WACC,WAGF,CAAA,YACC,kBAEA,CAAA,eAEC,aR1kBC,CAAA,yBQwkBF,gBAKE,iBACA,CAAA,YACA,CAAA,cAAe,CAAA,CAAA;AAIlB,eACC,kBACA,CAAA,UACA,CAAA,oBACA,CAAA,uBACA,CAAA,eAED,CAAA,eACC,SACA,CAAA,2BACA,CAAA,UACA,CAAA,wBACA,CAAA,iBACA,CAAA,eACA,CAAA,aACA,CAAA,eAEA,CAAA,qBACC,cACA,CAAA,YAEA,CAAA,2BACC,uBACA,CAAA,SAGF,CAAA,0CACC,cAED,CAAA,iCACC,cAED,CAAA,iCACC,cAED,CAAA,qCACC,cAED,CAAA,qBACC,kBACA,CAAA,OACA,CAAA,SACA,CAAA,UACA,CAAA,UACA,CAAA,aACA,CAAA,mBACA,CAAA,mBACA,CAAA,iBACA,CAAA,8BAEA,CAAA,2BACC,gBACA,CAAA,iBACA,CAAA,UACA,CAAA,gBACA,CAAA,OACA,CAAA,mBACA,CAAA,kBACA,CAAA,wBAIH,CAAA,UACC,wBACA,CAAA,aAEA,CAAA,YACC,qBACA,CAAA,iBACA,CAAA,2BACA,CAAA,UACA,CAAA,8DACA,CAAA,2CACA,CAAA,eAEA,CADA,iBAIA,CAFA,2BAIA,CAAA,2DAGC,cACA,CAAA,qCACA,CAAA,kBRxqBA,CAAA,yBQqpBF,aAsBE,mBAAmB,CAAA,CAAA;AAQtB,QACC,cACA,CAAA,+BACA,CAAA,eACA,CAAA,wBACA,CAAA,eACA,CAAA,iCACA,CAAA,6BAEA,CAAA,aACC,qBACA,CAAA,kBAED,CAAA,UACC,eACA,CAAA,gBACA,CAAA,aACA,CAAA,mBACA,CAAA,iBACA,CAAA,eAED,CAAA,SACC,SACA,CAAA,aACA,CAAA,mBAED,CAAA,2BACC,qBACA,CAAA,kBAGD,CAAA,cACC,qBACA,CAAA,gCAEA,CAAA,oBACC,qBACA,CAAA,gCAIF,CAAA,uCAEC,gBR9tBC,CAAA,yBQkuBD,qCACC,cACA,CAAA,UACA,CAAA,iBAED,CAAA,uCAEC,UAED,CAAA,uBAEC,mBACA,CAAA,gBACA,CAAA,WACA,CAAA,cAAe,CAAA,AAIjB,CAAA,oCACC,wCAEC,wBAEA,CAAA,6DACC,WAAW,CR1vBZ,AQ0vBY,CR1vBZ,0BQiwBA,6BACC,wBAED,CAAA,8BACC,cAAc,CRrwBf,AQqwBe,CRrwBf,yBQ+vBF,aAUE,kBAEA,CAAA,4BACC,kBAED,CAAA,4BACC,cAAc,CR/wBf,AQ+wBe,CR/wBf,yBQ+vBF,aAoBE,aAEA,CAAA,4BACC,cAED,CAAA,4BACC,cAAc,CRzxBf,AQyxBe,CRzxBf,yBQmrBH,QA2GE,kBACA,CAAA,SAEA,CAAA,uBACC,eAED,CAAA,uBACC,cAAc,CRryBd,AQqyBc,CRryBd,yBQmrBH,QAsHE,aACA,CAAA,UAEA,CAAA,uBACC,cAED,CAAA,uBACC,cAAc,CAAA,CAAA;AAIjB,KAGC,kBAEA,CAAA,UACC,cACA,CAAA,iBACA,CAAA,QACA,CAAA,UACA,CAAA,gBACA,CAAA,UACA,CAAA,WACA,CAAA,UACA,CAAA,aACA,CAAA,eACA,CAAA,iBACA,CAAA,oCACA,CAAA,iEACA,CAAA,oBACA,CAAA,iBAGF,CAAA,KACC,qBACA,CAAA,iBACA,CAAA,OACA,CAAA,gBACA,CAAA,qBACA,CAAA,WACA,CAAA,UACA,CAAA,sDACA,CAAA,qCACA,CAAA,kBACA,CAAA,kBAEA,CAAA,wBAEC,kBACA,CAAA,KACA,CAAA,UACA,CAAA,kCAED,CAAA,YACC,gBACA,CAAA,aACA,CAAA,gBAED,CAAA,WACC,gBACA,CAAA,iBACA,CAAA,cAGF,CAAA,iBACC,gBAED,CAAA,UAGC,6BAID,CAAA,IACC,aAED,CAAA,SACC,cAOD,CAAA,QACC,WACA,CAAA,iBACA,CAAA,OACA,CAAA,UAEA,CAAA,aACC,WAGF,CAAA,MACC,gBACA,CAAA,cACA,CAAA,QACA,CAAA,WACA,CAAA,UACA,CAAA,SACA,CAAA,iBACA,CAAA,YACA,CAAA,yCACA,CAAA,WAEA,CAAA,aACC,kBACA,CAAA,KACA,CAAA,OACA,CAAA,0CACA,CAAA,UACA,CAAA,eACA,CAAA,oBACA,CAAA,qCACA,CAAA,SAEA,CAAA,mBACC,gBACA,CAAA,WAED,CAAA,oBACC,gBACA,CAAA,WAGF,CAAA,qBACC,aAED,CAAA,yBACC,kBACA,CAAA,KACA,CAAA,OACA,CAAA,QACA,CAAA,MACA,CAAA,aACA,CAAA,iBAED,CAAA,eACC,cACA,CAAA,eACA,CAAA,eAED,CAAA,SACC,gBACA,CAAA,YACA,CAAA,aACA,CAAA,mEACA,CAAA,0BR/7BC,CAAA,yBQ07BF,UAQE,eAAe,CAAA,AAGjB,CAAA,SACC,WAED,CAAA,QACC,oBAED,CAAA,aACC,kBACA,CAAA,MACA,CAAA,QACA,CAAA,UACA,CAAA,iBACA,CAAA,yBACA,CAAA,eACA,CAAA,gBAEA,CAAA,gBACC,SAED,CAAA,gBACC,qBACA,CAAA,QAGF,CAAA,sDAGC,wBRh+BC,CAAA,yBQy4BH,OA0FE,UACA,CAAA,gBACA,CAAA,aAEA,CAAA,eACC,SAAS,CRx+BT,AQw+BS,CRx+BT,yBQy4BH,OAmGE,SACA,CAAA,aAAc,CR7+Bb,AQ6+Ba,CR7+Bb,yBQy4BH,OAuGE,SACA,CAAA,UACA,CAAA,WACA,CAAA,SAAU,CAAA,CAAA;AAGZ,aACC,YACA,CAAA,oBAEA,CAAA,gBACC,sBACA,CAAA,cACA,CAAA,WAEA,CAAA,4BACC,aRhgCA,CAAA,yBQs/BH,aAcE,WACA,CAAA,eAAgB,CAAA,CAAA;AAGlB,gCACC,YAED,CAAA,MACC,gBACA,CAAA,QACA,CAAA,cACA,CAAA,YACA,CAAA,MACA,CAAA,WACA,CAAA,cACA,CAAA,OACA,CAAA,KACA,CAAA,UAOD,CAAA,sCAEC,qBACA,CAAA,aACA,CAAA,8EACA,CAAA,0BRjiCE,CAAA,yBQ4hCH,uCAQE,cAAc,CAAA,CAAA;AAIhB,8CAGC,qBACA,CAAA,aACA,CAAA,oEACA,CAAA,0BR9iCE,CAAA,yBQwiCH,8CASE,gBAAgB,CAAA,CAAA;AAIlB,yBACC,sBAGD,CAAA,mGAIC,WACA,CAAA,SAQD,CAAA,OACC,qBACA,CAAA,iBACA,CAAA,wBACA,CAAA,iBAEA,CAAA,4BAEC,WACA,CAAA,iBACA,CAAA,MACA,CAAA,mBAED,CAAA,cACC,MACA,CAAA,eACA,CAAA,UACA,CAAA,YAED,CAAA,aACC,aAED,CAAA,yBACC,mBRllCC,CAAA,0BQ2jCH,QA0BG,oBAAoB,CRhmCpB,AQgmCoB,CRhmCpB,0BQskCH,QA6BE,kBACA,CAAA,gBAEA,CAAA,cACC,0BAKD,CAAA,UACC,WACA,CAAA,eAAgB,CR9mChB,AQ8mCgB,CR9mChB,yBQskCH,QA4CE,kBAAkB,CRlnCjB,AQknCiB,CRlnCjB,yBQskCH,QA+CE,aAAa,CRrnCZ,AQqnCY,CRrnCZ,yBQskCH,QAkDE,aACA,CAAA,iBAAkB,CRznCjB,AQynCiB,CRznCjB,yBQskCH,QAsDE,iBAAiB,CAAA,CAAA;AAGnB,YACC,eAEA,CAAA,mCAEC,gBAEA,CAAA,UAEA,CAAA,+FAEC,cR1oCA,CAAA,0BQipCA,gGAEC,cAv0BW,CR5UZ,AQ4UY,CR5UZ,yBQwpCD,eACC,cACA,CAAA,UACA,CAAA,QACA,CAAA,eAED,CAAA,aACC,cACA,CAAA,cACA,CAAA,gBAAiB,CAAA,CAAA;AAIpB,SACC,4BACA,CAAA,4BAED,CAAA,iBACC,cAEA,CAAA,oBACC,iBRlqCC,CAAA,yBQ8pCH,kBAOE,sBACA,CAAA,kBACA,CAAA,4BAA6B,CRvqC5B,AQuqC4B,CRvqC5B,0BQ8pCH,kBAYG,gBAAgB,CRrrChB,AQqrCgB,CRrrChB,yBQyqCH,kBAeE,qBACA,CAAA,kBAAmB,CRzrClB,AQyrCkB,CRzrClB,yBQyqCH,kBAmBE,SACA,CAAA,SACA,CAAA,WACA,CAAA,eAEA,CAAA,mBACC,0BAA0B,CAAA,CAAA;AAI7B,yBACC,SACA,CAAA,aACA,CAAA,UACA,CAAA,mBACA,CAAA,6EACA,CAAA,wBAEA,CAAA,0BAIC,qBACA,CAAA,iBACA,CAAA,gBACA,CAAA,YACA,CAAA,SAEA,CAAA,gCACC,YACA,CAAA,iBACA,CAAA,OACA,CAAA,aACA,CAAA,WACA,CAAA,UACA,CAAA,mBACA,CAAA,2BACA,CAAA,iBAGA,CAAA,sCACC,wCAAA,CR1tCD,+BAAA,CAAA,yBQ+tCH,WAEG,yBACA,CAAA,4BAA6B,CRluC7B,AQkuC6B,CRluC7B,0BQ+tCH,WAMG,yBACA,CAAA,kBAAmB,CAAA,CAAA;AAStB,iBACC,mBACA,CAAA,wBACA,CAAA,kBACA,CAAA,aACA,CAAA,iBACA,CAAA,SAEA,CAAA,0BACC,gBACA,CAAA,cACA,CAAA,iBACA,CAAA,eACA,CAAA,QACA,CAAA,sCACA,CAAA,cACA,CAAA,iBAGA,CAAA,mCACC,SACA,CAAA,gBACA,CAAA,sBACA,CAAA,eAEA,CAAA,uGACC,qBAGF,CAAA,4BACC,cAED,CAAA,qFACC,gBACA,CAAA,YAID,CAAA,6BACC,cAGF,CAAA,mBACC,WACA,CAAA,QAED,CAAA,kBACC,WACA,CAAA,QACA,CAAA,WAED,CAAA,0BACC,4BACA,CAAA,iBACA,CAAA,eAEA,CAAA,iCACC,WACA,CAAA,eACA,CAAA,wBACA,CAAA,cACA,CAAA,WACA,CAAA,SACA,CAAA,WACA,CAAA,iBACA,CAAA,QACA,CAAA,qBR5zCA,CAAA,yBQ6yCF,2BAkBE,aAEA,CAAA,iCACC,aAAa,CAAA,AAGf,CAAA,4BACC,WACA,CAAA,+BACC,CAAA,kCACD,gCAGF,CAAA,qFAEC,gBAIF,CAAA,kCACC,eAOD,CAAA,sFAGC,WAEA,CAAA,2GACC,qBACA,CAAA,iBACA,CAAA,OACA,CAAA,SACA,CAAA,gBACA,CAAA,WACA,CAAA,6BACA,CAAA,kBAIF,CAAA,+BACC,eAGD,CAAA,oDAEC,gBAED,CAAA,0DAEC,gBAED,CAAA,6EAEC,gBACA,CAAA,4BAED,CAAA,yEAEC,gBACA,CAAA,4BAED,CAAA,+FAEC,gBACA,CAAA,4BAED,CAAA,mEAEC,gBACA,CAAA,4BAED,CAAA,2FAEC,YACA,CAAA,2BAED,CAAA,wEAEC,gBAED,CAAA,0DAEC,gBAED,CAAA,gDAEC,gBAED,CAAA,0DAEC,gBAED,CAAA,oDAEC,gBAED,CAAA,0DAEC,gBAED,CAAA,4DAEC,gBAED,CAAA,sDAEE,gBAEF,CAAA,wDAEC,gBAED,CAAA,oDAEC,gBAED,CAAA,8DAEC,gBAED,CAAA,sDAEC,gBAED,CAAA,oEAEC,gBAED,CAAA,wDAEC,gBACA,CAAA,iBACA,CAAA,QAED,CAAA,uEAEC,gBACA,CAAA,4BAED,CAAA,oEAEC,gBAED,CAAA,8DAEC,gBAED,CAAA,8DAEC,gBAED,CAAA,8EAEC,gBAED,CAAA,8EAEC,gBAED,CAAA,oEAEC,gBAED,CAAA,oEAEC,gBAED,CAAA,yEAEC,YACA,CAAA,2BAGD,CAAA,8DAEC,gBAED,CAAA,uFAEC,gBACA,CAAA,4BAED,CAAA,oDAEC,gBAED,CAAA,8DAEC,gBAED,CAAA,6FAEC,gBACA,CAAA,4BAGD,CAAA,uEAEC,gBAGD,CAAA,mDACC,gBAGD,CAAA,yCACC,gBRlhDE,CAAA,yBQ2hDF,oGAIC,WAAW,CR/hDV,AQ+hDU,CR/hDV,yBQsiDF,WACC,aAAa,CRviDZ,AQuiDY,CRviDZ,yBQ6iDD,+CACC,WAEA,CAAA,2DACC,eACA,CAAA,UAGF,CAAA,+CACC,WAAW,CAAA,AASd,CAAA,oCAEE,sBACC,oBAEA,CAAA,wBACC,iBAED,CAAA,mCACC,WACA,CAAA,iBAED,CAAA,sCACC,SACA,CAAA,SACA,CAAA,gBACA,CAAA,aAED,CAAA,uDACC,gBAED,CAAA,mDACC,kBACA,CAAA,aACA,CAAA,UACA,CAAA,qDACC,eAAe,CRzlDjB,AQylDiB,CRzlDjB,yBUxBF,oCAEE,gBAAgB,CAAA,CAAA;AAKnB,wBACC,aAKA,CAAA,qBACC,YACA,CAAA,eACA,CAAA,qBACA,CAAA,iBACA,CAAA,QAEA,CAAA,2BACC,mBACA,CAAA,+BACA,CAAA,kBACA,CAAA,eACA,CAAA,cACA,CAAA,OACA,CAAA,QACA,CAAA,UACA,CAAA,SACA,CAAA,8BAEA,CAAA,yBAZD,4BAaE,YACA,CAAA,eACA,CAAA,qBACA,CAAA,iBACA,CAAA,QAAS,CAAA,AAEV,CAAA,yBAnBD,4BAoBE,MAAM,CAAA,AAIR,CAAA,mCACC,WAGC,CAAA,yBADD,6CAEE,cAAc,CAAA,AAEf,CAAA,yBAJD,6CAKE,eAAe,CAAA,CAAA;AAOpB,+BACC,iBAGD,CAAA,cACC,aACA,CAAA,WACA,CAAA,eACA,CAAA,yBAJD,eAKE,cAAc,CAAA,AAEf,CAAA,yBAPD,eAQE,aAAa,CAAA,CAAA;AAIf,6BACC,YACA,CAAA,iBAEA,CAAA,8BACC,gBAIF,CAAA,+BACC,YACA,CAAA,eAGC,CAAA,oDACC,cACA,CAAA,kBACA,CAAA,0DACC,cAID,CAAA,kEACC,qBAED,CAAA,8EACC,UAID,CAAA,uHAEC,mBAED,CAAA,2DACC,8BACA,CAAA,gBAGA,CAAA,uEACC,8BAIH,CAAA,6DACC,YACA,CAAA,mEACC,aAGF,CAAA,4DACC,UAGA,CAAA,iEACC,WAED,CAAA,qEACC,kBACA,CAAA,UAGF,CAAA,yGAEC,gBACA,CAAA,QAEA,CADA,yCAID,CAAA,oDACC,2BACA,CAAA,gBAEA,CAAA,gEACC,2BAED,CAAA,iEACC,YACA,CAAA,eACA,CAAA,kBAEA,CAAA,sEACC,gBACA,CAAA,wEACC,UACA,CAAA,8EACC,UAKH,CAAA,yBAfD,kEAgBE,aAAa,CVhJf,AUgJe,CVhJf,yBUgIA,kEAmBE,cACA,CAAA,iBACA,CAAA,kBAAmB,CAAA,AAMvB,CAAA,2CACC,SACA,CAAA,qBAEA,CAAA,sDACC,gBVhKA,CAAA,yBU+JD,uDAIE,eAAe,CAAA,AAIlB,CAAA,kCACC,gBAED,CAAA,yCACC,aAEA,CAAA,yBAHD,0CAIE,iBAAiB,CAAA,AAGnB,CAAA,yCACC,eAED,CAAA,8CACC,eAED,CAAA,0CACC,WACA,CAAA,YACA,CAAA,gBV1LC,CAAA,yBUuLF,2CAME,qBAAqB,CAAA,AAGvB,CAAA,oCACC,WAED,CAAA,mCACC,WAED,CAAA,yBACC,8CACC,WAAW,CAAA,CAAA;AAId,yBACC,wBACA,CAAA,WAED,CAAA,KACC,SACA,CAAA,mBACA,CAAA,eAEA,CAAA,QACC,eACA,CAAA,eAED,CAAA,kBACC,WACA,CAAA,QACA,CAAA,SACA,CAAA,SAEA,CAAA,wBACC,WAED,CAAA,qBACC,gBAGD,CAAA,yBAbD,mBAcE,WAAW,CAAA,AAGb,CAAA,mBACC,SACA,CAAA,SAGA,CAAA,WACA,CAAA,SACA,CAAA,SAEA,CAAA,qBACC,eACA,CAAA,gBACA,CAAA,UACA,CAAA,eACA,CAAA,wBACA,CAAA,kBACA,CAAA,UAED,CAAA,2BACC,iBAED,CAAA,wBACC,cAEA,CAAA,eACA,CAAA,iBACA,CAAA,iBACA,CAAA,cAED,CAAA,+BACC,mBACA,CAAA,eAED,CAAA,gCACC,WACA,CAAA,WACA,CAAA,eACA,CAAA,iBAEA,CAAA,qDACC,cACA,CAAA,SACA,CAAA,mBAEA,CAAA,yBALD,sDAME,WACA,CAAA,eAAgB,CAAA,AAGlB,CAAA,qDACC,aAID,CAAA,yCACC,aAGF,CAAA,8BACC,SACA,CAAA,SAEA,CAAA,gCACC,UACA,CAAA,mBAED,CAAA,uCACC,gBACA,CAAA,iBACA,CAAA,gBACA,CAAA,kBACA,CAAA,UAEA,CAAA,8CACC,cACA,CAAA,eAIF,CAAA,iCACC,cACA,CAAA,eAIF,CAAA,yBArFD,oBAsFE,gBACA,CAAA,QACA,CAAA,YACA,CAAA,eACA,CAAA,cACA,CAAA,OACA,CAAA,KACA,CAAA,UACA,CAAA,yCAEA,CAAA,2BACC,YAED,CAAA,gCACC,SACA,CAAA,SAAU,CAAA,CAAA;AAMd,0BAGE,kGACC,kBACA,CAAA,aAIA,CAAA,uCACC,iBAED,CAAA,4DACC,yBAED,CAAA,4CACC,gBACA,CAAA,oDACC,iBAIH,CAAA,gCACE,YAAY,CAAA,AAKhB,CAAA,yBAEC,6EACC,WACA,CAAA,iBAAkB,CAAA,AAIpB,CAAA,yBAGE,kEACC,aAGD,CAAA,4EACC,cAAc,CCvZjB,ADuZiB,CCvZjB,mBACC,eAEA,CAAA,qDACC,WACA,CAAA,YAGD,CAAA,2BACC,yBAGD,CAAA,yBACC,yBAMD,CAAA,iBACC,eAGD,CAAA,sBACC,qBACA,CAAA,eACA,CAAA,eACA,CAAA,YACA,CAAA,qBACA,CAAA,cACA,CAAA,UACA,CAAA,cAGD,CAAA,oBACC,cAGD,CAAA,uBACC,cAKF,CAAA,uBACC,gBAKA,CAAA,2BACC,WACA,CAAA,gBAIF,CAAA,oCACC,WAOA,CAAA,iCACC,WAGD,CAAA,sCACC,iBAMF,CAAA,gBACC,qBACA,CAAA,sBACA,CAAA,iBACA,CAAA,qBAEA,CAAA,uCACC,aACA,CAAA,QACA,CAAA,uBACA,CAAA,qBACA,CAAA,iBACA,CAAA,cAGD,CAAA,2BACC,iBACA,CAAA,aACA,CAAA,eACA,CAAA,qBAGD,CAAA,gCACC,iBACA,CAAA,gBAGD,CAAA,yBACC,UAGD,CAAA,yBACC,kBACA,CAAA,SACA,CAAA,0BAIF,CAAA,qBACC,UACA,CAAA,eACA,CAAA,qBAGD,CAAA,kBACC,kBACA,CAAA,QACA,CAAA,sBACA,CAAA,aACA,CAAA,eACA,CAAA,cACA,CAAA,QACA,CAAA,SACA,CAAA,cACA,CAAA,iBAEA,CAAA,wBACC,gBAIF,CAAA,YACC,WACA,CAAA,YAGD,CAAA,0CAEC,wBACC,UACA,CAAA,WACA,CAAA,YAGD,CAAA,kBACC,UACA,CAAA,UAAW,CAAA,AAKb,CAAA,0CAEC,6BACC,gBAAgB,CAAA,AAKlB,CAAA,6GAEC,UACC,UAGD,CAAA,QACC,UAAU,CAAA,AAKZ,CAAA,yCAEC,SACC,iBAGD,CAAA,gBACC,eACA,CAAA,iBAAkB,CAAA,AAKpB,CAAA,yCAEC,SACC,kBAAkB,CAAA,AAKpB,CAAA,gEAEC,6BACC,gBAAgB,CAAA,AAKlB,CAAA,yCAEC,aACC,WAGD,CAAA,QACC,0BAGD,CAAA,SACC,kBAGD,CAAA,gBACC,cACA,CAAA,iBAGD,CAAA,4BACC,WACA,CAAA,cAGD,CAAA,gCAEC,UACA,CAAA,aAGD,CAAA,iBACC,gBAAgB,CAAA,AAKlB,CAAA,yCAEC,uBACC,eACA,CAAA,aAGD,CAAA,gCAEC,WAAW,CC7Pb,AD6Pa,CC7Pb,mBACC,kBAEA,CAAA,0BACC,UACA,CAAA,iBAGD,CAAA,8BACC,YACA,CAAA,eACA,CAAA,gBAIF,CAAA,2BACC,aACA,CAAA,iBACA,CAAA,8CACC,cACA,CAAA,eAIF,CAAA,mBACC,sBAEA,CAAA,8BACC,mBAGD,CAAA,4FAGC,aAEA,CAAA,sOACC,eAIF,CAAA,8BACC,gBAGD,CAAA,sBACC,aACA,CAAA,QACA,CAAA,eACA,CAAA,4BACA,CAAA,cAKD,CAAA,YACC,kBACA,CAAA,iBAOD,CAAA,wCACC,qBACA,CAAA,UAIF,CAAA,8CAGC,UAGD,CAAA,0BACC,gBAGD,CAAA,+BACC,iBAGD,CAAA,iBACC,kBACA,CAAA,yBACC,cAIF,CAAA,iBACC,cACA,CAAA,eZpEE,CAAA,yBYwEF,WACC,0BACA,CAAA,aACC,aAAa,CAAA,AAKhB,CAAA,oCAEC,oBACC,eAEA,CAAA,sBACC,eACA,CAAA,WAGD,CAAA,2DAEC,YACA,CAAA,kBACA,CAAA,eACA,CAAA,sBACA,CAAA,eAGD,CAAA,gCACC,kBAAkB,CZpGlB,AYoGkB,CZpGlB,yBY0GF,+BACC,aACA,CAAA,YAAa,CAAA,AAIf,CAAA,oCAEC,mBACC,WACA,CAAA,iBACA,CAAA,iBAEA,CAAA,6BACC,WAAW,CAAA,AAKd,CAAA,oCACC,oBAEC,gBAAgB,CAAA,AC5JlB,CAAA,aACC,YACA,CAAA,YACA,CAAA,gBAIA,CAAA,iCACC,gBACA,CAAA,iBACA,CAAA,cACA,CAAA,UACA,CAAA,gBAED,CAAA,4BACC,eACA,CAAA,cACA,CAAA,WACA,CAAA,gBAGF,CAAA,yBACC,eACA,CAAA,aAGD,CAAA,aACC,eACA,CAAA,cACA,CAAA,WACA,CAAA,gBACA,CAAA,kBAEC,CAAA,wBACA,eACA,CAAA,qBACA,CAAA,eCRF,CAAA,mBACC,kBAEA,CAAA,sBACC,gBAED,CAAA,sBACC,SACA,CAAA,mBACA,CAAA,mBACA,CAAA,gBACA,CAAA,eAED,CAAA,wBACC,aAED,CAAA,qBACC,cAIF,CAAA,aA3BC,kBA6BA,CAAA,+BACA,CAAA,6BA7BA,CAAA,eACC,oBdIC,CAAA,yBcqBH,cAI+B,8BAA8B,CAAA,CAAA;AAG7D,SA3CC,gBACA,CAAA,wBACA,CAAA,iBA2CA,CAAA,uBA1CA,CAAA,UACC,oBA0CD,CAAA,eACC,oBASF,CAAA,kBACC,mBAEA,CAAA,yBACC,gBACA,CAAA,SAGD,CAAA,gCACC,kBdlDC,CAAA,yBciDF,iCAIE,gCACA,CAAA,qBAEA,CAAA,8CACC,aAAa,Cd9Cd,Ac8Cc,Cd9Cd,yBcsCF,iCAaE,2IAIA,CAAA,oCACA,CAAA,4BAA6B,CAAA,AAG9B,CAAA,8CACC,kBACA,CAAA,MAAS,CAAA,OAAU,CAAA,QAEnB,CAAA,kDACC,cACA,CAAA,cACA,CAAA,YACA,CAAA,iBACA,CAAA,MAAS,CAAA,OAAU,CAAA,QdpEpB,CAAA,yBcqEC,iEACmC,aAAa,CdtEjD,AcsEiD,CdtEjD,0BcqEC,iEAEyC,aAAa,CAAA,AAIvD,CAAA,sDACC,YAIH,CAAA,oCACC,uBACA,CAAA,cd7FC,CAAA,yBc2FF,qCAG+B,oBAAoB,CAAA,AAEnD,CAAA,iCACC,oBACA,CAAA,uBACA,CAAA,qCACC,WAED,CAAA,8CACC,wBd5FA,CAAA,yBcmGF,yBACmC,qBAAqB,CAAA,CAAA;AdpGtD,0BcyGF,0BACmC,qBAAqB,CAAA,CAAA;AAMzD,eACC,mBACA,CAAA,mBACA,CAAA,gBAAA,CACA,mBADA,CACA,YAAA,CAAA,0BAAA,CACA,yBADA,CACA,sBADA,CACA,kBAAA,CAAA,oBAAA,CdhIE,gBAAA,CAAA,yBc2HH,eAM+B,mBAAA,CAAe,cAAA,CdjI3C,AciI2C,CdjI3C,yBc2HH,eAOoC,UAAU,CAAA,AAE7C,CAAA,qBACC,yBACA,CAAA,eACA,CAAA,SACA,CAAA,kBdxIC,CAAA,yBcoIF,sBAK+B,wBA/Jb,CdsBhB,ActBgB,CdsBhB,yBcoIF,sBAMoC,iBAAmB,CAAA,iBAAkB,CAAA,AAEzE,CAAA,oCACC,iBACA,CAAA,iBd9IC,CAAA,yBc4IF,qCAG+B,yBAA8B,Cd/I3D,Ac+I2D,Cd/I3D,yBc4IF,qCAIoC,iBAAmB,CAAA,iBAAkB,CAAA,AAEzE,CAAA,iBACC,gBACA,CAAA,mBACA,CAAA,oBACA,CAAA,kBACA,CAAA,eACA,CAAA,sBdxJC,CAAA,yBckJF,kBAO+B,cAAmB,CAAA,AAElD,CAAA,2BACC,gBACA,CAAA,+BACA,CAAA,iBACA,CAAA,+BACC,WACA,CAAA,eACA,CAAA,aAGF,CAAA,gBACC,iBACA,CAAA,gBACA,CAAA,aAED,CAAA,kCACC,SACA,CAAA,iBd5KC,CAAA,yBc0KF,mCAG+B,oBAAmB,CAAA,AAElD,CAAA,iBACC,iBAcD,CAAA,iBACC,aAED,CAAA,oBACC,eAED,CAAA,oBACC,cACA,CAAA,SACA,CAAA,iBAED,CAAA,cACC,sEACA,CAAA,iBACA,CAAA,SACA,CAAA,UACA,CAAA,iBACA,CAAA,sBACC,cAGF,CAAA,mBACC,cACA,CAAA,YACA,CAAA,qBACA,CAAA,0BACC,eAGF,CAAA,6BACC,aAKD,CAAA,uBACC,iBAKD,CAAA,qBACC,UAED,CAAA,4BACC,mBAED,CAAA,2BACC,kBAIF,CAAA,eACC,WACA,CAAA,4EAID,CAAA,iBACC,0BAID,CAAA,gBA5QC,gBACA,CAAA,wBACA,CAAA,iBA4QA,CAAA,mBA3QA,CAAA,kBACC,oBA4QD,CAAA,mBACC,kBAKD,CAAA,oBACC,mBAIF,CAAA,eACC,gBAGD,CAAA,cACC,kBACA,CAAA,oBACA,CAAA,UAGD,CAAA,kBACC,WACA,CAAA,cAID,CAAA,qDAEC,WACA,CAAA,cACA,CAAA,sBACA,CAAA,oBAGD,CAAA,8BACC,cACA,CAAA,yBAGD,CAAA,eACC,kBACA,CAAA,gBACA,CAAA,mBACA,CAAA,iBACA,CAAA,kBAEA,CAAA,sBACC,aAED,CAAA,sBACC,qBAED,CAAA,qBACC,cACA,CAAA,cACA,CAAA,gBAED,CAAA,sBACC,kBACA,CAAA,QACA,CAAA,OACA,CAAA,wBACA,CAAA,gBACA,CAAA,aACA,CAAA,SAIF,CAAA,iBACC,yBACA,CAAA,cACA,CAAA,gBACA,CAAA,gBACA,CAAA,UACA,CAAA,kBACA,CAAA,iBACA,CAAA,eACA,CAAA,oBAeA,CAAA,aACC,mBACA,CAAA,UACA,CAAA,eACA,CAAA,aACA,CAAA,QAGD,CAAA,aACC,iBAGD,CAAA,YACC,kBACA,CAAA,gBACA,CAAA,gBAGD,CAAA,YACC,wBAGD,CAAA,iBACC,gBACA,CAAA,+BACC,eAED,CAAA,8BACC,gBAIF,CAAA,kBACC,mBACA,CAAA,sCACA,CAAA,qCACA,CAAA,kCACA,CAAA,iCACA,CAAA,8BACA,CAAA,6BAEA,CAAA,qBACC,iBACA,CAAA,kCACA,CAAA,mCACA,CAAA,8BACA,CAAA,+BACA,CAAA,0BACA,CAAA,2BAEA,CAAA,gCACC,YACA,CAAA,aACA,CAAA,gBACA,CAAA,cACA,CAAA,sCACC,cAKH,CAAA,oBACC,eACA,CAAA,gBACA,CAAA,QACA,CAAA,eACA,CAAA,aAGD,CAAA,yBACC,gCACA,CAAA,aACA,CAAA,iBACA,CAAA,eACA,CAAA,+BACC,mBAIF,CAAA,+BACC,YAEA,CAAA,oCACC,aAIF,CAAA,wBACC,QACA,CAAA,gBAGD,CAAA,6BACC,cACA,CAAA,aACA,CAAA,iBACA,CAAA,OACA,CAAA,gBACA,CAAA,mCACC,cAIF,CAAA,sCACC,gBACA,CAAA,OACA,CAAA,gBAGD,CAAA,yBACC,eACA,CAAA,aACA,CAAA,+BACC,cAOF,CAAA,sBACC,2BAED,CAAA,2BACC,aAKD,CAAA,sCACC,qBAIF,CAAA,eA/IC,kBACA,CAAA,OACA,CAAA,gCACA,CAAA,oCACA,CAAA,4BA6IA,CAAA,SACA,CAAA,WAEA,CAAA,qBACC,YACA,CAAA,gBAIF,CAAA,yBACC,yBACA,CAAA,eACG,CAAA,eAKH,CAAA,oBACC,mBACA,CAAA,+BACC,cACA,CAAA,qCACC,cAKH,CAAA,wBACC,aAGD,CAAA,uBACC,kBACA,CAAA,WAEA,CAAA,6BACC,mBAGD,CAAA,8BACC,cAGA,CAAA,yBACC,WACD,CAAA,aACA,CAAA,WAGD,CAAA,+BACC,YACA,CAAA,eACA,CAAA,gBACA,CAAA,kBACA,CAAA,eACA,CAAA,eACA,CAAA,eACA,CAAA,kBAED,CAAA,6BA5MD,kBACA,CAAA,OACA,CAAA,gCACA,CAAA,oCACA,CAAA,4BA+MA,CAAA,2BACC,YAMH,CAAA,SACC,eACA,CAAA,kBACA,CAAA,iBAEA,CAAA,gBACC,gBACA,CAAA,WACA,CAAA,yBAHD,iBAG6B,WAAW,CAAA,AAGxC,CAAA,uBACC,8BACA,CAAA,yBAFD,wBAE6B,iBAAmB,CAAA,4BAA6B,CAAA,AAG7E,CAAA,kBACC,eAGD,CAAA,WACC,0BAGD,CAAA,aACC,YACA,CAAA,eACA,CAAA,UACA,CAAA,iBAGD,CAAA,WACC,eACA,CAAA,eACA,CAAA,eACA,CAAA,YAGD,CAAA,aACC,gBACA,CAAA,eAGD,CAAA,YACC,eACA,CAAA,eAEA,CAAA,eACC,oBACA,CAAA,eACA,CAAA,gBACA,CAAA,oBACA,CAAA,qBAMH,CAAA,6BACC,UACA,CAAA,iBAGD,CAAA,oBACC,kBACA,CAAA,oBACA,CAAA,kBACA,CAAA,0BAAA,CACA,qBAAA,CAAA,WACA,CAAA,UACA,CAAA,WACA,CAAA,kBACA,CAAA,qBACA,CAAA,SACA,CAAA,cACA,CAAA,uBAEA,CAAA,sDACC,kBACA,CAAA,aACA,CAAA,UACA,CAAA,UACA,CAAA,WAGD,CAAA,0BACC,OACA,CAAA,iBACA,CAAA,eACA,CAAA,uBAGD,CAAA,2BACC,aAGD,CAAA,0BACC,mBAIF,CAAA,mBACC,eAGD,CAAA,qBACC,kBACA,CAAA,QACG,CAAA,iBACA,CAAA,aAGJ,CAAA,gCACE,cAGF,CAAA,+HAEC,6BAGD,CAAA,6DACC,mBACC,CAAA,mEACC,UAIH,CAAA,mEACC,mBAID,CAAA,mIAEC,mBAGD,CAAA,iEACC,mBAGD,CAAA,yEACC,mBAGD,CAAA,gEACC,kBACA,CAAA,UACA,CAAA,WACA,CAAA,8IACC,WACA,CAAA,WAIF,CAAA,8EACC,Sd5sBE,CAAA,0BcutBD,qBACC,cAED,CAAA,mBACC,kBAKD,CAAA,oBACC,UACA,CAAA,iBACA,CAAA,0BACC,WAGF,CAAA,8BACC,gBAED,CAAA,iBACC,UAEA,CAAA,wBACC,UACA,CAAA,UACA,CAAA,+BACA,CAAA,8BACA,CAAA,qCACC,WACA,CAAA,UACA,CAAA,UACA,CAAA,WACA,CAAA,4BACA,CAAA,iBACA,CAAA,QAID,CAAA,+BACC,WAOH,CAAA,gBACC,YAAY,CdtwBZ,AcswBY,CdtwBZ,yBcgxBD,qBACC,WACA,CAAA,SACA,CAAA,iBAGA,CAAA,wBACC,WACA,CAAA,UAAW,CdxxBZ,AcwxBY,CdxxBZ,yBciyBF,+BACC,oBAGD,CAAA,yBACC,4BAA4B,CdtyB3B,AcsyB2B,CdtyB3B,yBc8yBD,cACC,iBAED,CAAA,YACC,cAAc,CdlzBd,AckzBc,CdlzBd,yBc2zBD,qBACC,eAIF,CAAA,gBACC,cAIA,CAAA,oBACC,gBAIF,CAAA,8BACC,iBACA,CAAA,mBAGD,CAAA,gCACC,QAAQ,CCp2BT,ADo2BS,CCp2BT,+IACC,WACA,CAAA,aAED,CAAA,qEACC,WAAW,CAAA","file":"jetpack-admin.min.css"} \ No newline at end of file
+{"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"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-banners.css b/plugins/jetpack/css/jetpack-banners.css
index 38628f11..1432f2e6 100644
--- a/plugins/jetpack/css/jetpack-banners.css
+++ b/plugins/jetpack/css/jetpack-banners.css
@@ -2,329 +2,27 @@
* Do not modify this file directly. It is compiled Sass code.
* @see: jetpack/_inc/jetpack.scss
*/
-#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);
- 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: white;
- 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 {
+.updated.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;
-}
-@media (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;
- /* Medium.com text underline hack - doesn't work well on small mobile devices... reverting to traditional underline
- background-image: linear-gradient(to bottom, rgba(0,0,0,0) 75%, #fff 50%);
- background-repeat: repeat-x;
- background-size: 2px 2px;
- background-position: 0 95%;
- display: inline-block;
-
- @media not all, only screen and (min-resolution: 2dppx), only screen and (-webkit-min-device-pixel-ratio: 2) {
- background-image: linear-gradient(to bottom, rgba(0,0,0,0) 75%, #fff 75%);
- background-repeat: repeat-x;
- }
- */
-}
-#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;
- width: 100%;
- height: auto;
-}
-@media (max-width: 768px) {
- #message .jp-banner__action-container.is-connection {
- width: 100%;
- }
-}
-
-#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%;
- }
-}
-
-#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: 0 0px 0 #3e6c20, 0 0 0 rgba(0, 0, 0, 0.2);
+.updated .jp-banner__header {
+ font-size: 18px;
+ font-weight: 400;
+ margin-top: 0;
}
-#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;
- }
-}
-
-#message .is-full-width .jp-banner__button {
- position: static;
- margin: 0;
+.updated .jp-banner__button-container {
+ padding: 12px 0 0;
}
-#message .is-opt-in .jp-banner__button:before {
- content: "\f147";
- width: 20px;
- height: 20px;
- background: none;
- font: normal 20px/1 Dashicons;
+.jp-banner .notice-dismiss {
+ text-decoration: none;
}
-#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;
+.jp-banner__description {
+ font-size: 14px;
}
-#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-banner__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;
+.jp-banner__description-container {
+ padding: 16px;
}
diff --git a/plugins/jetpack/css/jetpack-banners.css.map b/plugins/jetpack/css/jetpack-banners.css.map
index 0bf0ef12..e25055d5 100644
--- a/plugins/jetpack/css/jetpack-banners.css.map
+++ b/plugins/jetpack/css/jetpack-banners.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../scss/organisms/_banners.scss","jetpack-banners.css"],"names":[],"mappings":"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","file":"jetpack-banners.css"} \ No newline at end of file
+{"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"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-banners.min.css b/plugins/jetpack/css/jetpack-banners.min.css
index 94b927b3..6d249ff1 100644
--- a/plugins/jetpack/css/jetpack-banners.min.css
+++ b/plugins/jetpack/css/jetpack-banners.min.css
@@ -1,6 +1,3 @@
-#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);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}@media (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;width:100%;height:auto}@media (max-width: 768px){#message .jp-banner__action-container.is-connection{width:100%}}
-#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%}}
-#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: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}}
-#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-banner__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}
+.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}
/*# sourceMappingURL=jetpack-banners.min.css.map */ \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-banners.min.css.map b/plugins/jetpack/css/jetpack-banners.min.css.map
index 0beae662..18cd8b4d 100644
--- a/plugins/jetpack/css/jetpack-banners.min.css.map
+++ b/plugins/jetpack/css/jetpack-banners.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../scss/organisms/_banners.scss"],"names":[],"mappings":"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","file":"jetpack-banners.min.css"} \ No newline at end of file
+{"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"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-rtl.css b/plugins/jetpack/css/jetpack-rtl.css
index fc8f38ea..43d89ff6 100644
--- a/plugins/jetpack/css/jetpack-rtl.css
+++ b/plugins/jetpack/css/jetpack-rtl.css
@@ -1,4 +1,4 @@
/*!
* Do not modify this file directly. It is concatenated from individual module CSS files.
*/
-.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-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(opacity=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-carousel-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: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;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:url(../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;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:#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-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-download 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;clear: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-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 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-comments-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-carousel-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-reblog.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:#ccc}.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-shadow: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;width: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}#jetpack-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-footer .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%}#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-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-widget{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:border-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-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 .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{padding-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 .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 .inner>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 .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:#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 .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: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:'\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 li.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-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 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-top: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 .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{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;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}.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:#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{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 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-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: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(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-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,.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-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-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: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-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"]: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-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-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-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-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{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 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-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-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{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 .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} \ No newline at end of file
+.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-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(opacity=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-carousel-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: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;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:url(../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;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:#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-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-download 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;clear: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-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 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-comments-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-carousel-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-reblog.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:#ccc}.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-shadow: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;width: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}#jetpack-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-footer .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%}#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-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-widget{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:border-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-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 .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{padding-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 .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 .inner>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,.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-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{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:'\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 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-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 .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-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 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-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 .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{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[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{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-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;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 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-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: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(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-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,.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-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-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: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-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"]: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-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-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-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-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{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 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-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-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{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 .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} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack.css b/plugins/jetpack/css/jetpack.css
index b98b1091..449a42c7 100644
--- a/plugins/jetpack/css/jetpack.css
+++ b/plugins/jetpack/css/jetpack.css
@@ -1,4 +1,4 @@
/*!
* Do not modify this file directly. It is concatenated from individual module CSS files.
*/
-.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-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=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-carousel-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:left;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;padding-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(../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:3px 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-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-image-meta 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.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;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: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;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 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-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 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-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-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{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-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 #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,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}}.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-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{margin: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: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: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-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-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: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;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: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-relatedposts-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-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-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: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 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_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 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-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 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-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: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-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 li.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-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 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: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,.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.share-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-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-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}.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:#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{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: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{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: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-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,.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,.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{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}.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: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"]: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*="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: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%!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 (-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_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);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-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 .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} \ No newline at end of file
+.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-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=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-carousel-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:left;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;padding-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(../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:3px 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-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-image-meta 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.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;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: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;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 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-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 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-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-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{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-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 #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,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}}.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-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{margin: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: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: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-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-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: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;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: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-relatedposts-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-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-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: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 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_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 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-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 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-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-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.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-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-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:'\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 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{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 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}.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-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;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: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[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-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}.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;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{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: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{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: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-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,.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,.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{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}.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: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"]: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*="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: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%!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 (-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_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);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-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 .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} \ No newline at end of file
diff --git a/plugins/jetpack/functions.global.php b/plugins/jetpack/functions.global.php
new file mode 100644
index 00000000..3a08e30c
--- /dev/null
+++ b/plugins/jetpack/functions.global.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * This file is meant to be the home for any generic & reusable functions
+ * that can be accessed anywhere within Jetpack.
+ *
+ * This file is loaded whether or not Jetpack is active.
+ *
+ * Please namespace with jetpack_
+ * Please write docblocks
+ */
diff --git a/plugins/jetpack/functions.photon.php b/plugins/jetpack/functions.photon.php
index 419b8b55..d6cf13d9 100644
--- a/plugins/jetpack/functions.photon.php
+++ b/plugins/jetpack/functions.photon.php
@@ -12,6 +12,21 @@
function jetpack_photon_url( $image_url, $args = array(), $scheme = null ) {
$image_url = trim( $image_url );
+ if ( class_exists( 'Jetpack') ) {
+ /**
+ * Disables Photon URL processing for local development
+ *
+ * @module photon
+ *
+ * @since 4.1.0
+ *
+ * @param bool false Result of Jetpack::is_development_mode.
+ */
+ if ( true === apply_filters( 'jetpack_photon_development_mode', Jetpack::is_development_mode() ) ) {
+ return $image_url;
+ }
+ }
+
/**
* Allow specific image URls to avoid going through Photon.
*
diff --git a/plugins/jetpack/jetpack.php b/plugins/jetpack/jetpack.php
index f6dc9ecb..f01791d2 100644
--- a/plugins/jetpack/jetpack.php
+++ b/plugins/jetpack/jetpack.php
@@ -5,7 +5,7 @@
* Plugin URI: http://jetpack.com
* 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.
* Author: Automattic
- * Version: 4.0.4
+ * Version: 4.1.1
* Author URI: http://jetpack.com
* License: GPL2+
* Text Domain: jetpack
@@ -14,7 +14,7 @@
define( 'JETPACK__MINIMUM_WP_VERSION', '4.4' );
-define( 'JETPACK__VERSION', '4.0.4' );
+define( 'JETPACK__VERSION', '4.1.1' );
define( 'JETPACK_MASTER_USER', true );
define( 'JETPACK__API_VERSION', 1 );
define( 'JETPACK__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
@@ -57,6 +57,7 @@ require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-error.php' );
require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-heartbeat.php' );
require_once( JETPACK__PLUGIN_DIR . 'class.photon.php' );
require_once( JETPACK__PLUGIN_DIR . 'functions.photon.php' );
+require_once( JETPACK__PLUGIN_DIR . 'functions.global.php' );
require_once( JETPACK__PLUGIN_DIR . 'functions.compat.php' );
require_once( JETPACK__PLUGIN_DIR . 'functions.gallery.php' );
require_once( JETPACK__PLUGIN_DIR . 'require-lib.php' );
diff --git a/plugins/jetpack/json-endpoints.php b/plugins/jetpack/json-endpoints.php
index a735e04a..a8ea54aa 100644
--- a/plugins/jetpack/json-endpoints.php
+++ b/plugins/jetpack/json-endpoints.php
@@ -31,17 +31,21 @@ require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-embeds-endpoint.p
require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-site-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-taxonomies-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-taxonomy-endpoint.php' );
+require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-term-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-comments-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-media-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-post-types-endpoint.php' );
+require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-post-type-taxonomies-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-posts-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-roles-endpoint.php' );
+require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-terms-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-users-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-user-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-comment-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-media-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-post-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-taxonomy-endpoint.php' );
+require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-term-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-user-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-upload-media-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-settings-endpoint.php' );
@@ -201,6 +205,22 @@ new WPCOM_JSON_API_List_Post_Types_Endpoint( array (
)
) );
+new WPCOM_JSON_API_List_Post_Type_Taxonomies_Endpoint( array (
+ 'description' => 'Get a list of taxonomies associated with a post type.',
+ 'group' => 'taxonomy',
+ 'stat' => 'sites:X:post-types:X:taxonomies',
+ 'method' => 'GET',
+ 'path' => '/sites/%s/post-types/%s/taxonomies',
+ 'path_labels' => array(
+ '$site' => '(int|string) Site ID or domain',
+ '$post_type' => '(string) Post type',
+ ),
+ 'response_format' => array(
+ 'found' => '(int) The number of taxonomies found',
+ 'taxonomies' => '(array:taxonomy) A list of available taxonomies',
+ )
+) );
+
/*
* Shortcode endpoints
*/
@@ -528,7 +548,7 @@ new WPCOM_JSON_API_Update_Post_Endpoint( array(
'description' => 'Create a post.',
'group' => 'posts',
'stat' => 'posts:new',
- 'new_version' => '1.1',
+ 'new_version' => '1.2',
'max_version' => '1',
'method' => 'POST',
'path' => '/sites/%s/posts/new',
@@ -595,6 +615,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
'description' => 'Create a post.',
'group' => 'posts',
'stat' => 'posts:new',
+ 'new_version' => '1.2',
'min_version' => '1.1',
'max_version' => '1.1',
'method' => 'POST',
@@ -628,6 +649,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
'parent' => "(int) The post ID of the new post's parent.",
'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.",
+ 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of terms (name or id)',
'categories' => "(array|string) Comma-separated list or array of categories (name or id)",
'tags' => "(array|string) Comma-separated list or array of tags (name or id)",
'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
@@ -698,8 +720,10 @@ new WPCOM_JSON_API_Update_Post_v1_2_Endpoint( array(
'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
'parent' => "(int) The post ID of the new post's parent.",
'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.",
+ 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of term names',
'categories' => "(array|string) Comma-separated list or array of category names",
'tags' => "(array|string) Comma-separated list or array of tag names",
+ 'terms_by_id' => '(object) Mapping of taxonomy to comma-separated list or array of term IDs',
'categories_by_id' => "(array|string) Comma-separated list or array of category IDs",
'tags_by_id' => "(array|string) Comma-separated list or array of tag IDs",
'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
@@ -737,7 +761,7 @@ new WPCOM_JSON_API_Update_Post_Endpoint( array(
'description' => 'Edit a post.',
'group' => 'posts',
'stat' => 'posts:1:POST',
- 'new_version' => '1.1',
+ 'new_version' => '1.2',
'max_version' => '1',
'method' => 'POST',
'path' => '/sites/%s/posts/%d',
@@ -760,6 +784,7 @@ new WPCOM_JSON_API_Update_Post_Endpoint( array(
'private' => 'Privately publish the post.',
'draft' => 'Save the post as a draft.',
'pending' => 'Mark the post as pending editorial approval.',
+ 'trash' => 'Set the post as trashed.',
),
'sticky' => array(
'false' => 'Post is not marked as sticky.',
@@ -802,6 +827,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
'description' => 'Edit a post.',
'group' => 'posts',
'stat' => 'posts:1:POST',
+ 'new_version' => '1.2',
'min_version' => '1.1',
'max_version' => '1.1',
'method' => 'POST',
@@ -826,6 +852,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
'draft' => 'Save the post as a draft.',
'future' => 'Schedule the post (alias for publish; you must also set a future date).',
'pending' => 'Mark the post as pending editorial approval.',
+ 'trash' => 'Set the post as trashed.',
),
'sticky' => array(
'false' => 'Post is not marked as sticky.',
@@ -833,6 +860,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
),
'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
'parent' => "(int) The post ID of the new post's parent.",
+ 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of terms (name or id)',
'categories' => "(array|string) Comma-separated list or array of categories (name or id)",
'tags' => "(array|string) Comma-separated list or array of tags (name or id)",
'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
@@ -892,6 +920,7 @@ new WPCOM_JSON_API_Update_Post_v1_2_Endpoint( array(
'draft' => 'Save the post as a draft.',
'future' => 'Schedule the post (alias for publish; you must also set a future date).',
'pending' => 'Mark the post as pending editorial approval.',
+ 'trash' => 'Set the post as trashed.',
),
'sticky' => array(
'false' => 'Post is not marked as sticky.',
@@ -899,6 +928,8 @@ new WPCOM_JSON_API_Update_Post_v1_2_Endpoint( array(
),
'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
'parent' => "(int) The post ID of the new post's parent.",
+ 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of term names',
+ 'terms_by_id' => '(object) Mapping of taxonomy to comma-separated list or array of term IDs',
'categories' => "(array|string) Comma-separated list or array of category names",
'categories_by_id' => "(array|string) Comma-separated list or array of category IDs",
'tags' => "(array|string) Comma-separated list or array of tag names",
@@ -1909,6 +1940,133 @@ new WPCOM_JSON_API_Update_Taxonomy_Endpoint( array(
)
) );
+new WPCOM_JSON_API_List_Terms_Endpoint( array(
+ 'description' => 'Get a list of a site\'s terms by taxonomy.',
+ 'group' => 'taxonomy',
+ 'stat' => 'terms',
+ 'method' => 'GET',
+ 'path' => '/sites/%s/taxonomies/%s/terms',
+ 'path_labels' => array(
+ '$site' => '(int|string) Site ID or domain',
+ '$taxonomy' => '(string) Taxonomy',
+ ),
+ 'query_parameters' => array(
+ 'number' => '(int=100) The number of terms to return. Limit: 1000.',
+ 'offset' => '(int=0) 0-indexed offset.',
+ 'page' => '(int) Return the Nth 1-indexed page of terms. Takes precedence over the <code>offset</code> parameter.',
+ 'search' => '(string) Limit response to include only terms whose names or slugs match the provided search query.',
+ 'order' => array(
+ 'ASC' => 'Return terms in ascending order.',
+ 'DESC' => 'Return terms in descending order.',
+ ),
+ 'order_by' => array(
+ 'name' => 'Order by the name of each tag.',
+ 'count' => 'Order by the number of posts in each tag.',
+ ),
+ ),
+ 'response_format' => array(
+ 'found' => '(int) The number of terms returned.',
+ 'terms' => '(array) Array of tag objects.',
+ ),
+ 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/taxonomies/post_tags/terms?number=5'
+) );
+
+new WPCOM_JSON_API_Get_Term_Endpoint( array(
+ 'description' => 'Get information about a single term.',
+ 'group' => 'taxonomy',
+ 'stat' => 'terms:1',
+ 'method' => 'GET',
+ 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s',
+ 'path_labels' => array(
+ '$site' => '(int|string) Site ID or domain',
+ '$taxonomy' => '(string) Taxonomy',
+ '$slug' => '(string) Term slug',
+ ),
+ 'response_format' => array(
+ 'ID' => '(int) The term ID.',
+ 'name' => '(string) The name of the term.',
+ 'slug' => '(string) The slug of the term.',
+ 'description' => '(string) The description of the term.',
+ 'post_count' => '(int) The number of posts using this term.',
+ 'parent' => '(int) The parent ID for the term, if hierarchical.',
+ ),
+ 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/taxonomies/post_tag/terms/slug:wordpresscom'
+) );
+
+new WPCOM_JSON_API_Update_Term_Endpoint( array(
+ 'description' => 'Create a new term.',
+ 'group' => 'taxonomy',
+ 'stat' => 'terms:new',
+ 'method' => 'POST',
+ 'path' => '/sites/%s/taxonomies/%s/terms/new',
+ 'path_labels' => array(
+ '$site' => '(int|string) Site ID or domain',
+ '$taxonomy' => '(string) Taxonomy',
+ ),
+ 'request_format' => array(
+ 'name' => '(string) Name of the term',
+ 'description' => '(string) A description of the term',
+ ),
+ 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/new',
+ 'example_request_data' => array(
+ 'headers' => array(
+ 'authorization' => 'Bearer YOUR_API_TOKEN'
+ ),
+ 'body' => array(
+ 'name' => 'Ribs & Chicken'
+ )
+ )
+) );
+
+new WPCOM_JSON_API_Update_Term_Endpoint( array(
+ 'description' => 'Edit a term.',
+ 'group' => 'taxonomy',
+ 'stat' => 'terms:1:POST',
+ 'method' => 'POST',
+ 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s',
+ 'path_labels' => array(
+ '$site' => '(int|string) Site ID or domain',
+ '$taxonomy' => '(string) Taxonomy',
+ '$slug' => '(string) The term slug',
+ ),
+ 'request_format' => array(
+ 'name' => '(string) Name of the term',
+ 'description' => '(string) A description of the term',
+ ),
+ 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/slug:testing-term',
+ 'example_request_data' => array(
+ 'headers' => array(
+ 'authorization' => 'Bearer YOUR_API_TOKEN'
+ ),
+ 'body' => array(
+ 'description' => 'The most delicious'
+ )
+ )
+) );
+
+new WPCOM_JSON_API_Update_Term_Endpoint( array(
+ 'description' => 'Delete a term.',
+ 'group' => 'taxonomy',
+ 'stat' => 'terms:1:delete',
+ 'method' => 'POST',
+ 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s/delete',
+ 'path_labels' => array(
+ '$site' => '(int|string) Site ID or domain',
+ '$taxonomy' => '(string) Taxonomy',
+ '$slug' => '(string) The term slug',
+ ),
+ 'response_format' => array(
+ 'slug' => '(string) The slug of the deleted term',
+ 'success' => '(bool) Whether the operation was successful',
+ ),
+ 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/slug:$term/delete',
+ 'example_request_data' => array(
+ 'headers' => array(
+ 'authorization' => 'Bearer YOUR_API_TOKEN'
+ ),
+ )
+) );
+
new WPCOM_JSON_API_List_Roles_Endpoint( array(
'description' => 'List the user roles of a site.',
'group' => '__do_not_document',
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
index 82359f63..d8de1295 100644
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php
+++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php
@@ -121,7 +121,7 @@ abstract class WPCOM_JSON_API_Comment_Endpoint extends WPCOM_JSON_API_Endpoint {
'ID' => (int) $post->ID,
'title' => (string) get_the_title( $post->ID ),
'type' => (string) $post->post_type,
- 'link' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
+ 'link' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
);
break;
case 'author' :
@@ -155,7 +155,7 @@ abstract class WPCOM_JSON_API_Comment_Endpoint extends WPCOM_JSON_API_Endpoint {
$response[$key] = (object) array(
'ID' => (int) $parent->comment_ID,
'type' => (string) ( $parent->comment_type ? $parent->comment_type : 'comment' ),
- 'link' => (string) $this->get_comment_link( $blog_id, $parent->comment_ID ),
+ 'link' => (string) $this->links->get_comment_link( $blog_id, $parent->comment_ID ),
);
} else {
$response[$key] = false;
@@ -177,14 +177,12 @@ abstract class WPCOM_JSON_API_Comment_Endpoint extends WPCOM_JSON_API_Endpoint {
case 'meta' :
$response[$key] = (object) array(
'links' => (object) array(
- 'self' => (string) $this->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID ),
- 'help' => (string) $this->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'help' ),
- 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
- 'post' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $comment->comment_post_ID ),
- 'replies' => (string) $this->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'replies/' ),
-// 'author' => (string) $this->get_user_link( $comment->user_id ),
-// 'via' => (string) $this->get_post_link( $ping_origin_blog_id, $ping_origin_post_id ), // Ping/trackbacks
- 'likes' => (string) $this->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'likes/' ),
+ 'self' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID ),
+ 'help' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'help' ),
+ 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
+ 'post' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $comment->comment_post_ID ),
+ 'replies' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'replies/' ),
+ 'likes' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'likes/' ),
),
);
break;
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
index 517630a6..6f79222a 100644
--- 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
@@ -10,13 +10,19 @@ class WPCOM_JSON_API_Get_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_End
$args = $this->query_args();
- if ( false === strpos( $path, '/posts/slug:' ) ) {
- $get_by = 'ID';
- } else {
- $get_by = 'name';
+ if ( false !== strpos( $path, '/posts/slug:' ) ) {
+ $post_id = $this->get_platform()->get_site( $blog_id )->get_post_id_by_name( $post_id );
+ if ( is_wp_error( $post_id ) ) {
+ return $post_id;
+ }
}
- $return = $this->get_post_by( $get_by, $post_id, $args['context'] );
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM &&
+ ! in_array( get_post_type( $post_id ), array( false, 'post', 'page', 'revision' ) ) ) {
+ $this->load_theme_functions();
+ }
+
+ $return = $this->get_post_by( 'ID', $post_id, $args['context'] );
if ( !$return || is_wp_error( $return ) ) {
return $return;
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
index 852b6e89..95a42b41 100644
--- 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
@@ -1,5 +1,4 @@
<?php
-
class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
public static $site_format = array(
@@ -28,6 +27,24 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
'meta' => '(object) Meta data',
);
+ protected static $no_member_fields = array(
+ 'ID',
+ 'name',
+ 'description',
+ 'URL',
+ 'jetpack',
+ 'post_count',
+ 'subscribers_count',
+ 'lang',
+ 'locale',
+ 'icon',
+ 'logo',
+ 'visible',
+ 'is_private',
+ 'is_following',
+ 'meta',
+ );
+
protected static $site_options_format = array(
'timezone',
'gmt_offset',
@@ -68,21 +85,26 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
'frame_nonce',
'page_on_front',
'page_for_posts',
+ 'headstart',
'ak_vp_bundle_enabled'
);
- protected static $jetpack_response_field_additions = array(
+ protected static $jetpack_response_field_additions = array(
+ 'subscribers_count',
+ );
+
+ protected static $jetpack_response_field_member_additions = array(
'capabilities',
'plan',
- 'subscribers_count'
);
- protected static $jetpack_response_option_additions = array(
+ protected static $jetpack_response_option_additions = array(
'publicize_permanently_disabled',
'ak_vp_bundle_enabled'
);
private $site;
+
// protected $compact = null;
protected $fields_to_include = '_all';
protected $options_to_include = '_all';
@@ -103,6 +125,11 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
return $blog_id;
}
+ // TODO: enable this when we can do so without being interfered with by
+ // other endpoints that might be wrapping this one.
+ // Uncomment and see failing test: test_jetpack_site_should_have_true_jetpack_property_via_site_meta
+ // $this->filter_fields_and_options();
+
$response = $this->build_current_site_response();
/** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
@@ -118,40 +145,36 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
$this->options_to_include = empty( $query_args['options'] ) ? '_all' : array_map( 'trim', explode( ',', $query_args['options'] ) );
}
- protected function include_response_field( $field ) {
- if ( is_array( $this->fields_to_include ) ) {
- return in_array( $field, $this->fields_to_include );
- }
- return true;
- }
-
/**
* Collects the necessary information to return for a site's response.
*
* @return (array)
*/
public function build_current_site_response() {
+
$blog_id = (int) $this->api->get_blog_id_for_output();
- $this->site = wpcom_get_sal_site( $blog_id );
+ $this->site = $this->get_platform()->get_site( $blog_id );
- // Allow update in later versions
/**
- * Filter the structure of information about the site to return.
- *
- * @module json-api
- *
- * @since 3.9.3
- *
- * @param array $site_format Data structure.
- */
- $response_format = apply_filters( 'sites_site_format', self::$site_format );
+ * Filter the structure of information about the site to return.
+ *
+ * @module json-api
+ *
+ * @since 3.9.3
+ *
+ * @param array $site_format Data structure.
+ */
$default_fields = array_keys( apply_filters( 'sites_site_format', self::$site_format ) );
$response_keys = is_array( $this->fields_to_include ) ?
array_intersect( $default_fields, $this->fields_to_include ) :
$default_fields;
+ if ( ! is_user_member_of_blog( get_current_user(), $blog_id ) ) {
+ $response_keys = array_intersect( $response_keys, self::$no_member_fields );
+ }
+
return $this->render_response_keys( $response_keys );
}
@@ -179,13 +202,13 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
$response[ $key ] = $this->site->blog_id;
break;
case 'name' :
- $response[ $key ] = (string) htmlspecialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES );
+ $response[ $key ] = $this->site->get_name();
break;
case 'description' :
- $response[ $key ] = (string) htmlspecialchars_decode( get_bloginfo( 'description' ), ENT_QUOTES );
+ $response[ $key ] = $this->site->get_description();
break;
case 'URL' :
- $response[ $key ] = (string) home_url();
+ $response[ $key ] = $this->site->get_url();
break;
case 'user_can_manage' :
$response[ $key ] = $this->site->user_can_manage();
@@ -200,7 +223,7 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
break;
case 'post_count' :
if ( $is_user_logged_in ) {
- $response[ $key ] = (int) wp_count_posts( 'post' )->publish;
+ $response[ $key ] = $this->site->get_post_count();
}
break;
case 'icon' :
@@ -217,7 +240,7 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
$response[ $key ] = $this->site->is_following();
break;
case 'options':
- // small optimisation - don't recalculate
+ // small optimisation - don't recalculate
$all_options = apply_filters( 'sites_site_options_format', self::$site_options_format );
$options_response_keys = is_array( $this->options_to_include ) ?
@@ -228,7 +251,7 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
$this->site->after_render_options( $options );
- $response[ $key ] = $options;
+ $response[ $key ] = (object) $options;
break;
case 'meta':
$this->build_meta_response( $response );
@@ -242,16 +265,16 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
case 'jetpack' :
$response[ $key ] = $this->site->is_jetpack();
break;
- case 'single_user_site' :
+ case 'single_user_site' :
$response[ $key ] = $this->site->is_single_user_site();
break;
- case 'is_vip' :
+ case 'is_vip' :
$response[ $key ] = $this->site->is_vip();
break;
case 'is_multisite' :
$response[ $key ] = $this->site->is_multisite();
break;
- case 'capabilities' :
+ case 'capabilities' :
$response[ $key ] = $this->site->get_capabilities();
break;
case 'jetpack_modules':
@@ -270,148 +293,141 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
protected function render_option_keys( &$options_response_keys ) {
if ( ! current_user_can( 'edit_posts' ) ) {
- return;
+ return array();
}
- global $wp_version;
-
$options = array();
+ $site = $this->site;
- $custom_front_page = ( 'page' === get_option( 'show_on_front' ) );
+ $custom_front_page = $site->is_custom_front_page();
+
foreach ( $options_response_keys as $key ) {
switch ( $key ) {
case 'timezone' :
- $options[ $key ] = (string) get_option( 'timezone_string' );
+ $options[ $key ] = $site->get_timezone();
break;
case 'gmt_offset' :
- $options[ $key ] = (float) get_option( 'gmt_offset' );
+ $options[ $key ] = $site->get_gmt_offset();
break;
case 'videopress_enabled' :
- $options[ $key ] = $this->site->has_videopress();
+ $options[ $key ] = $site->has_videopress();
break;
case 'upgraded_filetypes_enabled' :
- $options[ $key ] = $this->site->upgraded_filetypes_enabled();
+ $options[ $key ] = $site->upgraded_filetypes_enabled();
break;
case 'login_url' :
- $options[ $key ] = wp_login_url();
+ $options[ $key ] = $site->get_login_url();
break;
case 'admin_url' :
- $options[ $key ] = get_admin_url();
+ $options[ $key ] = $site->get_admin_url();
break;
case 'is_mapped_domain' :
- $options[ $key ] = $this->site->is_mapped_domain();
+ $options[ $key ] = $site->is_mapped_domain();
break;
case 'is_redirect' :
- $options[ $key ] = $this->site->is_redirect();
+ $options[ $key ] = $site->is_redirect();
break;
case 'unmapped_url' :
- $options[ $key ] = get_site_url( $this->site->blog_id );
+ $options[ $key ] = $site->get_unmapped_url();
break;
case 'featured_images_enabled' :
- $options[ $key ] = $this->site->featured_images_enabled();
+ $options[ $key ] = $site->featured_images_enabled();
break;
case 'theme_slug' :
- $options[ $key ] = get_option( 'stylesheet' );
+ $options[ $key ] = $site->get_theme_slug();
break;
case 'header_image' :
- $options[ $key ] = get_theme_mod( 'header_image_data' );
+ $options[ $key ] = $site->get_header_image();
break;
case 'background_color' :
- $options[ $key ] = get_theme_mod( 'background_color' );
+ $options[ $key ] = $site->get_background_color();
break;
case 'image_default_link_type' :
- $options[ $key ] = get_option( 'image_default_link_type' );
+ $options[ $key ] = $site->get_image_default_link_type();
break;
case 'image_thumbnail_width' :
- $options[ $key ] = (int) get_option( 'thumbnail_size_w' );
+ $options[ $key ] = $site->get_image_thumbnail_width();
break;
case 'image_thumbnail_height' :
- $options[ $key ] = (int) get_option( 'thumbnail_size_h' );
+ $options[ $key ] = $site->get_image_thumbnail_height();
break;
case 'image_thumbnail_crop' :
- $options[ $key ] = get_option( 'thumbnail_crop' );
+ $options[ $key ] = $site->get_image_thumbnail_crop();
break;
case 'image_medium_width' :
- $options[ $key ] = (int) get_option( 'medium_size_w' );
+ $options[ $key ] = $site->get_image_medium_width();
break;
case 'image_medium_height' :
- $options[ $key ] = (int) get_option( 'medium_size_h' );
+ $options[ $key ] = $site->get_image_medium_height();
break;
case 'image_large_width' :
- $options[ $key ] = (int) get_option( 'large_size_w' );
+ $options[ $key ] = $site->get_image_large_width();
break;
case 'image_large_height' :
- $options[ $key ] = (int) get_option( 'large_size_h' );
+ $options[ $key ] = $site->get_image_large_height();
break;
case 'permalink_structure' :
- $options[ $key ] = get_option( 'permalink_structure' );
+ $options[ $key ] = $site->get_permalink_structure();
break;
case 'post_formats' :
- $options[ $key ] = $this->site->get_post_formats();
+ $options[ $key ] = $site->get_post_formats();
break;
case 'default_post_format' :
- $options[ $key ] = get_option( 'default_post_format' );
+ $options[ $key ] = $site->get_default_post_format();
break;
case 'default_category' :
- $options[ $key ] = (int) get_option( 'default_category' );
+ $options[ $key ] = $site->get_default_category();
break;
case 'allowed_file_types' :
- $options[ $key ] = $this->site->allowed_file_types();
+ $options[ $key ] = $site->allowed_file_types();
break;
case 'show_on_front' :
- $options[ $key ] = get_option( 'show_on_front' );
+ $options[ $key ] = $site->get_show_on_front();
break;
/** This filter is documented in modules/likes.php */
case 'default_likes_enabled' :
- $options[ $key ] = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
+ $options[ $key ] = $site->get_default_likes_enabled();
break;
case 'default_sharing_status' :
- $default_sharing_status = false;
- if ( class_exists( 'Sharing_Service' ) ) {
- $ss = new Sharing_Service();
- $blog_services = $ss->get_blog_services();
- $default_sharing_status = ! empty( $blog_services['visible'] );
- }
- $options[ $key ] = (bool) $default_sharing_status;
+ $options[ $key ] = $site->get_default_sharing_status();
break;
case 'default_comment_status' :
- $options[ $key ] = 'closed' !== get_option( 'default_comment_status' );
+ $options[ $key ] = $site->get_default_comment_status();
break;
case 'default_ping_status' :
- $options[ $key ] = 'closed' !== get_option( 'default_ping_status' );
+ $options[ $key ] = $site->default_ping_status();
break;
case 'software_version' :
- $options[ $key ] = $wp_version;
+ $options[ $key ] = $site->get_wordpress_version();
break;
case 'created_at' :
- $options[ $key ] = $this->site->get_registered_date();
+ $options[ $key ] = $site->get_registered_date();
break;
case 'wordads' :
- $options[ $key ] = $this->site->has_wordads();
+ $options[ $key ] = $site->has_wordads();
break;
case 'publicize_permanently_disabled' :
- $publicize_permanently_disabled = false;
- if ( function_exists( 'is_publicize_permanently_disabled' ) ) {
- $publicize_permanently_disabled = is_publicize_permanently_disabled( $this->site->blog_id );
- }
- $options[ $key ] = $publicize_permanently_disabled;
+ $options[ $key ] = $site->is_publicize_permanently_disabled();
break;
case 'frame_nonce' :
- $options[ $key ] = $this->site->get_frame_nonce();
+ $options[ $key ] = $site->get_frame_nonce();
break;
case 'page_on_front' :
if ( $custom_front_page ) {
- $options[ $key ] = (int) get_option( 'page_on_front' );
+ $options[ $key ] = $site->get_page_on_front();
}
break;
case 'page_for_posts' :
if ( $custom_front_page ) {
- $options[ $key ] = (int) get_option( 'page_for_posts' );
+ $options[ $key ] = $site->get_page_for_posts();
}
break;
+ case 'headstart' :
+ $options[ $key ] = $site->is_headstart();
+ break;
case 'ak_vp_bundle_enabled' :
- $options[ $key ] = $this->site->get_ak_vp_bundle_enabled();
+ $options[ $key ] = $site->get_ak_vp_bundle_enabled();
}
}
@@ -419,22 +435,20 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
}
protected function build_meta_response( &$response ) {
- $xmlrpc_scheme = apply_filters( 'wpcom_json_api_xmlrpc_scheme', parse_url( get_option( 'home' ), PHP_URL_SCHEME ) );
- $xmlrpc_url = site_url( 'xmlrpc.php', $xmlrpc_scheme );
$response['meta'] = (object) array(
'links' => (object) array(
- 'self' => (string) $this->get_site_link( $this->site->blog_id ),
- 'help' => (string) $this->get_site_link( $this->site->blog_id, 'help' ),
- 'posts' => (string) $this->get_site_link( $this->site->blog_id, 'posts/' ),
- 'comments' => (string) $this->get_site_link( $this->site->blog_id, 'comments/' ),
- 'xmlrpc' => (string) $xmlrpc_url,
+ 'self' => (string) $this->links->get_site_link( $this->site->blog_id ),
+ 'help' => (string) $this->links->get_site_link( $this->site->blog_id, 'help' ),
+ 'posts' => (string) $this->links->get_site_link( $this->site->blog_id, 'posts/' ),
+ 'comments' => (string) $this->links->get_site_link( $this->site->blog_id, 'comments/' ),
+ 'xmlrpc' => (string) $this->site->get_xmlrpc_url(),
),
);
}
// apply any WPCOM-only response components to a Jetpack site response
public function decorate_jetpack_response( &$response ) {
- $this->site = wpcom_get_sal_site( $blog_id );
+ $this->site = $this->get_platform()->get_site( $response->ID );
// ensure the response is marked as being from Jetpack
$response->jetpack = true;
@@ -445,14 +459,32 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
$response->{ $key } = $value;
}
+ if ( is_user_member_of_blog( get_current_user(), $response->ID ) ) {
+ $wpcom_member_response = $this->render_response_keys( self::$jetpack_response_field_member_additions );
+
+ foreach( $wpcom_member_response as $key => $value ) {
+ $response->{ $key } = $value;
+ }
+ } else {
+ // ensure private data is not rendered for non members of the site
+ unset( $response->options );
+ unset( $response->is_vip );
+ unset( $response->single_user_site );
+ unset( $response->is_private );
+ unset( $response->capabilities );
+ unset( $response->lang );
+ unset( $response->user_can_manage );
+ unset( $response->is_multisite );
+ unset( $response->plan );
+ }
+
// render additional options
if ( $response->options ) {
$wpcom_options_response = $this->render_option_keys( self::$jetpack_response_option_additions );
- foreach( $wpcom_options_response as $key => $value ) {
+ foreach ( $wpcom_options_response as $key => $value ) {
$response->options[ $key ] = $value;
}
- return (string) get_bloginfo( 'language' );
}
return $response; // possibly no need since it's modified in place
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
index 6f693e91..898df417 100644
--- 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
@@ -1,11 +1,4 @@
<?php
-/*
- * WARNING: This file is distributed verbatim in Jetpack.
- * There should be nothing WordPress.com specific in this file.
- *
- * @hide-in-jetpack
- */
-
class WPCOM_JSON_API_GET_Site_V1_2_Endpoint extends WPCOM_JSON_API_GET_Site_Endpoint {
public static $site_format = array(
@@ -13,7 +6,9 @@ class WPCOM_JSON_API_GET_Site_V1_2_Endpoint extends WPCOM_JSON_API_GET_Site_Endp
'name' => '(string) Title of site',
'description' => '(string) Tagline or description of site',
'URL' => '(string) Full URL to the site',
+ 'capabilities' => '(array) Array of capabilities for the current user on this site.',
'jetpack' => '(bool) Whether the site is a Jetpack site or not',
+ 'is_multisite' => '(bool) Whether the site is a Multisite site or not. Always true for WP.com sites.',
'post_count' => '(int) The number of posts the site has',
'subscribers_count' => '(int) The number of subscribers the site has',
'locale' => '(string) Primary locale code of the site',
@@ -21,31 +16,23 @@ class WPCOM_JSON_API_GET_Site_V1_2_Endpoint extends WPCOM_JSON_API_GET_Site_Endp
'logo' => '(array) The site logo, set in the Customizer',
'visible' => '(bool) If this site is visible in the user\'s site list',
'is_private' => '(bool) If the site is a private site or not',
+ '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.',
+ 'is_vip' => '(bool) If the site is a VIP site or not.',
'is_following' => '(bool) If the current user is subscribed to this site in the reader',
'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/',
+ 'plan' => '(array) Details of the current plan for this site.',
'updates' => '(array) An array of available updates for plugins, themes, wordpress, and languages.',
'jetpack_modules' => '(array) A list of active Jetpack modules.',
'meta' => '(object) Meta data',
);
+
function callback( $path = '', $blog_id = 0 ) {
add_filter( 'sites_site_format', array( $this, 'site_format' ) );
return parent::callback( $path, $blog_id );
}
- //V1.2 renames lang to locale
- protected function process_locale( $key, $is_user_logged_in ) {
- if ( $is_user_logged_in && 'locale' == $key ) {
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- if ( ! is_jetpack_site() ) {
- return (string) get_blog_lang_code();
- }
- }
- }
- return false;
- }
-
public function site_format( $format ) {
return self::$site_format;
}
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
new file mode 100644
index 00000000..fcb9a6f7
--- /dev/null
+++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-term-endpoint.php
@@ -0,0 +1,38 @@
+<?php
+/*
+ * WARNING: This file is distributed verbatim in Jetpack.
+ * There should be nothing WordPress.com specific in this file.
+ *
+ * @hide-in-jetpack
+ */
+
+class WPCOM_JSON_API_Get_Term_Endpoint extends WPCOM_JSON_API_Endpoint {
+ // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
+ function callback( $path = '', $blog_id = 0, $taxonomy = 'category', $slug = 0 ) {
+ $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
+ if ( is_wp_error( $blog_id ) ) {
+ return $blog_id;
+ }
+
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ $this->load_theme_functions();
+ }
+
+ $taxonomy_meta = get_taxonomy( $taxonomy );
+ if ( false === $taxonomy_meta || ( ! $taxonomy_meta->public &&
+ ! current_user_can( $taxonomy_meta->cap->assign_terms ) ) ) {
+ return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
+ }
+
+ $args = $this->query_args();
+ $term = $this->get_taxonomy( $slug, $taxonomy, $args['context'] );
+ if ( ! $term || is_wp_error( $term ) ) {
+ return $term;
+ }
+
+ /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
+ do_action( 'wpcom_json_api_objects', 'terms' );
+
+ return $term;
+ }
+}
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
index 9b80601d..cdb0d466 100644
--- 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
@@ -229,7 +229,9 @@ class WPCOM_JSON_API_List_Comments_Endpoint extends WPCOM_JSON_API_Comment_Endpo
if ( $args['hierarchical'] ) {
$walker = new WPCOM_JSON_API_List_Comments_Walker;
$comment_ids = $walker->paged_walk( $comments, get_option( 'thread_comments_depth', -1 ), isset( $args['page'] ) ? $args['page'] : 1 , $args['number'] );
- $comments = array_map( 'get_comment', $comment_ids );
+ if ( ! empty( $comment_ids ) ) {
+ $comments = array_map( 'get_comment', $comment_ids );
+ }
}
$return = array();
@@ -244,10 +246,12 @@ class WPCOM_JSON_API_List_Comments_Endpoint extends WPCOM_JSON_API_Comment_Endpo
break;
case 'comments' :
$return_comments = array();
- foreach ( $comments as $comment ) {
- $the_comment = $this->get_comment( $comment->comment_ID, $args['context'] );
- if ( $the_comment && !is_wp_error( $the_comment ) ) {
- $return_comments[] = $the_comment;
+ if ( ! empty( $comments ) ) {
+ foreach ( $comments as $comment ) {
+ $the_comment = $this->get_comment( $comment->comment_ID, $args['context'] );
+ if ( $the_comment && !is_wp_error( $the_comment ) ) {
+ $return_comments[] = $the_comment;
+ }
}
}
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
index e5cfd7f3..35efd1d3 100644
--- 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
@@ -36,4 +36,4 @@ class WPCOM_JSON_API_List_Embeds_Endpoint extends WPCOM_JSON_API_Endpoint {
return $output;
}
-}
+} \ No newline at end of file
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
index a5b2354c..fc2e479a 100644
--- 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
@@ -40,7 +40,6 @@ class WPCOM_JSON_API_List_Media_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint {
'post_type' => 'attachment',
'post_status' => 'inherit',
'post_parent' => isset( $args['post_ID'] ) ? $args['post_ID'] : null,
- 'offset' => isset( $args['offset'] ) ? $args['offset'] : null,
'posts_per_page' => $args['number'],
'post_mime_type' => isset( $args['mime_type'] ) ? $args['mime_type'] : null,
'order' => isset( $args['order'] ) ? $args['order'] : 'DESC',
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
new file mode 100644
index 00000000..be037134
--- /dev/null
+++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-type-taxonomies-endpoint.php
@@ -0,0 +1,71 @@
+<?php
+/*
+ * WARNING: This file is distributed verbatim in Jetpack.
+ * There should be nothing WordPress.com specific in this file.
+ *
+ * @hide-in-jetpack
+ */
+
+class WPCOM_JSON_API_List_Post_Type_Taxonomies_Endpoint extends WPCOM_JSON_API_Endpoint {
+ static $taxonomy_keys_to_include = array(
+ 'name' => 'name',
+ 'label' => 'label',
+ 'labels' => 'labels',
+ 'description' => 'description',
+ 'hierarchical' => 'hierarchical',
+ 'public' => 'public',
+ 'cap' => 'capabilities',
+ );
+
+ // /sites/%s/post-types/%s/taxonomies -> $blog_id, $post_type
+ function callback( $path = '', $blog_id = 0, $post_type = 'post' ) {
+ $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
+ if ( is_wp_error( $blog_id ) ) {
+ return $blog_id;
+ }
+
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ $this->load_theme_functions();
+ }
+
+ /** This filter is documented in jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php */
+ if ( apply_filters( 'rest_api_localize_response', false ) ) {
+ // API localization occurs after the initial taxonomies have been
+ // registered, so re-register if localizing response
+ create_initial_taxonomies();
+ }
+
+ $args = $this->query_args();
+
+ $post_type_object = get_post_type_object( $post_type );
+ if ( ! $post_type_object || ( ! $post_type_object->publicly_queryable && (
+ ! current_user_can( $post_type_object->cap->edit_posts ) ) ) ) {
+ return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
+ }
+
+ // Get a list of available taxonomies
+ $taxonomy_objects = get_object_taxonomies( $post_type, 'objects' );
+
+ // Construct array of formatted objects
+ $formatted_taxonomy_objects = array();
+ foreach ( $taxonomy_objects as $taxonomy_object ) {
+ // Omit private taxonomies unless user has assign capability
+ if ( ! $taxonomy_object->public && ! current_user_can( $taxonomy_object->cap->assign_terms ) ) {
+ continue;
+ }
+
+ // Include only the desired keys in the response
+ $formatted_taxonomy_object = array();
+ foreach ( self::$taxonomy_keys_to_include as $key => $value ) {
+ $formatted_taxonomy_object[ $value ] = $taxonomy_object->{ $key };
+ }
+
+ $formatted_taxonomy_objects[] = $formatted_taxonomy_object;
+ }
+
+ return array(
+ 'found' => count( $formatted_taxonomy_objects ),
+ 'taxonomies' => $formatted_taxonomy_objects,
+ );
+ }
+}
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
index e7521abe..c18719f0 100644
--- 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
@@ -8,6 +8,7 @@ class WPCOM_JSON_API_List_Post_Types_Endpoint extends WPCOM_JSON_API_Endpoint {
'description' => 'description',
'map_meta_cap' => 'map_meta_cap',
'cap' => 'capabilities',
+ 'hierarchical' => 'hierarchical',
);
// /sites/%s/post-types -> $blog_id
@@ -23,9 +24,15 @@ class WPCOM_JSON_API_List_Post_Types_Endpoint extends WPCOM_JSON_API_Endpoint {
$args = $this->query_args();
- // API localization occurs after the initial post types have been
- // registered, so re-register if localizing response
+ /**
+ * Whether API responses should be returned in a custom locale. False
+ * for Jetpack; may be true for WP.com requests.
+ *
+ * @since 3.9.2
+ */
if ( apply_filters( 'rest_api_localize_response', false ) ) {
+ // API localization occurs after the initial post types have been
+ // registered, so re-register if localizing response
create_initial_post_types();
}
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
index ca1c5a10..1ab369f0 100644
--- 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
@@ -104,7 +104,7 @@ class WPCOM_JSON_API_List_Posts_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
if ( isset( $args['meta_key'] ) ) {
$show = false;
- if ( $this->is_metadata_public( $args['meta_key'] ) )
+ if ( WPCOM_JSON_API_Metadata::is_public( $args['meta_key'] ) )
$show = true;
if ( current_user_can( 'edit_post_meta', $query['post_type'], $args['meta_key'] ) )
$show = true;
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
index 1f009365..61953a1f 100644
--- 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
@@ -115,7 +115,7 @@ class WPCOM_JSON_API_List_Posts_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_E
if ( isset( $args['meta_key'] ) ) {
$show = false;
- if ( $this->is_metadata_public( $args['meta_key'] ) )
+ if ( WPCOM_JSON_API_Metadata::is_public( $args['meta_key'] ) )
$show = true;
if ( current_user_can( 'edit_post_meta', $query['post_type'], $args['meta_key'] ) )
$show = true;
@@ -296,7 +296,7 @@ class WPCOM_JSON_API_List_Posts_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_E
if ( ! is_array( $args['type'] ) ) {
$return[$key] = (object) array(
'links' => (object) array(
- 'counts' => (string) $this->get_site_link( $blog_id, 'post-counts/' . $args['type'] ),
+ 'counts' => (string) $this->links->get_site_link( $blog_id, 'post-counts/' . $args['type'] ),
)
);
}
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
index 28a42350..9b2fc1aa 100644
--- 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
@@ -19,9 +19,9 @@ class WPCOM_JSON_API_List_Shortcodes_Endpoint extends WPCOM_JSON_API_Endpoint {
foreach ( $shortcode_tags as $tag => $class ) {
if ( '__return_false' == $class )
continue;
- $output['shortcodes'][] = $tag;
+ $output['shortcodes'][] = $tag;
}
return $output;
}
-}
+} \ No newline at end of file
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
new file mode 100644
index 00000000..c015e34a
--- /dev/null
+++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-terms-endpoint.php
@@ -0,0 +1,87 @@
+<?php
+/*
+ * WARNING: This file is distributed verbatim in Jetpack.
+ * There should be nothing WordPress.com specific in this file.
+ *
+ * @hide-in-jetpack
+ */
+
+class WPCOM_JSON_API_List_Terms_Endpoint extends WPCOM_JSON_API_Endpoint {
+ // /sites/%s/taxonomies/%s/terms -> $blog_id, $taxonomy
+ function callback( $path = '', $blog_id = 0, $taxonomy = 'category' ) {
+ $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
+ if ( is_wp_error( $blog_id ) ) {
+ return $blog_id;
+ }
+
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ $this->load_theme_functions();
+ }
+
+ $taxonomy_meta = get_taxonomy( $taxonomy );
+ if ( false === $taxonomy_meta || ( ! $taxonomy_meta->public &&
+ ! current_user_can( $taxonomy_meta->cap->assign_terms ) ) ) {
+ return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
+ }
+
+ $args = $this->query_args();
+ $args = $this->process_args( $args );
+
+ $formatted_terms = $this->get_formatted_terms( $taxonomy, $args );
+
+ if ( ! empty( $formatted_terms ) ) {
+ /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
+ do_action( 'wpcom_json_api_objects', 'terms', count( $formatted_terms ) );
+ }
+
+ return array(
+ 'found' => (int) $this->get_found( $taxonomy, $args ),
+ 'terms' => (array) $formatted_terms
+ );
+ }
+
+ function process_args( $args ) {
+ $args['get'] = 'all';
+
+ if ( $args['number'] < 1 ) {
+ $args['number'] = 100;
+ } elseif ( 1000 < $args['number'] ) {
+ return new WP_Error( 'invalid_number', 'The number parameter must be less than or equal to 1000.', 400 );
+ }
+
+ if ( isset( $args['page'] ) ) {
+ if ( $args['page'] < 1 ) {
+ $args['page'] = 1;
+ }
+
+ $args['offset'] = ( $args['page'] - 1 ) * $args['number'];
+ unset( $args['page'] );
+ }
+
+ if ( $args['offset'] < 0 ) {
+ $args['offset'] = 0;
+ }
+
+ $args['orderby'] = $args['order_by'];
+ unset( $args['order_by'] );
+
+ unset( $args['context'], $args['pretty'], $args['http_envelope'], $args['fields'] );
+ return $args;
+ }
+
+ function get_found( $taxonomy, $args ) {
+ unset( $args['offset'] );
+ return wp_count_terms( $taxonomy, $args );
+ }
+
+ function get_formatted_terms( $taxonomy, $args ) {
+ $terms = get_terms( $taxonomy, $args );
+
+ $formatted_terms = array();
+ foreach ( $terms as $term ) {
+ $formatted_terms[] = $this->format_taxonomy( $term, $taxonomy, 'display' );
+ }
+
+ return $formatted_terms;
+ }
+}
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
index 225bfa0a..fe658f99 100644
--- 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
@@ -19,13 +19,14 @@ class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
if ( $args['number'] < 1 ) {
$args['number'] = 20;
- } elseif ( 100 < $args['number'] ) {
- return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 100.', 400 );
+ } elseif ( 1000 < $args['number'] ) {
+ return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 1000.', 400 );
}
if ( $authors_only ) {
- if ( empty( $args['type'] ) )
+ if ( empty( $args['type'] ) ) {
$args['type'] = 'post';
+ }
if ( ! $this->is_post_type_allowed( $args['type'] ) ) {
return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
@@ -47,8 +48,9 @@ class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
'fields' => 'ID',
);
- if ( $authors_only )
+ if ( $authors_only ) {
$query['who'] = 'authors';
+ }
if ( ! empty( $args['search'] ) ) {
$query['search'] = $args['search'];
@@ -72,7 +74,7 @@ class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
foreach ( array_keys( $this->response_format ) as $key ) {
switch ( $key ) {
case 'found' :
- $return[$key] = (int) $user_query->get_total();
+ $return[ $key ] = (int) $user_query->get_total();
break;
case 'users' :
$users = array();
@@ -89,7 +91,7 @@ class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
}
}
- $return[$key] = $users;
+ $return[ $key ] = $users;
break;
}
}
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
index c77ce8d3..fe61e71a 100644
--- 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
@@ -454,11 +454,14 @@ class WPCOM_JSON_API_Menus_Complexify extends WPCOM_JSON_API_Menus_Translator {
protected function location_name_exists( $location_name ) {
$widget_location_names = wp_list_pluck( WPCOM_JSON_API_Menus_Widgets::get(), 'name' );
+ $existing_locations = get_nav_menu_locations();
+
if ( ! is_array( get_registered_nav_menus() ) ) {
return false;
}
return array_key_exists( $location_name, get_registered_nav_menus() ) ||
+ array_key_exists( $location_name, $existing_locations ) ||
in_array( $location_name, $widget_location_names );
}
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
index 9dc1a1fa..d28d9697 100644
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php
+++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php
@@ -272,7 +272,7 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
$response[$key] = (object) array(
'ID' => (int) $parent->ID,
'type' => (string) $parent->post_type,
- 'link' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $parent->ID ),
+ 'link' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $parent->ID ),
'title' => $parent_title,
);
} else {
@@ -443,7 +443,7 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
foreach ( (array) has_meta( $post_id ) as $meta ) {
// Don't expose protected fields.
$show = false;
- if ( $this->is_metadata_public( $meta['meta_key'] ) )
+ if ( WPCOM_JSON_API_Metadata::is_public( $meta['meta_key'] ) )
$show = true;
if ( current_user_can( 'edit_post_meta', $post_id , $meta['meta_key'] ) )
$show = true;
@@ -467,13 +467,11 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
case 'meta' :
$response[$key] = (object) array(
'links' => (object) array(
- 'self' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
- 'help' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'help' ),
- 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
-// 'author' => (string) $this->get_user_link( $post->post_author ),
-// 'via' => (string) $this->get_post_link( $reblog_origin_blog_id, $reblog_origin_post_id ),
- 'replies' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'replies/' ),
- 'likes' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'likes/' ),
+ 'self' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
+ 'help' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'help' ),
+ 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
+ 'replies' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'replies/' ),
+ 'likes' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'likes/' ),
),
);
break;
@@ -665,7 +663,11 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
return new WP_Error( 'invalid_post', 'Invalid post', 400 );
}
- $posts = get_posts( array( 'name' => $name ) );
+ $posts = get_posts( array(
+ 'name' => $name,
+ 'numberposts' => 1,
+ 'post_type' => $this->_get_whitelisted_post_types(),
+ ) );
if ( ! $posts || ! isset( $posts[0]->ID ) || ! $posts[0]->ID ) {
$page = get_page_by_path( $name );
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
index 30783d14..93dade64 100644
--- 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
@@ -43,6 +43,7 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
'menu_order' => '(int) (Pages Only) The order pages should appear in.',
'page_template' => '(string) (Pages Only) The page template this page is using.',
'publicize_URLs' => '(array:URL) Array of Twitter and Facebook URLs published by this post.',
+ 'terms' => '(object) Hash of taxonomy names mapping to a hash of terms keyed by term name.',
'tags' => '(object:tag) Hash of tags (keyed by tag name) applied to the post.',
'categories' => '(object:category) Hash of categories (keyed by category name) applied to the post.',
'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.',
@@ -66,31 +67,6 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
parent::__construct( $args );
}
- function is_metadata_public( $key ) {
- if ( empty( $key ) )
- return false;
-
- // Default whitelisted meta keys.
- $whitelisted_meta = array( '_thumbnail_id' );
-
- // whitelist of metadata that can be accessed
- /** This filter is documented in json-endpoints/class.wpcom-json-api-post-endpoint.php */
- if ( in_array( $key, apply_filters( 'rest_api_allowed_public_metadata', $whitelisted_meta ) ) )
- return true;
-
- if ( 0 === strpos( $key, 'geo_' ) )
- return true;
-
- if ( 0 === strpos( $key, '_wpas_' ) )
- return true;
-
- return false;
- }
-
- function the_password_form() {
- return __( 'This post is password protected.', 'jetpack' );
- }
-
/**
* Get a post by a specified field and value
*
@@ -100,15 +76,14 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
* @return array Post
**/
function get_post_by( $field, $field_value, $context = 'display' ) {
- global $blog_id;
- /** This filter is documented in class.json-api-endpoints.php */
- $is_jetpack = true === apply_filters( 'is_jetpack_site', false, $blog_id );
+ // validate input
+ if ( ! in_array( $field, array( 'ID', 'name' ) ) ) {
+ return new WP_Error( 'invalid_field', 'Invalid API FIELD', 400 );
+ }
- if ( defined( 'GEO_LOCATION__CLASS' ) && class_exists( GEO_LOCATION__CLASS ) ) {
- $geo = call_user_func( array( GEO_LOCATION__CLASS, 'init' ) );
- } else {
- $geo = false;
+ if ( ! in_array( $context, array( 'display', 'edit' ) ) ) {
+ return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
}
if ( 'display' === $context ) {
@@ -123,415 +98,178 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
add_shortcode( 'gallery', array( &$this, 'win8_gallery_shortcode' ) );
}
- switch ( $field ) {
- case 'name' :
- $post_id = $this->get_post_id_by_name( $field_value );
- if ( is_wp_error( $post_id ) ) {
- return $post_id;
- }
- break;
- default :
- $post_id = (int) $field_value;
- break;
- }
+ // fetch SAL post
+ $post = $this->get_sal_post_by( $field, $field_value, $context );
- $post = get_post( $post_id, OBJECT, $context );
+ if ( is_wp_error( $post ) ) {
+ return $post;
+ }
- if ( !$post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
+ $GLOBALS['post'] = $post;
- if ( ! $this->is_post_type_allowed( $post->post_type ) && ( ! function_exists( 'is_post_freshly_pressed' ) || ! is_post_freshly_pressed( $post->ID ) ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
+ // TODO: not sure where this one should go
+ if ( 'display' === $context ) {
+ setup_postdata( $post );
}
- // Permissions
- $capabilities = $this->get_current_user_capabilities( $post );
+ $response = $this->render_response_keys( $post, $context, array_keys( $this->post_object_format ) );
- switch ( $context ) {
- case 'edit' :
- if ( ! $capabilities['edit_post'] ) {
- return new WP_Error( 'unauthorized', 'User cannot edit post', 403 );
- }
- break;
- case 'display' :
- break;
- default :
- return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
- }
+ unset( $GLOBALS['post'] );
- $can_view = $this->user_can_view_post( $post->ID );
- if ( !$can_view || is_wp_error( $can_view ) ) {
- return $can_view;
- }
+ return $response;
+ }
- $GLOBALS['post'] = $post;
+ protected function get_sal_post_by( $field, $field_value, $context ) {
+ global $blog_id;
- if ( 'display' === $context ) {
- setup_postdata( $post );
- }
+ $site = $this->get_platform()->get_site( $blog_id );
+
+ $post = ( $field === 'name' ) ?
+ $site->get_post_by_name( $field_value, $context ) :
+ $site->get_post_by_id( $field_value, $context );
- $response = array();
- foreach ( array_keys( $this->post_object_format ) as $key ) {
+ return $post;
+ }
+
+ private function render_response_keys( $post, $context, $keys ) {
+ foreach ( $keys as $key ) {
switch ( $key ) {
case 'ID' :
// explicitly cast all output
$response[$key] = (int) $post->ID;
break;
case 'site_ID' :
- $response[$key] = (int) $this->api->get_blog_id_for_output();
+ $response[$key] = $post->site->get_id();
break;
case 'author' :
- $response[$key] = (object) $this->get_author( $post, 'edit' === $context && $capabilities['edit_post'] );
+ $response[$key] = $post->get_author();
break;
case 'date' :
- $response[$key] = (string) $this->format_date( $post->post_date_gmt, $post->post_date );
+ $response[$key] = $post->get_date();
break;
case 'modified' :
- $response[$key] = (string) $this->format_date( $post->post_modified_gmt, $post->post_modified );
+ $response[$key] = $post->get_modified_date();
break;
case 'title' :
- if ( 'display' === $context ) {
- $response[$key] = (string) get_the_title( $post->ID );
- } else {
- $response[$key] = (string) htmlspecialchars_decode( $post->post_title, ENT_QUOTES );
- }
+ $response[$key] = $post->get_title();
break;
case 'URL' :
- if ( 'revision' === $post->post_type ) {
- $response[$key] = (string) esc_url_raw( get_permalink( $post->post_parent ) );
- } else {
- $response[$key] = (string) esc_url_raw( get_permalink( $post->ID ) );
- }
+ $response[$key] = $post->get_url();
break;
case 'short_URL' :
- $response[$key] = (string) esc_url_raw( wp_get_shortlink( $post->ID ) );
+ $response[$key] = $post->get_shortlink();
break;
case 'content' :
- if ( 'display' === $context ) {
- add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
- $response[$key] = (string) $this->get_the_post_content_for_display();
- remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
- } else {
- $response[$key] = (string) $post->post_content;
- }
+ $response[$key] = $post->get_content();
break;
case 'excerpt' :
- if ( 'display' === $context ) {
- add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
- ob_start();
- the_excerpt();
- $response[$key] = (string) ob_get_clean();
- remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
- } else {
- $response[$key] = htmlspecialchars_decode( (string) $post->post_excerpt, ENT_QUOTES );
- }
+ $response[$key] = $post->get_excerpt();
break;
case 'status' :
- $response[$key] = (string) get_post_status( $post->ID );
+ $response[$key] = $post->get_status();
break;
case 'sticky' :
- $response[$key] = (bool) is_sticky( $post->ID );
+ $response[$key] = $post->is_sticky();
break;
case 'slug' :
- $response[$key] = (string) $post->post_name;
+ $response[$key] = $post->get_slug();
break;
case 'guid' :
- $response[$key] = (string) $post->guid;
+ $response[$key] = $post->get_guid();
break;
case 'password' :
- $response[$key] = (string) $post->post_password;
- if ( 'edit' === $context ) {
- $response[$key] = htmlspecialchars_decode( (string) $response[$key], ENT_QUOTES );
- }
+ $response[$key] = $post->get_password();
break;
case 'parent' : // (object|false)
- if ( $post->post_parent ) {
- $parent = get_post( $post->post_parent );
- if ( 'display' === $context ) {
- $parent_title = (string) get_the_title( $parent->ID );
- } else {
- $parent_title = (string) htmlspecialchars_decode( $post->post_title, ENT_QUOTES );
- }
- $response[$key] = (object) array(
- 'ID' => (int) $parent->ID,
- 'type' => (string) $parent->post_type,
- 'link' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $parent->ID ),
- 'title' => $parent_title,
- );
- } else {
- $response[$key] = false;
- }
+ $response[$key] = $post->get_parent();
break;
case 'type' :
- $response[$key] = (string) $post->post_type;
+ $response[$key] = $post->get_type();
break;
case 'discussion' :
- $response[$key] = array(
- 'comments_open' => (bool) comments_open( $post->ID ),
- 'comment_status' => (string) $post->comment_status,
- 'pings_open' => (bool) pings_open( $post->ID ),
- 'ping_status' => (string) $post->ping_status,
- 'comment_count' => (int) $post->comment_count,
- );
+ $response[$key] = $post->get_discussion();
break;
case 'likes_enabled' :
- /** This filter is documented in modules/likes.php */
- $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
- $post_likes_switched = (bool) get_post_meta( $post->ID, 'switch_like_status', true );
- $post_likes_enabled = $sitewide_likes_enabled;
- if ( $post_likes_switched ) {
- $post_likes_enabled = ! $post_likes_enabled;
- }
- $response[$key] = (bool) $post_likes_enabled;
+ $response[$key] = $post->is_likes_enabled();
break;
case 'sharing_enabled' :
- $show = true;
- /** This filter is documented in modules/sharedaddy/sharing-service.php */
- $show = apply_filters( 'sharing_show', $show, $post );
-
- $switched_status = get_post_meta( $post->ID, 'sharing_disabled', false );
-
- if ( !empty( $switched_status ) )
- $show = false;
- $response[$key] = (bool) $show;
+ $response[$key] = $post->is_sharing_enabled();
break;
case 'like_count' :
- $response[$key] = (int) $this->api->post_like_count( $blog_id, $post->ID );
+ $response[$key] = $post->get_like_count();
break;
case 'i_like' :
- $response[$key] = (bool) $this->api->is_liked( $blog_id, $post->ID );
+ $response[$key] = $post->is_liked();
break;
case 'is_reblogged':
- $response[$key] = (bool) $this->api->is_reblogged( $blog_id, $post->ID );
+ $response[$key] = $post->is_reblogged();
break;
case 'is_following':
- $response[$key] = (bool) $this->api->is_following( $blog_id );
+ $response[$key] = $post->is_following();
break;
case 'global_ID':
- $response[$key] = (string) $this->api->add_global_ID( $blog_id, $post->ID );
+ $response[$key] = $post->get_global_id();
break;
case 'featured_image' :
- if ( $is_jetpack && ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
- $response[ $key ] = get_post_meta( $post->ID, '_jetpack_featured_image', true );
- } else {
- $image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full' );
- if ( is_array( $image_attributes ) && isset( $image_attributes[0] ) ) {
- $response[ $key ] = (string) $image_attributes[0];
- } else {
- $response[ $key ] = '';
- }
- }
+ $response[$key] = $post->get_featured_image();
break;
case 'post_thumbnail' :
- $response[$key] = null;
-
- $thumb_id = get_post_thumbnail_id( $post->ID );
- if ( ! empty( $thumb_id ) ) {
- $attachment = get_post( $thumb_id );
- if ( ! empty( $attachment ) )
- $featured_image_object = $this->get_attachment( $attachment );
-
- if ( ! empty( $featured_image_object ) ) {
- $response[$key] = (object) $featured_image_object;
- }
- }
+ $response[$key] = $post->get_post_thumbnail();
break;
case 'format' :
- $response[$key] = (string) get_post_format( $post->ID );
- if ( !$response[$key] ) {
- $response[$key] = 'standard';
- }
+ $response[$key] = $post->get_format();
break;
case 'geo' : // (object|false)
- if ( !$geo ) {
- $response[$key] = false;
- } else {
- $geo_data = $geo->get_geo( 'post', $post->ID );
- $response[$key] = false;
- if ( $geo_data ) {
- $geo_data = array_intersect_key( $geo_data, array( 'latitude' => true, 'longitude' => true, 'address' => true, 'public' => true ) );
- if ( $geo_data ) {
- $response[$key] = (object) array(
- 'latitude' => isset( $geo_data['latitude'] ) ? (float) $geo_data['latitude'] : 0,
- 'longitude' => isset( $geo_data['longitude'] ) ? (float) $geo_data['longitude'] : 0,
- 'address' => isset( $geo_data['address'] ) ? (string) $geo_data['address'] : '',
- );
- } else {
- $response[$key] = false;
- }
- // Private
- if ( !isset( $geo_data['public'] ) || !$geo_data['public'] ) {
- if ( 'edit' !== $context || ! $capabilities['edit_post'] ) {
- // user can't access
- $response[$key] = false;
- }
- }
- }
- }
+ $response[$key] = $post->get_geo();
break;
case 'menu_order':
- $response[$key] = (int) $post->menu_order;
+ $response[$key] = $post->get_menu_order();
break;
case 'page_template':
- $response[$key] = (string) get_post_meta( $post->ID, '_wp_page_template', true );
+ $response[$key] = $post->get_page_template();
break;
case 'publicize_URLs' :
- $publicize_URLs = array();
- $publicize = get_post_meta( $post->ID, 'publicize_results', true );
- if ( $publicize ) {
- foreach ( $publicize as $service => $data ) {
- switch ( $service ) {
- case 'twitter' :
- foreach ( $data as $datum ) {
- $publicize_URLs[] = esc_url_raw( "https://twitter.com/{$datum['user_id']}/status/{$datum['post_id']}" );
- }
- break;
- case 'fb' :
- foreach ( $data as $datum ) {
- $publicize_URLs[] = esc_url_raw( "https://www.facebook.com/permalink.php?story_fbid={$datum['post_id']}&id={$datum['user_id']}" );
- }
- break;
- }
- }
- }
- $response[$key] = (array) $publicize_URLs;
+ $response[$key] = $post->get_publicize_urls();
+ break;
+ case 'terms':
+ $response[$key] = $post->get_terms();
break;
case 'tags' :
- $response[$key] = array();
- $terms = wp_get_post_tags( $post->ID );
- foreach ( $terms as $term ) {
- if ( !empty( $term->name ) ) {
- $response[$key][$term->name] = $this->format_taxonomy( $term, 'post_tag', 'display' );
- }
- }
- $response[$key] = (object) $response[$key];
+ $response[$key] = $post->get_tags();
break;
case 'categories':
- $response[$key] = array();
- $terms = wp_get_object_terms( $post->ID, 'category', array( 'fields' => 'all' ) );
- foreach ( $terms as $term ) {
- if ( !empty( $term->name ) ) {
- $response[$key][$term->name] = $this->format_taxonomy( $term, 'category', 'display' );
- }
- }
- $response[$key] = (object) $response[$key];
+ $response[$key] = $post->get_categories();
break;
case 'attachments':
- $response[$key] = array();
- $_attachments = new WP_Query( array( 'post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'posts_per_page' => '20' ) );
- foreach ( $_attachments->posts as $attachment ) {
- $response[$key][$attachment->ID] = $this->get_media_item_v1_1( $attachment->ID );
- }
- $response['attachment_count'] = $_attachments->found_posts;
- $response[$key] = (object) $response[$key];
+ list( $attachments, $attachment_count ) = $post->get_attachments_and_count();
+ $response[$key] = $attachments;
+ $response['attachment_count'] = $attachment_count;
break;
case 'metadata' : // (array|false)
- $metadata = array();
- foreach ( (array) has_meta( $post_id ) as $meta ) {
- // Don't expose protected fields.
- $show = false;
- if ( $this->is_metadata_public( $meta['meta_key'] ) )
- $show = true;
- if ( current_user_can( 'edit_post_meta', $post_id , $meta['meta_key'] ) )
- $show = true;
-
- if ( !$show )
- continue;
-
- $metadata[] = array(
- 'id' => $meta['meta_id'],
- 'key' => $meta['meta_key'],
- 'value' => maybe_unserialize( $meta['meta_value'] ),
- );
- }
-
- if ( ! empty( $metadata ) ) {
- $response[$key] = $metadata;
- } else {
- $response[$key] = false;
- }
+ $response[$key] = $post->get_metadata();
break;
case 'meta' :
- $response[$key] = (object) array(
- 'links' => (object) array(
- 'self' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
- 'help' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'help' ),
- 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
-// 'author' => (string) $this->get_user_link( $post->post_author ),
-// 'via' => (string) $this->get_post_link( $reblog_origin_blog_id, $reblog_origin_post_id ),
- 'replies' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'replies/' ),
- 'likes' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'likes/' ),
- ),
- );
-
- // add autosave link if a more recent autosave exists
- if ( 'edit' === $context ) {
- $autosave = wp_get_post_autosave( $post_id );
- if ( $autosave && $autosave->post_modified > $post->post_modified )
- $response[$key]->links->autosave = (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ) . '/autosave';
- }
-
+ $response[$key] = $post->get_meta();
break;
case 'capabilities' :
- $response[$key] = $capabilities;
+ $response[$key] = $post->get_current_user_capabilities();
break;
case 'revisions' :
- if ( 'edit' !== $context ) {
- continue;
- }
- $revisions = array();
- $post_revisions = wp_get_post_revisions( $post->ID );
-
- foreach ( $post_revisions as $_post ) {
- $revisions[] = $_post->ID;
+ $revisions = $post->get_revisions();
+ if ( $revisions ) {
+ $response[$key] = $revisions;
}
-
- $response[$key] = $revisions;
-
break;
case 'other_URLs' :
- $other_urls = array();
-
- if ( 'publish' !== $post->post_status ) {
- $other_urls = $this->get_post_permalink_suggestions( $post->ID, $post->post_title );
- }
-
- $response[$key] = (object) $other_urls;
+ $response[$key] = $post->get_other_urls();
break;
}
}
- // WPCOM_JSON_API_Post_Endpoint::find_featured_worthy_media( $post );
- // $response['featured_media'] = self::find_featured_media( $response );
-
- unset( $GLOBALS['post'] );
return $response;
}
- // No Blog ID parameter. No Post ID parameter. Depends on globals.
- // Expects setup_postdata() to already have been run
- function get_the_post_content_for_display() {
- global $pages, $page;
-
- $old_pages = $pages;
- $old_page = $page;
-
- $content = join( "\n\n", $pages );
- $content = preg_replace( '/<!--more(.*?)?-->/', '', $content );
- $pages = array( $content );
- $page = 1;
-
- ob_start();
- the_content();
- $return = ob_get_clean();
-
- $pages = $old_pages;
- $page = $old_page;
-
- return $return;
- }
-
+ // TODO: factor this out
function get_blog_post( $blog_id, $post_id, $context = 'display' ) {
$blog_id = $this->api->get_blog_id( $blog_id );
if ( !$blog_id || is_wp_error( $blog_id ) ) {
@@ -543,26 +281,6 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
return $post;
}
- /**
- * Supporting featured media in post endpoints. Currently on for wpcom blogs
- * since it's calling WPCOM_JSON_API_Read_Endpoint methods which presently
- * rely on wpcom specific functionality.
- *
- * @param WP_Post $post
- * @return object list of featured media
- */
- public static function find_featured_media( &$post ) {
-
- if ( class_exists( 'WPCOM_JSON_API_Read_Endpoint' ) ) {
- return WPCOM_JSON_API_Read_Endpoint::find_featured_worthy_media( (array) $post );
- } else {
- return (object) array();
- }
-
- }
-
-
-
function win8_gallery_shortcode( $attr ) {
global $post;
@@ -623,90 +341,4 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
}
}
}
-
- /**
- * Returns attachment object.
- *
- * @param $attachment attachment row
- *
- * @return (object)
- */
- function get_attachment( $attachment ) {
- $metadata = wp_get_attachment_metadata( $attachment->ID );
-
- $result = array(
- 'ID' => (int) $attachment->ID,
- 'URL' => (string) wp_get_attachment_url( $attachment->ID ),
- 'guid' => (string) $attachment->guid,
- 'mime_type' => (string) $attachment->post_mime_type,
- 'width' => (int) isset( $metadata['width'] ) ? $metadata['width'] : 0,
- 'height' => (int) isset( $metadata['height'] ) ? $metadata['height'] : 0,
- );
-
- if ( isset( $metadata['duration'] ) ) {
- $result['duration'] = (int) $metadata['duration'];
- }
-
- /** This filter is documented in class.jetpack-sync.php */
- return (object) apply_filters( 'get_attachment', $result );
- }
-
- /**
- * Get post-specific user capabilities
- * @param WP_Post $post post object
- * @return array array of post-level permissions; 'publish_post', 'delete_post', 'edit_post'
- */
- function get_current_user_capabilities( $post ) {
- return array(
- 'publish_post' => current_user_can( 'publish_post', $post ),
- 'delete_post' => current_user_can( 'delete_post', $post ),
- 'edit_post' => current_user_can( 'edit_post', $post )
- );
- }
-
- /**
- * Get extra post permalink suggestions
- * @param int $postID
- * @param string $title
- * @return array array of permalink suggestions: 'permalink_URL', 'suggested_slug'
- */
- function get_post_permalink_suggestions( $postID, $title ) {
- $suggestions = array();
- list( $suggestions['permalink_URL'], $suggestions['suggested_slug'] ) = get_sample_permalink( $postID, $title );
- return $suggestions;
- }
-
- /**
- * Get post ID by name
- *
- * Attempts to match name on post title and page path
- *
- * @param string $name
- *
- * @return int|object Post ID on success, WP_Error object on failure
- **/
- protected function get_post_id_by_name( $name ) {
- $name = sanitize_title( $name );
-
- if ( ! $name ) {
- return new WP_Error( 'invalid_post', 'Invalid post', 400 );
- }
-
- $posts = get_posts( array( 'name' => $name ) );
-
- if ( ! $posts || ! isset( $posts[0]->ID ) || ! $posts[0]->ID ) {
- $page = get_page_by_path( $name );
-
- if ( ! $page ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- $post_id = $page->ID;
- } else {
- $post_id = (int) $posts[0]->ID;
- }
-
- return $post_id;
- }
-
}
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
index fe4cf85b..30c90e46 100644
--- 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
@@ -29,13 +29,6 @@ class WPCOM_JSON_API_Render_Embed_Endpoint extends WPCOM_JSON_API_Render_Endpoin
return new WP_Error( 'invalid_embed_url', 'The embed_url parameter must be a valid URL.', 400 );
}
- // in order for oEmbed to fire in the `$wp_embed->shortcode` method, we need to set a post as the current post
- $_posts = get_posts( array( 'posts_per_page' => 1, 'suppress_filters' => false ) );
- if ( ! empty( $_posts ) ) {
- global $post;
- $post = array_shift( $_posts );
- }
-
global $wp_embed;
$render = $this->process_render( array( $this, 'do_embed' ), $embed_url );
@@ -54,8 +47,4 @@ class WPCOM_JSON_API_Render_Embed_Endpoint extends WPCOM_JSON_API_Render_Endpoin
return $return;
}
- function do_embed( $embed_url ) {
- global $wp_embed;
- return $wp_embed->shortcode( array(), $embed_url );
- }
} \ No newline at end of file
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
index 273429e0..f2de7fc3 100644
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-endpoint.php
+++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-endpoint.php
@@ -8,7 +8,7 @@ abstract class WPCOM_JSON_API_Render_Endpoint extends WPCOM_JSON_API_Endpoint {
* props to o2's o2_Read_API::poll() function for inspiration.
*
* In short we figure out what scripts load for a "normal" page load by executing wp_head and wp_footer
- * then we render our shortcode (to both get our result, and to have the shortcode files enqueue their resources)
+ * then we render the embed/shortcode (to both get our result, and to have the shortcode files enqueue their resources)
* then we load wp_head and wp_footer again to see what new resources were added
* finally we find out the url to the source file and any extra info (like media or init js)
*/
@@ -96,7 +96,7 @@ abstract class WPCOM_JSON_API_Render_Endpoint extends WPCOM_JSON_API_Endpoint {
$media = esc_attr( $wp_styles->registered[ $handle ]->args );
}
- // add to an aray so we can return all this info
+ // add to an array so we can return all this info
$styles[ $handle ] = array (
'src' => $src,
'media' => $media,
@@ -121,4 +121,25 @@ abstract class WPCOM_JSON_API_Render_Endpoint extends WPCOM_JSON_API_Endpoint {
return $ver;
}
+ /**
+ * given a shortcode, process and return the result
+ */
+ function do_shortcode( $shortcode ) {
+ return do_shortcode( $shortcode );
+ }
+
+ /**
+ * given a one-line embed URL, process and return the result
+ */
+ function do_embed( $embed_url ) {
+ // in order for oEmbed to fire in the `$wp_embed->shortcode` method, we need to set a post as the current post
+ $_posts = get_posts( array( 'posts_per_page' => 1, 'suppress_filters' => false ) );
+ if ( ! empty( $_posts ) ) {
+ global $post;
+ $post = array_shift( $_posts );
+ }
+
+ global $wp_embed;
+ return $wp_embed->shortcode( array(), $embed_url );
+ }
} \ No newline at end of file
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
index 055f84d1..8b52cfde 100644
--- 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
@@ -41,10 +41,4 @@ class WPCOM_JSON_API_Render_Shortcode_Endpoint extends WPCOM_JSON_API_Render_End
return $return;
}
-
- function do_shortcode( $shortcode ) {
- $result = do_shortcode( $shortcode );
- return $result;
- }
-
} \ No newline at end of file
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
index e497caff..2bca8261 100644
--- 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
@@ -30,10 +30,10 @@ abstract class WPCOM_JSON_API_Sharing_Button_Endpoint extends WPCOM_JSON_API_End
// Status is either "disabled" or the visibility value
$response['visibility'] = $this->get_button_visibility( $button );
}
-
- if ( ! empty( $button->genericon ) ) {
+
+ if ( ! empty( $button->icon ) ) {
// Only pre-defined sharing buttons include genericon
- $response['genericon'] = $button->genericon;
+ $response['genericon'] = $button->icon;
}
if ( method_exists( $button, 'get_options' ) ) {
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
index d0218514..efcc84d5 100644
--- 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
@@ -192,7 +192,13 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
'twitter_via' => (string) get_option( 'twitter_via' ),
'jetpack-twitter-cards-site-tag' => (string) get_option( 'jetpack-twitter-cards-site-tag' ),
'eventbrite_api_token' => $eventbrite_api_token,
- 'holidaysnow' => $holiday_snow
+ 'holidaysnow' => $holiday_snow,
+ 'gmt_offset' => get_option( 'gmt_offset' ),
+ 'timezone_string' => get_option( 'timezone_string' ),
+ 'jetpack_testimonial' => (bool) get_option( 'jetpack_testimonial', '0' ),
+ 'jetpack_testimonial_posts_per_page' => (int) get_option( 'jetpack_testimonial_posts_per_page', '10' ),
+ 'jetpack_portfolio' => (bool) get_option( 'jetpack_portfolio', '0' ),
+ 'jetpack_portfolio_posts_per_page' => (int) get_option( 'jetpack_portfolio_posts_per_page', '10' ),
);
//allow future versions of this endpoint to support additional settings keys
@@ -346,11 +352,22 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
$business_plugins->activate_plugin( 'wp-google-analytics' );
break;
+ case 'jetpack_testimonial':
+ case 'jetpack_portfolio':
case 'jetpack_comment_likes_enabled':
// settings are stored as 1|0
$coerce_value = (int) $value;
if ( update_option( $key, $coerce_value ) ) {
- $updated[ $key ] = $value;
+ $updated[ $key ] = (bool) $value;
+ }
+ break;
+
+ case 'jetpack_testimonial_posts_per_page':
+ case 'jetpack_portfolio_posts_per_page':
+ // settings are stored as numeric
+ $coerce_value = (int) $value;
+ if ( update_option( $key, $coerce_value ) ) {
+ $updated[ $key ] = $coerce_value;
}
break;
@@ -388,6 +405,24 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
}
break;
+ case 'timezone_string':
+ // Map UTC+- timezones to gmt_offsets and set timezone_string to empty
+ // https://github.com/WordPress/WordPress/blob/4.4.2/wp-admin/options.php#L175
+ if ( ! empty( $value ) && preg_match( '/^UTC[+-]/', $value ) ) {
+ $gmt_offset = preg_replace( '/UTC\+?/', '', $value );
+ if ( update_option( 'gmt_offset', $gmt_offset ) ) {
+ $updated[ 'gmt_offset' ] = $gmt_offset;
+ }
+
+ $value = '';
+ }
+
+ // Always set timezone_string either with the given value or with an
+ // empty string
+ if ( update_option( $key, $value ) ) {
+ $updated[ $key ] = $value;
+ }
+ break;
default:
//allow future versions of this endpoint to support additional settings keys
@@ -410,7 +445,6 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
if ( update_option( $key, $value ) ) {
$updated[ $key ] = $value;
}
-
}
}
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
index 84a83849..7a61ce12 100644
--- 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
@@ -43,12 +43,9 @@ class WPCOM_JSON_API_Site_User_Endpoint extends WPCOM_JSON_API_Endpoint {
return $this->get_user( $user->ID );
} else if ( 'POST' === $this->api->method ) {
if ( ! current_user_can_for_blog( $blog_id, 'promote_users' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot promote users for specified site', 403 );
+ return new WP_Error( 'unauthorized_no_promote_cap', 'User cannot promote users for specified site', 403 );
}
- if ( get_current_user_id() == $user_id ) {
- return new WP_Error( 'unauthorized', 'You cannot change your own role', 403 );
- }
- return $this->update_user( $user_id );
+ return $this->update_user( $user_id, $blog_id );
} else {
return new WP_Error( 'bad_request', 'An unsupported request method was used.' );
}
@@ -69,15 +66,25 @@ class WPCOM_JSON_API_Site_User_Endpoint extends WPCOM_JSON_API_Endpoint {
*
* @return (array)
*/
- public function update_user( $user_id ) {
+ public function update_user( $user_id, $blog_id ) {
$input = $this->input();
$user['ID'] = $user_id;
- if ( ! ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
+ $is_wpcom = defined( 'IS_WPCOM' ) && IS_WPCOM;
+
+ if ( get_current_user_id() == $user_id && isset( $input['roles'] ) ) {
+ return new WP_Error( 'unauthorized', 'You cannot change your own role', 403 );
+ }
+
+ if ( $is_wpcom && $user_id !== get_current_user_id() && $user_id == wpcom_get_blog_owner( $blog_id ) ) {
+ return new WP_Error( 'unauthorized_edit_owner', 'Current user can not edit blog owner', 403 );
+ }
+
+ if ( ! $is_wpcom ) {
foreach ( $input as $key => $value ) {
if ( ! is_array( $value ) ) {
$value = trim( $value );
}
- $value = wp_unslash( $value );
+ $value = wp_unslash( $value );
switch ( $key ) {
case 'first_name':
case 'last_name':
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
index 85a1ab92..689cef88 100644
--- 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
@@ -36,7 +36,7 @@ class WPCOM_JSON_API_Update_Invites_Endpoint extends WPCOM_JSON_API_Endpoint {
'invite_key' => $invite_id,
'deleted' => $this->delete_invite(),
);
- } else {
+ } else if ( $this->api->ends_with( $this->path, '/resend' ) ) {
$returnValue = array(
'result' => $this->is_wpcom ? $this->resend_wpcom_invite() : $this->resend_self_hosted_invite()
);
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
index dcf84a35..53932601 100644
--- 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
@@ -89,6 +89,10 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
}
+ if ( isset( $input['status'] ) && 'trash' === $input['status'] && ! current_user_can( 'delete_post', $post_id ) ) {
+ return new WP_Error( 'unauthorized', 'User cannot delete post', 403 );
+ }
+
$post = get_post( $post_id );
$_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
$post_type = get_post_type_object( $_post_type );
@@ -559,7 +563,7 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
continue;
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || $this->is_metadata_public( $meta->key ) ) {
+ } 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 ) ) {
add_post_meta( $post_id, $meta->key, $meta->value );
}
@@ -568,11 +572,11 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
if ( ! isset( $meta->value ) ) {
continue;
- } 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 ) ) ) {
+ } 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 ) ) ) {
update_metadata_by_mid( 'post', $meta->id, $meta->value );
- } 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 ) ) ) {
+ } 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 ) ) ) {
update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
- } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
+ } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
update_post_meta( $post_id, $meta->key, $meta->value );
}
@@ -685,7 +689,7 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
return $featured_image;
}
- $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id );
+ $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id, 'image' );
if ( empty( $featured_image_id ) || ! is_int( $featured_image_id ) )
return false;
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
index 9f0bf598..d69c7d08 100644
--- 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
@@ -36,16 +36,21 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 );
add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) );
- }
- // 'future' is an alias for 'publish' for now
- if ( 'future' === $input['status'] ) {
- $input['status'] = 'publish';
+ if ( $this->should_load_theme_functions( $post_id ) ) {
+ $this->load_theme_functions();
+ }
}
+
if ( $new ) {
$input = $this->input( true );
+ // 'future' is an alias for 'publish' for now
+ if ( 'future' === $input['status'] ) {
+ $input['status'] = 'publish';
+ }
+
if ( 'revision' === $input['type'] ) {
if ( ! isset( $input['parent'] ) ) {
return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
@@ -94,6 +99,15 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
}
+ if ( isset( $input['status'] ) && 'trash' === $input['status'] && ! current_user_can( 'delete_post', $post_id ) ) {
+ return new WP_Error( 'unauthorized', 'User cannot delete post', 403 );
+ }
+
+ // 'future' is an alias for 'publish' for now
+ if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
+ $input['status'] = 'publish';
+ }
+
$post = get_post( $post_id );
$_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
$post_type = get_post_type_object( $_post_type );
@@ -149,26 +163,50 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
unset( $input['parent'] );
}
- $tax_input = array();
+ $input['terms'] = isset( $input['terms'] ) ? (array) $input['terms'] : array();
- foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $key => $taxonomy ) {
- if ( ! isset( $input[ $key ] ) ) {
- continue;
+ // Convert comma-separated terms to array before attempting to
+ // merge with hardcoded taxonomies
+ foreach ( $input['terms'] as $taxonomy => $terms ) {
+ if ( is_string( $terms ) ) {
+ $input['terms'][ $taxonomy ] = explode( ',', $terms );
+ } else if ( ! is_array( $terms ) ) {
+ $input['terms'][ $taxonomy ] = array();
}
+ }
- $tax_input[ $taxonomy ] = array();
+ // For each hard-coded taxonomy, merge into terms object
+ foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $taxonomy_key => $taxonomy ) {
+ if ( ! isset( $input[ $taxonomy_key ] ) ) {
+ continue;
+ }
- $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
+ if ( ! isset( $input['terms'][ $taxonomy ] ) ) {
+ $input['terms'][ $taxonomy ] = array();
+ }
- if ( is_array( $input[$key] ) ) {
- $terms = $input[$key];
- } else {
- $terms = explode( ',', $input[$key] );
+ $terms = $input[ $taxonomy_key ];
+ if ( is_string( $terms ) ) {
+ $terms = explode( ',', $terms );
+ } else if ( ! is_array( $terms ) ) {
+ continue;
}
+ $input['terms'][ $taxonomy ] = array_merge(
+ $input['terms'][ $taxonomy ],
+ $terms
+ );
+ }
+
+ $tax_input = array();
+
+ foreach ( $input['terms'] as $taxonomy => $terms ) {
+ $tax_input[ $taxonomy ] = array();
+ $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
+
foreach ( $terms as $term ) {
/**
- * `curl --data 'category[]=123'` should be interpreted as a category ID,
+ * `curl --data 'terms[category][]=123'` should be interpreted as a category ID,
* not a category whose name is '123'.
*
* Consequence: To add a category/tag whose name is '123', the client must
@@ -190,7 +228,7 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
$tax = get_taxonomy( $taxonomy );
// see https://core.trac.wordpress.org/ticket/26409
- if ( 'category' === $taxonomy && ! current_user_can( $tax->cap->edit_terms ) ) {
+ if ( $is_hierarchical && ! current_user_can( $tax->cap->edit_terms ) ) {
continue;
} else if ( ! current_user_can( $tax->cap->assign_terms ) ) {
continue;
@@ -201,10 +239,10 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
if ( ! is_wp_error( $term_info ) ) {
if ( $is_hierarchical ) {
- // Categories must be added by ID
+ // Hierarchical terms must be added by ID
$tax_input[$taxonomy][] = (int) $term_info['term_id'];
} else {
- // Tags must be added by name
+ // Non-hierarchical terms must be added by name
if ( is_int( $term ) ) {
$term = get_term( $term, $taxonomy );
$tax_input[$taxonomy][] = $term->name;
@@ -216,11 +254,11 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
}
}
- if ( isset( $input['categories'] ) && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
+ if ( isset( $input['terms']['category'] ) && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
$tax_input['category'][] = get_option( 'default_category' );
}
- unset( $input['tags'], $input['categories'] );
+ unset( $input['terms'], $input['tags'], $input['categories'] );
$insert = array();
@@ -573,7 +611,7 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
continue;
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || $this->is_metadata_public( $meta->key ) ) {
+ } 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 ) ) {
add_post_meta( $post_id, $meta->key, $meta->value );
}
@@ -582,11 +620,11 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
if ( ! isset( $meta->value ) ) {
continue;
- } 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 ) ) ) {
+ } 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 ) ) ) {
update_metadata_by_mid( 'post', $meta->id, $meta->value );
- } 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 ) ) ) {
+ } 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 ) ) ) {
update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
- } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
+ } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
update_post_meta( $post_id, $meta->key, $meta->value );
}
@@ -617,7 +655,8 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
$return['media_errors'] = $media_results['errors'];
if ( 'publish' !== $post->post_status ) {
- $return['other_URLs'] = (object) $this->get_post_permalink_suggestions( $post_id, $input['title'] );
+ $sal_site = $this->get_sal_post_by( 'ID', $post_id, $args['context'] );
+ $return['other_URLs'] = (object) $sal_site->get_permalink_suggestions( $input['title'] );
}
/** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
@@ -696,7 +735,7 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
return $featured_image;
}
- $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id );
+ $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id, 'image' );
if ( empty( $featured_image_id ) || ! is_int( $featured_image_id ) )
return false;
@@ -724,4 +763,15 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
return $_user->ID;
}
+
+ protected function should_load_theme_functions( $post_id = null ) {
+ if ( empty( $post_id ) ) {
+ $input = $this->input( true );
+ $type = $input['type'];
+ } else {
+ $type = get_post_type( $post_id );
+ }
+
+ return ! empty( $type ) && ! in_array( $type, array( 'post', 'page', 'revision' ) );
+ }
}
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
index cd7dae8b..6acef29b 100644
--- 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
@@ -11,16 +11,20 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 );
add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) );
- }
- // 'future' is an alias for 'publish' for now
- if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
- $input['status'] = 'publish';
+ if ( $this->should_load_theme_functions( $post_id ) ) {
+ $this->load_theme_functions();
+ }
}
if ( $new ) {
$input = $this->input( true );
+ // 'future' is an alias for 'publish' for now
+ if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
+ $input['status'] = 'publish';
+ }
+
if ( 'revision' === $input['type'] ) {
if ( ! isset( $input['parent'] ) ) {
return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
@@ -69,6 +73,15 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
}
+ if ( isset( $input['status'] ) && 'trash' === $input['status'] && ! current_user_can( 'delete_post', $post_id ) ) {
+ return new WP_Error( 'unauthorized', 'User cannot delete post', 403 );
+ }
+
+ // 'future' is an alias for 'publish' for now
+ if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
+ $input['status'] = 'publish';
+ }
+
$post = get_post( $post_id );
$_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
$post_type = get_post_type_object( $_post_type );
@@ -124,22 +137,54 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
unset( $input['parent'] );
}
- /* add taxonomies by name */
- $tax_input = array();
- foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $key => $taxonomy ) {
- if ( ! isset( $input[ $key ] ) ) {
- continue;
+ foreach ( array( '', '_by_id' ) as $term_key_suffix ) {
+ $term_input_key = 'terms' . $term_key_suffix;
+ if ( isset( $input[ $term_input_key ] ) ) {
+ $input[ $term_input_key ] = (array) $input[ $term_input_key ];
+ } else {
+ $input[ $term_input_key ] = array();
}
- $tax_input[ $taxonomy ] = array();
+ // Convert comma-separated terms to array before attempting to
+ // merge with hardcoded taxonomies
+ foreach ( $input[ $term_input_key ] as $taxonomy => $terms ) {
+ if ( is_string( $terms ) ) {
+ $input[ $term_input_key ][ $taxonomy ] = explode( ',', $terms );
+ } else if ( ! is_array( $terms ) ) {
+ $input[ $term_input_key ][ $taxonomy ] = array();
+ }
+ }
- $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
+ // For each hard-coded taxonomy, merge into terms object
+ foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $key_prefix => $taxonomy ) {
+ $taxonomy_key = $key_prefix . $term_key_suffix;
+ if ( ! isset( $input[ $taxonomy_key ] ) ) {
+ continue;
+ }
- if ( is_array( $input[$key] ) ) {
- $terms = $input[$key];
- } else {
- $terms = explode( ',', $input[$key] );
+ if ( ! isset( $input[ $term_input_key ][ $taxonomy ] ) ) {
+ $input[ $term_input_key ][ $taxonomy ] = array();
+ }
+
+ $terms = $input[ $taxonomy_key ];
+ if ( is_string( $terms ) ) {
+ $terms = explode( ',', $terms );
+ } else if ( ! is_array( $terms ) ) {
+ continue;
+ }
+
+ $input[ $term_input_key ][ $taxonomy ] = array_merge(
+ $input[ $term_input_key ][ $taxonomy ],
+ $terms
+ );
}
+ }
+
+ /* add terms by name */
+ $tax_input = array();
+ foreach ( $input['terms'] as $taxonomy => $terms ) {
+ $tax_input[ $taxonomy ] = array();
+ $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
foreach ( $terms as $term ) {
/**
@@ -154,7 +199,7 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
$tax = get_taxonomy( $taxonomy );
// see https://core.trac.wordpress.org/ticket/26409
- if ( 'category' === $taxonomy && ! current_user_can( $tax->cap->edit_terms ) ) {
+ if ( $is_hierarchical && ! current_user_can( $tax->cap->edit_terms ) ) {
continue;
} else if ( ! current_user_can( $tax->cap->assign_terms ) ) {
continue;
@@ -165,22 +210,18 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
if ( ! is_wp_error( $term_info ) ) {
if ( $is_hierarchical ) {
- // Categories must be added by ID
+ // Hierarchical terms must be added by ID
$tax_input[$taxonomy][] = (int) $term_info['term_id'];
} else {
- // Tags must be added by name
+ // Non-hierarchical terms must be added by name
$tax_input[$taxonomy][] = $term;
}
}
}
}
- /* add taxonomies by ID */
- foreach ( array( 'categories_by_id' => 'category', 'tags_by_id' => 'post_tag' ) as $key => $taxonomy ) {
- if ( ! isset( $input[ $key ] ) ) {
- continue;
- }
-
+ /* add terms by ID */
+ foreach ( $input['terms_by_id'] as $taxonomy => $terms ) {
// combine with any previous selections
if ( ! isset( $tax_input[ $taxonomy ] ) || ! is_array( $tax_input[ $taxonomy ] ) ) {
$tax_input[ $taxonomy ] = array();
@@ -188,12 +229,6 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
$is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
- if ( is_array( $input[$key] ) ) {
- $terms = $input[$key];
- } else {
- $terms = explode( ',', $input[$key] );
- }
-
foreach ( $terms as $term ) {
$term = (string) $term; // ctype_digit compat
if ( ! ctype_digit( $term ) ) {
@@ -215,12 +250,12 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
}
}
- if ( ( isset( $input['categories'] ) || isset( $input['categories_by_id'] ) )
- && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
+ if ( ( isset( $input['terms']['category'] ) || isset( $input['terms_by_id']['category'] ) )
+ && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
$tax_input['category'][] = get_option( 'default_category' );
}
- unset( $input['tags'], $input['categories'], $input['tags_by_id'], $input['categories_by_id'] );
+ unset( $input['terms'], $input['tags'], $input['categories'], $input['terms_by_id'], $input['tags_by_id'], $input['categories_by_id'] );
$insert = array();
@@ -573,7 +608,7 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
continue;
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || $this->is_metadata_public( $meta->key ) ) {
+ } 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 ) ) {
add_post_meta( $post_id, $meta->key, $meta->value );
}
@@ -582,11 +617,11 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
if ( ! isset( $meta->value ) ) {
continue;
- } 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 ) ) ) {
+ } 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 ) ) ) {
update_metadata_by_mid( 'post', $meta->id, $meta->value );
- } 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 ) ) ) {
+ } 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 ) ) ) {
update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
- } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
+ } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
update_post_meta( $post_id, $meta->key, $meta->value );
}
@@ -616,8 +651,9 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
if ( ! empty( $media_results['errors'] ) )
$return['media_errors'] = $media_results['errors'];
- if ( ! $new && 'publish' !== $post->post_status && isset( $input['title'] ) ) {
- $return['other_URLs'] = (object) $this->get_post_permalink_suggestions( $post_id, $input['title'] );
+ if ( 'publish' !== $return['status'] && isset( $input['title'] )) {
+ $sal_site = $this->get_sal_post_by( 'ID', $post_id, $args['context'] );
+ $return['other_URLs'] = (object) $sal_site->get_permalink_suggestions( $input['title'] );
}
/** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
@@ -625,4 +661,15 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
return $return;
}
+
+ protected function should_load_theme_functions( $post_id = null ) {
+ if ( empty( $post_id ) ) {
+ $input = $this->input( true );
+ $type = $input['type'];
+ } else {
+ $type = get_post_type( $post_id );
+ }
+
+ return ! empty( $type ) && ! in_array( $type, array( 'post', 'page', 'revision' ) );
+ }
}
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
new file mode 100644
index 00000000..499a4295
--- /dev/null
+++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-term-endpoint.php
@@ -0,0 +1,164 @@
+<?php
+/*
+ * WARNING: This file is distributed verbatim in Jetpack.
+ * There should be nothing WordPress.com specific in this file.
+ *
+ * @hide-in-jetpack
+ */
+
+class WPCOM_JSON_API_Update_Term_Endpoint extends WPCOM_JSON_API_Taxonomy_Endpoint {
+ // /sites/%s/taxonomies/%s/terms/new -> $blog_id, $taxonomy
+ // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
+ // /sites/%s/taxonomies/%s/terms/slug:%s/delete -> $blog_id, $taxonomy, $slug
+ function callback( $path = '', $blog_id = 0, $taxonomy = 'category', $slug = 0 ) {
+ $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
+ if ( is_wp_error( $blog_id ) ) {
+ return $blog_id;
+ }
+
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ $this->load_theme_functions();
+ }
+
+ $user = wp_get_current_user();
+ if ( ! $user || is_wp_error( $user ) || ! $user->ID ) {
+ return new WP_Error( 'authorization_required', 'An active access token must be used to manage taxonomies.', 403 );
+ }
+
+ $taxonomy_meta = get_taxonomy( $taxonomy );
+ if ( false === $taxonomy_meta || (
+ ! $taxonomy_meta->public &&
+ ! current_user_can( $taxonomy_meta->cap->manage_terms ) &&
+ ! current_user_can( $taxonomy_meta->cap->edit_terms ) &&
+ ! current_user_can( $taxonomy_meta->cap->delete_terms ) ) ) {
+ return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
+ }
+
+ if ( $this->api->ends_with( $path, '/delete' ) ) {
+ return $this->delete_term( $path, $blog_id, $slug, $taxonomy );
+ } else if ( $this->api->ends_with( $path, '/new' ) ) {
+ return $this->new_term( $path, $blog_id, $taxonomy );
+ }
+
+ return $this->update_term( $path, $blog_id, $slug, $taxonomy );
+ }
+
+ // /sites/%s/taxonomies/%s/terms/new -> $blog_id, $taxonomy
+ function new_term( $path, $blog_id, $taxonomy ) {
+ $args = $this->query_args();
+ $input = $this->input();
+ if ( ! is_array( $input ) || ! $input || ! strlen( $input['name'] ) ) {
+ return new WP_Error( 'invalid_input', 'Unknown data passed', 400 );
+ }
+
+ $tax = get_taxonomy( $taxonomy );
+ if ( ! current_user_can( $tax->cap->manage_terms ) ) {
+ return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
+ }
+
+ if ( ! isset( $input['parent'] ) || ! is_taxonomy_hierarchical( $taxonomy ) ) {
+ $input['parent'] = 0;
+ }
+
+ if ( $term = get_term_by( 'name', $input['name'], $taxonomy ) ) {
+ // get_term_by is not case-sensitive, but a name with different casing is allowed
+ // also, the exact same name is allowed as long as the parents are different
+ if ( $input['name'] === $term->name && $input['parent'] === $term->parent ) {
+ return new WP_Error( 'duplicate', 'A taxonomy with that name already exists', 409 );
+ }
+ }
+
+ $data = wp_insert_term( addslashes( $input['name'] ), $taxonomy, array(
+ 'description' => addslashes( $input['description'] ),
+ 'parent' => $input['parent']
+ ) );
+
+ if ( is_wp_error( $data ) ) {
+ return $data;
+ }
+
+ $term = get_term_by( 'id', $data['term_id'], $taxonomy );
+
+ $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
+ if ( ! $return || is_wp_error( $return ) ) {
+ return $return;
+ }
+
+ /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
+ do_action( 'wpcom_json_api_objects', 'terms' );
+ return $return;
+ }
+
+ // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
+ function update_term( $path, $blog_id, $slug, $taxonomy ) {
+ $tax = get_taxonomy( $taxonomy );
+ if ( ! current_user_can( $tax->cap->edit_terms ) ) {
+ return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
+ }
+
+ $term = get_term_by( 'slug', $slug, $taxonomy );
+ if ( ! $term || is_wp_error( $term ) ) {
+ return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
+ }
+
+ $args = $this->query_args();
+ $input = $this->input( false );
+ if ( ! is_array( $input ) || ! $input ) {
+ return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
+ }
+
+ $update = array();
+ if ( ! empty( $input['parent'] ) || is_taxonomy_hierarchical( $taxonomy ) ) {
+ $update['parent'] = $input['parent'];
+ }
+
+ if ( ! empty( $input['description'] ) ) {
+ $update['description'] = addslashes( $input['description'] );
+ }
+
+ if ( ! empty( $input['name'] ) ) {
+ $update['name'] = addslashes( $input['name'] );
+ }
+
+ $data = wp_update_term( $term->term_id, $taxonomy, $update );
+ $term = get_term_by( 'id', $data['term_id'], $taxonomy );
+
+ $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
+ if ( ! $return || is_wp_error( $return ) ) {
+ return $return;
+ }
+
+ /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
+ do_action( 'wpcom_json_api_objects', 'terms' );
+ return $return;
+ }
+
+ // /sites/%s/taxonomies/%s/terms/slug:%s/delete -> $blog_id, $taxonomy, $slug
+ function delete_term( $path, $blog_id, $slug, $taxonomy ) {
+ $term = get_term_by( 'slug', $slug, $taxonomy );
+ $tax = get_taxonomy( $taxonomy );
+ if ( ! current_user_can( $tax->cap->delete_terms ) ) {
+ return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
+ }
+
+ if ( ! $term || is_wp_error( $term ) ) {
+ return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
+ }
+
+ $args = $this->query_args();
+ $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
+ if ( ! $return || is_wp_error( $return ) ) {
+ return $return;
+ }
+
+ /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
+ do_action( 'wpcom_json_api_objects', 'terms' );
+
+ wp_delete_term( $term->term_id, $taxonomy );
+
+ return array(
+ 'slug' => (string) $term->slug,
+ 'success' => true
+ );
+ }
+}
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
index 3236862d..fca8173e 100644
--- 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
@@ -148,6 +148,8 @@ class Jetpack_JSON_API_Plugins_Modify_Endpoint extends Jetpack_JSON_API_Plugins_
remove_action( 'upgrader_process_complete', 'wp_version_check' );
remove_action( 'upgrader_process_complete', 'wp_update_themes' );
+ $result = false;
+
foreach ( $this->plugins as $plugin ) {
if ( ! in_array( $plugin, $plugin_updates_needed ) ) {
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
index 9ca642a6..5a5bf22b 100644
--- a/plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js
+++ b/plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js
@@ -80,6 +80,7 @@ function AtD_restore_if_proofreading() {
}
}
+/* exported AtD_unbind_proofreader_listeners */
function AtD_unbind_proofreader_listeners() {
jQuery('#save-post, #post-preview, #publish, #edButtonPreview').unbind('focus', AtD_restore_if_proofreading );
jQuery('#add_poll, #add_image, #add_video, #add_audio, #add_media').unbind('click', AtD_restore_if_proofreading );
@@ -110,7 +111,7 @@ function AtD_check(button) {
AtD_qtbutton = button;
}
- if ( !jQuery('#content').size() ) {
+ if ( !jQuery('#content').length ) {
if ( 'undefined' !== typeof callback ) {
callback( 0 );
}
diff --git a/plugins/jetpack/modules/after-the-deadline/atd.core.js b/plugins/jetpack/modules/after-the-deadline/atd.core.js
index 9ebf52e8..f62f68e7 100644
--- a/plugins/jetpack/modules/after-the-deadline/atd.core.js
+++ b/plugins/jetpack/modules/after-the-deadline/atd.core.js
@@ -6,7 +6,7 @@
* Contact : raffi@automattic.com
*/
-/* jshint sub: true, devel: true, onevar: false, smarttabs: true */
+/* jshint sub: true, devel: true, onevar: false, smarttabs: true, loopfunc: true */
/* exported EXPORTED_SYMBOLS, atd_sprintf */
/* EXPORTED_SYMBOLS is set so this file can be a JavaScript Module */
diff --git a/plugins/jetpack/modules/after-the-deadline/jquery.atd.js b/plugins/jetpack/modules/after-the-deadline/jquery.atd.js
index 7d7e7682..703edad9 100644
--- a/plugins/jetpack/modules/after-the-deadline/jquery.atd.js
+++ b/plugins/jetpack/modules/after-the-deadline/jquery.atd.js
@@ -14,7 +14,7 @@
* Contact : willis.rh@gmail.com
*/
-/* jshint onevar: false, sub: true, smarttabs: true */
+/* jshint onevar: false, sub: true, smarttabs: true, loopfunc: true */
/* global AtDCore, AtD_proofread_click_count, CSSHttpRequest, ActiveXObject */
var AtD =
diff --git a/plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js b/plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js
index 90f4aec2..34cb2e36 100644
--- a/plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js
+++ b/plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js
@@ -15,7 +15,7 @@
* Moxiecode Spell Checker plugin released under the LGPL with TinyMCE
*/
-/* jshint onevar: false, sub: true, devel: true */
+/* jshint onevar: false, sub: true, devel: true, loopfunc: true */
/* global tinymce, AtDCore, AtD_proofread_click_count */
(function()
diff --git a/plugins/jetpack/modules/carousel/jetpack-carousel.js b/plugins/jetpack/modules/carousel/jetpack-carousel.js
index c7531d2e..4601a1b5 100644
--- a/plugins/jetpack/modules/carousel/jetpack-carousel.js
+++ b/plugins/jetpack/modules/carousel/jetpack-carousel.js
@@ -947,6 +947,10 @@ jQuery(document).ready(function($) {
medium_width = parseInt( medium_size_parts[0], 10 ),
medium_height = parseInt( medium_size_parts[1], 10 );
+ // Assign max width and height.
+ args.orig_max_width = args.max_width;
+ args.orig_max_height = args.max_height;
+
// Give devices with a higher devicePixelRatio higher-res images (Retina display = 2, Android phones = 1.5, etc)
if ( 'undefined' !== typeof window.devicePixelRatio && window.devicePixelRatio > 1 ) {
args.max_width = args.max_width * window.devicePixelRatio;
@@ -968,6 +972,11 @@ jQuery(document).ready(function($) {
var origPhotonUrl = args.large_file;
if ( -1 !== largeFileIndex ) {
origPhotonUrl = args.large_file.substring( 0, largeFileIndex );
+ // If we have a really large image load a smaller version
+ // that is closer to the viewable size
+ if ( args.orig_width > args.max_width || args.orig_height > args.max_height ) {
+ origPhotonUrl += '?fit=' + args.orig_max_width + '%2C' + args.orig_max_height;
+ }
}
return origPhotonUrl;
}
diff --git a/plugins/jetpack/modules/comments/comments.php b/plugins/jetpack/modules/comments/comments.php
index 1143eb71..c66e7571 100644
--- a/plugins/jetpack/modules/comments/comments.php
+++ b/plugins/jetpack/modules/comments/comments.php
@@ -152,15 +152,11 @@ class Jetpack_Comments extends Highlander_Comments_Base {
return $avatar;
}
- if ( false === strpos( $comment->comment_author_url, '/www.facebook.com/' ) && false === strpos( $comment->comment_author_url, '/twitter.com/' ) ) {
- // It's neither FB nor Twitter - bail
- return $avatar;
- }
-
- // It's a FB or Twitter avatar
+ // Detect whether it's a Facebook or Twitter avatar
$foreign_avatar = get_comment_meta( $comment->comment_ID, 'hc_avatar', true );
- if ( empty( $foreign_avatar ) ) {
- // Can't find the avatar details - bail
+ $foreign_avatar_hostname = parse_url( $foreign_avatar, PHP_URL_HOST );
+ if ( ! $foreign_avatar_hostname ||
+ ! preg_match( '/\.?(graph\.facebook\.com|twimg\.com)$/', $foreign_avatar_hostname ) ) {
return $avatar;
}
diff --git a/plugins/jetpack/modules/contact-form/admin.php b/plugins/jetpack/modules/contact-form/admin.php
index ea7c5571..e0ef1db2 100644
--- a/plugins/jetpack/modules/contact-form/admin.php
+++ b/plugins/jetpack/modules/contact-form/admin.php
@@ -1,15 +1,4 @@
<?php
-
-function grunion_menu_alter() {
- if( is_rtl() ){
- wp_enqueue_style( 'grunion-menu-alter', plugins_url( 'css/rtl/menu-alter-rtl.css', __FILE__ ) );
- } else {
- wp_enqueue_style( 'grunion-menu-alter', plugins_url( 'css/menu-alter.css', __FILE__ ) );
- }
-}
-
-add_action( 'admin_enqueue_scripts', 'grunion_menu_alter' );
-
/**
* Add a contact form button to the post composition screen
*/
@@ -85,13 +74,6 @@ function grunion_admin_css() {
color: #D98500;
}
-#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; }
-@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) {
- #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; }
-}
-
-#icon-edit.icon32-posts-feedback { background-position: 2px 2px !important; }
-
</style>
<?php
diff --git a/plugins/jetpack/modules/contact-form/css/menu-alter.css b/plugins/jetpack/modules/contact-form/css/menu-alter.css
deleted file mode 100644
index 47ac09ce..00000000
--- a/plugins/jetpack/modules/contact-form/css/menu-alter.css
+++ /dev/null
@@ -1,73 +0,0 @@
-#menu-posts-feedback .wp-menu-image img {
- display: none;
-}
-
-#adminmenu .menu-icon-feedback div.wp-menu-image {
- background: none !important;
-}
-
-#adminmenu .menu-icon-feedback div.wp-menu-image:before {
- content: '\f175';
- margin-left: -1px;
-}
-
-.jetpack-contact-form-icon:before {
- content: '\f175';
- color: #888;
- vertical-align: text-bottom;
- font: normal 18px/1 'dashicons';
- speak: none;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.pre-mp6 #adminmenu .menu-icon-feedback:hover div.wp-menu-image,
-.pre-mp6 #adminmenu .menu-icon-feedback.wp-has-current-submenu div.wp-menu-image,
-.pre-mp6 #adminmenu .menu-icon-feedback.current div.wp-menu-image {
- background: url(../images/grunion-menu-hover.png) no-repeat 7px 7px !important;
- background-size: 15px 16px !important;
-}
-
-.pre-mp6 #adminmenu .menu-icon-feedback div.wp-menu-image {
- background: url(../images/grunion-menu.png) no-repeat 7px 7px !important;
- background-size: 15px 16px !important;
-}
-
-.pre-mp6 #adminmenu .menu-icon-feedback div.wp-menu-image:before {
- display: none;
-}
-
-.pre-mp6 .jetpack-contact-form-icon {
- background: url(../images/grunion-form.png) no-repeat;
- width: 16px;
- height: 16px;
- display: inline-block;
- vertical-align: middle;
- background-size: 13px 12px !important;
-}
-
-.pre-mp6 .jetpack-contact-form-icon:before {
- display: none;
-}
-
-@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) {
-
- .pre-mp6 #adminmenu .menu-icon-feedback:hover div.wp-menu-image,
- .pre-mp6 #adminmenu .menu-icon-feedback.wp-has-current-submenu div.wp-menu-image,
- .pre-mp6 #adminmenu .menu-icon-feedback.current div.wp-menu-image {
- background-image: url(../images/grunion-menu-hover-2x.png);
- }
-
- .pre-mp6 #adminmenu .menu-icon-feedback div.wp-menu-image {
- background-image: url(../images/grunion-menu-2x.png);
- }
-
- .pre-mp6 .jetpack-contact-form-icon {
- background-image: url(../images/grunion-form-2x.png);
- vertical-align: bottom;
- }
-
-}
diff --git a/plugins/jetpack/modules/contact-form/grunion-contact-form.php b/plugins/jetpack/modules/contact-form/grunion-contact-form.php
index 343cd2f4..cda94ccb 100644
--- a/plugins/jetpack/modules/contact-form/grunion-contact-form.php
+++ b/plugins/jetpack/modules/contact-form/grunion-contact-form.php
@@ -109,6 +109,7 @@ class Grunion_Contact_Form_Plugin {
if ( is_admin() ) {
add_action( 'admin_init', array( $this, 'download_feedback_as_csv' ) );
add_action( 'admin_footer-edit.php', array( $this, 'export_form' ) );
+ add_action( 'current_screen', array( $this, 'unread_count' ) );
}
// custom post type we'll use to keep copies of the feedback items
@@ -120,7 +121,7 @@ class Grunion_Contact_Form_Plugin {
'not_found' => __( 'No feedback found', 'jetpack' ),
'not_found_in_trash' => __( 'No feedback found', 'jetpack' )
),
- 'menu_icon' => GRUNION_PLUGIN_URL . '/images/grunion-menu.png',
+ 'menu_icon' => 'dashicons-feedback',
'show_ui' => TRUE,
'show_in_admin_bar' => FALSE,
'public' => FALSE,
@@ -191,6 +192,29 @@ class Grunion_Contact_Form_Plugin {
}
/**
+ * Display the count of new feedback entries received. It's reset when user visits the Feedback screen.
+ *
+ * @since 4.1.0
+ */
+ function unread_count( $screen ) {
+ if ( isset( $screen->post_type ) && 'feedback' == $screen->post_type ) {
+ update_option( 'feedback_unread_count', 0 );
+ } else {
+ global $menu;
+ foreach ( $menu as $index => $menu_item ) {
+ if ( 'edit.php?post_type=feedback' == $menu_item[2] ) {
+ $unread = get_option( 'feedback_unread_count', 0 );
+ if ( $unread > 0 ) {
+ $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>" : '';
+ $menu[ $index ][0] .= $unread_count;
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ /**
* Handles all contact-form POST submissions
*
* Conditionally attached to `template_redirect`
@@ -1904,6 +1928,17 @@ class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
'Reply-To: "' . $comment_author . '" <' . $reply_to_addr . ">\r\n" .
"Content-Type: text/html; charset=\"" . get_option('blog_charset') . "\"";
+ // Build feedback reference
+ $feedback_time = current_time( 'mysql' );
+ $feedback_title = "{$comment_author} - {$feedback_time}";
+ $feedback_id = md5( $feedback_title );
+
+ $all_values = array_merge( $all_values, array(
+ 'entry_title' => the_title_attribute( 'echo=0' ),
+ 'entry_permalink' => esc_url( get_permalink( get_the_ID() ) ),
+ 'feedback_id' => $feedback_id,
+ ) );
+
/** This filter is already documented in modules/contact-form/admin.php */
$subject = apply_filters( 'contact_form_subject', $contact_form_subject, $all_values );
$url = $widget ? home_url( '/' ) : get_permalink( $post->ID );
@@ -1913,8 +1948,6 @@ class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
$time = date_i18n( $date_time_format, current_time( 'timestamp' ) );
// keep a copy of the feedback as a custom post type
- $feedback_time = current_time( 'mysql' );
- $feedback_title = "{$comment_author} - {$feedback_time}";
$feedback_status = $is_spam === TRUE ? 'spam' : 'publish';
foreach ( (array) $akismet_values as $av_key => $av_value ) {
@@ -1946,14 +1979,20 @@ class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
'post_parent' => (int) $post->ID,
'post_title' => addslashes( wp_kses( $feedback_title, array() ) ),
'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
- 'post_name' => md5( $feedback_title ),
+ 'post_name' => $feedback_id,
) );
// once insert has finished we don't need this filter any more
- remove_filter( 'wp_insert_post_data', array( $plugin, 'insert_feedback_filter' ), 10, 2 );
+ remove_filter( 'wp_insert_post_data', array( $plugin, 'insert_feedback_filter' ), 10 );
update_post_meta( $post_id, '_feedback_extra_fields', $this->addslashes_deep( $extra_values ) );
+ if ( 'publish' == $feedback_status ) {
+ // Increase count of unread feedback.
+ $unread = get_option( 'feedback_unread_count', 0 ) + 1;
+ update_option( 'feedback_unread_count', $unread );
+ }
+
if ( defined( 'AKISMET_VERSION' ) ) {
update_post_meta( $post_id, '_feedback_akismet_values', $this->addslashes_deep( $akismet_values ) );
}
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-menu-2x.png b/plugins/jetpack/modules/contact-form/images/grunion-menu-2x.png
deleted file mode 100644
index e3807b1f..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-menu-2x.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index ace939af..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-menu-big-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-menu-big.png b/plugins/jetpack/modules/contact-form/images/grunion-menu-big.png
deleted file mode 100644
index c8b944b6..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-menu-big.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 97b943e9..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-menu-hover-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-menu-hover.png b/plugins/jetpack/modules/contact-form/images/grunion-menu-hover.png
deleted file mode 100644
index 6849b802..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-menu-hover.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-menu.png b/plugins/jetpack/modules/contact-form/images/grunion-menu.png
deleted file mode 100644
index 94697e6a..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-menu.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php b/plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php
index 97dc2c20..c6427bbd 100644
--- a/plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php
+++ b/plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php
@@ -31,6 +31,10 @@ foreach ( $GLOBALS['csstidy']['all_properties'] as $property => $levels ) {
}
}
+// Add `display` to the list of properties that can be used multiple times in a single selector
+$GLOBALS['csstidy']['multiple_properties'][] = 'display';
+
+// Allow vendor prefixes for any property that is allowed to be used multiple times inside a single selector
foreach ( $GLOBALS['csstidy']['multiple_properties'] as $property ) {
if ( '-' != $property[0] ) {
$GLOBALS['csstidy']['multiple_properties'][] = '-o-' . $property;
diff --git a/plugins/jetpack/modules/custom-css/custom-css.php b/plugins/jetpack/modules/custom-css/custom-css.php
index 48428e9e..88aea4fc 100644
--- a/plugins/jetpack/modules/custom-css/custom-css.php
+++ b/plugins/jetpack/modules/custom-css/custom-css.php
@@ -962,7 +962,7 @@ class Jetpack_Custom_CSS {
$safecss_post = Jetpack_Custom_CSS::get_post();
- if ( ! empty( $safecss_post ) && 0 < $safecss_post['ID'] && wp_get_post_revisions( $safecss_post['ID'] ) )
+ if ( ! empty( $safecss_post ) && 0 < $safecss_post['ID'] && wp_get_post_revisions( $safecss_post['ID'], array( 'posts_per_page' => 1 ) ) )
add_meta_box( 'revisionsdiv', __( 'CSS Revisions', 'jetpack' ), array( __CLASS__, 'revisions_meta_box' ), 'editcss', 'side' );
?>
<div class="wrap">
diff --git a/plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js b/plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js
index b1cc6e35..1ea72a51 100644
--- a/plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js
+++ b/plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js
@@ -32,7 +32,6 @@
},
checkFirst: function() {
- console.log( 'first!' );
NovaCheckBoxes.inputs.first().prop( 'checked', true );
},
@@ -40,6 +39,9 @@
if ( $( this ).is( ':checked' ) ) {
return NovaCheckBoxes.inputs.not( this ).prop( 'checked', false );
} else {
+ if ( $( this ).closest( '#nova_menuchecklist' ).find( ':checked' ).length > 0 ) {
+ return $( this ).prop( 'checked', false );
+ }
return NovaCheckBoxes.checkFirst();
}
}
diff --git a/plugins/jetpack/modules/custom-post-types/nova.php b/plugins/jetpack/modules/custom-post-types/nova.php
index a336d25b..99408557 100644
--- a/plugins/jetpack/modules/custom-post-types/nova.php
+++ b/plugins/jetpack/modules/custom-post-types/nova.php
@@ -526,9 +526,12 @@ class Nova_Restaurant {
), wp_nonce_url( $url, 'nova_move_item_down_' . $post_id ) );
$menu_item = get_post($post_id);
$this->get_menu_by_post_id( $post_id );
+ if ( $term_id = $this->get_menu_by_post_id( $post_id ) ) {
+ $term_id = $term_id->term_id;
+ }
?>
<input type="hidden" class="menu-order-value" name="nova_order[<?php echo (int) $post_id ?>]" value="<?php echo esc_attr( $menu_item->menu_order ) ?>" />
- <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 ); ?>">
+ <input type="hidden" class='nova-menu-term' name="nova_menu_term[<?php echo (int) $post_id ?>]" value="<?php echo esc_attr( $term_id ); ?>">
<span class="hide-if-js">
&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>
@@ -766,16 +769,25 @@ class Nova_Restaurant {
$term = $this->get_menu_item_menu_leaf( $post->ID );
- if ( false !== $last_term_id && $last_term_id === $term->term_id )
- return;
+ $term_id = $term instanceof WP_Term ? $term->term_id : null;
- $last_term_id = $term->term_id;
+ if ( false !== $last_term_id && $last_term_id === $term_id ) {
+ return;
+ }
- $parent_count = 0;
- $current_term = $term;
- while ( $current_term->parent ) {
- $parent_count++;
- $current_term = get_term( $current_term->parent, self::MENU_TAX );
+ if ( is_null( $term_id ) ) {
+ $last_term_id = null;
+ $term_name = '';
+ $parent_count = 0;
+ } else {
+ $last_term_id = $term->term_id;
+ $term_name = $term->name;
+ $parent_count = 0;
+ $current_term = $term;
+ while ( $current_term->parent ) {
+ $parent_count++;
+ $current_term = get_term( $current_term->parent, self::MENU_TAX );
+ }
}
$non_order_column_count = $wp_list_table->get_column_count() - 1;
@@ -786,22 +798,22 @@ class Nova_Restaurant {
$up_url = add_query_arg( array(
'action' => 'move-menu-up',
- 'term_id' => (int) $term->term_id,
- ), wp_nonce_url( $url, 'nova_move_menu_up_' . $term->term_id ) );
+ 'term_id' => (int) $term_id,
+ ), wp_nonce_url( $url, 'nova_move_menu_up_' . $term_id ) );
$down_url = add_query_arg( array(
'action' => 'move-menu-down',
- 'term_id' => (int) $term->term_id,
- ), wp_nonce_url( $url, 'nova_move_menu_down_' . $term->term_id ) );
+ 'term_id' => (int) $term_id,
+ ), wp_nonce_url( $url, 'nova_move_menu_down_' . $term_id ) );
?>
- <tr class="no-items menu-label-row" data-term_id="<?php echo esc_attr( $term->term_id ) ?>">
+ <tr class="no-items menu-label-row" data-term_id="<?php echo esc_attr( $term_id ) ?>">
<td class="colspanchange" colspan="<?php echo (int) $non_order_column_count; ?>">
<h3><?php
echo str_repeat( ' &mdash; ', (int) $parent_count );
- if ( ! is_wp_error( $term ) ) {
- echo esc_html( sanitize_term_field( 'name', $term->name, $term->term_id, self::MENU_TAX, 'display' ) );
+ if ( $term instanceof WP_Term ) {
+ echo esc_html( sanitize_term_field( 'name', $term_name, $term_id, self::MENU_TAX, 'display' ) );
edit_term_link( __( 'edit', 'jetpack' ), '<span class="edit-nova-section"><span class="dashicon dashicon-edit"></span>', '</span>', $term );
} else {
@@ -810,7 +822,7 @@ class Nova_Restaurant {
?></h3>
</td>
<td>
- <?php if ( ! is_wp_error( $term ) ) { ?>
+ <?php if ( $term instanceof WP_Term ) { ?>
<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>
<br />
<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>
diff --git a/plugins/jetpack/modules/custom-post-types/portfolios.php b/plugins/jetpack/modules/custom-post-types/portfolios.php
index 21ef1488..920fcbd2 100644
--- a/plugins/jetpack/modules/custom-post-types/portfolios.php
+++ b/plugins/jetpack/modules/custom-post-types/portfolios.php
@@ -57,6 +57,7 @@ class Jetpack_Portfolio {
add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
add_filter( sprintf( 'manage_%s_posts_columns', self::CUSTOM_POST_TYPE), array( $this, 'edit_admin_columns' ) );
add_filter( sprintf( 'manage_%s_posts_custom_column', self::CUSTOM_POST_TYPE), array( $this, 'image_column' ), 10, 2 );
+ add_action( 'customize_register', array( $this, 'customize_register' ) );
add_image_size( 'jetpack-portfolio-admin-thumb', 50, 50, true );
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) );
@@ -387,6 +388,68 @@ class Jetpack_Portfolio {
}
/**
+ * Adds portfolio section to the Customizer.
+ */
+ function customize_register( $wp_customize ) {
+ $options = get_theme_support( self::CUSTOM_POST_TYPE );
+
+ 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'] ) ) {
+ return;
+ }
+
+ $wp_customize->add_section( 'jetpack_portfolio', array(
+ 'title' => esc_html__( 'Portfolio', 'jetpack' ),
+ 'theme_supports' => self::CUSTOM_POST_TYPE,
+ 'priority' => 130,
+ ) );
+
+ if ( isset( $options[0]['title'] ) && true === $options[0]['title'] ) {
+ $wp_customize->add_setting( 'jetpack_portfolio_title', array(
+ 'default' => esc_html__( 'Projects', 'jetpack' ),
+ 'type' => 'option',
+ 'sanitize_callback' => 'sanitize_text_field',
+ 'sanitize_js_callback' => 'sanitize_text_field',
+ ) );
+
+ $wp_customize->add_control( 'jetpack_portfolio_title', array(
+ 'section' => 'jetpack_portfolio',
+ 'label' => esc_html__( 'Portfolio Archive Title', 'jetpack' ),
+ 'type' => 'text',
+ ) );
+ }
+
+ if ( isset( $options[0]['content'] ) && true === $options[0]['content'] ) {
+ $wp_customize->add_setting( 'jetpack_portfolio_content', array(
+ 'default' => '',
+ 'type' => 'option',
+ 'sanitize_callback' => 'wp_kses_post',
+ 'sanitize_js_callback' => 'wp_kses_post',
+ ) );
+
+ $wp_customize->add_control( 'jetpack_portfolio_content', array(
+ 'section' => 'jetpack_portfolio',
+ 'label' => esc_html__( 'Portfolio Archive Content', 'jetpack' ),
+ 'type' => 'textarea',
+ ) );
+ }
+
+ if ( isset( $options[0]['featured-image'] ) && true === $options[0]['featured-image'] ) {
+ $wp_customize->add_setting( 'jetpack_portfolio_featured_image', array(
+ 'default' => '',
+ 'type' => 'option',
+ 'sanitize_callback' => 'attachment_url_to_postid',
+ 'sanitize_js_callback' => 'attachment_url_to_postid',
+ 'theme_supports' => 'post-thumbnails',
+ ) );
+
+ $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'jetpack_portfolio_featured_image', array(
+ 'section' => 'jetpack_portfolio',
+ 'label' => esc_html__( 'Portfolio Archive Featured Image', 'jetpack' ),
+ ) ) );
+ }
+ }
+
+ /**
* Follow CPT reading setting on CPT archive and taxonomy pages
*/
function query_reading_setting( $query ) {
diff --git a/plugins/jetpack/modules/custom-post-types/testimonial.php b/plugins/jetpack/modules/custom-post-types/testimonial.php
index dfe9de45..9b0e0c3a 100644
--- a/plugins/jetpack/modules/custom-post-types/testimonial.php
+++ b/plugins/jetpack/modules/custom-post-types/testimonial.php
@@ -470,7 +470,7 @@ class Jetpack_Testimonial {
) );
$wp_customize->add_control( 'jetpack_testimonials[page-title]', array(
'section' => 'jetpack_testimonials',
- 'label' => esc_html__( 'Testimonial Page Title', 'jetpack' ),
+ 'label' => esc_html__( 'Testimonial Archive Title', 'jetpack' ),
'type' => 'text',
) );
@@ -482,7 +482,7 @@ class Jetpack_Testimonial {
$wp_customize->add_control( new Jetpack_Testimonial_Textarea_Control( $wp_customize, 'jetpack_testimonials[page-content]', array(
'section' => 'jetpack_testimonials',
'settings' => 'jetpack_testimonials[page-content]',
- 'label' => esc_html__( 'Testimonial Page Content', 'jetpack' ),
+ 'label' => esc_html__( 'Testimonial Archive Content', 'jetpack' ),
) ) );
$wp_customize->add_setting( 'jetpack_testimonials[featured-image]', array(
@@ -493,7 +493,7 @@ class Jetpack_Testimonial {
) );
$wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'jetpack_testimonials[featured-image]', array(
'section' => 'jetpack_testimonials',
- 'label' => esc_html__( 'Testimonial Page Featured Image', 'jetpack' ),
+ 'label' => esc_html__( 'Testimonial Archive Featured Image', 'jetpack' ),
) ) );
// The featured image control doesn't display properly in the Customizer unless we coerce
diff --git a/plugins/jetpack/modules/gravatar-hovercards.php b/plugins/jetpack/modules/gravatar-hovercards.php
index 33897ee1..d96fcba0 100644
--- a/plugins/jetpack/modules/gravatar-hovercards.php
+++ b/plugins/jetpack/modules/gravatar-hovercards.php
@@ -81,7 +81,7 @@ jQuery( function($) {
}
} ).parents( 'tr' );
var ftr = tr.parents( 'table' ).find( 'tr:first' );
- if ( ftr.size() && !ftr.find( '#gravatar_disable_hovercards' ).size() ) {
+ if ( ftr.length && !ftr.find( '#gravatar_disable_hovercards' ).length ) {
ftr.after( tr );
}
} );
diff --git a/plugins/jetpack/modules/infinite-scroll.php b/plugins/jetpack/modules/infinite-scroll.php
index 81cb271c..20d326e4 100644
--- a/plugins/jetpack/modules/infinite-scroll.php
+++ b/plugins/jetpack/modules/infinite-scroll.php
@@ -95,7 +95,8 @@ class Jetpack_Infinite_Scroll_Extras {
* @return html
*/
public function setting_google_analytics() {
- 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>';
+ 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>';
+ 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>';
}
/**
diff --git a/plugins/jetpack/modules/infinite-scroll/infinity.js b/plugins/jetpack/modules/infinite-scroll/infinity.js
index b19817db..d2827a30 100644
--- a/plugins/jetpack/modules/infinite-scroll/infinity.js
+++ b/plugins/jetpack/modules/infinite-scroll/infinity.js
@@ -629,6 +629,20 @@ Scroller.prototype.updateURL = function( page ) {
}
/**
+ * Pause scrolling.
+ */
+Scroller.prototype.pause = function() {
+ this.disabled = true;
+};
+
+/**
+ * Resume scrolling.
+ */
+Scroller.prototype.resume = function() {
+ this.disabled = false;
+};
+
+/**
* Ready, set, go!
*/
$( document ).ready( function() {
diff --git a/plugins/jetpack/modules/infinite-scroll/infinity.php b/plugins/jetpack/modules/infinite-scroll/infinity.php
index 4d4043cc..0aba8d22 100644
--- a/plugins/jetpack/modules/infinite-scroll/infinity.php
+++ b/plugins/jetpack/modules/infinite-scroll/infinity.php
@@ -331,7 +331,7 @@ class The_Neverending_Home_Page {
return;
// Add the setting field [infinite_scroll] and place it in Settings > Reading
- add_settings_field( self::$option_name_enabled, '<span id="infinite-scroll-options">' . __( 'To infinity and beyond', 'jetpack' ) . '</span>', array( $this, 'infinite_setting_html' ), 'reading' );
+ 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' );
register_setting( 'reading', self::$option_name_enabled, 'esc_attr' );
}
@@ -346,7 +346,8 @@ class The_Neverending_Home_Page {
if ( self::get_settings()->footer_widgets || 'click' == self::get_settings()->requested_type ) {
echo '<label>' . $notice . '</label>';
} else {
- 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>';
+ 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>';
+ echo '<p class="description">' . sprintf( esc_html__( 'Shows %s posts on each load.', 'jetpack' ), number_format_i18n( self::get_settings()->posts_per_page ) ) . '</p>';
}
}
diff --git a/plugins/jetpack/modules/likes.php b/plugins/jetpack/modules/likes.php
index cb9c4779..33daccec 100644
--- a/plugins/jetpack/modules/likes.php
+++ b/plugins/jetpack/modules/likes.php
@@ -19,7 +19,7 @@ Jetpack::dns_prefetch( array(
) );
class Jetpack_Likes {
- public $version = '20151215';
+ public $version = '20160429';
public static function init() {
static $instance = NULL;
@@ -320,7 +320,7 @@ class Jetpack_Likes {
header = table.prevAll( 'h3:first' ),
newParent = $( '#moderation_notify' ).parent( 'label' ).parent();
- if ( !table.size() || !header.size() || !newParent.size() ) {
+ if ( !table.length || !header.length || !newParent.length ) {
return;
}
diff --git a/plugins/jetpack/modules/likes/queuehandler.js b/plugins/jetpack/modules/likes/queuehandler.js
index 031bb0df..ef67dc18 100644
--- a/plugins/jetpack/modules/likes/queuehandler.js
+++ b/plugins/jetpack/modules/likes/queuehandler.js
@@ -1,4 +1,4 @@
-/* global pm, wpcom_reblog */
+/* global pm, wpcom_reblog, JSON */
var jetpackLikesWidgetQueue = [];
var jetpackLikesWidgetBatch = [];
diff --git a/plugins/jetpack/modules/manage.php b/plugins/jetpack/modules/manage.php
index f9249144..e084e9d4 100644
--- a/plugins/jetpack/modules/manage.php
+++ b/plugins/jetpack/modules/manage.php
@@ -7,9 +7,9 @@
* Recommendation Order: 3
* First Introduced: 3.4
* Requires Connection: Yes
- * Auto Activate: No
+ * Auto Activate: Yes
* Module Tags: Centralized Management, Recommended
- * Feature: Recommended, Jumpstart
+ * Feature: Recommended
* Additional Search Queries: manage, management, remote
*/
diff --git a/plugins/jetpack/modules/publicize/ui.php b/plugins/jetpack/modules/publicize/ui.php
index 92551f1b..4f918739 100644
--- a/plugins/jetpack/modules/publicize/ui.php
+++ b/plugins/jetpack/modules/publicize/ui.php
@@ -23,7 +23,17 @@ class Publicize_UI {
function init() {
// Show only to users with the capability required to manage their Publicize connections.
- if ( ! current_user_can( 'publish_posts' ) ) {
+ /**
+ * 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.
+ *
+ * @module publicize
+ *
+ * @since 4.1.0
+ *
+ * @param string $capability User capability needed to use publicize
+ */
+ $capability = apply_filters( 'jetpack_publicize_capability', 'publish_posts' );
+ if ( ! current_user_can( $capability ) ) {
return;
}
@@ -312,7 +322,7 @@ class Publicize_UI {
<script type="text/javascript">
jQuery( function($) {
var wpasTitleCounter = $( '#wpas-title-counter' ),
- wpasTwitterCheckbox = $( '.wpas-submit-twitter' ).size(),
+ wpasTwitterCheckbox = $( '.wpas-submit-twitter' ).length,
wpasTitle = $('#wpas-title').keyup( function() {
var length = wpasTitle.val().length;
wpasTitleCounter.text( length );
@@ -338,7 +348,7 @@ jQuery( function($) {
$('#publicize-form').slideDown( 'fast', function() {
wpasTitle.focus();
if ( !wpasTitle.text() ) {
- var url = $('#shortlink').size() ? $('#shortlink').val() : '';
+ var url = $('#shortlink').length ? $('#shortlink').val() : '';
var defaultMessage = $.trim( '<?php printf( $default_prefix, 'url' ); printf( $default_message, '$("#title").val()', 'url' ); printf( $default_suffix, 'url' ); ?>' );
diff --git a/plugins/jetpack/modules/related-posts/jetpack-related-posts.php b/plugins/jetpack/modules/related-posts/jetpack-related-posts.php
index d61d4e75..5a5d1ae5 100644
--- a/plugins/jetpack/modules/related-posts/jetpack-related-posts.php
+++ b/plugins/jetpack/modules/related-posts/jetpack-related-posts.php
@@ -468,10 +468,10 @@ EOT;
var update_preview = function() {
var html = '';
- if ( $( 'input[name="jetpack_relatedposts[show_headline]"]:checked' ).size() ) {
+ if ( $( 'input[name="jetpack_relatedposts[show_headline]"]:checked' ).length ) {
html += '$related_headline';
}
- if ( $( 'input[name="jetpack_relatedposts[show_thumbnails]"]:checked' ).size() ) {
+ if ( $( 'input[name="jetpack_relatedposts[show_thumbnails]"]:checked' ).length ) {
html += '$related_with_images';
} else {
html += '$related_without_images';
diff --git a/plugins/jetpack/modules/related-posts/related-posts.css b/plugins/jetpack/modules/related-posts/related-posts.css
index 987b45db..8aaeb94a 100644
--- a/plugins/jetpack/modules/related-posts/related-posts.css
+++ b/plugins/jetpack/modules/related-posts/related-posts.css
@@ -105,6 +105,7 @@
left:0;
right:0;
display:block;
+ border-bottom: 0;
}
#jp-relatedposts .jp-relatedposts-items p {
diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css b/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css
index f4e1b366..a0f428af 100644
--- a/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css
+++ b/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css
@@ -101,7 +101,7 @@ li.service span:before {
color: #555;
display: inline-block;
-webkit-font-smoothing: antialiased;
- font: normal 16px/1 'Noticons', 'Genericons';
+ font: normal 18px/1 'social-logos';
vertical-align: top;
position: relative;
top: 1px;
@@ -134,9 +134,6 @@ li.service.share-tumblr span:before {
li.service.share-pocket span:before {
content: '\f224';
}
-li.service.share-skype span:before {
- content: '\f220';
-}
li.service.share-pinterest span:before {
content: '\f209';
}
@@ -144,12 +141,20 @@ li.service.share-google-plus-1 span:before {
content: '\f218';
}
li.service.share-facebook span:before {
- content: '\f204';
+ content: '\f203';
}
li.service.share-press-this span:before { /* Fixme: remove this button in favor of reblog */
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';
+}
/**
* Preview section
@@ -311,8 +316,7 @@ body.settings_page_sharing .advanced input[type=submit] {
background: url(images/linkedin-smart.png) no-repeat top center;
background-size: 99px 18px;
width:99px;
- height:18px;
- margin-top: 1px;
+ height:20px;
}
.preview-google-plus-1 .option-smart-on {
@@ -349,7 +353,49 @@ body.settings_page_sharing .advanced input[type=submit] {
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@2x.png);
+ }
+ .preview-reddit .option-smart-on {
+ background-image: url(images/smart-reddit@2x.png);
+ }
+
+ .preview-facebook .option-smart-on {
+ background-image: url(images/smart-like@2x.png);
+ }
+
+ .preview-twitter .option-smart-on {
+ background-image: url(images/smart-twitter@2x.png?1);
+ }
+
+ .preview-linkedin .option-smart-on {
+ background-image: url(images/linkedin-smart@2x.png);
+ }
+
+ .preview-google-plus-1 .option-smart-on {
+ background-image: url(images/smart-googleplus1@2x.png);
+ }
+
+ .preview-tumblr .option-smart-on {
+ background-image: url(images/smart-tumblr@2x.png);
+ }
+
+ .preview-pinterest .option-smart-on {
+ background-image: url(images/smart-pinterest@2x.png);
+ }
+
+ .preview-pocket .option-smart-on {
+ background-image: url(images/smart-pocket@2x.png);
+ }
+
+ .preview-skype .option-smart-on {
+ background-image: url(images/smart-skype@2x.png);
+ }
+}
/**
* Overflow sharing dialog
diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css b/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css
index 1807d0a6..0b56d04a 100644
--- a/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css
+++ b/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css
@@ -1 +1 @@
-#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.settings_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:before{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{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%;padding: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: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 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:inline-block;overflow:hidden;width:0;text-indent:100%} \ No newline at end of file
+#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.settings_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{content:'\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{font-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%;padding: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:20px}.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@2x.png)}.preview-reddit .option-smart-on{background-image:url(images/smart-reddit@2x.png)}.preview-facebook .option-smart-on{background-image:url(images/smart-like@2x.png)}.preview-twitter .option-smart-on{background-image:url(images/smart-twitter@2x.png?1)}.preview-linkedin .option-smart-on{background-image:url(images/linkedin-smart@2x.png)}.preview-google-plus-1 .option-smart-on{background-image:url(images/smart-googleplus1@2x.png)}.preview-tumblr .option-smart-on{background-image:url(images/smart-tumblr@2x.png)}.preview-pinterest .option-smart-on{background-image:url(images/smart-pinterest@2x.png)}.preview-pocket .option-smart-on{background-image:url(images/smart-pocket@2x.png)}.preview-skype .option-smart-on{background-image:url(images/smart-skype@2x.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{display:inline-block;overflow:hidden;width:0;text-indent:100%} \ No newline at end of file
diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing.css b/plugins/jetpack/modules/sharedaddy/admin-sharing.css
index c61df08e..3702d08c 100644
--- a/plugins/jetpack/modules/sharedaddy/admin-sharing.css
+++ b/plugins/jetpack/modules/sharedaddy/admin-sharing.css
@@ -101,7 +101,7 @@ li.service span:before {
color: #555;
display: inline-block;
-webkit-font-smoothing: antialiased;
- font: normal 16px/1 'Noticons', 'Genericons';
+ font: normal 18px/1 'social-logos';
vertical-align: top;
position: relative;
top: 1px;
@@ -134,9 +134,6 @@ li.service.share-tumblr span:before {
li.service.share-pocket span:before {
content: '\f224';
}
-li.service.share-skype span:before {
- content: '\f220';
-}
li.service.share-pinterest span:before {
content: '\f209';
}
@@ -144,12 +141,20 @@ li.service.share-google-plus-1 span:before {
content: '\f218';
}
li.service.share-facebook span:before {
- content: '\f204';
+ content: '\f203';
}
li.service.share-press-this span:before { /* Fixme: remove this button in favor of reblog */
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';
+}
/**
* Preview section
@@ -311,8 +316,7 @@ body.settings_page_sharing .advanced input[type=submit] {
background: url(images/linkedin-smart.png) no-repeat top center;
background-size: 99px 18px;
width:99px;
- height:18px;
- margin-top: 1px;
+ height:20px;
}
.preview-google-plus-1 .option-smart-on {
@@ -349,7 +353,49 @@ body.settings_page_sharing .advanced input[type=submit] {
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@2x.png);
+ }
+ .preview-reddit .option-smart-on {
+ background-image: url(images/smart-reddit@2x.png);
+ }
+
+ .preview-facebook .option-smart-on {
+ background-image: url(images/smart-like@2x.png);
+ }
+
+ .preview-twitter .option-smart-on {
+ background-image: url(images/smart-twitter@2x.png?1);
+ }
+
+ .preview-linkedin .option-smart-on {
+ background-image: url(images/linkedin-smart@2x.png);
+ }
+
+ .preview-google-plus-1 .option-smart-on {
+ background-image: url(images/smart-googleplus1@2x.png);
+ }
+
+ .preview-tumblr .option-smart-on {
+ background-image: url(images/smart-tumblr@2x.png);
+ }
+
+ .preview-pinterest .option-smart-on {
+ background-image: url(images/smart-pinterest@2x.png);
+ }
+
+ .preview-pocket .option-smart-on {
+ background-image: url(images/smart-pocket@2x.png);
+ }
+
+ .preview-skype .option-smart-on {
+ background-image: url(images/smart-skype@2x.png);
+ }
+}
/**
* Overflow sharing dialog
diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing.js b/plugins/jetpack/modules/sharedaddy/admin-sharing.js
index ad30eb6f..831c96a2 100644
--- a/plugins/jetpack/modules/sharedaddy/admin-sharing.js
+++ b/plugins/jetpack/modules/sharedaddy/admin-sharing.js
@@ -123,7 +123,12 @@
$( '#live-preview div.sharedaddy' ).addClass( 'sd-social-icon' );
} else if ( 'official' === button_style ) {
$( '#live-preview ul.preview .advanced, .sharing-hidden .inner ul .advanced' ).each( function( /*i*/ ) {
- if ( !$( this ).hasClass( 'preview-press-this' ) && !$( this ).hasClass( 'preview-email' ) && !$( this ).hasClass( 'preview-print' ) && !$( this ).hasClass( 'share-custom' ) ) {
+ if ( !$( this ).hasClass( 'preview-press-this' ) &&
+ !$( this ).hasClass( 'preview-email' ) &&
+ !$( this ).hasClass( 'preview-print' ) &&
+ !$( this ).hasClass( 'preview-telegram' ) &&
+ !$( this ).hasClass( 'preview-jetpack-whatsapp' ) &&
+ !$( this ).hasClass( 'share-custom' ) ) {
$( this ).find( '.option a span' ).html( '' ).parent().removeClass( 'sd-button' ).parent().attr( 'class', 'option option-smart-on' );
}
} );
@@ -287,15 +292,15 @@
$( '.service' ).on( 'keydown', function ( e ) {
// Reposition if one of the directional keys is pressed
- switch ( e.keyCode ) {
- case 13: keyboardDragDrop( $( this ) ); break; // Enter
- case 32: keyboardDragDrop( $( this ) ); break; // Space
- case 37: keyboardChangeOrder( $( this ), 'left' ); break; // Left
- case 39: keyboardChangeOrder( $( this ), 'right' ); break; // Right
- default: return true; // Exit and bubble
- }
-
- e.preventDefault();
+ switch ( e.keyCode ) {
+ case 13: keyboardDragDrop( $( this ) ); break; // Enter
+ case 32: keyboardDragDrop( $( this ) ); break; // Space
+ case 37: keyboardChangeOrder( $( this ), 'left' ); break; // Left
+ case 39: keyboardChangeOrder( $( this ), 'right' ); break; // Right
+ default: return true; // Exit and bubble
+ }
+
+ e.preventDefault();
});
function keyboardChangeOrder( $this, dir ) {
@@ -346,7 +351,7 @@
// Add focus
nextSibling.next().focus();
}
-
+
//Save changes
save_services();
}
@@ -370,7 +375,7 @@
// Move it to the appropriate area and add focus back to service
$( '.' + dropzone ).prepend( thisService ).find( 'li:first-child' ).focus();
-
+
//Save changes
save_services();
}
diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing.min.css b/plugins/jetpack/modules/sharedaddy/admin-sharing.min.css
index ca0413da..b0e172c2 100644
--- a/plugins/jetpack/modules/sharedaddy/admin-sharing.min.css
+++ b/plugins/jetpack/modules/sharedaddy/admin-sharing.min.css
@@ -1 +1 @@
-#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_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:before{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{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%;padding: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: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-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}.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-block;overflow:hidden;width:0;text-indent:100%} \ No newline at end of file
+#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_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{content:'\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{font-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%;padding: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}.preview-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@2x.png)}.preview-reddit .option-smart-on{background-image:url(images/smart-reddit@2x.png)}.preview-facebook .option-smart-on{background-image:url(images/smart-like@2x.png)}.preview-twitter .option-smart-on{background-image:url(images/smart-twitter@2x.png?1)}.preview-linkedin .option-smart-on{background-image:url(images/linkedin-smart@2x.png)}.preview-google-plus-1 .option-smart-on{background-image:url(images/smart-googleplus1@2x.png)}.preview-tumblr .option-smart-on{background-image:url(images/smart-tumblr@2x.png)}.preview-pinterest .option-smart-on{background-image:url(images/smart-pinterest@2x.png)}.preview-pocket .option-smart-on{background-image:url(images/smart-pocket@2x.png)}.preview-skype .option-smart-on{background-image:url(images/smart-skype@2x.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:inline-block;overflow:hidden;width:0;text-indent:100%} \ No newline at end of file
diff --git a/plugins/jetpack/modules/sharedaddy/sharing-service.php b/plugins/jetpack/modules/sharedaddy/sharing-service.php
index 8966600a..a5513299 100644
--- a/plugins/jetpack/modules/sharedaddy/sharing-service.php
+++ b/plugins/jetpack/modules/sharedaddy/sharing-service.php
@@ -44,18 +44,20 @@ class Sharing_Service {
// if you update this list, please update the REST API tests
// in bin/tests/api/suites/SharingTest.php
$services = array(
- 'email' => 'Share_Email',
- 'print' => 'Share_Print',
- 'facebook' => 'Share_Facebook',
- 'linkedin' => 'Share_LinkedIn',
- 'reddit' => 'Share_Reddit',
- 'twitter' => 'Share_Twitter',
- 'press-this' => 'Share_PressThis',
- 'google-plus-1' => 'Share_GooglePlus1',
- 'tumblr' => 'Share_Tumblr',
- 'pinterest' => 'Share_Pinterest',
- 'pocket' => 'Share_Pocket',
- 'skype' => 'Share_Skype',
+ 'email' => 'Share_Email',
+ 'print' => 'Share_Print',
+ 'facebook' => 'Share_Facebook',
+ 'linkedin' => 'Share_LinkedIn',
+ 'reddit' => 'Share_Reddit',
+ 'twitter' => 'Share_Twitter',
+ 'press-this' => 'Share_PressThis',
+ 'google-plus-1' => 'Share_GooglePlus1',
+ 'tumblr' => 'Share_Tumblr',
+ 'pinterest' => 'Share_Pinterest',
+ 'pocket' => 'Share_Pocket',
+ 'telegram' => 'Share_Telegram',
+ 'jetpack-whatsapp' => 'Jetpack_Share_WhatsApp',
+ 'skype' => 'Share_Skype',
);
if ( $include_custom ) {
@@ -557,7 +559,7 @@ function sharing_add_header() {
if ( count( $enabled['all'] ) > 0 && sharing_maybe_enqueue_scripts() ) {
wp_enqueue_style( 'sharedaddy', plugin_dir_url( __FILE__ ) .'sharing.css', array(), JETPACK__VERSION );
- wp_enqueue_style( 'genericons' );
+ wp_enqueue_style( 'social-logos' );
}
}
diff --git a/plugins/jetpack/modules/sharedaddy/sharing-sources.php b/plugins/jetpack/modules/sharedaddy/sharing-sources.php
index 5edb4c09..1fc6cef0 100644
--- a/plugins/jetpack/modules/sharedaddy/sharing-sources.php
+++ b/plugins/jetpack/modules/sharedaddy/sharing-sources.php
@@ -512,7 +512,7 @@ class Share_Email extends Sharing_Source {
?>
<img style="float: right; display: none" class="loading" src="<?php
- /** This filter is documented in modules/shortcodes/audio.php */
+ /** This filter is documented in modules/stats.php */
echo apply_filters( 'jetpack_static_url', plugin_dir_url( __FILE__ ) . 'images/loading.gif' ); ?>" alt="loading" width="16" height="16" />
<input type="submit" value="<?php esc_attr_e( 'Send Email', 'jetpack' ); ?>" class="sharing_send" />
<a rel="nofollow" href="#cancel" class="sharing_cancel"><?php _e( 'Cancel', 'jetpack' ); ?></a>
@@ -1602,6 +1602,49 @@ class Share_Pocket extends Sharing_Source {
}
+class Share_Telegram extends Sharing_Source {
+ public $shortname = 'telegram';
+
+ public function __construct( $id, array $settings ) {
+ parent::__construct( $id, $settings );
+ }
+
+ public function get_name() {
+ return __( 'Telegram', 'jetpack' );
+ }
+ public function process_request( $post, array $post_data ) {
+ // Record stats
+ parent::process_request( $post, $post_data );
+ $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 ) ) );
+ wp_redirect( $telegram_url );
+ exit;
+ }
+
+ public function get_display( $post ) {
+ return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Telegram', 'share to', 'jetpack' ), __( 'Click to share on Telegram', 'jetpack' ), 'share=telegram' );
+ }
+
+ function display_footer() {
+ $this->js_dialog( $this->shortname, array( 'width' => 450, 'height' => 450 ) );
+ }
+}
+
+class Jetpack_Share_WhatsApp extends Sharing_Source {
+ public $shortname = 'jetpack-whatsapp';
+
+ public function __construct( $id, array $settings ) {
+ parent::__construct( $id, $settings );
+ }
+
+ public function get_name() {
+ return __( 'WhatsApp', 'jetpack' );
+ }
+
+ public function get_display( $post ) {
+ 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' ) );
+ }
+}
+
class Share_Skype extends Sharing_Source {
public $shortname = 'skype';
public $genericon = '\f220';
diff --git a/plugins/jetpack/modules/sharedaddy/sharing.css b/plugins/jetpack/modules/sharedaddy/sharing.css
index 3d6565bf..06845483 100644
--- a/plugins/jetpack/modules/sharedaddy/sharing.css
+++ b/plugins/jetpack/modules/sharedaddy/sharing.css
@@ -114,12 +114,14 @@ body.highlander-dark h3.sd-title:before {
vertical-align: top;
}
+.sd-social-official .sd-content ul li a.sd-button>span {
+ line-height: 17px;
+}
.sd-social-official .sd-content>ul>li>a.sd-button:before,
.sd-social-official .sd-content>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 .sharing-hidden .inner>ul>li .digg_button>a:before {
margin-bottom: -1px;
- top: 0;
}
.sd-social-icon .sd-content ul li a.sd-button:hover,
@@ -145,18 +147,39 @@ body.highlander-dark h3.sd-title:before {
box-shadow: inset 0 1px 0 rgba(0,0,0,.16);
}
-
/* All icons */
.sd-content ul li a.sd-button:before {
display: inline-block;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
- font: normal 16px/1 'Genericons';
+ font: normal 18px/1 'social-logos';
vertical-align: top;
- position: relative;
- top: 3px;
text-align: center;
}
+/* text + icon styles should have relative and top position */
+.sd-social-icon-text ul li a.sd-button:before {
+ position: relative;
+ top: 2px;
+}
+
+/* Make it look great in Chrome and Safari */
+@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;
+}
+/* Make it look great in Chrome and Safari */
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ .sd-social-official ul li a.sd-button:before {
+ top: 0px;
+ }
+}
.sd-content ul li {
margin: 0 !important;
@@ -190,8 +213,20 @@ body .sd-content ul li.share-custom.no-icon a span {
.sd-social-icon .sd-content ul li a.share-more {
position: relative;
- top: 2px;
+ top: -4px;
}
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ .sd-social-icon .sd-content ul li a.share-more {
+ top: 2px;
+ }
+}
+/* Firefox specific hack to make the share more button look better on Firefox. */
+@-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;
}
@@ -235,25 +270,20 @@ body .sd-content ul li.share-custom.no-icon a span {
.sd-social-text .sd-content ul li.share-tumblr a:before,
.sd-content ul li.share-tumblr div.option.option-smart-off a:before,
.sd-social-icon-text .sd-content li.share-tumblr a:before {
- content: '\f214';
+ content: '\f607';
}
+
.sd-social-icon .sd-content ul li.share-pocket a:before,
.sd-social-text .sd-content ul li.share-pocket a:before,
.sd-content ul li.share-pocket div.option.option-smart-off a:before,
.sd-social-icon-text .sd-content li.share-pocket a:before {
content: '\f224';
}
-.sd-social-icon .sd-content ul li.share-skype a:before,
-.sd-social-text .sd-content ul li.share-skype a:before,
-.sd-content ul li.share-skype div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-skype a:before {
- content: '\f220';
-}
.sd-social-icon .sd-content ul li.share-pinterest a:before,
.sd-social-text .sd-content ul li.share-pinterest a:before,
.sd-content ul li.share-pinterest div.option.option-smart-off a:before,
.sd-social-icon-text .sd-content li.share-pinterest a:before {
- content: '\f209';
+ content: '\f210';
}
.sd-social-icon .sd-content ul li.share-google-plus-1 a:before,
.sd-social-text .sd-content ul li.share-google-plus-1 a:before,
@@ -265,7 +295,7 @@ body .sd-content ul li.share-custom.no-icon a span {
.sd-social-text .sd-content ul li.share-facebook a:before,
.sd-content ul li.share-facebook div.option.option-smart-off a:before,
.sd-social-icon-text .sd-content li.share-facebook a:before {
- content: '\f204';
+ content: '\f203';
}
.sd-social-icon .sd-content ul li.share-press-this a:before,
.sd-social-text .sd-content ul li.share-press-this a:before,
@@ -277,6 +307,22 @@ body .sd-content ul li.share-custom.no-icon a span {
.sd-social-official .sd-content li.share-press-this a:before {
color: #2ba1cb;
}
+.sd-social-icon .sd-content ul li.share-telegram a:before,
+.sd-social-text .sd-content ul li.share-telegram a:before,
+.sd-content ul li.share-telegram div.option.option-smart-off a:before,
+.sd-social-icon-text .sd-content li.share-telegram a:before,
+.sd-social-official .sd-content li.share-telegram a:before {
+ content: '\f606';
+}
+.sd-social-official .sd-content li.share-telegram a:before {
+ color: #0088cc;
+}
+.sd-social-icon .sd-content ul li.share-skype a:before,
+.sd-social-text .sd-content ul li.share-skype a:before,
+.sd-content ul li.share-skype div.option.option-smart-off a:before,
+.sd-social-icon-text .sd-content li.share-skype a:before {
+ content: '\f220';
+}
.sd-social-icon .sd-content ul a.share-more:before,
.sd-social-text .sd-content ul a.share-more:before,
.sd-content ul li.advanced a.share-more:before,
@@ -288,6 +334,20 @@ body .sd-content ul li.share-custom.no-icon a span {
color: #2ba1cb;
}
+.sd-social-icon .sd-content ul li.share-jetpack-whatsapp a:before,
+.sd-social-text .sd-content ul li.share-jetpack-whatsapp a:before,
+.sd-content ul li.share-jetpack-whatsapp div.option.option-smart-off 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 {
+ 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;
+}
/* Share count */
.sd-social .sd-button .share-count {
@@ -339,9 +399,6 @@ body .sd-content ul li.share-custom.no-icon a span {
width: 98px;
}
-.sd-social-official .sd-content .skypeShare {
- width: 55px;
-}
/* Individual official buttons */
.googleplus1_button .g-plus {
@@ -356,6 +413,10 @@ body .sd-content ul li.share-custom.no-icon a span {
margin: 0 !important;
}
+.sd-social-official .sd-content .share-skype {
+ width: 55px;
+}
+
body .sd-social-official li.share-print ,
body .sd-social-official li.share-email a,
body .sd-social-official li.share-custom a,
@@ -394,9 +455,6 @@ body .sd-social-icon .sd-content li.share-custom a span {
width: 0;
}
-body .sd-content li.share-custom a:hover span {
-}
-
body .sd-social-icon .sd-content li.share-custom a span {
padding-left: 16px !important;
}
@@ -423,8 +481,8 @@ body .sd-social-icon .sd-content li.share-custom a span {
.sd-social-official .sd-content .sharing-hidden ul>li.share-end {
clear: both;
- margin: 0;
- height: 0;
+ margin: 0 !important;
+ height: 0 !important;
}
.sharing-hidden .inner:before, .sharing-hidden .inner:after {
@@ -465,7 +523,7 @@ body .sd-social-icon .sd-content li.share-custom a span {
-webkit-border-radius: 50%;
border: 0;
box-shadow: none;
- padding: 8px;
+ padding: 7px;
position: relative;
top: -2px;
line-height: 1;
@@ -485,8 +543,11 @@ body .sd-social-icon .sd-content li.share-custom a span {
opacity: .6;
}
+
+
.sd-social-icon .sd-content ul li[class*='share-'] a.sd-button:before {
- top: 0;
+ top: 1px;
+ top: 0px\9; /* IE8 and below */
}
.sd-social-icon .sd-content ul li[class*='share-'] a.sd-button.share-custom {
@@ -548,6 +609,11 @@ body .sd-social-icon .sd-content li.share-custom a span {
color: #fff !important;
}
+.sd-social-icon .sd-content ul li[class*='share-'].share-telegram a.sd-button {
+ background: #0088cc;
+ color: #fff !important;
+}
+
.sd-social-icon .sd-content ul li[class*='share-'].share-linkedin a.sd-button {
background: #0077b5;
color: #fff !important;
@@ -563,16 +629,15 @@ body .sd-social-icon .sd-content li.share-custom a span {
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: #555555 !important;
}
+.sd-social-icon .sd-content ul li[class*='share-'].share-skype a.sd-button {
+ background: #00AFF0;
+ color: #fff !important;
+}
/**
* Screen Reader Text for "Icon Only" option
@@ -680,3 +745,4 @@ div.sharedaddy.sharedaddy-dark #sharing_email {
height: 123px;
margin: 0 0 1em 0;
}
+
diff --git a/plugins/jetpack/modules/sharedaddy/sharing.js b/plugins/jetpack/modules/sharedaddy/sharing.js
index 96a26b4b..ac287a24 100644
--- a/plugins/jetpack/modules/sharedaddy/sharing.js
+++ b/plugins/jetpack/modules/sharedaddy/sharing.js
@@ -204,7 +204,7 @@ var updateLinkedInCount = function( data ) {
$more_sharing_pane.data( 'justSlid', false );
}, 300 );
- if ( $more_sharing_pane.find( '.share-google-plus-1' ).size() ) {
+ if ( $more_sharing_pane.find( '.share-google-plus-1' ).length ) {
// The pane needs to stay open for the Google+ Button
return;
}
diff --git a/plugins/jetpack/modules/sharedaddy/sharing.php b/plugins/jetpack/modules/sharedaddy/sharing.php
index 72dc3a04..2f69d5ad 100644
--- a/plugins/jetpack/modules/sharedaddy/sharing.php
+++ b/plugins/jetpack/modules/sharedaddy/sharing.php
@@ -23,10 +23,16 @@ class Sharing_Admin {
}
public function sharing_head() {
- 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 );
- wp_enqueue_style( 'sharing-admin', WP_SHARING_PLUGIN_URL.'admin-sharing.css', false, JETPACK__VERSION );
- wp_enqueue_style( 'sharing', WP_SHARING_PLUGIN_URL.'sharing.css', false, JETPACK__VERSION );
- wp_enqueue_style( 'genericons' );
+ 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 );
+ $postfix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
+ if ( is_rtl() ) {
+ wp_enqueue_style( 'sharing-admin', WP_SHARING_PLUGIN_URL . 'admin-sharing-rtl' . $postfix . '.css', false, JETPACK__VERSION );
+ } else {
+ wp_enqueue_style( 'sharing-admin', WP_SHARING_PLUGIN_URL . 'admin-sharing' . $postfix . '.css', false, JETPACK__VERSION );
+ }
+ wp_enqueue_style( 'sharing', WP_SHARING_PLUGIN_URL . 'sharing.css', false, JETPACK__VERSION );
+
+ wp_enqueue_style( 'social-logos' );
wp_enqueue_script( 'sharing-js-fe', WP_SHARING_PLUGIN_URL . 'sharing.js', array( ), 4 );
add_thickbox();
diff --git a/plugins/jetpack/modules/shortcodes.php b/plugins/jetpack/modules/shortcodes.php
index 320de047..f2181997 100644
--- a/plugins/jetpack/modules/shortcodes.php
+++ b/plugins/jetpack/modules/shortcodes.php
@@ -9,7 +9,7 @@
* Requires Connection: No
* Auto Activate: Yes
* Module Tags: Photos and Videos, Social, Writing, Appearance
- * 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
+ * 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
*/
/**
@@ -59,16 +59,12 @@ function jetpack_load_shortcodes() {
$shortcode_includes = apply_filters( 'jetpack_shortcodes_to_include', $shortcode_includes );
foreach ( $shortcode_includes as $include ) {
- if ( version_compare( $wp_version, '3.6-z', '>=' ) && stristr( $include, 'audio.php' ) ) {
- continue;
- }
-
include $include;
}
}
/**
- * Runs preg_replace so that replacements don't happen within open tags.
+ * Runs preg_replace so that replacements don't happen within open tags.
* Parameters are the same as preg_replace, with an added optional search param for improved performance
*
* @param String $pattern
@@ -85,7 +81,7 @@ function jetpack_preg_replace_outside_tags( $pattern, $replacement, $content, $s
if ( $search && false === strpos( $content, $search ) ) {
return $content;
}
-
+
$textarr = wp_html_split( $content );
unset( $content );
foreach( $textarr as &$element ) {
@@ -93,12 +89,12 @@ function jetpack_preg_replace_outside_tags( $pattern, $replacement, $content, $s
continue;
$element = preg_replace( $pattern, $replacement, $element );
}
-
+
return join( $textarr );
}
/**
- * Runs preg_replace_callback so that replacements don't happen within open tags.
+ * Runs preg_replace_callback so that replacements don't happen within open tags.
* Parameters are the same as preg_replace, with an added optional search param for improved performance
*
* @param String $pattern
@@ -115,7 +111,7 @@ function jetpack_preg_replace_callback_outside_tags( $pattern, $callback, $conte
if ( $search && false === strpos( $content, $search ) ) {
return $content;
}
-
+
$textarr = wp_html_split( $content );
unset( $content );
foreach( $textarr as &$element ) {
@@ -123,28 +119,8 @@ function jetpack_preg_replace_callback_outside_tags( $pattern, $callback, $conte
continue;
$element = preg_replace_callback( $pattern, $callback, $element );
}
-
- return join( $textarr );
-}
-
-global $wp_version;
-
-if ( version_compare( $wp_version, '3.6-z', '>=' ) ) {
- add_filter( 'shortcode_atts_audio', 'jetpack_audio_atts_handler', 10, 3 );
-
- function jetpack_audio_atts_handler( $out, $pairs, $atts ) {
- if( isset( $atts[0] ) )
- $out['src'] = $atts[0];
-
- return $out;
- }
- function jetpack_shortcode_get_audio_id( $atts ) {
- if ( isset( $atts[ 0 ] ) )
- return $atts[ 0 ];
- else
- return 0;
- }
+ return join( $textarr );
}
if ( ! function_exists( 'jetpack_shortcode_get_wpvideo_id' ) ) {
diff --git a/plugins/jetpack/modules/shortcodes/audio.php b/plugins/jetpack/modules/shortcodes/audio.php
index a408f2a5..88c13090 100644
--- a/plugins/jetpack/modules/shortcodes/audio.php
+++ b/plugins/jetpack/modules/shortcodes/audio.php
@@ -1,435 +1,6 @@
<?php
-
/**
-* Class wrapper for audio shortcode
-*/
-class AudioShortcode {
-
- static $add_script = false;
-
- /**
- * Add all the actions & resgister the shortcode
- */
- function __construct() {
- add_shortcode( 'audio', array( $this, 'audio_shortcode' ) );
- add_action( 'wp_enqueue_scripts', array( $this, 'check_infinite' ) );
- add_action( 'infinite_scroll_render', array( $this, 'audio_shortcode_infinite' ), 11 );
- }
-
- /**
- * Return the $url of the audio
- */
- static function get_audio_id( $atts ) {
- if ( isset( $atts[0] ) )
- return $atts[0];
- else
- return 0;
- }
-
- /**
- * Shortcode for audio
- * [audio http://wpcom.files.wordpress.com/2007/01/mattmullenweg-interview.mp3|width=180|titles=1|artists=2]
- *
- * The important question here is whether the shortcode applies to widget_text:
- * add_filter('widget_text', 'do_shortcode');
- * */
- function audio_shortcode( $atts ) {
- global $ap_playerID;
- global $post;
-
- if ( ! is_array( $atts ) ) {
- return '<!-- Audio shortcode passed invalid attributes -->';
- }
-
- if ( ! isset( $atts[0] ) ) {
- if ( isset( $atts['src'] ) ) {
- $atts[0] = $atts['src'];
- unset( $atts['src'] );
- } else {
- return '<!-- Audio shortcode source not set -->';
- }
- }
-
- $post_id = 0;
- if ( isset( $post ) ) {
- $post_id = $post->ID;
- }
-
- // add the special .js
- wp_enqueue_script(
- 'audio-shortcode',
- plugins_url( 'js/audio-shortcode.js', __FILE__ ),
- array( 'jquery' ),
- '1.1',
- true);
-
- // alert the infinite scroll renderer that it should try to load the script
- self::$add_script = true;
- $atts[0] = strip_tags( join( ' ', $atts ) );
- $src = ltrim( $atts[0], '=' );
-
- /**
- * Set the audio player default colors.
- *
- * @module shortcodes
- *
- * @since 1.4.0
- *
- * @param array $ap_options {
- * The default colors for the audio player in hexidecimal format (e.g. 0x#F8F8F8).
- *
- * @type string $bg Background color.
- * @type string $leftbg Left background color.
- * @type string $lefticon Left icon color.
- * @type string $rightbg Right background color.
- * @type string $rightbghover Right background hover color.
- * @type string $righticon Right icon color.
- * @type string $righticonhover Right icon hover color.
- * @type string $text Text color.
- * @type string $slider Slider color.
- * @type string $track Track color.
- * @type string $border Border color.
- * @type string $loader Loader color.
- */
- $ap_options = apply_filters(
- 'audio_player_default_colors',
- array(
- "bg" => "0xF8F8F8",
- "leftbg" => "0xEEEEEE",
- "lefticon" => "0x666666",
- "rightbg" => "0xCCCCCC",
- "rightbghover" => "0x999999",
- "righticon" => "0x666666",
- "righticonhover" => "0xFFFFFF",
- "text" => "0x666666",
- "slider" => "0x666666",
- "track" => "0xFFFFFF",
- "border" => "0x666666",
- "loader" => "0x9FFFB8"
- ) );
-
- if ( ! isset( $ap_playerID ) ) {
- $ap_playerID = 1;
- } else {
- $ap_playerID++;
- }
-
- if ( ! isset( $load_audio_script ) ) {
- $load_audio_script = true;
- }
-
- // prep the audio files
- $src = trim( $src, ' "' );
- $options = array();
- $data = preg_split( "/\|/", $src );
- $sound_file = $data[0];
- $sound_files = explode( ',', $sound_file );
-
- if ( is_ssl() ) {
- for ( $i = 0; $i < count( $sound_files ); $i++ ) {
- $sound_files[ $i ] = preg_replace( '#^http://([^.]+).files.wordpress.com/#', 'https://$1.files.wordpress.com/', $sound_files[ $i ] );
- }
- }
-
- $sound_files = array_map( 'trim', $sound_files );
- $sound_files = array_map( array( $this, 'rawurlencode_spaces' ), $sound_files );
- $sound_files = array_map( 'esc_url_raw', $sound_files ); // Ensure each is a valid URL
- $num_files = count( $sound_files );
- $sound_types = array(
- 'mp3' => 'mpeg',
- 'wav' => 'wav',
- 'ogg' => 'ogg',
- 'oga' => 'ogg',
- 'm4a' => 'mp4',
- 'aac' => 'mp4',
- 'webm' => 'webm'
- );
-
- for ( $i = 1; $i < count( $data ); $i++ ) {
- $pair = explode( "=", $data[$i] );
- if ( strtolower( $pair[0] ) != 'autostart' ) {
- $options[$pair[0]] = $pair[1];
- }
- }
-
- // Merge runtime options to default colour options
- // (runtime options overwrite default options)
- foreach ( $ap_options as $key => $default ) {
- if ( isset( $options[$key] ) ) {
- if ( preg_match( '/^(0x)?[a-f0-9]{6}$/i', $default ) && !preg_match( '/^(0x)?[a-f0-9]{6}$/i', $options[$key] ) ) {
- // Default is a hex color, but input is not
- $options[$key] = $default;
- }
- } else {
- $options[$key] = $default;
- }
- }
- $options['soundFile'] = join( ',', $sound_files ); // Rebuild the option with our now sanitized data
- $flash_vars = array();
- foreach ( $options as $key => $value ) {
- $flash_vars[] = rawurlencode( $key ) . '=' . rawurlencode( $value );
- }
- $flash_vars = implode( '&amp;', $flash_vars );
- $flash_vars = esc_attr( $flash_vars );
-
- // extract some of the options to insert into the markup
- if ( isset( $options['bgcolor'] ) && preg_match( '/^(0x)?[a-f0-9]{6}$/i', $options['bgcolor'] ) ) {
- $bgcolor = preg_replace( '/^(0x)?/', '#', $options['bgcolor'] );
- $bgcolor = esc_attr( $bgcolor );
- } else {
- $bgcolor = '#FFFFFF';
- }
-
- if ( isset( $options['width'] ) ) {
- $width = intval( $options['width'] );
- } else {
- $width = 290;
- }
-
- $loop = '';
- $script_loop = 'false';
- if ( isset( $options['loop'] ) && 'yes' == $options['loop'] ) {
- $script_loop = 'true';
- if ( 1 == $num_files ) {
- $loop = 'loop';
- }
- }
-
- $volume = 0.6;
- if ( isset( $options['initialvolume'] ) &&
- 0.0 < floatval( $options['initialvolume'] ) &&
- 100.0 >= floatval( $options['initialvolume'] ) ) {
-
- $volume = floatval( $options['initialvolume'] )/100.0;
- }
-
- $file_artists = array_pad( array(), $num_files, '' );
- if ( isset( $options['artists'] ) ) {
- $artists = preg_split( '/,/', $options['artists'] );
- foreach ( $artists as $i => $artist ) {
- $file_artists[$i] = esc_html( $artist ) . ' - ';
- }
- }
-
- // generate default titles
- $file_titles = array();
- for ( $i = 0; $i < $num_files; $i++ ) {
- $file_titles[] = 'Track #' . ($i+1);
- }
-
- // replace with real titles if they exist
- if ( isset( $options['titles'] ) ) {
- $titles = preg_split( '/,/', $options['titles'] );
- foreach ( $titles as $i => $title ) {
- $file_titles[$i] = esc_html( $title );
- }
- }
-
- // fallback for the fallback, just a download link
- $not_supported = '';
- foreach ( $sound_files as $sfile ) {
- $not_supported .= sprintf(
- __( 'Download: <a href="%s">%s</a><br />', 'jetpack' ),
- esc_url( $sfile ),
- esc_html( basename( $sfile ) ) );
- }
-
- // HTML5 audio tag
- $html5_audio = '';
- $all_mp3 = true;
- $add_audio = true;
- $num_good = 0;
- $to_remove = array();
- foreach ( $sound_files as $i => $sfile ) {
- $file_extension = pathinfo( $sfile, PATHINFO_EXTENSION );
- if ( ! preg_match( '/^(mp3|wav|ogg|oga|m4a|aac|webm)$/i', $file_extension ) ) {
- $html5_audio .= '<!-- Audio shortcode unsupported audio format -->';
- if ( 1 == $num_files ) {
- $html5_audio .= $not_supported;
- }
-
- $to_remove[] = $i; // make a note of the bad files
- $all_mp3 = false;
- continue;
- } elseif ( ! preg_match( '/^mp3$/i', $file_extension ) ) {
- $all_mp3 = false;
- }
-
- if ( 0 == $i ) { // only need one player
- $html5_audio .= <<<AUDIO
- <span id="wp-as-{$post_id}_{$ap_playerID}-container">
- <audio id='wp-as-{$post_id}_{$ap_playerID}' controls preload='none' $loop style='background-color:$bgcolor;width:{$width}px;'>
- <span id="wp-as-{$post_id}_{$ap_playerID}-nope">$not_supported</span>
- </audio>
- </span>
- <br />
-AUDIO;
- }
- $num_good++;
- }
-
- // player controls, if needed
- if ( 1 < $num_files ) {
- $html5_audio .= <<<CONTROLS
- <span id='wp-as-{$post_id}_{$ap_playerID}-controls' style='display:none;'>
- <a id='wp-as-{$post_id}_{$ap_playerID}-prev'
- href='javascript:audioshortcode.prev_track( "{$post_id}_{$ap_playerID}" );'
- style='font-size:1.5em;'>&laquo;</a>
- |
- <a id='wp-as-{$post_id}_{$ap_playerID}-next'
- href='javascript:audioshortcode.next_track( "{$post_id}_{$ap_playerID}", true, $script_loop );'
- style='font-size:1.5em;'>&raquo;</a>
- </span>
-CONTROLS;
- }
- $html5_audio .= "<span id='wp-as-{$post_id}_{$ap_playerID}-playing'></span>";
-
- /**
- * Sets external resource URL.
- *
- * @module shortcodes
- *
- * @since 1.4.0
- *
- * @param string $args URL of external resource.
- *
- */
- $swfurl = apply_filters(
- 'jetpack_static_url',
- set_url_scheme( "http://en.wordpress.com/wp-content/plugins/audio-player/player.swf" )
- );
-
- // all the fancy javascript is causing Google Reader to break, just include flash in GReader
- // override html5 audio code w/ just not supported code
- if ( is_feed() ) {
- $html5_audio = $not_supported;
- }
-
- if ( $all_mp3 ) {
- // process regular flash player, inserting HTML5 tags into object as fallback
- $audio_tags = <<<FLASH
- <object id='wp-as-{$post_id}_{$ap_playerID}-flash' type='application/x-shockwave-flash' data='$swfurl' width='$width' height='24'>
- <param name='movie' value='$swfurl' />
- <param name='FlashVars' value='{$flash_vars}' />
- <param name='quality' value='high' />
- <param name='menu' value='false' />
- <param name='bgcolor' value='$bgcolor' />
- <param name='wmode' value='opaque' />
- $html5_audio
- </object>
-FLASH;
- } else { // just HTML5 for non-mp3 versions
- $audio_tags = $html5_audio;
- }
-
- // strip out all the bad files before it reaches .js
- foreach ( $to_remove as $i ) {
- array_splice( $sound_files, $i, 1 );
- array_splice( $file_artists, $i, 1 );
- array_splice( $file_titles, $i, 1 );
- }
-
- // mashup the artist/titles for the script
- $script_titles = array();
- for ( $i = 0; $i < $num_files; $i++ ) {
- if ( isset( $file_artists[ $i ] ) && isset( $file_titles[ $i ] ) ) {
- $script_titles[] = $file_artists[ $i ] . $file_titles[ $i ];
- }
- }
-
- // javacript to control audio
- $script_files = json_encode( $sound_files );
- $script_titles = json_encode( $script_titles );
- $script = <<<SCRIPT
- <script type='text/javascript'>
- //<![CDATA[
- (function() {
- var prep = function() {
- if ( 'undefined' === typeof window.audioshortcode ) { return; }
- audioshortcode.prep(
- '{$post_id}_{$ap_playerID}',
- $script_files,
- $script_titles,
- $volume,
- $script_loop
- );
- };
- if ( 'undefined' === typeof jQuery ) {
- if ( document.addEventListener ) {
- window.addEventListener( 'load', prep, false );
- } else if ( document.attachEvent ) {
- window.attachEvent( 'onload', prep );
- }
- } else {
- jQuery(document).on( 'ready as-script-load', prep );
- }
- })();
- //]]>
- </script>
-SCRIPT;
-
- // add the special javascript, if needed
- if ( 0 < $num_good && ! is_feed() ) {
- $audio_tags .= $script;
- }
-
- return "<span style='text-align:left;display:block;'><p>$audio_tags</p></span>";
- }
-
- /**
- * If the theme uses infinite scroll, include jquery at the start
- */
- function check_infinite() {
- if ( current_theme_supports( 'infinite-scroll' ) && class_exists( 'The_Neverending_Home_Page' ) && The_Neverending_Home_Page::archive_supports_infinity() )
- wp_enqueue_script( 'jquery' );
- }
-
-
- /**
- * Dynamically load the .js, if needed
- *
- * This hooks in late (priority 11) to infinite_scroll_render to determine
- * a posteriori if a shortcode has been called.
- */
- function audio_shortcode_infinite() {
- // only try to load if a shortcode has been called
- if( self::$add_script ) {
- $script_url = json_encode( esc_url_raw( plugins_url( 'js/audio-shortcode.js', __FILE__ ) ) );
-
- // if the script hasn't been loaded, load it
- // if the script loads successfully, fire an 'as-script-load' event
- echo <<<SCRIPT
- <script type='text/javascript'>
- //<![CDATA[
- if ( typeof window.audioshortcode === 'undefined' ) {
- var wp_as_js = document.createElement( 'script' );
- wp_as_js.type = 'text/javascript';
- wp_as_js.src = $script_url;
- wp_as_js.async = true;
- wp_as_js.onload = function() {
- jQuery( document.body ).trigger( 'as-script-load' );
- };
- document.getElementsByTagName( 'head' )[0].appendChild( wp_as_js );
- } else {
- jQuery( document.body ).trigger( 'as-script-load' );
- }
- //]]>
- </script>
-SCRIPT;
- }
- }
-
- /**
- * Fixes URLs that have been pasted with spaces:
- * [audio http://example.com/Some Cool Music.mp3]
- *
- * @param string $url
- * @return string
- */
- function rawurlencode_spaces( $url ) {
- return str_replace( ' ', rawurlencode( ' ' ), $url );
- }
-}
-
-// kick it all off
-new AudioShortcode();
+ * Deprecated. No longer needed.
+ *
+ * @package Jetpack
+ */
diff --git a/plugins/jetpack/modules/shortcodes/css/recipes-print.css b/plugins/jetpack/modules/shortcodes/css/recipes-print.css
index b3e76af1..48e05179 100644
--- a/plugins/jetpack/modules/shortcodes/css/recipes-print.css
+++ b/plugins/jetpack/modules/shortcodes/css/recipes-print.css
@@ -1,3 +1,36 @@
.jetpack-recipe-meta li.jetpack-recipe-print {
display: none;
}
+
+.jetpack-recipe-title {
+ font-size: 16pt;
+}
+
+.jetpack-recipe-content img {
+ display: inline-block !important;
+ max-width: 100%;
+}
+
+.jetpack-recipe-image {
+ display: none !important;
+}
+
+.jetpack-recipe-content .aligncenter {
+ display: block !important;
+ margin: 0 auto 1em !important;
+ text-align: center !important;
+}
+
+.jetpack-recipe-content .alignright {
+ float: right !important;
+ margin: 0 0 .5em 1em !important;
+}
+
+.jetpack-recipe-content .alignleft {
+ float: left !important;
+ margin: 0 1em .5em 0 !important;
+}
+
+.jetpack-recipe-content .alignnone {
+ display: inline-block;
+}
diff --git a/plugins/jetpack/modules/shortcodes/css/recipes.css b/plugins/jetpack/modules/shortcodes/css/recipes.css
index 08b9b00c..63ab2169 100644
--- a/plugins/jetpack/modules/shortcodes/css/recipes.css
+++ b/plugins/jetpack/modules/shortcodes/css/recipes.css
@@ -31,3 +31,6 @@
padding-right: 0;
text-align: right;
}
+.jetpack-recipe-notes {
+ font-style: italic;
+}
diff --git a/plugins/jetpack/modules/shortcodes/css/rtl/recipes-rtl.css b/plugins/jetpack/modules/shortcodes/css/rtl/recipes-rtl.css
index 26da7d16..57d97597 100644
--- a/plugins/jetpack/modules/shortcodes/css/rtl/recipes-rtl.css
+++ b/plugins/jetpack/modules/shortcodes/css/rtl/recipes-rtl.css
@@ -1,4 +1,4 @@
-/* This file was automatically generated on Feb 24 2014 16:44:25 */
+/* This file was automatically generated on Apr 19 2016 09:36:47 */
.jetpack-recipe {
border: 1px solid #f2f2f2;
@@ -33,3 +33,6 @@
padding-left: 0;
text-align: left;
}
+.jetpack-recipe-notes {
+ font-style: italic;
+}
diff --git a/plugins/jetpack/modules/shortcodes/js/audio-shortcode.js b/plugins/jetpack/modules/shortcodes/js/audio-shortcode.js
deleted file mode 100644
index 511fd1bf..00000000
--- a/plugins/jetpack/modules/shortcodes/js/audio-shortcode.js
+++ /dev/null
@@ -1,159 +0,0 @@
-/* jshint onevar:false */
-/* global audioshortcode */
-
-// Note: This file no longer exists on wpcom.
-
-(function($) {
-
-window.audioshortcode = {
-
- /**
- * Prep the audio player once the page is ready, add listeners, etc
- */
- prep: function( player_id, files, titles, volume, loop ) {
- // check if the player has already been prepped, no-op if it has
- var container = $( '#wp-as-' + player_id + '-container' );
- if ( container.hasClass( 'wp-as-prepped' ) ) {
- return;
- }
- container.addClass( 'wp-as-prepped' );
-
- // browser doesn't support HTML5 audio, no-op
- if ( ! document.createElement('audio').canPlayType ) {
- return;
- }
-
- // if the browser removed the script, no-op
- var player = $( '#wp-as-' + player_id ).get(0);
- if ( typeof player === 'undefined' ) {
- return;
- }
-
- this[player_id] = [];
- this[player_id].i = 0;
- this[player_id].files = files;
- this[player_id].titles = titles;
- player.volume = volume;
-
- var type_map = {
- 'mp3': 'mpeg',
- 'wav': 'wav',
- 'ogg': 'ogg',
- 'oga': 'ogg',
- 'm4a': 'mp4',
- 'aac': 'mp4',
- 'webm': 'webm'
- };
-
- // strip out all the files that can't be played
- for ( var i = this[player_id].files.length-1; i >= 0; i-- ) {
- var extension = this[player_id].files[i].split( '.' ).pop();
- var type = 'audio/' + type_map[extension];
- if ( ! player.canPlayType( type ) ) {
- this.remove_track( player_id, i );
- }
- }
-
- // bail if there are no more good files
- if ( 0 === this[player_id].files.length ) {
- return;
- }
- player.src = this[player_id].files[0];
-
- // show the controls if there are still 2+ files remaining
- if ( 1 < this[player_id].files.length ) {
- $( '#wp-as-' + player_id + '-controls' ).show();
- }
-
- player.addEventListener( 'error', function() {
- audioshortcode.remove_track( player_id, audioshortcode[player_id].i );
- if ( 0 < audioshortcode[player_id].files.length ) {
- audioshortcode[player_id].i--;
- audioshortcode.next_track( player_id, false, loop );
- }
- }, false );
-
- player.addEventListener( 'ended', function() {
- audioshortcode.next_track( player_id, false, loop );
- }, false );
-
- player.addEventListener( 'play', function() {
- var i = audioshortcode[player_id].i;
- var titles = audioshortcode[player_id].titles;
- $( '#wp-as-' + player_id + '-playing' ).text( ' ' + titles[i] );
- }, false );
-
- player.addEventListener( 'pause', function() {
- $( '#wp-as-' + player_id + '-playing' ).text( '' );
- }, false );
- },
-
- /**
- * Remove the track and update the player/controls if needed
- */
- remove_track: function( player_id, index ) {
- this[player_id].files.splice( index, 1 );
- this[player_id].titles.splice( index, 1 );
-
- // get rid of player/controls if they can't be played
- if ( 0 === this[player_id].files.length ) {
- $( '#wp-as-' + player_id + '-container' ).html( $( '#wp-as-' + player_id + '-nope' ).html() );
- $( '#wp-as-' + player_id + '-controls' ).html( '' );
- } else if ( 1 === this[player_id].files.length ) {
- $( '#wp-as-' + player_id + '-controls' ).html( '' );
- }
- },
-
- /**
- * Change the src of the player, load the file, then play it
- */
- start_track: function( player_id, file ) {
- var player = $( '#wp-as-' + player_id ).get(0);
- player.src = file;
- player.load();
- player.play();
- },
-
- /**
- * Play the previous track
- */
- prev_track: function( player_id ) {
- var player = $( '#wp-as-' + player_id ).get(0);
- var files = this[player_id].files;
- if ( player.paused || 0 === this[player_id].i ) {
- return;
- }
-
- player.pause();
- if ( 0 < this[player_id].i ) {
- this[player_id].i--;
- this.start_track( player_id, files[this[player_id].i] );
- }
- },
-
- /**
- * Play the next track
- */
- next_track: function( player_id, fromClick, loop ) {
- var player = $( '#wp-as-' + player_id ).get(0);
- var files = this[player_id].files;
- if ( fromClick && ( player.paused || files.length-1 === this[player_id].i ) ) {
- return;
- }
-
- player.pause();
- if ( files.length-1 > this[player_id].i ) {
- this[player_id].i++;
- this.start_track( player_id, files[this[player_id].i] );
- } else if ( loop ) {
- this[player_id].i = 0;
- this.start_track( player_id, 0 );
- } else {
- this[player_id].i = 0;
- player.src = files[0];
- $( '#wp-as-' + player_id + '-playing' ).text( '' );
- }
- }
-};
-
-})(jQuery);
diff --git a/plugins/jetpack/modules/shortcodes/recipe.php b/plugins/jetpack/modules/shortcodes/recipe.php
index 7288e2a4..1a8f7a0c 100644
--- a/plugins/jetpack/modules/shortcodes/recipe.php
+++ b/plugins/jetpack/modules/shortcodes/recipe.php
@@ -1,23 +1,41 @@
<?php
+
/**
* Embed recipe 'cards' in post, with basic styling and print functionality
*
+ * To Do
+ * - defaults settings
+ * - basic styles/themecolor styles
+ * - validation/sanitization
+ * - print styles
*/
-
class Jetpack_Recipes {
private $scripts_and_style_included = false;
function __construct() {
add_action( 'init', array( $this, 'action_init' ) );
+
+ // Add itemprop to allowed tags for wp_kses_post, so we can use it for better Schema compliance.
+ global $allowedposttags;
+ $tags = array( 'li', 'ol', 'img' );
+ foreach ( $tags as $tag ) {
+ if ( ! is_array( $allowedposttags[ $tag ] ) ) {
+ $allowedposttags[ $tag ] = array();
+ }
+ $allowedposttags[ $tag ]['itemprop'] = array();
+ }
}
function action_init() {
// Enqueue styles if [recipe] exists
add_action( 'wp_head', array( $this, 'add_scripts' ), 1 );
- // Render [recipe]
+ // Render [recipe], along with other shortcodes that can be nested within.
add_shortcode( 'recipe', array( $this, 'recipe_shortcode' ) );
+ add_shortcode( 'recipe-notes', array( $this, 'recipe_notes_shortcode' ) );
+ add_shortcode( 'recipe-ingredients', array( $this, 'recipe_ingredients_shortcode' ) );
+ add_shortcode( 'recipe-directions', array( $this, 'recipe_directions_shortcode' ) );
}
/**
@@ -39,39 +57,41 @@ class Jetpack_Recipes {
return;
}
- if( is_rtl() ) {
- wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/rtl/recipes-rtl.css', __FILE__ ), array(), '20130919' );
+ if ( is_rtl() ) {
+ wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/rtl/recipes-rtl.css', __FILE__ ), array(), '20130919' );
} else {
- wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/recipes.css', __FILE__ ), array(), '20130919' );
+ wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/recipes.css', __FILE__ ), array(), '20130919' );
}
+ wp_add_inline_style( 'jetpack-recipes-style', self::themecolor_styles() ); // add $themecolors-defined styles
wp_enqueue_script( 'jetpack-recipes-printthis', plugins_url( '/js/recipes-printthis.js', __FILE__ ), array( 'jquery' ), '20131230' );
- wp_enqueue_script( 'jetpack-recipes-js', plugins_url( '/js/recipes.js', __FILE__ ), array( 'jquery', 'jetpack-recipes-printthis' ), '20131230' );
+ wp_enqueue_script( 'jetpack-recipes-js', plugins_url( '/js/recipes.js', __FILE__ ), array( 'jquery', 'jetpack-recipes-printthis' ), '20131230' );
- $title_var = wp_title( '|', false, 'right' );
+ $title_var = wp_title( '|', false, 'right' );
$print_css_var = plugins_url( '/css/recipes-print.css', __FILE__ );
- wp_localize_script( 'jetpack-recipes-js', 'jetpack_recipes_vars', array(
- 'pageTitle' => $title_var,
- 'loadCSS' => $print_css_var
- ) );
+ wp_localize_script( 'jetpack-recipes-js', 'jetpack_recipes_vars', array( 'pageTitle' => $title_var, 'loadCSS' => $print_css_var ) );
}
/**
* Our [recipe] shortcode.
* Prints recipe data styled to look good on *any* theme.
*
- * @return resume_shortcode_html
+ * @return string HTML for recipe shortcode.
*/
static function recipe_shortcode( $atts, $content = '' ) {
- $atts = shortcode_atts( array(
- 'title' => '', //string
- 'servings' => '', //intval
- 'time' => '', //string
- 'difficulty' => '', //string
- 'print' => '', //string
- ), $atts, 'recipe' );
+ $atts = shortcode_atts(
+ array(
+ 'title' => '', //string
+ 'servings' => '', //intval
+ 'time' => '', //string
+ 'difficulty' => '', //string
+ 'print' => '', //string
+ 'image' => '', //string
+ 'description' => '', //string
+ ), $atts, 'recipe'
+ );
return self::recipe_shortcode_html( $atts, $content );
}
@@ -79,52 +99,74 @@ class Jetpack_Recipes {
/**
* The recipe output
*
- * @return Html
+ * @return string HTML output
*/
static function recipe_shortcode_html( $atts, $content = '' ) {
- $html = false;
+ // Add itemprop to allowed tags for wp_kses_post, so we can use it for better Schema compliance.
+ global $allowedtags;
+ $allowedtags['li'] = array( 'itemprop' => array () );
$html = '<div class="hrecipe jetpack-recipe" itemscope itemtype="http://schema.org/Recipe">';
// Print the recipe title if exists
- if ( '' != $atts['title'] ) {
+ if ( '' !== $atts['title'] ) {
$html .= '<h3 class="jetpack-recipe-title" itemprop="name">' . esc_html( $atts['title'] ) . '</h3>';
}
// Print the recipe meta if exists
- if ( '' != $atts['servings'] || '' != $atts['time'] || '' != $atts['difficulty'] || '' != $atts['print'] ) {
+ if ( '' !== $atts['servings'] || '' != $atts['time'] || '' != $atts['difficulty'] || '' != $atts['print'] ) {
$html .= '<ul class="jetpack-recipe-meta">';
- if ( '' != $atts['servings'] ) {
- $html .= sprintf( '<li class="jetpack-recipe-servings" itemprop="recipeYield"><strong>%1$s: </strong>%2$s</li>',
- __( 'Servings', 'jetpack' ),
+ if ( '' !== $atts['servings'] ) {
+ $html .= sprintf(
+ '<li class="jetpack-recipe-servings" itemprop="recipeYield"><strong>%1$s: </strong>%2$s</li>',
+ esc_html_x( 'Servings', 'recipe', 'jetpack' ),
esc_html( $atts['servings'] )
);
}
- if ( '' != $atts['time'] ) {
- $html .= sprintf( '<li class="jetpack-recipe-time" itemprop="totalTime"><strong>%1$s: </strong>%2$s</li>',
- __( 'Time', 'jetpack' ),
+ if ( '' !== $atts['time'] ) {
+ $html .= sprintf(
+ '<li class="jetpack-recipe-time" itemprop="totalTime"><strong>%1$s: </strong>%2$s</li>',
+ esc_html_x( 'Time', 'recipe', 'jetpack' ),
esc_html( $atts['time'] )
);
}
- if ( '' != $atts['difficulty'] ) {
- $html .= sprintf( '<li class="jetpack-recipe-difficulty"><strong>%1$s: </strong>%2$s</li>',
- __( 'Difficulty', 'jetpack' ),
+ if ( '' !== $atts['difficulty'] ) {
+ $html .= sprintf(
+ '<li class="jetpack-recipe-difficulty"><strong>%1$s: </strong>%2$s</li>',
+ esc_html_x( 'Difficulty', 'recipe', 'jetpack' ),
esc_html( $atts['difficulty'] )
);
}
- if ( 'false' != $atts['print'] ) {
- $html .= sprintf( '<li class="jetpack-recipe-print"><a href="#">%s</a></li>',
- __( 'Print', 'jetpack' )
+ if ( 'false' !== $atts['print'] ) {
+ $html .= sprintf(
+ '<li class="jetpack-recipe-print"><a href="#">%1$s</a></li>',
+ esc_html_x( 'Print', 'recipe', 'jetpack' )
);
}
$html .= '</ul>';
}
+ // Output the image, if we have one.
+ if ( '' !== $atts['image'] ) {
+ $html .= sprintf(
+ '<img class="jetpack-recipe-image" itemprop="thumbnailUrl" src="%1$s" />',
+ esc_url( $atts['image'] )
+ );
+ }
+
+ // Output the description, if we have one.
+ if ( '' !== $atts['description'] ) {
+ $html .= sprintf(
+ '<p class="jetpack-recipe-description">%1$s</p>',
+ esc_html( $atts['description'] )
+ );
+ }
+
// Print content between codes
$html .= '<div class="jetpack-recipe-content">' . do_shortcode( $content ) . '</div>';
@@ -142,6 +184,196 @@ class Jetpack_Recipes {
// Return the HTML block
return $html;
}
+
+ /**
+ * Our [recipe-notes] shortcode.
+ * Outputs notes, styled in a div.
+ *
+ * @return string HTML for recipe notes shortcode.
+ */
+ static function recipe_notes_shortcode( $atts, $content = '' ) {
+ $atts = shortcode_atts( array(
+ 'title' => '', //string
+ ), $atts, 'recipe-notes' );
+
+ $html ='';
+
+ // Print a title if one exists.
+ if ( '' !== $atts['title'] ) {
+ $html .= '<h4 class="jetpack-recipe-notes-title">' . esc_html( $atts['title'] ) . '</h4>';
+ }
+
+ $html .= '<div class="jetpack-recipe-notes">';
+
+ // Format content using list functionality, if desired.
+ $html .= self::output_list_content( $content, 'notes' );
+
+ $html .= '</div>';
+
+ // Sanitize html.
+ $html = wp_kses_post( $html );
+
+ // Return the HTML block.
+ return $html;
+ }
+
+ /**
+ * Our [recipe-ingredients] shortcode.
+ * Outputs notes, styled in a div.
+ *
+ * @return string HTML for recipe ingredients shortcode.
+ */
+ static function recipe_ingredients_shortcode( $atts, $content = '' ) {
+ $atts = shortcode_atts( array(
+ 'title' => esc_html_x( 'Ingredients', 'recipe', 'jetpack' ), //string
+ ), $atts, 'recipe-ingredients' );
+
+ $html = '<div class="jetpack-recipe-ingredients">';
+
+ // Print a title unless the user has opted to exclude it.
+ if ( 'false' !== $atts['title'] ) {
+ $html .= '<h4 class="jetpack-recipe-ingredients-title">' . esc_html( $atts['title'] ) . '</h4>';
+ }
+
+ // Format content using list functionality.
+ $html .= self::output_list_content( $content, 'ingredients' );
+
+ $html .= '</div>';
+
+ // Sanitize html.
+ $html = wp_kses_post( $html );
+
+ // Return the HTML block.
+ return $html;
+ }
+
+ /**
+ * Reusable function to check for shortened formatting.
+ * Basically, users can create lists with the following shorthand:
+ * - item one
+ * - item two
+ * - item three
+ * And we'll magically convert it to a list. This has the added benefit
+ * of including itemprops for the recipe schema.
+ *
+ * @return string content formatted as a list item
+ */
+ static function output_list_content( $content, $type ) {
+ $html ='';
+
+ switch ( $type ) {
+ case 'directions' :
+ $list_item_replacement = '<li class="jetpack-recipe-directions">${1}</li>';
+ $itemprop = ' itemprop="recipeInstructions"';
+ $listtype = 'ol';
+ break;
+ case 'ingredients' :
+ $list_item_replacement = '<li class="jetpack-recipe-ingredient">${1}</li>';
+ $itemprop = ' itemprop="recipeIngredient"';
+ $listtype = 'ul';
+ break;
+ default:
+ $list_item_replacement = '<li class="jetpack-recipe-notes">${1}</li>';
+ $itemprop = '';
+ $listtype = 'ul';
+ }
+
+ // Check to see if the user is trying to use shortened formatting.
+ if (
+ strpos( $content, '&#8211;' ) !== false ||
+ strpos( $content, '&#8212;' ) !== false ||
+ strpos( $content, '-' ) !== false ||
+ strpos( $content, '*' ) !== false ||
+ strpos( $content, '#' ) !== false ||
+ strpos( $content, '–' ) !== false || // ndash
+ strpos( $content, '—' ) !== false || // mdash
+ preg_match( '/\d+\.\s/', $content )
+ ) {
+ // Remove breaks and extra whitespace
+ $content = str_replace( "<br />\n", "\n", $content );
+ $content = trim( $content );
+
+ $ul_pattern = '/(?:^|\n|\<p\>)+(?:[\-–—]+|\&#8211;|\&#8212;|\*)+\h+(.*)/mi';
+ $ol_pattern = '/(?:^|\n|\<p\>)+(?:\d+\.|#+)+\h+(.*)/mi';
+
+ preg_match_all( $ul_pattern, $content, $ul_matches );
+ preg_match_all( $ol_pattern, $content, $ol_matches );
+
+ if ( 0 !== count( $ul_matches[0] ) || 0 !== count( $ol_matches[0] ) ) {
+
+ if ( 0 !== count( $ol_matches[0] ) ) {
+ $listtype = 'ol';
+ $list_item_pattern = $ol_pattern;
+ } else {
+ $listtype = 'ul';
+ $list_item_pattern = $ul_pattern;
+ }
+ $html .= '<' . $listtype . $itemprop . '>';
+ $html .= preg_replace( $list_item_pattern, $list_item_replacement, $content );
+ $html .= '</' . $listtype . '>';
+
+ // Strip out any empty <p> tags and stray </p> tags, because those are just silly.
+ $empty_p_pattern = '/(<p>)*\s*<\/p>/mi';
+ $html = preg_replace( $empty_p_pattern, '', $html );
+ } else {
+ $html .= do_shortcode( $content );
+ }
+ } else {
+ $html .= do_shortcode( $content );
+ }
+
+ // Return our formatted content.
+ return $html;
+ }
+
+ /**
+ * Our [recipe-directions] shortcode.
+ * Outputs notes, styled in a div.
+ *
+ * @return string HTML for recipe notes shortcode.
+ */
+ static function recipe_directions_shortcode( $atts, $content = '' ) {
+ $atts = shortcode_atts( array(
+ 'title' => esc_html_x( 'Directions', 'recipe', 'jetpack' ), //string
+ ), $atts, 'recipe-directions' );
+
+ $html = '<div class="jetpack-recipe-directions">';
+
+ // Print a title unless the user has specified to exclude it.
+ if ( 'false' !== $atts['title'] ) {
+ $html .= '<h4 class="jetpack-recipe-directions-title">' . esc_html( $atts['title'] ) . '</h4>';
+ }
+
+ // Format content using list functionality.
+ $html .= self::output_list_content( $content, 'directions' );
+
+ $html .= '</div>';
+
+ // Sanitize html.
+ $html = wp_kses_post( $html );
+
+ // Return the HTML block.
+ return $html;
+ }
+
+ /**
+ * Use $themecolors array to style the Recipes shortcode
+ *
+ * @print style block
+ * @return string $style
+ */
+ function themecolor_styles() {
+ global $themecolors;
+ $style = '';
+
+ if ( isset( $themecolors ) ) {
+ $style .= '.jetpack-recipe { border-color: #' . esc_attr( $themecolors['border'] ) . '; }';
+ $style .= '.jetpack-recipe-title { border-bottom-color: #' . esc_attr( $themecolors['link'] ) . '; }';
+ }
+
+ return $style;
+ }
+
}
new Jetpack_Recipes();
diff --git a/plugins/jetpack/modules/shortcodes/twitter-timeline.php b/plugins/jetpack/modules/shortcodes/twitter-timeline.php
index adde0367..bce9d2a9 100644
--- a/plugins/jetpack/modules/shortcodes/twitter-timeline.php
+++ b/plugins/jetpack/modules/shortcodes/twitter-timeline.php
@@ -1,29 +1,42 @@
<?php
add_shortcode( 'twitter-timeline', 'twitter_timeline_shortcode' );
-function twitter_timeline_shortcode( $attr ) {
-
+function twitter_timeline_shortcode( $atts ) {
$default_atts = array(
'username' => '',
'id' => '',
- 'height' => '282',
'width' => '450',
+ 'height' => '282',
);
- $attr = shortcode_atts( $default_atts, $attr, 'twitter-timeline' );
+ $atts = shortcode_atts( $default_atts, $atts, 'twitter-timeline' );
- $attr['username'] = preg_replace( '/[^A-Za-z0-9_]+/', '', $attr['username'] );
+ $atts['username'] = preg_replace( '/[^A-Za-z0-9_]+/', '', $atts['username'] );
- if ( empty( $attr['username'] ) ) {
- return '<!-- ' . __( 'Invalid Twitter Timeline username', 'jetpack' ) . ' -->';
+ if ( empty( $atts['username'] ) && ! is_numeric( $atts['id'] ) ) {
+ return '<!-- ' . __( 'Must specify Twitter Timeline id or username.', 'jetpack' ) . ' -->';
}
- if ( ! is_numeric( $attr['id'] ) ) {
- return '<!-- ' . __( 'Invalid Twitter Timeline id', 'jetpack' ) . ' -->';
+ $output = '<a class="twitter-timeline"';
+
+ if ( is_numeric( $atts['width'] ) ) {
+ $output .= ' data-width="' . esc_attr( $atts['width'] ) . '"';
+ }
+ if ( is_numeric( $atts['height'] ) ) {
+ $output .= ' data-height="' . esc_attr( $atts['height'] ) . '"';
}
+ if ( is_numeric( $atts['id'] ) ) {
+ $output .= ' data-widget-id="' . esc_attr( $atts['id'] ) . '"';
+ }
+ if ( ! empty( $atts['username'] ) ) {
+ $output .= ' href="' . esc_url( 'https://twitter.com/' . $atts['username'] ) . '"';
+ }
+
+ $output .= '>';
+
+ $output .= sprintf( __( 'Tweets by @%s', 'jetpack' ), $atts['username'] );
- $tweets_by = sprintf( __( 'Tweets by @%s', 'jetpack' ), $attr['username'] );
- $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>';
+ $output .= '</a>';
wp_enqueue_script( 'jetpack-twitter-timeline' );
diff --git a/plugins/jetpack/modules/shortcodes/untappd-menu.php b/plugins/jetpack/modules/shortcodes/untappd-menu.php
new file mode 100644
index 00000000..39a0e3c3
--- /dev/null
+++ b/plugins/jetpack/modules/shortcodes/untappd-menu.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Untappd Shortcodes
+ * @author kraftbj
+ *
+ * [untappd-menu location="123" theme="123"]
+ * @since 4.1.0
+ * @param location int Location ID for the Untappd venue. Required.
+ * @param theme int Theme ID for the Untappd menu. Required.
+ */
+
+class Jetpack_Untappd {
+
+ function __construct() {
+ add_action( 'init', array( $this, 'action_init' ) );
+ }
+
+ function action_init() {
+ add_shortcode( 'untappd-menu', array( $this, 'menu_shortcode' ) );
+ }
+
+ /**
+ * [untappd-menu] shortcode.
+ *
+ */
+ static function menu_shortcode( $atts, $content = '' ) {
+ // Let's bail if we don't have location or theme.
+ if ( ! isset( $atts['location'] ) || ! isset( $atts['theme'] ) ) {
+ if ( current_user_can( 'edit_posts') ){
+ return __( 'No location or theme ID provided in the untappd-menu shortcode.', 'jetpack' );
+ }
+ return;
+ }
+
+ // Let's apply some defaults.
+ $atts = shortcode_atts( array(
+ 'location' => '',
+ 'theme' => '',
+ ), $atts, 'untappd-menu' );
+
+ // We're going to clean the user input.
+ $atts = array_map( 'absint', $atts );
+
+ if ( $atts['location'] < 1 || $atts['theme'] < 1 ){
+ return;
+ }
+
+ static $untappd_menu = 1;
+
+ $html = '<div id="menu-container-untappd-' . $untappd_menu . '" class="untappd-menu"></div>';
+ $html .= '<script type="text/javascript">' . PHP_EOL;
+ $html .= '!function(e,n){var t=document.createElement("script"),a=document.getElementsByTagName("script")[0];' . PHP_EOL;
+ $html .= 't.async=1,a.parentNode.insertBefore(t,a),t.onload=t.onreadystatechange=function(e,a){' . PHP_EOL;
+ $html .= '(a||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t=void 0,a||n&&n())},' . PHP_EOL;
+ $html .= 't.src=e}("https://embed-menu-preloader.untappdapi.com/embed-menu-preloader.min.js",function(){' . PHP_EOL;
+ $html .= 'PreloadEmbedMenu( "menu-container-untappd-' . $untappd_menu . '",' . $atts["location"] . ',' . $atts["theme"] . ' )});' . PHP_EOL;
+ $html .= '</script>';
+
+ $untappd_menu++;
+
+ return $html;
+ }
+}
+
+new Jetpack_Untappd(); \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/videopress.php b/plugins/jetpack/modules/shortcodes/videopress.php
index f876f1d3..1de52095 100644
--- a/plugins/jetpack/modules/shortcodes/videopress.php
+++ b/plugins/jetpack/modules/shortcodes/videopress.php
@@ -12,11 +12,6 @@ if ( ! Jetpack::is_module_active( 'videopress' ) ) {
'//v0.wordpress.com',
) );
- /**
- * We won't have any videos less than sixty pixels wide. That would be silly.
- */
- define( 'VIDEOPRESS_MIN_WIDTH', 60 );
-
include_once JETPACK__PLUGIN_DIR . 'modules/videopress/utility-functions.php';
include_once JETPACK__PLUGIN_DIR . 'modules/videopress/shortcode.php';
diff --git a/plugins/jetpack/modules/sitemaps/sitemaps.php b/plugins/jetpack/modules/sitemaps/sitemaps.php
index b316ef4d..a56b55a8 100644
--- a/plugins/jetpack/modules/sitemaps/sitemaps.php
+++ b/plugins/jetpack/modules/sitemaps/sitemaps.php
@@ -169,8 +169,15 @@ function jetpack_sitemap_namespaces() {
* @return string
*/
function jetpack_sitemap_initstr( $charset ) {
+ global $wp_rewrite;
// URL to XSLT
- $xsl = get_option( 'permalink_structure' ) ? home_url( '/sitemap.xsl' ) : home_url( '/?jetpack-sitemap-xsl=true' );
+ if ( $wp_rewrite->using_index_permalinks() ) {
+ $xsl = home_url( '/index.php/sitemap.xsl' );
+ } else if ( $wp_rewrite->using_permalinks() ) {
+ $xsl = home_url( '/sitemap.xsl' );
+ } else {
+ $xsl = home_url( '/?jetpack-sitemap-xsl=true' );
+ }
$initstr = '<?xml version="1.0" encoding="' . $charset . '"?>' . "\n";
$initstr .= '<?xml-stylesheet type="text/xsl" href="' . esc_url( $xsl ) . '"?>' . "\n";
@@ -241,7 +248,7 @@ function jetpack_print_news_sitemap_xsl() {
* @link http://sitemaps.org/protocol.php Sitemaps.org protocol.
*/
function jetpack_print_sitemap() {
- global $wpdb;
+ global $wpdb, $post;
$xml = get_transient( 'jetpack_sitemap' );
@@ -291,6 +298,7 @@ function jetpack_print_sitemap() {
unset( $initstr );
$latest_mod = '';
foreach ( $posts as $post ) {
+ setup_postdata( $post );
/**
* Filter condition to allow skipping specific posts in sitemap.
@@ -397,6 +405,7 @@ function jetpack_print_sitemap() {
jetpack_sitemap_array_to_simplexml( array( 'url' => $url_node ), $tree );
unset( $url );
}
+ wp_reset_postdata();
$blog_home = array(
'loc' => esc_url( get_option( 'home' ) ),
'changefreq' => 'daily',
@@ -459,7 +468,7 @@ function jetpack_print_news_sitemap() {
die();
}
- global $wpdb;
+ global $wpdb, $post;
/**
* Filter post types to be included in news sitemap.
@@ -532,6 +541,7 @@ function jetpack_print_news_sitemap() {
<?php
$posts = $wpdb->get_results( $query );
foreach ( $posts as $post ):
+ setup_postdata( $post );
/**
* Filter condition to allow skipping specific posts in news sitemap.
@@ -584,6 +594,7 @@ function jetpack_print_news_sitemap() {
jetpack_print_sitemap_item( $url );
endforeach;
+ wp_reset_postdata();
?>
</urlset>
<?php
@@ -605,11 +616,16 @@ function jetpack_print_news_sitemap() {
* @return string Sitemap URL.
*/
function jetpack_sitemap_uri() {
- if ( get_option( 'permalink_structure' ) ) {
+ global $wp_rewrite;
+
+ if ( $wp_rewrite->using_index_permalinks() ) {
+ $sitemap_url = home_url( '/index.php/sitemap.xml' );
+ } else if ( $wp_rewrite->using_permalinks() ) {
$sitemap_url = home_url( '/sitemap.xml' );
} else {
$sitemap_url = home_url( '/?jetpack-sitemap=true' );
}
+
/**
* Filter sitemap URL relative to home URL.
*
@@ -628,11 +644,16 @@ function jetpack_sitemap_uri() {
* @module sitemaps
*/
function jetpack_news_sitemap_uri() {
- if ( get_option( 'permalink_structure' ) ) {
+ global $wp_rewrite;
+
+ if ( $wp_rewrite->using_index_permalinks() ) {
+ $news_sitemap_url = home_url( '/index.php/news-sitemap.xml' );
+ } else if ( $wp_rewrite->using_permalinks() ) {
$news_sitemap_url = home_url( '/news-sitemap.xml' );
} else {
$news_sitemap_url = home_url( '/?jetpack-news-sitemap=true' );
}
+
/**
* Filter news sitemap URL relative to home URL.
*
@@ -758,4 +779,4 @@ function jetpack_sitemap_initialize() {
}
// Initialize sitemaps once themes can filter the initialization.
-add_action( 'after_setup_theme', 'jetpack_sitemap_initialize' ); \ No newline at end of file
+add_action( 'after_setup_theme', 'jetpack_sitemap_initialize' );
diff --git a/plugins/jetpack/modules/sso.php b/plugins/jetpack/modules/sso.php
index d29380be..81b8f883 100644
--- a/plugins/jetpack/modules/sso.php
+++ b/plugins/jetpack/modules/sso.php
@@ -1,4 +1,5 @@
<?php
+require_once( JETPACK__PLUGIN_DIR . 'modules/sso/class.jetpack-sso-helpers.php' );
/**
* Module Name: Single Sign On
@@ -21,32 +22,20 @@ class Jetpack_SSO {
self::$instance = $this;
- add_action( 'admin_init', array( $this, 'admin_init' ) );
- add_action( 'admin_init', array( $this, 'register_settings' ) );
- add_action( 'login_init', array( $this, 'login_init' ) );
- add_action( 'delete_user', array( $this, 'delete_connection_for_user' ) );
+ add_action( 'admin_init', array( $this, 'maybe_authorize_user_after_sso' ), 1 );
+ add_action( 'admin_init', array( $this, 'register_settings' ) );
+ add_action( 'login_init', array( $this, 'login_init' ) );
+ add_action( 'delete_user', array( $this, 'delete_connection_for_user' ) );
add_filter( 'jetpack_xmlrpc_methods', array( $this, 'xmlrpc_methods' ) );
- add_action( 'init', array( $this, 'maybe_logout_user' ), 5 );
+ add_action( 'init', array( $this, 'maybe_logout_user' ), 5 );
add_action( 'jetpack_modules_loaded', array( $this, 'module_configure_button' ) );
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
+ add_action( 'login_form_logout', array( $this, 'store_wpcom_profile_cookies_on_logout' ) );
+ add_action( 'wp_login', array( 'Jetpack_SSO', 'clear_wpcom_profile_cookies' ) );
+ add_action( 'jetpack_unlinked_user', array( $this, 'delete_connection_for_user') );
// Adding this action so that on login_init, the action won't be sanitized out of the $action global.
add_action( 'login_form_jetpack-sso', '__return_true' );
-
- if (
- $this->should_hide_login_form() &&
- /**
- * Filter the display of the disclaimer message appearing when default WordPress login form is disabled.
- *
- * @module sso
- *
- * @since 2.8.0
- *
- * @param bool true Should the disclaimer be displayed. Default to true.
- */
- apply_filters( 'jetpack_sso_display_disclaimer', true )
- ) {
- add_action( 'login_message', array( $this, 'msg_login_by_jetpack' ) );
- }
}
/**
@@ -56,8 +45,9 @@ class Jetpack_SSO {
* @return Jetpack_SSO
**/
public static function get_instance() {
- if( !is_null( self::$instance ) )
+ if ( ! is_null( self::$instance ) ) {
return self::$instance;
+ }
return self::$instance = new Jetpack_SSO;
}
@@ -72,10 +62,7 @@ class Jetpack_SSO {
Jetpack::module_configuration_screen( __FILE__, array( __CLASS__, 'module_configuration_screen' ) );
}
- public static function module_configuration_load() {
- // wp_safe_redirect( admin_url( 'options-general.php#configure-sso' ) );
- // exit;
- }
+ public static function module_configuration_load() {}
public static function module_configuration_head() {}
@@ -89,6 +76,28 @@ class Jetpack_SSO {
<?php
}
+
+ /**
+ * When the default login form is hidden, this method is called on the 'authenticate' filter with a priority of 30.
+ * This method disables the ability to submit the default login form.
+ *
+ * @param $user
+ *
+ * @return WP_Error
+ */
+ public function disable_default_login_form( $user ) {
+ if ( is_wp_error( $user ) ) {
+ return $user;
+ }
+
+ /**
+ * Since we're returning an error that will be shown as a red notice, let's remove the
+ * informational "blue" notice.
+ */
+ remove_filter( 'login_message', array( $this, 'msg_login_by_jetpack' ) );
+ return new WP_Error( 'jetpack_sso_required', $this->get_sso_required_message() );
+ }
+
/**
* If jetpack_force_logout == 1 in current user meta the user will be forced
* to logout and reauthenticate with the site.
@@ -96,11 +105,12 @@ class Jetpack_SSO {
public function maybe_logout_user() {
global $current_user;
- if( 1 == $current_user->jetpack_force_logout ) {
+ if ( 1 == $current_user->jetpack_force_logout ) {
delete_user_meta( $current_user->ID, 'jetpack_force_logout' );
self::delete_connection_for_user( $current_user->ID );
wp_logout();
wp_safe_redirect( wp_login_url() );
+ exit;
}
}
@@ -124,14 +134,13 @@ class Jetpack_SSO {
$user_query = new WP_User_Query(
array(
'meta_key' => 'wpcom_user_id',
- 'meta_value' => $user_id
+ 'meta_value' => $user_id,
)
);
$user = $user_query->get_results();
$user = $user[0];
-
- if( $user instanceof WP_User ) {
+ if ( $user instanceof WP_User ) {
$user = wp_set_current_user( $user->ID );
update_user_meta( $user->ID, 'jetpack_force_logout', '1' );
self::delete_connection_for_user( $user->ID );
@@ -141,6 +150,70 @@ class Jetpack_SSO {
}
/**
+ * Enqueues scripts and styles necessary for SSO login.
+ */
+ public function login_enqueue_scripts() {
+ global $action;
+
+ if ( ! in_array( $action, array( 'jetpack-sso', 'login' ) ) ) {
+ return;
+ }
+
+ if ( is_rtl() ) {
+ wp_enqueue_style( 'jetpack-sso-login', plugins_url( 'modules/sso/jetpack-sso-login-rtl.css', JETPACK__PLUGIN_FILE ), array( 'login', 'genericons' ), JETPACK__VERSION );
+ } else {
+ wp_enqueue_style( 'jetpack-sso-login', plugins_url( 'modules/sso/jetpack-sso-login.css', JETPACK__PLUGIN_FILE ), array( 'login', 'genericons' ), JETPACK__VERSION );
+ }
+
+ wp_enqueue_script( 'jetpack-sso-login', plugins_url( 'modules/sso/jetpack-sso-login.js', JETPACK__PLUGIN_FILE ), array( 'jquery' ), JETPACK__VERSION );
+ }
+
+ /**
+ * Enqueue styles neceessary for Jetpack SSO on users' profiles
+ */
+ public function admin_enqueue_scripts() {
+ $screen = get_current_screen();
+
+ if ( empty( $screen ) || ! in_array( $screen->base, array( 'edit-user', 'profile' ) ) ) {
+ return;
+ }
+
+ wp_enqueue_style( 'jetpack-sso-profile', plugins_url( 'modules/sso/jetpack-sso-profile.css', JETPACK__PLUGIN_FILE ), array( 'genericons' ), JETPACK__VERSION );
+ }
+
+ /**
+ * Adds Jetpack SSO classes to login body
+ *
+ * @param array $classes Array of classes to add to body tag
+ * @return array Array of classes to add to body tag
+ */
+ public function login_body_class( $classes ) {
+ global $action;
+
+ if ( ! in_array( $action, array( 'jetpack-sso', 'login' ) ) ) {
+ return $classes;
+ }
+
+ // Always add the jetpack-sso class so that we can add SSO specific styling even when the SSO form isn't being displayed.
+ $classes[] = 'jetpack-sso';
+
+ /**
+ * Should we show the SSO login form?
+ *
+ * $_GET['jetpack-sso-default-form'] is used to provide a fallback in case JavaScript is not enabled.
+ *
+ * The default_to_sso_login() method allows us to dynamically decide whether we show the SSO login form or not.
+ * The SSO module uses the method to display the default login form if we can not find a user to log in via SSO.
+ * But, the method could be filtered by a site admin to always show the default login form if that is preferred.
+ */
+ if ( empty( $_GET['jetpack-sso-show-default-form'] ) && Jetpack_SSO_Helpers::show_sso_login() ) {
+ $classes[] = 'jetpack-sso-form-display';
+ }
+
+ return $classes;
+ }
+
+ /**
* Adds settings fields to Settings > General > Single Sign On that allows users to
* turn off the login form on wp-login.php
*
@@ -157,26 +230,6 @@ class Jetpack_SSO {
/*
* Settings > General > Single Sign On
- * Checkbox for Remove default login form
- */
- /* Hide in 2.9
- register_setting(
- 'general',
- 'jetpack_sso_remove_login_form',
- array( $this, 'validate_settings_remove_login_form_checkbox' )
- );
-
- add_settings_field(
- 'jetpack_sso_remove_login_form',
- __( 'Remove default login form?' , 'jetpack' ),
- array( $this, 'render_remove_login_form_checkbox' ),
- 'general',
- 'jetpack_sso_settings'
- );
- */
-
- /*
- * Settings > General > Single Sign On
* Require two step authentication
*/
register_setting(
@@ -193,7 +246,6 @@ class Jetpack_SSO {
'jetpack_sso_settings'
);
-
/*
* Settings > General > Single Sign On
*/
@@ -219,13 +271,17 @@ class Jetpack_SSO {
* @since 2.7
**/
public function render_require_two_step() {
- /** This filter is documented in modules/sso.php */
- $require_two_step = 1 == apply_filters( 'jetpack_sso_require_two_step', get_option( 'jetpack_sso_require_two_step' ) );
- $disabled = $require_two_step ? ' disabled="disabled"' : '';
- echo '<label>';
- echo '<input type="checkbox" name="jetpack_sso_require_two_step" ' . checked( $require_two_step, true, false ) . "$disabled>";
- esc_html_e( 'Require Two-Step Authentication' , 'jetpack' );
- echo '</label>';
+ ?>
+ <label>
+ <input
+ type="checkbox"
+ name="jetpack_sso_require_two_step"
+ <?php checked( Jetpack_SSO_Helpers::is_two_step_required() ); ?>
+ <?php disabled( Jetpack_SSO_Helpers::is_require_two_step_checkbox_disabled() ); ?>
+ >
+ <?php esc_html_e( 'Require Two-Step Authentication' , 'jetpack' ); ?>
+ </label>
+ <?php
}
/**
@@ -245,12 +301,17 @@ class Jetpack_SSO {
* @since 2.9
**/
public function render_match_by_email() {
- $match_by_email = 1 == $this->match_by_email();
- $disabled = $match_by_email ? ' disabled="disabled"' : '';
- echo '<label>';
- echo '<input type="checkbox" name="jetpack_sso_match_by_email"' . checked( $match_by_email, true, false ) . "$disabled>";
- esc_html_e( 'Match by Email', 'jetpack' );
- echo '</label>';
+ ?>
+ <label>
+ <input
+ type="checkbox"
+ name="jetpack_sso_match_by_email"
+ <?php checked( Jetpack_SSO_Helpers::match_by_email() ); ?>
+ <?php disabled( Jetpack_SSO_Helpers::is_match_by_email_checkbox_disabled() ); ?>
+ >
+ <?php esc_html_e( 'Match by Email', 'jetpack' ); ?>
+ </label>
+ <?php
}
/**
@@ -264,46 +325,6 @@ class Jetpack_SSO {
}
/**
- * Builds the display for the checkbox allowing users to remove the default
- * WordPress login form from wp-login.php. Displays in Settings > General
- *
- * @since 2.7
- **/
- public function render_remove_login_form_checkbox() {
- if( $this->is_user_connected( get_current_user_id() ) ) {
- echo '<a name="configure-sso"></a>';
- echo '<input type="checkbox" name="jetpack_sso_remove_login_form[remove_login_form]" ' . checked( 1 == get_option( 'jetpack_sso_remove_login_form' ), true, false ) . '>';
- echo '<p class="description">Removes default login form and disallows login via POST</p>';
- } else {
- echo 'Your account must be connected to WordPress.com before disabling the login form.';
- echo '<br/>' . $this->button();
- }
- }
-
- /**
- * Validate settings input from Settings > General
- *
- * @since 2.7
- * @return boolean
- **/
- public function validate_settings_remove_login_form_checkbox( $input ) {
- return ( isset( $input['remove_login_form'] ) )? 1: 0;
- }
-
- /**
- * Removes 'Lost your password?' text from the login form if user
- * does not want to show the login form
- *
- * @since 2.7
- * @return string
- **/
- public function remove_lost_password_text( $text ) {
- if( 'Lost your password?' == $text )
- $text = '';
- return $text;
- }
-
- /**
* Checks to determine if the user wants to login on wp-login
*
* This function mostly exists to cover the exceptions to login
@@ -318,42 +339,51 @@ class Jetpack_SSO {
$wants_to_login = false;
// Cover default WordPress behavior
- $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
+ $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'login';
// And now the exceptions
$action = isset( $_GET['loggedout'] ) ? 'loggedout' : $action;
- if( 'login' == $action ) {
+ if ( 'login' == $action ) {
$wants_to_login = true;
}
return $wants_to_login;
}
- private function bypass_login_forward_wpcom() {
- /**
- * Redirect the site's log in form to WordPress.com's log in form.
- *
- * @module sso
- *
- * @since 3.1.0
- *
- * @param bool false Should the site's log in form be automatically forwarded to WordPress.com's log in form.
- */
- return apply_filters( 'jetpack_sso_bypass_login_forward_wpcom', false );
- }
-
function login_init() {
global $action;
+ if ( Jetpack_SSO_Helpers::should_hide_login_form() ) {
+ /**
+ * Since the default authenticate filters fire at priority 20 for checking username and password,
+ * let's fire at priority 30. wp_authenticate_spam_check is fired at priority 99, but since we return a
+ * WP_Error in disable_default_login_form, then we won't trigger spam processing logic.
+ */
+ add_filter( 'authenticate', array( $this, 'disable_default_login_form' ), 30 );
+
+ /**
+ * Filter the display of the disclaimer message appearing when default WordPress login form is disabled.
+ *
+ * @module sso
+ *
+ * @since 2.8.0
+ *
+ * @param bool true Should the disclaimer be displayed. Default to true.
+ */
+ $display_sso_disclaimer = apply_filters( 'jetpack_sso_display_disclaimer', true );
+ if ( $display_sso_disclaimer ) {
+ add_filter( 'login_message', array( $this, 'msg_login_by_jetpack' ) );
+ }
+ }
+
/**
- * If the user is attempting to logout AND the auto-forward to WordPress.com
- * login is set then we need to ensure we do not auto-forward the user and get
- * them stuck in an infinite logout loop.
- */
- if( isset( $_GET['loggedout'] ) && $this->bypass_login_forward_wpcom() ) {
- add_filter( 'jetpack_remove_login_form', '__return_true' );
- add_filter( 'gettext', array( $this, 'remove_lost_password_text' ) );
+ * If the user is attempting to logout AND the auto-forward to WordPress.com
+ * login is set then we need to ensure we do not auto-forward the user and get
+ * them stuck in an infinite logout loop.
+ */
+ if ( isset( $_GET['loggedout'] ) && Jetpack_SSO_Helpers::bypass_login_forward_wpcom() ) {
+ add_filter( 'jetpack_remove_login_form', '__return_true' );
}
/**
@@ -363,49 +393,59 @@ class Jetpack_SSO {
*/
if (
$this->wants_to_login()
- && $this->bypass_login_forward_wpcom()
+ && Jetpack_SSO_Helpers::bypass_login_forward_wpcom()
) {
add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
$this->maybe_save_cookie_redirect();
- wp_safe_redirect( $this->build_sso_url() );
+ $reauth = ! empty( $_GET['force_reauth'] );
+ $sso_url = $this->get_sso_url_or_die( $reauth );
+ JetpackTracking::record_user_event( 'sso_login_redirect_bypass_success' );
+ wp_safe_redirect( $sso_url );
+ exit;
}
if ( 'login' === $action ) {
- wp_enqueue_script( 'jquery' );
- wp_enqueue_style( 'genericons' );
- add_action( 'login_footer', array( $this, 'login_form' ) );
- add_action( 'login_footer', array( $this, 'login_footer' ) );
-/*
- if ( get_option( 'jetpack_sso_remove_login_form' ) ) {
- // Check to see if the user is attempting to login via the default login form.
- // If so we need to deny it and forward elsewhere.
- if( isset( $_REQUEST['wp-submit'] ) && 'Log In' == $_REQUEST['wp-submit'] ) {
- wp_die( 'Login not permitted by this method. ');
- }
- add_filter( 'gettext', array( $this, 'remove_lost_password_text' ) );
- }
-*/
+ $this->display_sso_login_form();
} elseif ( 'jetpack-sso' === $action ) {
if ( isset( $_GET['result'], $_GET['user_id'], $_GET['sso_nonce'] ) && 'success' == $_GET['result'] ) {
$this->handle_login();
- wp_enqueue_script( 'jquery' );
- wp_enqueue_style( 'genericons' );
- add_action( 'login_footer', array( $this, 'login_form' ) );
- add_action( 'login_footer', array( $this, 'login_footer' ) );
+ $this->display_sso_login_form();
} else {
if ( Jetpack::check_identity_crisis() ) {
+ JetpackTracking::record_user_event( 'sso_login_redirect_failed', array(
+ 'error_message' => 'identity_crisis'
+ ) );
wp_die( __( "Error: This site's Jetpack connection is currently experiencing problems.", 'jetpack' ) );
} else {
$this->maybe_save_cookie_redirect();
// Is it wiser to just use wp_redirect than do this runaround to wp_safe_redirect?
add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
- wp_safe_redirect( $this->build_sso_url() );
+ $reauth = ! empty( $_GET['force_reauth'] );
+ $sso_url = $this->get_sso_url_or_die( $reauth );
+ JetpackTracking::record_user_event( 'sso_login_redirect_success' );
+ wp_safe_redirect( $sso_url );
+ exit;
}
}
}
}
/**
+ * Ensures that we can get a nonce from WordPress.com via XML-RPC before setting
+ * up the hooks required to display the SSO form.
+ */
+ public function display_sso_login_form() {
+ $sso_nonce = self::request_initial_nonce();
+ if ( is_wp_error( $sso_nonce ) ) {
+ return;
+ }
+
+ add_action( 'login_form', array( $this, 'login_form' ) );
+ add_filter( 'login_body_class', array( $this, 'login_body_class' ) );
+ add_action( 'login_enqueue_scripts', array( $this, 'login_enqueue_scripts' ) );
+ }
+
+ /**
* Conditionally save the redirect_to url as a cookie.
*/
public static function maybe_save_cookie_redirect() {
@@ -413,13 +453,13 @@ class Jetpack_SSO {
return new WP_Error( 'headers_sent', __( 'Cannot deal with cookie redirects, as headers are already sent.', 'jetpack' ) );
}
- // If we have something to redirect to
if ( ! empty( $_GET['redirect_to'] ) ) {
+ // If we have something to redirect to
$url = esc_url_raw( $_GET['redirect_to'] );
setcookie( 'jetpack_sso_redirect_to', $url, time() + HOUR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, false, true );
- // Otherwise, if it's already set
+
} elseif ( ! empty( $_COOKIE['jetpack_sso_redirect_to'] ) ) {
- // Purge it.
+ // Otherwise, if it's already set, purge it.
setcookie( 'jetpack_sso_redirect_to', ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
}
@@ -431,95 +471,107 @@ class Jetpack_SSO {
}
/**
- * Determine if the login form should be hidden or not
- *
- * Method is private only because it is only used in this class so far.
- * Feel free to change it later
- *
- * @return bool
- **/
- private function should_hide_login_form() {
- /**
- * Remove the default log in form, only leave the WordPress.com log in button.
- *
- * @module sso
- *
- * @since 3.1.0
- *
- * @param bool get_option( 'jetpack_sso_remove_login_form', false ) Should the default log in form be removed. Default to false.
- */
- return apply_filters( 'jetpack_remove_login_form', get_option( 'jetpack_sso_remove_login_form', false ) );
- }
-
+ * Outputs the Jetpack SSO button and description as well as the toggle link
+ * for switching between Jetpack SSO and default login.
+ */
function login_form() {
- $classes = '';
-
- if( $this->should_hide_login_form() ) {
- $classes .= ' forced-sso';
+ $site_name = get_bloginfo( 'name' );
+ if ( ! $site_name ) {
+ $site_name = get_bloginfo( 'url' );
}
- echo '<div class="jetpack-sso-wrap' . $classes . '">' . $this->button() . '</div>';
- }
- function login_footer() {
- $hide_login_form = $this->should_hide_login_form();
+ $display_name = ! empty( $_COOKIE[ 'jetpack_sso_wpcom_name_' . COOKIEHASH ] )
+ ? $_COOKIE[ 'jetpack_sso_wpcom_name_' . COOKIEHASH ]
+ : false;
+ $gravatar = ! empty( $_COOKIE[ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH ] )
+ ? $_COOKIE[ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH ]
+ : false;
+
?>
- <style>
- #loginform {
- overflow: hidden;
- padding-bottom: 26px;
- }
- .jetpack-sso-wrap {
- <?php if ( $hide_login_form ) : ?>
- text-align: center;
- <?php else : ?>
- float: right;
- <?php endif; ?>
- margin: 1em 0 0;
- clear: right;
- display: block;
- }
+ <div id="jetpack-sso-wrap">
+ <?php if ( $display_name && $gravatar ) : ?>
+ <div id="jetpack-sso-wrap__user">
+ <img width="72" height="72" src="<?php echo esc_html( $gravatar ); ?>" />
+
+ <h2>
+ <?php
+ echo wp_kses(
+ sprintf( __( 'Log in as <span>%s</span>', 'jetpack' ), esc_html( $display_name ) ),
+ array( 'span' => true )
+ );
+ ?>
+ </h2>
+ </div>
- <?php if ( $hide_login_form ) : ?>
- .forced-sso .jetpack-sso.button {
- font-size: 16px;
- line-height: 27px;
- height: 37px;
- padding: 5px 12px 6px 47px;
- }
- .forced-sso .jetpack-sso.button:before {
- font-size: 28px !important;
- height: 37px;
- padding: 5px 5px 4px;
- width: 37px;
- }
- <?php endif; ?>
- </style>
- <script>
- jQuery(document).ready(function($){
- <?php if ( $hide_login_form ) : ?>
- $( '#loginform' ).empty();
<?php endif; ?>
- $( '#loginform' ).append( $( '.jetpack-sso-wrap' ) );
- var $rememberme = $( '#rememberme' ),
- $ssoButton = $( 'a.jetpack-sso.button' );
- $rememberme.on( 'change', function() {
- var url = $ssoButton.prop( 'href' ),
- isChecked = $rememberme.prop( 'checked' ) ? 1 : 0;
+ <div id="jetpack-sso-wrap__action">
+ <?php echo $this->build_sso_button( array(), 'is_primary' ); ?>
- if ( url.match( /&rememberme=\d/ ) ) {
- url = url.replace( /&rememberme=\d/, '&rememberme=' + isChecked );
- } else {
- url += '&rememberme=' + isChecked;
- }
+ <?php if ( $display_name && $gravatar ) : ?>
+ <a rel="nofollow" class="jetpack-sso-wrap__reauth" href="<?php echo esc_url( $this->build_sso_button_url( array( 'force_reauth' => '1' ) ) ); ?>">
+ <?php esc_html_e( 'Log in as a different WordPress.com user', 'jetpack' ); ?>
+ </a>
+ <?php else : ?>
+ <p>
+ <?php
+ echo esc_html(
+ sprintf(
+ __( 'You can now save time spent logging in by connecting your WordPress.com account to %s.', 'jetpack' ),
+ esc_html( $site_name )
+ )
+ );
+ ?>
+ </p>
+ <?php endif; ?>
+ </div>
+
+ <?php if ( ! Jetpack_SSO_Helpers::should_hide_login_form() ) : ?>
+ <div class="jetpack-sso-or">
+ <span><?php esc_html_e( 'Or', 'jetpack' ); ?></span>
+ </div>
+
+ <a href="<?php echo add_query_arg( 'jetpack-sso-show-default-form', '1' ); ?>" class="jetpack-sso-toggle wpcom">
+ <?php
+ esc_html_e( 'Log in with username and password', 'jetpack' )
+ ?>
+ </a>
+
+ <a href="<?php echo add_query_arg( 'jetpack-sso-show-default-form', '0' ); ?>" class="jetpack-sso-toggle default">
+ <?php
+ esc_html_e( 'Log in with WordPress.com', 'jetpack' )
+ ?>
+ </a>
+ <?php endif; ?>
+ </div>
+ <?php
+ }
- $ssoButton.prop( 'href', url );
- } ).change();
+ /**
+ * Clear the cookies that store the profile information for the last
+ * WPCOM user to connect.
+ */
+ static function clear_wpcom_profile_cookies() {
+ if ( isset( $_COOKIE[ 'jetpack_sso_wpcom_name_' . COOKIEHASH ] ) ) {
+ setcookie(
+ 'jetpack_sso_wpcom_name_' . COOKIEHASH,
+ ' ',
+ time() - YEAR_IN_SECONDS,
+ COOKIEPATH,
+ COOKIE_DOMAIN
+ );
+ }
- });
- </script>
- <?php
+ if ( isset( $_COOKIE[ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH ] ) ) {
+ setcookie(
+ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH,
+ ' ',
+ time() - YEAR_IN_SECONDS,
+ COOKIEPATH,
+ COOKIE_DOMAIN
+ );
+ }
}
static function delete_connection_for_user( $user_id ) {
@@ -528,7 +580,7 @@ class Jetpack_SSO {
}
Jetpack::load_xml_rpc_client();
$xml = new Jetpack_IXR_Client( array(
- 'user_id' => $user_id
+ 'wpcom_user_id' => $user_id,
) );
$xml->query( 'jetpack.sso.removeUser', $wpcom_user_id );
@@ -536,18 +588,23 @@ class Jetpack_SSO {
return false;
}
+ // Clean up local data stored for SSO
+ delete_user_meta( $user_id, 'wpcom_user_id' );
+ delete_user_meta( $user_id, 'wpcom_user_data' );
+ self::clear_wpcom_profile_cookies();
+
return $xml->getResponse();
}
static function request_initial_nonce() {
Jetpack::load_xml_rpc_client();
$xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id()
+ 'user_id' => get_current_user_id(),
) );
$xml->query( 'jetpack.sso.requestNonce' );
if ( $xml->isError() ) {
- wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
+ return new WP_Error( $xml->getErrorCode(), $xml->getErrorMessage() );
}
return $xml->getResponse();
@@ -559,21 +616,29 @@ class Jetpack_SSO {
function handle_login() {
$wpcom_nonce = sanitize_key( $_GET['sso_nonce'] );
$wpcom_user_id = (int) $_GET['user_id'];
- $result = sanitize_key( $_GET['result'] );
Jetpack::load_xml_rpc_client();
$xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id()
+ 'user_id' => get_current_user_id(),
) );
$xml->query( 'jetpack.sso.validateResult', $wpcom_nonce, $wpcom_user_id );
if ( $xml->isError() ) {
- wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
+ $error_message = sanitize_text_field(
+ sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() )
+ );
+ JetpackTracking::record_user_event( 'sso_login_failed', array(
+ 'error_message' => $error_message
+ ) );
+ wp_die( $error_message );
}
$user_data = $xml->getResponse();
if ( empty( $user_data ) ) {
+ JetpackTracking::record_user_event( 'sso_login_failed', array(
+ 'error_message' => 'invalid_response_data'
+ ) );
wp_die( __( 'Error, invalid response data.', 'jetpack' ) );
}
@@ -587,46 +652,35 @@ class Jetpack_SSO {
*
* @since 2.6.0
*
- * @param object $user_data User login information.
+ * @param object $user_data WordPress.com User information.
*/
do_action( 'jetpack_sso_pre_handle_login', $user_data );
- /**
- * Is it required to have 2-step authentication enabled on WordPress.com to use SSO?
- *
- * @module sso
- *
- * @since 2.8.0
- *
- * @param bool get_option( 'jetpack_sso_require_two_step' ) Does SSO require 2-step authentication?
- */
- $require_two_step = apply_filters( 'jetpack_sso_require_two_step', get_option( 'jetpack_sso_require_two_step' ) );
- if( $require_two_step && 0 == (int) $user_data->two_step_enabled ) {
+ if ( Jetpack_SSO_Helpers::is_two_step_required() && 0 === (int) $user_data->two_step_enabled ) {
$this->user_data = $user_data;
+
+ JetpackTracking::record_user_event( 'sso_login_failed', array(
+ 'error_message' => 'error_msg_enable_two_step'
+ ) );
+
/** This filter is documented in core/src/wp-includes/pluggable.php */
do_action( 'wp_login_failed', $user_data->login );
- add_action( 'login_message', array( $this, 'error_msg_enable_two_step' ) );
+ add_filter( 'login_message', array( $this, 'error_msg_enable_two_step' ) );
return;
}
- if ( isset( $_GET['state'] ) && ( 0 < strpos( $_GET['state'], '|' ) ) ) {
- list( $state, $nonce ) = explode( '|', $_GET['state'] );
-
- if ( wp_verify_nonce( $nonce, $state ) ) {
- if ( 'sso-link-user' == $state ) {
- $user = wp_get_current_user();
- update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
- add_filter( 'login_redirect', array( __CLASS__, 'profile_page_url' ) );
- }
- } else wp_nonce_ays();
- }
-
- if ( empty( $user ) ) {
- $user = $this->get_user_by_wpcom_id( $user_data->ID );
+ $user_found_with = '';
+ if ( empty( $user ) && isset( $user_data->external_user_id ) ) {
+ $user_found_with = 'external_user_id';
+ $user = get_user_by( 'id', intval( $user_data->external_user_id ) );
+ if ( $user ) {
+ update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
+ }
}
// If we don't have one by wpcom_user_id, try by the email?
- if ( empty( $user ) && self::match_by_email() ) {
+ if ( empty( $user ) && Jetpack_SSO_Helpers::match_by_email() ) {
+ $user_found_with = 'match_by_email';
$user = get_user_by( 'email', $user_data->email );
if ( $user ) {
update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
@@ -634,7 +688,7 @@ class Jetpack_SSO {
}
// If we've still got nothing, create the user.
- if ( empty( $user ) && ( get_option( 'users_can_register' ) || self::new_user_override() ) ) {
+ if ( empty( $user ) && ( get_option( 'users_can_register' ) || Jetpack_SSO_Helpers::new_user_override() ) ) {
// If not matching by email we still need to verify the email does not exist
// or this blows up
/**
@@ -642,7 +696,7 @@ class Jetpack_SSO {
* been found in the first pass. If get_user_by( 'email' ) doesn't find the
* user, then we know that email is unused, so it's safe to add.
*/
- if ( self::match_by_email() || ! get_user_by( 'email', $user_data->email ) ) {
+ if ( Jetpack_SSO_Helpers::match_by_email() || ! get_user_by( 'email', $user_data->email ) ) {
$username = $user_data->login;
if ( username_exists( $username ) ) {
@@ -653,10 +707,17 @@ class Jetpack_SSO {
while ( username_exists( $username ) ) {
$username = $user_data->login . '_' . $user_data->ID . '_' . mt_rand();
if ( $tries++ >= 5 ) {
+ JetpackTracking::record_user_event( 'sso_login_failed', array(
+ 'error_message' => 'could_not_create_username'
+ ) );
wp_die( __( "Error: Couldn't create suitable username.", 'jetpack' ) );
}
}
+ $user_found_with = Jetpack_SSO_Helpers::new_user_override()
+ ? 'user_created_new_user_override'
+ : 'user_created_users_can_register';
+
$password = wp_generate_password( 20 );
$user_id = wp_create_user( $username, $password, $user_data->email );
$user = get_userdata( $user_id );
@@ -670,8 +731,11 @@ class Jetpack_SSO {
update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
} else {
+ JetpackTracking::record_user_event( 'sso_login_failed', array(
+ 'error_message' => 'error_msg_email_already_exists'
+ ) );
+
$this->user_data = $user_data;
- // do_action( 'wp_login_failed', $user_data->login );
add_action( 'login_message', array( $this, 'error_msg_email_already_exists' ) );
return;
}
@@ -684,13 +748,13 @@ class Jetpack_SSO {
*
* @since 2.6.0
*
- * @param array $user WordPress.com User information.
- * @param object $user_data User Login information.
+ * @param array $user Local User information.
+ * @param object $user_data WordPress.com User Login information.
*/
do_action( 'jetpack_sso_handle_login', $user, $user_data );
if ( $user ) {
- // Cache the user's details, so we can present it back to them on their user screen.
+ // Cache the user's details, so we can present it back to them on their user screen
update_user_meta( $user->ID, 'wpcom_user_data', $user_data );
$remember = false;
@@ -714,7 +778,9 @@ class Jetpack_SSO {
/** This filter is documented in core/src/wp-includes/user.php */
do_action( 'wp_login', $user->user_login, $user );
- $_request_redirect_to = isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
+ wp_set_current_user( $user->ID );
+
+ $_request_redirect_to = isset( $_REQUEST['redirect_to'] ) ? esc_url_raw( $_REQUEST['redirect_to'] ) : '';
$redirect_to = user_can( $user, 'edit_posts' ) ? admin_url() : self::profile_page_url();
// If we have a saved redirect to request in a cookie
@@ -725,6 +791,32 @@ class Jetpack_SSO {
setcookie( 'jetpack_sso_redirect_to', ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
}
+ $is_user_connected = Jetpack::is_user_connected( $user->ID );
+ JetpackTracking::record_user_event( 'sso_user_logged_in', array(
+ 'user_found_with' => $user_found_with,
+ 'user_connected' => (bool) $is_user_connected,
+ 'user_role' => Jetpack::init()->translate_current_user_to_role()
+ ) );
+
+ if ( ! $is_user_connected ) {
+ $calypso_env = ! empty( $_GET['calypso_env'] )
+ ? sanitize_key( $_GET['calypso_env'] )
+ : '';
+
+ wp_safe_redirect(
+ add_query_arg(
+ array(
+ 'redirect_to' => $redirect_to,
+ 'request_redirect_to' => $_request_redirect_to,
+ 'calypso_env' => $calypso_env,
+ 'jetpack-sso-auth-redirect' => '1',
+ ),
+ admin_url()
+ )
+ );
+ exit;
+ }
+
wp_safe_redirect(
/** This filter is documented in core/src/wp-login.php */
apply_filters( 'login_redirect', $redirect_to, $_request_redirect_to, $user )
@@ -732,57 +824,61 @@ class Jetpack_SSO {
exit;
}
+ add_filter( 'jetpack_sso_default_to_sso_login', '__return_false' );
+
+ JetpackTracking::record_user_event( 'sso_login_failed', array(
+ 'error_message' => 'cant_find_user'
+ ) );
+
$this->user_data = $user_data;
/** This filter is documented in core/src/wp-includes/pluggable.php */
do_action( 'wp_login_failed', $user_data->login );
- add_action( 'login_message', array( $this, 'cant_find_user' ) );
+ add_filter( 'login_message', array( $this, 'cant_find_user' ) );
}
static function profile_page_url() {
return admin_url( 'profile.php' );
}
- static function match_by_email() {
- $match_by_email = ( 1 == get_option( 'jetpack_sso_match_by_email', true ) ) ? true: false;
- $match_by_email = defined( 'WPCC_MATCH_BY_EMAIL' ) ? WPCC_MATCH_BY_EMAIL : $match_by_email;
-
- /**
- * Link the local account to an account on WordPress.com using the same email address.
- *
- * @module sso
- *
- * @since 2.6.0
- *
- * @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.
- */
- return apply_filters( 'jetpack_sso_match_by_email', $match_by_email );
- }
-
- static function new_user_override() {
- $new_user_override = defined( 'WPCC_NEW_USER_OVERRIDE' ) ? WPCC_NEW_USER_OVERRIDE : false;
-
- /**
- * Allow users to register on your site with a WordPress.com account, even though you disallow normal registrations.
- *
- * @module sso
- *
- * @since 2.6.0
- *
- * @param bool $new_user_override Allow users to register on your site with a WordPress.com account. Default to false.
- */
- return apply_filters( 'jetpack_sso_new_user_override', $new_user_override );
- }
-
function allowed_redirect_hosts( $hosts ) {
if ( empty( $hosts ) ) {
$hosts = array();
}
$hosts[] = 'wordpress.com';
+ $hosts[] = 'jetpack.wordpress.com';
return array_unique( $hosts );
}
- function button( $args = array() ) {
+ /**
+ * Builds the "Login to WordPress.com" button that is displayed on the login page as well as user profile page.
+ *
+ * @param array $args An array of arguments to add to the SSO URL.
+ * @param boolean $is_primary Should the button have the `button-primary` class?
+ * @return string Returns the HTML markup for the button.
+ */
+ function build_sso_button( $args = array(), $is_primary = false ) {
+ $url = $this->build_sso_button_url( $args );
+ $classes = $is_primary
+ ? 'jetpack-sso button button-primary'
+ : 'jetpack-sso button';
+
+ return sprintf(
+ '<a rel="nofollow" href="%1$s" class="%2$s"><span>%3$s %4$s</span></a>',
+ esc_url( $url ),
+ $classes,
+ '<span class="genericon genericon-wordpress"></span>',
+ esc_html__( 'Log in with WordPress.com', 'jetpack' )
+ );
+ }
+
+ /**
+ * Builds a URL with `jetpack-sso` action and option args which is used to setup SSO.
+ *
+ * @param array $args An array of arguments to add to the SSO URL.
+ * @return string The URL used for SSO.
+ */
+ function build_sso_button_url( $args = array() ) {
$defaults = array(
'action' => 'jetpack-sso',
);
@@ -790,84 +886,107 @@ class Jetpack_SSO {
$args = wp_parse_args( $args, $defaults );
if ( ! empty( $_GET['redirect_to'] ) ) {
- $args['redirect_to'] = esc_url_raw( $_GET['redirect_to'] );
+ $args['redirect_to'] = urlencode( esc_url_raw( $_GET['redirect_to'] ) );
}
- $url = add_query_arg( $args, wp_login_url() );
+ return add_query_arg( $args, wp_login_url() );
+ }
- $css = "<style>
- .jetpack-sso.button {
- position: relative;
- padding-left: 37px;
- }
- .jetpack-sso.button:before {
- display: block;
- box-sizing: border-box;
- padding: 7px 0 0;
- text-align: center;
- position: absolute;
- top: -1px;
- left: -1px;
- border-radius: 2px 0 0 2px;
- content: '\\f205';
- background: #0074a2;
- color: #fff;
- -webkit-font-smoothing: antialiased;
- width: 30px;
- height: 107%;
- height: calc( 100% + 2px );
- font: normal 22px/1 Genericons !important;
- text-shadow: none;
- }
- @media screen and (min-width: 783px) {
- .jetpack-sso.button:before {
- padding-top: 3px;
- }
- }
- .jetpack-sso.button:hover {
- border: 1px solid #aaa;
- }";
-
- if ( version_compare( $GLOBALS['wp_version'], '3.8-alpha', '<' ) ) {
- $css .= "
- .jetpack-sso.button:before {
- width: 25px;
- font-size: 18px !important;
- }
- ";
+ /**
+ * Retrieves a WordPress.com SSO URL with appropriate query parameters or dies.
+ *
+ * @param boolean $reauth Should the user be forced to reauthenticate on WordPress.com?
+ * @param array $args Optional query parameters.
+ * @return string The WordPress.com SSO URL.
+ */
+ function get_sso_url_or_die( $reauth = false, $args = array() ) {
+ if ( empty( $reauth ) ) {
+ $sso_redirect = $this->build_sso_url( $args );
+ } else {
+ self::clear_wpcom_profile_cookies();
+ $sso_redirect = $this->build_reauth_and_sso_url( $args );
}
- $css .= "</style>";
+ // If there was an error retrieving the SSO URL, then error.
+ if ( is_wp_error( $sso_redirect ) ) {
+ $error_message = sanitize_text_field(
+ sprintf( '%s: %s', $sso_redirect->get_error_code(), $sso_redirect->get_error_message() )
+ );
+ JetpackTracking::record_user_event( 'sso_login_redirect_failed', array(
+ 'error_message' => $error_message
+ ) );
+ wp_die( $error_message );
+ }
- $button = sprintf( '<a href="%1$s" class="jetpack-sso button">%2$s</a>', esc_url( $url ), esc_html__( 'Log in with WordPress.com', 'jetpack' ) );
- return $button . $css;
+ return $sso_redirect;
}
+ /**
+ * Build WordPress.com SSO URL with appropriate query parameters.
+ *
+ * @param array $args Optional query parameters.
+ * @return string WordPress.com SSO URL
+ */
function build_sso_url( $args = array() ) {
+ $sso_nonce = ! empty( $args['sso_nonce'] ) ? $args['sso_nonce'] : self::request_initial_nonce();
$defaults = array(
- 'action' => 'jetpack-sso',
- 'site_id' => Jetpack_Options::get_option( 'id' ),
- 'sso_nonce' => self::request_initial_nonce(),
+ 'action' => 'jetpack-sso',
+ 'site_id' => Jetpack_Options::get_option( 'id' ),
+ 'sso_nonce' => $sso_nonce,
+ 'calypso_auth' => '1',
);
- if ( isset( $_GET['state'] ) && check_admin_referer( $_GET['state'] ) ) {
- $defaults['state'] = rawurlencode( $_GET['state'] . '|' . $_GET['_wpnonce'] );
+ $args = wp_parse_args( $args, $defaults );
+
+ if ( is_wp_error( $args['sso_nonce'] ) ) {
+ return $args['sso_nonce'];
+ }
+
+ return add_query_arg( $args, 'https://wordpress.com/wp-login.php' );
+ }
+
+ /**
+ * Build WordPress.com SSO URL with appropriate query parameters,
+ * including the parameters necessary to force the user to reauthenticate
+ * on WordPress.com.
+ *
+ * @param array $args Optional query parameters.
+ * @return string WordPress.com SSO URL
+ */
+ function build_reauth_and_sso_url( $args = array() ) {
+ $sso_nonce = ! empty( $args['sso_nonce'] ) ? $args['sso_nonce'] : self::request_initial_nonce();
+ $redirect = $this->build_sso_url( array( 'force_auth' => '1', 'sso_nonce' => $sso_nonce ) );
+
+ if ( is_wp_error( $redirect ) ) {
+ return $redirect;
}
+ $defaults = array(
+ 'action' => 'jetpack-sso',
+ 'site_id' => Jetpack_Options::get_option( 'id' ),
+ 'sso_nonce' => $sso_nonce,
+ 'reauth' => '1',
+ 'redirect_to' => urlencode( $redirect ),
+ 'calypso_auth' => '1',
+ );
+
$args = wp_parse_args( $args, $defaults );
- $url = add_query_arg( $args, 'https://wordpress.com/wp-login.php' );
- return $url;
+ if ( is_wp_error( $args['sso_nonce'] ) ) {
+ return $args['sso_nonce'];
+ }
+
+ return add_query_arg( $args, 'https://wordpress.com/wp-login.php' );
}
/**
- * Determines local user associated with a given WordPress.com user ID.
- *
- * @since 2.6.0
- *
- * @param int $wpcom_user_id User ID from WordPress.com
- * @return object Local user object if found, null if not.
- */
+ * Determines local user associated with a given WordPress.com user ID.
+ *
+ * @since 2.6.0
+ *
+ * @param int $wpcom_user_id User ID from WordPress.com
+ * @return object Local user object if found, null if not.
+ */
static function get_user_by_wpcom_id( $wpcom_user_id ) {
$user_query = new WP_User_Query( array(
'meta_key' => 'wpcom_user_id',
@@ -888,9 +1007,19 @@ class Jetpack_SSO {
* @return string
**/
public function error_msg_enable_two_step( $message ) {
- $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' );
+ $error = sprintf(
+ wp_kses(
+ __(
+ '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.',
+ 'jetpack'
+ ),
+ array( 'a' => array( 'href' => array() ) )
+ ),
+ 'https://wordpress.com/me/security/two-step',
+ 'https://support.wordpress.com/security/two-step-authentication/'
+ );
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $err );
+ $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
return $message;
}
@@ -904,24 +1033,30 @@ class Jetpack_SSO {
* @return string
*/
public function error_msg_email_already_exists( $message ) {
- $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' );
+ $error = sprintf(
+ wp_kses(
+ __(
+ '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.',
+ 'jetpack'
+ ),
+ array( 'a' => array( 'href' => array() ) )
+ ),
+ esc_url_raw( add_query_arg( 'jetpack-sso-show-default-form', '1', wp_login_url() ) )
+ );
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $err );
+ $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
return $message;
}
/**
- * Message displayed when the site admin has disabled the default WordPress
- * login form in Settings > General > Single Sign On
+ * Builds the translation ready string that is to be used when the site hides the default login form.
*
- * @since 2.7
- * @param string $message
+ * @since 4.1.0
* @return string
- **/
- public function msg_login_by_jetpack( $message ) {
-
- $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' );
+ */
+ public function get_sso_required_message() {
+ $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' );
/**
* Filter the message displayed when the default WordPress login form is disabled.
@@ -932,54 +1067,112 @@ class Jetpack_SSO {
*
* @param string $msg Disclaimer when default WordPress login form is disabled.
*/
- $msg = apply_filters( 'jetpack_sso_disclaimer_message', $msg );
+ return apply_filters( 'jetpack_sso_disclaimer_message', $msg );
+ }
+
+ /**
+ * Message displayed when the site admin has disabled the default WordPress
+ * login form in Settings > General > Single Sign On
+ *
+ * @since 2.7
+ * @param string $message
+ *
+ * @return string
+ **/
+ public function msg_login_by_jetpack( $message ) {
+ $msg = $this->get_sso_required_message();
+
+ if ( empty( $msg ) ) {
+ return $message;
+ }
$message .= sprintf( '<p class="message">%s</p>', $msg );
return $message;
}
/**
- * Error message displayed on the login form when the user attempts
- * to post to the login form and it is disabled.
+ * Message displayed when the user can not be found after approving the SSO process on WordPress.com
*
- * @since 2.8
* @param string $message
- * @param string
- **/
- public function error_msg_login_method_not_allowed( $message ) {
- $err = __( 'Login method not allowed' , 'jetpack' );
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $err );
+ * @return string
+ */
+ function cant_find_user( $message ) {
+ $error = esc_html__(
+ "We couldn't find your account. If you already have an account, make sure you have connected to WordPress.com.",
+ 'jetpack'
+ );
+ $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
return $message;
}
- function cant_find_user( $message ) {
- if ( self::match_by_email() ) {
- $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' );
- } else {
- $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' );
+
+ /**
+ * When jetpack-sso-auth-redirect query parameter is set, will redirect user to
+ * WordPress.com authorization flow.
+ *
+ * We redirect here instead of in handle_login() because Jetpack::init()->build_connect_url
+ * calls menu_page_url() which doesn't work properly until admin menus are registered.
+ */
+ function maybe_authorize_user_after_sso() {
+ if ( empty( $_GET['jetpack-sso-auth-redirect'] ) ) {
+ return;
}
- $err = sprintf( $err_format, $this->user_data->email, get_bloginfo( 'name' ) );
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $err );
- return $message;
+
+ $redirect_to = ! empty( $_GET['redirect_to'] ) ? esc_url_raw( $_GET['redirect_to'] ) : admin_url();
+ $request_redirect_to = ! empty( $_GET['request_redirect_to'] ) ? esc_url_raw( $_GET['request_redirect_to'] ) : $redirect_to;
+
+ /** This filter is documented in core/src/wp-login.php */
+ $redirect_after_auth = apply_filters( 'login_redirect', $redirect_to, $request_redirect_to, wp_get_current_user() );
+
+ /**
+ * Since we are passing this redirect to WordPress.com and therefore can not use wp_safe_redirect(),
+ * let's sanitize it here to make sure it's safe. If the redirect is not safe, then use admin_url().
+ */
+ $redirect_after_auth = wp_sanitize_redirect( $redirect_after_auth );
+ $redirect_after_auth = wp_validate_redirect( $redirect_after_auth, admin_url() );
+
+ /**
+ * Return the raw connect URL with our redirect and attribute connection to SSO.
+ */
+ $connect_url = Jetpack::init()->build_connect_url( true, $redirect_after_auth, 'sso' );
+
+ add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
+ wp_safe_redirect( $connect_url );
+ exit;
}
/**
- * Deal with user connections...
+ * Cache user's display name and Gravatar so it can be displayed on the login screen. These cookies are
+ * stored when the user logs out, and then deleted when the user logs in.
*/
- function admin_init() {
- add_action( 'show_user_profile', array( $this, 'edit_profile_fields' ) ); // For their own profile
- add_action( 'edit_user_profile', array( $this, 'edit_profile_fields' ) ); // For folks editing others profiles
+ function store_wpcom_profile_cookies_on_logout() {
+ if ( ! Jetpack::is_user_connected( get_current_user_id() ) ) {
+ return;
+ }
- if ( isset( $_GET['jetpack_sso'] ) && 'purge' == $_GET['jetpack_sso'] && check_admin_referer( 'jetpack_sso_purge' ) ) {
- $user = wp_get_current_user();
- // Remove the connection on the wpcom end.
- self::delete_connection_for_user( $user->ID );
- // Clear it locally.
- delete_user_meta( $user->ID, 'wpcom_user_id' );
- delete_user_meta( $user->ID, 'wpcom_user_data' );
- // Forward back to the profile page.
- wp_safe_redirect( remove_query_arg( array( 'jetpack_sso', '_wpnonce' ) ) );
+ $user_data = $this->get_user_data( get_current_user_id() );
+ if ( ! $user_data ) {
+ return;
}
+
+ setcookie(
+ 'jetpack_sso_wpcom_name_' . COOKIEHASH,
+ $user_data->display_name,
+ time() + WEEK_IN_SECONDS,
+ COOKIEPATH,
+ COOKIE_DOMAIN
+ );
+
+ setcookie(
+ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH,
+ get_avatar_url(
+ $user_data->email,
+ array( 'size' => 144, 'default' => 'mystery' )
+ ),
+ time() + WEEK_IN_SECONDS,
+ COOKIEPATH,
+ COOKIE_DOMAIN
+ );
}
/**
@@ -990,7 +1183,7 @@ class Jetpack_SSO {
* @return boolean
**/
public function is_user_connected( $user_id ) {
- return $this->get_user_data( $user_id ) ;
+ return $this->get_user_data( $user_id );
}
/**
@@ -1003,95 +1196,6 @@ class Jetpack_SSO {
public function get_user_data( $user_id ) {
return get_user_meta( $user_id, 'wpcom_user_data', true );
}
-
- function edit_profile_fields( $user ) {
- wp_enqueue_style( 'genericons' );
- ?>
-
- <h3 id="single-sign-on"><?php _e( 'Single Sign On', 'jetpack' ); ?></h3>
- <p><?php _e( 'Connecting with Single Sign On enables you to log in via your WordPress.com account.', 'jetpack' ); ?></p>
-
- <?php if ( $this->is_user_connected( $user->ID ) ) : /* If the user is currently connected... */ ?>
- <?php $user_data = $this->get_user_data( $user->ID ); ?>
- <table class="form-table jetpack-sso-form-table">
- <tbody>
- <tr>
- <td>
- <div class="profile-card">
- <?php echo get_avatar( $user_data->email ); ?>
- <p class="connected"><strong><?php _e( 'Connected', 'jetpack' ); ?></strong></p>
- <p><?php echo esc_html( $user_data->login ); ?></p>
- <span class="two_step">
- <?php
- if( $user_data->two_step_enabled ) {
- ?> <p class="enabled"><a href="https://wordpress.com/me/security/two-step" target="_blank"><?php _e( 'Two-Step Authentication Enabled', 'jetpack' ); ?></a></p> <?php
- } else {
- ?> <p class="disabled"><a href="https://wordpress.com/me/security/two-step" target="_blank"><?php _e( 'Two-Step Authentication Disabled', 'jetpack' ); ?></a></p> <?php
- }
- ?>
- </span>
-
- </div>
- <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>
- </td>
- </tr>
- </tbody>
- </table>
-
- <style>
- .jetpack-sso-form-table td {
- padding-left: 0;
- }
-
- .jetpack-sso-form-table .profile-card {
- padding: 10px;
- background: #fff;
- overflow: hidden;
- max-width: 400px;
- box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.1 );
- margin-bottom: 1em;
- }
-
- .jetpack-sso-form-table .profile-card img {
- float: left;
- margin-right: 1em;
- width: 48px;
- height: 48px;
- }
-
- .jetpack-sso-form-table .profile-card .connected {
- float: right;
- margin-right: 0.5em;
- color: #0a0;
- }
-
- .jetpack-sso-form-table .profile-card p {
- margin-top: 0.7em;
- font-size: 1.2em;
- }
-
- .jetpack-sso-form-table .profile-card .two_step .enabled a {
- float: right;
- color: #0a0;
- }
-
- .jetpack-sso-form-table .profile-card .two_step .disabled a {
- float: right;
- color: red;
- }
- </style>
-
- <?php elseif ( get_current_user_id() == $user->ID && Jetpack::is_user_connected( $user->ID ) ) : ?>
-
- <?php echo $this->button( 'state=sso-link-user&_wpnonce=' . wp_create_nonce('sso-link-user') ); // update ?>
-
- <?php else : ?>
-
- <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>
- <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>
-
- <?php endif;
- }
}
Jetpack_SSO::get_instance();
diff --git a/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php b/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php
new file mode 100644
index 00000000..01587b89
--- /dev/null
+++ b/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php
@@ -0,0 +1,159 @@
+<?php
+
+if ( ! class_exists( 'Jetpack_SSO_Helpers' ) ) :
+
+/**
+ * A collection of helper functions used in the SSO module.
+ *
+ * @since 4.1.0
+ */
+class Jetpack_SSO_Helpers {
+ /**
+ * Determine if the login form should be hidden or not
+ *
+ * @return bool
+ **/
+ static function should_hide_login_form() {
+ /**
+ * Remove the default log in form, only leave the WordPress.com log in button.
+ *
+ * @module sso
+ *
+ * @since 3.1.0
+ *
+ * @param bool get_option( 'jetpack_sso_remove_login_form', false ) Should the default log in form be removed. Default to false.
+ */
+ return (bool) apply_filters( 'jetpack_remove_login_form', get_option( 'jetpack_sso_remove_login_form', false ) );
+ }
+
+ /**
+ * Returns a boolean value for whether logging in by matching the WordPress.com user email to a
+ * Jetpack site user's email is allowed.
+ *
+ * @return bool
+ */
+ static function match_by_email() {
+ $match_by_email = ( 1 == get_option( 'jetpack_sso_match_by_email', true ) ) ? true: false;
+ $match_by_email = defined( 'WPCC_MATCH_BY_EMAIL' ) ? WPCC_MATCH_BY_EMAIL : $match_by_email;
+
+ /**
+ * Link the local account to an account on WordPress.com using the same email address.
+ *
+ * @module sso
+ *
+ * @since 2.6.0
+ *
+ * @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.
+ */
+ return (bool) apply_filters( 'jetpack_sso_match_by_email', $match_by_email );
+ }
+
+ /**
+ * Returns a boolean for whether users are allowed to register on the Jetpack site with SSO,
+ * even though the site disallows normal registrations.
+ *
+ * @return bool
+ */
+ static function new_user_override() {
+ $new_user_override = defined( 'WPCC_NEW_USER_OVERRIDE' ) ? WPCC_NEW_USER_OVERRIDE : false;
+
+ /**
+ * Allow users to register on your site with a WordPress.com account, even though you disallow normal registrations.
+ *
+ * @module sso
+ *
+ * @since 2.6.0
+ *
+ * @param bool $new_user_override Allow users to register on your site with a WordPress.com account. Default to false.
+ */
+ return (bool) apply_filters( 'jetpack_sso_new_user_override', $new_user_override );
+ }
+
+ /**
+ * Returns a boolean value for whether two-step authentication is required for SSO.
+ *
+ * @since 4.1.0
+ *
+ * @return bool
+ */
+ static function is_two_step_required() {
+ /**
+ * Is it required to have 2-step authentication enabled on WordPress.com to use SSO?
+ *
+ * @module sso
+ *
+ * @since 2.8.0
+ *
+ * @param bool get_option( 'jetpack_sso_require_two_step' ) Does SSO require 2-step authentication?
+ */
+ return (bool) apply_filters( 'jetpack_sso_require_two_step', get_option( 'jetpack_sso_require_two_step', false ) );
+ }
+
+ /**
+ * Returns a boolean for whether a user that is attempting to log in will be automatically
+ * redirected to WordPress.com to begin the SSO flow.
+ *
+ * @return bool
+ */
+ static function bypass_login_forward_wpcom() {
+ /**
+ * Redirect the site's log in form to WordPress.com's log in form.
+ *
+ * @module sso
+ *
+ * @since 3.1.0
+ *
+ * @param bool false Should the site's log in form be automatically forwarded to WordPress.com's log in form.
+ */
+ return (bool) apply_filters( 'jetpack_sso_bypass_login_forward_wpcom', false );
+ }
+
+ /**
+ * Returns a boolean for whether the SSO login form should be displayed as the default
+ * when both the default and SSO login form allowed.
+ *
+ * @since 4.1.0
+ *
+ * @return bool
+ */
+ static function show_sso_login() {
+ if ( self::should_hide_login_form() ) {
+ return true;
+ }
+
+ /**
+ * Display the SSO login form as the default when both the default and SSO login forms are enabled.
+ *
+ * @module sso
+ *
+ * @since 4.1.0
+ *
+ * @param bool true Should the SSO login form be displayed by default when the default login form is also enabled?
+ */
+ return (bool) apply_filters( 'jetpack_sso_default_to_sso_login', true );
+ }
+
+ /**
+ * Returns a boolean for whether the two step required checkbox, displayed on the Jetpack admin page, should be disabled.
+ *
+ * @since 4.1.0
+ *
+ * @return bool
+ */
+ static function is_require_two_step_checkbox_disabled() {
+ return (bool) has_filter( 'jetpack_sso_require_two_step' );
+ }
+
+ /**
+ * Returns a boolean for whether the match by email checkbox, displayed on the Jetpack admin page, should be disabled.
+ *
+ * @since 4.1.0
+ *
+ * @return bool
+ */
+ static function is_match_by_email_checkbox_disabled() {
+ return defined( 'WPCC_MATCH_BY_EMAIL' ) || has_filter( 'jetpack_sso_match_by_email' );
+ }
+}
+
+endif;
diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css
new file mode 100644
index 00000000..48cc5e4f
--- /dev/null
+++ b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css
@@ -0,0 +1,179 @@
+#loginform {
+ /* We set !important because sometimes static is added inline */
+ 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: #777777;
+ margin-bottom: 16px;
+}
+
+#jetpack-sso-wrap a {
+ display: block;
+ width: 100%;
+ text-align: center;
+ text-decoration: 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 {
+ display: none;
+}
+
+
+.jetpack-sso-form-display #loginform > p,
+.jetpack-sso-form-display #loginform > div {
+ 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 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: bold;
+}
+
+.jetpack-sso-wrap__reauth {
+ margin-bottom: 16px;
+}
+
+.jetpack-sso-form-display #nav {
+ display: none;
+}
+
+.jetpack-sso-form-display #backtoblog {
+ margin: 24px 0 0;
+}
diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css
new file mode 100644
index 00000000..0445451c
--- /dev/null
+++ b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css
@@ -0,0 +1 @@
+#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-decoration: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 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} \ No newline at end of file
diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login.css b/plugins/jetpack/modules/sso/jetpack-sso-login.css
new file mode 100644
index 00000000..f1da883f
--- /dev/null
+++ b/plugins/jetpack/modules/sso/jetpack-sso-login.css
@@ -0,0 +1,179 @@
+#loginform {
+ /* We set !important because sometimes static is added inline */
+ 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: #777777;
+ margin-bottom: 16px;
+}
+
+#jetpack-sso-wrap a {
+ display: block;
+ width: 100%;
+ text-align: center;
+ text-decoration: 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 {
+ display: none;
+}
+
+
+.jetpack-sso-form-display #loginform > p,
+.jetpack-sso-form-display #loginform > div {
+ 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 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: bold;
+}
+
+.jetpack-sso-wrap__reauth {
+ margin-bottom: 16px;
+}
+
+.jetpack-sso-form-display #nav {
+ display: none;
+}
+
+.jetpack-sso-form-display #backtoblog {
+ margin: 24px 0 0;
+}
diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login.js b/plugins/jetpack/modules/sso/jetpack-sso-login.js
new file mode 100644
index 00000000..9de8c2b9
--- /dev/null
+++ b/plugins/jetpack/modules/sso/jetpack-sso-login.js
@@ -0,0 +1,47 @@
+jQuery( document ).ready( function( $ ) {
+ var body = $( 'body' ),
+ rememberMe = $( '#rememberme' ),
+ ssoButton = $( 'a.jetpack-sso.button' ),
+ toggleSSO = $( '.jetpack-sso-toggle' ),
+ userLogin = $( '#user_login' ),
+ ssoWrap = $( '#jetpack-sso-wrap' ),
+ loginForm = $( '#loginform' ),
+ overflow = $( '<div style="overflow: auto;"></div>' );
+
+ // The overflow div is a poor man's clearfloat. We reposition the remember me
+ // checkbox and the submit button within that to clear the float on the
+ // remember me checkbox. This is important since we're positioning the SSO
+ // UI under the submit button.
+ //
+ // @TODO: Remove this approach once core ticket 28528 is in and we have more actions in wp-login.php.
+ // See - https://core.trac.wordpress.org/ticket/28528
+ loginForm.append( overflow );
+ overflow.append( $( 'p.forgetmenot' ), $( 'p.submit' ) );
+
+ // We reposition the SSO UI at the bottom of the login form which
+ // fixes a tab order issue. Then we override any styles for absolute
+ // positioning of the SSO UI.
+ loginForm.append( ssoWrap );
+ body.addClass( 'jetpack-sso-repositioned' );
+
+ rememberMe.on( 'change', function() {
+ var url = ssoButton.prop( 'href' ),
+ isChecked = rememberMe.prop( 'checked' ) ? 1 : 0;
+
+ if ( url.match( /&rememberme=\d/ ) ) {
+ url = url.replace( /&rememberme=\d/, '&rememberme=' + isChecked );
+ } else {
+ url += '&rememberme=' + isChecked;
+ }
+
+ ssoButton.prop( 'href', url );
+ } ).change();
+
+ toggleSSO.on( 'click', function( e ) {
+ e.preventDefault();
+ body.toggleClass( 'jetpack-sso-form-display' );
+ if ( ! body.hasClass( 'jetpack-sso-form-display' ) ) {
+ userLogin.focus();
+ }
+ } );
+} );
diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login.min.css b/plugins/jetpack/modules/sso/jetpack-sso-login.min.css
new file mode 100644
index 00000000..311ade50
--- /dev/null
+++ b/plugins/jetpack/modules/sso/jetpack-sso-login.min.css
@@ -0,0 +1 @@
+#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-decoration: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 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} \ No newline at end of file
diff --git a/plugins/jetpack/modules/sso/jetpack-sso-profile.css b/plugins/jetpack/modules/sso/jetpack-sso-profile.css
new file mode 100644
index 00000000..1d6c1ac3
--- /dev/null
+++ b/plugins/jetpack/modules/sso/jetpack-sso-profile.css
@@ -0,0 +1,72 @@
+.jetpack-sso.button {
+ position: relative;
+ padding-left: 37px;
+}
+.jetpack-sso.button:before {
+ display: block;
+ box-sizing: border-box;
+ padding: 7px 0 0;
+ text-align: center;
+ position: absolute;
+ top: -1px;
+ left: -1px;
+ border-radius: 2px 0 0 2px;
+ content: '\f205';
+ background: #0074a2;
+ color: #fff;
+ -webkit-font-smoothing: antialiased;
+ width: 30px;
+ height: 107%;
+ height: calc( 100% + 2px );
+ font: normal 22px/1 Genericons !important;
+ text-shadow: none;
+}
+@media screen and (min-width: 783px) {
+ .jetpack-sso.button:before {
+ padding-top: 3px;
+ }
+}
+.jetpack-sso.button:hover {
+ border: 1px solid #aaa;
+}
+
+.jetpack-sso-form-table td {
+ padding-left: 0;
+}
+
+.jetpack-sso-form-table .profile-card {
+ padding: 10px;
+ background: #fff;
+ overflow: hidden;
+ max-width: 400px;
+ box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.1 );
+ margin-bottom: 1em;
+}
+
+.jetpack-sso-form-table .profile-card img {
+ float: left;
+ margin-right: 1em;
+ width: 48px;
+ height: 48px;
+}
+
+.jetpack-sso-form-table .profile-card .connected {
+ float: right;
+ margin-right: 0.5em;
+ color: #0a0;
+}
+
+.jetpack-sso-form-table .profile-card p {
+ margin-top: 0.7em;
+ font-size: 1.2em;
+}
+
+.jetpack-sso-form-table .profile-card .two_step .enabled a {
+ float: right;
+ color: #0a0;
+}
+
+.jetpack-sso-form-table .profile-card .two_step .disabled a {
+ float: right;
+ color: red;
+}
diff --git a/plugins/jetpack/modules/stats.php b/plugins/jetpack/modules/stats.php
index 9465a08a..2040b682 100644
--- a/plugins/jetpack/modules/stats.php
+++ b/plugins/jetpack/modules/stats.php
@@ -391,8 +391,18 @@ function stats_reports_page( $main_chart_only = false ) {
</div>
<div id="stats-loading-wrap" class="wrap">
<p class="hide-if-no-js"><img width="32" height="32" alt="<?php esc_attr_e( 'Loading&hellip;', 'jetpack' ); ?>" src="<?php
-/** This filter is documented in modules/shortcodes/audio.php */
-echo esc_url( apply_filters( 'jetpack_static_url', "{$http}://en.wordpress.com/i/loading/loading-64.gif" ) ); ?>" /></p>
+echo esc_url(
+ /**
+ * Sets external resource URL.
+ *
+ * @module stats
+ *
+ * @since 1.4.0
+ *
+ * @param string $args URL of external resource.
+ */
+ apply_filters( 'jetpack_static_url', "{$http}://en.wordpress.com/i/loading/loading-64.gif" )
+); ?>" /></p>
<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>
<p class="hide-if-js"><?php esc_html_e( 'Your Site Stats work better with JavaScript enabled.', 'jetpack' ); ?><br />
<a href="<?php echo esc_url( $nojs_url ); ?>"><?php esc_html_e( 'View Site Stats without JavaScript', 'jetpack' ); ?></a>.</p>
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css b/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css
index 34b0c874..8b0efbd3 100644
--- a/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css
+++ b/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css
@@ -474,6 +474,7 @@ iframe[src^="http://api.mixcloud.com/"] {
opacity: 0.2;
position: absolute;
top: 0;
+ right: 0;
width: 100%;
}
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css b/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css
index 58fd42f3..cd99a232 100644
--- a/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css
+++ b/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css
@@ -474,6 +474,7 @@ iframe[src^="http://api.mixcloud.com/"] {
opacity: 0.2;
position: absolute;
top: 0;
+ left: 0;
width: 100%;
}
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery.php
index ee7a0c54..3d89a071 100644
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery.php
+++ b/plugins/jetpack/modules/tiled-gallery/tiled-gallery.php
@@ -42,8 +42,10 @@ class Jetpack_Tiled_Gallery {
$this->float = is_rtl() ? 'right' : 'left';
// Default to rectangular is tiled galleries are checked
- if ( $this->tiles_enabled() && ( ! $this->atts['type'] || 'default' == $this->atts['type'] ) )
- $this->atts['type'] = 'rectangular';
+ if ( $this->tiles_enabled() && ( ! $this->atts['type'] || 'default' == $this->atts['type'] ) ) {
+ /** This filter is already documented in functions.gallery.php */
+ $this->atts['type'] = apply_filters( 'jetpack_default_gallery_type', 'rectangular' );
+ }
if ( !$this->atts['orderby'] ) {
$this->atts['orderby'] = sanitize_sql_orderby( $this->atts['orderby'] );
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
index b6d94c64..70666bd5 100644
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php
+++ b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php
@@ -21,8 +21,7 @@ abstract class Jetpack_Tiled_Gallery_Item {
$this->orig_file = wp_get_attachment_url( $this->image->ID );
$this->link = $needs_attachment_link ? get_attachment_link( $this->image->ID ) : $this->orig_file;
- $this->img_src = add_query_arg( array( 'w' => $this->image->width, 'h' => $this->image->height, 'crop' => true ), $this->orig_file );
-
+ $this->img_src = jetpack_photon_url( $this->orig_file, array( 'resize' => sprintf( '%d,%d', $this->image->width, $this->image->height ) ) );
}
public function fuzzy_image_meta() {
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js
index 12f49f1a..44a79f71 100644
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js
+++ b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js
@@ -160,7 +160,7 @@
attachPlainResize( tiledGalleries );
}
- if ( wp && wp.customize && wp.customizerHasPartialWidgetRefresh() ) {
+ if ( 'undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh ) {
wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
if ( wp.isJetpackWidgetPlaced( placement, 'gallery' ) ) {
tiledGalleries.findAndSetupNewGalleries();
diff --git a/plugins/jetpack/modules/videopress.php b/plugins/jetpack/modules/videopress.php
index cdbab44e..88d60409 100644
--- a/plugins/jetpack/modules/videopress.php
+++ b/plugins/jetpack/modules/videopress.php
@@ -10,15 +10,10 @@
* Additional Search Queries: video, videos, videopress
*/
-Jetpack::dns_prefetch( array(
- '//v0.wordpress.com',
-) );
-
-/**
- * We won't have any videos less than sixty pixels wide. That would be silly.
- */
-define( 'VIDEOPRESS_MIN_WIDTH', 60 );
-
include_once dirname( __FILE__ ) . '/videopress/utility-functions.php';
include_once dirname( __FILE__ ) . '/videopress/shortcode.php';
include_once dirname( __FILE__ ) . '/videopress/videopress.php';
+
+if ( is_admin() ) {
+ include_once dirname(__FILE__) . '/videopress/editor-media-view.php';
+}
diff --git a/plugins/jetpack/modules/videopress/class.videopress-player.php b/plugins/jetpack/modules/videopress/class.videopress-player.php
index 778d518d..1a7f042c 100644
--- a/plugins/jetpack/modules/videopress/class.videopress-player.php
+++ b/plugins/jetpack/modules/videopress/class.videopress-player.php
@@ -143,14 +143,17 @@ class VideoPress_Player {
* @return string HTML string or empty string if error
*/
public function asXML() {
- if ( empty( $this->video ) || is_wp_error( $this->video ) )
+ if ( empty( $this->video ) || is_wp_error( $this->video ) ) {
return '';
+ }
- if ( isset( $this->options['freedom'] ) && $this->options['freedom'] === true )
- $content = $this->html5_static();
- else
+ if ( isset( $this->options['force_flash'] ) && true === $this->options['force_flash'] ) {
$content = $this->flash_embed();
+ } else {
+ $content = $this->html5_static();
+ }
+
return $this->html_wrapper( $content );
}
@@ -162,20 +165,29 @@ class VideoPress_Player {
public function asHTML() {
if ( empty( $this->video ) ) {
$content = '';
+
} elseif ( is_wp_error( $this->video ) ) {
$content = $this->error_message( $this->video );
- } elseif ( isset( $this->options['force_flash'] ) && $this->options['force_flash'] === true ) {
+
+ } elseif ( isset( $this->options['force_flash'] ) && true === $this->options['force_flash'] ) {
$content = $this->flash_object();
- } elseif ( isset( $this->video->restricted_embed ) && $this->video->restricted_embed === true ) {
- if( $this->options['forcestatic'] )
+
+ } elseif ( isset( $this->video->restricted_embed ) && true === $this->video->restricted_embed ) {
+
+ if ( $this->options['forcestatic'] ) {
$content = $this->flash_object();
- else
+
+ } else {
$content = $this->html5_dynamic();
- } elseif ( isset( $this->options['freedom'] ) && $this->options['freedom'] === true ) {
+ }
+
+ } elseif ( isset( $this->options['freedom'] ) && true === $this->options['freedom'] ) {
$content = $this->html5_static();
+
} else {
$content = $this->html5_dynamic();
}
+
return $this->html_wrapper( $content );
}
diff --git a/plugins/jetpack/modules/videopress/css/editor.css b/plugins/jetpack/modules/videopress/css/editor.css
new file mode 100644
index 00000000..69b79dfe
--- /dev/null
+++ b/plugins/jetpack/modules/videopress/css/editor.css
@@ -0,0 +1,59 @@
+/* VideoPress Settings Modal style overrides */
+.mce-videopress-field-guid,
+.mce-videopress-field-freedom,
+.mce-videopress-field-flashonly {
+ display: none;
+}
+
+.mce-videopress-checkbox .mce-checkbox {
+ left: 120px !important;
+ width: 100% !important; /* assigning a full width so the label area is clickable */
+}
+
+.mce-videopress-checkbox .mce-label {
+ left: 150px !important;
+}
+
+.mce-videopress-checkbox .mce-label-unit {
+ position: absolute;
+ left: 210px;
+ top: 5px;
+}
+
+.mce-videopress-checkbox i.mce-i-checkbox {
+ background-color: #fff;
+ color: #1e8cbe;
+}
+
+.mce-videopress-checkbox .mce-i-checkbox:before {
+ display: inline-block;
+ vertical-align: middle;
+ width: 16px;
+ font: 400 21px/1 dashicons;
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ margin: -3px 0 0 -3px;
+ content: "\f147";
+}
+
+.mce-videopress-checkbox .mce-i-checkbox.mce-checked:before {
+ content: "\f147";
+}
+
+div[class*=mce-videopress-field] input[type=number] {
+ width: 70px !important;
+ left: 120px !important;
+}
+
+.mce-videopress-field-w .mce-label,
+.mce-videopress-field-at .mce-label {
+ width: 115px !important;
+ text-align: right;
+}
+
+.mce-videopress-field-unit {
+ position: absolute;
+ left: 210px;
+ top: 5px;
+}
diff --git a/plugins/jetpack/modules/videopress/videopress-editor-style.css b/plugins/jetpack/modules/videopress/css/videopress-editor-style.css
index b2c29c5f..b2c29c5f 100644
--- a/plugins/jetpack/modules/videopress/videopress-editor-style.css
+++ b/plugins/jetpack/modules/videopress/css/videopress-editor-style.css
diff --git a/plugins/jetpack/modules/videopress/editor-media-view.php b/plugins/jetpack/modules/videopress/editor-media-view.php
new file mode 100644
index 00000000..13f72f7e
--- /dev/null
+++ b/plugins/jetpack/modules/videopress/editor-media-view.php
@@ -0,0 +1,213 @@
+<?php
+
+/**
+ * WordPress Shortcode Editor View JS Code
+ */
+function videopress_handle_editor_view_js() {
+ global $content_width;
+ $current_screen = get_current_screen();
+ if ( ! isset( $current_screen->id ) || $current_screen->base !== 'post' ) {
+ return;
+ }
+
+ add_action( 'admin_print_footer_scripts', 'videopress_editor_view_js_templates' );
+
+ wp_enqueue_style( 'videopress-editor-ui', plugins_url( 'css/editor.css', __FILE__ ) );
+ wp_enqueue_script( 'videopress-editor-view', plugins_url( 'js/editor-view.js', __FILE__ ), array( 'wp-util', 'jquery' ), false, true );
+ wp_localize_script( 'videopress-editor-view', 'vpEditorView', array(
+ 'home_url_host' => parse_url( home_url(), PHP_URL_HOST ),
+ 'min_content_width' => VIDEOPRESS_MIN_WIDTH,
+ 'content_width' => $content_width,
+ 'modal_labels' => array(
+ 'title' => esc_html__( 'VideoPress Shortcode', 'jetpack' ),
+ 'guid' => esc_html__( 'Video ID', 'jetpack' ),
+ 'w' => esc_html__( 'Video Width', 'jetpack' ),
+ 'w_unit' => esc_html__( 'pixels', 'jetpack' ),
+ /* Translators: example of usage of this is "Start Video After 10 seconds" */
+ 'at' => esc_html__( 'Start Video After', 'jetpack' ),
+ 'at_unit' => esc_html__( 'seconds', 'jetpack' ),
+ 'hd' => esc_html__( 'High definition on by default', 'jetpack' ),
+ 'permalink' => esc_html__( 'Link the video title to its URL on VideoPress.com', 'jetpack' ),
+ 'autoplay' => esc_html__( 'Autoplay video on page load', 'jetpack' ),
+ 'loop' => esc_html__( 'Loop video playback', 'jetpack' ),
+ 'freedom' => esc_html__( 'Use only Open Source codecs (may degrade performance)', 'jetpack' ),
+ 'flashonly' => esc_html__( 'Use legacy Flash Player (not recommended)', 'jetpack' ),
+ )
+ ) );
+
+ add_editor_style( plugins_url( 'css/videopress-editor-style.css', __FILE__ ) );
+}
+add_action( 'admin_notices', 'videopress_handle_editor_view_js' );
+
+/**
+ * WordPress Editor Views
+ */
+function videopress_editor_view_js_templates() {
+ /**
+ * This template uses the following parameters, and displays the video as an iframe:
+ * - data.guid // The guid of the video.
+ * - data.width // The width of the iframe.
+ * - data.height // The height of the iframe.
+ * - data.urlargs // Arguments serialized into a get string.
+ *
+ * In addition, the calling script will need to ensure that the following
+ * JS file is added to the header of the editor iframe:
+ * - https://s0.wp.com/wp-content/plugins/video/assets/js/next/videopress-iframe.js
+ */
+ ?>
+ <script type="text/html" id="tmpl-videopress_iframe_vnext">
+ <div class="tmpl-videopress_iframe_next" style="max-height:{{ data.height }}px;">
+ <div class="videopress-editor-wrapper" style="padding-top:{{ data.ratio }}%;">
+ <iframe style="display: block;" width="{{ data.width }}" height="{{ data.height }}" src="https://videopress.com/embed/{{ data.guid }}?{{ data.urlargs }}" frameborder='0' allowfullscreen></iframe>
+ </div>
+ </div>
+ </script>
+ <?php
+}
+
+/*************************************************\
+| This is the chunk that handles overriding core |
+| media stuff so VideoPress can display natively. |
+\*************************************************/
+
+/**
+ * Media Grid:
+ * Filter out any videopress video posters that we've downloaded,
+ * so that they don't seem to display twice.
+ */
+add_filter( 'ajax_query_attachments_args', 'videopress_ajax_query_attachments_args' );
+function videopress_ajax_query_attachments_args( $args ) {
+ $meta_query = array(
+ array(
+ 'key' => 'videopress_poster_image',
+ 'compare' => 'NOT EXISTS',
+ ),
+ );
+
+ // If there was already a meta query, let's AND it via
+ // nesting it with our new one. No need to specify the
+ // relation, as it defaults to AND.
+ if ( ! empty( $args['meta_query'] ) ) {
+ $meta_query[] = $args['meta_query'];
+ }
+ $args['meta_query'] = $meta_query;
+
+ return $args;
+}
+
+/**
+ * Media List:
+ * Do the same as ^^ but for the list view.
+ */
+add_action( 'pre_get_posts', 'videopress_media_list_table_query' );
+function videopress_media_list_table_query( $query ) {
+ if ( is_admin() && $query->is_main_query() && ( 'upload' === get_current_screen()->id ) ) {
+ $meta_query = array(
+ array(
+ 'key' => 'videopress_poster_image',
+ 'compare' => 'NOT EXISTS',
+ ),
+ );
+
+ if ( $old_meta_query = $query->get( 'meta_query' ) ) {
+ $meta_query[] = $old_meta_query;
+ }
+
+ $query->set( 'meta_query', $meta_query );
+ }
+}
+
+/**
+ * Make sure that any Video that has a VideoPress GUID passes that data back.
+ */
+add_filter( 'wp_prepare_attachment_for_js', 'videopress_prepare_attachment_for_js' );
+function videopress_prepare_attachment_for_js( $post ) {
+ if ( 'video' === $post['type'] ) {
+ $guid = get_post_meta( $post['id'], 'videopress_guid' );
+ if ( $guid ) {
+ $post['videopress_guid'] = $guid;
+ }
+ }
+ return $post;
+}
+
+/**
+ * Wherever the Media Modal is deployed, also deploy our overrides.
+ */
+add_action( 'wp_enqueue_media', 'add_videopress_media_overrides' );
+function add_videopress_media_overrides() {
+ add_action( 'admin_print_footer_scripts', 'videopress_override_media_templates', 11 );
+}
+
+/**
+ * Our video overrides!
+ *
+ * We have a template for the iframe to get injected.
+ */
+function videopress_override_media_templates(){
+ ?>
+ <script type="text/html" id="tmpl-videopress_iframe_vnext">
+ <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>
+ </script>
+ <script>
+ (function( media ){
+ // This handles the media library modal attachment details display.
+ if ( 'undefined' !== typeof media.view.Attachment.Details.TwoColumn ) {
+ var TwoColumn = media.view.Attachment.Details.TwoColumn,
+ old_render = TwoColumn.prototype.render,
+ vp_template = wp.template('videopress_iframe_vnext');
+
+ TwoColumn.prototype.render = function() {
+ // Have the original renderer run first.
+ old_render.apply( this, arguments );
+
+ // Now our stuff!
+ if ( 'video' === this.model.get('type') ) {
+ if ( this.model.get('videopress_guid') ) {
+ this.$('.attachment-media-view .thumbnail-video').html( vp_template( {
+ guid : this.model.get('videopress_guid'),
+ width : this.model.get('width'),
+ height : this.model.get('height')
+ }));
+ }
+ }
+ };
+ } else { /* console.log( 'media.view.Attachment.Details.TwoColumn undefined' ); */ }
+
+ // This handles the recreating of the core video shortcode when editing the mce embed.
+ if ( 'undefined' !== typeof media.video ) {
+ media.video.defaults.videopress_guid = '';
+
+ // For some reason, even though we're not currently changing anything, the following proxy
+ // function is necessary to include the above default `videopress_guid` param. ¯\_(ツ)_/¯
+ var old_video_shortcode = media.video.shortcode;
+ media.video.shortcode = function( model ) {
+ // model.videopress_guid = 'FOOBAR';
+ return old_video_shortcode( model );
+ };
+ } else { /* console.log( 'media.video undefined' ); */ }
+
+ })( wp.media );
+ </script>
+ <?php
+}
+
+/**
+ * Properly inject VideoPress data into Core shortcodes, and
+ * generate videopress shortcodes for purely remote videos.
+ */
+add_filter( 'media_send_to_editor', 'videopress_media_send_to_editor', 10, 3 );
+function videopress_media_send_to_editor( $html, $id, $attachment ) {
+ $videopress_guid = get_post_meta( $id, 'videopress_guid', true );
+ if ( $videopress_guid && videopress_is_valid_guid( $videopress_guid ) ) {
+ if ( '[video ' === substr( $html, 0, 7 ) ) {
+ $replace = sprintf( ' videopress_guid="%1$s"][/video]', esc_attr( $videopress_guid ) );
+ $html = str_replace( '][/video]', $replace, $html );
+ } elseif ( '<a href=' === substr( $html, 0, 8 ) ) {
+ // We got here because `wp_attachment_is()` returned false for
+ // video, because there isn't a local copy of the file.
+ $html = sprintf( '[videopress %1$s]', esc_attr( $videopress_guid ) );
+ }
+ }
+ return $html;
+} \ No newline at end of file
diff --git a/plugins/jetpack/modules/videopress/js/videopress-admin.js b/plugins/jetpack/modules/videopress/js/videopress-admin.js
index c7851117..5daac4f4 100644
--- a/plugins/jetpack/modules/videopress/js/videopress-admin.js
+++ b/plugins/jetpack/modules/videopress/js/videopress-admin.js
@@ -1,5 +1,5 @@
/* jshint onevar: false, smarttabs: true, devel: true */
-/* global VideoPressAdminSettings, setUserSetting */
+/* global VideoPressAdminSettings, setUserSetting, JSON */
/**
* VideoPress Admin
diff --git a/plugins/jetpack/modules/videopress/shortcode.php b/plugins/jetpack/modules/videopress/shortcode.php
index a9dd1480..39211e40 100644
--- a/plugins/jetpack/modules/videopress/shortcode.php
+++ b/plugins/jetpack/modules/videopress/shortcode.php
@@ -139,117 +139,52 @@ function videopress_add_oembed_for_parameter( $oembed_provider ) {
add_filter( 'oembed_fetch_url', 'videopress_add_oembed_for_parameter' );
/**
- * WordPress Shortcode Editor View JS Code
- */
-function videopress_handle_editor_view_js() {
- global $content_width;
- $current_screen = get_current_screen();
- if ( ! isset( $current_screen->id ) || $current_screen->base !== 'post' ) {
- return;
+ * An intermediary shortcode parser for the Core `[video]` shortcode.
+ *
+ * This lets us convert legacy video embeds over to VideoPress embeds,
+ * if the video files have been uploaded and transcoded.
+ *
+ * @param $attr
+ *
+ * @return string|void
+ * /
+function videopress_shortcode_override_for_core_shortcode( $raw_attr, $contents, $tag ) {
+ $attr = $raw_attr;
+ $videopress_guid = false;
+
+ if ( isset( $attr['videopress_guid'] ) ) {
+ $videopress_guid = $attr['videopress_guid'];
}
- add_action( 'admin_print_footer_scripts', 'videopress_editor_view_js_templates' );
-
- wp_enqueue_script( 'videopress-editor-view', plugins_url( 'js/editor-view.js', __FILE__ ), array( 'wp-util', 'jquery' ), false, true );
- wp_localize_script( 'videopress-editor-view', 'vpEditorView', array(
- 'home_url_host' => parse_url( home_url(), PHP_URL_HOST ),
- 'min_content_width' => VIDEOPRESS_MIN_WIDTH,
- 'content_width' => $content_width,
- 'modal_labels' => array(
- 'title' => esc_html__( 'VideoPress Shortcode', 'jetpack' ),
- 'guid' => esc_html__( 'Video ID', 'jetpack' ),
- 'w' => esc_html__( 'Video Width', 'jetpack' ),
- 'w_unit' => esc_html__( 'pixels', 'jetpack' ),
- /* Translators: example of usage of this is "Start Video After 10 seconds" */
- 'at' => esc_html__( 'Start Video After', 'jetpack' ),
- 'at_unit' => esc_html__( 'seconds', 'jetpack' ),
- 'hd' => esc_html__( 'High definition on by default', 'jetpack' ),
- 'permalink' => esc_html__( 'Link the video title to its URL on VideoPress.com', 'jetpack' ),
- 'autoplay' => esc_html__( 'Autoplay video on page load', 'jetpack' ),
- 'loop' => esc_html__( 'Loop video playback', 'jetpack' ),
- 'freedom' => esc_html__( 'Use only Open Source codecs (may degrade performance)', 'jetpack' ),
- 'flashonly' => esc_html__( 'Use legacy Flash Player (not recommended)', 'jetpack' ),
- )
- ) );
-
- add_editor_style( plugins_url( 'videopress-editor-style.css', __FILE__ ) );
-}
-add_action( 'admin_notices', 'videopress_handle_editor_view_js' );
-
-/**
- * WordPress Editor Views
- */
-function videopress_editor_view_js_templates() {
- /**
- * This template uses the following parameters, and displays the video as an iframe:
- * - data.guid // The guid of the video.
- * - data.width // The width of the iframe.
- * - data.height // The height of the iframe.
- * - data.urlargs // Arguments serialized into a get string.
- *
- * In addition, the calling script will need to ensure that the following
- * JS file is added to the header of the editor iframe:
- * - https://s0.wp.com/wp-content/plugins/video/assets/js/next/videopress-iframe.js
- */
- ?>
- <script type="text/html" id="tmpl-videopress_iframe_vnext">
- <div class="tmpl-videopress_iframe_next" style="max-height:{{ data.height }}px;">
- <div class="videopress-editor-wrapper" style="padding-top:{{ data.ratio }}%;">
- <iframe style="display: block;" width="{{ data.width }}" height="{{ data.height }}" src="https://videopress.com/embed/{{ data.guid }}?{{ data.urlargs }}" frameborder='0' allowfullscreen></iframe>
- </div>
- </div>
- </script>
-
- <!-- VideoPress Settings Modal style overrides -->
- <style type="text/css">
- .mce-videopress-field-guid, .mce-videopress-field-freedom, .mce-videopress-field-flashonly {
- display: none;
- }
- .mce-videopress-checkbox .mce-checkbox {
- left: 120px !important;
- width: 100% !important; /* assigning a full width so the label area is clickable */
- }
+ // If we can find a local media item from the provided url…
+ $media_id = videopress_get_attachment_id_by_url( $attr['src'] );
+ if ( $media_id ) {
+ // And that local media item has a VideoPress GUID attached to it…
+ $videopress_guid = get_post_meta( $media_id, 'videopress_guid', true );
+ }
- .mce-videopress-checkbox .mce-label {
- left: 150px !important;
- }
- .mce-videopress-checkbox .mce-label-unit {
- position: absolute;
- left: 210px;
- top: 5px;
- }
- .mce-videopress-checkbox i.mce-i-checkbox {
- background-color: #fff;
- color: #1e8cbe;
+ if ( $videopress_guid ) {
+ $videopress_attr = array( $videopress_guid );
+ if ( $attr['width'] ) {
+ $videopress_attr['w'] = (int) $attr['width'];
}
- .mce-videopress-checkbox .mce-i-checkbox:before {
- display: inline-block;
- vertical-align: middle;
- width: 16px;
- font: 400 21px/1 dashicons;
- speak: none;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- margin: -3px 0 0 -3px;
- content: "\f147";
+ if ( $attr['autoplay'] ) {
+ $videopress_attr['autoplay'] = $attr['autoplay'];
}
- .mce-videopress-checkbox .mce-i-checkbox.mce-checked:before {
- content: "\f147";
+ if ( $attr['loop'] ) {
+ $videopress_attr['loop'] = $attr['loop'];
}
- div[class*=mce-videopress-field] input[type=number] {
- width: 70px !important;
- left: 120px !important;
- }
- .mce-videopress-field-w .mce-label,
- .mce-videopress-field-at .mce-label {
- width: 115px !important;
- text-align: right;
- }
- .mce-videopress-field-unit {
- position: absolute;
- left: 210px;
- top: 5px;
- }
- </style>
- <?php
+
+ // Then display the VideoPress version of the stored GUID!
+ return videopress_shortcode_callback( $videopress_attr );
+ }
+
+ // Nothing else caught, so fall back to the core shortcode.
+ return call_user_func( $GLOBALS['vp_original_video_shortcode_callback'], $raw_attr, $contents, $tag );
}
+// The callback should nearly always be `wp_video_shortcode` unless some other plugin
+// has overridden it similarly to what we're doing here.
+$GLOBALS['vp_original_video_shortcode_callback'] = $GLOBALS['shortcode_tags']['video'];
+remove_shortcode( 'video' );
+add_shortcode( 'video', 'videopress_shortcode_override_for_core_shortcode' );
+/**/
diff --git a/plugins/jetpack/modules/videopress/utility-functions.php b/plugins/jetpack/modules/videopress/utility-functions.php
index 99eb7557..1c02b689 100644
--- a/plugins/jetpack/modules/videopress/utility-functions.php
+++ b/plugins/jetpack/modules/videopress/utility-functions.php
@@ -1,4 +1,8 @@
<?php
+/**
+ * We won't have any videos less than sixty pixels wide. That would be silly.
+ */
+defined( 'VIDEOPRESS_MIN_WIDTH' ) or define( 'VIDEOPRESS_MIN_WIDTH', 60 );
/**
* Validate user-supplied guid values against expected inputs
@@ -97,3 +101,104 @@ function videopress_get_attachment_id_by_url( $url ) {
}
return false;
}
+
+/**
+ * Similar to `media_sideload_image` -- but returns an ID.
+ *
+ * @param $url
+ * @param $attachment_id
+ *
+ * @return int|mixed|object|WP_Error
+ */
+function videopress_download_poster_image( $url, $attachment_id ) {
+ // Set variables for storage, fix file filename for query strings.
+ preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $url, $matches );
+ if ( ! $matches ) {
+ return new WP_Error( 'image_sideload_failed', __( 'Invalid image URL' ) );
+ }
+
+ $file_array = array();
+ $file_array['name'] = basename( $matches[0] );
+ $file_array['tmp_name'] = download_url( $url );
+
+ // If error storing temporarily, return the error.
+ if ( is_wp_error( $file_array['tmp_name'] ) ) {
+ return $file_array['tmp_name'];
+ }
+
+ // Do the validation and storage stuff.
+ $thumbnail_id = media_handle_sideload( $file_array, $attachment_id, null );
+
+ // Flag it as poster image, so we can exclude it from display.
+ update_post_meta( $thumbnail_id, 'videopress_poster_image', 1 );
+
+ return $thumbnail_id;
+}
+
+/**
+ * Creates a local media library item of a remote VideoPress video.
+ *
+ * @param $guid
+ * @param int $parent_id
+ *
+ * @return int|object
+ */
+function create_local_media_library_for_videopress_guid( $guid, $parent_id = 0 ) {
+ $vp_data = videopress_get_video_details( $guid );
+ if ( ! $vp_data || is_wp_error( $vp_data ) ) {
+ return $vp_data;
+ }
+
+ $args = array(
+ 'post_date' => $vp_data->upload_date,
+ 'post_title' => wp_kses( $vp_data->title, array() ),
+ 'post_content' => wp_kses( $vp_data->description, array() ),
+ 'post_mime_type' => 'video/videopress',
+ 'guid' => sprintf( 'https://videopress.com/v/%s', $guid ),
+ );
+
+ $attachment_id = wp_insert_attachment( $args, null, $parent_id );
+
+ if ( ! is_wp_error( $attachment_id ) ) {
+ update_post_meta( $attachment_id, 'videopress_guid', $guid );
+ wp_update_attachment_metadata( $attachment_id, array(
+ 'width' => $vp_data->width,
+ 'height' => $vp_data->height,
+ ) );
+
+ $thumbnail_id = videopress_download_poster_image( $vp_data->poster, $attachment_id );
+ update_post_meta( $attachment_id, '_thumbnail_id', $thumbnail_id );
+ }
+
+ return $attachment_id;
+}
+
+if ( defined( 'WP_CLI' ) && WP_CLI ) {
+ /**
+ * Manage and import VideoPress videos.
+ */
+ class VideoPress_CLI extends WP_CLI_Command {
+ /**
+ * Import a VideoPress Video
+ *
+ * ## OPTIONS
+ *
+ * <guid>: Import the video with the specified guid
+ *
+ * ## EXAMPLES
+ *
+ * wp videopress import kUJmAcSf
+ *
+ */
+ public function import( $args ) {
+ $guid = $args[0];
+ $attachment_id = create_local_media_library_for_videopress_guid( $guid );
+ if ( $attachment_id && ! is_wp_error( $attachment_id ) ) {
+ WP_CLI::success( sprintf( __( 'The video has been imported as Attachment ID %d', 'jetpack' ), $attachment_id ) );
+ } else {
+ WP_CLI::error( __( 'An error has been encountered.', 'jetpack' ) );
+ }
+ }
+ }
+ WP_CLI::add_command( 'videopress', 'VideoPress_CLI' );
+}
diff --git a/plugins/jetpack/modules/videopress/videopress.php b/plugins/jetpack/modules/videopress/videopress.php
index 274b740e..80a589fc 100644
--- a/plugins/jetpack/modules/videopress/videopress.php
+++ b/plugins/jetpack/modules/videopress/videopress.php
@@ -59,6 +59,7 @@ class Jetpack_VideoPress {
}
add_filter( 'videopress_shortcode_options', array( $this, 'videopress_shortcode_options' ) );
+ add_filter( 'jetpack_xmlrpc_methods', array( $this, 'xmlrpc_methods' ) );
}
function wp_ajax_videopress_get_upload_token() {
@@ -731,6 +732,114 @@ class Jetpack_VideoPress {
return $options;
}
+ /**
+ * Adds additional methods the WordPress xmlrpc API for handling VideoPress specific features
+ *
+ * @param array $methods
+ * @return array
+ */
+ public function xmlrpc_methods( $methods ) {
+
+ $methods['jetpack.createMediaItem'] = array( $this, 'xmlrpc_create_media_item' );
+ $methods['jetpack.updateVideoPressInfo'] = array( $this, 'xmlrpc_update_videopress_info' );
+
+ return $methods;
+ }
+
+ /**
+ * Endpoint to allow the transcoding session to send updated information about the VideoPress video when it completes a stage of transcoding.
+ *
+ * @param array $vp_info
+ *
+ * @return array|bool
+ */
+ public function xmlrpc_update_videopress_info( $vp_info ) {
+
+ $errors = null;
+ foreach ( $vp_info as $vp_item ) {
+ $id = $vp_item['post_id'];
+ $guid = $vp_item['guid'];
+
+ $post = get_post( $id );
+
+ if ( ! $post ) {
+ $errors[] = array(
+ 'id' => $id,
+ 'error' => 'Post not found',
+ );
+
+ continue;
+ }
+
+ $post->guid = $vp_item['original'];
+ $post->file = $vp_item['original'];
+
+ wp_update_post( $post );
+
+ // Update the vp guid and set it to a dirrect meta property.
+ update_post_meta( $id, 'videopress_guid', $guid );
+
+ $meta = wp_get_attachment_metadata( $post->ID );
+ $meta['width'] = $vp_item['width'];
+ $meta['height'] = $vp_item['height'];
+ $meta['original']['url'] = $vp_item['original'];
+ $meta['videopress'] = $vp_item;
+ $meta['videopress']['url'] = 'https://videopress.com/v/' . $guid;
+
+ // TODO: Add poster updating.
+
+ wp_update_attachment_metadata( $post->ID, $meta );
+ }
+
+ if ( count( $errors ) > 0 ) {
+ return array( 'errors' => $errors );
+
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * This is used by the WPCOM VideoPress uploader in order to create a media item with
+ * specific meta data about an uploaded file. After this, the transcoding session will
+ * update the meta information via the xmlrpc_update_videopress_info() method.
+ *
+ * Note: This method technically handles the creation of multiple media objects, though
+ * in practice this is never done.
+ *
+ * @param array $media
+ *
+ * @return array
+ */
+ public function xmlrpc_create_media_item( $media ) {
+ $created_items = array();
+
+ foreach ( $media as $media_item ) {
+ $post = array(
+ 'post_type' => 'attachment',
+ 'post_mime_type' => 'video/videopress',
+ 'post_title' => sanitize_title( basename( $media_item['url'] ) ),
+ 'post_content' => '',
+ );
+
+ $media_id = wp_insert_post( $post );
+
+ wp_update_attachment_metadata( $media_id, array(
+ 'original' => array(
+ 'url' => $media_item['url'],
+ 'file' => $media_item['file'],
+ 'mime_type' => $media_item['type'],
+ ),
+ ) );
+
+ $created_items[] = array(
+ 'id' => $media_id,
+ 'post' => get_post( $media_id ),
+ );
+ }
+
+ return array( 'media' => $created_items );
+ }
}
// Initialize the module.
diff --git a/plugins/jetpack/modules/widgets/contact-info.php b/plugins/jetpack/modules/widgets/contact-info.php
index 5457f525..552f9b91 100644
--- a/plugins/jetpack/modules/widgets/contact-info.php
+++ b/plugins/jetpack/modules/widgets/contact-info.php
@@ -18,9 +18,7 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
/**
* Constructor
- *
- * @return void
- **/
+ */
function __construct() {
$widget_ops = array(
'classname' => 'widget_contact_info',
@@ -44,8 +42,22 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
* Enqueue scripts and styles.
*/
public function enqueue_scripts() {
+ $google_url = 'https://maps.googleapis.com/maps/api/js';
+ /**
+ * Set a Google Maps API Key.
+ *
+ * @since 4.1.0
+ *
+ * @param string $key Google Maps API Key
+ */
+ $key = apply_filters( 'jetpack_google_maps_api_key', null );
+
+ if ( ! empty( $key ) ) {
+ $google_url = add_query_arg( 'key', $key, $google_url );
+ }
+
wp_enqueue_script( 'jquery' );
- wp_enqueue_script( 'google-maps', 'https://maps.googleapis.com/maps/api/js?sensor=false' );
+ wp_enqueue_script( 'google-maps', esc_url( $google_url, null, null ) );
wp_enqueue_script( 'contact-info-map-js', plugins_url( 'contact-info/contact-info-map.js', __FILE__ ), array( 'jquery', 'google-maps' ), 20150127 );
wp_enqueue_style( 'contact-info-map-css', plugins_url( 'contact-info/contact-info-map.css', __FILE__ ), null, 20150127 );
}
@@ -68,22 +80,23 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
'lon' => null
);
}
+
/**
* Outputs the HTML for this widget.
*
- * @param array An array of standard parameters for widgets in this theme
- * @param array An array of settings for this widget instance
+ * @param array $args An array of standard parameters for widgets in this theme
+ * @param array $instance An array of settings for this widget instance
+ *
* @return void Echoes it's output
**/
function widget( $args, $instance ) {
$instance = wp_parse_args( $instance, $this->defaults() );
- extract( $args, EXTR_SKIP );
+ echo $args['before_widget'];
- echo $before_widget;
-
- if ( $instance['title'] != '' )
- echo $before_title . $instance['title'] . $after_title;
+ if ( '' != $instance['title'] ) {
+ echo $args['before_title'] . $instance['title'] . $args['after_title'];
+ }
/**
* Fires at the beginning of the Contact Info widget, after the title.
@@ -94,10 +107,7 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
*/
do_action( 'jetpack_contact_info_widget_start' );
- $map_link = 0;
-
-
- if ( $instance['address'] != '' ) {
+ if ( '' != $instance['address'] ) {
$showmap = $instance['showmap'];
@@ -112,27 +122,21 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
$map_link = $this->build_map_link( $instance['address'] );
echo '<div class="confit-address"><a href="' . esc_url( $map_link ) . '" target="_blank">' . str_replace( "\n", "<br/>", esc_html( $instance['address'] ) ) . "</a></div>";
-
-
}
-
- if ( $instance['phone'] != '' ) {
-
- if( wp_is_mobile() ) {
- echo '<div class="confit-phone"><a href="'. esc_url( 'tel:'. $instance['phone'] ) . '">' . esc_html( $instance['phone'] ) . "</a></div>";
- } else {
+ if ( '' != $instance['phone'] ) {
+ if ( wp_is_mobile() ) {
+ echo '<div class="confit-phone"><a href="' . esc_url( 'tel:' . $instance['phone'] ) . '">' . esc_html( $instance['phone'] ) . "</a></div>";
+ }
+ else {
echo '<div class="confit-phone">' . esc_html( $instance['phone'] ) . '</div>';
}
-
}
-
- if ( $instance['hours'] != '' ) {
+ if ( '' != $instance['hours'] ) {
echo '<div class="confit-hours">' . str_replace( "\n", "<br/>", esc_html( $instance['hours'] ) ) . "</div>";
}
-
/**
* Fires at the end of Contact Info widget.
*
@@ -142,29 +146,35 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
*/
do_action( 'jetpack_contact_info_widget_end' );
-
- echo $after_widget;
-
+ echo $args['after_widget'];
}
/**
* Deals with the settings when they are saved by the admin. Here is
* where any validation should be dealt with.
- **/
+ *
+ * @param array $new_instance New configuration values
+ * @param array $old_instance Old configuration values
+ *
+ * @return array
+ */
function update( $new_instance, $old_instance ) {
$update_lat_lon = false;
- if ( $this->urlencode_address( $old_instance['address'] ) != $this->urlencode_address( $new_instance['address'] ) ) {
+ if (
+ ! isset( $old_instance['address'] ) ||
+ $this->urlencode_address( $old_instance['address'] ) != $this->urlencode_address( $new_instance['address'] )
+ ) {
$update_lat_lon = true;
}
- $instance = array();
- $instance['title'] = wp_kses( $new_instance['title'], array() );
+ $instance = array();
+ $instance['title'] = wp_kses( $new_instance['title'], array() );
$instance['address'] = wp_kses( $new_instance['address'], array() );
- $instance['phone'] = wp_kses( $new_instance['phone'], array() );
- $instance['hours'] = wp_kses( $new_instance['hours'], array() );
- $instance['lat'] = isset( $old_instance['lat'] ) ? floatval( $old_instance['lat'] ) : 0;
- $instance['lon'] = isset( $old_instance['lon'] ) ? floatval( $old_instance['lon'] ) : 0;
+ $instance['phone'] = wp_kses( $new_instance['phone'], array() );
+ $instance['hours'] = wp_kses( $new_instance['hours'], array() );
+ $instance['lat'] = isset( $old_instance['lat'] ) ? floatval( $old_instance['lat'] ) : 0;
+ $instance['lon'] = isset( $old_instance['lon'] ) ? floatval( $old_instance['lon'] ) : 0;
if ( ! $instance['lat'] || ! $instance['lon'] ) {
$update_lat_lon = true;
@@ -174,8 +184,14 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
// Get the lat/lon of the user specified address.
$address = $this->urlencode_address( $instance['address'] );
- $path = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=" . $address;
- $json = wp_remote_retrieve_body( wp_remote_get( $path ) );
+ $path = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=" . $address;
+ /** This action is documented in modules/widgets/contact-info.php */
+ $key = apply_filters( 'jetpack_google_maps_api_key', null );
+
+ if ( ! empty( $key ) ) {
+ $path = add_query_arg( 'key', $key, $path );
+ }
+ $json = wp_remote_retrieve_body( wp_remote_get( esc_url( $path, null, null ) ) );
if ( ! $json ) {
// The read failed :(
@@ -185,12 +201,13 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
$json_obj = json_decode( $json );
- if ( $err = $json_obj->status == "ZERO_RESULTS" ) {
+ if ( "ZERO_RESULTS" == $json_obj->status ) {
// The address supplied does not have a matching lat / lon.
// No map is available.
$instance['lat'] = "0";
$instance['lon'] = "0";
- } else {
+ }
+ else {
$loc = $json_obj->results[0]->geometry->location;
@@ -204,7 +221,8 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
if ( ! isset( $new_instance['showmap'] ) ) {
$instance['showmap'] = 0;
- } else {
+ }
+ else {
$instance['showmap'] = intval( $new_instance['showmap'] );
}
@@ -214,55 +232,77 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
/**
* Displays the form for this widget on the Widgets page of the WP Admin area.
- **/
+ *
+ * @param array $instance Instance configuration.
+ *
+ * @return void
+ */
function form( $instance ) {
$instance = wp_parse_args( $instance, $this->defaults() );
- extract( $instance );
-
- $disabled = !$this->has_good_map( $instance );
- ?>
- <p><label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
-
- <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>
-
- <p><label for="<?php echo esc_attr( $this->get_field_id( 'address' ) ); ?>"><?php esc_html_e( 'Address:', 'jetpack' ); ?></label>
- <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>
- <?php
- if ( $this->has_good_map( $instance ) ) {
- ?>
- <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); ?> />
- <label for="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>"><?php esc_html_e( 'Show map', 'jetpack' ); ?></label></p>
- <?php
- } else {
- ?>
- <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>
- <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" />
- <?php
- }
- ?>
-
- <p><label for="<?php echo esc_attr( $this->get_field_id( 'phone' ) ); ?>"><?php esc_html_e( 'Phone:', 'jetpack' ); ?></label>
- <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>
-
- <p><label for="<?php echo esc_attr( $this->get_field_id( 'hours' ) ); ?>"><?php esc_html_e( 'Hours:', 'jetpack' ); ?></label>
-
- <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>
-
- <?php
+ ?>
+ <p>
+ <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
+ <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'] ); ?>" />
+ </p>
+
+ <p>
+ <label for="<?php echo esc_attr( $this->get_field_id( 'address' ) ); ?>"><?php esc_html_e( 'Address:', 'jetpack' ); ?></label>
+ <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>
+ <?php
+ if ( $this->has_good_map( $instance ) ) {
+ ?>
+ <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 ); ?> />
+ <label for="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>"><?php esc_html_e( 'Show map', 'jetpack' ); ?></label>
+ <?php
+ }
+ else {
+ ?>
+ <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>
+ <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" />
+ <?php
+ }
+ ?>
+ </p>
+ <p>
+ <label for="<?php echo esc_attr( $this->get_field_id( 'phone' ) ); ?>"><?php esc_html_e( 'Phone:', 'jetpack' ); ?></label>
+ <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'] ); ?>" />
+ </p>
+
+ <p>
+ <label for="<?php echo esc_attr( $this->get_field_id( 'hours' ) ); ?>"><?php esc_html_e( 'Hours:', 'jetpack' ); ?></label>
+ <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>
+ </p>
+
+ <?php
}
+ /**
+ * Generate a Google Maps link for the supplied address.
+ *
+ * @param string $address Address to link to.
+ *
+ * @return string
+ */
function build_map_link( $address ) {
// Google map urls have lots of available params but zoom (z) and query (q) are enough.
return "http://maps.google.com/maps?z=16&q=" . $this->urlencode_address( $address );
}
+ /**
+ * Builds map display HTML code from the supplied latitude and longitude.
+ *
+ * @param float $lat Map Latitude
+ * @param float $lon Map Longitude
+ *
+ * @return string HTML of the map
+ */
function build_map( $lat, $lon ) {
$this->enqueue_scripts();
- $lat = esc_attr( $lat );
- $lon = esc_attr( $lon );
+ $lat = esc_attr( $lat );
+ $lon = esc_attr( $lon );
$html = <<<EOT
<div class="contact-map">
<input type="hidden" class="contact-info-map-lat" value="$lat" />
@@ -273,7 +313,13 @@ EOT;
return $html;
}
-
+ /**
+ * Encode an URL
+ *
+ * @param string $address The URL to encode
+ *
+ * @return string The encoded URL
+ */
function urlencode_address( $address ) {
$address = strtolower( $address );
@@ -284,10 +330,16 @@ EOT;
return $address;
}
-
+ /**
+ * Check if the instance has a valid Map location.
+ *
+ * @param array $instance Widget instance configuration.
+ *
+ * @return bool Whether or not there is a valid map.
+ */
function has_good_map( $instance ) {
// The lat and lon of an address that could not be plotted will have values of 0 and 0.
- return ! ( $instance['lat'] == "0" && $instance['lon'] == "0" );
+ return ! ( "0" == $instance['lat'] && "0" == $instance['lon'] );
}
}
diff --git a/plugins/jetpack/modules/widgets/contact-info/contact-info-map.js b/plugins/jetpack/modules/widgets/contact-info/contact-info-map.js
index cf09d91c..c7036222 100644
--- a/plugins/jetpack/modules/widgets/contact-info/contact-info-map.js
+++ b/plugins/jetpack/modules/widgets/contact-info/contact-info-map.js
@@ -31,7 +31,7 @@ jQuery( function( $ ) {
setupContactMaps();
- if ( wp && wp.customize && wp.customizerHasPartialWidgetRefresh() ) {
+ if ( 'undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh ) {
wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
if ( wp.isJetpackWidgetPlaced( placement, 'widget_contact_info' ) ) {
setupContactMaps( placement.container );
diff --git a/plugins/jetpack/modules/widgets/gallery.php b/plugins/jetpack/modules/widgets/gallery.php
index cfda090d..e9f75658 100644
--- a/plugins/jetpack/modules/widgets/gallery.php
+++ b/plugins/jetpack/modules/widgets/gallery.php
@@ -253,7 +253,7 @@ class Jetpack_Gallery_Widget extends WP_Widget {
foreach ( $instance['attachments'] as $attachment ) {
$attachment_image_src = wp_get_attachment_image_src( $attachment->ID, 'full' );
- $attachment_image_src = $attachment_image_src[0]; // [url, width, height]
+ $attachment_image_src = jetpack_photon_url( $attachment_image_src[0], array( 'w' => $this->_instance_width ) ); // [url, width, height]
$caption = wptexturize( strip_tags( $attachment->post_excerpt ) );
diff --git a/plugins/jetpack/modules/widgets/image-widget.php b/plugins/jetpack/modules/widgets/image-widget.php
index 8563cf1b..3f34b368 100644
--- a/plugins/jetpack/modules/widgets/image-widget.php
+++ b/plugins/jetpack/modules/widgets/image-widget.php
@@ -140,11 +140,34 @@ class Jetpack_Image_Widget extends WP_Widget {
$instance['img_title'] = strip_tags( $new_instance['img_title'] );
$instance['caption'] = wp_kses( stripslashes($new_instance['caption'] ), $allowed_caption_html );
$instance['align'] = $new_instance['align'];
- $instance['img_width'] = absint( $new_instance['img_width'] );
- $instance['img_height'] = absint( $new_instance['img_height'] );
$instance['link'] = esc_url( $new_instance['link'], null, 'display' );
$instance['link_target_blank'] = isset( $new_instance['link_target_blank'] ) ? (bool) $new_instance['link_target_blank'] : false;
+ $new_img_width = absint( $new_instance['img_width'] );
+ $new_img_height = absint( $new_instance['img_height'] );
+
+ if ( ! empty( $instance['img_url'] ) && '' == $new_img_width && '' == $new_img_height ) {
+ // Download the url to a local temp file and then process it with getimagesize so we can optimize browser layout
+ $tmp_file = download_url( $instance['img_url'], 10 );
+ if ( ! is_wp_error( $tmp_file ) ) {
+ $size = getimagesize( $tmp_file );
+
+ $width = $size[0];
+ $instance['img_width'] = absint( $width );
+
+ $height = $size[1];
+ $instance['img_height'] = absint( $height );
+
+ unlink( $tmp_file );
+ } else {
+ $instance['img_width'] = $new_img_width;
+ $instance['img_height'] = $new_img_height;
+ }
+ } else {
+ $instance['img_width'] = $new_img_width;
+ $instance['img_height'] = $new_img_height;
+ }
+
return $instance;
}
@@ -169,30 +192,6 @@ class Jetpack_Image_Widget extends WP_Widget {
$img_height = esc_attr( $instance['img_height'] );
$link_target_blank = checked( $instance['link_target_blank'], true, false );
- if ( !empty( $instance['img_url'] ) ) {
- // Download the url to a local temp file and then process it with getimagesize so we can optimize browser layout
- $tmp_file = download_url( $instance['img_url'], 10 );
- if ( ! is_wp_error( $tmp_file ) ) {
- $size = getimagesize( $tmp_file );
-
- if ( '' == $instance['img_width'] ) {
- $width = $size[0];
- $img_width = $width;
- } else {
- $img_width = absint( $instance['img_width'] );
- }
-
- if ( '' == $instance['img_height'] ) {
- $height = $size[1];
- $img_height = $height;
- } else {
- $img_height = absint( $instance['img_height'] );
- }
-
- unlink( $tmp_file );
- }
- }
-
$link = esc_url( $instance['link'], null, 'display' );
echo '<p><label for="' . $this->get_field_id( 'title' ) . '">' . esc_html__( 'Widget title:', 'jetpack' ) . '
diff --git a/plugins/jetpack/modules/widgets/rsslinks-widget.php b/plugins/jetpack/modules/widgets/rsslinks-widget.php
index 6086744e..8bd6eec6 100644
--- a/plugins/jetpack/modules/widgets/rsslinks-widget.php
+++ b/plugins/jetpack/modules/widgets/rsslinks-widget.php
@@ -108,7 +108,7 @@ class Jetpack_RSS_Links_Widget extends WP_Widget {
'image' => __( 'Image Link', 'jetpack' ),
'text-image' => __( 'Text & Image Links', 'jetpack' )
);
- echo '<p><label for="' . $this->get_field_id( 'format' ) . '">' . __( 'Format:', 'jetpack' ) . '
+ echo '<p><label for="' . $this->get_field_id( 'format' ) . '">' . _x( 'Format:', 'Noun', 'jetpack' ) . '
<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();">';
foreach ( $formats as $format_option => $label ) {
echo '<option value="' . esc_attr( $format_option ) . '"';
diff --git a/plugins/jetpack/modules/widgets/top-posts.php b/plugins/jetpack/modules/widgets/top-posts.php
index 9e0278bc..0756a198 100644
--- a/plugins/jetpack/modules/widgets/top-posts.php
+++ b/plugins/jetpack/modules/widgets/top-posts.php
@@ -245,7 +245,7 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
if ( 'text' != $display ) {
$get_image_options = array(
'fallback_to_avatars' => true,
- /** This filter is documented in modules/shortcodes/audio.php */
+ /** This filter is documented in modules/stats.php */
'gravatar_default' => apply_filters( 'jetpack_static_url', set_url_scheme( 'http://en.wordpress.com/i/logo/white-gray-80.png' ) ),
);
if ( 'grid' == $display ) {
@@ -450,6 +450,9 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
/**
* Filter the number of days used to calculate Top Posts for the Top Posts widget.
+ * We do not recommend accessing more than 10 days of results at one.
+ * When more than 10 days of results are accessed at once, results should be cached via the WordPress transients API.
+ * Querying for -1 days will give results for an infinite number of days.
*
* @module widgets
*
@@ -460,14 +463,11 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
*/
$days = (int) apply_filters( 'jetpack_top_posts_days', 2, $args );
- if ( $days < 1 ) {
+ /** Handling situations where the number of days makes no sense - allows for unlimited days where $days = -1 */
+ if ( 0 == $days || false == $days ) {
$days = 2;
}
- if ( $days > 10 ) {
- $days = 10;
- }
-
$post_view_posts = stats_get_csv( 'postviews', array( 'days' => absint( $days ), 'limit' => 11 ) );
if ( ! $post_view_posts ) {
return array();
diff --git a/plugins/jetpack/modules/widgets/twitter-timeline-admin.js b/plugins/jetpack/modules/widgets/twitter-timeline-admin.js
new file mode 100644
index 00000000..e6a65140
--- /dev/null
+++ b/plugins/jetpack/modules/widgets/twitter-timeline-admin.js
@@ -0,0 +1,35 @@
+jQuery( function( $ ) {
+ function twitterWidgetTypeChanged( widgetTypeSelector ) {
+ var selectedType = $( widgetTypeSelector ).val();
+ $( widgetTypeSelector )
+ .closest( '.jetpack-twitter-timeline-widget-type-container' )
+ .next( '.jetpack-twitter-timeline-widget-id-container' )
+ .find( 'label' )
+ .css( 'display', function() {
+ var labelType = $( this ).data( 'widget-type' );
+ if ( selectedType === labelType ) {
+ return '';
+ } else {
+ return 'none';
+ }
+ } );
+ }
+
+ // We could either be in wp-admin/widgets.php or the Customizer.
+ var $container = $( '#customize-controls' );
+ if ( ! $container.length ) {
+ $container = $( '#wpbody' );
+ }
+
+ // Observe widget settings for 'change' events of the 'type' property for
+ // current and future Twitter timeline widgets.
+ $container.on( 'change', '.jetpack-twitter-timeline-widget-type', function() {
+ twitterWidgetTypeChanged( this );
+ } );
+
+ // Set the labels for currently existing widgets (including the "template"
+ // version that is copied when a new widget is added).
+ $container.find( '.jetpack-twitter-timeline-widget-type' ).each( function() {
+ twitterWidgetTypeChanged( this );
+ } );
+} );
diff --git a/plugins/jetpack/modules/widgets/twitter-timeline.php b/plugins/jetpack/modules/widgets/twitter-timeline.php
index fc22fc5a..ef9ed60d 100644
--- a/plugins/jetpack/modules/widgets/twitter-timeline.php
+++ b/plugins/jetpack/modules/widgets/twitter-timeline.php
@@ -1,8 +1,11 @@
<?php
/*
- * Based on Evolution Twitter Timeline (http://wordpress.org/extend/plugins/evolution-twitter-timeline/)
- * See: https://twitter.com/settings/widgets and https://dev.twitter.com/docs/embedded-timelines for details on Twitter Timelines
+ * Based on Evolution Twitter Timeline
+ * (http://wordpress.org/extend/plugins/evolution-twitter-timeline/)
+ * For details on Twitter Timelines see:
+ * - https://twitter.com/settings/widgets
+ * - https://dev.twitter.com/docs/embedded-timelines
*/
/**
@@ -16,8 +19,8 @@ function jetpack_twitter_timeline_widget_init() {
class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
/**
- * Register widget with WordPress.
- */
+ * Register widget with WordPress.
+ */
public function __construct() {
parent::__construct(
'twitter_timeline',
@@ -33,6 +36,8 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
}
+
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
}
/**
@@ -53,6 +58,16 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
}
/**
+ * Enqueue script to improve admin UI
+ */
+ public function admin_scripts( $hook ) {
+ // This is still 'widgets.php' when managing widgets via the Customizer.
+ if ( 'widgets.php' === $hook ) {
+ wp_enqueue_script( 'twitter-timeline-admin', plugins_url( 'twitter-timeline-admin.js', __FILE__ ) );
+ }
+ }
+
+ /**
* Front-end display of widget.
*
* @see WP_Widget::widget()
@@ -61,38 +76,52 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
* @param array $instance Saved values from database.
*/
public function widget( $args, $instance ) {
- $instance['lang'] = substr( strtoupper( get_locale() ), 0, 2 );
+ $instance['lang'] = substr( strtoupper( get_locale() ), 0, 2 );
echo $args['before_widget'];
- if ( $instance['title'] ) {
+ if ( isset( $instance['title'] ) ) {
/** This filter is documented in core/src/wp-includes/default-widgets.php */
echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
}
- $data_attribs = array( 'widget-id', 'theme', 'link-color', 'border-color', 'chrome', 'tweet-limit' );
- $attribs = array( 'width', 'height', 'lang' );
-
// Start tag output
+ // This tag is transformed into the widget markup by Twitter's
+ // widgets.js code
echo '<a class="twitter-timeline"';
+ $data_attribs = array(
+ 'width',
+ 'height',
+ 'theme',
+ 'link-color',
+ 'border-color',
+ 'tweet-limit',
+ 'lang'
+ );
foreach ( $data_attribs as $att ) {
- if ( !empty( $instance[$att] ) ) {
- if ( 'tweet-limit' == $att && 0 === $instance[$att] )
- continue;
-
- if ( is_array( $instance[$att] ) )
- echo ' data-' . esc_attr( $att ) . '="' . esc_attr( join( ' ', $instance['chrome'] ) ) . '"';
- else
- echo ' data-' . esc_attr( $att ) . '="' . esc_attr( $instance[$att] ) . '"';
+ if ( ! empty( $instance[ $att ] ) && ! is_array( $instance[ $att ] ) ) {
+ echo ' data-' . esc_attr( $att ) . '="' . esc_attr( $instance[ $att ] ) . '"';
}
}
- foreach ( $attribs as $att ) {
- if ( !empty( $instance[$att] ) )
- echo ' ' . esc_attr( $att ) . '="' . esc_attr( $instance[$att] ) . '"';
+ if ( ! empty( $instance['chrome'] ) && is_array( $instance['chrome'] ) ) {
+ echo ' data-chrome="' . esc_attr( join( ' ', $instance['chrome'] ) ) . '"';
}
+ $type = ( isset( $instance['type'] ) ? $instance['type'] : '' );
+ $widget_id = ( isset( $instance['widget-id'] ) ? $instance['widget-id'] : '' );
+ switch ( $type ) {
+ case 'profile':
+ echo ' href="https://twitter.com/' . esc_attr( $widget_id ) . '"';
+ break;
+ case 'widget-id':
+ default:
+ echo ' data-widget-id="' . esc_attr( $widget_id ) . '"';
+ break;
+ }
+
+ // End tag output
echo '>';
$timeline_placeholder = __( 'My Tweets', 'jetpack' );
@@ -130,41 +159,71 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
* @return array Updated safe values to be saved.
*/
public function update( $new_instance, $old_instance ) {
- $hex_regex = '/#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/';
- $instance = array();
- $instance['title'] = sanitize_text_field( $new_instance['title'] );
- $instance['width'] = (int) $new_instance['width'];
- $instance['height'] = (int) $new_instance['height'];
- $instance['width'] = ( 0 !== (int) $new_instance['width'] ) ? (int) $new_instance['width'] : '';
- $instance['height'] = ( 0 !== (int) $new_instance['height'] ) ? (int) $new_instance['height'] : '';
- $instance['tweet-limit'] = ( 0 !== (int) $new_instance['tweet-limit'] ) ? (int) $new_instance['tweet-limit'] : null;
+ $instance = array();
+
+ $instance['title'] = sanitize_text_field( $new_instance['title'] );
+
+ $width = (int) $new_instance['width'];
+ if ( $width ) {
+ // From publish.twitter.com: 220 <= width <= 1200
+ $instance['width'] = min( max( $width, 220 ), 1200 );
+ } else {
+ $instance['width'] = '';
+ }
+
+ $height = (int) $new_instance['height'];
+ if ( $height ) {
+ // From publish.twitter.com: height >= 200
+ $instance['height'] = max( $height, 200 );
+ } else {
+ $instance['height'] = '';
+ }
+
+ $tweet_limit = (int) $new_instance['tweet-limit'];
+ $instance['tweet-limit'] = ( $tweet_limit ? $tweet_limit : null );
// If they entered something that might be a full URL, try to parse it out
if ( is_string( $new_instance['widget-id'] ) ) {
- if ( preg_match( '#https?://twitter\.com/settings/widgets/(\d+)#s', $new_instance['widget-id'], $matches ) ) {
+ if ( preg_match(
+ '#https?://twitter\.com/settings/widgets/(\d+)#s',
+ $new_instance['widget-id'],
+ $matches
+ ) ) {
$new_instance['widget-id'] = $matches[1];
}
}
$instance['widget-id'] = sanitize_text_field( $new_instance['widget-id'] );
- $instance['widget-id'] = is_numeric( $instance['widget-id'] ) ? $instance['widget-id'] : '';
+ $hex_regex = '/#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/';
foreach ( array( 'link-color', 'border-color' ) as $color ) {
- $new_color = sanitize_text_field( $new_instance[$color] );
+ $new_color = sanitize_text_field( $new_instance[ $color ] );
if ( preg_match( $hex_regex, $new_color ) ) {
- $instance[$color] = $new_color;
+ $instance[ $color ] = $new_color;
}
}
+ $instance['type'] = 'widget-id';
+ if ( in_array( $new_instance['type'], array( 'widget-id', 'profile' ) ) ) {
+ $instance['type'] = $new_instance['type'];
+ }
+
$instance['theme'] = 'light';
- if ( in_array( $new_instance['theme'], array( 'light', 'dark' ) ) )
+ if ( in_array( $new_instance['theme'], array( 'light', 'dark' ) ) ) {
$instance['theme'] = $new_instance['theme'];
+ }
$instance['chrome'] = array();
+ $chrome_settings = array(
+ 'noheader',
+ 'nofooter',
+ 'noborders',
+ 'transparent'
+ );
if ( isset( $new_instance['chrome'] ) ) {
foreach ( $new_instance['chrome'] as $chrome ) {
- if ( in_array( $chrome, array( 'noheader', 'nofooter', 'noborders', 'noscrollbar', 'transparent' ) ) ) {
+ if ( in_array( $chrome, $chrome_settings ) ) {
$instance['chrome'][] = $chrome;
}
}
@@ -173,6 +232,18 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
return $instance;
}
+ /**
+ * Returns a link to the documentation for a feature of this widget on
+ * Jetpack or WordPress.com.
+ */
+ public function get_docs_link( $hash = '' ) {
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ $base_url = 'https://support.wordpress.com/widgets/twitter-timeline-widget/';
+ } else {
+ $base_url = 'https://jetpack.com/support/extra-sidebar-widgets/twitter-timeline-widget/';
+ }
+ return '<a href="' . $base_url . $hash . '" target="_blank">( ? )</a>';
+ }
/**
* Back-end widget form.
@@ -195,68 +266,203 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
);
$instance = wp_parse_args( (array) $instance, $defaults );
+
+ if ( empty( $instance['type'] ) ) {
+ // Decide the correct widget type. If this is a pre-existing
+ // widget with a numeric widget ID, then the type should be
+ // 'widget-id', otherwise it should be 'profile'.
+ if ( ! empty( $instance['widget-id'] ) && is_numeric( $instance['widget-id'] ) ) {
+ $instance['type'] = 'widget-id';
+ } else {
+ $instance['type'] = 'profile';
+ }
+ }
?>
<p>
- <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
- <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'] ); ?>" />
+ <label for="<?php echo $this->get_field_id( 'title' ); ?>">
+ <?php esc_html_e( 'Title:', 'jetpack' ); ?>
+ </label>
+ <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'] ); ?>"
+ />
</p>
<p>
- <label for="<?php echo $this->get_field_id( 'width' ); ?>"><?php esc_html_e( 'Maximum Width (px):', 'jetpack' ); ?></label>
- <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'] ); ?>" />
+ <label for="<?php echo $this->get_field_id( 'width' ); ?>">
+ <?php esc_html_e( 'Maximum Width (px; 220 to 1200):', 'jetpack' ); ?>
+ </label>
+ <input
+ class="widefat"
+ id="<?php echo $this->get_field_id( 'width' ); ?>"
+ name="<?php echo $this->get_field_name( 'width' ); ?>"
+ type="number" min="220" max="1200"
+ value="<?php echo esc_attr( $instance['width'] ); ?>"
+ />
</p>
- <p>
- <label for="<?php echo $this->get_field_id( 'height' ); ?>"><?php esc_html_e( 'Height (px):', 'jetpack' ); ?></label>
- <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'] ); ?>" />
+ <p>
+ <label for="<?php echo $this->get_field_id( 'height' ); ?>">
+ <?php esc_html_e( 'Height (px; at least 200):', 'jetpack' ); ?>
+ </label>
+ <input
+ class="widefat"
+ id="<?php echo $this->get_field_id( 'height' ); ?>"
+ name="<?php echo $this->get_field_name( 'height' ); ?>"
+ type="number" min="200"
+ value="<?php echo esc_attr( $instance['height'] ); ?>"
+ />
</p>
<p>
- <label for="<?php echo $this->get_field_id( 'tweet-limit' ); ?>"><?php esc_html_e( '# of Tweets Shown:', 'jetpack' ); ?></label>
- <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'] ); ?>" />
+ <label for="<?php echo $this->get_field_id( 'tweet-limit' ); ?>">
+ <?php esc_html_e( '# of Tweets Shown:', 'jetpack' ); ?>
+ </label>
+ <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'] ); ?>"
+ />
</p>
- <p><small>
- <?php
- echo wp_kses_post(
- sprintf(
- __( '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' ),
- 'https://twitter.com/settings/widgets/new/user',
- 'http://support.wordpress.com/widgets/twitter-timeline-widget/'
- )
- );
- ?>
- </small></p>
- <p>
- <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>
- <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'] ); ?>" />
+ <p class="jetpack-twitter-timeline-widget-type-container">
+ <label for="<?php echo $this->get_field_id( 'type' ); ?>">
+ <?php esc_html_e( 'Widget Type:', 'jetpack' ); ?>
+ <?php echo $this->get_docs_link( '#widget-type' ); ?>
+ </label>
+ <select
+ name="<?php echo $this->get_field_name( 'type' ); ?>"
+ id="<?php echo $this->get_field_id( 'type' ); ?>"
+ class="jetpack-twitter-timeline-widget-type widefat"
+ >
+ <option value="profile"<?php selected( $instance['type'], 'profile' ); ?>>
+ <?php esc_html_e( 'Profile', 'jetpack' ); ?>
+ </option>
+ <option value="widget-id"<?php selected( $instance['type'], 'widget-id' ); ?>>
+ <?php esc_html_e( 'Widget ID', 'jetpack' ); ?>
+ </option>
+ </select>
+ </p>
+
+ <p class="jetpack-twitter-timeline-widget-id-container">
+ <label
+ for="<?php echo $this->get_field_id( 'widget-id' ); ?>"
+ data-widget-type="widget-id"
+ <?php echo ( 'widget-id' === $instance['type'] ? '' : 'style="display: none;"' ); ?>
+ >
+ <?php esc_html_e( 'Widget ID:', 'jetpack' ); ?>
+ <?php echo $this->get_docs_link( '#widget-id' ); ?>
+ </label>
+ <label
+ for="<?php echo $this->get_field_id( 'widget-id' ); ?>"
+ data-widget-type="profile"
+ <?php echo ( 'profile' === $instance['type'] ? '' : 'style="display: none;"' ); ?>
+ >
+ <?php esc_html_e( 'Twitter Username:', 'jetpack' ); ?>
+ <?php echo $this->get_docs_link( '#twitter-username' ); ?>
+ </label>
+ <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'] ); ?>"
+ />
</p>
<p>
- <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>"><?php esc_html_e( 'Layout Options:', 'jetpack' ); ?></label><br />
- <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 />
- <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 />
- <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 />
- <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 />
- <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>
+ <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>">
+ <?php esc_html_e( 'Layout Options:', 'jetpack' ); ?>
+ </label>
+ <br />
+ <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 />
+ <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 />
+ <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 />
+ <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>
</p>
<p>
- <label for="<?php echo $this->get_field_id( 'link-color' ); ?>"><?php _e( 'Link Color (hex):', 'jetpack' ); ?></label>
- <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'] ); ?>" />
+ <label for="<?php echo $this->get_field_id( 'link-color' ); ?>">
+ <?php _e( 'Link Color (hex):', 'jetpack' ); ?>
+ </label>
+ <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'] ); ?>"
+ />
</p>
<p>
- <label for="<?php echo $this->get_field_id( 'border-color' ); ?>"><?php _e( 'Border Color (hex):', 'jetpack' ); ?></label>
- <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'] ); ?>" />
+ <label for="<?php echo $this->get_field_id( 'border-color' ); ?>">
+ <?php _e( 'Border Color (hex):', 'jetpack' ); ?>
+ </label>
+ <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'] ); ?>"
+ />
</p>
<p>
- <label for="<?php echo $this->get_field_id( 'theme' ); ?>"><?php _e( 'Timeline Theme:', 'jetpack' ); ?></label>
- <select name="<?php echo $this->get_field_name( 'theme' ); ?>" id="<?php echo $this->get_field_id( 'theme' ); ?>" class="widefat">
- <option value="light"<?php selected( $instance['theme'], 'light' ); ?>><?php esc_html_e( 'Light', 'jetpack' ); ?></option>
- <option value="dark"<?php selected( $instance['theme'], 'dark' ); ?>><?php esc_html_e( 'Dark', 'jetpack' ); ?></option>
+ <label for="<?php echo $this->get_field_id( 'theme' ); ?>">
+ <?php _e( 'Timeline Theme:', 'jetpack' ); ?>
+ </label>
+ <select
+ name="<?php echo $this->get_field_name( 'theme' ); ?>"
+ id="<?php echo $this->get_field_id( 'theme' ); ?>"
+ class="widefat"
+ >
+ <option value="light"<?php selected( $instance['theme'], 'light' ); ?>>
+ <?php esc_html_e( 'Light', 'jetpack' ); ?>
+ </option>
+ <option value="dark"<?php selected( $instance['theme'], 'dark' ); ?>>
+ <?php esc_html_e( 'Dark', 'jetpack' ); ?>
+ </option>
</select>
</p>
<?php
diff --git a/plugins/jetpack/readme.txt b/plugins/jetpack/readme.txt
index b7e821b8..b5e6c2d5 100644
--- a/plugins/jetpack/readme.txt
+++ b/plugins/jetpack/readme.txt
@@ -1,9 +1,9 @@
=== Jetpack by WordPress.com ===
-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
+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
Tags: WordPress.com, jet pack, comments, contact, gallery, performance, sharing, security, shortcodes, stats, subscriptions, widgets
-Stable tag: 4.0.4
+Stable tag: 4.1.1
Requires at least: 4.4
-Tested up to: 4.5.2
+Tested up to: 4.5.3
Increase your traffic, view your stats, speed up your site, and protect yourself from hackers with Jetpack.
@@ -75,6 +75,80 @@ There are opportunities for developers at all levels to contribute. [Learn more
== Changelog ==
+= 4.1.1 =
+
+* Release date: July 7th, 2016
+
+**Bug Fixes:**
+
+* SSO: Use high-resolution Gravatar images on the log-in form on Retina devices.
+* Publicize: improve reliability of Publicize when publishing new posts.
+
+= 4.1 =
+
+* Release date: July 6th, 2016
+* Release Post: http://wp.me/p1moTy-3jd
+
+**Performance Enhancements:**
+
+* Carousel no longer loads full-size images in the previous and next previews, increasing the speed and performance of slideshows.
+* 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.
+* We’ve improved Photon dev mode, eliminating unnecessary attempts to sync images.
+
+**Exciting Feature and UI Improvements:**
+
+* A new look: SSO, redesigned and refactored, provides a new and improved experience.
+* Tracking made simple: quickly view the number of unread feedback submissions in your sidebar.
+* Getting support just got easier! Access improved self-help tools in the Jetpack Debug menu.
+* Greater control over Infinite Scroll: pause and resume Infinite Scroll with two new JavaScript methods.
+* Improved Sharing: we’ve swapped image icons for icon fonts and added Telegram and WhatsApp buttons.
+* Untappd shortcode: now you can sip and share your favorite craft brews. Cheers!
+* Recipes, revamped: we’ve added new recipe shortcodes and options to create more detailed recipes.
+* Improved Gallery Widgets now use Photon to resize and serve images.
+
+**Security:**
+
+* 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.
+* 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.
+* You will now receive a warning for any failed attempts when connecting your website via SSL.
+
+**Slightly Less Exciting Feature Improvements:**
+
+* Updated the Infinite Scroll settings verbiage, which was a bit confusing.
+* Removed Jetpack Audio Shortcode, which is no longer in use.
+* Redesigned Jetpack banner notices to match core notification styles.
+* Added an icon on a connected Jetpack user’s profile page, next to their name.
+* Added the ability to edit Portfolio custom-post-type options in the Customizer.
+* Added a new filter called `jetpack_publicize_capability` which allows you to override user role restrictions for Publicize.
+* Improved the connection process between Jetpack and WordPress.com making it easier to start using Manage.
+* Updated the Top Posts Widget so you can use and display posts that are older than 10 days.
+* Updated the Twitter Timeline Widget to support updates made by Twitter.
+* Improved the VideoPress Shortcode modal.
+* Updated VideoPress, which now defaults to HTML5 videos when the `freedom` shortcode parameter is in use.
+* Improved how Jetpack syncs by removing mock options.
+* Updated the naming convention for feedback posts.
+* 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.
+
+**Improved Compatibility:**
+
+* 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.
+* We’ve fixed a rare scenario where an error would occur when other plugins or sites were using the `JETPACK__GLOTPRESS_LOCALES_PATH` constant.
+
+**Bug Fixes:**
+
+* Comment avatars are now retrieved in a manner more consistent with the login avatar, improving consistency and eliminating the possibility of a future bug.
+* We eliminated PHP notices that were appearing when Custom Content Types were defined without labels or sections.
+* 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!
+* jQuery deprecated the `size()` function -- as a result, we’ve stopped using it as well.
+* A PHP notice popped up when plugins were updated from the WordPress.com plugin management interface -- these notices will no longer appear.
+* We fixed a bug where Photon wasn’t providing the original size for images that were being used outside of the post content.
+* We eliminated the PHP notices that displayed when posts with slideshows were added to a sitemap.
+* We fixed an error that was showing up in Sitemaps when a website permalink structure used `index.php`.
+* We eliminated JavaScript errors that displayed when tiled galleries were viewed.
+* We fixed an issue where image dimensions weren’t properly saved when added to a new widget.
+* 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.
+* We fixed a bug where multiple `display` properties weren’t able to be saved in Custom CSS.
+
= 4.0.4 =
Release date: June 20th, 2016
Release Post: http://wp.me/p1moTy-3eT
diff --git a/plugins/jetpack/sal/class.json-api-date.php b/plugins/jetpack/sal/class.json-api-date.php
new file mode 100644
index 00000000..d51247c0
--- /dev/null
+++ b/plugins/jetpack/sal/class.json-api-date.php
@@ -0,0 +1,55 @@
+<?php
+
+class WPCOM_JSON_API_Date {
+ /**
+ * Returns ISO 8601 formatted datetime: 2011-12-08T01:15:36-08:00
+ *
+ * @param $date_gmt (string) GMT datetime string.
+ * @param $date (string) Optional. Used to calculate the offset from GMT.
+ *
+ * @return string
+ */
+ static function format_date( $date_gmt, $date = null ) {
+ $timestamp_gmt = strtotime( "$date_gmt+0000" );
+
+ if ( null === $date ) {
+ $timestamp = $timestamp_gmt;
+ $hours = $minutes = $west = 0;
+ } else {
+ $date_time = date_create( "$date+0000" );
+ if ( $date_time ) {
+ $timestamp = date_format( $date_time, 'U' );
+ } else {
+ $timestamp = 0;
+ }
+
+ // "0000-00-00 00:00:00" == -62169984000
+ if ( - 62169984000 == $timestamp_gmt ) {
+ // WordPress sets post_date=now, post_date_gmt="0000-00-00 00:00:00" for all drafts
+ // WordPress sets post_modified=now, post_modified_gmt="0000-00-00 00:00:00" for new drafts
+
+ // Try to guess the correct offset from the blog's options.
+ $timezone_string = get_option( 'timezone_string' );
+
+ if ( $timezone_string && $date_time ) {
+ $timezone = timezone_open( $timezone_string );
+ if ( $timezone ) {
+ $offset = $timezone->getOffset( $date_time );
+ }
+ } else {
+ $offset = 3600 * get_option( 'gmt_offset' );
+ }
+ } else {
+ $offset = $timestamp - $timestamp_gmt;
+ }
+
+ $west = $offset < 0;
+ $offset = abs( $offset );
+ $hours = (int) floor( $offset / 3600 );
+ $offset -= $hours * 3600;
+ $minutes = (int) floor( $offset / 60 );
+ }
+
+ return (string) gmdate( 'Y-m-d\\TH:i:s', $timestamp ) . sprintf( '%s%02d:%02d', $west ? '-' : '+', $hours, $minutes );
+ }
+} \ No newline at end of file
diff --git a/plugins/jetpack/sal/class.json-api-links.php b/plugins/jetpack/sal/class.json-api-links.php
new file mode 100644
index 00000000..b5278569
--- /dev/null
+++ b/plugins/jetpack/sal/class.json-api-links.php
@@ -0,0 +1,269 @@
+<?php
+
+require_once dirname( __FILE__ ) . '/../class.json-api.php';
+
+class WPCOM_JSON_API_Links {
+ private $api;
+ private static $instance;
+
+ public static function getInstance() {
+ if (null === static::$instance) {
+ static::$instance = new static();
+ }
+
+ return static::$instance;
+ }
+
+ // protect these methods for singleton
+ protected function __construct() {
+ $this->api = WPCOM_JSON_API::init();
+ }
+ private function __clone() { }
+ private function __wakeup() { }
+
+ /**
+ * Generate a URL to an endpoint
+ *
+ * Used to construct meta links in API responses
+ *
+ * @param mixed $args Optional arguments to be appended to URL
+ * @return string Endpoint URL
+ **/
+ function get_link() {
+ $args = func_get_args();
+ $format = array_shift( $args );
+ $base = WPCOM_JSON_API__BASE;
+
+ $path = array_pop( $args );
+
+ if ( $path ) {
+ $path = '/' . ltrim( $path, '/' );
+ }
+
+ $args[] = $path;
+
+ // Escape any % in args before using sprintf
+ $escaped_args = array();
+ foreach ( $args as $arg_key => $arg_value ) {
+ $escaped_args[ $arg_key ] = str_replace( '%', '%%', $arg_value );
+ }
+
+ $relative_path = vsprintf( "$format%s", $escaped_args );
+
+ if ( ! wp_startswith( $relative_path, '.' ) ) {
+ // Generic version. Match the requested version as best we can
+ $api_version = $this->get_closest_version_of_endpoint( $format, $relative_path );
+ $base = substr( $base, 0, - 1 ) . $api_version;
+ }
+
+ // escape any % in the relative path before running it through sprintf again
+ $relative_path = str_replace( '%', '%%', $relative_path );
+ // http, WPCOM_JSON_API__BASE, ... , path
+ // %s , %s , $format, %s
+ return esc_url_raw( sprintf( "https://%s$relative_path", $base ) );
+ }
+
+ function get_me_link( $path = '' ) {
+ return $this->get_link( '/me', $path );
+ }
+
+ function get_taxonomy_link( $blog_id, $taxonomy_id, $taxonomy_type, $path = '' ) {
+ switch ( $taxonomy_type ) {
+ case 'category':
+ return $this->get_link( '/sites/%d/categories/slug:%s', $blog_id, $taxonomy_id, $path );
+
+ case 'post_tag':
+ return $this->get_link( '/sites/%d/tags/slug:%s', $blog_id, $taxonomy_id, $path );
+
+ default:
+ return $this->get_link( '/sites/%d/taxonomies/%s/terms/slug:%s', $blog_id, $taxonomy_type, $taxonomy_id, $path );
+ }
+ }
+
+ function get_media_link( $blog_id, $media_id, $path = '' ) {
+ return $this->get_link( '/sites/%d/media/%d', $blog_id, $media_id, $path );
+ }
+
+ function get_site_link( $blog_id, $path = '' ) {
+ return $this->get_link( '/sites/%d', $blog_id, $path );
+ }
+
+ function get_post_link( $blog_id, $post_id, $path = '' ) {
+ return $this->get_link( '/sites/%d/posts/%d', $blog_id, $post_id, $path );
+ }
+
+ function get_comment_link( $blog_id, $comment_id, $path = '' ) {
+ return $this->get_link( '/sites/%d/comments/%d', $blog_id, $comment_id, $path );
+ }
+
+ function get_publicize_connection_link( $blog_id, $publicize_connection_id, $path = '' ) {
+ return $this->get_link( '.1/sites/%d/publicize-connections/%d', $blog_id, $publicize_connection_id, $path );
+ }
+
+ function get_publicize_connections_link( $keyring_token_id, $path = '' ) {
+ return $this->get_link( '.1/me/publicize-connections/?keyring_connection_ID=%d', $keyring_token_id, $path );
+ }
+
+ function get_keyring_connection_link( $keyring_token_id, $path = '' ) {
+ return $this->get_link( '.1/me/keyring-connections/%d', $keyring_token_id, $path );
+ }
+
+ function get_external_service_link( $external_service, $path = '' ) {
+ return $this->get_link( '.1/meta/external-services/%s', $external_service, $path );
+ }
+
+ /**
+ * Try to find the closest supported version of an endpoint to the current endpoint
+ *
+ * For example, if we were looking at the path /animals/panda:
+ * - if the current endpoint is v1.3 and there is a v1.3 of /animals/%s available, we return 1.3
+ * - if the current endpoint is v1.3 and there is no v1.3 of /animals/%s known, we fall back to the
+ * maximum available version of /animals/%s, e.g. 1.1
+ *
+ * This method is used in get_link() to construct meta links for API responses.
+ *
+ * @param $template_path The generic endpoint path, e.g. /sites/%s
+ * @param $path string The current endpoint path, relative to the version, e.g. /sites/12345
+ * @param $method string Request method used to access the endpoint path
+ * @return string The current version, or otherwise the maximum version available
+ */
+ function get_closest_version_of_endpoint( $template_path, $path, $request_method = 'GET' ) {
+ static $closest_endpoint_cache;
+
+ if ( ! $closest_endpoint_cache ) {
+ $closest_endpoint_cache = array();
+ }
+
+ if ( ! isset( $closest_endpoint_cache[ $template_path ] ) ) {
+ $closest_endpoint_cache[ $template_path ] = array();
+ } elseif ( isset( $closest_endpoint_cache[ $template_path ][ $request_method ] ) ) {
+ return $closest_endpoint_cache[ $template_path ][ $request_method ];
+ }
+
+ $path = untrailingslashit( $path );
+
+ // /help is a special case - always use the current request version
+ if ( wp_endswith( $path, '/help' ) ) {
+ return $closest_endpoint_cache[ $template_path ][ $request_method ] = $this->api->version;
+ }
+
+ static $matches;
+ if ( empty( $matches ) ) {
+ $matches = array();
+ } else {
+ // try to match out of saved matches
+ foreach( $matches as $match ) {
+ $regex = $match->regex;
+ if ( preg_match( "#^$regex\$#", $path ) ) {
+ return $closest_endpoint_cache[ $template_path ][ $request_method ] = $match->version;
+ }
+ }
+ }
+
+ $endpoint_path_versions = $this->get_endpoint_path_versions();
+ $last_path_segment = $this->get_last_segment_of_relative_path( $path );
+ $max_version_found = null;
+
+ foreach ( $endpoint_path_versions as $endpoint_last_path_segment => $endpoints ) {
+
+ // Does the last part of the path match the path key? (e.g. 'posts')
+ // If the last part contains a placeholder (e.g. %s), we want to carry on
+ if ( $last_path_segment != $endpoint_last_path_segment && ! strstr( $endpoint_last_path_segment, '%' ) ) {
+ continue;
+ }
+
+ foreach ( $endpoints as $endpoint ) {
+ // Does the request method match?
+ if ( ! in_array( $request_method, $endpoint['request_methods'] ) ) {
+ continue;
+ }
+
+ $endpoint_path = untrailingslashit( $endpoint['path'] );
+ $endpoint_path_regex = str_replace( array( '%s', '%d' ), array( '([^/?&]+)', '(\d+)' ), $endpoint_path );
+
+ if ( ! preg_match( "#^$endpoint_path_regex\$#", $path ) ) {
+ continue;
+ }
+
+ // Make sure the endpoint exists at the same version
+ if ( version_compare( $this->api->version, $endpoint['min_version'], '>=') &&
+ version_compare( $this->api->version, $endpoint['max_version'], '<=') ) {
+ array_push( $matches, (object) array( 'version' => $this->api->version, 'regex' => $endpoint_path_regex ) );
+ return $closest_endpoint_cache[ $template_path ][ $request_method ] = $this->api->version;
+ }
+
+ // If the endpoint doesn't exist at the same version, record the max version we found
+ if ( empty( $max_version_found ) || version_compare( $max_version_found['version'], $endpoint['max_version'], '<' ) ) {
+ $max_version_found = array( 'version' => $endpoint['max_version'], 'regex' => $endpoint_path_regex );
+ }
+ }
+ }
+
+ // If the endpoint version is less than the requested endpoint version, return the max version found
+ if ( ! empty( $max_version_found ) ) {
+ array_push( $matches, (object) $max_version_found );
+ return $max_version_found['version'];
+ }
+
+ // Otherwise, use the API version of the current request
+ return $this->api->version;
+ }
+
+ /**
+ * Get an array of endpoint paths with their associated versions
+ *
+ * The result is cached for 30 minutes.
+ *
+ * @return array Array of endpoint paths, min_versions and max_versions, keyed by last segment of path
+ **/
+ protected function get_endpoint_path_versions() {
+
+ static $cache_result;
+
+ if ( ! empty ( $cache_result ) ) {
+ return $cache_result;
+ }
+
+ /*
+ * Create a map of endpoints and their min/max versions keyed by the last segment of the path (e.g. 'posts')
+ * This reduces the search space when finding endpoint matches in get_closest_version_of_endpoint()
+ */
+ $endpoint_path_versions = array();
+
+ foreach ( $this->api->endpoints as $key => $endpoint_objects ) {
+
+ // The key contains a serialized path, min_version and max_version
+ list( $path, $min_version, $max_version ) = unserialize( $key );
+
+ // Grab the last component of the relative path to use as the top-level key
+ $last_path_segment = $this->get_last_segment_of_relative_path( $path );
+
+ $endpoint_path_versions[ $last_path_segment ][] = array(
+ 'path' => $path,
+ 'min_version' => $min_version,
+ 'max_version' => $max_version,
+ 'request_methods' => array_keys( $endpoint_objects )
+ );
+ }
+
+ $cache_result = $endpoint_path_versions;
+
+ return $endpoint_path_versions;
+ }
+
+ /**
+ * Grab the last segment of a relative path
+ *
+ * @param string $path Path
+ * @return string Last path segment
+ */
+ protected function get_last_segment_of_relative_path( $path) {
+ $path_parts = array_filter( explode( '/', $path ) );
+
+ if ( empty( $path_parts ) ) {
+ return null;
+ }
+
+ return end( $path_parts );
+ }
+}
diff --git a/plugins/jetpack/sal/class.json-api-metadata.php b/plugins/jetpack/sal/class.json-api-metadata.php
new file mode 100644
index 00000000..b4801d76
--- /dev/null
+++ b/plugins/jetpack/sal/class.json-api-metadata.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * Utility classes that don't necessarily have a home yet
+ */
+
+class WPCOM_JSON_API_Metadata {
+ public static function is_public( $key ) {
+ if ( empty( $key ) )
+ return false;
+
+ // Default whitelisted meta keys.
+ $whitelisted_meta = array( '_thumbnail_id' );
+
+ // whitelist of metadata that can be accessed
+ /** This filter is documented in json-endpoints/class.wpcom-json-api-post-endpoint.php */
+ if ( in_array( $key, apply_filters( 'rest_api_allowed_public_metadata', $whitelisted_meta ) ) )
+ return true;
+
+ if ( 0 === strpos( $key, 'geo_' ) )
+ return true;
+
+ if ( 0 === strpos( $key, '_wpas_' ) )
+ return true;
+
+ return false;
+ }
+
+ public static function is_internal_only( $key ) {
+
+ if ( 0 === strpos( $key, '_jetpack_') )
+ return true;
+
+ if ( 0 === strpos( $key, '_elasticsearch_') )
+ return true;
+
+ return false;
+ }
+} \ No newline at end of file
diff --git a/plugins/jetpack/sal/class.json-api-platform-jetpack.php b/plugins/jetpack/sal/class.json-api-platform-jetpack.php
index c059b552..6643154c 100644
--- a/plugins/jetpack/sal/class.json-api-platform-jetpack.php
+++ b/plugins/jetpack/sal/class.json-api-platform-jetpack.php
@@ -1,12 +1,14 @@
<?php
-class WPORG_Platform {
- static function get_site( $blog_id ) {
+require_once dirname( __FILE__ ) . '/class.json-api-platform.php';
+
+class WPORG_Platform extends SAL_Platform {
+ public function get_site( $blog_id ) {
require_once dirname( __FILE__ ) . '/class.json-api-site-jetpack.php';
- return new Jetpack_Site( $blog_id );
+ return new Jetpack_Site( $blog_id, $this );
}
}
-function wpcom_get_sal_site( $blog_id ) {
- return WPORG_Platform::get_site( $blog_id );
+function wpcom_get_sal_platform( $token ) {
+ return new WPORG_Platform( $token );
}
diff --git a/plugins/jetpack/sal/class.json-api-platform.php b/plugins/jetpack/sal/class.json-api-platform.php
index 61c7b557..42ba5b60 100644
--- a/plugins/jetpack/sal/class.json-api-platform.php
+++ b/plugins/jetpack/sal/class.json-api-platform.php
@@ -1,5 +1,23 @@
<?php
+require_once dirname( __FILE__ ) . '/class.json-api-token.php';
+
+abstract class SAL_Platform {
+ public $token;
+
+ function __construct( $token ) {
+ if ( is_array( $token ) ) {
+ $token = SAL_Token::from_rest_token( $token );
+ } else {
+ $token = SAL_Token::for_anonymous_user();
+ }
+
+ $this->token = $token;
+ }
+
+ abstract public function get_site( $blog_id );
+}
+
if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
require_once dirname( __FILE__ ) . '/class.json-api-platform-wpcom.php';
} else {
diff --git a/plugins/jetpack/sal/class.json-api-post-base.php b/plugins/jetpack/sal/class.json-api-post-base.php
new file mode 100644
index 00000000..8a422e19
--- /dev/null
+++ b/plugins/jetpack/sal/class.json-api-post-base.php
@@ -0,0 +1,667 @@
+<?php
+/**
+ * This class wraps a WP_Post and proxies any undefined attributes
+ * and methods to the wrapped class. We need to do this because at present
+ * the WP_Post class is marked as final (in 4.5 this will change, though it's
+ * not clear if there will be a mechanism to retrieve from the DB into the over-
+ * ridden class dynamically).
+ **/
+
+require_once dirname( __FILE__ ) . '/class.json-api-metadata.php';
+require_once dirname( __FILE__ ) . '/class.json-api-date.php';
+require_once ( ABSPATH . "wp-includes/post.php" );
+
+abstract class SAL_Post {
+ public $post;
+ public $context;
+ public $site;
+
+ function __construct( $site, $post, $context ) {
+ $this->post = $post;
+ $this->context = $context;
+ $this->site = $site;
+ }
+
+ public function __set( $key, $value ) {
+ $this->post->{ $key } = $value;
+ }
+
+ public function __get( $key ) {
+ if ( $key === 'links' ) {
+ require_once dirname( __FILE__ ) . '/class.json-api-links.php';
+ return WPCOM_JSON_API_Links::getInstance();
+ }
+ return $this->post->{ $key };
+ }
+
+ public function __call( $name, $arguments ) {
+ if ( is_callable( array( $this->post, $name ) ) ) {
+ return call_user_func_array( array( $this->post, $name ), $arguments );
+ } else {
+ trigger_error("Call to undefined method '{$name}'");
+ }
+ }
+
+ public function __isset ( $name ) {
+ return isset( $this->post->{ $name } );
+ }
+
+ abstract public function get_like_count();
+ abstract public function is_liked();
+ abstract public function is_reblogged();
+ abstract public function is_following();
+ abstract public function get_global_id();
+ abstract public function get_geo();
+
+ public function get_menu_order() {
+ return (int) $this->post->menu_order;
+ }
+
+ public function get_guid() {
+ return (string) $this->post->guid;
+ }
+
+ public function get_type() {
+ return (string) $this->post->post_type;
+ }
+
+ public function get_terms() {
+ $taxonomies = get_object_taxonomies( $this->post, 'objects' );
+ $terms = array();
+ foreach ( $taxonomies as $taxonomy ) {
+ if ( ! $taxonomy->public && ! current_user_can( $taxonomy->cap->assign_terms ) ) {
+ continue;
+ }
+
+ $terms[ $taxonomy->name ] = array();
+
+ $taxonomy_terms = wp_get_object_terms( $this->post->ID, $taxonomy->name, array( 'fields' => 'all' ) );
+ foreach ( $taxonomy_terms as $term ) {
+ $formatted_term = $this->format_taxonomy( $term, $taxonomy->name, 'display' );
+ $terms[ $taxonomy->name ][ $term->name ] = $formatted_term;
+ }
+
+ $terms[ $taxonomy->name ] = (object) $terms[ $taxonomy->name ];
+ }
+
+ return (object) $terms;
+ }
+
+ public function get_tags() {
+ $tags = array();
+ $terms = wp_get_post_tags( $this->post->ID );
+ foreach ( $terms as $term ) {
+ if ( !empty( $term->name ) ) {
+ $tags[$term->name] = $this->format_taxonomy( $term, 'post_tag', 'display' );
+ }
+ }
+ return (object) $tags;
+ }
+
+ public function get_categories() {
+ $categories = array();
+ $terms = wp_get_object_terms( $this->post->ID, 'category', array( 'fields' => 'all' ) );
+ foreach ( $terms as $term ) {
+ if ( !empty( $term->name ) ) {
+ $categories[$term->name] = $this->format_taxonomy( $term, 'category', 'display' );
+ }
+ }
+ return (object) $categories;
+ }
+
+ public function get_attachments_and_count() {
+ $attachments = array();
+ $_attachments = new WP_Query( array( 'post_parent' => $this->post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'posts_per_page' => '20' ) );
+ foreach ( $_attachments->posts as $attachment ) {
+ $attachments[$attachment->ID] = $this->get_media_item_v1_1( $attachment->ID );
+ }
+ return array( (object) $attachments, (int) $_attachments->found_posts );
+ }
+
+ public function get_metadata() {
+ $metadata = array();
+ foreach ( (array) has_meta( $this->post->ID ) as $meta ) {
+ // Don't expose protected fields.
+ $meta_key = $meta['meta_key'];
+
+ $show = !( WPCOM_JSON_API_Metadata::is_internal_only( $meta_key ) )
+ &&
+ (
+ WPCOM_JSON_API_Metadata::is_public( $meta_key )
+ ||
+ current_user_can( 'edit_post_meta', $this->post->ID , $meta_key )
+ );
+
+ if ( $show ) {
+ $metadata[] = array(
+ 'id' => $meta['meta_id'],
+ 'key' => $meta['meta_key'],
+ 'value' => maybe_unserialize( $meta['meta_value'] ),
+ );
+ }
+ }
+
+ if ( ! empty( $metadata ) ) {
+ return $metadata;
+ } else {
+ return false;
+ }
+ }
+
+ public function get_meta() {
+ $meta = (object) array(
+ 'links' => (object) array(
+ 'self' => (string) $this->get_post_link(),
+ 'help' => (string) $this->get_post_link( 'help' ),
+ 'site' => (string) $this->get_site_link(),
+ 'replies' => (string) $this->get_post_link( 'replies/' ),
+ 'likes' => (string) $this->get_post_link( 'likes/' ),
+ ),
+ );
+
+ // add autosave link if a more recent autosave exists
+ if ( 'edit' === $this->context ) {
+ $autosave = wp_get_post_autosave( $this->post->ID );
+ if ( $autosave && $autosave->post_modified > $this->post->post_modified )
+ $meta->links->autosave = (string) $this->get_post_link() . '/autosave';
+ }
+
+ return $meta;
+ }
+
+ public function get_current_user_capabilities() {
+ return array(
+ 'publish_post' => current_user_can( 'publish_post', $this->post ),
+ 'delete_post' => current_user_can( 'delete_post', $this->post ),
+ 'edit_post' => current_user_can( 'edit_post', $this->post )
+ );
+ }
+
+ public function get_revisions() {
+ if ( 'edit' !== $this->context ) {
+ return false;
+ }
+
+ $revisions = array();
+ $post_revisions = wp_get_post_revisions( $this->post->ID );
+
+ foreach ( $post_revisions as $_post ) {
+ $revisions[] = $_post->ID;
+ }
+
+ return $revisions;
+ }
+
+ public function get_other_urls() {
+ $other_urls = array();
+
+ if ( 'publish' !== $this->post->post_status ) {
+ $other_urls = $this->get_permalink_suggestions( $this->post->post_title );
+ }
+
+ return (object) $other_urls;
+ }
+
+ protected function get_site_link() {
+ return $this->links->get_site_link( $this->site->get_id() );
+ }
+
+ protected function get_post_link( $path = null ) {
+ return $this->links->get_post_link( $this->site->get_id(), $this->post->ID, $path );
+ }
+
+ public function get_publicize_urls() {
+ $publicize_URLs = array();
+ $publicize = get_post_meta( $this->post->ID, 'publicize_results', true );
+ if ( $publicize ) {
+ foreach ( $publicize as $service => $data ) {
+ switch ( $service ) {
+ case 'twitter' :
+ foreach ( $data as $datum ) {
+ $publicize_URLs[] = esc_url_raw( "https://twitter.com/{$datum['user_id']}/status/{$datum['post_id']}" );
+ }
+ break;
+ case 'fb' :
+ foreach ( $data as $datum ) {
+ $publicize_URLs[] = esc_url_raw( "https://www.facebook.com/permalink.php?story_fbid={$datum['post_id']}&id={$datum['user_id']}" );
+ }
+ break;
+ }
+ }
+ }
+ return (array) $publicize_URLs;
+ }
+
+ public function get_page_template() {
+ return (string) get_post_meta( $this->post->ID, '_wp_page_template', true );
+ }
+
+ // note this is overridden in jetpack-shadow
+ public function get_featured_image() {
+ $image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $this->post->ID ), 'full' );
+ if ( is_array( $image_attributes ) && isset( $image_attributes[0] ) ) {
+ return (string) $image_attributes[0];
+ } else {
+ return '';
+ }
+ }
+
+ public function get_post_thumbnail() {
+ $thumb = null;
+
+ $thumb_id = get_post_thumbnail_id( $this->post->ID );
+
+ if ( ! empty( $thumb_id ) ) {
+ $attachment = get_post( $thumb_id );
+ if ( ! empty( $attachment ) )
+ $featured_image_object = $this->get_attachment( $attachment );
+
+ if ( ! empty( $featured_image_object ) ) {
+ $thumb = (object) $featured_image_object;
+ }
+ }
+
+ return $thumb;
+ }
+
+ public function get_format() {
+ $format = (string) get_post_format( $this->post->ID );
+ if ( !$format ) {
+ $format = 'standard';
+ }
+
+ return $format;
+ }
+
+ private function get_attachment( $attachment ) {
+ $metadata = wp_get_attachment_metadata( $attachment->ID );
+
+ $result = array(
+ 'ID' => (int) $attachment->ID,
+ 'URL' => (string) wp_get_attachment_url( $attachment->ID ),
+ 'guid' => (string) $attachment->guid,
+ 'mime_type' => (string) $attachment->post_mime_type,
+ 'width' => (int) isset( $metadata['width'] ) ? $metadata['width'] : 0,
+ 'height' => (int) isset( $metadata['height'] ) ? $metadata['height'] : 0,
+ );
+
+ if ( isset( $metadata['duration'] ) ) {
+ $result['duration'] = (int) $metadata['duration'];
+ }
+
+ /** This filter is documented in class.jetpack-sync.php */
+ return (object) apply_filters( 'get_attachment', $result );
+ }
+
+ public function get_date() {
+ return (string) WPCOM_JSON_API_Date::format_date( $this->post->post_date_gmt, $this->post->post_date );
+ }
+
+ public function get_modified_date() {
+ return (string) WPCOM_JSON_API_Date::format_date( $this->post->post_modified_gmt, $this->post->post_modified );
+ }
+
+ public function get_title() {
+ if ( 'display' === $this->context ) {
+ return (string) get_the_title( $this->post->ID );
+ } else {
+ return (string) htmlspecialchars_decode( $this->post->post_title, ENT_QUOTES );
+ }
+ }
+
+ public function get_url() {
+ if ( 'revision' === $this->post->post_type ) {
+ return (string) esc_url_raw( get_permalink( $this->post->post_parent ) );
+ } else {
+ return (string) esc_url_raw( get_permalink( $this->post->ID ) );
+ }
+ }
+
+ public function get_shortlink() {
+ return (string) esc_url_raw( wp_get_shortlink( $this->post->ID ) );
+ }
+
+ public function get_content() {
+ if ( 'display' === $this->context ) {
+ // TODO: move this WPCOM-specific hack
+ add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
+ $content = (string) $this->get_the_post_content_for_display();
+ remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
+ return $content;
+ } else {
+ return (string) $this->post->post_content;
+ }
+ }
+
+ public function get_excerpt() {
+ if ( 'display' === $this->context ) {
+ add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
+ ob_start();
+ the_excerpt();
+ $response = (string) ob_get_clean();
+ remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
+ } else {
+ $response = htmlspecialchars_decode( (string) $this->post->post_excerpt, ENT_QUOTES );
+ }
+ return $response;
+ }
+
+ public function get_status() {
+ return (string) get_post_status( $this->post->ID );
+ }
+
+ public function is_sticky() {
+ return (bool) is_sticky( $this->post->ID );
+ }
+
+ public function get_slug() {
+ return (string) $this->post->post_name;
+ }
+
+ public function get_password() {
+ $password = (string) $this->post->post_password;
+ if ( 'edit' === $this->context ) {
+ $password = htmlspecialchars_decode( (string) $password, ENT_QUOTES );
+ }
+ return $password;
+ }
+
+ public function get_parent() {
+ if ( $this->post->post_parent ) {
+ $parent = get_post( $this->post->post_parent );
+ if ( 'display' === $this->context ) {
+ $parent_title = (string) get_the_title( $parent->ID );
+ } else {
+ $parent_title = (string) htmlspecialchars_decode( $this->post->post_title, ENT_QUOTES );
+ }
+ return (object) array(
+ 'ID' => (int) $parent->ID,
+ 'type' => (string) $parent->post_type,
+ 'link' => (string) $this->links->get_post_link( $this->site->get_id(), $parent->ID ),
+ 'title' => $parent_title,
+ );
+ } else {
+ return false;
+ }
+ }
+
+ function the_password_form() {
+ return __( 'This post is password protected.', 'jetpack' );
+ }
+
+ public function get_discussion() {
+ return array(
+ 'comments_open' => (bool) comments_open( $this->post->ID ),
+ 'comment_status' => (string) $this->post->comment_status,
+ 'pings_open' => (bool) pings_open( $this->post->ID ),
+ 'ping_status' => (string) $this->post->ping_status,
+ 'comment_count' => (int) $this->post->comment_count,
+ );
+ }
+
+ public function is_likes_enabled() {
+ /** This filter is documented in modules/likes.php */
+ $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
+ $post_likes_switched = (bool) get_post_meta( $this->post->ID, 'switch_like_status', true );
+ $post_likes_enabled = $sitewide_likes_enabled;
+ if ( $post_likes_switched ) {
+ $post_likes_enabled = ! $post_likes_enabled;
+ }
+ return (bool) $post_likes_enabled;
+ }
+
+ public function is_sharing_enabled() {
+ $show = true;
+ /** This filter is documented in modules/sharedaddy/sharing-service.php */
+ $show = apply_filters( 'sharing_show', $show, $this->post );
+
+ $switched_status = get_post_meta( $this->post->ID, 'sharing_disabled', false );
+
+ if ( !empty( $switched_status ) )
+ $show = false;
+
+ return (bool) $show;
+ }
+
+ // No Blog ID parameter. No Post ID parameter. Depends on globals.
+ // Expects setup_postdata() to already have been run
+ function get_the_post_content_for_display() {
+ global $pages, $page;
+
+ $old_pages = $pages;
+ $old_page = $page;
+
+ $content = join( "\n\n", $pages );
+ $content = preg_replace( '/<!--more(.*?)?-->/', '', $content );
+ $pages = array( $content );
+ $page = 1;
+
+ ob_start();
+ the_content();
+ $return = ob_get_clean();
+
+ $pages = $old_pages;
+ $page = $old_page;
+
+ return $return;
+ }
+
+ public function get_author() {
+ if ( 0 == $this->post->post_author )
+ return null;
+
+ $show_email = $this->context === 'edit' && current_user_can( 'edit_post', $this->post );
+
+ $user = get_user_by( 'id', $this->post->post_author );
+
+ if ( ! $user || is_wp_error( $user ) ) {
+ trigger_error( 'Unknown user', E_USER_WARNING );
+
+ return null;
+ }
+
+ // TODO factor this out
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ $active_blog = get_active_blog_for_user( $user->ID );
+ $site_id = $active_blog->get_id();
+ $profile_URL = "http://en.gravatar.com/{$user->user_login}";
+ } else {
+ $profile_URL = 'http://en.gravatar.com/' . md5( strtolower( trim( $user->user_email ) ) );
+ $site_id = -1;
+ }
+
+ $author = array(
+ 'ID' => (int) $user->ID,
+ 'login' => (string) $user->user_login,
+ 'email' => $show_email ? (string) $user->user_email : false, // (string|bool)
+ 'name' => (string) $user->display_name,
+ 'first_name' => (string) $user->first_name,
+ 'last_name' => (string) $user->last_name,
+ 'nice_name' => (string) $user->user_nicename,
+ 'URL' => (string) esc_url_raw( $user->user_url ),
+ 'avatar_URL' => (string) esc_url_raw( $this->get_avatar_url( $user->user_email ) ),
+ 'profile_URL' => (string) esc_url_raw( $profile_URL )
+ );
+
+ if ($site_id > -1) {
+ $author['site_ID'] = (int) $site_id;
+ }
+
+ return (object) $author;
+ }
+
+ protected abstract function get_avatar_url( $email, $avatar_size = 96 );
+
+ /**
+ * Get extra post permalink suggestions
+ * @return array array of permalink suggestions: 'permalink_URL', 'suggested_slug'
+ */
+ public function get_permalink_suggestions( $title ) {
+ $suggestions = array();
+ list( $suggestions['permalink_URL'], $suggestions['suggested_slug'] ) = get_sample_permalink( $this->post->ID, $title );
+ return $suggestions;
+ }
+
+ private function format_taxonomy( $taxonomy, $taxonomy_type, $context ) {
+ // Permissions
+ switch ( $context ) {
+ case 'edit' :
+ $tax = get_taxonomy( $taxonomy_type );
+ if ( !current_user_can( $tax->cap->edit_terms ) )
+ return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
+ break;
+ case 'display' :
+ if ( -1 == get_option( 'blog_public' ) && ! current_user_can( 'read' ) ) {
+ return new WP_Error( 'unauthorized', 'User cannot view taxonomy', 403 );
+ }
+ break;
+ default :
+ return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
+ }
+
+ $response = array();
+ $response['ID'] = (int) $taxonomy->term_id;
+ $response['name'] = (string) $taxonomy->name;
+ $response['slug'] = (string) $taxonomy->slug;
+ $response['description'] = (string) $taxonomy->description;
+ $response['post_count'] = (int) $taxonomy->count;
+
+ if ( is_taxonomy_hierarchical( $taxonomy_type ) ) {
+ $response['parent'] = (int) $taxonomy->parent;
+ }
+
+ $response['meta'] = (object) array(
+ 'links' => (object) array(
+ 'self' => (string) $this->links->get_taxonomy_link( $this->site->get_id(), $taxonomy->slug, $taxonomy_type ),
+ 'help' => (string) $this->links->get_taxonomy_link( $this->site->get_id(), $taxonomy->slug, $taxonomy_type, 'help' ),
+ 'site' => (string) $this->links->get_site_link( $this->site->get_id() ),
+ ),
+ );
+
+ return (object) $response;
+ }
+
+ // TODO: factor this out into site
+ private function get_media_item_v1_1( $media_id ) {
+ $media_item = get_post( $media_id );
+
+ if ( ! $media_item || is_wp_error( $media_item ) )
+ return new WP_Error( 'unknown_media', 'Unknown Media', 404 );
+
+ $file = basename( wp_get_attachment_url( $media_item->ID ) );
+ $file_info = pathinfo( $file );
+ $ext = $file_info['extension'];
+
+ $response = array(
+ 'ID' => $media_item->ID,
+ 'URL' => wp_get_attachment_url( $media_item->ID ),
+ 'guid' => $media_item->guid,
+ 'date' => (string) WPCOM_JSON_API_Date::format_date( $media_item->post_date_gmt, $media_item->post_date ),
+ 'post_ID' => $media_item->post_parent,
+ 'author_ID' => (int) $media_item->post_author,
+ 'file' => $file,
+ 'mime_type' => $media_item->post_mime_type,
+ 'extension' => $ext,
+ 'title' => $media_item->post_title,
+ 'caption' => $media_item->post_excerpt,
+ 'description' => $media_item->post_content,
+ 'alt' => get_post_meta( $media_item->ID, '_wp_attachment_image_alt', true ),
+ 'thumbnails' => array()
+ );
+
+ if ( in_array( $ext, array( 'jpg', 'jpeg', 'png', 'gif' ) ) ) {
+ $metadata = wp_get_attachment_metadata( $media_item->ID );
+ if ( isset( $metadata['height'], $metadata['width'] ) ) {
+ $response['height'] = $metadata['height'];
+ $response['width'] = $metadata['width'];
+ }
+
+ if ( isset( $metadata['sizes'] ) ) {
+ /**
+ * Filter the thumbnail sizes available for each attachment ID.
+ *
+ * @module json-api
+ *
+ * @since 3.9.0
+ *
+ * @param array $metadata['sizes'] Array of thumbnail sizes available for a given attachment ID.
+ * @param string $media_id Attachment ID.
+ */
+ $sizes = apply_filters( 'rest_api_thumbnail_sizes', $metadata['sizes'], $media_id );
+ if ( is_array( $sizes ) ) {
+ foreach ( $sizes as $size => $size_details ) {
+ $response['thumbnails'][ $size ] = dirname( $response['URL'] ) . '/' . $size_details['file'];
+ }
+ }
+ }
+
+ if ( isset( $metadata['image_meta'] ) ) {
+ $response['exif'] = $metadata['image_meta'];
+ }
+ }
+
+ if ( in_array( $ext, array( 'mp3', 'm4a', 'wav', 'ogg' ) ) ) {
+ $metadata = wp_get_attachment_metadata( $media_item->ID );
+ $response['length'] = $metadata['length'];
+ $response['exif'] = $metadata;
+ }
+
+ if ( in_array( $ext, array( 'ogv', 'mp4', 'mov', 'wmv', 'avi', 'mpg', '3gp', '3g2', 'm4v' ) ) ) {
+ $metadata = wp_get_attachment_metadata( $media_item->ID );
+ if ( isset( $metadata['height'], $metadata['width'] ) ) {
+ $response['height'] = $metadata['height'];
+ $response['width'] = $metadata['width'];
+ }
+
+ if ( isset( $metadata['length'] ) ) {
+ $response['length'] = $metadata['length'];
+ }
+
+ // add VideoPress info
+ if ( function_exists( 'video_get_info_by_blogpostid' ) ) {
+ $info = video_get_info_by_blogpostid( $this->site->get_id(), $media_id );
+
+ // Thumbnails
+ if ( function_exists( 'video_format_done' ) && function_exists( 'video_image_url_by_guid' ) ) {
+ $response['thumbnails'] = array( 'fmt_hd' => '', 'fmt_dvd' => '', 'fmt_std' => '' );
+ foreach ( $response['thumbnails'] as $size => $thumbnail_url ) {
+ if ( video_format_done( $info, $size ) ) {
+ $response['thumbnails'][ $size ] = video_image_url_by_guid( $info->guid, $size );
+ } else {
+ unset( $response['thumbnails'][ $size ] );
+ }
+ }
+ }
+
+ $response['videopress_guid'] = $info->guid;
+ $response['videopress_processing_done'] = true;
+ if ( '0000-00-00 00:00:00' == $info->finish_date_gmt ) {
+ $response['videopress_processing_done'] = false;
+ }
+ }
+ }
+
+ $response['thumbnails'] = (object) $response['thumbnails'];
+
+ $response['meta'] = (object) array(
+ 'links' => (object) array(
+ 'self' => (string) $this->links->get_media_link( $this->site->get_id(), $media_id ),
+ 'help' => (string) $this->links->get_media_link( $this->site->get_id(), $media_id, 'help' ),
+ 'site' => (string) $this->links->get_site_link( $this->site->get_id() ),
+ ),
+ );
+
+ // add VideoPress link to the meta
+ if ( in_array( $ext, array( 'ogv', 'mp4', 'mov', 'wmv', 'avi', 'mpg', '3gp', '3g2', 'm4v' ) ) ) {
+ if ( function_exists( 'video_get_info_by_blogpostid' ) ) {
+ $response['meta']->links->videopress = (string) $this->links->get_link( '/videos/%s', $response['videopress_guid'], '' );
+ }
+ }
+
+ if ( $media_item->post_parent > 0 ) {
+ $response['meta']->links->parent = (string) $this->links->get_post_link( $this->site->get_id(), $media_item->post_parent );
+ }
+
+ return (object) $response;
+ }
+}
diff --git a/plugins/jetpack/sal/class.json-api-post-jetpack.php b/plugins/jetpack/sal/class.json-api-post-jetpack.php
new file mode 100644
index 00000000..f6803132
--- /dev/null
+++ b/plugins/jetpack/sal/class.json-api-post-jetpack.php
@@ -0,0 +1,34 @@
+<?php
+class Jetpack_Post extends SAL_Post {
+ public function get_like_count() {
+ return 0;
+ }
+
+ public function is_liked() {
+ return false;
+ }
+
+ public function is_reblogged() {
+ return false;
+ }
+
+ public function is_following() {
+ return false;
+ }
+
+ public function get_global_id() {
+ return '';
+ }
+
+ public function get_geo() {
+ return false;
+ }
+
+ protected function get_avatar_url( $email, $avatar_size = 96 ) {
+ $avatar_url = get_avatar_url( $email, array( 'size' => $avatar_size ) );
+ if ( !$avatar_url || is_wp_error( $avatar_url ) ) {
+ return '';
+ }
+ return $avatar_url;
+ }
+}
diff --git a/plugins/jetpack/sal/class.json-api-site-base.php b/plugins/jetpack/sal/class.json-api-site-base.php
index 8c8d5112..c4f6afc8 100644
--- a/plugins/jetpack/sal/class.json-api-site-base.php
+++ b/plugins/jetpack/sal/class.json-api-site-base.php
@@ -1,14 +1,51 @@
<?php
+/*
+ * WARNING: This file is distributed verbatim in Jetpack.
+ * There should be nothing WordPress.com specific in this file.
+ *
+ * @hide-in-jetpack
+ */
+
+require_once dirname( __FILE__ ) . '/class.json-api-date.php';
+require_once dirname( __FILE__ ) . '/class.json-api-post-base.php';
/**
* Base class for the Site Abstraction Layer (SAL)
+ * Note that this is the site "as seen by user $user_id with token $token", which
+ * is why we pass the token to the platform; these site instances are value objects
+ * to be used in the context of a single request for a single user.
+ * Also note that at present this class _assumes_ you've "switched to"
+ * the site in question, and functions like `get_bloginfo( 'name' )` will
+ * therefore return the correct value
**/
abstract class SAL_Site {
public $blog_id;
+ public $platform;
- public function __construct( $blog_id ) {
+ public function __construct( $blog_id, $platform ) {
$this->blog_id = $blog_id;
+ $this->platform = $platform;
+ }
+
+ public function get_id() {
+ return $this->blog_id;
+ }
+
+ public function get_name() {
+ return (string) htmlspecialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES );
+ }
+
+ public function get_description() {
+ return (string) htmlspecialchars_decode( get_bloginfo( 'description' ), ENT_QUOTES );
+ }
+
+ public function get_url() {
+ return (string) home_url();
+ }
+
+ public function get_post_count() {
+ return (int) wp_count_posts( 'post' )->publish;
}
abstract public function has_videopress();
@@ -55,17 +92,224 @@ abstract class SAL_Site {
abstract public function after_render( &$response );
+ // TODO - factor this out? Seems an odd thing to have on a site
abstract public function after_render_options( &$options );
+ // wrap a WP_Post object with SAL methods
+ abstract public function wrap_post( $post, $context );
+
+
+ public function get_post_by_id( $post_id, $context ) {
+ $post = get_post( $post_id, OBJECT, $context );
+
+ if ( ! $post ) {
+ return new WP_Error( 'unknown_post', 'Unknown post', 404 );
+ }
+
+ $wrapped_post = $this->wrap_post( $post, $context );
+
+ // validate access
+ return $this->validate_access( $wrapped_post );
+ }
+
+ /**
+ * Validate current user can access the post
+ *
+ * @return WP_Error or post
+ */
+ private function validate_access( $post ) {
+ $context = $post->context;
+
+ if ( ! $this->is_post_type_allowed( $post->post_type )
+ &&
+ ( ! function_exists( 'is_post_freshly_pressed' ) || ! is_post_freshly_pressed( $post->ID ) ) ) {
+ return new WP_Error( 'unknown_post', 'Unknown post', 404 );
+ }
+
+ switch ( $context ) {
+ case 'edit' :
+ if ( ! current_user_can( 'edit_post', $post ) ) {
+ return new WP_Error( 'unauthorized', 'User cannot edit post', 403 );
+ }
+ break;
+ case 'display' :
+ $can_view = $this->user_can_view_post( $post );
+ if ( is_wp_error( $can_view ) ) {
+ return $can_view;
+ }
+ break;
+ default :
+ return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
+ }
+
+ return $post;
+ }
+
+ // copied from class.json-api-endpoints.php
+ private function is_post_type_allowed( $post_type ) {
+ // if the post type is empty, that's fine, WordPress will default to post
+ if ( empty( $post_type ) )
+ return true;
+
+ // allow special 'any' type
+ if ( 'any' == $post_type )
+ return true;
+
+ // check for allowed types
+ if ( in_array( $post_type, $this->_get_whitelisted_post_types() ) )
+ return true;
+
+ return false;
+ }
+
+ // copied from class.json-api-endpoints.php
+ /**
+ * Gets the whitelisted post types that JP should allow access to.
+ *
+ * @return array Whitelisted post types.
+ */
+ private function _get_whitelisted_post_types() {
+ $allowed_types = array( 'post', 'page', 'revision' );
+
+ /**
+ * Filter the post types Jetpack has access to, and can synchronize with WordPress.com.
+ *
+ * @module json-api
+ *
+ * @since 2.2.3
+ *
+ * @param array $allowed_types Array of whitelisted post types. Default to `array( 'post', 'page', 'revision' )`.
+ */
+ $allowed_types = apply_filters( 'rest_api_allowed_post_types', $allowed_types );
+
+ return array_unique( $allowed_types );
+ }
+
+ // copied and modified a little from class.json-api-endpoints.php
+ private function user_can_view_post( $post ) {
+ if ( !$post || is_wp_error( $post ) ) {
+ return false;
+ }
+
+ if ( 'inherit' === $post->post_status ) {
+ $parent_post = get_post( $post->post_parent );
+ $post_status_obj = get_post_status_object( $parent_post->post_status );
+ } else {
+ $post_status_obj = get_post_status_object( $post->post_status );
+ }
+
+ $authorized = (
+ $post_status_obj->public ||
+ ( is_user_logged_in() &&
+ (
+ ( $post_status_obj->protected && current_user_can( 'edit_post', $post->ID ) ) ||
+ ( $post_status_obj->private && current_user_can( 'read_post', $post->ID ) ) ||
+ ( 'trash' === $post->post_status && current_user_can( 'edit_post', $post->ID ) ) ||
+ 'auto-draft' === $post->post_status
+ )
+ )
+ );
+
+ if ( ! $authorized ) {
+ return new WP_Error( 'unauthorized', 'User cannot view post', 403 );
+ }
+
+ if (
+ -1 == get_option( 'blog_public' ) &&
+ /**
+ * Filter access to a specific post.
+ *
+ * @module json-api
+ *
+ * @since 3.4.0
+ *
+ * @param bool current_user_can( 'read_post', $post->ID ) Can the current user access the post.
+ * @param WP_Post $post Post data.
+ */
+ ! apply_filters(
+ 'wpcom_json_api_user_can_view_post',
+ current_user_can( 'read_post', $post->ID ),
+ $post
+ )
+ ) {
+ return new WP_Error( 'unauthorized', 'User cannot view post', array( 'status_code' => 403, 'error' => 'private_blog' ) );
+ }
+
+ if ( strlen( $post->post_password ) && !current_user_can( 'edit_post', $post->ID ) ) {
+ return new WP_Error( 'unauthorized', 'User cannot view password protected post', array( 'status_code' => 403, 'error' => 'password_protected' ) );
+ }
+
+ return true;
+ }
+
+ /**
+ * Get post ID by name
+ *
+ * Attempts to match name on post title and page path
+ *
+ * @param string $name
+ *
+ * @return int|object Post ID on success, WP_Error object on failure
+ */
+ public function get_post_id_by_name( $name ) {
+ $name = sanitize_title( $name );
+
+ if ( ! $name ) {
+ return new WP_Error( 'invalid_post', 'Invalid post', 400 );
+ }
+
+ $posts = get_posts( array(
+ 'name' => $name,
+ 'numberposts' => 1,
+ 'post_type' => $this->_get_whitelisted_post_types(),
+ ) );
+
+ if ( ! $posts || ! isset( $posts[0]->ID ) || ! $posts[0]->ID ) {
+ $page = get_page_by_path( $name );
+
+ if ( ! $page ) {
+ return new WP_Error( 'unknown_post', 'Unknown post', 404 );
+ }
+
+ return $page->ID;
+ }
+
+ return (int) $posts[0]->ID;
+ }
+
+ /**
+ * Get post by name
+ *
+ * Attempts to match name on post title and page path
+ *
+ * @param string $name
+ * @param string $context (display or edit)
+ *
+ * @return object Post object on success, WP_Error object on failure
+ **/
+ public function get_post_by_name( $name, $context ) {
+ $post_id = $this->get_post_id_by_name( $name );
+ if ( is_wp_error( $post_id ) ) {
+ return $post_id;
+ }
+
+ return $this->get_post_by_id( $post_id, $context );
+ }
+
function user_can_manage() {
- current_user_can( 'manage_options' ); // remove this attribute in favor of 'capabilities'
+ current_user_can( 'manage_options' );
+ }
+
+ function get_xmlrpc_url() {
+ $xmlrpc_scheme = apply_filters( 'wpcom_json_api_xmlrpc_scheme', parse_url( get_option( 'home' ), PHP_URL_SCHEME ) );
+ return site_url( 'xmlrpc.php', $xmlrpc_scheme );
}
function get_registered_date() {
if ( function_exists( 'get_blog_details' ) ) {
$blog_details = get_blog_details();
if ( ! empty( $blog_details->registered ) ) {
- return $this->format_date( $blog_details->registered );
+ return WPCOM_JSON_API_Date::format_date( $blog_details->registered );
}
}
@@ -134,55 +378,134 @@ abstract class SAL_Site {
return $logo_setting;
}
- /**
- * Returns ISO 8601 formatted datetime: 2011-12-08T01:15:36-08:00
- *
- * @param $date_gmt (string) GMT datetime string.
- * @param $date (string) Optional. Used to calculate the offset from GMT.
- *
- * @return string
- */
- function format_date( $date_gmt, $date = null ) {
- $timestamp_gmt = strtotime( "$date_gmt+0000" );
+ function get_timezone() {
+ return (string) get_option( 'timezone_string' );
+ }
- if ( null === $date ) {
- $timestamp = $timestamp_gmt;
- $hours = $minutes = $west = 0;
- } else {
- $date_time = date_create( "$date+0000" );
- if ( $date_time ) {
- $timestamp = date_format( $date_time, 'U' );
- } else {
- $timestamp = 0;
- }
+ function get_gmt_offset() {
+ return (float) get_option( 'gmt_offset' );
+ }
- // "0000-00-00 00:00:00" == -62169984000
- if ( - 62169984000 == $timestamp_gmt ) {
- // WordPress sets post_date=now, post_date_gmt="0000-00-00 00:00:00" for all drafts
- // WordPress sets post_modified=now, post_modified_gmt="0000-00-00 00:00:00" for new drafts
-
- // Try to guess the correct offset from the blog's options.
- $timezone_string = get_option( 'timezone_string' );
-
- if ( $timezone_string && $date_time ) {
- $timezone = timezone_open( $timezone_string );
- if ( $timezone ) {
- $offset = $timezone->getOffset( $date_time );
- }
- } else {
- $offset = 3600 * get_option( 'gmt_offset' );
- }
- } else {
- $offset = $timestamp - $timestamp_gmt;
- }
+ function get_login_url() {
+ return wp_login_url();
+ }
+
+ function get_admin_url() {
+ return get_admin_url();
+ }
+
+ function get_unmapped_url() {
+ return get_site_url( $this->blog_id );
+ }
+
+ function get_theme_slug() {
+ return get_option( 'stylesheet' );
+ }
+
+ function get_header_image() {
+ return get_theme_mod( 'header_image_data' );
+ }
+
+ function get_background_color() {
+ return get_theme_mod( 'background_color' );
+ }
+
+ function get_image_default_link_type() {
+ return get_option( 'image_default_link_type' );
+ }
+
+ function get_image_thumbnail_width() {
+ return (int) get_option( 'thumbnail_size_w' );
+ }
- $west = $offset < 0;
- $offset = abs( $offset );
- $hours = (int) floor( $offset / 3600 );
- $offset -= $hours * 3600;
- $minutes = (int) floor( $offset / 60 );
+ function get_image_thumbnail_height() {
+ return (int) get_option( 'thumbnail_size_h' );
+ }
+
+ function get_image_thumbnail_crop() {
+ return get_option( 'thumbnail_crop' );
+ }
+
+ function get_image_medium_width() {
+ return (int) get_option( 'medium_size_w' );
+ }
+
+ function get_image_medium_height() {
+ return (int) get_option( 'medium_size_h' );
+ }
+
+ function get_image_large_width() {
+ return (int) get_option( 'large_size_w' );
+ }
+
+ function get_image_large_height() {
+ return (int) get_option( 'large_size_h' );
+ }
+
+ function get_permalink_structure() {
+ return get_option( 'permalink_structure' );
+ }
+
+ function get_default_post_format() {
+ return get_option( 'default_post_format' );
+ }
+
+ function get_default_category() {
+ return (int) get_option( 'default_category' );
+ }
+
+ function get_show_on_front() {
+ return get_option( 'show_on_front' );
+ }
+
+ function is_custom_front_page() {
+ return ( 'page' === $this->get_show_on_front() );
+ }
+
+ function get_default_likes_enabled() {
+ return (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
+ }
+
+ function get_default_sharing_status() {
+ $default_sharing_status = false;
+ if ( class_exists( 'Sharing_Service' ) ) {
+ $ss = new Sharing_Service();
+ $blog_services = $ss->get_blog_services();
+ $default_sharing_status = ! empty( $blog_services['visible'] );
}
+ return (bool) $default_sharing_status;
+ }
+
+ function get_default_comment_status() {
+ return 'closed' !== get_option( 'default_comment_status' );
+ }
+
+ function default_ping_status() {
+ return 'closed' !== get_option( 'default_ping_status' );
+ }
+
+ function is_publicize_permanently_disabled() {
+ $publicize_permanently_disabled = false;
+ if ( function_exists( 'is_publicize_permanently_disabled' ) ) {
+ $publicize_permanently_disabled = is_publicize_permanently_disabled( $this->blog_id );
+ }
+ return $publicize_permanently_disabled;
+ }
+
+ function get_page_on_front() {
+ return (int) get_option( 'page_on_front' );
+ }
+
+ function get_page_for_posts() {
+ return (int) get_option( 'page_for_posts' );
+ }
+
+ function is_headstart() {
+ return get_option( 'headstart' );
+ }
- return (string) gmdate( 'Y-m-d\\TH:i:s', $timestamp ) . sprintf( '%s%02d:%02d', $west ? '-' : '+', $hours, $minutes );
+ function get_wordpress_version() {
+ global $wp_version;
+ return $wp_version;
}
}
diff --git a/plugins/jetpack/sal/class.json-api-site-jetpack-base.php b/plugins/jetpack/sal/class.json-api-site-jetpack-base.php
index fac33f7a..fdeec82c 100644
--- a/plugins/jetpack/sal/class.json-api-site-jetpack-base.php
+++ b/plugins/jetpack/sal/class.json-api-site-jetpack-base.php
@@ -111,9 +111,9 @@ abstract class Abstract_Jetpack_Site extends SAL_Site {
**/
private function is_main_site( $response ) {
- if ( isset( $response['options']['main_network_site'], $response['options']['unmapped_url'] ) ) {
- $main_network_site_url = set_url_scheme( $response['options']['main_network_site'], 'http' );
- $unmapped_url = set_url_scheme( $response['options']['unmapped_url'], 'http' );
+ if ( isset( $response['options']->main_network_site, $response['options']->unmapped_url ) ) {
+ $main_network_site_url = set_url_scheme( $response['options']->main_network_site, 'http' );
+ $unmapped_url = set_url_scheme( $response['options']->unmapped_url, 'http' );
if ( $unmapped_url === $main_network_site_url ) {
return true;
}
diff --git a/plugins/jetpack/sal/class.json-api-site-jetpack.php b/plugins/jetpack/sal/class.json-api-site-jetpack.php
index fcd420db..32dd7a32 100644
--- a/plugins/jetpack/sal/class.json-api-site-jetpack.php
+++ b/plugins/jetpack/sal/class.json-api-site-jetpack.php
@@ -1,6 +1,7 @@
<?php
require_once dirname( __FILE__ ) . '/class.json-api-site-jetpack-base.php';
+require_once dirname( __FILE__ ) . '/class.json-api-post-jetpack.php';
// this code runs on Jetpack (.org) sites
class Jetpack_Site extends Abstract_Jetpack_Site {
@@ -123,4 +124,12 @@ class Jetpack_Site extends Abstract_Jetpack_Site {
function get_ak_vp_bundle_enabled() {}
+ /**
+ * Post functions
+ */
+
+ function wrap_post( $post, $context ) {
+ return new Jetpack_Post( $this, $post, $context );
+ }
+
}
diff --git a/plugins/jetpack/sal/class.json-api-token.php b/plugins/jetpack/sal/class.json-api-token.php
new file mode 100644
index 00000000..10b16f6f
--- /dev/null
+++ b/plugins/jetpack/sal/class.json-api-token.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * So that we have a real class instead of just passing around an array
+ */
+class SAL_Token {
+
+ public $blog_id;
+ public $user_id;
+ public $scope;
+ public $client_id;
+ public $external_user_id;
+ public $external_user_code;
+ public $auth_type;
+
+ function __construct( $blog_id, $user_id, $scope, $client_id, $external_user_id, $external_user_code, $auth_type ) {
+ $this->blog_id = $blog_id; // if blog_id is set and scope is not global, limit to that blog
+ $this->user_id = $user_id;
+ $this->client_id = $client_id;
+ $this->scope = $scope;
+ $this->external_user_id = $external_user_id;
+ $this->external_user_code = $external_user_code;
+ $this->auth_type = $auth_type;
+ }
+
+ public function is_global() {
+ return $scope === 'global';
+ }
+
+ static function for_anonymous_user() {
+ return new SAL_Token(
+ null,
+ get_current_user_id(),
+ null, // there's only ever one scope in our current API implementation, auth or global
+ null,
+ null,
+ null,
+ null
+ );
+ }
+
+ static function from_rest_token( $token ) {
+ $user_id = isset( $token['user_id'] ) ? $token['user_id'] : get_current_user_id();
+ $scope = isset( $token['scope'] ) ? $token['scope'][0] : null;
+ $client_id = isset( $token['client_id'] ) ? $token['client_id'] : null;
+ $external_user_id = isset( $token['external_user_id'] ) ? $token['external_user_id'] : null;
+ $external_user_code = isset( $token['external_user_code'] ) ? $token['external_user_code'] : null;
+ $auth = isset( $token['auth'] ) ? $token['auth'] : null;
+
+ return new SAL_Token(
+ $token['blog_id'],
+ $user_id,
+ $scope, // there's only ever one scope in our current API implementation, auth or global
+ $client_id,
+ $external_user_id,
+ $external_user_code,
+ $auth
+ );
+ }
+}
diff --git a/plugins/jetpack/scss/organisms/_banners.scss b/plugins/jetpack/scss/organisms/_banners.scss
index 38e29036..035c1cba 100644
--- a/plugins/jetpack/scss/organisms/_banners.scss
+++ b/plugins/jetpack/scss/organisms/_banners.scss
@@ -1,350 +1,28 @@
-#message.jp-identity-crisis {
- display: table;
- padding: 0;
- background: #d94f4f;
- border: none;
- color: #fff;
-
- .service-mark {
- display: table-cell;
- vertical-align: middle;
- padding: 0 20px;
- &:before {
- font-family: "jetpack" !important;
- content: "\f102";
- font-size: 40px;
- line-height: 1;
- color: #fff;
- }
- }
- .jp-id-banner__content {
- display: table;
- padding: 10px 10px 10px 0;
-
- .success-notice {
- color: #fff;
- }
-
- .banner-content {
- display: table-row;
-
- p {
- margin: 0;
- font-size: 13px;
- color: #fff;
- opacity: 1.0;
-
- strong {
- text-decoration: none;
- font-weight: 600;
- color: #fff;
- opacity: 1.0;
- }
- }
-
- a {
- display: inline-block;
- color: rgba(255, 255, 255, 0.80);
- border-bottom: 1px solid rgba(255, 255, 255, 0.5);
- text-decoration: none;
- -webkit-transform: all 1s ease;
- }
- }
- .jp-btn-group {
- display: table-row;
-
- a {
- display: inline-block;
- margin: 10px 0 0 0;
- padding: 0 0 1px 0;
- color: rgba(255, 255, 255, 0.80);
- border-bottom: 1px solid rgba(255, 255, 255, 0.5);
- text-decoration: none;
- -webkit-transform: all 1s ease;
-
- &:hover {
- color: rgba(255, 255, 255, 1.0);
- border-bottom: 1px solid rgba(255, 255, 255, 0.80);
- }
- }
-
- .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;
- box-sizing: border-box;
-
- &: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;
-
- @media ( max-width: 830px ) {
- display: none;
- }
- }
- a {
- color: #fff;
- }
- h2 {
- display: block;
- margin: 0;
- padding: 0;
- color: #fff;
- font-size: 20px;
- line-height: 1.3;
- font-weight: normal;
-
- + p {
- margin-top: 10px;
- }
- }
-}
-
-.jp-banner a {
- padding: 0;
-}
-
-#message .jp-banner__content {
- color: #dfffcc;
- padding: 0 0 0 20px;
- box-sizing: border-box;
- width: 50%;
-
- @media ( max-width: 768px ) {
- width: 100%;
-
- &.is-connection {
- width: 100%;
- }
- }
-
- a {
- text-decoration: underline;
- /* Medium.com text underline hack - doesn't work well on small mobile devices... reverting to traditional underline
- background-image: linear-gradient(to bottom, rgba(0,0,0,0) 75%, #fff 50%);
- background-repeat: repeat-x;
- background-size: 2px 2px;
- background-position: 0 95%;
- display: inline-block;
-
- @media not all, only screen and (min-resolution: 2dppx), only screen and (-webkit-min-device-pixel-ratio: 2) {
- background-image: linear-gradient(to bottom, rgba(0,0,0,0) 75%, #fff 75%);
- background-repeat: repeat-x;
- }
- */
- }
- p {
- margin: 0;
+.updated { // utlizes some core styles, overrides some others
+ &.jp-banner {
+ position: relative;
padding: 0;
- line-height: 1.5;
- }
-}
-
-#message .jp-banner__action-container {
- position: absolute;
- top: 0;
- right: 0;
- padding-left: 20px;
- width: 50%;
- height: 100%;
- box-sizing: border-box;
-
- @media ( max-width: 768px ) {
- position: static;
- margin: 14px 0 9px;
- width: 100%;
- }
- &.is-full-width {
- position: static;
- margin: 14px 0 9px;
- width: 100%;
- height: auto;
- }
- &.is-connection {
-
- @media ( max-width: 768px ) {
- width: 100%;
- }
- }
-}
-
-// 'activate now' banner displayed on dashboard
-#message {
- &.is-opt-in {
- .jp-banner__content {
- width: 60%;
- }
- .jp-banner__action-container {
- width: 40%;
- }
-
- @media ( max-width: 768px ) {
- .jp-banner__content, .jp-banner__action-container {
- width: 100%;
- }
- }
- }
-}
-
-#message .jp-banner__button {
- display: inline-block;
- position: absolute;
- top: 50%;
- right: 125px;
- margin-top: -23px;
- padding: em(12px, 21px) em(18px, 21px) em(8px, 21px) em(12px, 21px);
- border-radius: 6px;
- box-sizing: border-box;
- background: #518d2a;
- box-shadow:
- 0 4px 0 #3e6c20,
- 0 2px 3px rgba(0,0,0,.2);
- font: 400 1.5em/1 'Open Sans', Helvetica, sans-serif;
- transition: all .1s ease-in-out;
-
- @media ( max-width: 1175px ){
- font-size: 1.25em;
- right: 110px;
- }
-
- @media ( max-width: 830px ){
- right: 45px;
- }
-
- @media ( max-width: 768px ) {
- position: static;
- margin: 0;
- }
- @media ( max-width: 420px ) {
- display: block;
- width: 100%;
- text-align: center;
- font-size: 1.1em;
- right: 0;
}
- &:hover,
- &:focus {
- box-shadow:
- 0 4px 0 #3e6c20,
- 0 2px 3px rgba(0,0,0,.2);
- }
- &:active {
- outline: none;
- transform: translateY(2px);
- box-shadow:
- 0 0px 0 #3e6c20,
- 0 0 0 rgba(0,0,0,.2);
- &:after {
- // fixes buggy clicks
- top: -2px;
- }
+ .jp-banner__header {
+ font-size: 18px;
+ font-weight: 400;
+ margin-top: 0;
}
- &: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 ) {
- display: none;
- }
+ .jp-banner__button-container {
+ padding: 12px 0 0;
}
}
-#message .is-full-width .jp-banner__button {
- position: static;
- margin: 0;
+.jp-banner .notice-dismiss {
+ text-decoration: none;
}
-// Changes icon for opt-in message
-#message .is-opt-in .jp-banner__button:before {
- content: "\f147";
- width: 20px;
- height: 20px;
- background: none;
- font: normal 20px/1 Dashicons;
+.jp-banner__description {
+ font-size: 14px;
}
-#message .jp-banner__dismiss {
- position: absolute;
- top: 0;
- right: 0;
- width: 44px;
- height: 44px;
- text-align: center;
- z-index: 99;
-
- &:before {
- color: #a7c979;
- content: '\f158';
- font: normal 20px/44px 'dashicons';
- }
- &:hover {
- opacity: 0.8;
- }
- &:active {
- opacity: 1;
- outline: none;
- }
-}
-
-// temporary styles for protect module error. banners to be rebuilt soon. - Jeff Golenski
-
-#message.jp-banner.protect-error {
- background: #fff;
- border-left: 4px #d94f4f solid;
-
- .jp-banner__content {
- color: #444;
- h2, a {
- color: #d94f4f;
- }
- a:hover {
- color: darken(#d94f4f, 5%);
- }
- }
-
- .jp-banner__button {
- background: #d94f4f;
- box-shadow: none;
- color: #fff;
-
- &:hover,
- &:focus,
- &:active {
- box-shadow: none;
- }
- &:hover {
- background: darken(#d94f4f, 5%);
- }
- }
-
- .jp-banner__dismiss:before {
- color: #a0a5aa;
- }
-}
+.jp-banner__description-container {
+ padding: 16px;
+} \ No newline at end of file
diff --git a/plugins/jetpack/scss/templates/_connection-landing.scss b/plugins/jetpack/scss/templates/_connection-landing.scss
index 98cef932..5b2e9451 100644
--- a/plugins/jetpack/scss/templates/_connection-landing.scss
+++ b/plugins/jetpack/scss/templates/_connection-landing.scss
@@ -575,6 +575,13 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
.feat {
@include vertalign;
}
+
+ &.activated .feat {
+ right: 50%;
+ -ms-transform: translate(50%,-50%);
+ -webkit-transform: translate(50%,-50%);
+ transform: translate(50%,-50%);
+ }
} // go-to
}
@@ -791,11 +798,6 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
top: -1px;
}
}
- .goto {
- .feat a {
- float: left;
- }
- }
}
} // nux-intro
diff --git a/plugins/jetpack/views/admin/admin-page.php b/plugins/jetpack/views/admin/admin-page.php
index 85880133..c53824f2 100644
--- a/plugins/jetpack/views/admin/admin-page.php
+++ b/plugins/jetpack/views/admin/admin-page.php
@@ -147,14 +147,14 @@
?>
<?php if ( current_user_can( 'jetpack_manage_modules' ) && $data['is_user_connected'] && ! Jetpack::is_development_mode() ) : ?>
<div id="manage-row" class="j-row goto <?php echo ( $manage_active ) ? 'activated' : ''; ?>">
- <div class="feat j-col j-lrg-7 j-md-8 j-sm-7">
+ <div class="feat j-col <?php echo ( $manage_active ) ? '' : 'j-lrg-7 j-md-8 j-sm-7'; ?>">
<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>
<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>
</div>
+ <?php if ( ! $manage_active ) : ?>
<div class="act j-col j-lrg-5 j-md-4 j-sm-5">
<div class="module-action">
<span>
- <?php $manage_active = Jetpack::is_module_active( 'manage' ); ?>
<input class="is-compact form-toggle" type="checkbox" id="active-manage" <?php echo ( $manage_active ) ? 'checked' : ''; ?> />
<label class="form-toggle__label" for="active-manage">
<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 ..." />
@@ -166,6 +166,7 @@
</span>
</div>
</div>
+ <?php endif; ?>
</div><?php // j-row ?>
<?php endif; ?>
diff --git a/plugins/jetpack/views/admin/network-settings.php b/plugins/jetpack/views/admin/network-settings.php
index b0008a50..6ff9b1a7 100644
--- a/plugins/jetpack/views/admin/network-settings.php
+++ b/plugins/jetpack/views/admin/network-settings.php
@@ -11,7 +11,7 @@
<div class="wrap">
<h2><?php _e( 'Network Settings', 'jetpack' ); ?></h2>
<form action="edit.php?action=jetpack-network-settings" method="POST">
- <h3><?php _e( 'Global', 'jetpack' ); ?></h3>
+ <h3><?php _ex( 'Global', 'Affects all sites in a Multisite network.', 'jetpack' ); ?></h3>
<p><?php _e( 'These settings affect all sites on the network.', 'jetpack' ); ?></p>
<?php wp_nonce_field( 'jetpack-network-settings' ); ?>
<table class="form-table">
@@ -50,7 +50,7 @@
</tr>
/**/ ?>
</table>
-
+
<?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.
<?php
$display_modules = ( 1 == $this->get_option( 'manage_auto_activated_modules' ) )? 'block': 'none';