From 5c4552fad98db23b2698e8a598bf20f42cb430ef Mon Sep 17 00:00:00 2001 From: "Anthony G. Basile" Date: Thu, 28 Jul 2016 23:29:30 -0400 Subject: Update plugin jetpack to 4.1.1 --- plugins/jetpack/3rd-party/3rd-party.php | 1 + plugins/jetpack/3rd-party/bitly.php | 9 +- plugins/jetpack/3rd-party/vaultpress.php | 13 + plugins/jetpack/_inc/jetpack.js | 2 +- plugins/jetpack/_inc/jp.js | 6 +- plugins/jetpack/_inc/jquery.jetpack-resize.js | 2 +- plugins/jetpack/_inc/lib/class.media-extractor.php | 1 - plugins/jetpack/_inc/social-logos.php | 14 + plugins/jetpack/_inc/social-logos/social-logos.css | 257 +++++ plugins/jetpack/_inc/social-logos/social-logos.eot | Bin 0 -> 9982 bytes .../jetpack/_inc/social-logos/social-logos.html | 428 ++++++++ .../jetpack/_inc/social-logos/social-logos.min.css | 1 + plugins/jetpack/_inc/social-logos/social-logos.ttf | Bin 0 -> 9792 bytes .../jetpack/_inc/social-logos/social-logos.woff2 | Bin 0 -> 5628 bytes plugins/jetpack/changelog.txt | 67 +- plugins/jetpack/class.jetpack-client-server.php | 137 +-- plugins/jetpack/class.jetpack-data.php | 13 + plugins/jetpack/class.jetpack-debugger.php | 73 +- plugins/jetpack/class.jetpack-jitm.php | 23 +- plugins/jetpack/class.jetpack-signature.php | 23 +- plugins/jetpack/class.jetpack-tracks.php | 2 +- plugins/jetpack/class.jetpack.php | 409 ++++---- plugins/jetpack/class.json-api-endpoints.php | 325 +----- plugins/jetpack/class.photon.php | 4 + plugins/jetpack/css/dashboard-widget.css.map | 2 +- plugins/jetpack/css/jetpack-admin-rtl.css | 11 +- plugins/jetpack/css/jetpack-admin-rtl.min.css | 2 +- plugins/jetpack/css/jetpack-admin.css | 9 +- plugins/jetpack/css/jetpack-admin.css.map | 2 +- plugins/jetpack/css/jetpack-admin.min.css | 2 +- plugins/jetpack/css/jetpack-admin.min.css.map | 2 +- plugins/jetpack/css/jetpack-banners.css | 328 +----- plugins/jetpack/css/jetpack-banners.css.map | 2 +- plugins/jetpack/css/jetpack-banners.min.css | 5 +- plugins/jetpack/css/jetpack-banners.min.css.map | 2 +- plugins/jetpack/css/jetpack-rtl.css | 2 +- plugins/jetpack/css/jetpack.css | 2 +- plugins/jetpack/functions.global.php | 10 + plugins/jetpack/functions.photon.php | 15 + plugins/jetpack/jetpack.php | 5 +- plugins/jetpack/json-endpoints.php | 162 ++- .../class.wpcom-json-api-comment-endpoint.php | 18 +- ...class.wpcom-json-api-get-post-v1-1-endpoint.php | 16 +- .../class.wpcom-json-api-get-site-endpoint.php | 220 ++-- ...class.wpcom-json-api-get-site-v1-2-endpoint.php | 25 +- .../class.wpcom-json-api-get-term-endpoint.php | 38 + ...class.wpcom-json-api-list-comments-endpoint.php | 14 +- .../class.wpcom-json-api-list-embeds-endpoint.php | 2 +- ...ass.wpcom-json-api-list-media-v1-1-endpoint.php | 1 - ...json-api-list-post-type-taxonomies-endpoint.php | 71 ++ ...ass.wpcom-json-api-list-post-types-endpoint.php | 11 +- .../class.wpcom-json-api-list-posts-endpoint.php | 2 +- ...ass.wpcom-json-api-list-posts-v1-1-endpoint.php | 4 +- ...ass.wpcom-json-api-list-shortcodes-endpoint.php | 4 +- .../class.wpcom-json-api-list-terms-endpoint.php | 87 ++ .../class.wpcom-json-api-list-users-endpoint.php | 14 +- .../class.wpcom-json-api-menus-v1-1-endpoint.php | 3 + .../class.wpcom-json-api-post-endpoint.php | 22 +- .../class.wpcom-json-api-post-v1-1-endpoint.php | 526 ++-------- .../class.wpcom-json-api-render-embed-endpoint.php | 11 - .../class.wpcom-json-api-render-endpoint.php | 25 +- ...ss.wpcom-json-api-render-shortcode-endpoint.php | 6 - ...ass.wpcom-json-api-sharing-buttons-endpoint.php | 6 +- ...class.wpcom-json-api-site-settings-endpoint.php | 40 +- .../class.wpcom-json-api-site-user-endpoint.php | 23 +- ...lass.wpcom-json-api-update-invites-endpoint.php | 2 +- .../class.wpcom-json-api-update-post-endpoint.php | 14 +- ...ss.wpcom-json-api-update-post-v1-1-endpoint.php | 102 +- ...ss.wpcom-json-api-update-post-v1-2-endpoint.php | 125 ++- .../class.wpcom-json-api-update-term-endpoint.php | 164 +++ ...ss.jetpack-json-api-plugins-modify-endpoint.php | 2 + .../after-the-deadline/atd-nonvis-editor-plugin.js | 3 +- .../jetpack/modules/after-the-deadline/atd.core.js | 2 +- .../modules/after-the-deadline/jquery.atd.js | 2 +- .../after-the-deadline/tinymce/editor_plugin.js | 2 +- .../jetpack/modules/carousel/jetpack-carousel.js | 9 + plugins/jetpack/modules/comments/comments.php | 12 +- plugins/jetpack/modules/contact-form/admin.php | 18 - .../modules/contact-form/css/menu-alter.css | 73 -- .../modules/contact-form/grunion-contact-form.php | 49 +- .../contact-form/images/grunion-menu-2x.png | Bin 546 -> 0 bytes .../contact-form/images/grunion-menu-big-2x.png | Bin 340 -> 0 bytes .../contact-form/images/grunion-menu-big.png | Bin 352 -> 0 bytes .../contact-form/images/grunion-menu-hover-2x.png | Bin 611 -> 0 bytes .../contact-form/images/grunion-menu-hover.png | Bin 278 -> 0 bytes .../modules/contact-form/images/grunion-menu.png | Bin 157 -> 0 bytes .../modules/custom-css/csstidy/data-wp.inc.php | 4 + plugins/jetpack/modules/custom-css/custom-css.php | 2 +- .../custom-post-types/js/menu-checkboxes.js | 4 +- plugins/jetpack/modules/custom-post-types/nova.php | 46 +- .../modules/custom-post-types/portfolios.php | 63 ++ .../modules/custom-post-types/testimonial.php | 6 +- plugins/jetpack/modules/gravatar-hovercards.php | 2 +- plugins/jetpack/modules/infinite-scroll.php | 3 +- .../jetpack/modules/infinite-scroll/infinity.js | 14 + .../jetpack/modules/infinite-scroll/infinity.php | 5 +- plugins/jetpack/modules/likes.php | 4 +- plugins/jetpack/modules/likes/queuehandler.js | 2 +- plugins/jetpack/modules/manage.php | 4 +- plugins/jetpack/modules/publicize/ui.php | 16 +- .../related-posts/jetpack-related-posts.php | 4 +- .../modules/related-posts/related-posts.css | 1 + .../modules/sharedaddy/admin-sharing-rtl.css | 62 +- .../modules/sharedaddy/admin-sharing-rtl.min.css | 2 +- .../jetpack/modules/sharedaddy/admin-sharing.css | 62 +- .../jetpack/modules/sharedaddy/admin-sharing.js | 29 +- .../modules/sharedaddy/admin-sharing.min.css | 2 +- .../jetpack/modules/sharedaddy/sharing-service.php | 28 +- .../jetpack/modules/sharedaddy/sharing-sources.php | 45 +- plugins/jetpack/modules/sharedaddy/sharing.css | 126 ++- plugins/jetpack/modules/sharedaddy/sharing.js | 2 +- plugins/jetpack/modules/sharedaddy/sharing.php | 14 +- plugins/jetpack/modules/shortcodes.php | 38 +- plugins/jetpack/modules/shortcodes/audio.php | 437 +------- .../modules/shortcodes/css/recipes-print.css | 33 + plugins/jetpack/modules/shortcodes/css/recipes.css | 3 + .../modules/shortcodes/css/rtl/recipes-rtl.css | 5 +- .../modules/shortcodes/js/audio-shortcode.js | 159 --- plugins/jetpack/modules/shortcodes/recipe.php | 302 +++++- .../modules/shortcodes/twitter-timeline.php | 35 +- .../jetpack/modules/shortcodes/untappd-menu.php | 65 ++ plugins/jetpack/modules/shortcodes/videopress.php | 5 - plugins/jetpack/modules/sitemaps/sitemaps.php | 33 +- plugins/jetpack/modules/sso.php | 1090 +++++++++++--------- .../modules/sso/class.jetpack-sso-helpers.php | 159 +++ .../jetpack/modules/sso/jetpack-sso-login-rtl.css | 179 ++++ .../modules/sso/jetpack-sso-login-rtl.min.css | 1 + plugins/jetpack/modules/sso/jetpack-sso-login.css | 179 ++++ plugins/jetpack/modules/sso/jetpack-sso-login.js | 47 + .../jetpack/modules/sso/jetpack-sso-login.min.css | 1 + .../jetpack/modules/sso/jetpack-sso-profile.css | 72 ++ plugins/jetpack/modules/stats.php | 14 +- .../theme-tools/compat/twentysixteen-rtl.css | 1 + .../modules/theme-tools/compat/twentysixteen.css | 1 + .../modules/tiled-gallery/tiled-gallery.php | 6 +- .../tiled-gallery/tiled-gallery-item.php | 3 +- .../tiled-gallery/tiled-gallery/tiled-gallery.js | 2 +- plugins/jetpack/modules/videopress.php | 13 +- .../modules/videopress/class.videopress-player.php | 30 +- plugins/jetpack/modules/videopress/css/editor.css | 59 ++ .../videopress/css/videopress-editor-style.css | 21 + .../modules/videopress/editor-media-view.php | 213 ++++ .../modules/videopress/js/videopress-admin.js | 2 +- plugins/jetpack/modules/videopress/shortcode.php | 149 +-- .../modules/videopress/utility-functions.php | 105 ++ .../modules/videopress/videopress-editor-style.css | 21 - plugins/jetpack/modules/videopress/videopress.php | 109 ++ plugins/jetpack/modules/widgets/contact-info.php | 214 ++-- .../widgets/contact-info/contact-info-map.js | 2 +- plugins/jetpack/modules/widgets/gallery.php | 2 +- plugins/jetpack/modules/widgets/image-widget.php | 51 +- .../jetpack/modules/widgets/rsslinks-widget.php | 2 +- plugins/jetpack/modules/widgets/top-posts.php | 12 +- .../modules/widgets/twitter-timeline-admin.js | 35 + .../jetpack/modules/widgets/twitter-timeline.php | 348 +++++-- plugins/jetpack/readme.txt | 80 +- plugins/jetpack/sal/class.json-api-date.php | 55 + plugins/jetpack/sal/class.json-api-links.php | 269 +++++ plugins/jetpack/sal/class.json-api-metadata.php | 39 + .../sal/class.json-api-platform-jetpack.php | 12 +- plugins/jetpack/sal/class.json-api-platform.php | 18 + plugins/jetpack/sal/class.json-api-post-base.php | 667 ++++++++++++ .../jetpack/sal/class.json-api-post-jetpack.php | 34 + plugins/jetpack/sal/class.json-api-site-base.php | 419 +++++++- .../sal/class.json-api-site-jetpack-base.php | 6 +- .../jetpack/sal/class.json-api-site-jetpack.php | 9 + plugins/jetpack/sal/class.json-api-token.php | 60 ++ plugins/jetpack/scss/organisms/_banners.scss | 354 +------ .../scss/templates/_connection-landing.scss | 12 +- plugins/jetpack/views/admin/admin-page.php | 5 +- plugins/jetpack/views/admin/network-settings.php | 4 +- 171 files changed, 7183 insertions(+), 3811 deletions(-) create mode 100644 plugins/jetpack/3rd-party/vaultpress.php create mode 100644 plugins/jetpack/_inc/social-logos.php create mode 100644 plugins/jetpack/_inc/social-logos/social-logos.css create mode 100644 plugins/jetpack/_inc/social-logos/social-logos.eot create mode 100644 plugins/jetpack/_inc/social-logos/social-logos.html create mode 100644 plugins/jetpack/_inc/social-logos/social-logos.min.css create mode 100644 plugins/jetpack/_inc/social-logos/social-logos.ttf create mode 100644 plugins/jetpack/_inc/social-logos/social-logos.woff2 create mode 100644 plugins/jetpack/functions.global.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-term-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-type-taxonomies-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-terms-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-update-term-endpoint.php delete mode 100644 plugins/jetpack/modules/contact-form/css/menu-alter.css delete mode 100644 plugins/jetpack/modules/contact-form/images/grunion-menu-2x.png delete mode 100644 plugins/jetpack/modules/contact-form/images/grunion-menu-big-2x.png delete mode 100644 plugins/jetpack/modules/contact-form/images/grunion-menu-big.png delete mode 100644 plugins/jetpack/modules/contact-form/images/grunion-menu-hover-2x.png delete mode 100644 plugins/jetpack/modules/contact-form/images/grunion-menu-hover.png delete mode 100644 plugins/jetpack/modules/contact-form/images/grunion-menu.png delete mode 100644 plugins/jetpack/modules/shortcodes/js/audio-shortcode.js create mode 100644 plugins/jetpack/modules/shortcodes/untappd-menu.php create mode 100644 plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php create mode 100644 plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css create mode 100644 plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css create mode 100644 plugins/jetpack/modules/sso/jetpack-sso-login.css create mode 100644 plugins/jetpack/modules/sso/jetpack-sso-login.js create mode 100644 plugins/jetpack/modules/sso/jetpack-sso-login.min.css create mode 100644 plugins/jetpack/modules/sso/jetpack-sso-profile.css create mode 100644 plugins/jetpack/modules/videopress/css/editor.css create mode 100644 plugins/jetpack/modules/videopress/css/videopress-editor-style.css create mode 100644 plugins/jetpack/modules/videopress/editor-media-view.php delete mode 100644 plugins/jetpack/modules/videopress/videopress-editor-style.css create mode 100644 plugins/jetpack/modules/widgets/twitter-timeline-admin.js create mode 100644 plugins/jetpack/sal/class.json-api-date.php create mode 100644 plugins/jetpack/sal/class.json-api-links.php create mode 100644 plugins/jetpack/sal/class.json-api-metadata.php create mode 100644 plugins/jetpack/sal/class.json-api-post-base.php create mode 100644 plugins/jetpack/sal/class.json-api-post-jetpack.php create mode 100644 plugins/jetpack/sal/class.json-api-token.php (limited to 'plugins/jetpack') 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( " \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 @@ +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 @@ + + + + + social-logos + + + +

social-logos

+ +
+ +
social-logo__amazon
+ +
social-logo__behance
+ +
social-logo__blogger-alt
+ +
social-logo__blogger
+ +
social-logo__codepen
+ +
social-logo__dribbble
+ +
social-logo__dropbox
+ +
social-logo__eventbrite
+ +
social-logo__facebook
+ +
social-logo__feed
+ +
social-logo__flickr
+ +
social-logo__foursquare
+ +
social-logo__ghost
+ +
social-logo__github
+ +
social-logo__google-plus-alt
+ +
social-logo__google-plus
+ +
social-logo__instagram
+ +
social-logo__linkedin
+ +
social-logo__mail
+ +
social-logo__medium
+ +
social-logo__path-alt
+ +
social-logo__path
+ +
social-logo__pinterest-alt
+ +
social-logo__pinterest
+ +
social-logo__pocket
+ +
social-logo__polldaddy
+ +
social-logo__print
+ +
social-logo__reddit
+ +
social-logo__share
+ +
social-logo__skype
+ +
social-logo__spotify
+ +
social-logo__squarespace
+ +
social-logo__stumbleupon
+ +
social-logo__telegram
+ +
social-logo__tumblr-alt
+ +
social-logo__tumblr
+ +
social-logo__twitch
+ +
social-logo__twitter-alt
+ +
social-logo__twitter
+ +
social-logo__vimeo
+ +
social-logo__whatsapp
+ +
social-logo__wordpress
+ +
social-logo__xanga
+ +
social-logo__youtube
+ +
+ + + +

Usage

+
<i class="social-logo social-logo__name"></i>
+ + + + + + + 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 Binary files /dev/null and b/plugins/jetpack/_inc/social-logos/social-logos.ttf 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 Binary files /dev/null and b/plugins/jetpack/_inc/social-logos/social-logos.woff2 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 { -
+

review/modify this information.', 'jetpack' ); ?>

- +
+
+ 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 { @@ -6237,135 +6303,6 @@ p { 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; - } - } - - ?> - - - -
-
- -
- - 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 { - - -
- - '; + } + + /* + * 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( + '', + 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 ) { ?> + + 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 ); } /** @@ -1535,235 +1515,6 @@ abstract class WPCOM_JSON_API_Endpoint { return false; } - /** - * 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 @@ -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":"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","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 @@ + '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 rest_api_allowed_post_types 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 rest_api_allowed_post_types 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 offset 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 @@ '(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 @@ '(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 @@ + $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 @@ + '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 @@ + $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( '//', '', $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 @@ + $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 @@ 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("images/grunion-menu-big-2x.png") no-repeat !important; background-size: 30px 31px !important; } -} - -#icon-edit.icon32-posts-feedback { background-position: 2px 2px !important; } - __( '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, @@ -190,6 +191,29 @@ class Grunion_Contact_Form_Plugin { return $post_types; } + /** + * 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' ) ? " " : ''; + $menu[ $index ][0] .= $unread_count; + } + break; + } + } + } + } + /** * Handles all contact-form POST submissions * @@ -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\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 Binary files a/plugins/jetpack/modules/contact-form/images/grunion-menu-2x.png and /dev/null 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 Binary files a/plugins/jetpack/modules/contact-form/images/grunion-menu-big-2x.png and /dev/null 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 Binary files a/plugins/jetpack/modules/contact-form/images/grunion-menu-big.png and /dev/null 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 Binary files a/plugins/jetpack/modules/contact-form/images/grunion-menu-hover-2x.png and /dev/null 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 Binary files a/plugins/jetpack/modules/contact-form/images/grunion-menu-hover.png and /dev/null 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 Binary files a/plugins/jetpack/modules/contact-form/images/grunion-menu.png and /dev/null 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' ); ?>
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; + } ?> - +     — up @@ -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 ) ); ?> - +

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' ), '', '', $term ); } else { @@ -810,7 +822,7 @@ class Nova_Restaurant { ?>

- +
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' ) ); @@ -386,6 +387,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 */ 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 ''; + echo ''; + echo '

' . 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' ) . '

'; } /** 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 @@ -628,6 +628,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! */ 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, '' . __( 'To infinity and beyond', 'jetpack' ) . '', array( $this, 'infinite_setting_html' ), 'reading' ); + add_settings_field( self::$option_name_enabled, '' . esc_html__( 'Infinite Scroll Behavior', 'jetpack' ) . '', 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 ''; } else { - echo ''; + echo ''; + echo '

' . sprintf( esc_html__( 'Shows %s posts on each load.', 'jetpack' ), number_format_i18n( self::get_settings()->posts_per_page ) ) . '

'; } } 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; - - // add the special javascript, if needed - if ( 0 < $num_good && ! is_feed() ) { - $audio_tags .= $script; - } - - return "

$audio_tags

"; - } - - /** - * 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; - } - } - - /** - * 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 @@ $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 = '
'; // Print the recipe title if exists - if ( '' != $atts['title'] ) { + if ( '' !== $atts['title'] ) { $html .= '

' . esc_html( $atts['title'] ) . '

'; } // 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 .= '
    '; - if ( '' != $atts['servings'] ) { - $html .= sprintf( '
  • %1$s: %2$s
  • ', - __( 'Servings', 'jetpack' ), + if ( '' !== $atts['servings'] ) { + $html .= sprintf( + '
  • %1$s: %2$s
  • ', + esc_html_x( 'Servings', 'recipe', 'jetpack' ), esc_html( $atts['servings'] ) ); } - if ( '' != $atts['time'] ) { - $html .= sprintf( '
  • %1$s: %2$s
  • ', - __( 'Time', 'jetpack' ), + if ( '' !== $atts['time'] ) { + $html .= sprintf( + '
  • %1$s: %2$s
  • ', + esc_html_x( 'Time', 'recipe', 'jetpack' ), esc_html( $atts['time'] ) ); } - if ( '' != $atts['difficulty'] ) { - $html .= sprintf( '
  • %1$s: %2$s
  • ', - __( 'Difficulty', 'jetpack' ), + if ( '' !== $atts['difficulty'] ) { + $html .= sprintf( + '
  • %1$s: %2$s
  • ', + esc_html_x( 'Difficulty', 'recipe', 'jetpack' ), esc_html( $atts['difficulty'] ) ); } - if ( 'false' != $atts['print'] ) { - $html .= sprintf( '
  • %s
  • ', - __( 'Print', 'jetpack' ) + if ( 'false' !== $atts['print'] ) { + $html .= sprintf( + '
  • %1$s
  • ', + esc_html_x( 'Print', 'recipe', 'jetpack' ) ); } $html .= '
'; } + // Output the image, if we have one. + if ( '' !== $atts['image'] ) { + $html .= sprintf( + '', + esc_url( $atts['image'] ) + ); + } + + // Output the description, if we have one. + if ( '' !== $atts['description'] ) { + $html .= sprintf( + '

%1$s

', + esc_html( $atts['description'] ) + ); + } + // Print content between codes $html .= '
' . do_shortcode( $content ) . '
'; @@ -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 .= '

' . esc_html( $atts['title'] ) . '

'; + } + + $html .= '
'; + + // Format content using list functionality, if desired. + $html .= self::output_list_content( $content, 'notes' ); + + $html .= '
'; + + // 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 = '
'; + + // Print a title unless the user has opted to exclude it. + if ( 'false' !== $atts['title'] ) { + $html .= '

' . esc_html( $atts['title'] ) . '

'; + } + + // Format content using list functionality. + $html .= self::output_list_content( $content, 'ingredients' ); + + $html .= '
'; + + // 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 = '
  • ${1}
  • '; + $itemprop = ' itemprop="recipeInstructions"'; + $listtype = 'ol'; + break; + case 'ingredients' : + $list_item_replacement = '
  • ${1}
  • '; + $itemprop = ' itemprop="recipeIngredient"'; + $listtype = 'ul'; + break; + default: + $list_item_replacement = '
  • ${1}
  • '; + $itemprop = ''; + $listtype = 'ul'; + } + + // Check to see if the user is trying to use shortened formatting. + if ( + strpos( $content, '–' ) !== false || + strpos( $content, '—' ) !== 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( "
    \n", "\n", $content ); + $content = trim( $content ); + + $ul_pattern = '/(?:^|\n|\)+(?:[\-–—]+|\–|\—|\*)+\h+(.*)/mi'; + $ol_pattern = '/(?:^|\n|\)+(?:\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 .= ''; + + // Strip out any empty

    tags and stray

    tags, because those are just silly. + $empty_p_pattern = '/(

    )*\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 = '

    '; + + // Print a title unless the user has specified to exclude it. + if ( 'false' !== $atts['title'] ) { + $html .= '

    ' . esc_html( $atts['title'] ) . '

    '; + } + + // Format content using list functionality. + $html .= self::output_list_content( $content, 'directions' ); + + $html .= '
    '; + + // 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 @@ '', '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 ''; + if ( empty( $atts['username'] ) && ! is_numeric( $atts['id'] ) ) { + return ''; } - if ( ! is_numeric( $attr['id'] ) ) { - return ''; + $output = ''; + $output .= ''; 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 @@ + '', + '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 = ''; + $html .= ''; + + $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 = '' . "\n"; $initstr .= '' . "\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() { 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(); ?> 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 @@ 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 { 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 ); @@ -140,6 +149,70 @@ class Jetpack_SSO { return false; } + /** + * 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 @@ -155,26 +228,6 @@ class Jetpack_SSO { '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 @@ -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 ''; + ?> + + match_by_email(); - $disabled = $match_by_email ? ' disabled="disabled"' : ''; - echo ''; + ?> + + General - * - * @since 2.7 - **/ - public function render_remove_login_form_checkbox() { - if( $this->is_user_connected( get_current_user_id() ) ) { - echo ''; - echo ''; - echo '

    Removes default login form and disallows login via POST

    '; - } else { - echo 'Your account must be connected to WordPress.com before disabling the login form.'; - echo '
    ' . $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 * @@ -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,48 +393,58 @@ 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. */ @@ -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 '
    ' . $this->button() . '
    '; - } - 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; + ?> - - - $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( + '%3$s %4$s', + esc_url( $url ), + $classes, + '', + 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 = ""; + // 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( '%2$s', 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 Security Settings 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 Security Settings to configure Two-step Authentication 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( '

    %s

    ', $err ); + $message .= sprintf( '

    %s

    ', $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 profile page 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 sign in 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( '

    %s

    ', $err ); + $message .= sprintf( '

    %s

    ', $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 visit WordPress.com 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( '

    %s

    ', $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( '

    %s

    ', $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( '

    %s

    ', $error ); return $message; } - function cant_find_user( $message ) { - if ( self::match_by_email() ) { - $err_format = __( 'We couldn\'t find an account with the email %1$s to log you in with. If you already have an account on %2$s, please make sure that %1$s 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 %2$s that is linked to your WordPress.com account to log you in with. If you already have an account on %2$s, 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( '

    %s

    ', $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' ); - ?> - -

    -

    - - is_user_connected( $user->ID ) ) : /* If the user is currently connected... */ ?> - get_user_data( $user->ID ); ?> - - - - - - -
    -
    - email ); ?> -

    -

    login ); ?>

    - - two_step_enabled ) { - ?>

    -
    - -
    -

    -
    - - - - ID && Jetpack::is_user_connected( $user->ID ) ) : ?> - - button( 'state=sso-link-user&_wpnonce=' . wp_create_nonce('sso-link-user') ); // update ?> - - - -

    - - - 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 = $( '
    ' ); + + // 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 ) {

    <?php esc_attr_e( 'Loading…', 'jetpack' ); ?>" />

    +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" ) +); ?>" />


    .

    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/css/videopress-editor-style.css b/plugins/jetpack/modules/videopress/css/videopress-editor-style.css new file mode 100644 index 00000000..b2c29c5f --- /dev/null +++ b/plugins/jetpack/modules/videopress/css/videopress-editor-style.css @@ -0,0 +1,21 @@ +/** + * VideoPress styles for Editor + */ +.videopress-editor-wrapper { + position: relative; + max-width: 100%; + padding: 56.25% 0 0; + height: 0; + overflow: hidden; +} +.tmpl-videopress_iframe_next iframe { + position: absolute; + top: 0; + left: 0; + max-width: 100%; + max-height: 100%; +} +body.rtl .tmpl-videopress_iframe_next iframe { + left: auto; + right: 0; +} \ No newline at end of file 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 @@ +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 + */ + ?> + + '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(){ + ?> + + + 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 - */ - ?> - - - - - $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 + * + * : 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-editor-style.css b/plugins/jetpack/modules/videopress/videopress-editor-style.css deleted file mode 100644 index b2c29c5f..00000000 --- a/plugins/jetpack/modules/videopress/videopress-editor-style.css +++ /dev/null @@ -1,21 +0,0 @@ -/** - * VideoPress styles for Editor - */ -.videopress-editor-wrapper { - position: relative; - max-width: 100%; - padding: 56.25% 0 0; - height: 0; - overflow: hidden; -} -.tmpl-videopress_iframe_next iframe { - position: absolute; - top: 0; - left: 0; - max-width: 100%; - max-height: 100%; -} -body.rtl .tmpl-videopress_iframe_next iframe { - left: auto; - right: 0; -} \ No newline at end of file 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 '"; - - } - - if ( $instance['phone'] != '' ) { - - if( wp_is_mobile() ) { - echo '"; - } else { + if ( '' != $instance['phone'] ) { + if ( wp_is_mobile() ) { + echo '"; + } + else { echo '
    ' . esc_html( $instance['phone'] ) . '
    '; } - } - - if ( $instance['hours'] != '' ) { + if ( '' != $instance['hours'] ) { echo '
    ' . str_replace( "\n", "
    ", esc_html( $instance['hours'] ) ) . "
    "; } - /** * 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 ); - ?> -

    - -

    - -

    - - has_good_map( $instance ) ) { - ?> - /> -

    - -

    - - - -

    -

    - -

    - -

    - - +

    + + +

    + +

    + + + has_good_map( $instance ) ) { + ?> + /> + + + + + +

    +

    + + +

    + +

    + + +

    + + 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 = << @@ -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 '

    - - + +

    -

    - - +

    + +

    - - + +

    -

    - create a widget at Twitter.com, and then enter your widget id (the long number found in the URL of your widget\'s config page) in the field below. Read more.', 'jetpack' ), - 'https://twitter.com/settings/widgets/new/user', - 'http://support.wordpress.com/widgets/twitter-timeline-widget/' - ) - ); - ?> -

    -

    - - +

    + + +

    + +

    + + +

    -
    - id="get_field_id( 'chrome-noheader' ); ?>" name="get_field_name( 'chrome' ); ?>[]" value="noheader" />
    - id="get_field_id( 'chrome-nofooter' ); ?>" name="get_field_name( 'chrome' ); ?>[]" value="nofooter" />
    - id="get_field_id( 'chrome-noborders' ); ?>" name="get_field_name( 'chrome' ); ?>[]" value="noborders" />
    - id="get_field_id( 'chrome-noscrollbar' ); ?>" name="get_field_name( 'chrome' ); ?>[]" value="noscrollbar" />
    - id="get_field_id( 'chrome-transparent' ); ?>" name="get_field_name( 'chrome' ); ?>[]" value="transparent" /> + +
    + + id="get_field_id( 'chrome-noheader' ); ?>" + name="get_field_name( 'chrome' ); ?>[]" + value="noheader" + /> + +
    + + id="get_field_id( 'chrome-nofooter' ); ?>" + name="get_field_name( 'chrome' ); ?>[]" + value="nofooter" + /> + +
    + + id="get_field_id( 'chrome-noborders' ); ?>" + name="get_field_name( 'chrome' ); ?>[]" + value="noborders" + /> + +
    + + id="get_field_id( 'chrome-transparent' ); ?>" + name="get_field_name( 'chrome' ); ?>[]" + value="transparent" + /> +

    - - + +

    - - + +

    - - + +

    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 @@ +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 @@ +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 @@ +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( '//', '', $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 @@ + $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 @@ 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 @@ 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 @@ ?>
    -
    +
    +
    - />
    +
    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 @@

    -

    +

    @@ -50,7 +50,7 @@ /**/ ?>
    - + get_option( 'manage_auto_activated_modules' ) )? 'block': 'none'; -- cgit v1.2.3-65-gdbad