summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2016-04-18 11:52:28 -0400
committerAnthony G. Basile <blueness@gentoo.org>2016-04-18 11:52:28 -0400
commit097e7d91b32dd6d27ea47e5d7cd8d6bdcf1e50a2 (patch)
treeedf0e0c9fcd6ce7c922593a4df301d624e9faeb1
parentUpdate pluging wordpress-mobile-pack to 2.2.2 (diff)
downloadblogs-gentoo-097e7d91b32dd6d27ea47e5d7cd8d6bdcf1e50a2.tar.gz
blogs-gentoo-097e7d91b32dd6d27ea47e5d7cd8d6bdcf1e50a2.tar.bz2
blogs-gentoo-097e7d91b32dd6d27ea47e5d7cd8d6bdcf1e50a2.zip
Update plugin jetpack to 3.9.6
-rw-r--r--plugins/jetpack/_inc/facebook-embed.js57
-rw-r--r--plugins/jetpack/_inc/footer.php6
-rw-r--r--plugins/jetpack/_inc/header.php2
-rw-r--r--plugins/jetpack/_inc/jetpack-jitm.js14
-rw-r--r--plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php2
-rw-r--r--plugins/jetpack/_inc/lib/class.color.php17
-rw-r--r--plugins/jetpack/_inc/lib/markdown/extra.php4
-rw-r--r--plugins/jetpack/_inc/lib/markdown/gfm.php16
-rw-r--r--plugins/jetpack/_inc/lib/tracks/tracks-ajax.js49
-rw-r--r--plugins/jetpack/_inc/twitter-timeline.js39
-rw-r--r--plugins/jetpack/changelog.txt288
-rw-r--r--plugins/jetpack/class.jetpack-cli.php2
-rw-r--r--plugins/jetpack/class.jetpack-client.php9
-rw-r--r--plugins/jetpack/class.jetpack-debugger.php8
-rw-r--r--plugins/jetpack/class.jetpack-jitm.php149
-rw-r--r--plugins/jetpack/class.jetpack-modules-list-table.php2
-rw-r--r--plugins/jetpack/class.jetpack-network.php10
-rw-r--r--plugins/jetpack/class.jetpack-post-images.php23
-rw-r--r--plugins/jetpack/class.jetpack-signature.php5
-rw-r--r--plugins/jetpack/class.jetpack-tracks.php11
-rw-r--r--plugins/jetpack/class.jetpack.php310
-rw-r--r--plugins/jetpack/class.json-api-endpoints.php116
-rw-r--r--plugins/jetpack/class.json-api.php16
-rw-r--r--plugins/jetpack/class.photon.php2
-rw-r--r--plugins/jetpack/composer.json2
-rw-r--r--plugins/jetpack/css/jetpack-admin.css.map2
-rw-r--r--plugins/jetpack/css/jetpack-rtl.css2
-rw-r--r--plugins/jetpack/css/jetpack.css2
-rw-r--r--plugins/jetpack/functions.opengraph.php11
-rw-r--r--plugins/jetpack/functions.photon.php8
-rw-r--r--plugins/jetpack/jetpack.php12
-rw-r--r--plugins/jetpack/json-endpoints.php156
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-endpoint.php2
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-v1-1-endpoint.php2
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-endpoint.php166
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php52
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php84
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php6
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php25
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php4
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php69
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-2-endpoint.php61
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php9
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php9
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php10
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-modify-endpoint.php9
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php11
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-modify-endpoint.php11
-rw-r--r--plugins/jetpack/languages/jetpack-fi.mobin43192 -> 0 bytes
-rw-r--r--plugins/jetpack/locales.php2
-rw-r--r--plugins/jetpack/modules/carousel/jetpack-carousel.js40
-rw-r--r--plugins/jetpack/modules/comments/comments.php11
-rw-r--r--plugins/jetpack/modules/contact-form/grunion-contact-form.php81
-rw-r--r--plugins/jetpack/modules/contact-form/js/grunion-frontend.js4
-rw-r--r--plugins/jetpack/modules/custom-content-types.php2
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css.php2
-rw-r--r--plugins/jetpack/modules/custom-post-types/comics.php1
-rw-r--r--plugins/jetpack/modules/custom-post-types/js/many-items.js2
-rw-r--r--plugins/jetpack/modules/custom-post-types/portfolios.php1
-rw-r--r--plugins/jetpack/modules/custom-post-types/testimonial.php1
-rw-r--r--plugins/jetpack/modules/infinite-scroll/infinity.js72
-rw-r--r--plugins/jetpack/modules/infinite-scroll/infinity.php167
-rw-r--r--plugins/jetpack/modules/latex.php17
-rw-r--r--plugins/jetpack/modules/manage/confirm-admin.php4
-rw-r--r--plugins/jetpack/modules/minileven.php4
-rw-r--r--plugins/jetpack/modules/module-headings.php549
-rw-r--r--plugins/jetpack/modules/module-info.php132
-rw-r--r--plugins/jetpack/modules/monitor.php20
-rw-r--r--plugins/jetpack/modules/post-by-email.php2
-rw-r--r--plugins/jetpack/modules/protect.php4
-rw-r--r--plugins/jetpack/modules/publicize/ui.php6
-rw-r--r--plugins/jetpack/modules/related-posts/jetpack-related-posts.php16
-rw-r--r--plugins/jetpack/modules/related-posts/related-posts.js3
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-twitter.pngbin2945 -> 1952 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-twitter@2x.pngbin2686 -> 1691 bytes
-rw-r--r--plugins/jetpack/modules/shortcodes/archives.php54
-rw-r--r--plugins/jetpack/modules/shortcodes/codepen.php10
-rw-r--r--plugins/jetpack/modules/shortcodes/dailymotion.php2
-rw-r--r--plugins/jetpack/modules/shortcodes/facebook.php16
-rw-r--r--plugins/jetpack/modules/shortcodes/flickr.php73
-rw-r--r--plugins/jetpack/modules/shortcodes/gist.php82
-rw-r--r--plugins/jetpack/modules/shortcodes/houzz.php29
-rw-r--r--plugins/jetpack/modules/shortcodes/instagram.php51
-rw-r--r--plugins/jetpack/modules/shortcodes/js/facebook.js29
-rw-r--r--plugins/jetpack/modules/shortcodes/js/slideshow-shortcode.js5
-rw-r--r--plugins/jetpack/modules/shortcodes/presentations.php237
-rw-r--r--plugins/jetpack/modules/shortcodes/scribd.php8
-rw-r--r--plugins/jetpack/modules/shortcodes/slideshare.php87
-rw-r--r--plugins/jetpack/modules/shortcodes/slideshow.php3
-rw-r--r--plugins/jetpack/modules/shortcodes/soundcloud.php140
-rw-r--r--plugins/jetpack/modules/shortcodes/ted.php40
-rw-r--r--plugins/jetpack/modules/shortcodes/twitter-timeline.php31
-rw-r--r--plugins/jetpack/modules/shortcodes/vimeo.php149
-rw-r--r--plugins/jetpack/modules/shortcodes/wufoo.php91
-rw-r--r--plugins/jetpack/modules/shortcodes/youtube.php40
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-xsl.php11
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemaps.php142
-rw-r--r--plugins/jetpack/modules/sso.php9
-rw-r--r--plugins/jetpack/modules/stats.php39
-rw-r--r--plugins/jetpack/modules/subscriptions/subscriptions.css1
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php2
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentysixteen.php2
-rw-r--r--plugins/jetpack/modules/theme-tools/random-redirect.php25
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos.php1
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js2
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo.php8
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php5
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php4
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js9
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/carousel-container.php1
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/item.php15
-rw-r--r--plugins/jetpack/modules/videopress/videopress.php6
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions.php8
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js14
-rw-r--r--plugins/jetpack/modules/widgets/contact-info.php40
-rw-r--r--plugins/jetpack/modules/widgets/contact-info/contact-info-map.js38
-rw-r--r--plugins/jetpack/modules/widgets/facebook-likebox.php85
-rw-r--r--plugins/jetpack/modules/widgets/social-media-icons.php7
-rw-r--r--plugins/jetpack/modules/widgets/top-posts.php156
-rw-r--r--plugins/jetpack/modules/widgets/twitter-timeline.php34
-rw-r--r--plugins/jetpack/modules/widgets/wordpress-post-widget.php54
-rw-r--r--plugins/jetpack/readme.txt119
-rw-r--r--plugins/jetpack/to-test.md287
-rw-r--r--plugins/jetpack/views/admin/admin-page.php18
-rw-r--r--plugins/jetpack/views/admin/landing-page-templates.php4
-rw-r--r--plugins/jetpack/views/admin/my-jetpack-page.php17
-rw-r--r--plugins/jetpack/views/admin/network-admin-footer.php6
127 files changed, 3267 insertions, 2104 deletions
diff --git a/plugins/jetpack/_inc/facebook-embed.js b/plugins/jetpack/_inc/facebook-embed.js
new file mode 100644
index 00000000..d4284acf
--- /dev/null
+++ b/plugins/jetpack/_inc/facebook-embed.js
@@ -0,0 +1,57 @@
+/* global FB, jpfbembed */
+(function( window ) {
+ var facebookEmbed = function() {
+ var fbroot, src;
+
+ if ( 'undefined' !== typeof FB && FB.XFBML ) {
+ FB.XFBML.parse();
+ } else {
+ fbroot = document.createElement( 'div' );
+ fbroot.id = 'fb-root';
+ document.getElementsByTagName( 'body' )[0].appendChild( fbroot );
+
+ src = '//connect.facebook.net/' + jpfbembed.locale + '/sdk.js#xfbml=1';
+ if ( jpfbembed.appid ) {
+ src += '&appId=' + jpfbembed.appid;
+ }
+ src += '&version=v2.3';
+ jQuery.getScript( src );
+ }
+ };
+
+ window.fbAsyncInit = function() {
+ FB.init( {
+ appId : jpfbembed.appid,
+ version: 'v2.3'
+ } );
+
+ FB.XFBML.parse();
+ };
+
+ if ( 'undefined' !== typeof infiniteScroll ) {
+ jQuery( document.body ).on( 'post-load', facebookEmbed );
+ }
+
+ // Re-render Facebook XFBML when partials are re-rendered in the Customizer.
+ jQuery( function() {
+ var hasSelectiveRefresh = (
+ 'undefined' !== typeof wp &&
+ wp.customize &&
+ wp.customize.selectiveRefresh &&
+ wp.customize.widgetsPreview &&
+ wp.customize.widgetsPreview.WidgetPartial
+ );
+ if ( ! hasSelectiveRefresh ) {
+ return;
+ }
+
+ // Render Facebook widget in rendered partial.
+ wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
+ if ( placement.container ) {
+ FB.XFBML.parse( placement.container[0] );
+ }
+ } );
+ } );
+
+ facebookEmbed();
+})( this );
diff --git a/plugins/jetpack/_inc/footer.php b/plugins/jetpack/_inc/footer.php
index e04d187f..033be34d 100644
--- a/plugins/jetpack/_inc/footer.php
+++ b/plugins/jetpack/_inc/footer.php
@@ -13,12 +13,12 @@
<nav class="secondary nav-horizontal">
<div class="secondary-footer">
- <a href="http://jetpack.me">Jetpack <?php echo JETPACK__VERSION; ?></a>
+ <a href="http://jetpack.com">Jetpack <?php echo JETPACK__VERSION; ?></a>
<a href="http://wordpress.com/tos/"><?php esc_html_e( 'Terms', 'jetpack' ); ?></a>
<a href="http://automattic.com/privacy/"><?php esc_html_e( 'Privacy', 'jetpack' ); ?></a>
<?php if ( current_user_can( 'jetpack_manage_modules' ) ) : ?><a href="<?php echo esc_url( Jetpack::admin_url( 'page=jetpack-debugger' ) ); ?>" title="<?php esc_attr_e( 'Test your site&#8217;s compatibility with Jetpack.', 'jetpack' ); ?>"><?php _e( 'Debug', 'jetpack' ); ?><?php endif; ?></a>
- <a href="http://jetpack.me/contact-support/" title="<?php esc_attr_e( 'Contact the Jetpack Happiness Squad.', 'jetpack' ); ?>"><?php _e( 'Support', 'jetpack' ); ?></a>
- <a href="http://jetpack.me/survey/?rel=<?php echo JETPACK__VERSION; ?>" title="<?php esc_attr_e( 'Take a survey. Tell us how we&#8217;re doing.', 'jetpack' ); ?>"><?php _e( 'Give Us Feedback', 'jetpack' ); ?></a>
+ <a href="http://jetpack.com/contact-support/" title="<?php esc_attr_e( 'Contact the Jetpack Happiness Squad.', 'jetpack' ); ?>"><?php _e( 'Support', 'jetpack' ); ?></a>
+ <a href="http://jetpack.com/survey/?rel=<?php echo JETPACK__VERSION; ?>" title="<?php esc_attr_e( 'Take a survey. Tell us how we&#8217;re doing.', 'jetpack' ); ?>"><?php _e( 'Give Us Feedback', 'jetpack' ); ?></a>
<?php if ( Jetpack::is_active() && current_user_can( 'jetpack_disconnect' ) ) : ?>
<a href="<?php echo esc_url( Jetpack::admin_url( 'page=my_jetpack#disconnect' ) ); ?>"><?php esc_html_e( 'Disconnect Jetpack', 'jetpack' ); ?></a>
<?php endif; ?>
diff --git a/plugins/jetpack/_inc/header.php b/plugins/jetpack/_inc/header.php
index a15e3313..f83d5184 100644
--- a/plugins/jetpack/_inc/header.php
+++ b/plugins/jetpack/_inc/header.php
@@ -11,7 +11,7 @@
<a href="<?php echo Jetpack::admin_url( 'page=jetpack_modules' ); ?>" class="jp-button--settings <?php if ( 'jetpack_modules' == $current ) { echo 'current'; } ?>"><?php esc_html_e( 'Settings', 'jetpack' ); ?></a>
</li>
<li class="jetpack-modules">
- <a href="http://jetpack.me/survey/?rel=<?php echo JETPACK__VERSION; ?>" class="jp-button--settings"><?php esc_html_e( 'Feedback', 'jetpack' ); ?></a>
+ <a href="http://jetpack.com/survey/?rel=<?php echo JETPACK__VERSION; ?>" class="jp-button--settings"><?php esc_html_e( 'Feedback', 'jetpack' ); ?></a>
</li>
<?php endif; // End if connected or dev mode and is admin ?>
diff --git a/plugins/jetpack/_inc/jetpack-jitm.js b/plugins/jetpack/_inc/jetpack-jitm.js
index 79b2f24a..321238bf 100644
--- a/plugins/jetpack/_inc/jetpack-jitm.js
+++ b/plugins/jetpack/_inc/jetpack-jitm.js
@@ -90,9 +90,15 @@
});
$body.on( 'click', '.jp-jitm .launch', function() {
+ var $jitm = $(this).closest( '.jp-jitm' );
+
+ if ( $jitm.data( 'stats_url' ) ) {
+ data.jitm_stats_url = $jitm.data( 'stats_url' );
+ new Image().src = data.jitm_stats_url;
+ }
+
+ data.jitmModule = $jitm.data( 'track' ) ? $jitm.data( 'track' ) : $(this).data( 'module' );
data.jitmActionToTake = 'launch';
- module_slug = $(this).data( 'module' );
- data.jitmModule = module_slug;
// ajax request to save click in stat
$.post( jitmL10n.ajaxurl, data );
} );
@@ -110,7 +116,7 @@
var jitmTemplate = wp.template( 'jitm-photon' ),
$menu = wp.media.frame.$el.find( '.media-menu' ),
$jitm;
- if ( $menu.length > 0 ) {
+ if ( $menu.length > 0 && 0 === $menu.find( '.jp-jitm' ).length ) {
$jitm = $menu.append( jitmTemplate() ).find( '.jp-jitm' );
// JITM is visible to user, track it.
@@ -126,4 +132,4 @@
}
}
-})(jQuery, jitmL10n); \ No newline at end of file
+})(jQuery, jitmL10n);
diff --git a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php b/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php
index ec00730b..3f26ba86 100644
--- a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php
+++ b/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php
@@ -283,7 +283,7 @@ class Jetpack_Landing_Page extends Jetpack_Admin_Page {
'ays_dismiss' => __( "This will deactivate Jetpack.\nAre you sure you want to deactivate Jetpack?", 'jetpack' ),
'view_all_features' => __( 'View all Jetpack features', 'jetpack' ),
'no_modules_found' => sprintf( __( 'Sorry, no modules were found for the search term "%s"', 'jetpack' ), '{term}' ),
- 'modules' => array_values( Jetpack_Admin::init()->get_modules() ),
+ 'modules' => Jetpack::get_translated_modules( array_values( Jetpack_Admin::init()->get_modules() ) ),
'currentVersion' => JETPACK__VERSION,
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'jumpstart_modules' => $this->jumpstart_module_tag( 'Jumpstart' ),
diff --git a/plugins/jetpack/_inc/lib/class.color.php b/plugins/jetpack/_inc/lib/class.color.php
index 25f0e67d..a57f2009 100644
--- a/plugins/jetpack/_inc/lib/class.color.php
+++ b/plugins/jetpack/_inc/lib/class.color.php
@@ -419,7 +419,7 @@ class Jetpack_Color {
}
$rgb = $rgb_new;
- //Observer. = 2°, Illuminant = D65
+ // Observer. = 2°, Illuminant = D65
$xyz = array(
'x' => ($rgb['red'] * 0.4124) + ($rgb['green'] * 0.3576) + ($rgb['blue'] * 0.1805),
'y' => ($rgb['red'] * 0.2126) + ($rgb['green'] * 0.7152) + ($rgb['blue'] * 0.0722),
@@ -536,8 +536,12 @@ class Jetpack_Color {
}
public function toLuminosity() {
- extract( $this->toRgbInt() );
- return 0.2126 * pow( $red / 255, 2.2 ) + 0.7152 * pow( $green / 255, 2.2 ) + 0.0722 * pow( $blue / 255, 2.2);
+ $lum = array();
+ foreach( $this->toRgbInt() as $slot => $value ) {
+ $chan = $value / 255;
+ $lum[ $slot ] = ( $chan <= 0.03928 ) ? $chan / 12.92 : pow( ( ( $chan + 0.055 ) / 1.055 ), 2.4 );
+ }
+ return 0.2126 * $lum['red'] + 0.7152 * $lum['green'] + 0.0722 * $lum['blue'];
}
/**
@@ -547,7 +551,7 @@ class Jetpack_Color {
* @param Jetpack_Color $color Another color
* @return float
*/
- public function getDistanceLuminosityFrom(Jetpack_Color $color) {
+ public function getDistanceLuminosityFrom( Jetpack_Color $color ) {
$L1 = $this->toLuminosity();
$L2 = $color->toLuminosity();
if ( $L1 > $L2 ) {
@@ -559,9 +563,10 @@ class Jetpack_Color {
}
public function getMaxContrastColor() {
- $lum = $this->toLuminosity();
+ $withBlack = $this->getDistanceLuminosityFrom( new Jetpack_Color( '#000') );
+ $withWhite = $this->getDistanceLuminosityFrom( new Jetpack_Color( '#fff') );
$color = new Jetpack_Color;
- $hex = ( $lum >= 0.5 ) ? '000000' : 'ffffff';
+ $hex = ( $withBlack >= $withWhite ) ? '#000000' : '#ffffff';
return $color->fromHex( $hex );
}
diff --git a/plugins/jetpack/_inc/lib/markdown/extra.php b/plugins/jetpack/_inc/lib/markdown/extra.php
index 4f52171f..3ca8cdc8 100644
--- a/plugins/jetpack/_inc/lib/markdown/extra.php
+++ b/plugins/jetpack/_inc/lib/markdown/extra.php
@@ -2949,7 +2949,7 @@ class MarkdownExtra_Parser extends Markdown_Parser {
$text .= "<hr". $this->empty_element_suffix ."\n";
$text .= "<ol>\n\n";
- $attr = " rev=\"footnote\"";
+ $attr = "";
if ($this->fn_backlink_class != "") {
$class = $this->fn_backlink_class;
$class = $this->encodeAttribute($class);
@@ -3018,7 +3018,7 @@ class MarkdownExtra_Parser extends Markdown_Parser {
$ref_count_mark = $this->footnotes_ref_count[$node_id] += 1;
}
- $attr = " rel=\"footnote\"";
+ $attr = "";
if ($this->fn_link_class != "") {
$class = $this->fn_link_class;
$class = $this->encodeAttribute($class);
diff --git a/plugins/jetpack/_inc/lib/markdown/gfm.php b/plugins/jetpack/_inc/lib/markdown/gfm.php
index 6cd208af..bdcd1c48 100644
--- a/plugins/jetpack/_inc/lib/markdown/gfm.php
+++ b/plugins/jetpack/_inc/lib/markdown/gfm.php
@@ -93,6 +93,22 @@ class WPCom_GHF_Markdown_Parser extends MarkdownExtra_Parser {
// escape line-beginning # chars that do not have a space after them.
$text = preg_replace_callback( '|^#{1,6}( )?|um', array( $this, '_doEscapeForHashWithoutSpacing' ), $text );
+ /**
+ * Allow third-party plugins to define custom patterns that won't be processed by Markdown.
+ *
+ * @module markdown
+ *
+ * @since 3.9.2
+ *
+ * @param array $custom_patterns Array of custom patterns to be ignored by Markdown.
+ */
+ $custom_patterns = apply_filters( 'jetpack_markdown_preserve_pattern', array() );
+ if ( is_array( $custom_patterns ) && ! empty( $custom_patterns ) ) {
+ foreach ( $custom_patterns as $pattern ) {
+ $text = preg_replace_callback( $pattern, array( $this, '_doRemoveText'), $text );
+ }
+ }
+
// run through core Markdown
$text = parent::transform( $text );
diff --git a/plugins/jetpack/_inc/lib/tracks/tracks-ajax.js b/plugins/jetpack/_inc/lib/tracks/tracks-ajax.js
new file mode 100644
index 00000000..316aef44
--- /dev/null
+++ b/plugins/jetpack/_inc/lib/tracks/tracks-ajax.js
@@ -0,0 +1,49 @@
+/* global jpTracksAJAX, jQuery */
+
+(function( $, jpTracksAJAX ) {
+
+ $( document ).ready( function () {
+ $( 'body' ).on( 'click', '.jptracks a, a.jptracks', function( event ) {
+
+ // We know that the jptracks element is either this, or its ancestor
+ var $jptracks = $( this ).closest( '.jptracks' );
+
+ var data = {
+ tracksNonce: jpTracksAJAX.jpTracksAJAX_nonce,
+ action: 'jetpack_tracks',
+ tracksEventType: 'click',
+ tracksEventName: $jptracks.attr( 'data-jptracks-name' ),
+ tracksEventProp: $jptracks.attr( 'data-jptracks-prop' ) || false
+ };
+
+ // We need an event name at least
+ if ( undefined === data.tracksEventName ) {
+ return;
+ }
+
+ var url = $( this ).attr( 'href' );
+ var target = $( this ).get( 0 ).target;
+ if ( url && target && '_self' !== target ) {
+ var newTabWindow = window.open( '', target );
+ }
+
+ event.preventDefault();
+
+ $.ajax( {
+ type: 'POST',
+ url: jpTracksAJAX.ajaxurl,
+ data: data
+ } ).always( function() {
+ // Continue on to whatever url they were trying to get to.
+ if ( url ) {
+ if ( newTabWindow ) {
+ newTabWindow.location = url;
+ return;
+ }
+ window.location = url;
+ }
+ } );
+ });
+ });
+
+})( jQuery, jpTracksAJAX );
diff --git a/plugins/jetpack/_inc/twitter-timeline.js b/plugins/jetpack/_inc/twitter-timeline.js
new file mode 100644
index 00000000..e463363d
--- /dev/null
+++ b/plugins/jetpack/_inc/twitter-timeline.js
@@ -0,0 +1,39 @@
+/* global twttr */
+
+/* jshint ignore:start */
+!function(d,s,id){
+ var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';
+ if(!d.getElementById(id)){
+ js=d.createElement(s);
+ js.id=id;js.src=p+"://platform.twitter.com/widgets.js";
+ fjs.parentNode.insertBefore(js,fjs);
+ }
+}(document,"script","twitter-wjs");
+/* jshint ignore:end */
+
+jQuery( function() {
+ var hasSelectiveRefresh = (
+ 'undefined' !== typeof wp &&
+ wp.customize &&
+ wp.customize.selectiveRefresh &&
+ wp.customize.widgetsPreview &&
+ wp.customize.widgetsPreview.WidgetPartial
+ );
+ if ( ! hasSelectiveRefresh ) {
+ return;
+ }
+
+ // Re-load Twitter widgets when a partial is rendered.
+ wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
+ if ( placement.container ) {
+ twttr.widgets.load( placement.container[0] );
+ }
+ } );
+
+ // Refresh a moved partial containing a Twitter timeline iframe, since it has to be re-built.
+ wp.customize.selectiveRefresh.bind( 'partial-content-moved', function( placement ) {
+ if ( placement.container && placement.container.find( 'iframe.twitter-timeline:not([src]):first' ).length ) {
+ placement.partial.refresh();
+ }
+ } );
+} );
diff --git a/plugins/jetpack/changelog.txt b/plugins/jetpack/changelog.txt
index a19f9555..458b1d0e 100644
--- a/plugins/jetpack/changelog.txt
+++ b/plugins/jetpack/changelog.txt
@@ -1,4 +1,238 @@
== Changelog ==
+= 3.9.4 =
+Release date: March 10th, 2016
+
+Bug fix: Shortcodes: Addresses an issue with embedded Vimeo content
+
+= 3.9.3 =
+Release date: March 9th, 2016
+Release post: http://wp.me/p1moTy-396
+
+Featured:
+
+* Site Logo now supports Custom Logo - a theme tool to be introduced in WordPress 4.5.
+
+Enhancements:
+
+* Carousel: Made the full size image URL use a Photon URL if enabled.
+* Comments: Removed an unnecessary redirect by always connecting via HTTPS.
+* General: Added new actions that fire before automatic updates.
+* Infinite Scroll: Introduced a later filter for settings.
+* Infinite Scroll: Removed code that is now redundant due to WordPress Core.
+* Markdown: Removed deprecated markup from the output.
+* Publicize: Improved handling of featured images in posts.
+* Shortcodes: Added houzz.com support.
+* Sitemaps: Added a language attribute to the news sitemap.
+* Sitemaps: Improved the image retrieval mechanism for posts.
+* Widgets: Added new filters in the Top Posts Widget code.
+* Widgets: Cleaned up the CSS for the Subscription widget.
+
+Bug Fixes:
+
+* Comments: No longer reloading the page on clicking the reply button.
+* Contact Forms: Fixed a fatal error on missing metadata.
+* Contact Forms: Fixed message formatting for plaintext email clients.
+* Shortcodes: Fixed dimensions of Vimeo embeds in certain cases.
+* Shortcodes: Fixed warnings and allowed shorter style Vimeo embeds.
+* Shortcodes: Removed alignment markup from feeds for YouTube embeds.
+* Sitemaps: Made URLs display properly according to the permalink structure.
+* Stats: Fixed non-XHTML-valid markup.
+* Widgets: No longer showing errors when adding new instances of the Display Post Widget.
+
+= 3.9.2 =
+Release date: February 25th, 2016
+Release post: http://wp.me/p1moTy-2Ei
+
+Maintenance and Security Release
+
+Featured:
+
+* Beautiful Math: fix XSS vulnerability when parsing LaTeX markup within HTML elements.
+* Contact Form: do not save private site credentials in post meta. Thanks to @visualdatasolutions.
+
+Enhancements:
+
+* Contact Info: Added two hooks for adding arbitrary information to the widget.
+* Development: Added new possibilities for REST API debugging.
+* Embeds: Added Codepen embeds support.
+* Embeds: Added Sketchfab embeds support.
+* I18n: Added support for translation packages for the Finnish language.
+* Markdown: Added a filter to enable skipping processing of developer supplied patterns.
+* Related Posts: Added a filter to change heading markup.
+* Staging: Added a constant to force staging mode.
+* Staging: Added a notice to make staging mode more obvious.
+* Top Posts Widget: Added a new `[jetpack_top_posts_widget]` shortcode.
+
+Bug Fixes:
+
+* Custom Post Types: Nova: Fixed a JavaScript bug on adding multiple items.
+* Embeds: Allowing embeds from Instagram with a www in an URL.
+* General: Fixed untranslated module names on the Settings screen.
+* General: Improved module descriptions and fixed misleading or broken links in descriptions.
+* General: No more notices on module deprecation on older installations.
+* General: Only showing one prompt to enable Photon when uploading several new images.
+* Multisite: Fixed a problem with site lists for older WordPress installations.
+* OpenGraph: Fixed a bug to properly fallback to a WordPress Site Icon image.
+* Photon: Improve performance for images over a secure connection.
+* Photon: No longer including links from data attributes.
+* Publicize: Fixed problems for en_AU and en_CA locales with Facebook.
+* Related Posts: Fixed a notice on certain requests.
+* Site Logo: It's no longer possible to choose a non-image.
+* Widget Visibility: No longer confusing page IDs and titles in certain cases.
+
+= 3.9.1 =
+Release date: January 21st, 2016
+
+Bug Fixes:
+
+* General: Addresses a namespacing issue which was causing conflicts on some hosting providers.
+* Sitemaps: Added MSM-Sitemap to the list of plugins which, if installed, will prevent Jetpack Sitemaps from being used
+
+= 3.9 =
+Release date: January 20th, 2016
+
+Featured:
+
+* New sharing button: let users share your content using Skype.
+* New "Social Menu" theme tool that uses Genericons to display Social Links.
+* Sitemap support for better search engine indexing.
+
+Enhancements:
+
+* Contact Form: Added a new filter that allows you to change the "Required" text.
+* General: Hidden archived sites in multisite site list.
+* General: Removed several function calls that would be deprecated in WordPress 4.5.
+* Infinite Scroll: Added a new filter to check if Infinite Scroll has been triggered.
+* Likes: Added a conditional to ensure WordPress 4.5 compatibility.
+* Photon: Improved compatibility with responsive images feature added in WordPress 4.4.
+* Photon: Now enabled by default on sites using HTTPS.
+* REST API: Extended the ability to manage users from WordPress.com.
+* REST API: Increased the performance of the plugin update endpoint.
+* Responsive Videos: Centering videos when they are wrapped in a centered paragraph.
+* Sharing: Added a new filter to customize the default OpenGraph description.
+* Shortcodes: Added Wistia oEmbed support.
+* Shortcodes: Bandcamp: Added support for new attributes for tracks approved by artists.
+* Shortcodes: Improved Medium path format recognition.
+* Slideshow: Improved compatibility with older IE versions.
+* Staging: Improved staging environment detection.
+* Widgets: Added "width" option to the Facebook Page widget.
+* Widgets: Added size parameters to tags in Top Posts to avoid warnings.
+* Widgets: Introduced major performance and stability improvements to the Display Posts Widget.
+* Widgets: Refactored to remove deprecated code patterns.
+
+Bug Fixes:
+
+* AtD: Fixed replacing emojis with images in the text editor in Chrome.
+* AtD: Made pre tags be excluded from spell-checking.
+* CPT: Not registering Nova if it is already registered.
+* Carousel: Fixed a bug where full size images were not always served by Photon.
+* Carousel: Reverted a change that broke direct link to carousel image.
+* Contact Form: Fixed a CSV export bug with multiple choice questions.
+* Contact Form: Fixed notices when creating feedback entries without a contact form.
+* General: Fixed a scrolling bug on modal window closing.
+* Infinite Scroll: Disabled in the Customizer when previewing a non-active theme.
+* Publicize: Fixed notices appearing with bbPress or BuddyPress installed.
+* Publicize: Showing options only to users that can change them.
+* Related Posts: Fixed incorrect URLs generated for posts.
+* Responsive Videos: Fixed warnings in debug mode.
+* Shortcodes: Bandcamp: Fixed a problem with large track IDs.
+* Shortcodes: Fixed a problem with dynamic Gist embeds.
+* Stats: Fixed dashboard widget resize problem.
+* Widgets: Added a fallback to English US when a locale isn't supported by Facebook.
+* Widgets: Fixed layout for Twenty Sixteen.
+
+= 3.8.2 =
+Release date: December 17th, 2015
+Release post: http://wp.me/p1moTy-26v
+
+Jetpack 3.8.2 is here to squash a few annoying bugs.
+
+Bug Fixes:
+
+* Photon: Fixed a bug where some custom thumbnail image sizes weren't being sized properly.
+* Shortcodes: Fixed an incompatibility with how WordPress renders the YouTube shortcode.
+* Shortcodes: Tightened up security in the Wufoo shortcode.
+* Image Widget: Now shows the caption.
+* Fixed typos in inline docs.
+* Very minor fixes to: Carousel, Publicize, Google+, and Infinite Scroll.
+
+= 3.8.1 =
+Release date: December 1st, 2015
+Release post: http://wp.me/p1moTy-23V
+
+Jetpack 3.8.1 is here and is fully compatible with WordPress 4.4.
+
+Featured:
+
+* Photon + Responsive Images FTW.
+* Fully compatible with Twenty Sixteen.
+* More accessibility enhancements.
+* Dropped some weight by optimizing Jetpack's plugin images.
+
+Enhancements:
+
+* Comments: filter to allow disabling comments per post type.
+
+Bug Fixes:
+
+* Carousel: Stop page from scrolling to top when Carousel is closed.
+* Carousel: Browser compatibility fixes with older version of IE.
+* Markdown: Fixed a bug that would strip markdown when saving in "Quick Edit" mode.
+* Single Sign On: Fixed login always redirecting to the admin dashboard.
+* Subscriptions: Filter to allow per-post emails fixed for use in themes.
+
+= 3.8.0 =
+Release date: November 4th, 2015
+Release post: http://wp.me/p1moTy-1VN
+
+We're happy to introduce Jetpack 3.8, which has significant contributions from the Jetpack community. Read more about it here: http://wp.me/p1moTy-1VN
+
+Feature enhancements:
+
+* New Google+ Badge Widget. Display your profile, page, or community Google+ badge.
+* New twitch.tv shortcode embeds. Display a Twitch.tv stream in your posts.
+* Accessibility enhancements.
+* A handful of new filters to allow further customization of Jetpack.
+
+Other enhancements:
+
+* Carousel: Added support to retrieve image dimensions from an image url.
+* Carousel: Simpler algorithm to detect shutter speeds.
+* Contact Form: New "Checkbox with Multiple Items" field available in the Contact Form.
+* Contact Form: Allow pre-filling form fields with URL parameters.
+* Contact Form: Better styling of the emailed form responses.
+* Performance: Replaced some custom-built functions with core's native functions.
+* Related Posts: New filter to add post classes to post's container class.
+* Sharing: New filter to choose if sharing meta box should be shown.
+* Sharing: New filter to allow sharing button markup to be editable.
+* Sharing: New filter to allow you to specify a custom Facebook app ID.
+* Social Media Icons Widget: Added option for YouTube username as well as Channel ID.
+* Social Media Icons Widget: Added Google+ icon.
+* Social Media Icons Widget: New filter to allow you to add your own social media icons and links.
+* Subscriptions: Better errors to your visitors if their subscription sign-up fails.
+* Subscriptions: Removed "widget" class from Subs shortcode form.
+
+
+Bug fixes:
+
+* Carousel: Fixed browser back/forward button behavior.
+* Contact Form: Allow the email field to be set to empty when building form in post editor.
+* Facebook Likebox Widget: Fixed an issue where some languages were not translating.
+* Facebook Likebox Widget: Return a language when none found.
+* General: Fixed some minor styling issues in the Jetpack admin areas.
+* General: Add missing parameter to the_title filter call.
+* General: Prevent scrolling of body when the Jetpack admin modals are opened.
+* General: Update doc to reflect that Open Graph filter jetpack_enable_opengraph has been deprecated in favor of jetpack_enable_open_graph.
+* Infinite Scroll: Fixed an error that sometimes occurred that would stop posts from loading.
+* JSON API: Fixed some undefined notices when publishing a post with the API.
+* Open Graph: Fixed bug where facebook description content was sometimes being polluted by a filter.
+* Sharing: Use full SSL Pinterest url instead of protocol relative.
+* Sharing: Fixed plus signs appearing in tweets shared from iOS.
+* Shortcodes: Prefer HTTPS for video embeds to avoid mixed content warnings.
+* Subscriptions Widget: Fix HTML Validation error.
+* Theme Tools: Check oEmbeds for the presence of a video before adding the responsive videos filter.
+* Tiled Galleries: Add image alt attribute if there is a title set. This was breaking some screen reader functionality.
+
= 3.7.2 =
Release date: September 29th, 2015
@@ -99,11 +333,11 @@ Release Date: July 24, 2015
= 3.6 =
Release Date: July 6th, 2015
-Release Post: http://jetpack.me/2015/07/06/jetpack-3-6-updated-social-widgets-jetpack-cli-and-more/
+Release Post: http://jetpack.com/2015/07/06/jetpack-3-6-updated-social-widgets-jetpack-cli-and-more/
Feature Enhancements:
-* CLI: Add a number of Jetpack CLI improvements: see http://jetpack.me/support/jetpack-cli
+* CLI: Add a number of Jetpack CLI improvements: see http://jetpack.com/support/jetpack-cli
* New Jetpack admin page for connection management
* New Social Media Icons widget
* FB Like Box: A visual refresh of the Facebook likebox widget
@@ -167,7 +401,7 @@ Release Date: May 5th, 2015
= 3.5 =
Release Date: April 23rd, 2015
-Release Post: http://jetpack.me/2016/04/23/jetpack-3-5-menu-management/
+Release Post: http://jetpack.com/2016/04/23/jetpack-3-5-menu-management/
Jetpack 3.5 introduces the ability to manage your site's menus directly from WordPress.com and several bug fixes and enhancements. This upgrade is recommended for all users.
@@ -215,7 +449,7 @@ Release Date: March 19th, 2015
= 3.4 =
Release Date: March 18th, 2015
-Release Post: http://jetpack.me/2015/03/17/jetpack-3-4-protect-secure-and-simplify/
+Release Post: http://jetpack.com/2015/03/17/jetpack-3-4-protect-secure-and-simplify/
* Enhancement : Config Settings: provide a notification for users that update features settings
* Enhancement : Config Settings: provide a notification for users that update features settings
@@ -299,7 +533,7 @@ Release Date: February 11th, 2015
= 3.3 =
Release Date: December 15th, 2014
-Release Post: http://jetpack.me/2014/12/16/jetpack-3-3-a-single-home-for-all-your-wordpress-sites/
+Release Post: http://jetpack.com/2014/12/16/jetpack-3-3-a-single-home-for-all-your-wordpress-sites/
* Enhancement: Adds responsive video support to BuddyPress.
* Enhancement: Custom Content Types: Added 'order' and 'orderby' options to portfolio shortcode.
@@ -348,7 +582,7 @@ Release Date: November 14th, 2014
= 3.2 =
Release Date: October 29, 2014
-Release Post: http://jetpack.me/2014/11/03/jetpack-3-2/
+Release Post: http://jetpack.com/2014/11/03/jetpack-3-2/
* Enhancement: Speed Improvements (woohoo!).
* Enhancement: Add site icons: an avatar for your blog.
@@ -386,7 +620,7 @@ Release Date: August 7, 2014
= 3.1 =
Release Date: July 31, 2014
-Release Post: http://jetpack.me/2014/07/31/jetpack-3-1-portfolio-custom-post-types-a-new-logo-and-much-more/
+Release Post: http://jetpack.com/2014/07/31/jetpack-3-1-portfolio-custom-post-types-a-new-logo-and-much-more/
* Enhancement: New Custom Content Types module.
* Enhancement: New Jetpack Logo.
@@ -458,7 +692,7 @@ Release Date: May 22, 2014
= 3.0 =
Release Date: May 20, 2014
-Release Post: http://jetpack.me/2014/05/20/jetpack-3-0/
+Release Post: http://jetpack.com/2014/05/20/jetpack-3-0/
* New User Interface for managing modules and settings
* New Module: Verfication Tools
@@ -502,7 +736,7 @@ Release Date: March 6, 2014
= 2.9 =
Release Date: February 26, 2014
-Release Post: http://jetpack.me/2014/02/26/jetpack-2-9/
+Release Post: http://jetpack.com/2014/02/26/jetpack-2-9/
* Added Multisite network functionality
* New Module: Related Posts
@@ -526,7 +760,7 @@ Release Post: http://jetpack.me/2014/02/26/jetpack-2-9/
= 2.8 =
Release Date: January 31, 2014
-Release Post: http://jetpack.me/2014/01/31/jetpack-2-8-introducing-markdown-and-improving-monitor/
+Release Post: http://jetpack.com/2014/01/31/jetpack-2-8-introducing-markdown-and-improving-monitor/
* New Module: Markdown
* Module Update: Jetpack Monitor
@@ -567,7 +801,7 @@ Release Post: http://jetpack.me/2014/01/31/jetpack-2-8-introducing-markdown-and-
= 2.7 =
Release Date: December 11, 2013
-Release Post: http://jetpack.me/2013/12/11/jetpack-2-7-publicize/
+Release Post: http://jetpack.com/2013/12/11/jetpack-2-7-publicize/
* Enhancement: Google+ Publicize
* Enhancement: Add Cloudup as an oEmbed provider
@@ -604,10 +838,10 @@ Release Date: December 3, 2013
= 2.6 =
Release Date: November 28, 2013
-Release Post: http://jetpack.me/2013/11/26/new-release-jetpack-2-6/
+Release Post: http://jetpack.com/2013/11/26/new-release-jetpack-2-6/
-* Enhancement: WPCC / now called [SSO](http://jetpack.me/support/sso/): refactored.
-* Enhancement: Monitor: new module which will notify you if your site goes down(http://jetpack.me/support/monitor/).
+* Enhancement: WPCC / now called [SSO](http://jetpack.com/support/sso/): refactored.
+* Enhancement: Monitor: new module which will notify you if your site goes down(http://jetpack.com/support/monitor/).
* Enhancement: Custom CSS: replace Ace editor with Codemirror.
* Enhancement: Widgets: new “Display Posts” widget.
* Enhancement: WP-CLI: add commands to disconnect a site and manage modules.
@@ -642,7 +876,7 @@ Release Post: http://jetpack.me/2013/11/26/new-release-jetpack-2-6/
= 2.5 =
Release Date: September 19, 2013
-Release Post: http://jetpack.me/2013/09/19/jetpack-2-5/
+Release Post: http://jetpack.com/2013/09/19/jetpack-2-5/
* Enhancement: Connect your Google+ profile and WordPress site to prove authorship of posts.
* Enhancement: Improved sharing buttons display.
@@ -692,7 +926,7 @@ Release Date: September 4, 2013
= 2.4 =
Release Date: August 30, 2013
-Release Post: http://jetpack.me/2013/09/04/jetpack-2-4-widget-visibility-and-wpcc-and-more/
+Release Post: http://jetpack.com/2013/09/04/jetpack-2-4-widget-visibility-and-wpcc-and-more/
* Enhancement: WordPress.com Connect (WPCC): New Module.
* Enhancement: Widget Visibility: New Module.
@@ -771,7 +1005,7 @@ Release Date: July 2, 2013
= 2.3 =
Release Date: June 19, 2013
-Release Post: http://jetpack.me/2013/06/19/jetpack-2-3/
+Release Post: http://jetpack.com/2013/06/19/jetpack-2-3/
* Enhancement: Omnisearch: Search once, get results from everything! Omnisearch is a single search box that lets you search many different things
* Enhancement: Debugger: this module helps you debug connection issues right from your dashboard, and contact the Jetpack support team if needed
@@ -934,7 +1168,7 @@ Release Date: March 28, 2013
= 2.2 =
Release Date: February 26, 2013
-Release Post: http://jetpack.me/2013/02/26/jetpack-2-2-likes/
+Release Post: http://jetpack.com/2013/02/26/jetpack-2-2-likes/
* Enhancement: Likes: Allow your readers to show their appreciation of your posts.
* Enhancement: Shortcodes: SoundCloud: Update to version 2.3 of the SoundCloud plugin (HTML5 default player, various fixes).
@@ -1015,7 +1249,7 @@ Release Date: January 5, 2013
= 2.1 =
Release Date: January 4, 2013
-Release Post: http://jetpack.me/2013/01/04/galleries/
+Release Post: http://jetpack.com/2013/01/04/galleries/
* Enhancement: Tiled Galleries: Show off your photos with cool mosaic galleries.
* Enhancement: Slideshow gallery type: Display any gallery as a slideshow.
@@ -1074,7 +1308,7 @@ Release Date: November 21, 2012
= 2.0 =
Release Date: November 8, 2012
-Release Post: http://jetpack.me/2012/11/08/jetpack-2-0-publicize-to-facebook-twitter-linkedin-tumblr-post-by-email-photon-infinite-scroll/
+Release Post: http://jetpack.com/2012/11/08/jetpack-2-0-publicize-to-facebook-twitter-linkedin-tumblr-post-by-email-photon-infinite-scroll/
* Enhancement: Publicize: Connect your site to popular social networks and automatically share new posts with your friends.
* Enhancement: Post By Email: Publish posts to your blog directly from your personal email account.
@@ -1101,7 +1335,7 @@ Release Date: October 29, 2012
= 1.9 =
Release Date: October 26, 2012
-Release Post: http://jetpack.me/2012/10/26/jetpack-1-9-toolbar-notifications/
+Release Post: http://jetpack.com/2012/10/26/jetpack-1-9-toolbar-notifications/
* Enhancement: Notifications: Display Notifications in the toolbar and support reply/moderation of comment notifications.
* Enhancement: Mobile Push Notifications: Added support for mobile push notifications of new comments for users that linked their accounts to WordPress.com accounts.
@@ -1153,7 +1387,7 @@ Release Date: September 28, 2012
= 1.8 =
Release Date: September 27, 2012
-Release Post: http://jetpack.me/2012/09/27/jetpack-1-8-mobile-theme/
+Release Post: http://jetpack.com/2012/09/27/jetpack-1-8-mobile-theme/
* Enhancement: Mobile Theme: Automatically serve a slimmed down version of your site to users on mobile devices.
* Enhancement: Multiuser: Allow multiple users to link their accounts to WordPress.com accounts.
@@ -1171,7 +1405,7 @@ Release Post: http://jetpack.me/2012/09/27/jetpack-1-8-mobile-theme/
= 1.7 =
Release Date: August 23, 2012
-Release Post: http://jetpack.me/2012/08/23/jetpack-1-7-custom-css/
+Release Post: http://jetpack.com/2012/08/23/jetpack-1-7-custom-css/
* Enhancement: CSS Editor: Customize your site's design without modifying your theme.
* Enhancement: Comments: Submit the comment within the iframe. No more full page load to jetpack.wordpress.com.
@@ -1204,7 +1438,7 @@ Release Date: August 4, 2012
= 1.6 =
Release Date: August 2, 2012
-Release Post: http://jetpack.me/2012/08/02/jetpack-1-6-retina-and-pinterest/
+Release Post: http://jetpack.com/2012/08/02/jetpack-1-6-retina-and-pinterest/
* Enhancement: Carousel: Better image resolution selection based on available width/height.
* Enhancement: Carousel: Load image caption, metadata, comments, et alii when a slide is clicked to switch to instead of waiting.
@@ -1283,7 +1517,7 @@ Release Date: May 22, 2012
= 1.3 =
Release Date: April 25, 2012
-Release Post: http://jetpack.me/2012/04/24/jetpack-1-3-released-contact-forms/
+Release Post: http://jetpack.com/2012/04/24/jetpack-1-3-released-contact-forms/
* Enhancement: Add Contact Forms feature. Formerly Grunion Contact Forms.
* Bug Fix: Tweak YouTube autoembedder to catch more YouTube URLs.
@@ -1333,11 +1567,11 @@ Release Date: November 18, 2011
* Bug Fix: Fixed errors displayed during some upgrades.
* Bug Fix: Fix inaccurate new modules "bubble" in menu for some upgrades.
* Bug Fix: Fix VaultPress detection.
-* Bug Fix: Fix link to http://jetpack.me/faq/
+* Bug Fix: Fix link to http://jetpack.com/faq/
= 1.2 =
Release Date: November 17, 2011
-Release Post: http://jetpack.me/2011/11/17/announcing-jetpack-1-2/
+Release Post: http://jetpack.com/2011/11/17/announcing-jetpack-1-2/
* Enhancement: Add Subscriptions: Subscribe to site's posts and posts' comments.
* Enhancement: Add Google Maps shortcode.
diff --git a/plugins/jetpack/class.jetpack-cli.php b/plugins/jetpack/class.jetpack-cli.php
index d84f39ca..3824411d 100644
--- a/plugins/jetpack/class.jetpack-cli.php
+++ b/plugins/jetpack/class.jetpack-cli.php
@@ -579,7 +579,7 @@ function jetpack_cli_are_you_sure( $flagged = false, $error_msg = false ) {
__( 'Action cancelled. Have a question?', 'jetpack' )
. ' '
. $cli->green_open
- . 'jetpack.me/support'
+ . 'jetpack.com/support'
. $cli->color_close;
}
diff --git a/plugins/jetpack/class.jetpack-client.php b/plugins/jetpack/class.jetpack-client.php
index df1c4c07..33dce110 100644
--- a/plugins/jetpack/class.jetpack-client.php
+++ b/plugins/jetpack/class.jetpack-client.php
@@ -1,7 +1,6 @@
<?php
class Jetpack_Client {
- const WPCOM_JSON_API_HOST = 'public-api.wordpress.com';
const WPCOM_JSON_API_VERSION = '1.1';
/**
@@ -111,6 +110,12 @@ class Jetpack_Client {
'Authorization' => "X_JETPACK " . join( ' ', $header_pieces ),
);
+ // Make sure we keep the host when we do JETPACK__WPCOM_JSON_API_HOST requests.
+ $host = parse_url( $url, PHP_URL_HOST );
+ if ( $host === JETPACK__WPCOM_JSON_API_HOST ) {
+ $request['headers']['Host'] = 'public-api.wordpress.com';
+ }
+
if ( 'header' != $args['auth_location'] ) {
$url = add_query_arg( 'signature', urlencode( $signature ), $url );
}
@@ -271,7 +276,7 @@ class Jetpack_Client {
}
$validated_args = array_merge( $filtered_args, array(
- 'url' => sprintf( '%s://%s/rest/v%s/%s', $proto, self::WPCOM_JSON_API_HOST, $version, $_path ),
+ 'url' => sprintf( '%s://%s/rest/v%s/%s', $proto, JETPACK__WPCOM_JSON_API_HOST, $version, $_path ),
'blog_id' => (int) Jetpack_Options::get_option( 'id' ),
'method' => $request_method,
) );
diff --git a/plugins/jetpack/class.jetpack-debugger.php b/plugins/jetpack/class.jetpack-debugger.php
index 7b0d0f54..fb456b0c 100644
--- a/plugins/jetpack/class.jetpack-debugger.php
+++ b/plugins/jetpack/class.jetpack-debugger.php
@@ -4,7 +4,7 @@ class Jetpack_Debugger {
private static function is_jetpack_support_open() {
try {
- $response = wp_remote_request( "http://jetpack.me/is-support-open" );
+ $response = wp_remote_request( "http://jetpack.com/is-support-open" );
$body = wp_remote_retrieve_body( $response );
$json = json_decode( $body );
return ( ( bool ) $json->is_support_open );
@@ -166,7 +166,7 @@ class Jetpack_Debugger {
<h3><?php esc_html_e( 'Trouble with Jetpack?', 'jetpack' ); ?></h3>
<h4><?php esc_html_e( 'It may be caused by one of these issues, which you can diagnose yourself:', 'jetpack' ); ?></h4>
<ol>
- <li><b><em><?php esc_html_e( 'A known issue.', 'jetpack' ); ?></em></b> <?php echo sprintf( __( 'Some themes and plugins have <a href="%1$s">known conflicts</a> with Jetpack – check the <a href="%2$s">list</a>. (You can also browse the <a href="%3$s">Jetpack support pages</a> or <a href="%4$s">Jetpack support forum</a> to see if others have experienced and solved the problem.)', 'jetpack' ), 'http://jetpack.me/support/getting-started-with-jetpack/known-issues/', 'http://jetpack.me/support/getting-started-with-jetpack/known-issues/', 'http://jetpack.me/support/', 'http://wordpress.org/support/plugin/jetpack' ); ?></li>
+ <li><b><em><?php esc_html_e( 'A known issue.', 'jetpack' ); ?></em></b> <?php echo sprintf( __( 'Some themes and plugins have <a href="%1$s">known conflicts</a> with Jetpack – check the <a href="%2$s">list</a>. (You can also browse the <a href="%3$s">Jetpack support pages</a> or <a href="%4$s">Jetpack support forum</a> to see if others have experienced and solved the problem.)', 'jetpack' ), 'http://jetpack.com/support/getting-started-with-jetpack/known-issues/', 'http://jetpack.com/support/getting-started-with-jetpack/known-issues/', 'http://jetpack.com/support/', 'http://wordpress.org/support/plugin/jetpack' ); ?></li>
<li><b><em><?php esc_html_e( 'An incompatible plugin.', 'jetpack' ); ?></em></b> <?php esc_html_e( "Find out by disabling all plugins except Jetpack. If the problem persists, it's not a plugin issue. If the problem is solved, turn your plugins on one by one until the problem pops up again – there's the culprit! Let us know, and we'll try to help.", 'jetpack' ); ?></li>
<li>
<b><em><?php esc_html_e( 'A theme conflict.', 'jetpack' ); ?></em></b>
@@ -199,14 +199,14 @@ class Jetpack_Debugger {
</div>
<hr />
<div id="sync-related-posts">
- <p><?php echo esc_html__( 'Some features of Jetpack uses the WordPress.com infrastructure and requires that your public content be mirrored there. If you see intermittent issues only affecting certain posts, please try requesting a reindex of your posts.', 'jetpack' ); ?></p>
+ <p><?php echo esc_html__( 'Some features of Jetpack use the WordPress.com infrastructure and require that your public content be mirrored there. If you see intermittent issues only affecting certain posts, please try requesting a reindex of your posts.', 'jetpack' ); ?></p>
<?php echo Jetpack::init()->sync->reindex_ui() ?>
</div>
<?php endif; ?>
</div>
<div id="contact-message" <?php if( ! isset( $_GET['contact'] ) ) {?> style="display:none" <?php } ?>>
<?php if ( self::is_jetpack_support_open() ): ?>
- <form id="contactme" method="post" action="http://jetpack.me/contact-support/">
+ <form id="contactme" method="post" action="http://jetpack.com/contact-support/">
<input type="hidden" name="action" value="submit">
<input type="hidden" name="jetpack" value="needs-service">
diff --git a/plugins/jetpack/class.jetpack-jitm.php b/plugins/jetpack/class.jetpack-jitm.php
index a4760400..60617b7f 100644
--- a/plugins/jetpack/class.jetpack-jitm.php
+++ b/plugins/jetpack/class.jetpack-jitm.php
@@ -54,61 +54,18 @@ class Jetpack_JITM {
if ( ! current_user_can( 'jetpack_manage_modules' ) ) {
return;
}
- global $pagenow;
- // Only show auto update JITM if auto updates are allowed in this installation
- $possible_reasons_for_failure = Jetpack_Autoupdate::get_possible_failures();
- self::$auto_updates_allowed = empty( $possible_reasons_for_failure );
- $photon_inactive = ! Jetpack::is_module_active( 'photon' );
-
- if ( 'media-new.php' == $pagenow && $photon_inactive ) {
+ if ( 'edit-comments' == $screen->base && ! Jetpack::is_plugin_active( 'akismet/akismet.php' ) ) {
add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
- add_action( 'post-plupload-upload-ui', array( $this, 'photon_msg' ) );
- }
- elseif ( 'post-new.php' == $pagenow ) {
- $calypso_supported_post_types = in_array( $screen->post_type, array( 'post', 'page' ) );
- if ( $calypso_supported_post_types || $photon_inactive ) {
- add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
- }
- if ( $calypso_supported_post_types ) {
- add_action( 'admin_notices', array( $this, 'editor_msg' ) );
- }
- if ( $photon_inactive ) {
- add_action( 'print_media_templates', array( $this, 'photon_tmpl' ) );
- }
+ add_action( 'admin_notices', array( $this, 'akismet_msg' ) );
}
- elseif ( 'post.php' == $pagenow ) {
- $user_published = isset( $_GET['message'] ) && 6 == $_GET['message'];
- if ( $user_published || $photon_inactive ) {
- add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
- }
- if ( $user_published ) {
- add_action( 'edit_form_top', array( $this, 'stats_msg' ) );
- }
- if ( $photon_inactive ) {
- add_action( 'print_media_templates', array( $this, 'photon_tmpl' ) );
- }
+ elseif ( 'post' == $screen->base && ( isset( $_GET['message'] ) && 6 == $_GET['message'] ) ) {
+ add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
+ add_action( 'edit_form_top', array( $this, 'backups_after_publish_msg' ) );
}
- elseif ( self::$auto_updates_allowed ) {
- if ( 'update-core.php' == $pagenow && ! Jetpack::is_module_active( 'manage' ) ) {
- add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
- add_action( 'admin_notices', array( $this, 'manage_msg' ) );
- }
- elseif ( 'plugins.php' == $pagenow ) {
- if ( ( isset( $_GET['activate'] ) && 'true' === $_GET['activate'] ) || ( isset( $_GET['activate-multi'] ) && 'true' === $_GET['activate-multi'] ) ) {
- add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
- add_action( 'pre_current_active_plugins', array( $this, 'manage_pi_msg' ) );
- } else {
-
- // Save plugins that are activated. This is used when one or more plugins are activated to know
- // what was activated and use it in Jetpack_JITM::manage_pi_msg() before deleting the option.
- $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
- $action = $wp_list_table->current_action();
- if ( $action && ( 'activate' == $action || 'activate-selected' == $action ) ) {
- update_option( 'jetpack_temp_active_plugins_before', get_option( 'active_plugins', array() ) );
- }
- }
- }
+ elseif ( 'update-core' == $screen->base && ! Jetpack::is_plugin_active( 'vaultpress/vaultpress.php' ) ) {
+ add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
+ add_action( 'admin_notices', array( $this, 'backups_updates_msg' ) );
}
}
@@ -346,6 +303,96 @@ class Jetpack_JITM {
$jetpack->do_stats( 'server_side' );
}
+ /**
+ * Display JITM in Updates screen prompting user to enable Backups.
+ *
+ * @since 3.9.5
+ */
+ function backups_updates_msg() {
+ $normalized_site_url = Jetpack::build_raw_urls( get_home_url() );
+ $url = 'https://wordpress.com/plans/' . $normalized_site_url;
+ $jitm_stats_url = Jetpack::build_stats_url( array( 'x_jetpack-jitm' => 'vaultpress' ) );
+ ?>
+ <div class="jp-jitm" data-track="vaultpress-updates" data-stats_url="<?php echo esc_url( $jitm_stats_url ); ?>">
+ <a href="#" data-module="vaultpress" class="dismiss"><span class="genericon genericon-close"></span></a>
+
+ <div class="jp-emblem">
+ <?php echo self::get_jp_emblem(); ?>
+ </div>
+ <p class="msg">
+ <?php esc_html_e( 'Backups are recommended to protect your site before you make any changes.', 'jetpack' ); ?>
+ </p>
+ <p>
+ <a href="<?php echo esc_url( $url ); ?>" target="_blank" title="<?php esc_attr_e( 'Enable VaultPress Backups', 'jetpack' ); ?>" data-module="vaultpress" data-jptracks-name="nudge_click" data-jptracks-prop="jitm-vault" class="button button-jetpack launch jptracks"><?php esc_html_e( 'Enable VaultPress Backups', 'jetpack' ); ?></a>
+ </p>
+ </div>
+ <?php
+ //jitm is being viewed, track it
+ $jetpack = Jetpack::init();
+ $jetpack->stat( 'jitm', 'vaultpress-updates-viewed-' . JETPACK__VERSION );
+ $jetpack->do_stats( 'server_side' );
+ }
+
+ /**
+ * Display JITM in Comments screen prompting user to enable Akismet.
+ *
+ * @since 3.9.5
+ */
+ function akismet_msg() {
+ $normalized_site_url = Jetpack::build_raw_urls( get_home_url() );
+ $url = 'https://wordpress.com/plans/' . $normalized_site_url;
+ $jitm_stats_url = Jetpack::build_stats_url( array( 'x_jetpack-jitm' => 'akismet' ) );
+ ?>
+ <div class="jp-jitm" data-stats_url="<?php echo esc_url( $jitm_stats_url ); ?>">
+ <a href="#" data-module="akismet" class="dismiss"><span class="genericon genericon-close"></span></a>
+
+ <div class="jp-emblem">
+ <?php echo self::get_jp_emblem(); ?>
+ </div>
+ <p class="msg">
+ <?php esc_html_e( "Spam affects your site's legitimacy, protect your site with Akismet.", 'jetpack' ); ?>
+ </p>
+ <p>
+ <a href="<?php echo esc_url( $url ); ?>" target="_blank" title="<?php esc_attr_e( 'Automate Spam Blocking', 'jetpack' ); ?>" data-module="akismet" data-jptracks-name="nudge_click" data-jptracks-prop="jitm-akismet" class="button button-jetpack launch jptracks"><?php esc_html_e( 'Automate Spam Blocking', 'jetpack' ); ?></a>
+ </p>
+ </div>
+ <?php
+ //jitm is being viewed, track it
+ $jetpack = Jetpack::init();
+ $jetpack->stat( 'jitm', 'akismet-viewed-' . JETPACK__VERSION );
+ $jetpack->do_stats( 'server_side' );
+ }
+
+ /**
+ * Display JITM after a post is published prompting user to enable Backups.
+ *
+ * @since 3.9.5
+ */
+ function backups_after_publish_msg() {
+ $normalized_site_url = Jetpack::build_raw_urls( get_home_url() );
+ $url = 'https://wordpress.com/plans/' . $normalized_site_url;
+ $jitm_stats_url = Jetpack::build_stats_url( array( 'x_jetpack-jitm' => 'vaultpress' ) );
+ ?>
+ <div class="jp-jitm" data-track="vaultpress-publish" data-stats_url="<?php echo esc_url( $jitm_stats_url ); ?>">
+ <a href="#" data-module="vaultpress" class="dismiss"><span class="genericon genericon-close"></span></a>
+
+ <div class="jp-emblem">
+ <?php echo self::get_jp_emblem(); ?>
+ </div>
+ <p class="msg">
+ <?php esc_html_e( "Great job! Now let's make sure your hard work is never lost, backup everything with VaultPress.", 'jetpack' ); ?>
+ </p>
+ <p>
+ <a href="<?php echo esc_url( $url ); ?>" target="_blank" title="<?php esc_attr_e( 'Enable Backups', 'jetpack' ); ?>" data-module="vaultpress" data-jptracks-name="nudge_click" data-jptracks-prop="jitm-vault-post" class="button button-jetpack launch jptracks"><?php esc_html_e( 'Enable Backups', 'jetpack' ); ?></a>
+ </p>
+ </div>
+ <?php
+ //jitm is being viewed, track it
+ $jetpack = Jetpack::init();
+ $jetpack->stat( 'jitm', 'vaultpress-publish-viewed-' . JETPACK__VERSION );
+ $jetpack->do_stats( 'server_side' );
+ }
+
/*
* Function to enqueue jitm css and js
*/
diff --git a/plugins/jetpack/class.jetpack-modules-list-table.php b/plugins/jetpack/class.jetpack-modules-list-table.php
index 941bae75..ee8d7d16 100644
--- a/plugins/jetpack/class.jetpack-modules-list-table.php
+++ b/plugins/jetpack/class.jetpack-modules-list-table.php
@@ -54,7 +54,7 @@ class Jetpack_Modules_List_Table extends WP_List_Table {
);
wp_localize_script( 'jetpack-modules-list-table', 'jetpackModulesData', array(
- 'modules' => $this->all_items,
+ 'modules' => Jetpack::get_translated_modules( $this->all_items ),
'i18n' => array(
'search_placeholder' => __( 'Search Modules…', 'jetpack' ),
),
diff --git a/plugins/jetpack/class.jetpack-network.php b/plugins/jetpack/class.jetpack-network.php
index 620f939f..31327e3b 100644
--- a/plugins/jetpack/class.jetpack-network.php
+++ b/plugins/jetpack/class.jetpack-network.php
@@ -769,23 +769,23 @@ class Jetpack_Network {
}
if ( isset( $args['public'] ) ) {
- $query .= $wpdb->prepare( "AND public = %s ", $args['public'] );
+ $query .= $wpdb->prepare( "AND public = %d ", $args['public'] );
}
if ( isset( $args['archived'] ) ) {
- $query .= $wpdb->prepare( "AND archived = %s ", $args['archived'] );
+ $query .= $wpdb->prepare( "AND archived = %d ", $args['archived'] );
}
if ( isset( $args['mature'] ) ) {
- $query .= $wpdb->prepare( "AND mature = %s ", $args['mature'] );
+ $query .= $wpdb->prepare( "AND mature = %d ", $args['mature'] );
}
if ( isset( $args['spam'] ) ) {
- $query .= $wpdb->prepare( "AND spam = %s ", $args['spam'] );
+ $query .= $wpdb->prepare( "AND spam = %d ", $args['spam'] );
}
if ( isset( $args['deleted'] ) ) {
- $query .= $wpdb->prepare( "AND deleted = %s ", $args['deleted'] );
+ $query .= $wpdb->prepare( "AND deleted = %d ", $args['deleted'] );
}
if ( isset( $args['exclude_blogs'] ) ) {
diff --git a/plugins/jetpack/class.jetpack-post-images.php b/plugins/jetpack/class.jetpack-post-images.php
index 83df87b1..875eda5f 100644
--- a/plugins/jetpack/class.jetpack-post-images.php
+++ b/plugins/jetpack/class.jetpack-post-images.php
@@ -232,6 +232,29 @@ class Jetpack_PostImages {
'href' => get_permalink( $thumb ),
) );
}
+
+ if ( empty( $images ) && ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
+ $meta_thumbnail = get_post_meta( $post_id, '_jetpack_post_thumbnail', true );
+ if ( ! empty( $meta_thumbnail ) ) {
+ if ( ! isset( $meta_thumbnail['width'] ) || $meta_thumbnail['width'] < $width ) {
+ return $images;
+ }
+
+ if ( ! isset( $meta_thumbnail['height'] ) || $meta_thumbnail['height'] < $height ) {
+ return $images;
+ }
+
+ $images = array( array( // Other methods below all return an array of arrays
+ 'type' => 'image',
+ 'from' => 'thumbnail',
+ 'src' => $meta_thumbnail['URL'],
+ 'src_width' => $meta_thumbnail['width'],
+ 'src_height' => $meta_thumbnail['height'],
+ 'href' => $meta_thumbnail['URL'],
+ ) );
+ }
+ }
+
return $images;
}
diff --git a/plugins/jetpack/class.jetpack-signature.php b/plugins/jetpack/class.jetpack-signature.php
index a63636ae..b2c621f6 100644
--- a/plugins/jetpack/class.jetpack-signature.php
+++ b/plugins/jetpack/class.jetpack-signature.php
@@ -2,6 +2,7 @@
defined( 'JETPACK_SIGNATURE__HTTP_PORT' ) or define( 'JETPACK_SIGNATURE__HTTP_PORT' , 80 );
defined( 'JETPACK_SIGNATURE__HTTPS_PORT' ) or define( 'JETPACK_SIGNATURE__HTTPS_PORT', 443 );
+defined( 'JETPACK__WPCOM_JSON_API_HOST' ) or define( 'JETPACK__WPCOM_JSON_API_HOST', 'public-api.wordpress.com' );
class Jetpack_Signature {
public $token;
@@ -109,6 +110,10 @@ class Jetpack_Signature {
return new Jetpack_Error( 'invalid_signature', sprintf( 'The required "%s" parameter is malformed.', 'url' ) );
}
+ if ( $parsed['host'] === JETPACK__WPCOM_JSON_API_HOST ) {
+ $parsed['host'] = 'public-api.wordpress.com';
+ }
+
if ( !empty( $parsed['port'] ) ) {
$port = $parsed['port'];
} else {
diff --git a/plugins/jetpack/class.jetpack-tracks.php b/plugins/jetpack/class.jetpack-tracks.php
index 58a815cf..a2a23ea7 100644
--- a/plugins/jetpack/class.jetpack-tracks.php
+++ b/plugins/jetpack/class.jetpack-tracks.php
@@ -13,11 +13,22 @@ class JetpackTracking {
return;
}
+ // For tracking stuff via js/ajax
+ add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue_tracks_scripts' ) );
+
add_action( 'jetpack_pre_activate_module', array( __CLASS__, 'track_activate_module'), 1, 1 );
add_action( 'jetpack_pre_deactivate_module', array( __CLASS__, 'track_deactivate_module'), 1, 1 );
add_action( 'jetpack_user_authorized', array( __CLASS__, 'track_user_linked' ) );
}
+ static function enqueue_tracks_scripts() {
+ wp_enqueue_script( 'jptracks', plugins_url( '_inc/lib/tracks/tracks-ajax.js', JETPACK__PLUGIN_FILE ), array(), JETPACK__VERSION, true );
+ wp_localize_script( 'jptracks', 'jpTracksAJAX', array(
+ 'ajaxurl' => admin_url( 'admin-ajax.php' ),
+ 'jpTracksAJAX_nonce' => wp_create_nonce( 'jp-tracks-ajax-nonce' ),
+ ) );
+ }
+
/* User has linked their account */
static function track_user_linked() {
$user_id = get_current_user_id();
diff --git a/plugins/jetpack/class.jetpack.php b/plugins/jetpack/class.jetpack.php
index 5c0f846d..0e9ce9ab 100644
--- a/plugins/jetpack/class.jetpack.php
+++ b/plugins/jetpack/class.jetpack.php
@@ -327,77 +327,17 @@ class Jetpack {
* Must never be called statically
*/
function plugin_upgrade() {
- // Upgrade: 1.1 -> 1.2
- if ( get_option( 'jetpack_id' ) ) {
- // Move individual jetpack options to single array of options
- $options = array();
- foreach ( Jetpack_Options::get_option_names() as $option ) {
- if ( false !== $value = get_option( "jetpack_$option" ) ) {
- $options[$option] = $value;
- }
- }
-
- if ( $options ) {
- Jetpack_Options::update_options( $options );
-
- foreach ( array_keys( $options ) as $option ) {
- delete_option( "jetpack_$option" );
- }
- }
-
- // Add missing version and old_version options
- if ( ! $version = Jetpack_Options::get_option( 'version' ) ) {
- $version = $old_version = '1.1:' . time();
- /**
- * Fires on update, before bumping version numbers up to a new version.
- *
- * @since 3.4.0
- *
- * @param string $version Jetpack version number.
- * @param bool false Does an old version exist. Default is false.
- */
- do_action( 'updating_jetpack_version', $version, false );
- Jetpack_Options::update_options( compact( 'version', 'old_version' ) );
- }
- }
-
- // Upgrade from a single user token to a user_id-indexed array and a master_user ID
- if ( ! Jetpack_Options::get_option( 'user_tokens' ) ) {
- if ( $user_token = Jetpack_Options::get_option( 'user_token' ) ) {
- $token_parts = explode( '.', $user_token );
- if ( isset( $token_parts[2] ) ) {
- $master_user = $token_parts[2];
- $user_tokens = array( $master_user => $user_token );
- Jetpack_Options::update_options( compact( 'master_user', 'user_tokens' ) );
- Jetpack_Options::delete_option( 'user_token' );
- } else {
- // @todo: is this even possible?
- trigger_error( sprintf( 'Jetpack::plugin_upgrade found no user_id in user_token "%s"', $user_token ), E_USER_WARNING );
- }
- }
- }
-
- // Clean up legacy G+ Authorship data.
- if ( get_option( 'gplus_authors' ) ) {
- delete_option( 'gplus_authors' );
- delete_option( 'hide_gplus' );
- delete_metadata( 'post', 0, 'gplus_authorship_disabled', null, true );
- }
-
- if ( ! get_option( 'jetpack_private_options' ) ) {
- $jetpack_options = get_option( 'jetpack_options', array() );
- foreach( Jetpack_Options::get_option_names( 'private' ) as $option_name ) {
- if ( isset( $jetpack_options[ $option_name ] ) ) {
- Jetpack_Options::update_option( $option_name, $jetpack_options[ $option_name ] );
- unset( $jetpack_options[ $option_name ] );
- }
- }
- update_option( 'jetpack_options', $jetpack_options );
- }
-
if ( Jetpack::is_active() ) {
list( $version ) = explode( ':', Jetpack_Options::get_option( 'version' ) );
if ( JETPACK__VERSION != $version ) {
+
+ // Check which active modules actually exist and remove others from active_modules list
+ $unfiltered_modules = Jetpack::get_active_modules();
+ $modules = array_filter( $unfiltered_modules, array( 'Jetpack', 'is_module' ) );
+ if ( array_diff( $unfiltered_modules, $modules ) ) {
+ Jetpack_Options::update_option( 'active_modules', $modules );
+ }
+
add_action( 'init', array( __CLASS__, 'activate_new_modules' ) );
/**
* Fires when synchronizing all registered options and constants.
@@ -406,25 +346,7 @@ class Jetpack {
*/
do_action( 'jetpack_sync_all_registered_options' );
}
-
- //if Jetpack is connected check if jetpack_unique_connection exists and if not then set it
- $jetpack_unique_connection = get_option( 'jetpack_unique_connection' );
- $is_unique_connection = $jetpack_unique_connection && array_key_exists( 'version', $jetpack_unique_connection );
- if ( ! $is_unique_connection ) {
- $jetpack_unique_connection = array(
- 'connected' => 1,
- 'disconnected' => -1,
- 'version' => '3.6.1'
- );
- update_option( 'jetpack_unique_connection', $jetpack_unique_connection );
- }
- }
-
- if ( get_option( 'jetpack_json_api_full_management' ) ) {
- delete_option( 'jetpack_json_api_full_management' );
- self::activate_manage();
}
-
}
static function activate_manage( ) {
@@ -630,6 +552,9 @@ class Jetpack {
add_action( 'wp_ajax_jetpack_admin_ajax', array( $this, 'jetpack_admin_ajax_callback' ) );
add_action( 'wp_ajax_jetpack_admin_ajax_refresh', array( $this, 'jetpack_admin_ajax_refresh_data' ) );
+ // Universal ajax callback for all tracking events triggered via js
+ add_action( 'wp_ajax_jetpack_tracks', array( $this, 'jetpack_admin_ajax_tracks_callback' ) );
+
add_action( 'wp_loaded', array( $this, 'register_assets' ) );
add_action( 'wp_enqueue_scripts', array( $this, 'devicepx' ) );
add_action( 'customize_controls_enqueue_scripts', array( $this, 'devicepx' ) );
@@ -700,6 +625,26 @@ class Jetpack {
}
}
+ function jetpack_admin_ajax_tracks_callback() {
+ // Check for nonce
+ if ( ! isset( $_REQUEST['tracksNonce'] ) || ! wp_verify_nonce( $_REQUEST['tracksNonce'], 'jp-tracks-ajax-nonce' ) ) {
+ wp_die( 'Permissions check failed.' );
+ }
+
+ if ( ! isset( $_REQUEST['tracksEventName'] ) || ! isset( $_REQUEST['tracksEventType'] ) ) {
+ wp_die( 'No valid event name or type.' );
+ }
+
+ $tracks_data = array();
+ if ( 'click' === $_REQUEST['tracksEventType'] && isset( $_REQUEST['tracksEventProp'] ) ) {
+ $tracks_data = array( 'clicked' => $_REQUEST['tracksEventProp'] );
+ }
+
+ JetpackTracking::record_user_event( $_REQUEST['tracksEventName'], $tracks_data );
+ wp_send_json_success();
+ wp_die();
+ }
+
function jetpack_admin_ajax_callback() {
// Check for nonce
if ( ! isset( $_REQUEST['adminNonce'] ) || ! wp_verify_nonce( $_REQUEST['adminNonce'], 'jetpack-admin-nonce' ) || ! current_user_can( 'jetpack_manage_modules' ) ) {
@@ -1043,6 +988,28 @@ class Jetpack {
wp_register_script( 'jetpack-gallery-settings', plugins_url( '_inc/gallery-settings.js', JETPACK__PLUGIN_FILE ), array( 'media-views' ), '20121225' );
}
+ if ( ! wp_script_is( 'jetpack-twitter-timeline', 'registered' ) ) {
+ wp_register_script( 'jetpack-twitter-timeline', plugins_url( '_inc/twitter-timeline.js', JETPACK__PLUGIN_FILE ) , array( 'jquery' ), '3.10', true );
+ }
+
+ if ( ! wp_script_is( 'jetpack-facebook-embed', 'registered' ) ) {
+ wp_register_script( 'jetpack-facebook-embed', plugins_url( '_inc/facebook-embed.js', __FILE__ ), array( 'jquery' ), null, true );
+
+ /** This filter is documented in modules/sharedaddy/sharing-sources.php */
+ $fb_app_id = apply_filters( 'jetpack_sharing_facebook_app_id', '249643311490' );
+ if ( ! is_numeric( $fb_app_id ) ) {
+ $fb_app_id = '';
+ }
+ wp_localize_script(
+ 'jetpack-facebook-embed',
+ 'jpfbembed',
+ array(
+ 'appid' => $fb_app_id,
+ 'locale' => $this->get_locale(),
+ )
+ );
+ }
+
/**
* As jetpack_register_genericons is by default fired off a hook,
* the hook may have already fired by this point.
@@ -1056,6 +1023,67 @@ class Jetpack {
}
/**
+ * Guess locale from language code.
+ *
+ * @param string $lang Language code.
+ * @return string|bool
+ */
+ function guess_locale_from_lang( $lang ) {
+ if ( 'en' === $lang || 'en_US' === $lang || ! $lang ) {
+ return 'en_US';
+ }
+
+ if ( ! class_exists( 'GP_Locales' ) ) {
+ if ( ! defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) || ! file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
+ return false;
+ }
+
+ require JETPACK__GLOTPRESS_LOCALES_PATH;
+ }
+
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ // WP.com: get_locale() returns 'it'
+ $locale = GP_Locales::by_slug( $lang );
+ } else {
+ // Jetpack: get_locale() returns 'it_IT';
+ $locale = GP_Locales::by_field( 'facebook_locale', $lang );
+ }
+
+ if ( ! $locale ) {
+ return false;
+ }
+
+ if ( empty( $locale->facebook_locale ) ) {
+ if ( empty( $locale->wp_locale ) ) {
+ return false;
+ } else {
+ // Facebook SDK is smart enough to fall back to en_US if a
+ // locale isn't supported. Since supported Facebook locales
+ // can fall out of sync, we'll attempt to use the known
+ // wp_locale value and rely on said fallback.
+ return $locale->wp_locale;
+ }
+ }
+
+ return $locale->facebook_locale;
+ }
+
+ /**
+ * Get the locale.
+ *
+ * @return string|bool
+ */
+ function get_locale() {
+ $locale = $this->guess_locale_from_lang( get_locale() );
+
+ if ( ! $locale ) {
+ $locale = 'en_US';
+ }
+
+ return $locale;
+ }
+
+ /**
* Device Pixels support
* This improves the resolution of gravatars and wordpress.com uploads on hi-res and zoomed browsers.
*/
@@ -1473,7 +1501,7 @@ class Jetpack {
/**
* Filters Jetpack's development mode.
*
- * @see http://jetpack.me/support/development-mode/
+ * @see http://jetpack.com/support/development-mode/
*
* @since 2.2.1
*
@@ -1494,19 +1522,19 @@ class Jetpack {
$notice = sprintf(
/* translators: %s is a URL */
__( 'In <a href="%s" target="_blank">Development Mode</a>, via the JETPACK_DEV_DEBUG constant being defined in wp-config.php or elsewhere.', 'jetpack' ),
- 'http://jetpack.me/support/development-mode/'
+ 'http://jetpack.com/support/development-mode/'
);
} elseif ( site_url() && false === strpos( site_url(), '.' ) ) {
$notice = sprintf(
/* translators: %s is a URL */
__( 'In <a href="%s" target="_blank">Development Mode</a>, via site URL lacking a dot (e.g. http://localhost).', 'jetpack' ),
- 'http://jetpack.me/support/development-mode/'
+ 'http://jetpack.com/support/development-mode/'
);
} else {
$notice = sprintf(
/* translators: %s is a URL */
__( 'In <a href="%s" target="_blank">Development Mode</a>, via the jetpack_development_mode filter.', 'jetpack' ),
- 'http://jetpack.me/support/development-mode/'
+ 'http://jetpack.com/support/development-mode/'
);
}
@@ -1516,7 +1544,14 @@ class Jetpack {
// Throw up a notice if using a development version and as for feedback.
if ( Jetpack::is_development_version() ) {
/* translators: %s is a URL */
- $notice = sprintf( __( 'You are currently running a development version of Jetpack. <a href="%s" target="_blank">Submit your feedback</a>', 'jetpack' ), 'https://jetpack.me/contact-support/beta-group/' );
+ $notice = sprintf( __( 'You are currently running a development version of Jetpack. <a href="%s" target="_blank">Submit your feedback</a>', 'jetpack' ), 'https://jetpack.com/contact-support/beta-group/' );
+
+ echo '<div class="updated" style="border-color: #f0821e;"><p>' . $notice . '</p></div>';
+ }
+ // Throw up a notice if using staging mode
+ if ( Jetpack::is_staging_site() ) {
+ /* translators: %s is a URL */
+ $notice = sprintf( __( 'You are running Jetpack on a <a href="%s" target="_blank">staging server</a>.', 'jetpack' ), 'https://jetpack.com/support/staging-sites/' );
echo '<div class="updated" style="border-color: #f0821e;"><p>' . $notice . '</p></div>';
}
@@ -1601,6 +1636,7 @@ class Jetpack {
wp_oembed_add_provider( 'https://me.sh/*', 'https://me.sh/oembed?format=json' );
wp_oembed_add_provider( '#https?://(www\.)?gfycat\.com/.*#i', 'https://api.gfycat.com/v1/oembed', true );
wp_oembed_add_provider( '#https?://[^.]+\.(wistia\.com|wi\.st)/(medias|embed)/.*#', 'https://fast.wistia.com/oembed', true );
+ wp_oembed_add_provider( '#https?://sketchfab\.com/.*#i', 'https://sketchfab.com/oembed', true );
}
/**
@@ -1694,7 +1730,7 @@ class Jetpack {
$is_development_mode = Jetpack::is_development_mode();
- foreach ( $modules as $module ) {
+ foreach ( $modules as $index => $module ) {
// If we're in dev mode, disable modules requiring a connection
if ( $is_development_mode ) {
// Prime the pump if we need to
@@ -1711,7 +1747,12 @@ class Jetpack {
continue;
}
- require Jetpack::get_module_path( $module );
+ if ( ! @include( Jetpack::get_module_path( $module ) ) ) {
+ unset( $modules[ $index ] );
+ Jetpack_Options::update_option( 'active_modules', array_values( $modules ) );
+ continue;
+ }
+
/**
* Fires when a specific module is loaded.
* The dynamic part of the hook, $module, is the module slug.
@@ -2537,10 +2578,38 @@ class Jetpack {
return $data;
}
- public static function translate_module_tag( $untranslated_tag ) {
- // Tags are aggregated by tools/build-module-headings-translations.php
- // and output in modules/module-headings.php
- return _x( $untranslated_tag, 'Module Tag', 'jetpack' );
+ /**
+ * Return translated module tag.
+ *
+ * @param string $tag Tag as it appears in each module heading.
+ *
+ * @return mixed
+ */
+ public static function translate_module_tag( $tag ) {
+ return jetpack_get_module_i18n_tag( $tag );
+ }
+
+ /**
+ * Return module name translation. Uses matching string created in modules/module-headings.php.
+ *
+ * @since 3.9.2
+ *
+ * @param array $modules
+ *
+ * @return string|void
+ */
+ public static function get_translated_modules( $modules ) {
+ foreach ( $modules as $index => $module ) {
+ $i18n_module = jetpack_get_module_i18n( $module['module'] );
+ if ( isset( $module['name'] ) ) {
+ $modules[ $index ]['name'] = $i18n_module['name'];
+ }
+ if ( isset( $module['description'] ) ) {
+ $modules[ $index ]['description'] = $i18n_module['description'];
+ $modules[ $index ]['short_description'] = $i18n_module['description'];
+ }
+ }
+ return $modules;
}
/**
@@ -3550,8 +3619,8 @@ p {
// Help Sidebar
$current_screen->set_help_sidebar(
'<p><strong>' . __( 'For more information:', 'jetpack' ) . '</strong></p>' .
- '<p><a href="http://jetpack.me/faq/" target="_blank">' . __( 'Jetpack FAQ', 'jetpack' ) . '</a></p>' .
- '<p><a href="http://jetpack.me/support/" target="_blank">' . __( 'Jetpack Support', 'jetpack' ) . '</a></p>' .
+ '<p><a href="http://jetpack.com/faq/" target="_blank">' . __( 'Jetpack FAQ', 'jetpack' ) . '</a></p>' .
+ '<p><a href="http://jetpack.com/support/" target="_blank">' . __( 'Jetpack Support', 'jetpack' ) . '</a></p>' .
'<p><a href="' . Jetpack::admin_url( array( 'page' => 'jetpack-debugger' ) ) .'">' . __( 'Jetpack Debugging Center', 'jetpack' ) . '</a></p>'
);
}
@@ -3643,7 +3712,7 @@ p {
<p><?php _e( 'Connect now to enable features like Stats, Likes, and Social Sharing.', 'jetpack' ); ?></p>
</div>
<div class="jp-banner__action-container is-connection">
- <a href="<?php echo $this->build_connect_url() ?>" class="jp-banner__button" id="wpcom-connect"><?php _e( 'Connect to WordPress.com', 'jetpack' ); ?></a>
+ <a href="<?php echo $this->build_connect_url( false, false, 'banner' ) ?>" class="jp-banner__button" id="wpcom-connect"><?php _e( 'Connect to WordPress.com', 'jetpack' ); ?></a>
</div>
<?php else : ?>
<div class="jp-banner__content">
@@ -3692,7 +3761,7 @@ p {
<a class="jp-banner__dismiss" href="<?php echo esc_url( $opt_out_url ); ?>" title="<?php esc_attr_e( 'Dismiss this notice for now.', 'jetpack' ); ?>"></a>
<div class="jp-banner__content">
<h2><?php esc_html_e( 'New in Jetpack: Centralized Site Management', 'jetpack' ); ?></h2>
- <p><?php printf( __( 'Manage multiple sites from one dashboard at wordpress.com/sites. Enabling allows all existing, connected Administrators to modify your site from WordPress.com. <a href="%s" target="_blank">Learn More</a>.', 'jetpack' ), 'http://jetpack.me/support/site-management' ); ?></p>
+ <p><?php printf( __( 'Manage multiple sites from one dashboard at wordpress.com/sites. Enabling allows all existing, connected Administrators to modify your site from WordPress.com. <a href="%s" target="_blank">Learn More</a>.', 'jetpack' ), 'http://jetpack.com/support/site-management' ); ?></p>
</div>
<div class="jp-banner__action-container is-opt-in">
<a href="<?php echo esc_url( $opt_in_url ); ?>" class="jp-banner__button" id="wpcom-connect"><?php _e( 'Activate now', 'jetpack' ); ?></a>
@@ -3721,7 +3790,7 @@ p {
?>
<div class="wrap">
<div id="message" class="jetpack-message is-opt-in">
- <?php echo sprintf( __( '<p><a href="%1$s" title="Opt in to WordPress.com Site Management" >Activate Site Management</a> to manage multiple sites from our centralized dashboard at wordpress.com/sites. <a href="%2$s" target="_blank">Learn more</a>.</p><a href="%1$s" class="jp-button">Activate Now</a>', 'jetpack' ), $this->opt_in_jetpack_manage_url(), 'http://jetpack.me/support/site-management' ); ?>
+ <?php echo sprintf( __( '<p><a href="%1$s" title="Opt in to WordPress.com Site Management" >Activate Site Management</a> to manage multiple sites from our centralized dashboard at wordpress.com/sites. <a href="%2$s" target="_blank">Learn more</a>.</p><a href="%1$s" class="jp-button">Activate Now</a>', 'jetpack' ), $this->opt_in_jetpack_manage_url(), 'http://jetpack.com/support/site-management' ); ?>
</div>
</div>
<?php
@@ -3813,7 +3882,7 @@ p {
<br />
<?php echo sprintf(
__( 'Would you tell us why? Just <a href="%1$s" target="%2$s">answering two simple questions</a> would help us improve Jetpack.', 'jetpack' ),
- 'https://jetpack.me/survey-disconnected/',
+ 'https://jetpack.com/survey-disconnected/',
'_blank'
); ?>
</h2>
@@ -3874,7 +3943,7 @@ p {
if ( isset( $_GET['connect_url_redirect'] ) ) {
// User clicked in the iframe to link their accounts
if ( ! Jetpack::is_user_connected() ) {
- $connect_url = $this->build_connect_url( true );
+ $connect_url = $this->build_connect_url( true, false, 'iframe' );
if ( isset( $_GET['notes_iframe'] ) )
$connect_url .= '&notes_iframe';
wp_redirect( $connect_url );
@@ -3914,7 +3983,7 @@ p {
break;
}
- wp_redirect( $this->build_connect_url( true ) );
+ wp_redirect( $this->build_connect_url( true, false, 'error-desc' ) );
exit;
case 'activate' :
if ( ! current_user_can( 'jetpack_activate_modules' ) ) {
@@ -3959,7 +4028,7 @@ p {
check_admin_referer( 'jetpack-reconnect' );
Jetpack::log( 'reconnect' );
$this->disconnect();
- wp_redirect( $this->build_connect_url( true ) );
+ wp_redirect( $this->build_connect_url( true, false, 'reconnect' ) );
exit;
case 'deactivate' :
if ( ! current_user_can( 'jetpack_deactivate_modules' ) ) {
@@ -4515,7 +4584,20 @@ p {
return $role . ':' . hash_hmac( 'md5', "{$role}|{$user_id}", $token->secret );
}
- function build_connect_url( $raw = false, $redirect = false ) {
+
+ /**
+ * Builds a URL to the Jetpack connection auth page
+ *
+ * @since 3.9.5
+ *
+ * @param bool $raw If true, URL will not be escaped.
+ * @param bool|string $redirect If true, will redirect back to Jetpack wp-admin landing page after connection.
+ * If string, will be a custom redirect.
+ * @param bool|string $from If not false, adds 'from=$from' param to the connect URL.
+ *
+ * @return string Connect URL
+ */
+ function build_connect_url( $raw = false, $redirect = false, $from = false ) {
if ( ! Jetpack_Options::get_option( 'blog_token' ) || ! Jetpack_Options::get_option( 'id' ) ) {
$url = Jetpack::nonce_url_no_esc( Jetpack::admin_url( 'action=register' ), 'jetpack-register' );
if( is_network_admin() ) {
@@ -4558,6 +4640,9 @@ p {
$url = add_query_arg( $args, Jetpack::api_url( 'authorize' ) );
}
+ if ( $from ) {
+ $url = add_query_arg( 'from', $from, $url );
+ }
return $raw ? $url : esc_url( $url );
}
@@ -4745,7 +4830,7 @@ p {
$activate_url = Jetpack::init()->opt_in_jetpack_manage_url();
- $info['description'] = sprintf( __( 'Manage your multiple Jetpack sites from our centralized dashboard at wordpress.com/sites. <a href="%s" target="_blank">Learn more</a>.', 'jetpack' ), 'http://jetpack.me/support/site-management' );
+ $info['description'] = sprintf( __( 'Manage your multiple Jetpack sites from our centralized dashboard at wordpress.com/sites. <a href="%s" target="_blank">Learn more</a>.', 'jetpack' ), 'http://jetpack.com/support/site-management' );
// $extra = __( 'To use Site Management, you need to first activate JSON API to allow remote management of your site. ', 'jetpack' );
} ?>
@@ -6035,6 +6120,7 @@ p {
),
'constants' => array(
'IS_WPE_SNAPSHOT',
+ 'JETPACK_STAGING_MODE',
)
);
/**
@@ -6228,7 +6314,7 @@ p {
<div class="banner-content">
<p><?php
/* translators: %s is a URL */
- printf( __( 'Our records show that this site does not have a valid connection to WordPress.com. Please reset your connection to fix this. <a href="%s" target="_blank">What caused this?</a>', 'jetpack' ), 'https://jetpack.me/support/no-valid-wordpress-com-connection/' );
+ printf( __( 'Our records show that this site does not have a valid connection to WordPress.com. Please reset your connection to fix this. <a href="%s" target="_blank">What caused this?</a>', 'jetpack' ), 'https://jetpack.com/support/no-valid-wordpress-com-connection/' );
?></p>
</div>
<div class="jp-btn-group">
@@ -6257,13 +6343,13 @@ p {
),
$errors[ $key ],
(string) get_option( $key ),
- 'https://jetpack.me/support/what-does-resetting-the-connection-mean/'
+ 'https://jetpack.com/support/what-does-resetting-the-connection-mean/'
); ?></p>
</div>
<div class="jp-btn-group">
<a href="#" class="reset-connection"><?php _e( 'Reset the connection', 'jetpack' ); ?></a> <span class="idc-separator">|</span>
<a href="#" class="is-dev-env"><?php _e( 'This is a development environment', 'jetpack' ); ?></a> <span class="idc-separator">|</span>
- <a href="https://jetpack.me/contact-support/" class="contact-support"><?php _e( 'Submit a support ticket', 'jetpack' ); ?></a>
+ <a href="https://jetpack.com/contact-support/" class="contact-support"><?php _e( 'Submit a support ticket', 'jetpack' ); ?></a>
<span class="spinner"></span>
</div>
</div>
@@ -6948,7 +7034,7 @@ p {
<p><?php echo wp_kses( __( 'Connecting Jetpack will show you <strong>stats</strong> about your traffic, <strong>protect</strong> you from brute force attacks, <strong>speed up</strong> your images and photos, and enable other <strong>traffic and security</strong> features.', 'jetpack' ), 'jetpack' ) ?></p>
<div class="actions">
- <a href="<?php echo $this->build_connect_url() ?>" class="button button-primary">
+ <a href="<?php echo $this->build_connect_url( false, false, 'widget-btn' ); ?>" class="button button-primary">
<?php esc_html_e( 'Connect Jetpack', 'jetpack' ); ?>
</a>
</div>
diff --git a/plugins/jetpack/class.json-api-endpoints.php b/plugins/jetpack/class.json-api-endpoints.php
index 1943d272..e1fe3a60 100644
--- a/plugins/jetpack/class.json-api-endpoints.php
+++ b/plugins/jetpack/class.json-api-endpoints.php
@@ -8,7 +8,6 @@ abstract class WPCOM_JSON_API_Endpoint {
public $api;
public $pass_wpcom_user_details = false;
- public $can_use_user_details_instead_of_blog_membership = false;
// One liner.
public $description;
@@ -69,6 +68,9 @@ abstract class WPCOM_JSON_API_Endpoint {
// Is this endpoint still allowed if the site in question is flagged?
public $allowed_if_flagged = false;
+ // Is this endpoint allowed if the site is red flagged?
+ public $allowed_if_red_flagged = false;
+
/**
* @var string Version of the API
*/
@@ -113,6 +115,7 @@ abstract class WPCOM_JSON_API_Endpoint {
$defaults = array(
'in_testing' => false,
'allowed_if_flagged' => false,
+ 'allowed_if_red_flagged' => false,
'description' => '',
'group' => '',
'method' => 'GET',
@@ -133,7 +136,6 @@ abstract class WPCOM_JSON_API_Endpoint {
'example_response' => '',
'required_scope' => '',
'pass_wpcom_user_details' => false,
- 'can_use_user_details_instead_of_blog_membership' => false,
'custom_fields_filtering' => false,
'allow_cross_origin_request' => false,
'allow_unauthorized_request' => false,
@@ -145,6 +147,7 @@ abstract class WPCOM_JSON_API_Endpoint {
$this->in_testing = $args['in_testing'];
$this->allowed_if_flagged = $args['allowed_if_flagged'];
+ $this->allowed_if_red_flagged = $args['allowed_if_red_flagged'];
$this->description = $args['description'];
$this->group = $args['group'];
@@ -162,7 +165,6 @@ abstract class WPCOM_JSON_API_Endpoint {
$this->pass_wpcom_user_details = $args['pass_wpcom_user_details'];
$this->custom_fields_filtering = (bool) $args['custom_fields_filtering'];
- $this->can_use_user_details_instead_of_blog_membership = $args['can_use_user_details_instead_of_blog_membership'];
$this->allow_cross_origin_request = (bool) $args['allow_cross_origin_request'];
$this->allow_unauthorized_request = (bool) $args['allow_unauthorized_request'];
@@ -330,7 +332,8 @@ abstract class WPCOM_JSON_API_Endpoint {
/**
* Casts $value according to $type.
* Handles fallbacks for certain values of $type when $value is not that $type
- * Currently, only handles fallback between string <-> array (two way), from string -> false (one way), and from object -> false (one way)
+ * Currently, only handles fallback between string <-> array (two way), from string -> false (one way), and from object -> false (one way),
+ * and string -> object (one way)
*
* Handles "child types" - array:URL, object:category
* array:URL means an array of URLs
@@ -351,7 +354,7 @@ abstract class WPCOM_JSON_API_Endpoint {
$return[$key] = (string) esc_url_raw( $value );
break;
case 'string' :
- // Fallback string -> array, or string -> object
+ // Fallback string -> array, or for string -> object
if ( is_array( $value ) || is_object( $value ) ) {
if ( !empty( $types[0] ) ) {
$next_type = array_shift( $types );
@@ -376,11 +379,11 @@ abstract class WPCOM_JSON_API_Endpoint {
break;
case 'media' :
if ( is_array( $value ) ) {
- if ( isset( $value['name'] ) ) {
+ if ( isset( $value['name'] ) && is_array( $value['name'] ) ) {
// It's a $_FILES array
// Reformat into array of $_FILES items
-
$files = array();
+
foreach ( $value['name'] as $k => $v ) {
$files[$k] = array();
foreach ( array_keys( $value ) as $file_key ) {
@@ -1009,6 +1012,7 @@ abstract class WPCOM_JSON_API_Endpoint {
$first_name = '';
$last_name = '';
$URL = $author->comment_author_url;
+ $avatar_URL = $this->api->get_avatar_url( $author );
$profile_URL = 'http://en.gravatar.com/' . md5( strtolower( trim( $email ) ) );
$nice = '';
$site_id = -1;
@@ -1019,7 +1023,11 @@ abstract class WPCOM_JSON_API_Endpoint {
$$field = str_replace( '&amp;', '&', $$field );
}
} else {
- if ( isset( $author->post_author ) ) {
+ if ( isset( $author->user_id ) && $author->user_id ) {
+ $author = $author->user_id;
+ } elseif ( isset( $author->user_email ) ) {
+ $author = $author->ID;
+ } elseif ( isset( $author->post_author ) ) {
// then $author is a Post Object.
if ( 0 == $author->post_author )
return null;
@@ -1047,10 +1055,6 @@ abstract class WPCOM_JSON_API_Endpoint {
} else {
$author = $author->post_author;
}
- } elseif ( isset( $author->user_id ) && $author->user_id ) {
- $author = $author->user_id;
- } elseif ( isset( $author->user_email ) ) {
- $author = $author->ID;
}
if ( ! isset( $ID ) ) {
@@ -1077,9 +1081,9 @@ abstract class WPCOM_JSON_API_Endpoint {
$profile_URL = 'http://en.gravatar.com/' . md5( strtolower( trim( $email ) ) );
$site_id = -1;
}
- }
- $avatar_URL = $this->api->get_avatar_url( $email );
+ $avatar_URL = $this->api->get_avatar_url( $email );
+ }
$email = $show_email ? (string) $email : false;
@@ -1153,6 +1157,7 @@ abstract class WPCOM_JSON_API_Endpoint {
'guid' => $media_item->guid,
'date' => (string) $this->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,
@@ -1421,15 +1426,18 @@ abstract class WPCOM_JSON_API_Endpoint {
if ( defined( 'REST_API_THEME_FUNCTIONS_LOADED' ) )
return;
+ // VIP context loading is handled elsewhere, so bail to prevent
+ // duplicate loading. See `switch_to_blog_and_validate_user()`
+ if ( function_exists( 'wpcom_is_vip' ) && wpcom_is_vip() ) {
+ return;
+ }
+
define( 'REST_API_THEME_FUNCTIONS_LOADED', true );
// the theme info we care about is found either within functions.php or one of the jetpack files.
$function_files = array( '/functions.php', '/inc/jetpack.compat.php', '/inc/jetpack.php', '/includes/jetpack.compat.php' );
$copy_dirs = array( get_template_directory() );
- if ( wpcom_is_vip() ) {
- $copy_dirs[] = WP_CONTENT_DIR . '/themes/vip/plugins/';
- }
// Is this a child theme? Load the child theme's functions file.
if ( get_stylesheet_directory() !== get_template_directory() && wpcom_is_child_theme() ) {
@@ -1550,6 +1558,19 @@ abstract class WPCOM_JSON_API_Endpoint {
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;
@@ -1571,26 +1592,28 @@ abstract class WPCOM_JSON_API_Endpoint {
$endpoint_path = untrailingslashit( $endpoint['path'] );
$endpoint_path_regex = str_replace( array( '%s', '%d' ), array( '([^/?&]+)', '(\d+)' ), $endpoint_path );
- if ( ! preg_match( "#^$endpoint_path_regex\$#", $path, $matches ) ) {
+ 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, $endpoint['max_version'], '<' ) ) {
- $max_version_found = $endpoint['max_version'];
+ 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 ) ) {
- return $max_version_found;
+ array_push( $matches, (object) $max_version_found );
+ return $max_version_found['version'];
}
// Otherwise, use the API version of the current request
@@ -1606,8 +1629,7 @@ abstract class WPCOM_JSON_API_Endpoint {
**/
protected function get_endpoint_path_versions() {
- // Do we already have the result of this method in the cache?
- $cache_result = get_transient( 'endpoint_path_versions' );
+ static $cache_result;
if ( ! empty ( $cache_result ) ) {
return $cache_result;
@@ -1635,11 +1657,7 @@ abstract class WPCOM_JSON_API_Endpoint {
);
}
- set_transient(
- 'endpoint_path_versions',
- $endpoint_path_versions,
- (HOUR_IN_SECONDS / 2)
- );
+ $cache_result = $endpoint_path_versions;
return $endpoint_path_versions;
}
@@ -1881,21 +1899,49 @@ abstract class WPCOM_JSON_API_Endpoint {
$attrs = $media_attrs[$index];
$insert = array();
- if ( ! empty( $attrs['title'] ) ) {
+ // Attributes: Title, Caption, Description
+
+ if ( isset( $attrs['title'] ) ) {
$insert['post_title'] = $attrs['title'];
}
- if ( ! empty( $attrs['caption'] ) )
+ if ( isset( $attrs['caption'] ) ) {
$insert['post_excerpt'] = $attrs['caption'];
+ }
- if ( ! empty( $attrs['description'] ) )
+ if ( isset( $attrs['description'] ) ) {
$insert['post_content'] = $attrs['description'];
+ }
- if ( empty( $insert ) )
- continue;
+ if ( ! empty( $insert ) ) {
+ $insert['ID'] = $media_id;
+ wp_update_post( (object) $insert );
+ }
+
+ // Attributes: Alt
- $insert['ID'] = $media_id;
- wp_update_post( (object) $insert );
+ if ( isset( $attrs['alt'] ) ) {
+ $alt = wp_strip_all_tags( $attrs['alt'], true );
+ update_post_meta( $media_id, '_wp_attachment_image_alt', $alt );
+ }
+
+ // Attributes: Artist, Album
+
+ $id3_meta = array();
+
+ foreach ( array( 'artist', 'album' ) as $key ) {
+ if ( isset( $attrs[ $key ] ) ) {
+ $id3_meta[ $key ] = wp_strip_all_tags( $attrs[ $key ], true );
+ }
+ }
+
+ if ( ! empty( $id3_meta ) ) {
+ // Before updating metadata, ensure that the item is audio
+ $item = $this->get_media_item_v1_1( $media_id );
+ if ( 0 === strpos( $item->mime_type, 'audio/' ) ) {
+ wp_update_attachment_metadata( $media_id, $id3_meta );
+ }
+ }
}
}
diff --git a/plugins/jetpack/class.json-api.php b/plugins/jetpack/class.json-api.php
index 58d1de0f..11d88864 100644
--- a/plugins/jetpack/class.json-api.php
+++ b/plugins/jetpack/class.json-api.php
@@ -174,20 +174,8 @@ class WPCOM_JSON_API {
// Normalize path and extract API version
$this->path = untrailingslashit( $this->path );
preg_match( '#^/rest/v(\d+(\.\d+)*)#', $this->path, $matches );
-
- // HACK Alert!
- // In order to workaround a bug in the iOS 5.6 release we need to handle /rest/sites/new as if it was
- // /rest/v1.1/sites/new
- if ( $this->path === '/rest/sites/new' ) {
- $this->version = '1.1';
- $this->path = '/sites/new';
- } else if ( $this->path === '/rest/users/new' ) {
- $this->version = '1.1';
- $this->path = '/users/new';
- } else {
- $this->path = substr( $this->path, strlen( $matches[0] ) );
- $this->version = $matches[1];
- }
+ $this->path = substr( $this->path, strlen( $matches[0] ) );
+ $this->version = $matches[1];
$allowed_methods = array( 'GET', 'POST' );
$four_oh_five = false;
diff --git a/plugins/jetpack/class.photon.php b/plugins/jetpack/class.photon.php
index c5627fef..1f6cc4c4 100644
--- a/plugins/jetpack/class.photon.php
+++ b/plugins/jetpack/class.photon.php
@@ -91,7 +91,7 @@ class Jetpack_Photon {
public static function parse_images_from_html( $content ) {
$images = array();
- if ( preg_match_all( '#(?:<a[^>]+?href=["|\'](?P<link_url>[^\s]+?)["|\'][^>]*?>\s*)?(?P<img_tag><img[^>]+?src=["|\'](?P<img_url>[^\s]+?)["|\'].*?>){1}(?:\s*</a>)?#is', $content, $images ) ) {
+ if ( preg_match_all( '#(?:<a[^>]+?href=["|\'](?P<link_url>[^\s]+?)["|\'][^>]*?>\s*)?(?P<img_tag><img[^>]*?\s+?src=["|\'](?P<img_url>[^\s]+?)["|\'].*?>){1}(?:\s*</a>)?#is', $content, $images ) ) {
foreach ( $images as $key => $unused ) {
// Simplify the output as much as possible, mostly for confirming test results.
if ( is_numeric( $key ) && $key > 0 )
diff --git a/plugins/jetpack/composer.json b/plugins/jetpack/composer.json
index b683b6f7..53f1e83f 100644
--- a/plugins/jetpack/composer.json
+++ b/plugins/jetpack/composer.json
@@ -1,7 +1,7 @@
{
"name" : "automattic/jetpack",
"description": "Jetpack supercharges your self‑hosted WordPress site with the awesome cloud power of WordPress.com",
- "homepage" : "http://jetpack.me/",
+ "homepage" : "http://jetpack.com/",
"type" : "wordpress-plugin",
"license" : "GPL-2.0+",
"require" : {
diff --git a/plugins/jetpack/css/jetpack-admin.css.map b/plugins/jetpack/css/jetpack-admin.css.map
index d61736ac..51851f94 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/typography/_variables.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.scss","../scss/pages/_manage.scss","../scss/templates/_nux-landing-2015.scss","../scss/_utilities/_clearings.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/typography/_variables.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.scss","../scss/pages/_manage.scss","../scss/templates/_nux-landing-2015.scss","../scss/_utilities/_clearings.scss"],"names":[],"mappings":"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","file":"jetpack-admin.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-rtl.css b/plugins/jetpack/css/jetpack-rtl.css
index ee6dbb75..23523a3f 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-like,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-like.liked,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}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{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}div.jp-carousel-buttons a.jp-carousel-like{background-position:5px 5px;padding-right:24px!important}div.jp-carousel-buttons a.jp-carousel-like:hover{background-position:5px -15px}@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-like,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-like.liked,.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-like,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-like:hover{background-position:5px -15px;padding-right:23px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-position:5px -36px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-like.liked{background-position:5px 5px}.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%;padding:1px 2px}.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-like,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-like.liked,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}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{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}div.jp-carousel-buttons a.jp-carousel-like{background-position:5px 5px;padding-right:24px!important}div.jp-carousel-buttons a.jp-carousel-like:hover{background-position:5px -15px}@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-like,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-like.liked,.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-like,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-like:hover{background-position:5px -15px;padding-right:23px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-position:5px -36px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-like.liked{background-position:5px 5px}.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
diff --git a/plugins/jetpack/css/jetpack.css b/plugins/jetpack/css/jetpack.css
index 6a6033a5..66f4e1e1 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-like,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-like.liked,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}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{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}div.jp-carousel-buttons a.jp-carousel-like{background-position:5px 5px;padding-left:24px!important}div.jp-carousel-buttons a.jp-carousel-like:hover{background-position:5px -15px}@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-like,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-like.liked,.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-like,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-like:hover{background-position:5px -15px;padding-left:23px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-position:5px -36px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-like.liked{background-position:5px 5px}.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%;padding:1px 2px}.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-like,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-like.liked,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}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{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}div.jp-carousel-buttons a.jp-carousel-like{background-position:5px 5px;padding-left:24px!important}div.jp-carousel-buttons a.jp-carousel-like:hover{background-position:5px -15px}@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-like,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-like.liked,.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-like,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-like:hover{background-position:5px -15px;padding-left:23px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-position:5px -36px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-like.liked{background-position:5px 5px}.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
diff --git a/plugins/jetpack/functions.opengraph.php b/plugins/jetpack/functions.opengraph.php
index 296762a2..a8715c5f 100644
--- a/plugins/jetpack/functions.opengraph.php
+++ b/plugins/jetpack/functions.opengraph.php
@@ -337,18 +337,13 @@ function jetpack_og_get_image( $width = 200, $height = 200, $max_images = 4 ) {
}
}
- // Third fall back, Site Icon
- if ( empty( $image ) && ( function_exists( 'jetpack_has_site_icon' ) && jetpack_has_site_icon() ) ) {
- $image['src'] = jetpack_site_icon_url( null, '512' );
+ // Third fall back, Core Site Icon. Added in WP 4.3.
+ if ( empty( $image ) && ( function_exists( 'has_site_icon') && has_site_icon() ) ) {
+ $image['src'] = get_site_icon_url( 512 );
$image['width'] = '512';
$image['height'] = '512';
}
- // Fourth fall back, Core Site Icon. Added in WP 4.3.
- if ( empty( $image ) && ( function_exists( 'has_site_icon') && has_site_icon() ) ) {
- $image['src'] = get_site_icon_url( null, '512' );
- }
-
// Finally fall back, blank image
if ( empty( $image ) ) {
/**
diff --git a/plugins/jetpack/functions.photon.php b/plugins/jetpack/functions.photon.php
index 4566e311..066eb6f7 100644
--- a/plugins/jetpack/functions.photon.php
+++ b/plugins/jetpack/functions.photon.php
@@ -39,7 +39,7 @@ function jetpack_photon_url( $image_url, $args = array(), $scheme = null ) {
* @param array|string $args Array of Photon arguments.
* @param string|null $scheme Image scheme. Default to null.
*/
- $image_url = apply_filters( 'jetpack_photon_pre_image_url', $image_url, $args, $scheme );
+ $image_url = apply_filters( 'jetpack_photon_pre_image_url', $image_url, $args, $scheme );
/**
* Filter the original Photon image parameters before Photon is applied to an image.
*
@@ -51,7 +51,7 @@ function jetpack_photon_url( $image_url, $args = array(), $scheme = null ) {
* @param string $image_url Image URL.
* @param string|null $scheme Image scheme. Default to null.
*/
- $args = apply_filters( 'jetpack_photon_pre_args', $args, $image_url, $scheme );
+ $args = apply_filters( 'jetpack_photon_pre_args', $args, $image_url, $scheme );
if ( empty( $image_url ) )
return $image_url;
@@ -62,6 +62,10 @@ function jetpack_photon_url( $image_url, $args = array(), $scheme = null ) {
if ( ! is_array( $image_url_parts ) || empty( $image_url_parts['host'] ) || empty( $image_url_parts['path'] ) )
return $image_url;
+ if ( isset( $image_url_parts['scheme'] ) && 'https' == $image_url_parts['scheme'] ) {
+ $args['ssl'] = '1';
+ }
+
if ( is_array( $args ) ){
// Convert values that are arrays into strings
foreach ( $args as $arg => $value ) {
diff --git a/plugins/jetpack/jetpack.php b/plugins/jetpack/jetpack.php
index a22a6257..b6f4f945 100644
--- a/plugins/jetpack/jetpack.php
+++ b/plugins/jetpack/jetpack.php
@@ -2,11 +2,11 @@
/*
* Plugin Name: Jetpack by WordPress.com
- * Plugin URI: http://jetpack.me
+ * Plugin URI: http://jetpack.com
* Description: Bring the power of the WordPress.com cloud to your self-hosted WordPress. Jetpack enables you to connect your blog to a WordPress.com account to use the powerful features normally only available to WordPress.com users.
* Author: Automattic
- * Version: 3.9.1
- * Author URI: http://jetpack.me
+ * Version: 3.9.6
+ * Author URI: http://jetpack.com
* License: GPL2+
* Text Domain: jetpack
* Domain Path: /languages/
@@ -14,7 +14,7 @@
define( 'JETPACK__MINIMUM_WP_VERSION', '4.3' );
-define( 'JETPACK__VERSION', '3.9.1' );
+define( 'JETPACK__VERSION', '3.9.6' );
define( 'JETPACK_MASTER_USER', true );
define( 'JETPACK__API_VERSION', 1 );
define( 'JETPACK__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
@@ -25,6 +25,7 @@ defined( 'JETPACK_CLIENT__HTTPS' ) or define( 'JETPACK_CLIENT__HTTPS',
defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) or define( 'JETPACK__GLOTPRESS_LOCALES_PATH', JETPACK__PLUGIN_DIR . 'locales.php' );
defined( 'JETPACK__API_BASE' ) or define( 'JETPACK__API_BASE', 'https://jetpack.wordpress.com/jetpack.' );
defined( 'JETPACK_PROTECT__API_HOST' ) or define( 'JETPACK_PROTECT__API_HOST', 'https://api.bruteprotect.com/' );
+defined( 'JETPACK__WPCOM_JSON_API_HOST' ) or define( 'JETPACK__WPCOM_JSON_API_HOST', 'public-api.wordpress.com' );
// @todo: Abstract out the admin functions, and only include them if is_admin()
// @todo: Only include things like class.jetpack-sync.php if we're connected.
@@ -49,6 +50,7 @@ require_once( JETPACK__PLUGIN_DIR . 'functions.gallery.php' );
require_once( JETPACK__PLUGIN_DIR . 'require-lib.php' );
require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-autoupdate.php' );
require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-tracks.php' );
+require_once( JETPACK__PLUGIN_DIR . 'modules/module-headings.php');
if ( is_admin() ) {
require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-admin.php' );
@@ -71,7 +73,7 @@ add_filter( 'is_jetpack_site', '__return_true' );
/**
* Add an easy way to photon-ize a URL that is safe to call even if Jetpack isn't active.
*
- * See: http://jetpack.me/2013/07/11/photon-and-themes/
+ * See: http://jetpack.com/2013/07/11/photon-and-themes/
*/
if ( Jetpack::is_module_active( 'photon' ) ) {
add_filter( 'jetpack_photon_url', 'jetpack_photon_url', 10, 3 );
diff --git a/plugins/jetpack/json-endpoints.php b/plugins/jetpack/json-endpoints.php
index f119bafd..a735e04a 100644
--- a/plugins/jetpack/json-endpoints.php
+++ b/plugins/jetpack/json-endpoints.php
@@ -33,6 +33,7 @@ require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-taxonomies-endpoin
require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-taxonomy-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-comments-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-media-endpoint.php' );
+require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-post-types-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-posts-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-roles-endpoint.php' );
require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-users-endpoint.php' );
@@ -113,7 +114,7 @@ new WPCOM_JSON_API_GET_Site_Endpoint( array(
new WPCOM_JSON_API_GET_Post_Counts_V1_1_Endpoint( array(
'description' => 'Get number of posts in the post type groups by post status',
- 'group' => '__do_not_document',
+ 'group' => 'sites',
'stat' => 'sites:X:post-counts:X',
'force' => 'wpcom',
'method' => 'GET',
@@ -181,7 +182,7 @@ new WPCOM_JSON_API_List_Page_Templates_Endpoint( array(
new WPCOM_JSON_API_List_Post_Types_Endpoint( array (
'description' => 'Get a list of post types available for a site.',
- 'group' => '__do_not_document',
+ 'group' => 'sites',
'stat' => 'sites:X:post-types',
'method' => 'GET',
@@ -1213,6 +1214,7 @@ new WPCOM_JSON_API_Get_Media_v1_1_Endpoint( array(
'ID' => '(int) The ID of the media item',
'date' => '(ISO 8601 datetime) The date the media was uploaded',
'post_ID' => '(int) ID of the post this media is attached to',
+ 'author_ID' => '(int) ID of the user who uploaded the media',
'URL' => '(string) URL to the file',
'guid' => '(string) Unique identifier',
'file' => '(string) Filename',
@@ -1377,6 +1379,7 @@ new WPCOM_JSON_API_Update_Media_v1_1_Endpoint( array(
'ID' => '(int) The ID of the media item',
'date' => '(ISO 8601 datetime) The date the media was uploaded',
'post_ID' => '(int) ID of the post this media is attached to',
+ 'author_ID' => '(int) ID of the user who uploaded the media',
'URL' => '(string) URL to the file',
'guid' => '(string) Unique identifier',
'file' => '(string) File name',
@@ -1459,6 +1462,7 @@ new WPCOM_JSON_API_Delete_Media_v1_1_Endpoint( array(
'ID' => '(int) The ID of the media item',
'date' => '(ISO 8601 datetime) The date the media was uploaded',
'post_ID' => '(int) ID of the post this media is attached to',
+ 'author_ID' => '(int) ID of the user who uploaded the media',
'URL' => '(string) URL to the file',
'guid' => '(string) Unique identifier',
'file' => '(string) File name',
@@ -1552,7 +1556,6 @@ new WPCOM_JSON_API_Update_Comment_Endpoint( array(
),
'pass_wpcom_user_details' => true,
- 'can_use_user_details_instead_of_blog_membership' => true,
'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/posts/843/replies/new/',
'example_request_data' => array(
@@ -1584,7 +1587,6 @@ new WPCOM_JSON_API_Update_Comment_Endpoint( array(
),
'pass_wpcom_user_details' => true,
- 'can_use_user_details_instead_of_blog_membership' => true,
'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/comments/29/replies/new',
'example_request_data' => array(
@@ -1688,7 +1690,7 @@ new WPCOM_JSON_API_Get_Taxonomies_Endpoint( array(
'search' => '(string) Limit response to include only categories whose names or slugs match the provided search query.',
'order' => array(
'ASC' => 'Return categories in ascending order.',
- 'DESC' => 'Return categories in decending order.',
+ 'DESC' => 'Return categories in descending order.',
),
'order_by' => array(
'name' => 'Order by the name of each category.',
@@ -1718,7 +1720,7 @@ new WPCOM_JSON_API_Get_Taxonomies_Endpoint( array(
'search' => '(string) Limit response to include only tags whose names or slugs match the provided search query.',
'order' => array(
'ASC' => 'Return tags in ascending order.',
- 'DESC' => 'Return tags in decending order.',
+ 'DESC' => 'Return tags in descending order.',
),
'order_by' => array(
'name' => 'Order by the name of each tag.',
@@ -1965,7 +1967,7 @@ new WPCOM_JSON_API_List_Users_Endpoint( array(
'type' => "(string) Specify the post type to query authors for. Only works when combined with the `authors_only` flag. Defaults to 'post'. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
'search' => '(string) Find matching users.',
'search_columns' => "(array) Specify which columns to check for matching users. Can be any of 'ID', 'user_login', 'user_email', 'user_url', 'user_nicename', and 'display_name'. Only works when combined with `search` parameter.",
- 'role' => '(string) Specify a specific user role to fetch.',
+ 'role' => '(string) Specify a specific user role to fetch.'
),
'response_format' => array(
@@ -2096,146 +2098,6 @@ new WPCOM_JSON_API_Site_User_Endpoint( array(
new WPCOM_JSON_API_Site_User_Endpoint( array(
'description' => 'Get details of a user of a site by login.',
- 'group' => '__do_not_document', //'users'
- 'stat' => 'sites:1:user',
- 'method' => 'GET',
- 'path' => '/sites/%s/users/login:%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$user_id' => '(string) User login',
- ),
- 'response_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/user/login:binarysmash',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_response' => '{
- "ID": 18342963,
- "login": "binarysmash"
- "email": false,
- "name": "binarysmash",
- "URL": "http:\/\/binarysmash.wordpress.com",
- "avatar_URL": "http:\/\/0.gravatar.com\/avatar\/a178ebb1731d432338e6bb0158720fcc?s=96&d=identicon&r=G",
- "profile_URL": "http:\/\/en.gravatar.com\/binarysmash",
- "roles": [ "administrator" ]
- }'
-) );
-
-new WPCOM_JSON_API_Site_User_Endpoint( array(
- 'description' => 'Update details of a users of a site.',
- 'group' => '__do_not_document', //'users'
- 'stat' => 'sites:1:user',
- 'method' => 'POST',
- 'path' => '/sites/%s/users/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$user_id' => '(int) User ID',
- ),
- 'request_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
- 'response_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/user/23',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'roles' => array(
- array(
- 'administrator',
- )
- ),
- 'first_name' => 'Rocco',
- 'last_name' => 'Tripaldi',
- )
- ),
- 'example_response' => '{
- "ID": 18342963,
- "login": "binarysmash"
- "email": false,
- "name": "binarysmash",
- "URL": "http:\/\/binarysmash.wordpress.com",
- "avatar_URL": "http:\/\/0.gravatar.com\/avatar\/a178ebb1731d432338e6bb0158720fcc?s=96&d=identicon&r=G",
- "profile_URL": "http:\/\/en.gravatar.com\/binarysmash",
- "roles": [ "administrator" ]
- }'
-) );
-
-new WPCOM_JSON_API_Update_Invites_Endpoint( array(
- 'description' => 'Delete an invite for a user to join a site.',
- 'group' => '__do_not_document',
- 'stat' => 'invites:1:delete',
- 'method' => 'POST',
- 'path' => '/sites/%s/invites/%s/delete',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$invite_id' => '(string) The ID of the invite'
- ),
- 'response_format' => array(
- 'invite_key' => '(string) Identifier for the deleted invite',
- 'deleted' => '(bool) Was the invitation removed?'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/invites/123523562/delete',
-
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- ),
-) );
-
-new WPCOM_JSON_API_Update_Invites_Endpoint( array(
- 'description' => 'Resend invitation for a user to join a site.',
- 'group' => '__do_not_document',
- 'stat' => 'invites:1',
- 'method' => 'POST',
- 'path' => '/sites/%s/invites/%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$invite_id' => '(string) The ID of the invite'
- ),
- 'response_format' => array(
- 'result' => '(bool) Was the invitation resent?'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/invites/123523562',
-
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- ),
-) );
-
-new WPCOM_JSON_API_Site_User_Endpoint( array(
- 'description' => 'Get details of a user of a site by ID.',
- 'group' => 'users',
- 'stat' => 'sites:1:user',
- 'method' => 'GET',
- 'path' => '/sites/%s/users/%d',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID or domain.',
- '$user_id' => '(int) The user\'s ID.',
- ),
- 'response_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/user/23',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_response' => '{
- "ID": 18342963,
- "login": "binarysmash"
- "email": false,
- "name": "binarysmash",
- "URL": "http:\/\/binarysmash.wordpress.com",
- "avatar_URL": "http:\/\/0.gravatar.com\/avatar\/a178ebb1731d432338e6bb0158720fcc?s=96&d=identicon&r=G",
- "profile_URL": "http:\/\/en.gravatar.com\/binarysmash",
- "roles": [ "administrator" ]
- }'
-) );
-
-new WPCOM_JSON_API_Site_User_Endpoint( array(
- 'description' => 'Get details of a user of a site by login.',
'group' => 'users',
'stat' => 'sites:1:user',
'method' => 'GET',
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-endpoint.php
index 5f26a7dc..10d8ae2d 100644
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-endpoint.php
+++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-endpoint.php
@@ -7,7 +7,7 @@ class WPCOM_JSON_API_Delete_Media_Endpoint extends WPCOM_JSON_API_Endpoint {
return $blog_id;
}
- if ( !current_user_can( 'upload_files', $media_id ) ) {
+ if ( ! current_user_can( 'delete_post', $media_id ) ) {
return new WP_Error( 'unauthorized', 'User cannot view media', 403 );
}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-v1-1-endpoint.php
index 10c639ed..5675a3fa 100644
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-v1-1-endpoint.php
+++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-v1-1-endpoint.php
@@ -7,7 +7,7 @@ class WPCOM_JSON_API_Delete_Media_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
return $blog_id;
}
- if ( ! current_user_can( 'upload_files', $media_id ) ) {
+ if ( ! current_user_can( 'delete_post', $media_id ) ) {
return new WP_Error( 'unauthorized', 'User is not authorized delete media', 403 );
}
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 2054e1bf..ecca8774 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
@@ -18,6 +18,7 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
'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/',
'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',
);
@@ -55,7 +56,17 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
global $wpdb, $wp_version;
- $response_format = self::$site_format;
+ // 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 );
$is_user_logged_in = is_user_logged_in();
@@ -83,6 +94,13 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
}
}
foreach ( array_keys( $response_format ) as $key ) {
+
+ // refactoring to change parameter to locale in 1.2
+ if ( $lang_or_locale = $this->process_locale( $key, $is_user_logged_in ) ) {
+ $response[$key] = $lang_or_locale;
+ continue;
+ }
+
switch ( $key ) {
case 'ID' :
$response[$key] = $blog_id;
@@ -124,10 +142,6 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
if ( $is_user_logged_in )
$response[$key] = (int) $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish'");
break;
- case 'lang' :
- if ( $is_user_logged_in )
- $response[$key] = (string) get_bloginfo( 'language' );
- break;
case 'icon' :
if ( function_exists( 'blavatar_domain' ) && function_exists( 'blavatar_exists' ) && function_exists( 'blavatar_url' ) ) {
$domain = blavatar_domain( home_url() );
@@ -138,7 +152,7 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
);
} else {
// This is done so that we can access the updated blavatar on .com via the /me/sites endpoint
- if( is_jetpack_site() ) {
+ if( $is_jetpack ) {
$site_icon_url = get_option( 'jetpack_site_icon_url' );
if( $site_icon_url ) {
@@ -279,6 +293,11 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
$publicize_permanently_disabled = is_publicize_permanently_disabled( $blog_id );
}
+ $frame_nonce = false;
+ if ( ! $is_jetpack ) {
+ $frame_nonce = wpcom_get_frame_nonce();
+ }
+
$response[$key] = array(
'timezone' => (string) get_option( 'timezone_string' ),
'gmt_offset' => (float) get_option( 'gmt_offset' ),
@@ -316,6 +335,7 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
'created_at' => ! empty( $registered_date ) ? $this->format_date( $registered_date ) : '0000-00-00T00:00:00+00:00',
'wordads' => $wordads,
'publicize_permanently_disabled' => $publicize_permanently_disabled,
+ 'frame_nonce' => $frame_nonce,
);
if ( 'page' === get_option( 'show_on_front' ) ) {
@@ -377,7 +397,13 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
if ( ! current_user_can( 'edit_posts' ) )
unset( $response[$key] );
break;
- case 'meta' :
+ case 'jetpack_modules':
+ if ( ! $is_jetpack || ! is_user_member_of_blog() ) {
+ break;
+ }
+ $response[$key] = array_values( Jetpack_Options::get_option( 'active_modules', array() ) );
+ break;
+ case 'meta':
/**
* Filters the URL scheme used when querying your site's REST API endpoint.
*
@@ -403,25 +429,30 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
}
if ( $is_jetpack ) {
-
- // Add the updates only make them visible if the user has manage options permission.
- $jetpack_update = (array) get_option( 'jetpack_updates' );
- if ( ! empty( $jetpack_update ) && current_user_can( 'manage_options' ) ) {
-
- if ( isset( $jetpack_update['wp_version'] ) ) {
- // In previous version of Jetpack 3.4, 3.5, 3.6 we synced the wp_version into to jetpack_updates
- unset( $jetpack_update['wp_version'] );
- }
-
- if ( isset( $jetpack_update['site_is_version_controlled'] ) ) {
- // In previous version of Jetpack 3.4, 3.5, 3.6 we synced the site_is_version_controlled into to jetpack_updates
- unset( $jetpack_update['site_is_version_controlled'] );
+ // Add the updates only make them visible if the user has manage options permission and the site is the main site of the network
+ if ( current_user_can( 'manage_options' ) ) {
+ 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 ) {
+ $jetpack_update = (array) get_option( 'jetpack_updates' );
+ if ( ! empty( $jetpack_update ) ) {
+ if ( isset( $jetpack_update['wp_version'] ) ) {
+ // In previous version of Jetpack 3.4, 3.5, 3.6 we synced the wp_version into to jetpack_updates
+ unset( $jetpack_update['wp_version'] );
+ }
+ if ( isset( $jetpack_update['site_is_version_controlled'] ) ) {
+ // In previous version of Jetpack 3.4, 3.5, 3.6 we synced the site_is_version_controlled into to jetpack_updates
+ unset( $jetpack_update['site_is_version_controlled'] );
+ }
+ $response['updates'] = (array) $jetpack_update;
+ }
+ }
}
-
- $response['updates'] = (array) $jetpack_update;
}
-
- add_filter( 'option_stylesheet', 'fix_theme_location' );
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ add_filter( 'option_stylesheet', 'fix_theme_location' );
+ }
if ( 'https' !== parse_url( $site_url, PHP_URL_SCHEME ) ) {
remove_filter( 'set_url_scheme', array( $this, 'force_http' ), 10, 3 );
}
@@ -431,6 +462,18 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
}
+ protected function process_locale( $key, $is_user_logged_in ) {
+ if ( $is_user_logged_in && 'lang' == $key ) {
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ if ( ! is_jetpack_site() ) {
+ return (string) get_blog_lang_code();
+ }
+ }
+ return (string) get_bloginfo( 'language' );
+ }
+ return false;
+ }
+
function force_http( $url, $scheme, $orig_scheme ) {
return preg_replace('/^https:\/\//', 'http://', $url, 1 );
}
@@ -497,78 +540,3 @@ class WPCOM_JSON_API_List_Page_Templates_Endpoint extends WPCOM_JSON_API_Endpoin
return $response;
}
}
-
-class WPCOM_JSON_API_List_Post_Types_Endpoint extends WPCOM_JSON_API_Endpoint {
- static $post_type_keys_to_include = array(
- 'name' => 'name',
- 'label' => 'label',
- 'labels' => 'labels',
- 'description' => 'description',
- 'map_meta_cap' => 'map_meta_cap',
- 'cap' => 'capabilities',
- );
-
- // /sites/%s/post-types -> $blog_id
- function callback( $path = '', $blog_id = 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();
- }
-
- $args = $this->query_args();
- $queryable_only = isset( $args['api_queryable'] ) && $args['api_queryable'];
-
- // Get a list of available post types
- $post_types = get_post_types( array( 'public' => true ) );
- $formatted_post_type_objects = array();
-
- // Retrieve post type object for each post type
- foreach ( $post_types as $post_type ) {
- // Skip non-queryable if filtering on queryable only
- $is_queryable = $this->is_post_type_allowed( $post_type );
- if ( $queryable_only && ! $is_queryable ) {
- continue;
- }
-
- $post_type_object = get_post_type_object( $post_type );
- $formatted_post_type_object = array();
-
- // Include only the desired keys in the response
- foreach ( self::$post_type_keys_to_include as $key => $value ) {
- $formatted_post_type_object[ $value ] = $post_type_object->{ $key };
- }
- $formatted_post_type_object['api_queryable'] = $is_queryable;
- $formatted_post_type_object['supports'] = get_all_post_type_supports( $post_type );
- if ( $this->post_type_supports_tags( $post_type ) ) {
- $formatted_post_type_object['supports']['tags'] = true;
- }
- $formatted_post_type_objects[] = $formatted_post_type_object;
- }
-
- return array(
- 'found' => count( $formatted_post_type_objects ),
- 'post_types' => $formatted_post_type_objects
- );
- }
-
- function post_type_supports_tags( $post_type ) {
- if ( in_array( 'post_tag', get_object_taxonomies( $post_type ) ) ) {
- return true;
- }
-
- // the featured content module adds post_tag support
- // to the post types that are registered for it
- // however it does so in a way that isn't available
- // to get_object_taxonomies
- $featured_content = get_theme_support( 'featured-content' );
- if ( ! $featured_content || empty( $featured_content[0] ) || empty( $featured_content[0]['post_types'] ) ) {
- return false;
- }
-
- return in_array( $post_type, $featured_content[0]['post_types'] );
- }
-}
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
new file mode 100644
index 00000000..6f693e91
--- /dev/null
+++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php
@@ -0,0 +1,52 @@
+<?php
+/*
+ * WARNING: This file is distributed verbatim in Jetpack.
+ * There should be nothing WordPress.com specific in this file.
+ *
+ * @hide-in-jetpack
+ */
+
+class WPCOM_JSON_API_GET_Site_V1_2_Endpoint extends WPCOM_JSON_API_GET_Site_Endpoint {
+
+ public static $site_format = array(
+ 'ID' => '(int) Site ID',
+ 'name' => '(string) Title of site',
+ 'description' => '(string) Tagline or description of site',
+ 'URL' => '(string) Full URL to the site',
+ 'jetpack' => '(bool) Whether the site is a Jetpack site or not',
+ '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',
+ 'icon' => '(array) An array of icon formats for the site',
+ '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',
+ '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/',
+ '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-list-post-types-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php
new file mode 100644
index 00000000..e7521abe
--- /dev/null
+++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php
@@ -0,0 +1,84 @@
+<?php
+
+class WPCOM_JSON_API_List_Post_Types_Endpoint extends WPCOM_JSON_API_Endpoint {
+ static $post_type_keys_to_include = array(
+ 'name' => 'name',
+ 'label' => 'label',
+ 'labels' => 'labels',
+ 'description' => 'description',
+ 'map_meta_cap' => 'map_meta_cap',
+ 'cap' => 'capabilities',
+ );
+
+ // /sites/%s/post-types -> $blog_id
+ function callback( $path = '', $blog_id = 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();
+ }
+
+ $args = $this->query_args();
+
+ // API localization occurs after the initial post types have been
+ // registered, so re-register if localizing response
+ if ( apply_filters( 'rest_api_localize_response', false ) ) {
+ create_initial_post_types();
+ }
+
+ $queryable_only = isset( $args['api_queryable'] ) && $args['api_queryable'];
+
+ // Get a list of available post types
+ $post_types = get_post_types( array( 'public' => true ) );
+ $formatted_post_type_objects = array();
+
+ // Retrieve post type object for each post type
+ foreach ( $post_types as $post_type ) {
+ // Skip non-queryable if filtering on queryable only
+ $is_queryable = $this->is_post_type_allowed( $post_type );
+ if ( $queryable_only && ! $is_queryable ) {
+ continue;
+ }
+
+ $post_type_object = get_post_type_object( $post_type );
+ $formatted_post_type_object = array();
+
+ // Include only the desired keys in the response
+ foreach ( self::$post_type_keys_to_include as $key => $value ) {
+ $formatted_post_type_object[ $value ] = $post_type_object->{ $key };
+ }
+ $formatted_post_type_object['api_queryable'] = $is_queryable;
+ $formatted_post_type_object['supports'] = get_all_post_type_supports( $post_type );
+ if ( $this->post_type_supports_tags( $post_type ) ) {
+ $formatted_post_type_object['supports']['tags'] = true;
+ }
+
+ $formatted_post_type_objects[] = $formatted_post_type_object;
+ }
+
+ return array(
+ 'found' => count( $formatted_post_type_objects ),
+ 'post_types' => $formatted_post_type_objects
+ );
+ }
+
+ function post_type_supports_tags( $post_type ) {
+ if ( in_array( 'post_tag', get_object_taxonomies( $post_type ) ) ) {
+ return true;
+ }
+
+ // the featured content module adds post_tag support
+ // to the post types that are registered for it
+ // however it does so in a way that isn't available
+ // to get_object_taxonomies
+ $featured_content = get_theme_support( 'featured-content' );
+ if ( ! $featured_content || empty( $featured_content[0] ) || empty( $featured_content[0]['post_types'] ) ) {
+ return false;
+ }
+
+ return in_array( $post_type, $featured_content[0]['post_types'] );
+ }
+}
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 744eaf0a..9dc1a1fa 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
@@ -316,13 +316,13 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
$response[$key] = (int) $this->api->post_like_count( $blog_id, $post->ID );
break;
case 'i_like' :
- $response[$key] = (int) $this->api->is_liked( $blog_id, $post->ID );
+ $response[$key] = (bool) $this->api->is_liked( $blog_id, $post->ID );
break;
case 'is_reblogged':
- $response[$key] = (int) $this->api->is_reblogged( $blog_id, $post->ID );
+ $response[$key] = (bool) $this->api->is_reblogged( $blog_id, $post->ID );
break;
case 'is_following':
- $response[$key] = (int) $this->api->is_following( $blog_id );
+ $response[$key] = (bool) $this->api->is_following( $blog_id );
break;
case 'global_ID':
$response[$key] = (string) $this->api->add_global_ID( $blog_id, $post->ID );
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 b5f3cf8e..30783d14 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
@@ -50,6 +50,7 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
'metadata' => '(array) Array of post metadata keys and values. All unprotected meta keys are available by default for read requests. Both unprotected and protected meta keys are available for authenticated requests with access. Protected meta keys can be made available with the <code>rest_api_allowed_public_metadata</code> filter.',
'meta' => '(object) API result meta data',
'capabilities' => '(object) List of post-specific permissions for the user; publish_post, edit_post, delete_post',
+ 'revisions' => '(array) List of post revision IDs. Only available for posts retrieved with context=edit.',
'other_URLs' => '(object) List of URLs for this post. Permalink and slug suggestions.',
);
@@ -299,13 +300,13 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
$response[$key] = (int) $this->api->post_like_count( $blog_id, $post->ID );
break;
case 'i_like' :
- $response[$key] = (int) $this->api->is_liked( $blog_id, $post->ID );
+ $response[$key] = (bool) $this->api->is_liked( $blog_id, $post->ID );
break;
case 'is_reblogged':
- $response[$key] = (int) $this->api->is_reblogged( $blog_id, $post->ID );
+ $response[$key] = (bool) $this->api->is_reblogged( $blog_id, $post->ID );
break;
case 'is_following':
- $response[$key] = (int) $this->api->is_following( $blog_id );
+ $response[$key] = (bool) $this->api->is_following( $blog_id );
break;
case 'global_ID':
$response[$key] = (string) $this->api->add_global_ID( $blog_id, $post->ID );
@@ -475,6 +476,20 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
case 'capabilities' :
$response[$key] = $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;
+ }
+
+ $response[$key] = $revisions;
+
+ break;
case 'other_URLs' :
$other_urls = array();
@@ -651,8 +666,8 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
/**
* Get extra post permalink suggestions
- * @param int $postID
- * @param string $title
+ * @param int $postID
+ * @param string $title
* @return array array of permalink suggestions: 'permalink_URL', 'suggested_slug'
*/
function get_post_permalink_suggestions( $postID, $title ) {
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 8b2dc15f..e497caff 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
@@ -256,6 +256,10 @@ class WPCOM_JSON_API_Update_Sharing_Buttons_Endpoint extends WPCOM_JSON_API_Shar
$all_buttons = $this->sharing_service->get_all_services_blog();
+ if ( ! isset( $input['sharing_buttons'] ) ) {
+ $input['sharing_buttons'] = array();
+ }
+
// We do a first pass of all buttons to verify that no validation
// issues exist before continuing to update
foreach ( $input['sharing_buttons'] as $button ) {
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 7588da17..d0218514 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
@@ -83,12 +83,30 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
*/
public function get_settings_response() {
- $response_format = self::$site_format;
+ // Allow update in later versions
+ /**
+ * Filter the structure of site settings to return.
+ *
+ * @module json-api
+ *
+ * @since 3.9.3
+ *
+ * @param array $site_format Data structure.
+ */
+ $response_format = apply_filters( 'site_settings_site_format', self::$site_format );
+
$blog_id = (int) $this->api->get_blog_id_for_output();
/** This filter is documented in class.json-api-endpoints.php */
$is_jetpack = true === apply_filters( 'is_jetpack_site', false, $blog_id );
foreach ( array_keys( $response_format ) as $key ) {
+
+ // refactoring to change lang parameter to locale in 1.2
+ if ( $lang_or_locale = $this->get_locale( $key ) ) {
+ $response[$key] = $lang_or_locale;
+ continue;
+ }
+
switch ( $key ) {
case 'ID' :
$response[$key] = $blog_id;
@@ -102,9 +120,6 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
case 'URL' :
$response[$key] = (string) home_url();
break;
- case 'lang' :
- $response[$key] = (string) get_bloginfo( 'language' );
- break;
case 'settings':
$jetpack_relatedposts_options = Jetpack_Options::get_option( 'relatedposts' );
@@ -131,7 +146,7 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
$holiday_snow = (bool) get_option( jetpack_holiday_snow_option_name() );
}
- $response[$key] = array(
+ $response[ $key ] = array(
// also exists as "options"
'admin_url' => get_admin_url(),
@@ -180,6 +195,18 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
'holidaysnow' => $holiday_snow
);
+ //allow future versions of this endpoint to support additional settings keys
+ /**
+ * Filter the current site setting in the returned response.
+ *
+ * @module json-api
+ *
+ * @since 3.9.3
+ *
+ * @param mixed $response_item A single site setting.
+ */
+ $response[ $key ] = apply_filters( 'site_settings_endpoint_get', $response[ $key ] );
+
if ( class_exists( 'Sharing_Service' ) ) {
$ss = new Sharing_Service();
$sharing = $ss->get_global_options();
@@ -203,6 +230,19 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
}
+ protected function get_locale( $key ) {
+ if ( 'lang' == $key ) {
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ return (string) get_blog_lang_code();
+ } else {
+ return get_locale();
+ }
+ }
+
+ return false;
+ }
+
+
/**
* Updates site settings for authorized users
*
@@ -348,8 +388,25 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
}
break;
- // no worries, we've already whitelisted and casted arguments above
+
default:
+ //allow future versions of this endpoint to support additional settings keys
+ if ( has_filter( 'site_settings_endpoint_update_' . $key ) ) {
+ /**
+ * Filter current site setting value to be updated.
+ *
+ * @module json-api
+ *
+ * @since 3.9.3
+ *
+ * @param mixed $response_item A single site setting value.
+ */
+ $value = apply_filters( 'site_settings_endpoint_update_' . $key, $value );
+ $updated[ $key ] = $value;
+ continue;
+ }
+
+ // no worries, we've already whitelisted and casted arguments above
if ( update_option( $key, $value ) ) {
$updated[ $key ] = $value;
}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-2-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-2-endpoint.php
new file mode 100644
index 00000000..eac28c00
--- /dev/null
+++ b/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-2-endpoint.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * WARNING: This file is distributed verbatim in Jetpack.
+ * There should be nothing WordPress.com specific in this file.
+ *
+ * @hide-in-jetpack
+ * @autounit api site-settings
+ */
+
+class WPCOM_JSON_API_Site_Settings_V1_2_endpoint extends WPCOM_JSON_API_Site_Settings_Endpoint {
+
+ public static $site_format = array(
+ 'ID' => '(int) Site ID',
+ 'name' => '(string) Title of site',
+ 'description' => '(string) Tagline or description of site',
+ 'URL' => '(string) Full URL to the site',
+ 'locale' => '(string) Locale code of the site',
+ 'settings' => '(array) An array of options/settings for the blog. Only viewable by users with post editing rights to the site.',
+ );
+
+
+ function callback( $path = '', $blog_id = 0 ) {
+ add_filter( 'site_settings_endpoint_update_locale', array( $this, 'update_locale' ) );
+ add_filter( 'site_settings_endpoint_get', array( $this, 'return_locale' ) );
+ add_filter( 'site_settings_site_format', array( $this, 'site_format' ) );
+ return parent::callback( $path, $blog_id );
+ }
+
+
+ protected function get_locale( $key ) {
+ if ( 'locale' == $key ) {
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ return (string) get_blog_lang_code();
+ } else {
+ return get_locale();
+ }
+ }
+
+ return false;
+ }
+
+ public function return_locale( $settings ) {
+ return $settings + array( 'locale' => $this->get_locale( 'locale' ) );
+ }
+
+ public function update_locale( $value ) {
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ $lang_id = get_lang_id_by_code( $value );
+ if ( ! empty( $lang_id ) ) {
+ if ( update_option( 'lang_id', $lang_id ) ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public function site_format( $format ) {
+ return self::$site_format;
+ }
+}
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 04fae801..dcf84a35 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
@@ -120,7 +120,12 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
}
}
- // If date is set, $this->input will set date_gmt, date still needs to be adjusted for the blog's offset
+ if ( function_exists( 'wpcom_switch_to_locale' ) ) {
+ // fixes calypso-pre-oss #12476: respect blog locale when creating the post slug
+ wpcom_switch_to_locale( get_blog_lang_code( $blog_id ) );
+ }
+
+ // If date was set, $this->input will set date_gmt, date still needs to be adjusted for the blog's offset
if ( isset( $input['date_gmt'] ) ) {
$gmt_offset = get_option( 'gmt_offset' );
$time_with_offset = strtotime( $input['date_gmt'] ) + $gmt_offset * HOUR_IN_SECONDS;
@@ -164,6 +169,7 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
* Consequence: To add a category/tag whose name is '123', the client must
* first look up its ID.
*/
+ $term = (string) $term; // ctype_digit compat
if ( ctype_digit( $term ) ) {
$term = (int) $term;
}
@@ -692,6 +698,7 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
if ( empty( $author ) || ! post_type_supports( $post_type, 'author' ) )
return get_current_user_id();
+ $author = (string) $author;
if ( ctype_digit( $author ) ) {
$_user = get_user_by( 'id', $author );
if ( ! $_user || is_wp_error( $_user ) )
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 d0aef8bf..9f0bf598 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
@@ -125,7 +125,12 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
}
}
- // If date is set, $this->input will set date_gmt, date still needs to be adjusted for the blog's offset
+ if ( function_exists( 'wpcom_switch_to_locale' ) ) {
+ // fixes calypso-pre-oss #12476: respect blog locale when creating the post slug
+ wpcom_switch_to_locale( get_blog_lang_code( $blog_id ) );
+ }
+
+ // If date was set, $this->input will set date_gmt, date still needs to be adjusted for the blog's offset
if ( isset( $input['date_gmt'] ) ) {
$gmt_offset = get_option( 'gmt_offset' );
$time_with_offset = strtotime( $input['date_gmt'] ) + $gmt_offset * HOUR_IN_SECONDS;
@@ -169,6 +174,7 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
* Consequence: To add a category/tag whose name is '123', the client must
* first look up its ID.
*/
+ $term = (string) $term; // ctype_digit compat
if ( ctype_digit( $term ) ) {
$term = (int) $term;
}
@@ -703,6 +709,7 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
if ( empty( $author ) || ! post_type_supports( $post_type, 'author' ) )
return get_current_user_id();
+ $author = (string) $author;
if ( ctype_digit( $author ) ) {
$_user = get_user_by( 'id', $author );
if ( ! $_user || is_wp_error( $_user ) )
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 22838146..cd7dae8b 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
@@ -100,7 +100,12 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
}
}
- // If date is set, $this->input will set date_gmt, date still needs to be adjusted for the blog's offset
+ if ( function_exists( 'wpcom_switch_to_locale' ) ) {
+ // fixes calypso-pre-oss #12476: respect blog locale when creating the post slug
+ wpcom_switch_to_locale( get_blog_lang_code( $blog_id ) );
+ }
+
+ // If date is set, $this->input will set date_gmt, date still needs to be adjusted f
if ( isset( $input['date_gmt'] ) ) {
$gmt_offset = get_option( 'gmt_offset' );
$time_with_offset = strtotime( $input['date_gmt'] ) + $gmt_offset * HOUR_IN_SECONDS;
@@ -190,6 +195,7 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
}
foreach ( $terms as $term ) {
+ $term = (string) $term; // ctype_digit compat
if ( ! ctype_digit( $term ) ) {
// skip anything that doesn't look like an ID
continue;
@@ -610,7 +616,7 @@ 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 ( 'publish' !== $post->post_status && isset( $input['title'] )) {
+ if ( ! $new && 'publish' !== $post->post_status && isset( $input['title'] ) ) {
$return['other_URLs'] = (object) $this->get_post_permalink_suggestions( $post_id, $input['title'] );
}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-modify-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-modify-endpoint.php
index dba600db..cfb5361a 100644
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-modify-endpoint.php
+++ b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-modify-endpoint.php
@@ -34,6 +34,15 @@ class Jetpack_JSON_API_Core_Modify_Endpoint extends Jetpack_JSON_API_Core_Endpoi
$update = $this->find_latest_update_offer();
}
+ /**
+ * Pre-upgrade action
+ *
+ * @since 3.9.3
+ *
+ * @param object|array $update as returned by find_core_update() or find_core_auto_update()
+ */
+ do_action('jetpack_pre_core_upgrade', $update);
+
$skin = new Automatic_Upgrader_Skin();
$upgrader = new Core_Upgrader( $skin );
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 13534128..3236862d 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
@@ -155,6 +155,17 @@ class Jetpack_JSON_API_Plugins_Modify_Endpoint extends Jetpack_JSON_API_Plugins_
continue;
}
+ /**
+ * Pre-upgrade action
+ *
+ * @since 3.9.3
+ *
+ * @param array $plugin Plugin data
+ * @param array $plugin Array of plugin objects
+ * @param bool $updated_attempted false for the first update, true subsequently
+ */
+ do_action('jetpack_pre_plugin_upgrade', $plugin, $this->plugins, $update_attempted);
+
$update_attempted = true;
// Object created inside the for loop to clean the messages for each plugin
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-modify-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-modify-endpoint.php
index 4719df6c..cbf361ba 100644
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-modify-endpoint.php
+++ b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-modify-endpoint.php
@@ -40,6 +40,15 @@ class Jetpack_JSON_API_Themes_Modify_Endpoint extends Jetpack_JSON_API_Themes_En
wp_update_themes();
foreach ( $this->themes as $theme ) {
+ /**
+ * Pre-upgrade action
+ *
+ * @since 3.9.3
+ *
+ * @param object $theme WP_Theme object
+ * @param array $themes Array of theme objects
+ */
+ do_action('jetpack_pre_theme_upgrade', $theme, $this->themes);
// Objects created inside the for loop to clean the messages for each theme
$skin = new Automatic_Upgrader_Skin();
$upgrader = new Theme_Upgrader( $skin );
@@ -55,4 +64,4 @@ class Jetpack_JSON_API_Themes_Modify_Endpoint extends Jetpack_JSON_API_Themes_En
return true;
}
-} \ No newline at end of file
+}
diff --git a/plugins/jetpack/languages/jetpack-fi.mo b/plugins/jetpack/languages/jetpack-fi.mo
deleted file mode 100644
index ec2e9ed7..00000000
--- a/plugins/jetpack/languages/jetpack-fi.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/locales.php b/plugins/jetpack/locales.php
index c0f4192b..a9421254 100644
--- a/plugins/jetpack/locales.php
+++ b/plugins/jetpack/locales.php
@@ -554,7 +554,6 @@ class GP_Locales {
$en_au->wp_locale = 'en_AU';
$en_au->slug = 'en-au';
$en_au->google_code = 'en';
- $en_au->facebook_locale = 'en_AU';
$en_ca = new GP_Locale();
$en_ca->english_name = 'English (Canada)';
@@ -566,7 +565,6 @@ class GP_Locales {
$en_ca->wp_locale = 'en_CA';
$en_ca->slug = 'en-ca';
$en_ca->google_code = 'en';
- $en_ca->facebook_locale = 'en_CA';
$en_gb = new GP_Locale();
$en_gb->english_name = 'English (UK)';
diff --git a/plugins/jetpack/modules/carousel/jetpack-carousel.js b/plugins/jetpack/modules/carousel/jetpack-carousel.js
index 95b6c4b0..a4b6aac4 100644
--- a/plugins/jetpack/modules/carousel/jetpack-carousel.js
+++ b/plugins/jetpack/modules/carousel/jetpack-carousel.js
@@ -86,7 +86,7 @@ jQuery(document).ready(function($) {
buttons = $('<div class="jp-carousel-buttons">' + buttons + '</div>');
- caption = $('<h2></h2>');
+ caption = $('<h2 itemprop="caption description"></h2>');
photo_info = $('<div class="jp-carousel-photo-info"></div>').append(caption);
imageMeta = $('<div></div>')
@@ -226,11 +226,14 @@ jQuery(document).ready(function($) {
container = $('<div></div>')
.addClass('jp-carousel-wrap')
.addClass( 'jp-carousel-transitions' );
-
if ( 'white' === jetpackCarouselStrings.background_color ) {
container.addClass('jp-carousel-light');
}
+ container.attr('itemscope', '');
+
+ container.attr('itemtype', 'http://schema.org/ImageGallery');
+
container.css({
'position' : 'fixed',
'top' : 0,
@@ -902,7 +905,7 @@ jQuery(document).ready(function($) {
.css( 'width', '100%' )
.css( 'height', '100%' );
- var slide = $('<div class="jp-carousel-slide"></div>')
+ var slide = $('<div class="jp-carousel-slide" itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject"></div>')
.hide()
.css({
//'position' : 'fixed',
@@ -987,7 +990,7 @@ jQuery(document).ready(function($) {
if ( medium_width >= args.max_width || medium_height >= args.max_height ) {
return args.medium_file;
}
-
+
if ( isPhotonUrl ) {
// args.orig_file doesn't point to a Photon url, so in this case we use args.large_file
// to return the photon url of the original image.
@@ -1016,7 +1019,7 @@ jQuery(document).ready(function($) {
if ( '9999' === size_parts[0] ) {
size_parts[0] = '0';
}
-
+
if ( '9999' === size_parts[1] ) {
size_parts[1] = '0';
}
@@ -1230,12 +1233,23 @@ jQuery(document).ready(function($) {
if(!current || !current.data) {
return false;
}
- var original = current.data('orig-file').replace(/\?.+$/, ''),
- origSize = current.data('orig-size').split(','),
- permalink = $( '<a>'+gallery.jp_carousel('format', {'text': jetpackCarouselStrings.download_original, 'replacements': origSize})+'</a>' )
- .addClass( 'jp-carousel-image-download' )
- .attr( 'href', original )
- .attr( 'target', '_blank' );
+ var original,
+ origSize = current.data('orig-size').split(',' ),
+ imageLinkParser = document.createElement( 'a' );
+
+ imageLinkParser.href = current.data( 'src' ).replace( /\?.+$/, '' );
+
+ // Is this a Photon URL?
+ if ( imageLinkParser.hostname.match( /^i[\d]{1}.wp.com$/i ) !== null ) {
+ original = imageLinkParser.href;
+ } else {
+ original = current.data('orig-file').replace(/\?.+$/, '');
+ }
+
+ var permalink = $( '<a>'+gallery.jp_carousel('format', {'text': jetpackCarouselStrings.download_original, 'replacements': origSize})+'</a>' )
+ .addClass( 'jp-carousel-image-download' )
+ .attr( 'href', original )
+ .attr( 'target', '_blank' );
// Update (replace) the content of the anchor
$( 'div.jp-carousel-image-meta a.jp-carousel-image-download' ).replaceWith( permalink );
@@ -1436,9 +1450,9 @@ jQuery(document).ready(function($) {
} );
if ( ! slide.data( 'preview-image' ) || ( slide.data( 'thumb-size' ) && slide.width() > slide.data( 'thumb-size' ).width ) ) {
- image.attr( 'src', image.closest( '.jp-carousel-slide' ).data( 'src' ) );
+ image.attr( 'src', image.closest( '.jp-carousel-slide' ).data( 'src' ) ).attr('itemprop', 'image');
} else {
- image.attr( 'src', slide.data( 'preview-image' ) );
+ image.attr( 'src', slide.data( 'preview-image' ) ).attr('itemprop', 'image');
}
image.data( 'loaded', 1 );
diff --git a/plugins/jetpack/modules/comments/comments.php b/plugins/jetpack/modules/comments/comments.php
index 493c749b..5330cb7a 100644
--- a/plugins/jetpack/modules/comments/comments.php
+++ b/plugins/jetpack/modules/comments/comments.php
@@ -279,8 +279,7 @@ class Jetpack_Comments extends Highlander_Comments_Base {
}
$params['sig'] = $signature;
- $url_origin = set_url_scheme( 'http://jetpack.wordpress.com' );
- $url = "{$url_origin}/jetpack-comment/?" . http_build_query( $params );
+ $url = "https://jetpack.wordpress.com/jetpack-comment/?" . http_build_query( $params );
$url = "{$url}#parent=" . urlencode( set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ) );
$this->signed_url = $url;
$height = $params['comment_registration'] || is_user_logged_in() ? '315' : '430'; // Iframe can be shorter if we're not allowing guest commenting
@@ -295,9 +294,9 @@ class Jetpack_Comments extends Highlander_Comments_Base {
<div id="respond" class="comment-respond">
<h3 id="reply-title" class="comment-reply-title"><?php comment_form_title( esc_html( $params['greeting'] ), esc_html( $params['greeting_reply'] ) ); ?> <small><?php cancel_comment_reply_link( esc_html__( 'Cancel reply' , 'jetpack') ); ?></small></h3>
- <div id="commentform" class="comment-form">
- <iframe src="<?php echo esc_url( $url ); ?>" allowtransparency="<?php echo $transparent; ?>" style="width:100%; height: <?php echo $height; ?>px;border:0px;" frameBorder="0" scrolling="no" name="jetpack_remote_comment" id="jetpack_remote_comment"></iframe>
- </div>
+ <form id="commentform" class="comment-form">
+ <iframe src="<?php echo esc_url( $url ); ?>" allowtransparency="<?php echo $transparent; ?>" style="width:100%; height: <?php echo $height; ?>px;border:0;" frameBorder="0" scrolling="no" name="jetpack_remote_comment" id="jetpack_remote_comment"></iframe>
+ </form>
</div>
<?php // Below is required for comment reply JS to work ?>
@@ -313,7 +312,7 @@ class Jetpack_Comments extends Highlander_Comments_Base {
* @since JetpackComments (1.4)
*/
public function watch_comment_parent() {
- $url_origin = set_url_scheme( 'http://jetpack.wordpress.com' );
+ $url_origin = 'https://jetpack.wordpress.com';
?>
<!--[if IE]>
diff --git a/plugins/jetpack/modules/contact-form/grunion-contact-form.php b/plugins/jetpack/modules/contact-form/grunion-contact-form.php
index b8161e97..faa8fca1 100644
--- a/plugins/jetpack/modules/contact-form/grunion-contact-form.php
+++ b/plugins/jetpack/modules/contact-form/grunion-contact-form.php
@@ -33,12 +33,32 @@ class Grunion_Contact_Form_Plugin {
if ( !$instance ) {
$instance = new Grunion_Contact_Form_Plugin;
+
+ // Schedule our daily cleanup
+ add_action( 'wp_scheduled_delete', array( $instance, 'daily_akismet_meta_cleanup' ) );
}
return $instance;
}
/**
+ * Runs daily to clean up spam detection metadata after 15 days. Keeps your DB squeaky clean.
+ */
+ public function daily_akismet_meta_cleanup() {
+ global $wpdb;
+
+ $feedback_ids = $wpdb->get_col( "SELECT p.ID FROM {$wpdb->posts} as p INNER JOIN {$wpdb->postmeta} as m on m.post_id = p.ID WHERE p.post_type = 'feedback' AND m.meta_key = '_feedback_akismet_values' > p.post_date_gmt LIMIT 10000" );
+
+ if ( empty( $feedback_ids ) ) {
+ return;
+ }
+
+ foreach ( $feedback_ids as $feedback_id ) {
+ delete_post_meta( $feedback_id, '_feedback_akismet_values' );
+ }
+ }
+
+ /**
* Strips HTML tags from input. Output is NOT HTML safe.
*
* @param mixed $data_with_tags
@@ -107,6 +127,7 @@ class Grunion_Contact_Form_Plugin {
'rewrite' => FALSE,
'query_var' => FALSE,
'capability_type' => 'page',
+ 'show_in_rest' => true,
'capabilities' => array(
'create_posts' => false,
'publish_posts' => 'publish_pages',
@@ -391,11 +412,22 @@ class Grunion_Contact_Form_Plugin {
$form['referrer'] = $_SERVER['HTTP_REFERER'];
$form['blog'] = get_option( 'home' );
- $ignore = array( 'HTTP_COOKIE' );
-
- foreach ( $_SERVER as $k => $value )
- if ( !in_array( $k, $ignore ) && is_string( $value ) )
- $form["$k"] = $value;
+ foreach ( $_SERVER as $key => $value ) {
+ if ( ! is_string( $value ) ) {
+ continue;
+ }
+ if ( in_array( $key, array( 'HTTP_COOKIE', 'HTTP_COOKIE2', 'HTTP_USER_AGENT', 'HTTP_REFERER' ) ) ) {
+ // We don't care about cookies, and the UA and Referrer were caught above.
+ continue;
+ } elseif ( in_array( $key, array( 'REMOTE_ADDR', 'REQUEST_URI', 'DOCUMENT_URI' ) ) ) {
+ // All three of these are relevant indicators and should be passed along.
+ $form[ $key ] = $value;
+ } elseif ( wp_startswith( $key, 'HTTP_' ) ) {
+ // Any other HTTP header indicators.
+ // `wp_startswith()` is a wpcom helper function and is included in Jetpack via `functions.compat.php`
+ $form[ $key ] = $value;
+ }
+ }
return $form;
}
@@ -623,19 +655,6 @@ class Grunion_Contact_Form_Plugin {
foreach ( $post_ids as $post_id ) {
/**
- * Fetch post meta data.
- */
- $post_meta_data = $this->get_post_meta_for_csv_export( $post_id );
-
- /**
- * If `$post_meta_data` is not an array or if it is empty, then there is no
- * feedback to work with. Skip it.
- */
- if ( ! is_array( $post_meta_data ) || empty( $post_meta_data ) ) {
- continue;
- }
-
- /**
* Fetch post main data, because we need the subject and author data for the feedback form.
*/
$post_real_data = $this->get_parsed_field_contents_of_post( $post_id );
@@ -663,6 +682,19 @@ class Grunion_Contact_Form_Plugin {
$mapped_fields = $this->map_parsed_field_contents_of_post_to_field_names( $post_real_data );
/**
+ * Fetch post meta data.
+ */
+ $post_meta_data = $this->get_post_meta_for_csv_export( $post_id );
+
+ /**
+ * If `$post_meta_data` is not an array or if it is empty, then there is no
+ * extra feedback to work with. Create an empty array.
+ */
+ if ( ! is_array( $post_meta_data ) || empty( $post_meta_data ) ) {
+ $post_meta_data = array();
+ }
+
+ /**
* Prepend the feedback subject to the list of fields.
*/
$post_meta_data = array_merge(
@@ -1758,6 +1790,12 @@ class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
foreach ( array_merge( $field_ids['all'], $field_ids['extra'] ) as $field_id ) {
$field = $this->fields[$field_id];
+ // Skip any fields that are just a choice from a pre-defined list. They wouldn't have any value
+ // from a spam-filtering point of view.
+ if ( in_array( $field->get_attribute( 'type' ), array( 'select', 'checkbox', 'checkbox-multiple', 'radio' ) ) ) {
+ continue;
+ }
+
// Normalize the label into a slug.
$field_slug = trim( // Strip all leading/trailing dashes.
preg_replace( // Normalize everything to a-z0-9_-
@@ -1867,7 +1905,10 @@ class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
remove_filter( 'wp_insert_post_data', array( $plugin, 'insert_feedback_filter' ), 10, 2 );
update_post_meta( $post_id, '_feedback_extra_fields', $this->addslashes_deep( $extra_values ) );
- update_post_meta( $post_id, '_feedback_akismet_values', $this->addslashes_deep( $akismet_values ) );
+
+ if ( Jetpack::is_plugin_active( 'akismet/akismet.php' ) ) {
+ update_post_meta( $post_id, '_feedback_akismet_values', $this->addslashes_deep( $akismet_values ) );
+ }
$message = self::get_compiled_form( $post_id, $this );
@@ -1893,7 +1934,7 @@ class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
array_push( $message, __( 'Sent by an unverified visitor to your site.', 'jetpack' ) );
}
- $message = join( $message, "" );
+ $message = join( $message, "\n" );
/**
* Filters the message sent via email after a successfull form submission.
*
diff --git a/plugins/jetpack/modules/contact-form/js/grunion-frontend.js b/plugins/jetpack/modules/contact-form/js/grunion-frontend.js
index c87c1640..25f0e911 100644
--- a/plugins/jetpack/modules/contact-form/js/grunion-frontend.js
+++ b/plugins/jetpack/modules/contact-form/js/grunion-frontend.js
@@ -1,3 +1,5 @@
jQuery( function ( $ ) {
- $( '.contact-form input[type="date"]' ).datepicker( { dateFormat : 'yy-mm-dd' } );
+ if ( 'function' === typeof $.fn.datepicker ) {
+ $( '.contact-form input[type="date"]' ).datepicker( { dateFormat : 'yy-mm-dd' } );
+ }
} ); \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-content-types.php b/plugins/jetpack/modules/custom-content-types.php
index df4eabd4..af615b10 100644
--- a/plugins/jetpack/modules/custom-content-types.php
+++ b/plugins/jetpack/modules/custom-content-types.php
@@ -44,7 +44,7 @@ function jetpack_cpt_section_callback() {
?>
<p>
<?php esc_html_e( 'Use these settings to display different types of content on your site.', 'jetpack' ); ?>
- <a target="_blank" href="http://jetpack.me/support/custom-content-types/"><?php esc_html_e( 'Learn More', 'jetpack' ); ?></a>
+ <a target="_blank" href="http://jetpack.com/support/custom-content-types/"><?php esc_html_e( 'Learn More', 'jetpack' ); ?></a>
</p>
<?php
}
diff --git a/plugins/jetpack/modules/custom-css/custom-css.php b/plugins/jetpack/modules/custom-css/custom-css.php
index bcd66293..999b7f3e 100644
--- a/plugins/jetpack/modules/custom-css/custom-css.php
+++ b/plugins/jetpack/modules/custom-css/custom-css.php
@@ -1053,7 +1053,7 @@ class Jetpack_Custom_CSS {
*
* @param string $url Custom CSS limited width's support doc URL.
*/
- apply_filters( 'safecss_limit_width_link', 'http://jetpack.me/support/custom-css/#limited-width' )
+ apply_filters( 'safecss_limit_width_link', 'http://jetpack.com/support/custom-css/#limited-width' )
);
?>
diff --git a/plugins/jetpack/modules/custom-post-types/comics.php b/plugins/jetpack/modules/custom-post-types/comics.php
index 97e1a980..dfc52b45 100644
--- a/plugins/jetpack/modules/custom-post-types/comics.php
+++ b/plugins/jetpack/modules/custom-post-types/comics.php
@@ -257,6 +257,7 @@ class Jetpack_Comic {
'map_meta_cap' => true,
'has_archive' => true,
'query_var' => 'comic',
+ 'show_in_rest' => true,
) );
}
diff --git a/plugins/jetpack/modules/custom-post-types/js/many-items.js b/plugins/jetpack/modules/custom-post-types/js/many-items.js
index 3da1bc33..3483f6cd 100644
--- a/plugins/jetpack/modules/custom-post-types/js/many-items.js
+++ b/plugins/jetpack/modules/custom-post-types/js/many-items.js
@@ -97,7 +97,7 @@
var tbody = this.find( 'tbody:last' ),
row = tbody.find( 'tr:first' ).clone();
- $( row ).find( 'input' ).attr( 'value', '' );
+ $( row ).find( 'input, textarea' ).val( '' );
$( row ).appendTo( tbody );
};
diff --git a/plugins/jetpack/modules/custom-post-types/portfolios.php b/plugins/jetpack/modules/custom-post-types/portfolios.php
index 1c299341..21ef1488 100644
--- a/plugins/jetpack/modules/custom-post-types/portfolios.php
+++ b/plugins/jetpack/modules/custom-post-types/portfolios.php
@@ -263,6 +263,7 @@ class Jetpack_Portfolio {
'taxonomies' => array( self::CUSTOM_TAXONOMY_TYPE, self::CUSTOM_TAXONOMY_TAG ),
'has_archive' => true,
'query_var' => 'portfolio',
+ 'show_in_rest' => true,
) );
register_taxonomy( self::CUSTOM_TAXONOMY_TYPE, self::CUSTOM_POST_TYPE, array(
diff --git a/plugins/jetpack/modules/custom-post-types/testimonial.php b/plugins/jetpack/modules/custom-post-types/testimonial.php
index 780ba0be..bca9fdbb 100644
--- a/plugins/jetpack/modules/custom-post-types/testimonial.php
+++ b/plugins/jetpack/modules/custom-post-types/testimonial.php
@@ -327,6 +327,7 @@ class Jetpack_Testimonial {
'map_meta_cap' => true,
'has_archive' => true,
'query_var' => 'testimonial',
+ 'show_in_rest' => true,
) );
}
diff --git a/plugins/jetpack/modules/infinite-scroll/infinity.js b/plugins/jetpack/modules/infinite-scroll/infinity.js
index e4095fa2..b19817db 100644
--- a/plugins/jetpack/modules/infinite-scroll/infinity.js
+++ b/plugins/jetpack/modules/infinite-scroll/infinity.js
@@ -186,7 +186,7 @@ Scroller.prototype.thefooter = function() {
*/
Scroller.prototype.refresh = function() {
var self = this,
- query, jqxhr, load, loader, color;
+ query, jqxhr, load, loader, color, customized;
// If we're disabled, ready, or don't pass the check, bail.
if ( this.disabled || ! this.ready || ! this.check() )
@@ -214,6 +214,20 @@ Scroller.prototype.refresh = function() {
action: 'infinite_scroll'
}, this.query() );
+ // Inject Customizer state.
+ if ( 'undefined' !== typeof wp && wp.customize && wp.customize.settings.theme ) {
+ customized = {};
+ query.wp_customize = 'on';
+ query.theme = wp.customize.settings.theme.stylesheet;
+ wp.customize.each( function( setting ) {
+ if ( setting._dirty ) {
+ customized[ setting.id ] = setting();
+ }
+ } );
+ query.customized = JSON.stringify( customized );
+ query.nonce = wp.customize.settings.nonce.preview;
+ }
+
// Fire the ajax request.
jqxhr = $.post( infiniteScroll.settings.ajaxurl, query );
@@ -234,13 +248,9 @@ Scroller.prototype.refresh = function() {
}
// Check for and parse our response.
- if ( ! response )
- return;
-
- response = $.parseJSON( response );
-
- if ( ! response || ! response.type )
+ if ( ! response || ! response.type ) {
return;
+ }
// If there are no remaining posts...
if ( response.type == 'empty' ) {
@@ -654,6 +664,54 @@ $( document ).ready( function() {
} , 250 );
});
}
+
+ // Integrate with Selective Refresh in the Customizer.
+ if ( 'undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh ) {
+
+ /**
+ * Handle rendering of selective refresh partials.
+ *
+ * Make sure that when a partial is rendered, the Jetpack post-load event
+ * will be triggered so that any dynamic elements will be re-constructed,
+ * such as ME.js elements, Photon replacements, social sharing, and more.
+ * Note that this is applying here not strictly to posts being loaded.
+ * If a widget contains a ME.js element and it is previewed via selective
+ * refresh, the post-load would get triggered allowing any dynamic elements
+ * therein to also be re-constructed.
+ *
+ * @param {wp.customize.selectiveRefresh.Placement} placement
+ */
+ wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
+ var content;
+ if ( 'string' === typeof placement.addedContent ) {
+ content = placement.addedContent;
+ } else if ( placement.container ) {
+ content = $( placement.container ).html();
+ }
+
+ if ( content ) {
+ $( document.body ).trigger( 'post-load', { html: content } );
+ }
+ } );
+
+ /*
+ * Add partials for posts added via infinite scroll.
+ *
+ * This is unnecessary when MutationObserver is supported by the browser
+ * since then this will be handled by Selective Refresh in core.
+ */
+ if ( 'undefined' === typeof MutationObserver ) {
+ $( document.body ).on( 'post-load', function( e, response ) {
+ var rootElement = null;
+ if ( response.html && -1 !== response.html.indexOf( 'data-customize-partial' ) ) {
+ if ( infiniteScroll.settings.id ) {
+ rootElement = $( '#' + infiniteScroll.settings.id );
+ }
+ wp.customize.selectiveRefresh.addPartials( rootElement );
+ }
+ } );
+ }
+ }
});
diff --git a/plugins/jetpack/modules/infinite-scroll/infinity.php b/plugins/jetpack/modules/infinite-scroll/infinity.php
index 2c00f448..f98d8a75 100644
--- a/plugins/jetpack/modules/infinite-scroll/infinity.php
+++ b/plugins/jetpack/modules/infinite-scroll/infinity.php
@@ -229,6 +229,14 @@ class The_Neverending_Home_Page {
}
}
+ // If IS is set to click, and if the site owner changed posts_per_page, let's use that
+ if (
+ 'click' == $settings['type']
+ && ( '10' !== get_option( 'posts_per_page' ) )
+ ) {
+ $settings['posts_per_page'] = (int) get_option( 'posts_per_page' );
+ }
+
// Force display of the click handler and attendant bits when the type isn't `click`
if ( 'click' !== $settings['type'] ) {
$settings['click_handle'] = true;
@@ -247,7 +255,8 @@ class The_Neverending_Home_Page {
self::$settings = apply_filters( 'infinite_scroll_settings', $settings );
}
- return (object) self::$settings;
+ /** This filter is documented in modules/infinite-scroll/infinity.php */
+ return (object) apply_filters( 'infinite_scroll_settings', self::$settings );
}
/**
@@ -367,7 +376,7 @@ class The_Neverending_Home_Page {
add_filter( 'body_class', array( $this, 'body_class' ) );
// Add our scripts.
- wp_enqueue_script( 'the-neverending-homepage', plugins_url( 'infinity.js', __FILE__ ), array( 'jquery' ), 20141016, true );
+ wp_enqueue_script( 'the-neverending-homepage', plugins_url( 'infinity.js', __FILE__ ), array( 'jquery' ), '3.10', true );
// Add our default styles.
wp_enqueue_style( 'the-neverending-homepage', plugins_url( 'infinity.css', __FILE__ ), array(), '20140422' );
@@ -1098,6 +1107,7 @@ class The_Neverending_Home_Page {
* @return string or null
*/
function query() {
+ global $wp_customize;
if ( ! isset( $_REQUEST['page'] ) || ! current_theme_supports( 'infinite-scroll' ) )
die;
@@ -1248,7 +1258,11 @@ class The_Neverending_Home_Page {
$results['type'] = 'empty';
}
- echo wp_json_encode(
+ if ( is_customize_preview() ) {
+ $wp_customize->remove_preview_signature();
+ }
+
+ wp_send_json(
/**
* Filter the Infinite Scroll results.
*
@@ -1262,7 +1276,6 @@ class The_Neverending_Home_Page {
*/
apply_filters( 'infinite_scroll_results', $results, $query_args, self::wp_query() )
);
- die;
}
/**
@@ -1528,149 +1541,3 @@ if ( The_Neverending_Home_Page::got_infinity() ) {
// Don't load the admin bar when doing the AJAX response.
show_admin_bar( false );
}
-
-/**
- * Include the wp_json_encode functions for pre-wordpress-4.1
- */
-
-if ( ! function_exists( 'wp_json_encode' ) ) :
- /**
- * Encode a variable into JSON, with some sanity checks.
- *
- * @since 4.1.0
- *
- * @param mixed $data Variable (usually an array or object) to encode as JSON.
- * @param int $options Optional. Options to be passed to json_encode(). Default 0.
- * @param int $depth Optional. Maximum depth to walk through $data. Must be
- * greater than 0. Default 512.
- * @return bool|string The JSON encoded string, or false if it cannot be encoded.
- */
- function wp_json_encode( $data, $options = 0, $depth = 512 ) {
- /*
- * json_encode() has had extra params added over the years.
- * $options was added in 5.3, and $depth in 5.5.
- * We need to make sure we call it with the correct arguments.
- */
- if ( version_compare( PHP_VERSION, '5.5', '>=' ) ) {
- $args = array( $data, $options, $depth );
- } elseif ( version_compare( PHP_VERSION, '5.3', '>=' ) ) {
- $args = array( $data, $options );
- } else {
- $args = array( $data );
- }
-
- $json = call_user_func_array( 'json_encode', $args );
-
- // If json_encode() was successful, no need to do more sanity checking.
- // ... unless we're in an old version of PHP, and json_encode() returned
- // a string containing 'null'. Then we need to do more sanity checking.
- if ( false !== $json && ( version_compare( PHP_VERSION, '5.5', '>=' ) || false === strpos( $json, 'null' ) ) ) {
- return $json;
- }
-
- try {
- $args[0] = _wp_json_sanity_check( $data, $depth );
- } catch ( Exception $e ) {
- return false;
- }
-
- return call_user_func_array( 'json_encode', $args );
- }
-endif;
-
-if ( ! function_exists( '_wp_json_sanity_check' ) ) :
- /**
- * Perform sanity checks on data that shall be encoded to JSON.
- *
- * @see wp_json_encode()
- *
- * @since 4.1.0
- * @access private
- * @internal
- *
- * @param mixed $data Variable (usually an array or object) to encode as JSON.
- * @param int $depth Maximum depth to walk through $data. Must be greater than 0.
- * @return mixed The sanitized data that shall be encoded to JSON.
- */
- function _wp_json_sanity_check( $data, $depth ) {
- if ( $depth < 0 ) {
- throw new Exception( 'Reached depth limit' );
- }
-
- if ( is_array( $data ) ) {
- $output = array();
- foreach ( $data as $id => $el ) {
- // Don't forget to sanitize the ID!
- if ( is_string( $id ) ) {
- $clean_id = _wp_json_convert_string( $id );
- } else {
- $clean_id = $id;
- }
-
- // Check the element type, so that we're only recursing if we really have to.
- if ( is_array( $el ) || is_object( $el ) ) {
- $output[ $clean_id ] = _wp_json_sanity_check( $el, $depth - 1 );
- } elseif ( is_string( $el ) ) {
- $output[ $clean_id ] = _wp_json_convert_string( $el );
- } else {
- $output[ $clean_id ] = $el;
- }
- }
- } elseif ( is_object( $data ) ) {
- $output = new stdClass;
- foreach ( $data as $id => $el ) {
- if ( is_string( $id ) ) {
- $clean_id = _wp_json_convert_string( $id );
- } else {
- $clean_id = $id;
- }
-
- if ( is_array( $el ) || is_object( $el ) ) {
- $output->$clean_id = _wp_json_sanity_check( $el, $depth - 1 );
- } elseif ( is_string( $el ) ) {
- $output->$clean_id = _wp_json_convert_string( $el );
- } else {
- $output->$clean_id = $el;
- }
- }
- } elseif ( is_string( $data ) ) {
- return _wp_json_convert_string( $data );
- } else {
- return $data;
- }
-
- return $output;
- }
-endif;
-
-if ( ! function_exists( '_wp_json_convert_string' ) ) :
- /**
- * Convert a string to UTF-8, so that it can be safely encoded to JSON.
- *
- * @see _wp_json_sanity_check()
- *
- * @since 4.1.0
- * @access private
- * @internal
- *
- * @param string $string The string which is to be converted.
- * @return string The checked string.
- */
- function _wp_json_convert_string( $string ) {
- static $use_mb = null;
- if ( is_null( $use_mb ) ) {
- $use_mb = function_exists( 'mb_convert_encoding' );
- }
-
- if ( $use_mb ) {
- $encoding = mb_detect_encoding( $string, mb_detect_order(), true );
- if ( $encoding ) {
- return mb_convert_encoding( $string, 'UTF-8', $encoding );
- } else {
- return mb_convert_encoding( $string, 'UTF-8', 'UTF-8' );
- }
- } else {
- return wp_check_invalid_utf8( $string, true );
- }
- }
-endif;
diff --git a/plugins/jetpack/modules/latex.php b/plugins/jetpack/modules/latex.php
index cec2065c..41567b4b 100644
--- a/plugins/jetpack/modules/latex.php
+++ b/plugins/jetpack/modules/latex.php
@@ -21,6 +21,8 @@
*/
function latex_markup( $content ) {
+ $textarr = wp_html_split( $content );
+
$regex = '%
\$latex(?:=\s*|\s+)
((?:
@@ -30,7 +32,20 @@ function latex_markup( $content ) {
)+)
(?<!\\\\)\$ # Dollar preceded by zero slashes
%ix';
- return preg_replace_callback( $regex, 'latex_src', $content );
+
+ foreach ( $textarr as &$element ) {
+ if ( '' == $element || '<' === $element[0] ) {
+ continue;
+ }
+
+ if ( false === stripos( $element, '$latex' ) ) {
+ continue;
+ }
+
+ $element = preg_replace_callback( $regex, 'latex_src', $element );
+ }
+
+ return implode( '', $textarr );
}
function latex_src( $matches ) {
diff --git a/plugins/jetpack/modules/manage/confirm-admin.php b/plugins/jetpack/modules/manage/confirm-admin.php
index 4020e6b1..da0dce95 100644
--- a/plugins/jetpack/modules/manage/confirm-admin.php
+++ b/plugins/jetpack/modules/manage/confirm-admin.php
@@ -93,12 +93,12 @@ switch( $section ) {
</div>
<h1 class="manage__title"><span class="genericon genericon-checkmark"></span><?php esc_html_e( __( 'Jetpack Manage Enabled', 'jetpack' ) ); ?></h1>
<p class="manage__description">
- <?php esc_html_e( $description, 'jetpack' ); ?>
+ <?php echo esc_html( $description ); ?>
</p>
<p class="manage__description">
<a class="manage__link" href="<?php echo esc_url( $link ); ?>">
<span class="genericon genericon-previous"></span>
- <?php esc_html_e( $link_title, 'jetpack' ); ?>
+ <?php echo esc_html( $link_title ); ?>
</a>
</p>
</div>
diff --git a/plugins/jetpack/modules/minileven.php b/plugins/jetpack/modules/minileven.php
index 909ec7c1..2da8345a 100644
--- a/plugins/jetpack/modules/minileven.php
+++ b/plugins/jetpack/modules/minileven.php
@@ -100,8 +100,8 @@ function minileven_configuration_screen() {
</form>
<h3><?php _e( 'Mobile Apps', 'jetpack' ); ?></h3>
<p><?php _e( 'Take WordPress with you.', 'jetpack' ); ?></p>
- <a href="http://wordpress.org/extend/mobile/"><img src="<?php echo plugin_dir_url( __FILE__ ); ?>/minileven/images/wp-app-devices.png" width="332" height="73" /></a>
- <p><?php printf( __( 'We have apps for <a href="%s">iOS (iPhone, iPad, iPod Touch)</a>, <a href="%s">Android</a>, <a href="%s">BlackBerry</a>, and <a href="%s">more</a>!', 'jetpack' ), 'http://ios.wordpress.org/', 'http://android.wordpress.org/', 'http://blackberry.wordpress.org/', 'http://wordpress.org/mobile/' ); ?></p>
+ <a href="https://wordpress.org/mobile/"><img src="<?php echo plugin_dir_url( __FILE__ ); ?>/minileven/images/wp-app-devices.png" width="332" height="73" /></a>
+ <p><?php printf( __( 'We have apps for <a href="%s">iOS (iPhone, iPad, iPod Touch) and Android</a>!', 'jetpack' ), 'https://apps.wordpress.org/' ); ?></p>
<?php
}
diff --git a/plugins/jetpack/modules/module-headings.php b/plugins/jetpack/modules/module-headings.php
index 9c6821aa..6dc2e8ae 100644
--- a/plugins/jetpack/modules/module-headings.php
+++ b/plugins/jetpack/modules/module-headings.php
@@ -1,249 +1,308 @@
-<?php return;
+<?php
+// Do not edit this file. It's generated by jetpack/tools/build-module-headings-translations.php
/**
- * This file exists soley to store the module
- * header translation strings, that exist ordinarily
- * in comments on files in this directory.
+ * For a given module, return an array with translated name, description and recommended description.
*
- * It is never included anywhere, and is used for parsing.
+ * @param string $key Module file name without .php
+ *
+ * @return array
*/
-
-// modules/after-the-deadline.php
-_x( 'Spelling and Grammar', 'Module Name', 'jetpack' );
-_x( 'Check your spelling, style, and grammar with the After the Deadline proofreading service.', 'Module Description', 'jetpack' );
-
-// modules/carousel.php
-_x( 'Carousel', 'Module Name', 'jetpack' );
-_x( 'Transform standard image galleries into full-screen slideshows.', 'Module Description', 'jetpack' );
-_x( 'Brings your photos and images to life as full-size, easily navigable galleries.', 'Jumpstart Description', 'jetpack' );
-
-// modules/comments.php
-_x( 'Comments', 'Module Name', 'jetpack' );
-_x( 'Let readers comment with WordPress.com, Twitter, Facebook, or Google+ accounts.', 'Module Description', 'jetpack' );
-
-// modules/contact-form.php
-_x( 'Contact Form', 'Module Name', 'jetpack' );
-_x( 'Insert a contact form anywhere on your site.', 'Module Description', 'jetpack' );
-_x( 'Adds a button to your post and page editors, allowing you to build simple forms to help visitors stay in touch.', 'Jumpstart Description', 'jetpack' );
-
-// modules/custom-content-types.php
-_x( 'Custom Content Types', 'Module Name', 'jetpack' );
-_x( 'Organize and display different types of content on your site, separate from posts and pages.', 'Module Description', 'jetpack' );
-
-// modules/custom-css.php
-_x( 'Custom CSS', 'Module Name', 'jetpack' );
-_x( 'Customize your site’s CSS without modifying your theme.', 'Module Description', 'jetpack' );
-
-// modules/enhanced-distribution.php
-_x( 'Enhanced Distribution', 'Module Name', 'jetpack' );
-_x( 'Increase reach and traffic.', 'Module Description', 'jetpack' );
-
-// modules/gravatar-hovercards.php
-_x( 'Gravatar Hovercards', 'Module Name', 'jetpack' );
-_x( 'Enable pop-up business cards over commenters’ Gravatars.', 'Module Description', 'jetpack' );
-_x( 'Let commenters link their profiles to their Gravatar accounts, making it easy for your visitors to learn more about your community.', 'Jumpstart Description', 'jetpack' );
-
-// modules/infinite-scroll.php
-_x( 'Infinite Scroll', 'Module Name', 'jetpack' );
-_x( 'Add support for infinite scroll to your theme.', 'Module Description', 'jetpack' );
-
-// modules/json-api.php
-_x( 'JSON API', 'Module Name', 'jetpack' );
-_x( 'Allow applications to securely access your content through the cloud.', 'Module Description', 'jetpack' );
-
-// modules/latex.php
-_x( 'Beautiful Math', 'Module Name', 'jetpack' );
-_x( 'Use LaTeX markup language in posts and pages for complex equations and other geekery.', 'Module Description', 'jetpack' );
-
-// modules/likes.php
-_x( 'Likes', 'Module Name', 'jetpack' );
-_x( 'Give visitors an easy way to show their appreciation for your content.', 'Module Description', 'jetpack' );
-
-// modules/manage.php
-_x( 'Manage', 'Module Name', 'jetpack' );
-_x( 'Manage all your sites from a centralized place, https://wordpress.com/sites.', 'Module Description', 'jetpack' );
-_x( 'Helps you remotely manage plugins, turn on automated updates, and more from <a href="https://wordpress.com/plugins/" target="_blank">wordpress.com</a>.', 'Jumpstart Description', 'jetpack' );
-
-// modules/markdown.php
-_x( 'Markdown', 'Module Name', 'jetpack' );
-_x( 'Write posts or pages in plain-text Markdown syntax.', 'Module Description', 'jetpack' );
-
-// modules/minileven.php
-_x( 'Mobile Theme', 'Module Name', 'jetpack' );
-_x( 'Optimize your site with a mobile-friendly theme for smartphones.', 'Module Description', 'jetpack' );
-
-// modules/monitor.php
-_x( 'Monitor', 'Module Name', 'jetpack' );
-_x( 'Reports on site downtime.', 'Module Description', 'jetpack' );
-
-// modules/notes.php
-_x( 'Notifications', 'Module Name', 'jetpack' );
-_x( 'Receive notification of site activity via the admin toolbar and your Mobile devices.', 'Module Description', 'jetpack' );
-
-// modules/omnisearch.php
-_x( 'Omnisearch', 'Module Name', 'jetpack' );
-_x( 'Search your entire database from a single field in your Dashboard.', 'Module Description', 'jetpack' );
-
-// modules/photon.php
-_x( 'Photon', 'Module Name', 'jetpack' );
-_x( 'Speed up images and photos.', 'Module Description', 'jetpack' );
-_x( 'Mirrors and serves your images from our free and fast image CDN, improving your site’s performance with no additional load on your servers.', 'Jumpstart Description', 'jetpack' );
-
-// modules/post-by-email.php
-_x( 'Post by Email', 'Module Name', 'jetpack' );
-_x( 'Publish posts by email, using any device and email client.', 'Module Description', 'jetpack' );
-
-// modules/protect.php
-_x( 'Protect', 'Module Name', 'jetpack' );
-_x( 'Prevent brute force attacks.', 'Module Description', 'jetpack' );
-
-// modules/publicize.php
-_x( 'Publicize', 'Module Name', 'jetpack' );
-_x( 'Automatically promote content.', 'Module Description', 'jetpack' );
-
-// modules/related-posts.php
-_x( 'Related Posts', 'Module Name', 'jetpack' );
-_x( 'Display similar content.', 'Module Description', 'jetpack' );
-_x( 'Keep visitors engaged on your blog by highlighting relevant and new content at the bottom of each published post.', 'Jumpstart Description', 'jetpack' );
-
-// modules/sharedaddy.php
-_x( 'Sharing', 'Module Name', 'jetpack' );
-_x( 'Visitors can share your content.', 'Module Description', 'jetpack' );
-_x( 'Twitter, Facebook and Google+ buttons at the bottom of each post, making it easy for visitors to share your content.', 'Jumpstart Description', 'jetpack' );
-
-// modules/shortcodes.php
-_x( 'Shortcode Embeds', 'Module Name', 'jetpack' );
-_x( 'Embed content from YouTube, Vimeo, SlideShare, and more, no coding necessary.', 'Module Description', 'jetpack' );
-
-// modules/shortlinks.php
-_x( 'WP.me Shortlinks', 'Module Name', 'jetpack' );
-_x( 'Enable WP.me-powered shortlinks for all posts and pages.', 'Module Description', 'jetpack' );
-
-// modules/site-icon.php
-_x( 'Site Icon', 'Module Name', 'jetpack' );
-_x( 'Add a site icon to your site.', 'Module Description', 'jetpack' );
-
-// modules/sitemaps.php
-_x( 'Sitemaps', 'Module Name', 'jetpack' );
-_x( 'Creates sitemaps to allow your site to be easily indexed by search engines.', 'Module Description', 'jetpack' );
-
-// modules/sso.php
-_x( 'Single Sign On', 'Module Name', 'jetpack' );
-_x( 'Secure user authentication.', 'Module Description', 'jetpack' );
-_x( 'Lets you log in to all your Jetpack-enabled sites with one click using your WordPress.com account.', 'Jumpstart Description', 'jetpack' );
-
-// modules/stats.php
-_x( 'Site Stats', 'Module Name', 'jetpack' );
-_x( 'Collect traffic stats and insights.', 'Module Description', 'jetpack' );
-
-// modules/subscriptions.php
-_x( 'Subscriptions', 'Module Name', 'jetpack' );
-_x( 'Allow users to subscribe to your posts and comments and receive notifications via email.', 'Module Description', 'jetpack' );
-_x( 'Give visitors two easy subscription options — while commenting, or via a separate email subscription widget you can display.', 'Jumpstart Description', 'jetpack' );
-
-// modules/tiled-gallery.php
-_x( 'Tiled Galleries', 'Module Name', 'jetpack' );
-_x( 'Display your image galleries in a variety of sleek, graphic arrangements.', 'Module Description', 'jetpack' );
-
-// modules/vaultpress.php
-_x( 'Data Backups', 'Module Name', 'jetpack' );
-_x( 'Daily or real-time backups.', 'Module Description', 'jetpack' );
-
-// modules/verification-tools.php
-_x( 'Site Verification', 'Module Name', 'jetpack' );
-_x( 'Verify your site or domain with Google Search Console, Pinterest, and others.', 'Module Description', 'jetpack' );
-
-// modules/videopress.php
-_x( 'VideoPress', 'Module Name', 'jetpack' );
-_x( 'Upload and embed videos right on your site. (Subscription required.)', 'Module Description', 'jetpack' );
-
-// modules/widget-visibility.php
-_x( 'Widget Visibility', 'Module Name', 'jetpack' );
-_x( 'Specify which widgets appear on which pages of your site.', 'Module Description', 'jetpack' );
-
-// modules/widgets.php
-_x( 'Extra Sidebar Widgets', 'Module Name', 'jetpack' );
-_x( 'Add images, Twitter streams, your site’s RSS links, and more to your sidebar.', 'Module Description', 'jetpack' );
-
-// Modules with `Other` tag:
-// - modules/contact-form.php
-// - modules/notes.php
-// - modules/site-icon.php
-_x( 'Other', 'Module Tag', 'jetpack' );
-
-// Modules with `Writing` tag:
-// - modules/after-the-deadline.php
-// - modules/custom-content-types.php
-// - modules/enhanced-distribution.php
-// - modules/json-api.php
-// - modules/latex.php
-// - modules/markdown.php
-// - modules/post-by-email.php
-// - modules/shortcodes.php
-_x( 'Writing', 'Module Tag', 'jetpack' );
-
-// Modules with `Photos and Videos` tag:
-// - modules/carousel.php
-// - modules/photon.php
-// - modules/shortcodes.php
-// - modules/tiled-gallery.php
-// - modules/videopress.php
-_x( 'Photos and Videos', 'Module Tag', 'jetpack' );
-
-// Modules with `Social` tag:
-// - modules/comments.php
-// - modules/gravatar-hovercards.php
-// - modules/likes.php
-// - modules/publicize.php
-// - modules/sharedaddy.php
-// - modules/shortcodes.php
-// - modules/shortlinks.php
-// - modules/subscriptions.php
-// - modules/widgets.php
-_x( 'Social', 'Module Tag', 'jetpack' );
-
-// Modules with `Appearance` tag:
-// - modules/custom-css.php
-// - modules/gravatar-hovercards.php
-// - modules/infinite-scroll.php
-// - modules/minileven.php
-// - modules/photon.php
-// - modules/shortcodes.php
-// - modules/widget-visibility.php
-// - modules/widgets.php
-_x( 'Appearance', 'Module Tag', 'jetpack' );
-
-// Modules with `Developers` tag:
-// - modules/json-api.php
-// - modules/omnisearch.php
-// - modules/sso.php
-_x( 'Developers', 'Module Tag', 'jetpack' );
-
-// Modules with `Centralized Management` tag:
-// - modules/manage.php
-_x( 'Centralized Management', 'Module Tag', 'jetpack' );
-
-// Modules with `Recommended` tag:
-// - modules/manage.php
-// - modules/minileven.php
-// - modules/monitor.php
-// - modules/photon.php
-// - modules/protect.php
-// - modules/publicize.php
-// - modules/related-posts.php
-// - modules/sharedaddy.php
-// - modules/sitemaps.php
-// - modules/stats.php
-_x( 'Recommended', 'Module Tag', 'jetpack' );
-
-// Modules with `Mobile` tag:
-// - modules/minileven.php
-_x( 'Mobile', 'Module Tag', 'jetpack' );
-
-// Modules with `Traffic` tag:
-// - modules/sitemaps.php
-_x( 'Traffic', 'Module Tag', 'jetpack' );
-
-// Modules with `Site Stats` tag:
-// - modules/stats.php
-_x( 'Site Stats', 'Module Tag', 'jetpack' );
+function jetpack_get_module_i18n( $key ) {
+ static $modules;
+ if ( ! isset( $modules ) ) {
+ $modules = array(
+ 'after-the-deadline' => array(
+ 'name' => _x( 'Spelling and Grammar', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Check your spelling, style, and grammar with the After the Deadline proofreading service.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'carousel' => array(
+ 'name' => _x( 'Carousel', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Transform standard image galleries into full-screen slideshows.', 'Module Description', 'jetpack' ),
+ 'recommended description' => _x( 'Brings your photos and images to life as full-size, easily navigable galleries.', 'Jumpstart Description', 'jetpack' ),
+ ),
+
+ 'comments' => array(
+ 'name' => _x( 'Comments', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Let readers comment with WordPress.com, Twitter, Facebook, or Google+ accounts.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'contact-form' => array(
+ 'name' => _x( 'Contact Form', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Insert a contact form anywhere on your site.', 'Module Description', 'jetpack' ),
+ 'recommended description' => _x( 'Adds a button to your post and page editors, allowing you to build simple forms to help visitors stay in touch.', 'Jumpstart Description', 'jetpack' ),
+ ),
+
+ 'custom-content-types' => array(
+ 'name' => _x( 'Custom Content Types', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Organize and display different types of content on your site, separate from posts and pages.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'custom-css' => array(
+ 'name' => _x( 'Custom CSS', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Customize your site’s CSS without modifying your theme.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'enhanced-distribution' => array(
+ 'name' => _x( 'Enhanced Distribution', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Increase reach and traffic.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'gravatar-hovercards' => array(
+ 'name' => _x( 'Gravatar Hovercards', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Enable pop-up business cards over commenters’ Gravatars.', 'Module Description', 'jetpack' ),
+ 'recommended description' => _x( 'Let commenters link their profiles to their Gravatar accounts, making it easy for your visitors to learn more about your community.', 'Jumpstart Description', 'jetpack' ),
+ ),
+
+ 'infinite-scroll' => array(
+ 'name' => _x( 'Infinite Scroll', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Add support for infinite scroll to your theme.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'json-api' => array(
+ 'name' => _x( 'JSON API', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Allow applications to securely access your content through the cloud.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'latex' => array(
+ 'name' => _x( 'Beautiful Math', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Use LaTeX markup language in posts and pages for complex equations and other geekery.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'likes' => array(
+ 'name' => _x( 'Likes', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Give visitors an easy way to show their appreciation for your content.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'manage' => array(
+ 'name' => _x( 'Manage', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Manage all your sites from a centralized place, https://wordpress.com/sites.', 'Module Description', 'jetpack' ),
+ 'recommended description' => _x( 'Helps you remotely manage plugins, turn on automated updates, and more from <a href="https://wordpress.com/plugins/" target="_blank">wordpress.com</a>.', 'Jumpstart Description', 'jetpack' ),
+ ),
+
+ 'markdown' => array(
+ 'name' => _x( 'Markdown', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Write posts or pages in plain-text Markdown syntax.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'minileven' => array(
+ 'name' => _x( 'Mobile Theme', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Optimize your site with a mobile-friendly theme for smartphones.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'monitor' => array(
+ 'name' => _x( 'Monitor', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Reports on site downtime.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'notes' => array(
+ 'name' => _x( 'Notifications', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Receive notification of site activity via the admin toolbar and your Mobile devices.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'omnisearch' => array(
+ 'name' => _x( 'Omnisearch', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Search your entire database from a single field in your Dashboard.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'photon' => array(
+ 'name' => _x( 'Photon', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Speed up images and photos.', 'Module Description', 'jetpack' ),
+ 'recommended description' => _x( 'Mirrors and serves your images from our free and fast image CDN, improving your site’s performance with no additional load on your servers.', 'Jumpstart Description', 'jetpack' ),
+ ),
+
+ 'post-by-email' => array(
+ 'name' => _x( 'Post by Email', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Publish posts by email, using any device and email client.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'protect' => array(
+ 'name' => _x( 'Protect', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Prevent brute force attacks.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'publicize' => array(
+ 'name' => _x( 'Publicize', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Automatically promote content.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'related-posts' => array(
+ 'name' => _x( 'Related Posts', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Display similar content.', 'Module Description', 'jetpack' ),
+ 'recommended description' => _x( 'Keep visitors engaged on your blog by highlighting relevant and new content at the bottom of each published post.', 'Jumpstart Description', 'jetpack' ),
+ ),
+
+ 'sharedaddy' => array(
+ 'name' => _x( 'Sharing', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Visitors can share your content.', 'Module Description', 'jetpack' ),
+ 'recommended description' => _x( 'Twitter, Facebook and Google+ buttons at the bottom of each post, making it easy for visitors to share your content.', 'Jumpstart Description', 'jetpack' ),
+ ),
+
+ 'shortcodes' => array(
+ 'name' => _x( 'Shortcode Embeds', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Embed content from YouTube, Vimeo, SlideShare, and more, no coding necessary.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'shortlinks' => array(
+ 'name' => _x( 'WP.me Shortlinks', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Enable WP.me-powered shortlinks for all posts and pages.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'site-icon' => array(
+ 'name' => _x( 'Site Icon', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Add a site icon to your site.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'sitemaps' => array(
+ 'name' => _x( 'Sitemaps', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Creates sitemaps to allow your site to be easily indexed by search engines.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'sso' => array(
+ 'name' => _x( 'Single Sign On', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Secure user authentication.', 'Module Description', 'jetpack' ),
+ 'recommended description' => _x( 'Lets you log in to all your Jetpack-enabled sites with one click using your WordPress.com account.', 'Jumpstart Description', 'jetpack' ),
+ ),
+
+ 'stats' => array(
+ 'name' => _x( 'Site Stats', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Collect traffic stats and insights.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'subscriptions' => array(
+ 'name' => _x( 'Subscriptions', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Allow users to subscribe to your posts and comments and receive notifications via email.', 'Module Description', 'jetpack' ),
+ 'recommended description' => _x( 'Give visitors two easy subscription options — while commenting, or via a separate email subscription widget you can display.', 'Jumpstart Description', 'jetpack' ),
+ ),
+
+ 'tiled-gallery' => array(
+ 'name' => _x( 'Tiled Galleries', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Display your image galleries in a variety of sleek, graphic arrangements.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'vaultpress' => array(
+ 'name' => _x( 'Data Backups', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Daily or real-time backups.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'verification-tools' => array(
+ 'name' => _x( 'Site Verification', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Verify your site or domain with Google Search Console, Pinterest, and others.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'videopress' => array(
+ 'name' => _x( 'VideoPress', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Upload and embed videos right on your site. (Subscription required.)', 'Module Description', 'jetpack' ),
+ ),
+
+ 'widget-visibility' => array(
+ 'name' => _x( 'Widget Visibility', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Specify which widgets appear on which pages of your site.', 'Module Description', 'jetpack' ),
+ ),
+
+ 'widgets' => array(
+ 'name' => _x( 'Extra Sidebar Widgets', 'Module Name', 'jetpack' ),
+ 'description' => _x( 'Add images, Twitter streams, your site’s RSS links, and more to your sidebar.', 'Module Description', 'jetpack' ),
+ ),
+ );
+ }
+ return $modules[ $key ];
+}
+/**
+ * For a given module tag, return its translated version.
+ *
+ * @param string $key Module tag as is in each module heading.
+ *
+ * @return string
+ */
+function jetpack_get_module_i18n_tag( $key ) {
+ static $module_tags;
+ if ( ! isset( $module_tags ) ) {
+ $module_tags = array(
+ // Modules with `Other` tag:
+ // - modules/contact-form.php
+ // - modules/notes.php
+ // - modules/site-icon.php
+ 'Other' =>_x( 'Other', 'Module Tag', 'jetpack' ),
+
+ // Modules with `Writing` tag:
+ // - modules/after-the-deadline.php
+ // - modules/custom-content-types.php
+ // - modules/enhanced-distribution.php
+ // - modules/json-api.php
+ // - modules/latex.php
+ // - modules/markdown.php
+ // - modules/post-by-email.php
+ // - modules/shortcodes.php
+ 'Writing' =>_x( 'Writing', 'Module Tag', 'jetpack' ),
+
+ // Modules with `Photos and Videos` tag:
+ // - modules/carousel.php
+ // - modules/photon.php
+ // - modules/shortcodes.php
+ // - modules/tiled-gallery.php
+ // - modules/videopress.php
+ 'Photos and Videos' =>_x( 'Photos and Videos', 'Module Tag', 'jetpack' ),
+
+ // Modules with `Social` tag:
+ // - modules/comments.php
+ // - modules/gravatar-hovercards.php
+ // - modules/likes.php
+ // - modules/publicize.php
+ // - modules/sharedaddy.php
+ // - modules/shortcodes.php
+ // - modules/shortlinks.php
+ // - modules/subscriptions.php
+ // - modules/widgets.php
+ 'Social' =>_x( 'Social', 'Module Tag', 'jetpack' ),
+
+ // Modules with `Appearance` tag:
+ // - modules/custom-css.php
+ // - modules/gravatar-hovercards.php
+ // - modules/infinite-scroll.php
+ // - modules/minileven.php
+ // - modules/photon.php
+ // - modules/shortcodes.php
+ // - modules/widget-visibility.php
+ // - modules/widgets.php
+ 'Appearance' =>_x( 'Appearance', 'Module Tag', 'jetpack' ),
+
+ // Modules with `Developers` tag:
+ // - modules/json-api.php
+ // - modules/omnisearch.php
+ // - modules/sso.php
+ 'Developers' =>_x( 'Developers', 'Module Tag', 'jetpack' ),
+
+ // Modules with `Centralized Management` tag:
+ // - modules/manage.php
+ 'Centralized Management' =>_x( 'Centralized Management', 'Module Tag', 'jetpack' ),
+
+ // Modules with `Recommended` tag:
+ // - modules/manage.php
+ // - modules/minileven.php
+ // - modules/monitor.php
+ // - modules/photon.php
+ // - modules/protect.php
+ // - modules/publicize.php
+ // - modules/related-posts.php
+ // - modules/sharedaddy.php
+ // - modules/sitemaps.php
+ // - modules/stats.php
+ 'Recommended' =>_x( 'Recommended', 'Module Tag', 'jetpack' ),
+
+ // Modules with `Mobile` tag:
+ // - modules/minileven.php
+ 'Mobile' =>_x( 'Mobile', 'Module Tag', 'jetpack' ),
+
+ // Modules with `Traffic` tag:
+ // - modules/sitemaps.php
+ 'Traffic' =>_x( 'Traffic', 'Module Tag', 'jetpack' ),
+
+ // Modules with `Site Stats` tag:
+ // - modules/stats.php
+ 'Site Stats' =>_x( 'Site Stats', 'Module Tag', 'jetpack' ),
+ );
+ }
+ return $module_tags[ $key ];
+} \ No newline at end of file
diff --git a/plugins/jetpack/modules/module-info.php b/plugins/jetpack/modules/module-info.php
index b5b75350..857900a8 100644
--- a/plugins/jetpack/modules/module-info.php
+++ b/plugins/jetpack/modules/module-info.php
@@ -96,7 +96,7 @@ function jetpack_shortcodes_more_info() { ?>
'gist' => 'http://en.support.wordpress.com/gist/',
'googlemaps' => 'http://support.wordpress.com/google-maps/',
'instagram' => 'https://en.support.wordpress.com/instagram/instagram-images/',
- 'jetpack_subscription_form' => 'http://jetpack.me/support/subscriptions/#display',
+ 'jetpack_subscription_form' => 'http://jetpack.com/support/subscriptions/#display',
'polldaddy' => 'http://support.polldaddy.com/wordpress-shortcodes/',
'presentation' => 'http://en.support.wordpress.com/presentations/',
'recipes' => 'http://en.support.wordpress.com/recipes/',
@@ -172,7 +172,7 @@ add_action( 'jetpack_module_more_info_stats', 'stats_more_info' );
* Publicize
*/
function publicize_load_more_link( $description ) {
- echo '<a class="button-secondary more-info-link" href="http://jetpack.me/support/publicize/">' . esc_html__( 'Learn More', 'jetpack' ) . '</a>';
+ echo '<a class="button-secondary more-info-link" href="http://jetpack.com/support/publicize/">' . esc_html__( 'Learn More', 'jetpack' ) . '</a>';
}
add_filter( 'jetpack_learn_more_button_publicize', 'publicize_load_more_link' );
@@ -192,7 +192,7 @@ function publicize_more_info() { ?>
<?php endif; ?>
- <p>&rarr; <a href="http://jetpack.me/support/publicize/"><?php esc_html_e( 'More information on using Publicize.', 'jetpack' ); ?></a></p>
+ <p>&rarr; <a href="http://jetpack.com/support/publicize/"><?php esc_html_e( 'More information on using Publicize.', 'jetpack' ); ?></a></p>
<?php
}
add_action( 'jetpack_module_more_info_publicize', 'publicize_more_info' );
@@ -378,7 +378,7 @@ add_action( 'jetpack_module_more_info_enhanced-distribution', 'jetpack_enhanced_
* Protect
*/
function jetpack_protect_more_link() {
- echo '<a class="button-secondary more-info-link" href="http://jetpack.me/support/protect/">' . esc_html__( 'Learn More', 'jetpack' ) . '</a>';
+ echo '<a class="button-secondary more-info-link" href="http://jetpack.com/support/protect/">' . esc_html__( 'Learn More', 'jetpack' ) . '</a>';
}
add_action( 'jetpack_learn_more_button_protect', 'jetpack_protect_more_link' );
@@ -396,7 +396,7 @@ add_action( 'jetpack_module_more_info_protect', 'jetpack_protect_more_info' );
* JSON API
*/
function jetpack_json_api_more_link() {
- echo '<a class="button-secondary more-info-link" href="http://jetpack.me/support/json-api/">' . esc_html__( 'Learn More', 'jetpack' ) . '</a>';
+ echo '<a class="button-secondary more-info-link" href="http://jetpack.com/support/json-api/">' . esc_html__( 'Learn More', 'jetpack' ) . '</a>';
}
add_action( 'jetpack_learn_more_button_json-api', 'jetpack_json_api_more_link' );
@@ -430,7 +430,10 @@ function jetpack_contact_form_more_info() {
echo '</p>';
echo '<p>';
- _e( 'Each contact form can easily be customized to fit your needs. When a user submits your contact form, the feedback will be filtered through <a href="http://akismet.com/">Akismet</a> (if it is active on your site) to make sure it’s not spam. Any legitimate feedback will then be emailed to you, and added to your feedback management area.', 'jetpack' );
+ printf(
+ __( 'Each contact form can easily be customized to fit your needs. When a user submits your contact form, the feedback will be filtered through <a href="http://akismet.com/">Akismet</a> (if it is <a href="%s">active on your site</a>) to make sure it’s not spam. Any legitimate feedback will then be emailed to you, and added to your feedback management area.', 'jetpack' ),
+ admin_url( 'plugin-install.php?tab=search&s=akismet' )
+ );
echo '</p>';
}
add_action( 'jetpack_module_more_info_contact-form', 'jetpack_contact_form_more_info' );
@@ -493,8 +496,16 @@ function jetpack_custom_css_more_info() { ?>
</div>
<p><?php esc_html_e( "The Custom CSS editor gives you the ability to add to or replace your theme's CSS, all while supplying syntax coloring, auto-indentation, and immediate feedback on the validity of the CSS you're writing.", 'jetpack' ); ?></p>
- <p><?php printf( __( 'To use the CSS editor, go to Appearance &#8594; <a href="%s">Edit CSS</a>.', 'jetpack' ), admin_url( 'themes.php?page=editcss' ) ); ?></p>
-<?php
+
+ <?php if ( Jetpack::is_module_active( 'custom-css' ) ) : ?>
+
+ <p><?php printf( __( 'To use the CSS editor, go to Appearance &#8594; <a href="%s">Edit CSS</a>.', 'jetpack' ), admin_url( 'themes.php?page=editcss' ) ); ?></p>
+
+ <?php else : ?>
+
+ <p><?php esc_html_e( 'After activating this module, find the editor in Appearance &#8594; Edit CSS.', 'jetpack' ); ?></p>
+
+ <?php endif;
}
add_action( 'jetpack_module_more_info_custom-css', 'jetpack_custom_css_more_info' );
@@ -527,7 +538,7 @@ function jetpack_infinite_scroll_more_button() {
add_action( 'jetpack_learn_more_button_infinite-scroll', 'jetpack_infinite_scroll_more_button' );
function jetpack_infinite_scroll_more_info() {
- $support_text = sprintf( __( 'If you are a theme author, you can learn about adding support for Infinite Scroll at <a href="%1$s">%1$s</a>.', 'jetpack' ), 'http://jetpack.me/support/infinite-scroll/' );
+ $support_text = sprintf( __( 'If you are a theme author, you can learn about adding support for Infinite Scroll at <a href="%1$s">%1$s</a>.', 'jetpack' ), 'http://jetpack.com/support/infinite-scroll/' );
?>
@@ -564,7 +575,7 @@ add_action( 'jetpack_module_more_info_infinite-scroll', 'jetpack_infinite_scroll
* Post by Email
*/
function jetpack_post_by_email_more_link() {
- echo '<a class="button-secondary more-info-link" href="http://jetpack.me/support/post-by-email/">' . __( 'Learn More', 'jetpack' ) . '</a>';
+ echo '<a class="button-secondary more-info-link" href="http://jetpack.com/support/post-by-email/">' . __( 'Learn More', 'jetpack' ) . '</a>';
}
add_action( 'jetpack_learn_more_button_post-by-email', 'jetpack_post_by_email_more_link' );
@@ -577,7 +588,7 @@ function jetpack_post_by_email_more_info() { ?>
<p><?php printf( __( 'Manage your Post By Email address from your <a href="%s">profile settings</a>.', 'jetpack' ), esc_url( get_edit_profile_url( get_current_user_id() ) . '#post-by-email' ) ); ?>
- <p>&rarr; <a href="http://jetpack.me/support/post-by-email/"><?php esc_html_e( 'More information on sending emails, attachments, and customizing your posts.', 'jetpack' ); ?></a></p>
+ <p>&rarr; <a href="http://jetpack.com/support/post-by-email/"><?php esc_html_e( 'More information on sending emails, attachments, and customizing your posts.', 'jetpack' ); ?></a></p>
<?php
}
@@ -628,7 +639,7 @@ add_action( 'jetpack_learn_more_button_likes', 'jetpack_likes_more_link' );
function jetpack_likes_more_info() { ?>
<div class="jp-info-img">
- <a href="http://jetpack.me/support/likes/">
+ <a href="http://jetpack.com/support/likes/">
<img class="jp-info-img" src="<?php echo plugins_url( basename( dirname( dirname( __FILE__ ) ) ) . '/images/screenshots/likes.jpg' ) ?>" alt="<?php esc_attr_e( 'Likes', 'jetpack' ) ?>" width="323" height="69" />
</a>
</div>
@@ -643,7 +654,7 @@ function jetpack_likes_more_info() { ?>
<li><?php esc_html_e( 'Ensure that "WordPress.com Likes are…" is set to "On for all posts"', 'jetpack' ); ?></li>
</ol>
<?php endif; ?>
- <p>&rarr; <a href="http://jetpack.me/support/likes/"><?php esc_html_e( 'More information on using Likes.', 'jetpack' ); ?></a></p>
+ <p>&rarr; <a href="http://jetpack.com/support/likes/"><?php esc_html_e( 'More information on using Likes.', 'jetpack' ); ?></a></p>
<?php
}
@@ -653,7 +664,7 @@ add_action( 'jetpack_module_more_info_likes', 'jetpack_likes_more_info' );
* Omnisearch
*/
function jetpack_omnisearch_more_link() {
- echo '<a class="button-secondary more-info-link" href="http://jetpack.me/support/omnisearch/">' . __( 'Learn More', 'jetpack' ) . '</a>';
+ echo '<a class="button-secondary more-info-link" href="http://jetpack.com/support/omnisearch/">' . __( 'Learn More', 'jetpack' ) . '</a>';
}
add_action( 'jetpack_learn_more_button_omnisearch', 'jetpack_omnisearch_more_link' );
@@ -675,7 +686,7 @@ add_action( 'jetpack_module_more_info_omnisearch', 'jetpack_omnisearch_more_inf
* Widget Visibility
*/
function jetpack_widget_visibility_more_link() {
- echo '<a class="button-secondary more-info-link" href="http://jetpack.me/support/widget-visibility/">' . __( 'Learn More', 'jetpack' ) . '</a>';
+ echo '<a class="button-secondary more-info-link" href="http://jetpack.com/support/widget-visibility/">' . __( 'Learn More', 'jetpack' ) . '</a>';
}
add_action( 'jetpack_learn_more_button_widget-visibility', 'jetpack_widget_visibility_more_link' );
@@ -710,7 +721,7 @@ add_action( 'jetpack_module_more_info_videopress', 'jetpack_videopress_more_info
* SSO
*/
function jetpack_sso_more_link() {
- echo '<a class="button-secondary more-info-link" href="http://jetpack.me/support/sso/">' . __( 'Learn More', 'jetpack' ) . '</a>';
+ echo '<a class="button-secondary more-info-link" href="http://jetpack.com/support/sso/">' . __( 'Learn More', 'jetpack' ) . '</a>';
}
add_action( 'jetpack_learn_more_button_sso', 'jetpack_sso_more_link' );
@@ -727,7 +738,7 @@ add_action( 'jetpack_module_more_info_sso', 'jetpack_sso_more_info' );
* Monitor
*/
function jetpack_monitor_more_link() {
- echo '<a class="button-secondary more-info-link" href="http://jetpack.me/support/monitor/">' . esc_html__( 'Learn More', 'jetpack' ) . '</a>';
+ echo '<a class="button-secondary more-info-link" href="http://jetpack.com/support/monitor/">' . esc_html__( 'Learn More', 'jetpack' ) . '</a>';
}
add_action( 'jetpack_learn_more_button_monitor', 'jetpack_monitor_more_link' );
@@ -752,13 +763,13 @@ add_action( 'jetpack_learn_more_button_related-posts', 'jetpack_related_posts_mo
function jetpack_related_posts_more_info() {
$template = <<<EOT
<div class="jp-info-img">
- <a href="http://jetpack.me/support/related-posts/">
+ <a href="http://jetpack.com/support/related-posts/">
<img class="jp-info-img" src="%s" alt="%s" width="300" height="98" />
</a>
</div>
<p>%s</p>
- <p>&rarr; <a href="http://jetpack.me/support/related-posts/">%s</a></p>
+ <p>&rarr; <a href="http://jetpack.com/support/related-posts/">%s</a></p>
<hr />
<p><a href="%s#sync-related-posts">%s</a></p>
EOT;
@@ -818,21 +829,32 @@ function jetpack_custom_content_types_more_info() { ?>
<img class="jp-info-img" src="<?php echo plugins_url( basename( dirname( dirname( __FILE__ ) ) ) . '/images/screenshots/custom-content-types.jpg' ) ?>" alt="<?php esc_attr_e( 'Custom Content Type', 'jetpack' ) ?>" width="300" height="150" />
</div>
- <p><?php esc_html_e( 'Organize and display different types of content on your site, separate from posts and pages.', 'jetpack' ); ?></p>
- <p><?php printf( __( 'To enable a custom content type, head over to <a href="%s">Settings &rarr; Writing &rarr; Your Custom Content Types</a> to activate either "Portfolio Projects” or “Testimonials” by checking the corresponding checkbox. You can now add projects and testimonials under the new "Portfolio” or “Testimonials” menu item in your sidebar.', 'jetpack' ), admin_url( 'options-writing.php#cpt-options' ) ); ?></p>
- <p><?php
- /* translators: all variables are URLs */
- printf(
- __(
- 'Once added, your custom content will be visible on your website at %1$s or %2$s, or you may add them with <a href="%3$s" target="_blank">shortcodes</a>.',
- 'jetpack'
- ),
- get_site_url() . '/portfolio/',
- get_site_url() . '/testimonial/',
- 'http://jetpack.me/support/custom-content-types/'
- );
- ?></p>
-<?php
+ <p><?php esc_html_e( 'Organize and display different types of content on your site, such as Portfolio Projects and Testimonials. These content types are separate from Posts and Pages.', 'jetpack' ); ?></p>
+
+ <?php if ( Jetpack::is_module_active( 'custom-content-types' ) ) : ?>
+
+ <p><?php printf( __( 'To enable a custom content type, head over to <a href="%s">Settings &rarr; Writing &rarr; Your Custom Content Types</a> and activate either "Portfolio Projects” or “Testimonials” by checking the corresponding checkbox. You can now add projects and testimonials under the new "Portfolio” and “Testimonials” menu items in your sidebar.', 'jetpack' ), admin_url( 'options-writing.php#cpt-options' ) ); ?></p>
+
+ <p><?php
+ /* translators: all variables are URLs */
+ printf(
+ __(
+ 'Once added, your custom content will be visible on your website at <a href="%1$s">%1$s</a> or <a href="%2$s">%2$s</a>, or you may add them with <a href="%3$s" target="_blank">shortcodes</a>.',
+ 'jetpack'
+ ),
+ get_site_url() . '/portfolio/',
+ get_site_url() . '/testimonial/',
+ 'http://jetpack.com/support/custom-content-types/'
+ );
+ ?></p>
+
+ <?php else : ?>
+
+ <p><?php esc_html_e( 'Once activated, you can selectively activate the content types you need at Settings &rarr; Writing &rarr; Your Custom Content Types.'); ?></p>
+
+ <p><?php echo wp_kses( sprintf( __( 'Full details can be found on the <a href="%s" title="Custom Content Types support page" target="_blank">Custom Content Types support page</a>.', 'jetpack' ), 'https://jetpack.com/support/custom-content-types/' ), array( 'a' => array( 'href' => true, 'title' => true, 'target' => true ) ) ); ?></p>
+
+ <?php endif;
}
add_action( 'jetpack_module_more_info_custom-content-types', 'jetpack_custom_content_types_more_info' );
@@ -840,7 +862,7 @@ add_action( 'jetpack_module_more_info_custom-content-types', 'jetpack_custom_con
* Site Icon
*/
function jetpack_site_icon_more_link() {
- echo '<a class="button-secondary more-info-link" href="http://jetpack.me/support/site-icon">' . __( 'Learn More', 'jetpack' ) . '</a>';
+ echo '<a class="button-secondary more-info-link" href="http://jetpack.com/support/site-icon">' . __( 'Learn More', 'jetpack' ) . '</a>';
}
add_action( 'jetpack_learn_more_button_site-icon', 'jetpack_site_icon_more_link' );
@@ -861,7 +883,7 @@ add_action( 'jetpack_module_more_info_site-icon', 'jetpack_custom_site_icon' );
* Manage
*/
function jetpack_manage_more_link() {
- echo '<a class="button-secondary more-info-link" href="http://jetpack.me/support/site-management/">' . __( 'Learn More', 'jetpack' ) . '</a>';
+ echo '<a class="button-secondary more-info-link" href="http://jetpack.com/support/site-management/">' . __( 'Learn More', 'jetpack' ) . '</a>';
}
add_action( 'jetpack_learn_more_button_manage', 'jetpack_manage_more_link' );
@@ -887,13 +909,39 @@ add_action( 'jetpack_module_more_info_manage', 'jetpack_custom_jetpack_manage' )
// XML Sitemap: START
function jetpack_xml_sitemap_more_info() { ?>
- <p><?php esc_html_e( 'This module creates an XML sitemap file that lists the URLs of posts and pages in your site with important information about each one.', 'jetpack' ); ?></p>
- <p><?php esc_html_e( 'This file is accessed by search engines like Google or Bing so they can crawl and understand your site.', 'jetpack' ); ?></p>
- <p>&rarr; <a href="http://jetpack.me/support/sitemaps/"><?php esc_html_e( 'More information on Sitemaps.', 'jetpack' ); ?></a></p>
+ <p><?php esc_html_e( 'This module creates two XML sitemap files that list the URLs of posts and pages in your site with important information about each one. This files can be accessed by search engines like Google or Bing so they can crawl and understand your site.', 'jetpack' ); ?></p>
<?php if ( '0' == get_option( 'blog_public' ) ) : ?>
- <p><strong><?php esc_html_e( 'Your site is currently set to discourage search engines from indexing it so the sitemap will not be accesible.', 'jetpack' ); ?></strong></p>
+ <p><strong><?php esc_html_e( 'Your site is currently set to discourage search engines from indexing it so the sitemap will not be accessible.', 'jetpack' ); ?></strong></p>
+ <?php else :
+ if ( get_option( 'permalink_structure' ) ) {
+ /** This filter is documented in modules/sitemaps/sitemaps.php */
+ $sitemap_url = apply_filters( 'jetpack_sitemap_location', home_url( '/sitemap.xml' ) );
+ /** This filter is documented in modules/sitemaps/sitemaps.php */
+ $news_sitemap_url = apply_filters( 'jetpack_news_sitemap_location', home_url( '/news-sitemap.xml' ) );
+ } else {
+ /** This filter is documented in modules/sitemaps/sitemaps.php */
+ $sitemap_url = apply_filters( 'jetpack_sitemap_location', home_url( '/?jetpack-sitemap=true' ) );
+ /** This filter is documented in modules/sitemaps/sitemaps.php */
+ $news_sitemap_url = apply_filters( 'jetpack_news_sitemap_location', home_url( '/?jetpack-news-sitemap=true' ) );
+ }
+ if ( Jetpack::is_module_active( 'sitemaps' ) ) : ?>
+ <p><?php esc_html_e( 'Your sitemaps are accessible at:', 'jetpack' ); ?></p>
+ <?php else : ?>
+ <p><?php esc_html_e( 'After activating the module, your sitemaps will be accessible at:', 'jetpack' ); ?></p>
+ <?php endif; ?>
+ <ul>
+ <li>
+ <?php /* translators: the placeholder is an URL of a sitemap */ ?>
+ <?php printf( __( '<a href="%1$s" target="_blank">%1$s</a>&nbsp&#150; a standard sitemap for use with any search engine;', 'jetpack' ), esc_url( $sitemap_url ) ); ?>
+ </li>
+ <li>
+ <?php /* translators: the placeholder is an URL of a sitemap */ ?>
+ <?php printf( __( '<a href="%1$s" target="_blank">%1$s</a>&nbsp;&#150; a sitemap specially tailored for Google News.', 'jetpack' ), esc_url( $news_sitemap_url ) ); ?>
+ </li>
+ </ul>
<?php endif; ?>
- <?php
+ <p>&rarr; <a href="http://jetpack.com/support/sitemaps/"><?php esc_html_e( 'More information on Sitemaps.', 'jetpack' ); ?></a></p>
+<?php
}
add_action( 'jetpack_module_more_info_sitemaps', 'jetpack_xml_sitemap_more_info' );
-// XML Sitemap: STOP \ No newline at end of file
+// XML Sitemap: STOP
diff --git a/plugins/jetpack/modules/monitor.php b/plugins/jetpack/modules/monitor.php
index 4fd2d671..812e41ce 100644
--- a/plugins/jetpack/modules/monitor.php
+++ b/plugins/jetpack/modules/monitor.php
@@ -151,6 +151,26 @@ class Jetpack_Monitor {
return true;
}
+ /*
+ * Returns date of the last downtime.
+ *
+ * @since 4.0
+ * @return date in YYYY-MM-DD HH:mm:ss format
+ */
+ public function monitor_get_last_downtime() {
+ Jetpack::load_xml_rpc_client();
+ $xml = new Jetpack_IXR_Client( array(
+ 'user_id' => get_current_user_id()
+ ) );
+
+ $xml->query( 'jetpack.monitor.getLastDowntime' );
+
+ if ( $xml->isError() ) {
+ return new WP_Error( 'monitor-downtime', $xml->getErrorMessage() );
+ }
+ return $xml->getResponse();
+ }
+
}
new Jetpack_Monitor;
diff --git a/plugins/jetpack/modules/post-by-email.php b/plugins/jetpack/modules/post-by-email.php
index fff3f186..c30596be 100644
--- a/plugins/jetpack/modules/post-by-email.php
+++ b/plugins/jetpack/modules/post-by-email.php
@@ -104,7 +104,7 @@ class Jetpack_Post_By_Email {
<div id="jp-pbe-info"<?php echo $info_hidden; ?>>
<p id="jp-pbe-email-wrapper">
<input type="text" id="jp-pbe-email" value="<?php echo esc_attr( $email ); ?>" readonly="readonly" class="regular-text" />
- <span class="description"><a target="_blank" href="http://jetpack.me/support/post-by-email/"><?php esc_html_e( 'More information', 'jetpack' ); ?></a></span>
+ <span class="description"><a target="_blank" href="http://jetpack.com/support/post-by-email/"><?php esc_html_e( 'More information', 'jetpack' ); ?></a></span>
</p>
<p>
<input type="button" name="jp-pbe-regenerate" id="jp-pbe-regenerate" class="button" value="<?php esc_attr_e( 'Regenerate Address', 'jetpack' ); ?> " />
diff --git a/plugins/jetpack/modules/protect.php b/plugins/jetpack/modules/protect.php
index 400328f7..d1b92de7 100644
--- a/plugins/jetpack/modules/protect.php
+++ b/plugins/jetpack/modules/protect.php
@@ -174,7 +174,7 @@ class Jetpack_Protect_Module {
<div class="jp-banner__content">
<h2><?php esc_html_e( 'Protect cannot keep your site secure.', 'jetpack' ); ?></h2>
- <p><?php printf( __( 'Thanks for activating Protect! To start protecting your site, please network activate Jetpack on your Multisite installation and activate Protect on your primary site. Due to the way logins are handled on WordPress Multisite, Jetpack must be network-enabled in order for Protect to work properly. <a href="%s" target="_blank">Learn More</a>', 'jetpack' ), 'http://jetpack.me/support/multisite-protect' ); ?></p>
+ <p><?php printf( __( 'Thanks for activating Protect! To start protecting your site, please network activate Jetpack on your Multisite installation and activate Protect on your primary site. Due to the way logins are handled on WordPress Multisite, Jetpack must be network-enabled in order for Protect to work properly. <a href="%s" target="_blank">Learn More</a>', 'jetpack' ), 'http://jetpack.com/support/multisite-protect' ); ?></p>
</div>
<div class="jp-banner__action-container is-opt-in">
<a href="<?php echo network_admin_url( 'plugins.php' ); ?>" class="jp-banner__button"
@@ -522,7 +522,7 @@ class Jetpack_Protect_Module {
* @param string $ip IP flagged by Protect.
*/
do_action( 'jpp_kill_login', $ip );
- $help_url = 'http://jetpack.me/support/security/';
+ $help_url = 'http://jetpack.com/support/security/';
$die_string = sprintf( __( 'Your IP (%1$s) has been flagged for potential security violations. <a href="%2$s">Find out more...</a>', 'jetpack' ), str_replace( 'http://', '', esc_url( 'http://' . $ip ) ), esc_url( $help_url ) );
diff --git a/plugins/jetpack/modules/publicize/ui.php b/plugins/jetpack/modules/publicize/ui.php
index 6847c6d4..92551f1b 100644
--- a/plugins/jetpack/modules/publicize/ui.php
+++ b/plugins/jetpack/modules/publicize/ui.php
@@ -22,8 +22,8 @@ class Publicize_UI {
}
function init() {
- // Show only to users with the capability required to create/delete global connections.
- if ( ! current_user_can( $this->publicize->GLOBAL_CAP ) ) {
+ // Show only to users with the capability required to manage their Publicize connections.
+ if ( ! current_user_can( 'publish_posts' ) ) {
return;
}
@@ -130,7 +130,7 @@ class Publicize_UI {
<?php
if ( $this->in_jetpack ) {
- $doc_link = "http://jetpack.me/support/publicize/";
+ $doc_link = "http://jetpack.com/support/publicize/";
} else {
$doc_link = "http://en.support.wordpress.com/publicize/";
}
diff --git a/plugins/jetpack/modules/related-posts/jetpack-related-posts.php b/plugins/jetpack/modules/related-posts/jetpack-related-posts.php
index 565759be..d7560729 100644
--- a/plugins/jetpack/modules/related-posts/jetpack-related-posts.php
+++ b/plugins/jetpack/modules/related-posts/jetpack-related-posts.php
@@ -123,7 +123,7 @@ class Jetpack_RelatedPosts {
$this->_action_frontend_init_ajax( $excludes );
} else {
- if ( isset( $_GET['relatedposts_hit'] ) ) {
+ if ( isset( $_GET['relatedposts_hit'], $_GET['relatedposts_origin'], $_GET['relatedposts_position'] ) ) {
$this->_log_click( $_GET['relatedposts_origin'], get_the_ID(), $_GET['relatedposts_position'] );
$this->_previous_post_id = (int) $_GET['relatedposts_origin'];
}
@@ -1223,8 +1223,20 @@ EOT;
* @return null
*/
protected function _enqueue_assets( $script, $style ) {
- if ( $script )
+ if ( $script ) {
wp_enqueue_script( 'jetpack_related-posts', plugins_url( 'related-posts.js', __FILE__ ), array( 'jquery' ), self::VERSION );
+ $related_posts_js_options = array(
+ /**
+ * Filter each Related Post Heading structure.
+ *
+ * @since 4.0.0
+ *
+ * @param string $str Related Post Heading structure. Default to h4.
+ */
+ 'post_heading' => apply_filters( 'jetpack_relatedposts_filter_post_heading', esc_attr( 'h4' ) ),
+ );
+ wp_localize_script( 'jetpack_related-posts', 'related_posts_js_options', $related_posts_js_options );
+ }
if ( $style ){
if( is_rtl() ) {
wp_enqueue_style( 'jetpack_related-posts', plugins_url( 'rtl/related-posts-rtl.css', __FILE__ ), array(), self::VERSION );
diff --git a/plugins/jetpack/modules/related-posts/related-posts.js b/plugins/jetpack/modules/related-posts/related-posts.js
index 4c7f314c..dd30a1ea 100644
--- a/plugins/jetpack/modules/related-posts/related-posts.js
+++ b/plugins/jetpack/modules/related-posts/related-posts.js
@@ -1,4 +1,5 @@
/* jshint onevar: false */
+/* globals related_posts_js_options */
/**
* Load related posts
@@ -108,7 +109,7 @@
var anchor_overlay = self.getAnchor( post, 'jp-relatedposts-post-a jp-relatedposts-post-aoverlay' );
html += anchor_overlay[0] + anchor_overlay[1];
}
- html += '<h4 class="jp-relatedposts-post-title">' + anchor[0] + post.title + anchor[1] + '</h4>';
+ html += '<' + related_posts_js_options.post_heading + ' class="jp-relatedposts-post-title">' + anchor[0] + post.title + anchor[1] + '</' + related_posts_js_options.post_heading + '>';
html += '<p class="jp-relatedposts-post-excerpt">' + $( '<p>' ).text( post.excerpt ).html() + '</p>';
html += '<p class="jp-relatedposts-post-date">' + post.date + '</p>';
html += '<p class="jp-relatedposts-post-context">' + post.context + '</p>';
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-twitter.png b/plugins/jetpack/modules/sharedaddy/images/smart-twitter.png
index dcbee893..299c7d88 100644
--- a/plugins/jetpack/modules/sharedaddy/images/smart-twitter.png
+++ b/plugins/jetpack/modules/sharedaddy/images/smart-twitter.png
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-twitter@2x.png b/plugins/jetpack/modules/sharedaddy/images/smart-twitter@2x.png
index 7015cf60..0be96c46 100644
--- a/plugins/jetpack/modules/sharedaddy/images/smart-twitter@2x.png
+++ b/plugins/jetpack/modules/sharedaddy/images/smart-twitter@2x.png
Binary files differ
diff --git a/plugins/jetpack/modules/shortcodes/archives.php b/plugins/jetpack/modules/shortcodes/archives.php
index 28a0ad52..9ebd7f6e 100644
--- a/plugins/jetpack/modules/shortcodes/archives.php
+++ b/plugins/jetpack/modules/shortcodes/archives.php
@@ -8,9 +8,10 @@
add_shortcode( 'archives', 'archives_shortcode' );
-function archives_shortcode( $attr ) {
- if ( is_feed() )
+function archives_shortcode( $atts ) {
+ if ( is_feed() ) {
return '[archives]';
+ }
global $allowedposttags;
@@ -23,49 +24,50 @@ function archives_shortcode( $attr ) {
'after' => '',
'order' => 'desc',
);
- extract( shortcode_atts( $default_atts, $attr, 'archives' ) );
- if ( ! in_array( $type, array( 'yearly', 'monthly', 'daily', 'weekly', 'postbypost' ) ) )
- $type = 'postbypost';
+ $attr = shortcode_atts( $default_atts, $atts, 'archives' );
- if ( ! in_array( $format, array( 'html', 'option', 'custom' ) ) )
- $format = 'html';
+ if ( ! in_array( $attr['type'], array( 'yearly', 'monthly', 'daily', 'weekly', 'postbypost' ) ) ) {
+ $attr['type'] = 'postbypost';
+ }
- if ( '' != $limit ) {
- $limit = ( int ) $limit;
- // A Limit of 0 makes no sense so revert back to the default.
- if ( 0 == $limit ) {
- $limit = '';
- }
+ if ( ! in_array( $attr['format'], array( 'html', 'option', 'custom' ) ) ) {
+ $attr['format'] = 'html';
}
+ $limit = intval( $attr['limit'] );
+ // A Limit of 0 makes no sense so revert back to the default.
+ if ( empty( $limit ) ) {
+ $limit = '';
+ }
- $showcount = ( bool ) $showcount;
- $before = wp_kses( $before, $allowedposttags );
- $after = wp_kses( $after, $allowedposttags );
+ $showcount = ( false !== $attr['showcount'] && 'false' !== $attr['showcount'] ) ? true : false;
+ $before = wp_kses( $attr['before'], $allowedposttags );
+ $after = wp_kses( $attr['after'], $allowedposttags );
// Get the archives
$archives = wp_get_archives( array(
- 'type' => $type,
+ 'type' => $attr['type'],
'limit' => $limit,
- 'format' => $format,
+ 'format' => $attr['format'],
'echo' => false,
'show_post_count' => $showcount,
'before' => $before,
- 'after' => $after
+ 'after' => $after,
) );
- if ( 'asc' == $order )
+ if ( 'asc' === $attr['order'] ) {
$archives = implode( "\n", array_reverse( explode( "\n", $archives ) ) );
-
+ }
// Check to see if there are any archives
- if ( empty( $archives ) )
- $archives = '<p>' . __( 'Your blog does not currently have any published posts.' , 'jetpack' ) . '</p>';
- elseif ( 'option' == $format )
- $archives = "<select name='archive-dropdown' onchange='document.location.href=this.options[this.selectedIndex].value;'><option value='" . get_permalink() . "'>--</option>" . $archives . "</select>";
- elseif ( 'html' == $format )
+ if ( empty( $archives ) ) {
+ $archives = '<p>' . __( 'Your blog does not currently have any published posts.', 'jetpack' ) . '</p>';
+ } else if ( 'option' === $attr['format'] ) {
+ $archives = '<select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;"><option value="' . get_permalink() . '">--</option>' . $archives . '</select>';
+ } else if ( 'html' === $attr['format'] ) {
$archives = '<ul>' . $archives . '</ul>';
+ }
return $archives;
}
diff --git a/plugins/jetpack/modules/shortcodes/codepen.php b/plugins/jetpack/modules/shortcodes/codepen.php
new file mode 100644
index 00000000..45efa774
--- /dev/null
+++ b/plugins/jetpack/modules/shortcodes/codepen.php
@@ -0,0 +1,10 @@
+<?php
+
+/*
+ * CodePen embed
+ *
+ * example URL: http://codepen.io/css-tricks/pen/wFeaG
+*/
+
+// Register oEmbed provider
+wp_oembed_add_provider( '#https?://codepen.io/([^/]+)/pen/([^/]+)/?#', 'https://codepen.io/api/oembed', true );
diff --git a/plugins/jetpack/modules/shortcodes/dailymotion.php b/plugins/jetpack/modules/shortcodes/dailymotion.php
index 24f7fcb2..d538ba38 100644
--- a/plugins/jetpack/modules/shortcodes/dailymotion.php
+++ b/plugins/jetpack/modules/shortcodes/dailymotion.php
@@ -14,7 +14,7 @@
* </object><br /><b><a href="http://www.dailymotion.com/video/xen4ms_ghinzu-cold-love-mirror-mirror_music">Ghinzu - Cold Love (Mirror Mirror)</a></b><br /><i>Uploaded by <a href="http://www.dailymotion.com/GhinzuTV">GhinzuTV</a>. - <a href="http://www.dailymotion.com/us/channel/music">Watch more music videos, in HD!</a></i>
*
* Code as of 01.01.11:
- * <object width="560" height="421"><param name="movie" value="http://www.dailymotion.com/swf/video/xaose5?width=560&theme=denim&foreground=%2392ADE0&highlight=%23A2ACBF&background=%23202226&start=&animatedTitle=&iframe=0&additionalInfos=0&autoPlay=0&hideInfos=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed type="application/x-shockwave-flash" src="http://www.dailymotion.com/swf/video/xaose5?width=560&theme=denim&foreground=%2392ADE0&highlight=%23A2ACBF&background=%23202226&start=&animatedTitle=&iframe=0&additionalInfos=0&autoPlay=0&hideInfos=0" width="560" height="421" allowfullscreen="true" allowscriptaccess="always"></embed></object><br /><b><a href="http://www.dailymotion.com/video/xaose5_sexy-surprise_na">Sexy Surprise</a></b><br /><i>Uploaded by <a href="http://www.dailymotion.com/GilLavie">GilLavie</a>. - <a target="_self" href="http://www.dailymotion.com/channel/sexy/featured/1">Find more steamy, sexy videos.</a></i>
+ * <object width="560" height="421"><param name="movie" value="http://www.dailymotion.com/swf/video/xaose5?width=560&theme=denim&foreground=%2392ADE0&highlight=%23A2ACBF&background=%23202226&start=&animatedTitle=&iframe=0&additionalInfos=0&autoPlay=0&hideInfos=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed type="application/x-shockwave-flash" src="http://www.dailymotion.com/swf/video/xaose5?width=560&theme=denim&foreground=%2392ADE0&highlight=%23A2ACBF&background=%23202226&start=&animatedTitle=&iframe=0&additionalInfos=0&autoPlay=0&hideInfos=0" width="560" height="421" allowfullscreen="true" allowscriptaccess="always"></embed></object><br /><b><a href="http://www.dailymotion.com/video/x29zm17_funny-videos-of-cats-and-babies-compilation-2015_fun">Funny cats and babies!</a></b><br /><i>Uploaded by <a href="http://www.dailymotion.com/GilLavie">GilLavie</a>. - <a target="_self" href="http://www.dailymotion.com/channel/funny/featured/1">Find more funny videos.</a></i>
* movie param enforces anti-xss protection
*
* Scroll down for the new <iframe> embed code handler.
diff --git a/plugins/jetpack/modules/shortcodes/facebook.php b/plugins/jetpack/modules/shortcodes/facebook.php
index c054ecc6..778fc543 100644
--- a/plugins/jetpack/modules/shortcodes/facebook.php
+++ b/plugins/jetpack/modules/shortcodes/facebook.php
@@ -37,21 +37,9 @@ function jetpack_facebook_embed_handler( $matches, $attr, $url ) {
// since Facebook is a faux embed, we need to load the JS SDK in the wpview embed iframe
if ( defined( 'DOING_AJAX' ) && DOING_AJAX && ! empty( $_POST['action'] ) && 'parse-embed' == $_POST['action'] ) {
- return $embed . '<script src="//connect.facebook.net/en_US/all.js#xfbml=1"></script>';
+ return $embed . wp_scripts()->do_items( array( 'jetpack-facebook-embed' ) );
} else {
- wp_enqueue_script( 'jetpack-facebook-embed', plugins_url( 'js/facebook.js', __FILE__ ), array( 'jquery' ), null, true );
- /** This filter is documented in modules/sharedaddy/sharing-sources.php */
- $fb_app_id = apply_filters( 'jetpack_sharing_facebook_app_id', '249643311490' );
- if ( ! is_numeric( $fb_app_id ) ) {
- $fb_app_id = '';
- }
- wp_localize_script(
- 'jetpack-facebook-embed',
- 'jpfbembed',
- array(
- 'appid' => $fb_app_id
- )
- );
+ wp_enqueue_script( 'jetpack-facebook-embed' );
return $embed;
}
}
diff --git a/plugins/jetpack/modules/shortcodes/flickr.php b/plugins/jetpack/modules/shortcodes/flickr.php
index bdc28f0e..d145dde7 100644
--- a/plugins/jetpack/modules/shortcodes/flickr.php
+++ b/plugins/jetpack/modules/shortcodes/flickr.php
@@ -17,10 +17,11 @@
*/
function flickr_embed_to_shortcode( $content ) {
- if ( false === stripos( $content, '/www.flickr.com/apps/video/stewart.swf' ) )
+ if ( false === stripos( $content, '/www.flickr.com/apps/video/stewart.swf' ) ) {
return $content;
+ }
- $regexp = '%(<object.*?(?:<(?!/?(?:object|embed)\s+).*?)*?)?<embed((?:\s+\w+="[^"]*")*)\s+src="http(?:\:|&#0*58;)//www.flickr.com/apps/video/stewart.swf[^"]*"((?:\s+\w+="[^"]*")*)\s*(?:/>|>\s*</embed>)(?(1)\s*</object>)%';
+ $regexp = '%(<object.*?(?:<(?!/?(?:object|embed)\s+).*?)*?)?<embed((?:\s+\w+="[^"]*")*)\s+src="http(?:\:|&#0*58;)//www.flickr.com/apps/video/stewart.swf[^"]*"((?:\s+\w+="[^"]*")*)\s*(?:/>|>\s*</embed>)(?(1)\s*</object>)%';
$regexp_ent = str_replace(
array(
'&amp;#0*58;',
@@ -36,40 +37,49 @@ function flickr_embed_to_shortcode( $content ) {
);
foreach ( array( 'regexp', 'regexp_ent' ) as $reg ) {
- if ( !preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) )
+ if ( ! preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) ) {
continue;
+ }
foreach ( $matches as $match ) {
$params = $match[2] . $match[3];
- if ( 'regexp_ent' == $reg )
+ if ( 'regexp_ent' == $reg ) {
$params = html_entity_decode( $params );
+ }
$params = wp_kses_hair( $params, array( 'http' ) );
- if ( ! isset( $params['type'] ) || 'application/x-shockwave-flash' != $params['type']['value'] || ! isset( $params['flashvars'] ) )
+ if ( ! isset( $params['type'] ) || 'application/x-shockwave-flash' != $params['type']['value'] || ! isset( $params['flashvars'] ) ) {
continue;
+ }
wp_parse_str( html_entity_decode( $params['flashvars']['value'] ), $flashvars );
- if ( ! isset( $flashvars['photo_id'] ) )
+ if ( ! isset( $flashvars['photo_id'] ) ) {
continue;
+ }
$code_atts = array( 'video' => $flashvars['photo_id'], );
- if ( isset( $flashvars['flickr_show_info_box'] ) && 'true' == $flashvars['flickr_show_info_box'] )
+ if ( isset( $flashvars['flickr_show_info_box'] ) && 'true' == $flashvars['flickr_show_info_box'] ) {
$code_atts['show_info'] = 'true';
+ }
- if ( ! empty( $flashvars['photo_secret'] ) )
- $code_atts['secret'] = $flashvars['photo_secret'] ;
+ if ( ! empty( $flashvars['photo_secret'] ) ) {
+ $code_atts['secret'] = $flashvars['photo_secret'];
+ }
- if ( ! empty( $params['width']['value'] ) )
+ if ( ! empty( $params['width']['value'] ) ) {
$code_atts['w'] = (int) $params['width']['value'];
+ }
- if ( ! empty( $params['height']['value'] ) )
+ if ( ! empty( $params['height']['value'] ) ) {
$code_atts['h'] = (int) $params['height']['value'];
+ }
$code = '[flickr';
- foreach ( $code_atts as $k => $v )
+ foreach ( $code_atts as $k => $v ) {
$code .= " $k=$v";
+ }
$code .= ']';
$content = str_replace( $match[0], $code, $content );
@@ -80,25 +90,28 @@ function flickr_embed_to_shortcode( $content ) {
return $content;
}
+
add_filter( 'pre_kses', 'flickr_embed_to_shortcode' );
function flickr_shortcode_handler( $atts ) {
- $atts = shortcode_atts( array(
- 'video' => 0,
- 'photo' => 0,
- 'show_info' => 0,
- 'w' => 400,
- 'h' => 300,
- 'secret' => 0,
- 'size' => 0,
- ), $atts, 'flickr' );
+ $atts = shortcode_atts(
+ array(
+ 'video' => 0,
+ 'photo' => 0,
+ 'show_info' => 0,
+ 'w' => 400,
+ 'h' => 300,
+ 'secret' => 0,
+ 'size' => 0,
+ ), $atts, 'flickr'
+ );
if ( ! empty( $atts['video'] ) ) {
$showing = 'video';
- $src = $atts['video'];
+ $src = $atts['video'];
} elseif ( ! empty( $atts['photo'] ) ) {
$showing = 'photo';
- $src = $atts['photo'];
+ $src = $atts['photo'];
} else {
return '';
}
@@ -107,19 +120,19 @@ function flickr_shortcode_handler( $atts ) {
$src = str_replace( 'http://', 'https://', $src );
}
- if ( $showing == 'video' ) {
+ if ( 'video' === $showing ) {
if ( ! is_numeric( $src ) && ! preg_match( '~^(https?:)?//([\da-z\-]+\.)*?((static)?flickr\.com|flic\.kr)/.*~i', $src ) ) {
return '';
}
- if ( preg_match( "!photos/(([0-9a-zA-Z-_]+)|([0-9]+@N[0-9]+))/([0-9]+)/?$!", $src, $m ) ) {
+ if ( preg_match( '!photos/(([0-9a-zA-Z-_]+)|([0-9]+@N[0-9]+))/([0-9]+)/?$!', $src, $m ) ) {
$atts['photo_id'] = $m[4];
} else {
$atts['photo_id'] = $atts['video'];
}
- if ( ! isset( $atts['show_info'] ) || in_array( $atts['show_info'], array('yes', 'true') ) ) {
+ if ( ! isset( $atts['show_info'] ) || in_array( $atts['show_info'], array( 'yes', 'true' ) ) ) {
$atts['show_info'] = 'true';
} elseif ( in_array( $atts['show_info'], array( 'false', 'no' ) ) ) {
$atts['show_info'] = 'false';
@@ -141,6 +154,7 @@ function flickr_shortcode_handler( $atts ) {
return sprintf( '<iframe src="%s" height="%s" width="%s" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen oallowfullscreen msallowfullscreen></iframe>', esc_url( $src ), esc_attr( $atts['h'] ), esc_attr( $atts['w'] ) );
}
+ return false;
}
function flickr_shortcode_video_markup( $atts ) {
@@ -148,8 +162,9 @@ function flickr_shortcode_video_markup( $atts ) {
$http = ( is_ssl() ) ? 'https://' : 'http://';
$photo_vars = "photo_id=$atts[photo_id]";
- if ( isset( $atts['secret'] ) )
+ if ( isset( $atts['secret'] ) ) {
$photo_vars .= "&amp;photo_secret=$atts[secret]";
+ }
return <<<EOD
<object type="application/x-shockwave-flash" width="$atts[w]" height="$atts[h]" data="{$http}www.flickr.com/apps/video/stewart.swf?v=1.161" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="flashvars" value="$photo_vars&amp;flickr_show_info_box=$atts[show_info]"></param><param name="movie" value="{$http}www.flickr.com/apps/video/stewart.swf?v=1.161"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><param name="wmode" value="opaque"></param><embed type="application/x-shockwave-flash" src="{$http}www.flickr.com/apps/video/stewart.swf?v=1.161" bgcolor="#000000" allowfullscreen="true" flashvars="$photo_vars&amp;flickr_show_info_box=$atts[show_info]" wmode="opaque" height="$atts[h]" width="$atts[w]"></embed></object>
@@ -166,8 +181,8 @@ function jetpack_flickr_oembed_handler( $matches, $attr, $url ) {
// e.g. http://www.flickr.com/photos/yarnaholic/sets/72157615194738969/show/
if ( '/show/' !== substr( $url, -strlen( '/show/' ) ) ) {
// These lookups need cached, as they don't use WP_Embed (which caches)
- $cache_key = md5( $url . serialize( $attr ) );
- $cache_group = 'oembed_flickr';
+ $cache_key = md5( $url . serialize( $attr ) );
+ $cache_group = 'oembed_flickr';
$html = wp_cache_get( $cache_key, $cache_group );
diff --git a/plugins/jetpack/modules/shortcodes/gist.php b/plugins/jetpack/modules/shortcodes/gist.php
index ed01a78f..b5f2c038 100644
--- a/plugins/jetpack/modules/shortcodes/gist.php
+++ b/plugins/jetpack/modules/shortcodes/gist.php
@@ -1,58 +1,92 @@
<?php
-
/**
* GitHub's Gist site supports oEmbed but their oembed provider only
* returns raw HTML (no styling) and the first little bit of the code.
*
* Their JavaScript-based embed method is a lot better, so that's what we're using.
*/
-wp_embed_register_handler( 'github-gist', '#https?://gist\.github\.com/([a-zA-Z0-9]+)#', 'github_gist_embed_handler' );
+
+wp_embed_register_handler( 'github-gist', '#https?://gist\.github\.com/([a-zA-Z0-9/]+)(\#file\-[a-zA-Z0-9\_\-]+)?#', 'github_gist_embed_handler' );
add_shortcode( 'gist', 'github_gist_shortcode' );
+/**
+ * Handle gist embeds.
+ *
+ * @since 2.8.0
+ *
+ * @global WP_Embed $wp_embed
+ *
+ * @param array $matches Results after parsing the URL using the regex in wp_embed_register_handler().
+ * @param array $attr Embed attributes.
+ * @param string $url The original URL that was matched by the regex.
+ * @param array $rawattr The original unmodified attributes.
+ * @return string The embed HTML.
+ */
function github_gist_embed_handler( $matches, $attr, $url, $rawattr ) {
- wp_enqueue_script( 'jetpack-gist-embed', plugins_url( 'js/gist.js', __FILE__ ), array( 'jquery' ), false, true );
-
// Let the shortcode callback do all the work
- return github_gist_shortcode( $attr, $url );
+ return github_gist_shortcode( $matches, $url );
}
+/**
+ * Callback for gist shortcode.
+ *
+ * @since 2.8.0
+ *
+ * @param array $atts Attributes found in the shortcode.
+ * @param string $content Content enclosed by the shortcode.
+ *
+ * @return string The gist HTML.
+ */
function github_gist_shortcode( $atts, $content = '' ) {
- if ( empty( $atts[0] ) && empty( $content ) )
+ if ( empty( $atts[0] ) && empty( $content ) ) {
return '<!-- Missing Gist ID -->';
+ }
$id = ( ! empty( $content ) ) ? $content : $atts[0];
// Parse a URL
- if ( ! is_numeric( $id ) )
+ if ( ! is_numeric( $id ) ) {
$id = preg_replace( '#https?://gist.github.com/([a-zA-Z0-9]+)#', '$1', $id );
+ }
- if ( ! $id )
+ if ( ! $id ) {
return '<!-- Invalid Gist ID -->';
+ }
- if ( ! empty( $atts['file'] ) ) {
- $file = '?file=' . urlencode( $atts['file'] );
+ wp_enqueue_script( 'jetpack-gist-embed', plugins_url( 'js/gist.js', __FILE__ ), array( 'jquery' ), false, true );
+
+ if ( false !== strpos( $id, '#file-' ) ) {
+ // URL points to a specific file in the gist
+ $id = str_replace( '#file-', '.json?file=', $id );
+ $id = preg_replace( '/\-(?!.*\-)/', '.', $id );
} else {
- $file = '';
+ $file = ( ! empty( $atts['file'] ) ) ? '?file=' . urlencode( $atts['file'] ) : '';
+ // URL points to the entire gist
+ $id .= ".json$file";
}
- $embed_url = "{$id}.json" . $file;
-
// inline style to prevent the bottom margin to the embed that themes like TwentyTen, et al., add to tables
- $return = '<style>.gist table { margin-bottom: 0; }</style>' .
- '<div class="gist-oembed" data-gist="' . esc_attr( $embed_url ) . '"></div>';
-
- if ( isset( $_POST[ 'type' ]) && 'embed' === $_POST[ 'type' ] &&
- isset( $_POST[ 'action' ] ) && 'parse-embed' === $_POST['action'] ) {
+ $return = '<style>.gist table { margin-bottom: 0; }</style><div class="gist-oembed" data-gist="' . esc_attr( $id ) . '"></div>';
- return github_gist_simple_embed( $id, $file );
+ if ( isset( $_POST[ 'type' ] ) && 'embed' === $_POST[ 'type' ] &&
+ isset( $_POST[ 'action' ] ) && 'parse-embed' === $_POST['action'] ) {
+ return github_gist_simple_embed( $id );
}
- return $return;
+ return $return;
}
-function github_gist_simple_embed( $id, $file ) {
- $embed_url = $id . '.js' . $file;
-
- return '<script type="text/javascript" src="//gist.github.com/' . $embed_url . '"></script>';
+/**
+ * Use script tag to load shortcode in editor.
+ *
+ * @since 3.9.0
+ *
+ * @param string $id The ID of the gist.
+ *
+ * @return string
+ */
+function github_gist_simple_embed( $id ) {
+ $id = str_replace( 'json', 'js', $id );
+ return '<script type="text/javascript" src="https://gist.github.com/' . $id . '"></script>';
} \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/houzz.php b/plugins/jetpack/modules/shortcodes/houzz.php
new file mode 100644
index 00000000..7e31c50e
--- /dev/null
+++ b/plugins/jetpack/modules/shortcodes/houzz.php
@@ -0,0 +1,29 @@
+<?php
+
+/*
+ * Houzz Embed
+ *
+ * Examples:
+ * Post content:
+ * - [houzz=http://www.houzz.com/pro/james-crisp]
+ * - http://www.houzz.com/pro/james-crisp
+ * Blog sidebar: [houzz=http://www.houzz.com/profile/alon w=200 h=300]
+ */
+
+// Register oEmbed provider
+wp_oembed_add_provider( '#https?://(.+?\.)?houzz\.(com|co\.uk|com\.au|de|fr|ru|jp|it|es|dk|se)/.*#i', 'https://www.houzz.com/oembed', true );
+
+// Create Shortcode
+function jetpack_houzz_shortcode( $atts, $content=null ) {
+ $url = substr( $atts[0], 1 );
+ $args = array();
+ if ( isset( $atts['w'] ) && is_numeric( $atts['w'] ) ) {
+ $args['width'] = $atts['w'];
+ }
+ if ( isset( $atts['h'] ) && is_numeric( $atts['h'] ) ) {
+ $args['height'] = $atts['h'];
+ }
+ $oembed = _wp_oembed_get_object();
+ return $oembed->get_html( $url, $args );
+}
+add_shortcode( 'houzz', 'jetpack_houzz_shortcode' );
diff --git a/plugins/jetpack/modules/shortcodes/instagram.php b/plugins/jetpack/modules/shortcodes/instagram.php
index 43d7d28a..08c8ceb0 100644
--- a/plugins/jetpack/modules/shortcodes/instagram.php
+++ b/plugins/jetpack/modules/shortcodes/instagram.php
@@ -8,8 +8,9 @@
* @return (string) the filtered or the original content
**/
function jetpack_instagram_embed_reversal( $content ) {
- if ( false === stripos( $content, 'instagram.com' ) )
+ if ( false === stripos( $content, 'instagram.com' ) ) {
return $content;
+ }
/* Sample embed code:
<blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="2" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"><div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding-bottom:55%; padding-top:45%; text-align:center; width:100%;"><div style="position:relative;"><div style=" -webkit-animation:dkaXkpbBxI 1s ease-out infinite; animation:dkaXkpbBxI 1s ease-out infinite; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-44px; width:44px;"></div><span style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:12px; font-style:normal; font-weight:bold; position:relative; top:15px;">Loading</span></div></div><p style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin:8px 0 0 0; padding:0 4px; word-wrap:break-word;"> Balloons</p><p style=" line-height:32px; margin-bottom:0; margin-top:8px; padding:0; text-align:center;"> <a href="https://instagram.com/p/r9vfPrmjeB/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; text-decoration:none;" target="_top"> View on Instagram</a></p></div><style>@-webkit-keyframes"dkaXkpbBxI"{ 0%{opacity:0.5;} 50%{opacity:1;} 100%{opacity:0.5;} } @keyframes"dkaXkpbBxI"{ 0%{opacity:0.5;} 50%{opacity:1;} 100%{opacity:0.5;} }</style></blockquote>
@@ -31,16 +32,18 @@ function jetpack_instagram_embed_reversal( $content ) {
$regexes[] = '#&lt;iframe(?:[^&]|&(?!gt;))+?src="(?:https?:)?//instagram\.com/p/([^"\'/]++)[^"\']*?"(?:[^&]|&(?!gt;))*+&gt;\s*?&lt;/iframe&gt;#i';
foreach ( $regexes as $regex ) {
- if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) )
- continue;
+ if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) ) {
+ continue;
+ }
foreach ( $matches as $match ) {
- if ( ! preg_match( '#(https?:)?//instagr(\.am|am\.com)/p/([^/]*)#i', $match[2], $url_matches ) )
+ if ( ! preg_match( '#(https?:)?//instagr(\.am|am\.com)/p/([^/]*)#i', $match[2], $url_matches ) ) {
continue;
+ }
// Since we support Instagram via oEmbed, we simply leave a link on a line by itself.
$replace_regex = sprintf( '#\s*%s\s*#', preg_quote( $match[0], '#' ) );
- $url = esc_url( $url_matches[0] );
+ $url = esc_url( $url_matches[0] );
$content = preg_replace( $replace_regex, sprintf( "\n\n%s\n\n", $url ), $content );
/** This action is documented in modules/shortcodes/youtube.php */
@@ -50,14 +53,14 @@ function jetpack_instagram_embed_reversal( $content ) {
return $content;
}
-add_filter( 'pre_kses', 'jetpack_instagram_embed_reversal' );
+add_filter( 'pre_kses', 'jetpack_instagram_embed_reversal' );
/**
* Instagram
*/
-wp_oembed_remove_provider( '#http://instagr(\.am|am\.com)/p/.*#i' ); // remove core's oEmbed support so we can override
-wp_embed_register_handler( 'jetpack_instagram', '#http(s?)://instagr(\.am|am\.com)/p/([^/]*)#i', 'jetpack_instagram_handler' );
+wp_oembed_remove_provider( '#https?://(www\.)?instagr(\.am|am\.com)/p/.*#i' ); // remove core's oEmbed support so we can override
+wp_embed_register_handler( 'jetpack_instagram', '#http(s?)://(www\.)?instagr(\.am|am\.com)/p/([^/]*)#i', 'jetpack_instagram_handler' );
function jetpack_instagram_handler( $matches, $atts, $url ) {
global $content_width;
@@ -69,19 +72,19 @@ function jetpack_instagram_handler( $matches, $atts, $url ) {
$min_width = 320;
if ( is_feed() ) {
- $media_url = sprintf( 'http://instagr.am/p/%s/media/?size=l', $matches[3] );
+ $media_url = sprintf( 'http://instagr.am/p/%s/media/?size=l', $matches[4] );
return sprintf( '<a href="%s" title="%s"><img src="%s" alt="Instagram Photo" /></a>', esc_url( $url ), esc_attr__( 'View on Instagram', 'jetpack' ), esc_url( $media_url ) );
}
$atts = shortcode_atts( array(
- 'width' => isset( $content_width ) ? $content_width : $max_width,
+ 'width' => isset( $content_width ) ? $content_width : $max_width,
'hidecaption' => false,
), $atts );
$atts['width'] = absint( $atts['width'] );
- if ( $atts['width'] > $max_width || $min_width > $atts['width'] )
+ if ( $atts['width'] > $max_width || $min_width > $atts['width'] ) {
$atts['width'] = $max_width;
-
+ }
// remove the modal param from the URL
$url = remove_query_arg( 'modal', $url );
@@ -90,11 +93,11 @@ function jetpack_instagram_handler( $matches, $atts, $url ) {
$url = str_replace( 'instagr.am', 'instagram.com', $url );
// The oembed endpoint expects HTTP, but HTTP requests 301 to HTTPS
- $instagram_http_url = str_replace( 'https://', 'http://', $url );
+ $instagram_http_url = str_replace( 'https://', 'http://', $url );
$instagram_https_url = str_replace( 'http://', 'https://', $url );
$url_args = array(
- 'url' => $instagram_http_url,
+ 'url' => $instagram_http_url,
'maxwidth' => $atts['width'],
);
@@ -111,17 +114,17 @@ function jetpack_instagram_handler( $matches, $atts, $url ) {
*
* @module shortcodes
*
- * @since 3.3.0
+ * @since 3.3.0
*
- * @param bool false Object caching is off by default.
- * @param array $matches Array of Instagram URLs found in the post.
- * @param array $atts Instagram Shortcode attributes.
+ * @param bool false Object caching is off by default.
+ * @param array $matches Array of Instagram URLs found in the post.
+ * @param array $atts Instagram Shortcode attributes.
* @param string $passed_url Instagram API URL.
*/
$response_body_use_cache = apply_filters( 'instagram_cache_oembed_api_response_body', false, $matches, $atts, $passed_url );
- $response_body = false;
+ $response_body = false;
if ( $response_body_use_cache ) {
- $cache_key = 'oembed_response_body_' . md5( $url );
+ $cache_key = 'oembed_response_body_' . md5( $url );
$response_body = wp_cache_get( $cache_key, 'instagram_embeds' );
}
@@ -129,7 +132,7 @@ function jetpack_instagram_handler( $matches, $atts, $url ) {
// Not using cache (default case) or cache miss
$instagram_response = wp_remote_get( $url, array( 'redirection' => 0 ) );
if ( is_wp_error( $instagram_response ) || 200 != $instagram_response['response']['code'] || empty( $instagram_response['body'] ) ) {
- return "<!-- instagram error: invalid instagram resource -->";
+ return '<!-- instagram error: invalid instagram resource -->';
}
$response_body = json_decode( $instagram_response['body'] );
@@ -143,24 +146,24 @@ function jetpack_instagram_handler( $matches, $atts, $url ) {
wp_enqueue_script( 'jetpack-instagram-embed', plugins_url( 'js/instagram.js', __FILE__ ), array( 'jquery' ), false, true );
// there's a script in the response, which we strip on purpose since it's added by this ^ script
$ig_embed = preg_replace( '@<(script)[^>]*?>.*?</\\1>@si', '', $response_body->html );
+
return $ig_embed;
}
return '<!-- instagram error: no embed found -->';
}
-
// filters instagram's username format to the expected format that matches the embed handler
wp_embed_register_handler( 'jetpack_instagram_alternate_format', '#http(s?)://instagr(\.am|am\.com)/([^/]*)/p/([^/]*)#i', 'jetpack_instagram_alternate_format_handler' );
function jetpack_instagram_alternate_format_handler( $matches, $atts, $url ) {
- $url = esc_url_raw( 'https://instagram.com/p/' . $matches[4] );
+ $url = esc_url_raw( 'https://instagram.com/p/' . $matches[4] );
$matches[0] = $url;
$matches[3] = $matches[4];
unset( $matches[4] );
+
return jetpack_instagram_handler( $matches, $atts, $url );
}
-
// [instagram url="http://instagram.com/p/PSbF9sEIGP/"]
// [instagram url="http://instagram.com/p/PSbF9sEIGP/" width="300"]
add_shortcode( 'instagram', 'jetpack_shortcode_instagram' );
diff --git a/plugins/jetpack/modules/shortcodes/js/facebook.js b/plugins/jetpack/modules/shortcodes/js/facebook.js
deleted file mode 100644
index f955effc..00000000
--- a/plugins/jetpack/modules/shortcodes/js/facebook.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/* global FB, jpfbembed */
-(function( window ) {
- var facebookEmbed = function() {
- if ( 'undefined' !== typeof FB && FB.XFBML ) {
- FB.XFBML.parse();
- } else {
- var fbroot = document.createElement( 'div' );
- fbroot.id = 'fb-root';
- document.getElementsByTagName( 'body' )[0].appendChild( fbroot );
-
- jQuery.getScript( '//connect.facebook.net/en_US/sdk.js' );
- }
- };
-
- window.fbAsyncInit = function() {
- FB.init( {
- appId : jpfbembed.appid,
- version: 'v2.3'
- } );
-
- FB.XFBML.parse();
- };
-
- if ( 'undefined' !== typeof infiniteScroll ) {
- jQuery( document.body ).on( 'post-load', facebookEmbed );
- }
-
- facebookEmbed();
-})( this );
diff --git a/plugins/jetpack/modules/shortcodes/js/slideshow-shortcode.js b/plugins/jetpack/modules/shortcodes/js/slideshow-shortcode.js
index 38531e0c..d2a04c5e 100644
--- a/plugins/jetpack/modules/shortcodes/js/slideshow-shortcode.js
+++ b/plugins/jetpack/modules/shortcodes/js/slideshow-shortcode.js
@@ -36,12 +36,17 @@ JetpackSlideshow.prototype.init = function() {
img.title = typeof( imageInfo.title ) !== 'undefined' ? imageInfo.title : '';
img.alt = typeof( imageInfo.alt ) !== 'undefined' ? imageInfo.alt : '';
img.align = 'middle';
+ img.setAttribute('itemprop','image');
img.nopin = 'nopin';
var caption = document.createElement( 'div' );
caption.className = 'slideshow-slide-caption';
+ caption.setAttribute('itemprop','caption description');
caption.innerHTML = imageInfo.caption;
var container = document.createElement('div');
container.className = 'slideshow-slide';
+ container.setAttribute('itemprop','associatedMedia');
+ container.setAttribute('itemscope','');
+ container.setAttribute('itemtype','http://schema.org/ImageObject');
// Hide loading image once first image has loaded.
if ( i === 0 ) {
diff --git a/plugins/jetpack/modules/shortcodes/presentations.php b/plugins/jetpack/modules/shortcodes/presentations.php
index aa4f42ee..aac538b7 100644
--- a/plugins/jetpack/modules/shortcodes/presentations.php
+++ b/plugins/jetpack/modules/shortcodes/presentations.php
@@ -76,7 +76,6 @@ presentation unless overridden by individual slides.
*/
if ( ! class_exists( 'Presentations' ) ) :
-
class Presentations {
private $presentation_settings;
@@ -88,23 +87,24 @@ class Presentations {
*/
function __construct() {
// Bail without 3.0.
- if ( ! function_exists( '__return_false' ) )
+ if ( ! function_exists( '__return_false' ) ) {
return;
+ }
- $this->presentation_initialized = false;
+ $this->presentation_initialized = false;
$this->scripts_and_style_included = false;
// Registers shortcodes
add_action( 'wp_head', array( &$this, 'add_scripts' ), 1 );
add_shortcode( 'presentation', array( &$this, 'presentation_shortcode' ) );
- add_shortcode( 'slide', array( &$this, 'slide_shortcode' ) );
+ add_shortcode( 'slide', array( &$this, 'slide_shortcode' ) );
}
function add_scripts() {
$this->scripts_and_style_included = false;
- if ( empty( $GLOBALS['posts'] ) || !is_array( $GLOBALS['posts'] ) ) {
+ if ( empty( $GLOBALS['posts'] ) || ! is_array( $GLOBALS['posts'] ) ) {
return;
}
@@ -115,45 +115,40 @@ class Presentations {
}
}
- if ( ! $this->scripts_and_style_included )
+ if ( ! $this->scripts_and_style_included ) {
return;
+ }
$plugin = plugin_dir_url( __FILE__ );
// Add CSS
- wp_enqueue_style('presentations', $plugin . 'css/style.css');
+ wp_enqueue_style( 'presentations', $plugin . 'css/style.css' );
// Add JavaScript
- wp_enqueue_script('jquery');
- wp_enqueue_script('jmpress',
- $plugin . 'js/jmpress.min.js',
- array('jquery'),
- '0.4.5',
- true);
- wp_enqueue_script('presentations',
- $plugin . 'js/main.js',
- array('jquery', 'jmpress'),
- false,
- true);
+ wp_enqueue_script( 'jquery' );
+ wp_enqueue_script( 'jmpress', $plugin . 'js/jmpress.min.js', array( 'jquery' ), '0.4.5', true );
+ wp_enqueue_script( 'presentations', $plugin . 'js/main.js', array( 'jquery', 'jmpress' ), false, true );
}
- function presentation_shortcode( $atts, $content='' ) {
+ function presentation_shortcode( $atts, $content = '' ) {
// Mark that we've found a valid [presentation] shortcode
$this->presentation_initialized = true;
- $atts = shortcode_atts( array(
- 'duration' => '',
- 'height' => '',
- 'width' => '',
- 'bgcolor' => '',
- 'bgimg' => '',
- 'autoplay' => '',
-
- // Settings
- 'transition' => '',
- 'scale' => '',
- 'rotate' => '',
- 'fade' => '',
- 'fadebullets' => '',
- ), $atts, 'presentation' );
+ $atts = shortcode_atts(
+ array(
+ 'duration' => '',
+ 'height' => '',
+ 'width' => '',
+ 'bgcolor' => '',
+ 'bgimg' => '',
+ 'autoplay' => '',
+
+ // Settings
+ 'transition' => '',
+ 'scale' => '',
+ 'rotate' => '',
+ 'fade' => '',
+ 'fadebullets' => '',
+ ), $atts, 'presentation'
+ );
$this->presentation_settings = array(
'transition' => 'down',
@@ -162,51 +157,60 @@ class Presentations {
'fade' => 'on',
'fadebullets' => 0,
'last' => array(
- 'x' => 0,
- 'y' => 0,
- 'scale' => 1,
- 'rotate' => 0,
+ 'x' => 0,
+ 'y' => 0,
+ 'scale' => 1,
+ 'rotate' => 0,
),
);
// Set the presentation-wide settings
- if ( '' != trim( $atts['transition'] ) )
+ if ( '' != trim( $atts['transition'] ) ) {
$this->presentation_settings['transition'] = $atts['transition'];
+ }
- if ( '' != trim( $atts['scale'] ) )
+ if ( '' != trim( $atts['scale'] ) ) {
$this->presentation_settings['scale'] = floatval( $atts['scale'] );
+ }
- if ( '' != trim( $atts['rotate'] ) )
+ if ( '' != trim( $atts['rotate'] ) ) {
$this->presentation_settings['rotate'] = floatval( $atts['rotate'] );
+ }
- if ( '' != trim( $atts['fade'] ) )
+ if ( '' != trim( $atts['fade'] ) ) {
$this->presentation_settings['fade'] = $atts['fade'];
+ }
- if ( '' != trim( $atts['fadebullets'] ) )
+ if ( '' != trim( $atts['fadebullets'] ) ) {
$this->presentation_settings['fadebullets'] = $atts['fadebullets'];
+ }
// Set any settings the slides don't care about
- if ( '' != trim( $atts['duration'] ) )
+ if ( '' != trim( $atts['duration'] ) ) {
$duration = floatval( $atts['duration'] ) . 's';
- else
+ } else {
$duration = '1s';
+ }
// Autoplay durations are set in milliseconds
- if ( '' != trim( $atts['autoplay'] ) )
+ if ( '' != trim( $atts['autoplay'] ) ) {
$autoplay = floatval( $atts['autoplay'] ) * 1000;
- else
- $autoplay = 0; // No autoplay
+ } else {
+ $autoplay = 0;
+ } // No autoplay
// Set the presentation size as specified or with some nicely sized dimensions
- if ( '' != trim( $atts['width'] ) )
+ if ( '' != trim( $atts['width'] ) ) {
$this->presentation_settings['width'] = intval( $atts['width'] );
- else
+ } else {
$this->presentation_settings['width'] = 480;
+ }
- if ( '' != trim( $atts['height'] ) )
+ if ( '' != trim( $atts['height'] ) ) {
$this->presentation_settings['height'] = intval( $atts['height'] );
- else
+ } else {
$this->presentation_settings['height'] = 370;
+ }
// Hide the content by default in case the scripts fail
$style = 'display: none; width: ' . $this->presentation_settings['width'] . 'px; height: ' . $this->presentation_settings['height'] . 'px;';
@@ -223,99 +227,115 @@ class Presentations {
// Not supported message style is inlined incase the style sheet doesn't get included
$out = "<section class='presentation-wrapper'>";
- $out.= "<p class='not-supported-msg' style='display: inherit; padding: 25%; text-align: center;'>";
- $out.= __( 'This slideshow could not be started. Try refreshing the page or viewing it in another browser.' , 'jetpack' ) . '</p>';
+ $out .= "<p class='not-supported-msg' style='display: inherit; padding: 25%; text-align: center;'>";
+ $out .= __( 'This slideshow could not be started. Try refreshing the page or viewing it in another browser.', 'jetpack' ) . '</p>';
// Bail out unless the scripts were added
if ( $this->scripts_and_style_included ) {
- $out.= sprintf(
+ $out .= sprintf(
'<div class="presentation" duration="%s" data-autoplay="%s" style="%s">',
esc_attr( $duration ),
esc_attr( $autoplay ),
esc_attr( $style )
);
- $out.= "<div class='nav-arrow-left'></div>";
- $out.= "<div class='nav-arrow-right'></div>";
- $out.= "<div class='nav-fullscreen-button'></div>";
+ $out .= "<div class='nav-arrow-left'></div>";
+ $out .= "<div class='nav-arrow-right'></div>";
+ $out .= "<div class='nav-fullscreen-button'></div>";
if ( $autoplay ) {
- $out.= "<div class='autoplay-overlay' style='display: none'><p class='overlay-msg'>";
- $out.= __( 'Click to autoplay the presentation!' , 'jetpack' );
- $out.= "</p></div>";
+ $out .= '<div class="autoplay-overlay" style="display: none;"><p class="overlay-msg">';
+ $out .= __( 'Click to autoplay the presentation!', 'jetpack' );
+ $out .= '</p></div>';
}
- $out.= do_shortcode( $content );
+ $out .= do_shortcode( $content );
}
- $out.= "</section>";
+ $out .= '</section>';
$this->presentation_initialized = false;
+
return $out;
}
function slide_shortcode( $atts, $content = '' ) {
// Bail out unless wrapped by a [presentation] shortcode
- if ( ! $this->presentation_initialized )
+ if ( ! $this->presentation_initialized ) {
return $content;
+ }
- $atts = shortcode_atts( array(
- 'transition' => '',
- 'scale' => '',
- 'rotate' => '',
- 'fade' => '',
- 'fadebullets'=> '',
- 'bgcolor' => '',
- 'bgimg' => '',
- ), $atts, 'slide' );
+ $atts = shortcode_atts(
+ array(
+ 'transition' => '',
+ 'scale' => '',
+ 'rotate' => '',
+ 'fade' => '',
+ 'fadebullets' => '',
+ 'bgcolor' => '',
+ 'bgimg' => '',
+ ), $atts, 'slide'
+ );
// Determine positioning based on transition
- if ( '' == trim( $atts['transition'] ) )
+ if ( '' == trim( $atts['transition'] ) ) {
$atts['transition'] = $this->presentation_settings['transition'];
+ }
// Setting the content scale
- if ( '' == trim( $atts['scale'] ) )
+ if ( '' == trim( $atts['scale'] ) ) {
$atts['scale'] = $this->presentation_settings['scale'];
+ }
- if( '' == trim( $atts['scale'] ) )
+ if ( '' == trim( $atts['scale'] ) ) {
$scale = 1;
- else
+ } else {
$scale = floatval( $atts['scale'] );
+ }
- if ( $scale < 0 )
+ if ( $scale < 0 ) {
$scale *= -1;
+ }
// Setting the content rotation
- if ( '' == trim( $atts['rotate'] ) )
+ if ( '' == trim( $atts['rotate'] ) ) {
$atts['rotate'] = $this->presentation_settings['rotate'];
+ }
- if( '' == trim( $atts['rotate'] ) )
+ if ( '' == trim( $atts['rotate'] ) ) {
$rotate = 0;
- else
+ } else {
$rotate = floatval( $atts['rotate'] );
+ }
// Setting if the content should fade
- if ( '' == trim( $atts['fade'] ) )
+ if ( '' == trim( $atts['fade'] ) ) {
$atts['fade'] = $this->presentation_settings['fade'];
+ }
- if ( 'on' == $atts['fade'] || 'true' == $atts['fade'] )
+ if ( 'on' == $atts['fade'] || 'true' == $atts['fade'] ) {
$fade = 'fade';
- else
+ } else {
$fade = '';
+ }
// Setting if bullets should fade on step changes
- if ( '' == trim( $atts['fadebullets'] ) )
+ if ( '' == trim( $atts['fadebullets'] ) ) {
$atts['fadebullets'] = $this->presentation_settings['fadebullets'];
+ }
- if ( 'on' == $atts['fadebullets'] || 'true' == $atts['fadebullets'] )
+ if ( 'on' == $atts['fadebullets'] || 'true' == $atts['fadebullets'] ) {
$fadebullets = 'fadebullets';
- else
+ } else {
$fadebullets = '';
+ }
- $coords = $this->get_coords( array(
- 'transition' => $atts['transition'],
- 'scale' => $scale,
- 'rotate' => $rotate,
- ));
+ $coords = $this->get_coords(
+ array(
+ 'transition' => $atts['transition'],
+ 'scale' => $scale,
+ 'rotate' => $rotate,
+ )
+ );
$x = $coords['x'];
$y = $coords['y'];
@@ -342,31 +362,33 @@ class Presentations {
esc_attr( $style )
);
- $out.= "<div class='slide-content'>";
- $out.= do_shortcode( $content );
- $out.= "</div></div>";
+ $out .= '<div class="slide-content">';
+ $out .= do_shortcode( $content );
+ $out .= '</div></div>';
+
return $out;
}
/**
* Determines the position of the next slide based on the position and scaling of the previous slide.
*
- * @param array $args: an array with the following key-value pairs
- * string $transition: the transition name, "up", "down", "left", or "right"
- * float $scale: the scale of the next slide (used to determine the position of the slide after that)
+ * @param array $args : an array with the following key-value pairs
+ * string $transition: the transition name, "up", "down", "left", or "right"
+ * float $scale: the scale of the next slide (used to determine the position of the slide after that)
*
* @return array with the 'x' and 'y' coordinates of the slide
*/
function get_coords( $args ) {
- if ( 0 == $args['scale'] )
+ if ( 0 == $args['scale'] ) {
$args['scale'] = 1;
+ }
$width = $this->presentation_settings['width'];
$height = $this->presentation_settings['height'];
$last = $this->presentation_settings['last'];
$scale = $last['scale'];
- $next = array(
+ $next = array(
'x' => $last['x'],
'y' => $last['y'],
'scale' => $args['scale'],
@@ -375,7 +397,7 @@ class Presentations {
// All angles are measured from the vertical axis, so everything is backwards!
$diagAngle = atan2( $width, $height );
- $diagonal = sqrt( pow( $width, 2 ) + pow( $height, 2 ) );
+ $diagonal = sqrt( pow( $width, 2 ) + pow( $height, 2 ) );
// We offset the angles by the angle formed by the diagonal so that
// we can multiply the sines directly against the diagonal length
@@ -383,21 +405,21 @@ class Presentations {
$phi = deg2rad( $next['rotate'] ) - $diagAngle;
// We start by displacing by the slide dimensions
- $totalHorizDisp = $width * $scale;
+ $totalHorizDisp = $width * $scale;
$totalVertDisp = $height * $scale;
// If the previous slide was rotated, we add the incremental offset from the rotation
// Namely the difference between the regular dimension (no rotation) and the component
// of the diagonal for that angle
- $totalHorizDisp += ( ( ( abs( sin( $theta ) ) * $diagonal) - $width ) / 2) * $scale;
- $totalVertDisp += ( ( ( abs( cos( $theta ) ) * $diagonal) - $height) / 2) * $scale;
+ $totalHorizDisp += ( ( ( abs( sin( $theta ) ) * $diagonal ) - $width ) / 2 ) * $scale;
+ $totalVertDisp += ( ( ( abs( cos( $theta ) ) * $diagonal ) - $height ) / 2 ) * $scale;
// Similarly, we check if the current slide has been rotated and add whatever additional
// offset has been added. This is so that two rotated corners don't clash with each other.
// Note: we are checking the raw angle relative to the vertical axis, NOT the diagonal angle.
- if ( $next['rotate'] % 180 != 0 ){
- $totalHorizDisp += ( abs( ( sin( $phi ) * $diagonal ) - $width ) / 2) * $next['scale'];
- $totalVertDisp += ( abs( ( cos( $phi ) * $diagonal ) - $height ) / 2) * $next['scale'];
+ if ( 0 !== $next['rotate'] % 180 ) {
+ $totalHorizDisp += ( abs( ( sin( $phi ) * $diagonal ) - $width ) / 2 ) * $next['scale'];
+ $totalVertDisp += ( abs( ( cos( $phi ) * $diagonal ) - $height ) / 2 ) * $next['scale'];
}
switch ( trim( $args['transition'] ) ) {
@@ -423,6 +445,7 @@ class Presentations {
}
$this->presentation_settings['last'] = $next;
+
return $next;
}
}
diff --git a/plugins/jetpack/modules/shortcodes/scribd.php b/plugins/jetpack/modules/shortcodes/scribd.php
index a334fd55..7a278ea1 100644
--- a/plugins/jetpack/modules/shortcodes/scribd.php
+++ b/plugins/jetpack/modules/shortcodes/scribd.php
@@ -15,7 +15,7 @@ function scribd_shortcode_handler( $atts ) {
$atts = shortcode_atts( array(
'id' => 0,
'key' => 0,
- 'mode' => "",
+ 'mode' => '',
), $atts, 'scribd' );
$modes = array( 'list', 'book', 'slide', 'slideshow', 'tile' );
@@ -24,8 +24,9 @@ function scribd_shortcode_handler( $atts ) {
if ( preg_match( '/^[A-Za-z0-9-]+$/', $atts['key'], $m ) ) {
$atts['key'] = $m[0];
- if ( !in_array( $atts['mode'], $modes ) )
+ if ( ! in_array( $atts['mode'], $modes ) ) {
$atts['mode'] = '';
+ }
return scribd_shortcode_markup( $atts );
} else {
@@ -41,6 +42,7 @@ EOD;
return $markup;
}
+
add_shortcode( 'scribd', 'scribd_shortcode_handler' );
// Scribd supports HTTPS, so use that endpoint to get HTTPS-compatible embeds
@@ -48,6 +50,8 @@ function scribd_https_oembed( $providers ) {
if ( isset( $providers['#https?://(www\.)?scribd\.com/doc/.*#i'] ) ) {
$providers['#https?://(www\.)?scribd\.com/doc/.*#i'][0] = 'https://www.scribd.com/services/oembed';
}
+
return $providers;
}
+
add_filter( 'oembed_providers', 'scribd_https_oembed' );
diff --git a/plugins/jetpack/modules/shortcodes/slideshare.php b/plugins/jetpack/modules/shortcodes/slideshare.php
index 6b452039..f2278935 100644
--- a/plugins/jetpack/modules/shortcodes/slideshare.php
+++ b/plugins/jetpack/modules/shortcodes/slideshare.php
@@ -10,13 +10,15 @@ wp_oembed_add_provider( '#https?://(www\.)?slideshare\.net/.*#i', 'https://www.s
* New style: [slideshare id=5342235&w=300&h=200&fb=0&mw=0&mh=0&sc=no]
*
* Legend:
- * id = Document ID provided by Slideshare
- * w = Width of iFrame (int)
- * h = Height of iFrame (int)
- * fb = iFrame frameborder (int)
- * mw = iFrame marginwidth (int)
- * mh = iFrame marginheight (int)
- * sc = iFrame Scrollbar (yes/no)
+ * id = Document ID provided by Slideshare
+ * w = Width of iFrame (int)
+ * h = Height of iFrame (int)
+ * fb = iFrame frameborder (int)
+ * mw = iFrame marginwidth (int)
+ * mh = iFrame marginheight (int)
+ * sc = iFrame Scrollbar (yes/no)
+ * pro = Slideshare Pro (yes/no)
+ * style = Inline CSS (string)
**/
add_shortcode( 'slideshare', 'slideshare_shortcode' );
@@ -27,60 +29,85 @@ function slideshare_shortcode( $atts ) {
$params = shortcode_new_to_old_params( $atts );
parse_str( $params, $arguments );
- if ( empty( $arguments ) )
+ if ( empty( $arguments ) ) {
return '<!-- SlideShare error: no arguments -->';
+ }
- extract( $arguments );
+ $attr = shortcode_atts(
+ array(
+ 'id' => '',
+ 'w' => '',
+ 'h' => '',
+ 'fb' => '',
+ 'mw' => '',
+ 'mh' => '',
+ 'sc' => '',
+ 'pro' => '',
+ 'style' => '',
+ ), $arguments
+ );
// check that the Slideshare ID contains letters, numbers and query strings
$pattern = '/[^-_a-zA-Z0-9?=&]/';
- if ( empty( $id ) || preg_match( $pattern, $id ) )
+ if ( empty( $attr['id'] ) || preg_match( $pattern, $attr['id'] ) ) {
return '<!-- SlideShare error: id is missing or has illegal characters -->';
+ }
// check the width/height
- if ( empty( $w ) && ! empty( $content_width ) )
+ $w = $attr['w'];
+ if ( empty( $w ) && ! empty( $content_width ) ) {
$w = intval( $content_width );
- elseif ( ! ( $w = intval( $w ) ) || $w < 300 || $w > 1600 )
+ } elseif ( ! ( $w = intval( $w ) ) || $w < 300 || $w > 1600 ) {
$w = 425;
- else
+ } else {
$w = intval( $w );
+ }
- $h = ceil( $w * 348 / 425 );
+ $h = ceil( $w * 348 / 425 ); // Note: user-supplied height is ignored.
- if ( isset( $pro ) ) {
- $source = "https://www.slideshare.net/slidesharepro/$id";
+ if ( isset( $attr['pro'] ) && $attr['pro'] ) {
+ $source = 'https://www.slideshare.net/slidesharepro/' . $attr['id'];
} else {
- $source = "https://www.slideshare.net/slideshow/embed_code/$id";
+ $source = 'https://www.slideshare.net/slideshow/embed_code/' . $attr['id'];
}
- if ( isset( $rel ) )
+ if ( isset( $rel ) ) {
$source = add_query_arg( 'rel', intval( $rel ), $source );
+ }
- if ( isset( $startSlide ) )
+ if ( isset( $startSlide ) ) {
$source = add_query_arg( 'startSlide', intval( $startSlide ), $source );
+ }
$player = sprintf( "<iframe src='%s' width='%d' height='%d'", esc_url( $source ), $w, $h );
// check the frameborder
- if ( isset( $fb ) )
- $player .= " frameborder='" . intval( $fb ) . "'";
+ if ( ! empty( $attr['fb'] ) || '0' === $attr['fb'] ) {
+ $player .= " frameborder='" . intval( $attr['fb'] ) . "'";
+ }
// check the margin width; if not empty, cast as int
- if ( isset( $mw ) )
- $player .= " marginwidth='" . intval( $mw ) . "'";
+ if ( ! empty( $attr['mw'] ) || '0' === $attr['mw'] ) {
+ $player .= " marginwidth='" . intval( $attr['mw'] ) . "'";
+ }
// check the margin height, if not empty, cast as int
- if ( isset( $mh ) )
- $player .= " marginheight='" . intval( $mh ) . "'";
+ if ( ! empty( $attr['mh'] ) || '0' === $attr['mh'] ) {
+ $player .= " marginheight='" . intval( $attr['mh'] ) . "'";
+ }
- if ( ! empty( $style ) )
- $player .= " style='" . $style . "'";
+ if ( ! empty( $attr['style'] ) ) {
+ $player .= " style='" . esc_attr( $attr['style'] ) . "'";
+ }
// check the scrollbar; cast as a lowercase string for comparison
- $sc = isset( $sc ) ? strtolower( $sc ) : '';
+ if ( ! empty( $attr['sc'] ) ) {
+ $sc = strtolower( $attr['sc'] );
- if ( in_array( $sc, array( 'yes', 'no' ) ) )
- $player .= " scrolling='" . $sc . "'";
+ if ( in_array( $sc, array( 'yes', 'no' ) ) ) {
+ $player .= " scrolling='" . $sc . "'";
+ }
+ }
$player .= ' allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>';
diff --git a/plugins/jetpack/modules/shortcodes/slideshow.php b/plugins/jetpack/modules/shortcodes/slideshow.php
index 8132de8c..0ff568d3 100644
--- a/plugins/jetpack/modules/shortcodes/slideshow.php
+++ b/plugins/jetpack/modules/shortcodes/slideshow.php
@@ -190,6 +190,7 @@ class Jetpack_Slideshow_Shortcode {
'title' => (string) esc_attr( $attachment_image_title ),
'alt' => (string) esc_attr( $attachment_image_alt ),
'caption' => (string) $caption,
+ 'itemprop' => 'image',
);
}
@@ -241,7 +242,7 @@ class Jetpack_Slideshow_Shortcode {
$output .= '<p class="jetpack-slideshow-noscript robots-nocontent">' . esc_html__( 'This slideshow requires JavaScript.', 'jetpack' ) . '</p>';
$output .= sprintf(
- '<div id="%s" class="slideshow-window jetpack-slideshow slideshow-%s" data-trans="%s" data-autostart="%s" data-gallery="%s"></div>',
+ '<div id="%s" class="slideshow-window jetpack-slideshow slideshow-%s" data-trans="%s" data-autostart="%s" data-gallery="%s" itemscope itemtype="http://schema.org/ImageGallery"></div>',
esc_attr( $attr['selector'] . '-slideshow' ),
esc_attr( $attr['color'] ),
esc_attr( $attr['trans'] ),
diff --git a/plugins/jetpack/modules/shortcodes/soundcloud.php b/plugins/jetpack/modules/shortcodes/soundcloud.php
index d3fb9f68..3295bf01 100644
--- a/plugins/jetpack/modules/shortcodes/soundcloud.php
+++ b/plugins/jetpack/modules/shortcodes/soundcloud.php
@@ -27,27 +27,28 @@ All custom modifs are annoted with "A8C" keyword in comment.
* Register oEmbed provider
*/
-wp_oembed_add_provider('#https?://(?:api\.)?soundcloud\.com/.*#i', 'http://soundcloud.com/oembed', true);
+wp_oembed_add_provider( '#https?://(?:api\.)?soundcloud\.com/.*#i', 'http://soundcloud.com/oembed', true );
/**
* Register SoundCloud shortcode
*/
-add_shortcode("soundcloud", "soundcloud_shortcode");
-
+add_shortcode( 'soundcloud', 'soundcloud_shortcode' );
/**
* SoundCloud shortcode handler
- * @param {string|array} $atts The attributes passed to the shortcode like [soundcloud attr1="value" /].
+ *
+ * @param string|array $atts The attributes passed to the shortcode like [soundcloud attr1="value" /].
* Is an empty string when no arguments are given.
- * @param {string} $content The content between non-self closing [soundcloud]…[/soundcloud] tags.
- * @return {string} Widget embed code HTML
+ * @param string $content The content between non-self closing [soundcloud]...[/soundcloud] tags.
+ *
+ * @return string Widget embed code HTML
*/
function soundcloud_shortcode( $atts, $content = null ) {
// Custom shortcode options
- $shortcode_options = array_merge( array('url' => trim( $content ) ), is_array( $atts ) ? $atts : array() );
+ $shortcode_options = array_merge( array( 'url' => trim( $content ) ), is_array( $atts ) ? $atts : array() );
// Turn shortcode option "param" (param=value&param2=value) into array
$shortcode_params = array();
@@ -61,17 +62,21 @@ function soundcloud_shortcode( $atts, $content = null ) {
$isVisual = ! $player_type || $player_type === 'visual' || $shortcode_options['visual'];
// User preference options
- $plugin_options = array_filter(array(
- 'iframe' => $isIframe,
- 'width' => soundcloud_get_option( 'player_width' ),
- 'height' => soundcloud_url_has_tracklist( $shortcode_options['url'] ) ? soundcloud_get_option( 'player_height_multi' ) : soundcloud_get_option( 'player_height' ),
- 'params' => array_filter( array(
- 'auto_play' => soundcloud_get_option( 'auto_play' ),
- 'show_comments' => soundcloud_get_option( 'show_comments' ),
- 'color' => soundcloud_get_option( 'color' ),
- 'visual' => ( $isVisual ? 'true' : 'false' )
- )),
- ));
+ $plugin_options = array_filter(
+ array(
+ 'iframe' => $isIframe,
+ 'width' => soundcloud_get_option( 'player_width' ),
+ 'height' => soundcloud_url_has_tracklist( $shortcode_options['url'] ) ? soundcloud_get_option( 'player_height_multi' ) : soundcloud_get_option( 'player_height' ),
+ 'params' => array_filter(
+ array(
+ 'auto_play' => soundcloud_get_option( 'auto_play' ),
+ 'show_comments' => soundcloud_get_option( 'show_comments' ),
+ 'color' => soundcloud_get_option( 'color' ),
+ 'visual' => ( $isVisual ? 'true' : 'false' ),
+ )
+ ),
+ )
+ );
// Needs to be an array
if ( ! isset( $plugin_options['params'] ) ) {
@@ -98,11 +103,11 @@ function soundcloud_shortcode( $atts, $content = null ) {
}
// Both "width" and "height" need to be integers
- if (isset( $options['width'] ) && ! preg_match( '/^(\d+)(%)?$/', $options['width'] ) ) {
+ if ( isset( $options['width'] ) && ! preg_match( '/^\d+$/', $options['width'] ) ) {
// set to 0 so oEmbed will use the default 100% and WordPress themes will leave it alone
$options['width'] = 0;
}
- if ( isset( $options['height'] ) && ! preg_match( '/^(\d+)(%)?$/', $options['height'] ) ) {
+ if ( isset( $options['height'] ) && ! preg_match( '/^\d+$/', $options['height'] ) ) {
unset( $options['height'] );
}
@@ -115,9 +120,11 @@ function soundcloud_shortcode( $atts, $content = null ) {
}
// Merge in "url" value
- $options['params'] = array_merge( array(
- 'url' => $options['url']
- ), $options['params'] );
+ $options['params'] = array_merge(
+ array(
+ 'url' => $options['url'],
+ ), $options['params']
+ );
// Return html embed code
if ( $iframe ) {
@@ -129,19 +136,24 @@ function soundcloud_shortcode( $atts, $content = null ) {
/**
* Plugin options getter
- * @param {string|array} $option Option name
- * @param {mixed} $default Default value
- * @return {mixed} Option value
+ *
+ * @param string|array $option Option name
+ * @param mixed $default Default value
+ *
+ * @return mixed Option value
*/
function soundcloud_get_option( $option, $default = false ) {
$value = get_option( 'soundcloud_' . $option );
+
return $value === '' ? $default : $value;
}
/**
* Booleanize a value
- * @param {boolean|string} $value
- * @return {boolean}
+ *
+ * @param boolean|string $value
+ *
+ * @return boolean
*/
function soundcloud_booleanize( $value ) {
return is_bool( $value ) ? $value : $value === 'true' ? true : false;
@@ -149,8 +161,10 @@ function soundcloud_booleanize( $value ) {
/**
* Decide if a url has a tracklist
- * @param {string} $url
- * @return {boolean}
+ *
+ * @param string $url
+ *
+ * @return boolean
*/
function soundcloud_url_has_tracklist( $url ) {
return preg_match( '/^(.+?)\/(sets|groups|playlists)\/(.+?)$/', $url );
@@ -158,8 +172,10 @@ function soundcloud_url_has_tracklist( $url ) {
/**
* Parameterize url
- * @param {array} $match Matched regex
- * @return {string} Parameterized url
+ *
+ * @param array $match Matched regex
+ *
+ * @return string Parameterized url
*/
function soundcloud_oembed_params_callback( $match ) {
global $soundcloud_oembed_params;
@@ -176,54 +192,65 @@ function soundcloud_oembed_params_callback( $match ) {
/**
* Iframe widget embed code
- * @param {array} $options Parameters
- * @return {string} Iframe embed code
+ *
+ * @param array $options Parameters
+ *
+ * @return string Iframe embed code
*/
function soundcloud_iframe_widget( $options ) {
// Build URL
$url = set_url_scheme( 'https://w.soundcloud.com/player/?' . http_build_query( $options['params'] ) );
// Set default width if not defined
- $width = isset($options['width']) && $options['width'] !== 0 ? $options['width'] : '100%';
+ $width = isset( $options['width'] ) && $options['width'] !== 0 ? $options['width'] : '100%';
// Set default height if not defined
- $height = isset($options['height']) && $options['height'] !== 0
- ? $options['height']
- : ( soundcloud_url_has_tracklist( $options['url']) || ( isset( $options['params']['visual'] ) && soundcloud_booleanize( $options['params']['visual'] ) ) ? '450' : '166');
+ $height = isset( $options['height'] ) && $options['height'] !== 0
+ ? $options['height']
+ : ( soundcloud_url_has_tracklist( $options['url'] ) || ( isset( $options['params']['visual'] ) && soundcloud_booleanize( $options['params']['visual'] ) ) ? '450' : '166' );
return sprintf( '<iframe width="%s" height="%s" scrolling="no" frameborder="no" src="%s"></iframe>', $width, $height, $url );
}
/**
* Legacy Flash widget embed code
- * @param {array} $options Parameters
- * @return {string} Flash embed code
+ *
+ * @param array $options Parameters
+ *
+ * @return string Flash embed code
*/
function soundcloud_flash_widget( $options ) {
-
// Build URL
- $url = set_url_scheme( 'https://player.soundcloud.com/player.swf?' . http_build_query($options['params']) );
+ $url = set_url_scheme( 'https://player.soundcloud.com/player.swf?' . http_build_query( $options['params'] ) );
// Set default width if not defined
$width = isset( $options['width'] ) && $options['width'] !== 0 ? $options['width'] : '100%';
// Set default height if not defined
- $height = isset( $options['height'] ) && $options['height'] !== 0 ? $options['height'] : ( soundcloud_url_has_tracklist( $options['url'] ) ? '255' : '81');
-
- return preg_replace( '/\s\s+/', "", sprintf( '<object width="%s" height="%s">
- <param name="movie" value="%s"></param>
- <param name="allowscriptaccess" value="always"></param>
- <embed width="%s" height="%s" src="%s" allowscriptaccess="always" type="application/x-shockwave-flash"></embed>
- </object>', $width, $height, $url, $width, $height, $url ) );
+ $height = isset( $options['height'] ) && $options['height'] !== 0 ? $options['height'] : ( soundcloud_url_has_tracklist( $options['url'] ) ? '255' : '81' );
+
+ return preg_replace(
+ '/\s\s+/', '', sprintf(
+ '<object width="%s" height="%s">
+ <param name="movie" value="%s" />
+ <param name="allowscriptaccess" value="always" />
+ <embed width="%s" height="%s" src="%s" allowscriptaccess="always" type="application/x-shockwave-flash"></embed>
+ </object>', $width, $height, $url, $width, $height, $url
+ )
+ );
}
-
/**
* SoundCloud Embed Reversal
*
* Converts a generic HTML embed code from SoundClound into a
* WordPress.com-compatibly shortcode.
+ *
+ * @param string $content HTML content.
+ *
+ * @return string Parsed content.
*/
function jetpack_soundcloud_embed_reversal( $content ) {
- if ( false === stripos( $content, 'w.soundcloud.com/player' ) )
+ if ( false === stripos( $content, 'w.soundcloud.com/player' ) ) {
return $content;
+ }
/* Sample embed code:
@@ -236,8 +263,9 @@ function jetpack_soundcloud_embed_reversal( $content ) {
$regexes[] = '#&lt;iframe(?:[^&]|&(?!gt;))+?src="((?:https?:)?//w\.soundcloud\.com/player/[^"\']++)"(?:[^&]|&(?!gt;))*+&gt;\s*?&lt;/iframe&gt;#i';
foreach ( $regexes as $regex ) {
- if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) )
+ if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) ) {
continue;
+ }
foreach ( $matches as $match ) {
@@ -247,13 +275,14 @@ function jetpack_soundcloud_embed_reversal( $content ) {
$args = parse_url( html_entity_decode( $match[1] ), PHP_URL_QUERY );
$args = wp_parse_args( $args );
- if ( ! preg_match( '#^(?:https?:)?//api\.soundcloud\.com/.+$#i', $args['url'], $url_matches ) )
+ if ( ! preg_match( '#^(?:https?:)?//api\.soundcloud\.com/.+$#i', $args['url'], $url_matches ) ) {
continue;
+ }
if ( ! preg_match( '#height="(\d+)"#i', $match[0], $hmatch ) ) {
$height = '';
} else {
- $height = " height='" . intval( $hmatch[1] ) . "'";
+ $height = ' height="' . intval( $hmatch[1] ) . '"';
}
unset( $args['url'] );
@@ -269,7 +298,7 @@ function jetpack_soundcloud_embed_reversal( $content ) {
$shortcode = '[soundcloud url="' . esc_url( $url_matches[0] ) . '" ' . $params . ' width="100%"' . $height . ' iframe="true" /]';
$replace_regex = sprintf( '#\s*%s\s*#', preg_quote( $match[0], '#' ) );
- $content = preg_replace( $replace_regex, sprintf( "\n\n%s\n\n", $shortcode ), $content );
+ $content = preg_replace( $replace_regex, sprintf( "\n\n%s\n\n", $shortcode ), $content );
/** This action is documented in modules/shortcodes/youtube.php */
do_action( 'jetpack_embed_to_shortcode', 'soundcloud', $url_matches[0] );
}
@@ -278,5 +307,4 @@ function jetpack_soundcloud_embed_reversal( $content ) {
return $content;
}
-
add_filter( 'pre_kses', 'jetpack_soundcloud_embed_reversal' );
diff --git a/plugins/jetpack/modules/shortcodes/ted.php b/plugins/jetpack/modules/shortcodes/ted.php
index f49184ef..d5386109 100644
--- a/plugins/jetpack/modules/shortcodes/ted.php
+++ b/plugins/jetpack/modules/shortcodes/ted.php
@@ -18,42 +18,47 @@ function jetpack_shortcode_get_ted_id( $atts ) {
}
add_shortcode( 'ted', 'shortcode_ted' );
-function shortcode_ted( $atts, $content = '' ) {
+function shortcode_ted( $atts ) {
global $wp_embed;
$defaults = array(
- 'id' => '',
- 'width' => '',
- 'height' => '',
- 'lang' => 'en',
- );
- $atts = shortcode_atts( $defaults, $atts, 'ted' );
+ 'id' => '',
+ 'width' => '',
+ 'height' => '',
+ 'lang' => 'en',
+ );
+ $atts = shortcode_atts( $defaults, $atts, 'ted' );
- if ( empty( $atts['id'] ) )
+ if ( empty( $atts['id'] ) ) {
return '<!-- Missing TED ID -->';
+ }
- if ( preg_match( "#^[\d]+$#", $atts['id'], $matches ) )
+ $url = '';
+ if ( preg_match( '#^[\d]+$#', $atts['id'], $matches ) ) {
$url = 'http://ted.com/talks/view/id/' . $matches[0];
- elseif ( preg_match( "#^https?://(www\.)?ted\.com/talks/view/id/[0-9]+$#", $atts['id'], $matches ) )
+ } elseif ( preg_match( '#^https?://(www\.)?ted\.com/talks/view/id/[0-9]+$#', $atts['id'], $matches ) ) {
$url = $matches[0];
+ }
unset( $atts['id'] );
$args = array();
- if ( is_numeric( $atts['width'] ) )
+ if ( is_numeric( $atts['width'] ) ) {
$args['width'] = $atts['width'];
- else if ( $embed_size_w = get_option( 'embed_size_w' ) )
+ } else if ( $embed_size_w = get_option( 'embed_size_w' ) ) {
$args['width'] = $embed_size_w;
- else if ( ! empty( $GLOBALS['content_width'] ) )
- $args['width'] = (int)$GLOBALS['content_width'];
- else
+ } else if ( ! empty( $GLOBALS['content_width'] ) ) {
+ $args['width'] = (int) $GLOBALS['content_width'];
+ } else {
$args['width'] = 500;
+ }
// Default to a 16x9 aspect ratio if there's no height set
- if ( is_numeric( $atts['height'] ) )
+ if ( is_numeric( $atts['height'] ) ) {
$args['height'] = $atts['height'];
- else
+ } else {
$args['height'] = $args['width'] * 0.5625;
+ }
if ( ! empty( $atts['lang'] ) ) {
$args['lang'] = sanitize_key( $atts['lang'] );
@@ -61,6 +66,7 @@ function shortcode_ted( $atts, $content = '' ) {
}
$retval = $wp_embed->shortcode( $args, $url );
remove_filter( 'oembed_fetch_url', 'ted_filter_oembed_fetch_url', 10 );
+
return $retval;
}
diff --git a/plugins/jetpack/modules/shortcodes/twitter-timeline.php b/plugins/jetpack/modules/shortcodes/twitter-timeline.php
index 4f12d067..adde0367 100644
--- a/plugins/jetpack/modules/shortcodes/twitter-timeline.php
+++ b/plugins/jetpack/modules/shortcodes/twitter-timeline.php
@@ -4,28 +4,35 @@ add_shortcode( 'twitter-timeline', 'twitter_timeline_shortcode' );
function twitter_timeline_shortcode( $attr ) {
$default_atts = array(
- 'username' => '',
- 'id' => '',
- 'height' => 282,
- 'width' => 450,
-
+ 'username' => '',
+ 'id' => '',
+ 'height' => '282',
+ 'width' => '450',
);
$attr = shortcode_atts( $default_atts, $attr, 'twitter-timeline' );
- if ( $attr['username'] != preg_replace( '/[^A-Za-z0-9_]+/', '', $attr['username'] ) )
- return '<!--' . __( 'Invalid username', 'jetpack' ) . '-->';
+ $attr['username'] = preg_replace( '/[^A-Za-z0-9_]+/', '', $attr['username'] );
+
+ if ( empty( $attr['username'] ) ) {
+ return '<!-- ' . __( 'Invalid Twitter Timeline username', 'jetpack' ) . ' -->';
+ }
- if ( ! is_numeric( $attr['id'] ) )
- return '<!--' . __( 'Invalid id', 'jetpack' ) . '-->';
+ if ( ! is_numeric( $attr['id'] ) ) {
+ return '<!-- ' . __( 'Invalid Twitter Timeline id', 'jetpack' ) . ' -->';
+ }
$tweets_by = sprintf( __( 'Tweets by @%s', 'jetpack' ), $attr['username'] );
- $output = '<a class="twitter-timeline" width="' . (int)$attr['width'] . '" height="' . (int)$attr['height'] . '" href="' . esc_url( 'https://twitter.com/'. $attr['username'] ) . '" data-widget-id="' . esc_attr( $attr['id'] ) . '">' . esc_html( $tweets_by ) . '</a>';
- add_action( 'wp_footer', 'twitter_timeline_js' );
+ $output = '<a class="twitter-timeline" width="' . esc_attr( $attr['width'] ) . '" height="' . esc_attr( $attr['height'] ) . '" href="' . esc_url( 'https://twitter.com/' . $attr['username'] ) . '/" data-widget-id="' . esc_attr( $attr['id'] ) . '">' . esc_html( $tweets_by ) . '</a>';
+
+ wp_enqueue_script( 'jetpack-twitter-timeline' );
return $output;
}
function twitter_timeline_js() {
- echo '<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>';
+ if ( is_customize_preview() ) {
+ wp_enqueue_script( 'jetpack-twitter-timeline' );
+ }
}
+add_action( 'wp_enqueue_scripts', 'twitter_timeline_js' );
diff --git a/plugins/jetpack/modules/shortcodes/vimeo.php b/plugins/jetpack/modules/shortcodes/vimeo.php
index 64869111..f63367d8 100644
--- a/plugins/jetpack/modules/shortcodes/vimeo.php
+++ b/plugins/jetpack/modules/shortcodes/vimeo.php
@@ -11,16 +11,19 @@
function jetpack_shortcode_get_vimeo_id( $atts ) {
if ( isset( $atts[0] ) ) {
- $atts[0] = trim( $atts[0] , '=' );
- $id = false;
- if ( is_numeric( $atts[0] ) )
+ $atts[0] = trim( $atts[0], '=' );
+ $id = false;
+ if ( is_numeric( $atts[0] ) ) {
$id = (int) $atts[0];
- elseif ( preg_match( '|vimeo\.com/(\d+)/?$|i', $atts[0], $match ) )
+ } elseif ( preg_match( '|vimeo\.com/(\d+)/?$|i', $atts[0], $match ) ) {
$id = (int) $match[1];
- elseif ( preg_match( '|player\.vimeo\.com/video/(\d+)/?$|i', $atts[0], $match ) )
+ } elseif ( preg_match( '|player\.vimeo\.com/video/(\d+)/?$|i', $atts[0], $match ) ) {
$id = (int) $match[1];
+ }
+
return $id;
}
+
return 0;
}
@@ -28,41 +31,53 @@ function jetpack_shortcode_get_vimeo_id( $atts ) {
* Convert a Vimeo shortcode into an embed code.
*
* @param array $atts An array of shortcode attributes.
+ *
* @return string The embed code for the Vimeo video.
*/
function vimeo_shortcode( $atts ) {
global $content_width;
- extract( array_map( 'intval', shortcode_atts( array(
- 'id' => 0,
- 'width' => 400,
- 'height' => 300,
- 'autoplay' => 0,
- 'loop' => 0,
- ), $atts, 'vimeo' ) ) );
+ $attr = array_map(
+ 'intval',
+ shortcode_atts(
+ array(
+ 'id' => 0,
+ 'width' => 0,
+ 'height' => 0,
+ 'autoplay' => 0,
+ 'loop' => 0,
+ ), $atts
+ )
+ );
if ( isset( $atts[0] ) ) {
- $id = jetpack_shortcode_get_vimeo_id( $atts );
+ $attr['id'] = jetpack_shortcode_get_vimeo_id( $atts );
}
- if ( ! $id ) return "<!-- vimeo error: not a vimeo video -->";
+ if ( ! $attr['id'] ) {
+ return '<!-- vimeo error: not a vimeo video -->';
+ }
// [vimeo 141358 h=500&w=350]
$params = shortcode_new_to_old_params( $atts ); // h=500&w=350
$params = str_replace( array( '&amp;', '&#038;' ), '&', $params );
parse_str( $params, $args );
- if ( isset( $args['w'] ) ) {
- $width = (int) $args['w'];
+ $width = intval( $attr['width'] );
+ $height = intval( $attr['height'] );
+
+ // Support w and h argument as fallback.
+ if ( empty( $width ) && isset( $args['w'] ) ) {
+ $width = intval( $args['w'] );
- if ( ! isset( $args['h'] ) ) {
+ if ( empty( $height ) && ! isset( $args['h'] ) ) {
// The case where w=300 is specified without h=200, otherwise $height
// will always equal the default of 300, no matter what w was set to.
$height = round( ( $width / 640 ) * 360 );
}
}
- if ( isset( $args['h'] ) ) {
+ if ( empty( $height ) && isset( $args['h'] ) ) {
$height = (int) $args['h'];
if ( ! isset( $args['w'] ) ) {
@@ -70,10 +85,15 @@ function vimeo_shortcode( $atts ) {
}
}
- if ( ! $width ) {
+ if ( ! $width && ! empty( $content_width ) ) {
$width = absint( $content_width );
}
+ // If setting the width with content_width has failed, defaulting
+ if ( ! $width ) {
+ $width = 640;
+ }
+
if ( ! $height ) {
$height = round( ( $width / 640 ) * 360 );
}
@@ -100,20 +120,31 @@ function vimeo_shortcode( $atts ) {
*/
$height = (int) apply_filters( 'vimeo_height', $height );
- $url = esc_url( "https://player.vimeo.com/video/$id" );
+ $url = esc_url( 'https://player.vimeo.com/video/' . $attr['id'] );
- // $args['autoplay'] is parsed from the embedded url.
- // $autoplay is parsed from shortcode arguments.
- // in_array( 'autoplay', $atts ) catches the argument passed without a value.
- if ( ! empty( $args['autoplay'] ) || ! empty( $autoplay ) || in_array( 'autoplay', $atts ) ) {
+ // Handle autoplay and loop arguments.
+ if (
+ isset( $args['autoplay'] ) && '1' === $args['autoplay'] // Parsed from the embedded URL.
+ || $attr['autoplay'] // Parsed from shortcode arguments.
+ || in_array( 'autoplay', $atts ) // Catch the argument passed without a value.
+ ) {
$url = add_query_arg( 'autoplay', 1, $url );
}
- if ( ! empty( $args['loop'] ) || ! empty( $loop ) || in_array( 'loop', $atts ) ) {
+ if (
+ isset( $args['loop'] ) && '1' === $args['loop'] // Parsed from the embedded URL.
+ || $attr['loop'] // Parsed from shortcode arguments.
+ || in_array( 'loop', $atts ) // Catch the argument passed without a value.
+ ) {
$url = add_query_arg( 'loop', 1, $url );
}
- $html = sprintf( '<div class="embed-vimeo" style="text-align:center;"><iframe src="%1$s" width="%2$u" height="%3$u" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>', esc_url( $url ), $width, $height );
+ $html = sprintf(
+ '<div class="embed-vimeo" style="text-align: center;"><iframe src="%1$s" width="%2$u" height="%3$u" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>',
+ esc_url( $url ),
+ esc_attr( $width ),
+ esc_attr( $height )
+ );
/**
* Filter the Vimeo player HTML.
@@ -162,35 +193,39 @@ function wpcom_vimeo_embed_url_init() {
add_action( 'init', 'wpcom_vimeo_embed_url_init' );
function vimeo_embed_to_shortcode( $content ) {
- if ( false === stripos( $content, 'player.vimeo.com/video/' ) )
+ if ( false === stripos( $content, 'player.vimeo.com/video/' ) ) {
return $content;
+ }
- $regexp = '!<iframe\s+src=[\'"](https?:)?//player\.vimeo\.com/video/(\d+)[\w=&;?]*[\'"]((?:\s+\w+=[\'"][^\'"]*[\'"])*)((?:[\s\w]*))></iframe>!i';
+ $regexp = '!<iframe\s+src=[\'"](https?:)?//player\.vimeo\.com/video/(\d+)[\w=&;?]*[\'"]((?:\s+\w+=[\'"][^\'"]*[\'"])*)((?:[\s\w]*))></iframe>!i';
$regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp, ENT_NOQUOTES ) );
foreach ( array( 'regexp', 'regexp_ent' ) as $reg ) {
- if ( !preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) )
+ if ( ! preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) ) {
continue;
+ }
foreach ( $matches as $match ) {
$id = (int) $match[2];
$params = $match[3];
- if ( 'regexp_ent' == $reg )
+ if ( 'regexp_ent' == $reg ) {
$params = html_entity_decode( $params );
+ }
$params = wp_kses_hair( $params, array( 'http' ) );
- $width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
+ $width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
$height = isset( $params['height'] ) ? (int) $params['height']['value'] : 0;
$wh = '';
- if ( $width && $height )
+ if ( $width && $height ) {
$wh = ' w=' . $width . ' h=' . $height;
+ }
$shortcode = '[vimeo ' . $id . $wh . ']';
- $content = str_replace( $match[0], $shortcode, $content );
+ $content = str_replace( $match[0], $shortcode, $content );
}
}
@@ -200,15 +235,44 @@ function vimeo_embed_to_shortcode( $content ) {
add_filter( 'pre_kses', 'vimeo_embed_to_shortcode' );
/**
- * Replaces plain-text links to Vimeo videos with Vimeo embeds.
+ * Replaces shortcodes and plain-text URLs to Vimeo videos with Vimeo embeds.
+ * Covers shortcode usage [vimeo 1234] | [vimeo https://vimeo.com/1234] | [vimeo http://vimeo.com/1234]
+ * Or plain text URLs https://vimeo.com/1234 | vimeo.com/1234 | //vimeo.com/1234
+ * Links are left intact.
*
* @since 3.7.0
+ * @since 3.9.5 One regular expression matches shortcodes and plain URLs.
*
* @param string $content HTML content
* @return string The content with embeds instead of URLs
*/
function vimeo_link( $content ) {
- return preg_replace_callback( '#https://vimeo.com/\d*#', 'vimeo_link_callback', $content );
+ /**
+ * [vimeo 12345]
+ * [vimeo http://vimeo.com/12345]
+ */
+ $shortcode = "(?:\[vimeo\s+[^0-9]*)([0-9]+)(?:\])";
+
+ /**
+ * http://vimeo.com/12345
+ * https://vimeo.com/12345
+ * //vimeo.com/12345
+ * vimeo.com/some/descender/12345
+ *
+ * Should not capture inside HTML attributes
+ * [Not] <a href="vimeo.com/12345">Cool Video</a>
+ * [Not] <a href="https://vimeo.com/12345">vimeo.com/12345</a>
+ *
+ * Could erroneously capture:
+ * <a href="some.link/maybe/even/vimeo">This video (vimeo.com/12345) is teh cat's meow!</a>
+ */
+ $plain_url = "(?:[^'\">]?\/?(?:https?:\/\/)?vimeo\.com[^0-9]+)([0-9]+)(?:[^'\"0-9<]|$)";
+
+ return preg_replace_callback(
+ sprintf( '#%s|%s#i', $shortcode, $plain_url ),
+ 'vimeo_link_callback',
+ $content
+ );
}
/**
@@ -217,19 +281,14 @@ function vimeo_link( $content ) {
* @since 3.7.0
*
* @param array $matches An array containing a Vimeo URL.
- * @return string THe Vimeo HTML embed code.
+ * @return string The Vimeo HTML embed code.
*/
function vimeo_link_callback( $matches ) {
- // Grab the Vimeo ID from the URL
- if ( preg_match( '|vimeo\.com/(\d+)/?$|i', $matches[0], $match ) ) {
- $id = (int) $match[1];
- }
-
- // Pass that ID to the Vimeo shortcode function.
- if ( $id ) {
- $atts = array( 'id' => $id );
+ $id = isset( $matches[ 2 ] ) ? $matches[ 2 ] : $matches[ 1 ];
+ if ( isset( $id ) && ctype_digit( $id ) ) {
+ return "\n" . vimeo_shortcode( array( 'id' => $id ) ) . "\n";
}
- return "\n" . vimeo_shortcode( $atts ) . "\n";
+ return $matches[ 0 ];
}
/** This filter is documented in modules/shortcodes/youtube.php */
diff --git a/plugins/jetpack/modules/shortcodes/wufoo.php b/plugins/jetpack/modules/shortcodes/wufoo.php
index fb8cce6d..4020c5ea 100644
--- a/plugins/jetpack/modules/shortcodes/wufoo.php
+++ b/plugins/jetpack/modules/shortcodes/wufoo.php
@@ -10,72 +10,73 @@ http://wufoo.com/docs/code-manager/wordpress-shortcode-plugin/
function wufoo_shortcode( $atts ) {
- extract( shortcode_atts( array(
- 'username' => '',
- 'formhash' => '',
- 'autoresize' => true,
- 'height' => '500',
- 'header' => 'show',
- 'ssl' => ''
- ), $atts ) );
+ $attr = shortcode_atts(
+ array(
+ 'username' => '',
+ 'formhash' => '',
+ 'autoresize' => true,
+ 'height' => '500',
+ 'header' => 'show',
+ 'ssl' => '',
+ ), $atts
+ );
- //Check username and formhash to ensure they only have alphanumeric characters or underscores, and aren't empty
- if ( !preg_match( "/^[a-zA-Z0-9_]+$/", $username) || !preg_match( "/^[a-zA-Z0-9_]+$/", $formhash ) ) {
+ // Check username and formhash to ensure they only have alphanumeric characters or underscores, and aren't empty.
+ if ( ! preg_match( '/^[a-zA-Z0-9_]+$/', $attr['username'] ) || ! preg_match( '/^[a-zA-Z0-9_]+$/', $attr['formhash'] ) ) {
- /**
- * Return an error to the users with instructions if one of these params is invalid
- * They don't have default values because they are user/form-specific
- */
- $return_error = sprintf( __( 'Something is wrong with your Wufoo shortcode. If you copy and paste it from the %sWufoo Code Manager%s, you should be golden.', 'jetpack' ), "<a href='http://wufoo.com/docs/code-manager/'>", "</a>" );
+ /**
+ * Return an error to the users with instructions if one of these params is invalid
+ * They don't have default values because they are user/form-specific
+ */
+ $return_error = sprintf( __( 'Something is wrong with your Wufoo shortcode. If you copy and paste it from the %sWufoo Code Manager%s, you should be golden.', 'jetpack' ), '<a href="http://wufoo.com/docs/code-manager/">', '</a>' );
- return "
- <div style='border: 20px solid red; border-radius: 40px; padding: 40px; margin: 50px 0 70px;'>
+ return '
+ <div style="border: 20px solid red; border-radius: 40px; padding: 40px; margin: 50px 0 70px;">
<h3>Uh oh!</h3>
- <p style='margin: 0;'>$return_error</p>
- </div>";
+ <p style="margin: 0;">' . $return_error . '</p>
+ </div>';
}
/**
- * Required parameters are present
- * An error will be returned inside the form if they are invalid
- */
-
+ * Required parameters are present.
+ * An error will be returned inside the form if they are invalid.
+ */
$js_embed = '<script type="text/javascript">var host = (("https:" == document.location.protocol) ? "https://secure." : "http://");document.write(unescape("%3Cscript src=\'" + host + "wufoo.com/scripts/embed/form.js\' type=\'text/javascript\'%3E%3C/script%3E"));</script>';
$js_embed .= "<script type='text/javascript'>";
- $js_embed .= "var wufoo_$formhash = new WufooForm();";
- $js_embed .= "wufoo_$formhash.initialize({";
- $js_embed .= "'userName':'$username', ";
- $js_embed .= "'formHash':'$formhash', ";
- $js_embed .= "'autoResize':".(bool)( $autoresize ).",";
- $js_embed .= "'height':'". (int) $height ."',";
- $js_embed .= "'header':'".esc_js( $header )."' ";
+ $js_embed .= 'var wufoo_' . $attr['formhash'] . ' = new WufooForm();';
+ $js_embed .= 'wufoo_' . $attr['formhash'] . ' .initialize({';
+ $js_embed .= "'userName':'" . $attr['username'] . "', ";
+ $js_embed .= "'formHash':'" . $attr['formhash'] . "', ";
+ $js_embed .= "'autoResize':" . (bool) ( $attr['autoresize'] ) . ',';
+ $js_embed .= "'height':'" . (int) $attr['height'] . "',";
+ $js_embed .= "'header':'" . esc_js( $attr['header'] ) . "' ";
/**
- * Only output SSL value if passes as param
- * Lower tier plans don't show this param (don't offer SSL)
- */
- $js_embed .= ( $ssl ) ? ",'ssl':".(bool) $ssl : "";
- $js_embed .= "});";
- $js_embed .= "wufoo_$formhash.display();";
- $js_embed .= "</script>";
+ * Only output SSL value if passes as param.
+ * Lower tier plans don't show this param (don't offer SSL).
+ */
+ $js_embed .= ( $attr['ssl'] ) ? ",'ssl':" . (bool) $attr['ssl'] : '';
+ $js_embed .= '});';
+ $js_embed .= 'wufoo_' . $attr['formhash'] . '.display();';
+ $js_embed .= '</script>';
/**
- * iframe embed, loaded inside <noscript> tags
- */
+ * iframe embed, loaded inside <noscript> tags.
+ */
$iframe_embed = '<iframe ';
- $iframe_embed .= 'height="'. (int) $height .'" ';
+ $iframe_embed .= 'height="' . (int) $attr['height'] . '" ';
$iframe_embed .= 'allowTransparency="true" frameborder="0" scrolling="no" style="width:100%;border:none;"';
- $iframe_embed .= 'src="https://'. $username .'.wufoo.com/embed/'. $formhash .'/">';
- $iframe_embed .= '<a href="https://'. $username .'.wufoo.com/forms/'. $formhash .'/" ';
+ $iframe_embed .= 'src="https://' . $attr['username'] . '.wufoo.com/embed/' . $attr['formhash'] . '/">';
+ $iframe_embed .= '<a href="https://' . $attr['username'] . '.wufoo.com/forms/' . $attr['formhash'] . '/" ';
$iframe_embed .= 'rel="nofollow">Fill out my Wufoo form!</a></iframe>';
/** This action is already documented in modules/widgets/gravatar-profile.php */
do_action( 'jetpack_stats_extra', 'embeds', 'wufoo' );
/**
- * Return embed in JS and iframe
- */
+ * Return embed in JS and iframe.
+ */
return "$js_embed <noscript> $iframe_embed </noscript>";
}
-add_shortcode('wufoo', 'wufoo_shortcode');
+add_shortcode( 'wufoo', 'wufoo_shortcode' );
diff --git a/plugins/jetpack/modules/shortcodes/youtube.php b/plugins/jetpack/modules/shortcodes/youtube.php
index 601427ba..2ea76dd6 100644
--- a/plugins/jetpack/modules/shortcodes/youtube.php
+++ b/plugins/jetpack/modules/shortcodes/youtube.php
@@ -292,22 +292,32 @@ function youtube_id( $url ) {
if ( apply_filters( 'jetpack_youtube_allow_autoplay', false ) && isset( $qargs['autoplay'] ) )
$autoplay = '&autoplay=' . (int)$qargs['autoplay'];
- $alignmentcss = 'text-align:center;';
- if ( isset( $qargs['align'] ) ) {
- switch ( $qargs['align'] ) {
- case 'left':
- $alignmentcss = "float:left; width:{$w}px; height:{$h}px; margin-right:10px; margin-bottom: 10px;";
- break;
- case 'right':
- $alignmentcss = "float:right; width:{$w}px; height:{$h}px; margin-left:10px; margin-bottom: 10px;";
- break;
- }
- }
-
if ( ( isset( $url['path'] ) && '/videoseries' == $url['path'] ) || isset( $qargs['list'] ) ) {
- $html = "<span class='embed-youtube' style='$alignmentcss display: block;'><iframe class='youtube-player' type='text/html' width='$w' height='$h' src='" . esc_url( set_url_scheme( "http://www.youtube.com/embed/videoseries?list=$id&hl=en_US" ) ) . "' frameborder='0' allowfullscreen='true'></iframe></span>";
+ $html = "<iframe class='youtube-player' type='text/html' width='$w' height='$h' src='" . esc_url( set_url_scheme( "http://www.youtube.com/embed/videoseries?list=$id&hl=en_US" ) ) . "' allowfullscreen='true' style='border:0;'></iframe>";
} else {
- $html = "<span class='embed-youtube' style='$alignmentcss display: block;'><iframe class='youtube-player' type='text/html' width='$w' height='$h' src='" . esc_url( set_url_scheme( "http://www.youtube.com/embed/$id?version=3&rel=$rel&fs=1$fmt$autohide&showsearch=$search&showinfo=$info&iv_load_policy=$iv$start$end$hd&wmode=$wmode$theme$autoplay{$cc}{$cc_lang}" ) ) . "' frameborder='0' allowfullscreen='true'></iframe></span>";
+ $html = "<iframe class='youtube-player' type='text/html' width='$w' height='$h' src='" . esc_url( set_url_scheme( "http://www.youtube.com/embed/$id?version=3&rel=$rel&fs=1$fmt$autohide&showsearch=$search&showinfo=$info&iv_load_policy=$iv$start$end$hd&wmode=$wmode$theme$autoplay{$cc}{$cc_lang}" ) ) . "' allowfullscreen='true' style='border:0;'></iframe>";
+ }
+
+ // Let's do some alignment wonder in a span, unless we're producing a feed
+ if ( ! is_feed() ) {
+ $alignmentcss = 'text-align:center;';
+ if ( isset( $qargs['align'] ) ) {
+ switch ( $qargs['align'] ) {
+ case 'left':
+ $alignmentcss = "float:left; width:{$w}px; height:{$h}px; margin-right:10px; margin-bottom: 10px;";
+ break;
+ case 'right':
+ $alignmentcss = "float:right; width:{$w}px; height:{$h}px; margin-left:10px; margin-bottom: 10px;";
+ break;
+ }
+ }
+
+ $html = sprintf(
+ '<span class="embed-youtube" style="%s display: block;">%s</span>',
+ esc_attr( $alignmentcss ),
+ $html
+ );
+
}
/**
@@ -363,7 +373,7 @@ if ( apply_filters( 'jetpack_comments_allow_oembed', get_option('embed_autourls'
/**
* Core changes to do_shortcode (https://core.trac.wordpress.org/changeset/34747) broke "improper" shortcodes
- * with the format [shortcode=http://url.com].
+ * with the format [shortcode=http://url.com].
*
* This removes the "=" from the shortcode so it can be parsed.
*
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-xsl.php b/plugins/jetpack/modules/sitemaps/sitemap-xsl.php
index 427d64a5..7f40d1cf 100644
--- a/plugins/jetpack/modules/sitemaps/sitemap-xsl.php
+++ b/plugins/jetpack/modules/sitemaps/sitemap-xsl.php
@@ -90,14 +90,14 @@ $xsl = '<?xml version="1.0" encoding="UTF-8"?>
<body>
<div id="description">
<h1>' . esc_html__( 'XML Sitemap', 'jetpack' ) . '</h1>
- <p>' . wp_kses( sprintf( __( 'This is an XML Sitemap generated by <a href="%s">Jetpack</a>, meant to be consumed by search engines like <a href="%s">Google</a> or <a href="%s">Bing</a>.', 'jetpack' ), 'http://jetpack.me/', 'https://www.google.com', 'https://www.bing.com/' ), array( 'a' => array( 'href' => true, 'title' => true ) ) ) . '</p>
+ <p>' . wp_kses( sprintf( __( 'This is an XML Sitemap generated by <a href="%s">Jetpack</a>, meant to be consumed by search engines like <a href="%s">Google</a> or <a href="%s">Bing</a>.', 'jetpack' ), 'http://jetpack.com/', 'https://www.google.com', 'https://www.bing.com/' ), array( 'a' => array( 'href' => true, 'title' => true ) ) ) . '</p>
<p>' . wp_kses( sprintf( __( 'You can find more information on XML sitemaps at <a href="%s">sitemaps.org</a>', 'jetpack' ), 'http://sitemaps.org' ), array( 'a' => array( 'href' => true, 'title' => true ) ) ) . '</p>
</div>
<div id="content">
<table>
<tr>
<th>' . esc_html__( 'URL', 'jetpack' ) . '</th>
- <th>' . esc_html__( 'Featured Image', 'jetpack' ) . '</th>';
+ <th>' . esc_html__( 'Images', 'jetpack' ) . '</th>';
if ( empty( $type ) ) :
$xsl .= ' <th>' . esc_html__( 'Change Frequency', 'jetpack' ) . '</th>
<th>' . esc_html__( 'Last Updated', 'jetpack' ) . '</th>';
@@ -121,10 +121,7 @@ $xsl .= ' </tr>
</a>
</td>
<td>
- <xsl:choose>
- <xsl:when test="count(image:image) > 0">' . esc_html__( 'Yes', 'jetpack' ) . '</xsl:when>
- <xsl:otherwise>' . esc_html__( 'No', 'jetpack' ) . '</xsl:otherwise>
- </xsl:choose>
+ <xsl:value-of select="count(image:image)"/>
</td>';
if ( empty( $type ) ) :
$xsl .= ' <td>
@@ -139,7 +136,7 @@ $xsl .= ' </tr>
</table>
</div>
<div id="footer">
- <p>' . wp_kses( sprintf( __( '<em>Generated</em> by <a href="%s">Jetpack for WordPress</a>', 'jetpack' ), 'https://jetpack.me' ), array( 'a' => array( 'href' => true, 'title' => true ) ) ) . '</p>
+ <p>' . wp_kses( sprintf( __( '<em>Generated</em> by <a href="%s">Jetpack for WordPress</a>', 'jetpack' ), 'https://jetpack.com' ), array( 'a' => array( 'href' => true, 'title' => true ) ) ) . '</p>
</div>
</body>
</html>
diff --git a/plugins/jetpack/modules/sitemaps/sitemaps.php b/plugins/jetpack/modules/sitemaps/sitemaps.php
index 74b97409..b316ef4d 100644
--- a/plugins/jetpack/modules/sitemaps/sitemaps.php
+++ b/plugins/jetpack/modules/sitemaps/sitemaps.php
@@ -105,18 +105,25 @@ function jetpack_sitemap_array_to_simplexml( $data, &$tree ) {
foreach ( $data as $key => $value ) {
// Allow namespaced keys by use of colon in $key, namespaces must be part of the document
$namespace = null;
- if ( false !== strpos( $key, ':' ) ) {
+ if ( false !== strpos( $key, ':' ) && 'image' != $key ) {
list( $namespace_prefix, $key ) = explode( ':', $key );
if ( isset( $doc_namespaces[ $namespace_prefix ] ) ) {
$namespace = $doc_namespaces[ $namespace_prefix ];
}
}
- if ( is_array( $value ) ) {
- $child = $tree->addChild( $key, null, $namespace );
- jetpack_sitemap_array_to_simplexml( $value, $child );
- } else {
- $tree->addChild( $key, esc_html( $value ), $namespace );
+ if ( 'image' != $key ) {
+ if ( is_array( $value ) ) {
+ $child = $tree->addChild( $key, null, $namespace );
+ jetpack_sitemap_array_to_simplexml( $value, $child );
+ } else {
+ $tree->addChild( $key, esc_html( $value ), $namespace );
+ }
+ } elseif ( is_array( $value ) ) {
+ foreach ( $value as $image ) {
+ $child = $tree->addChild( $key, null, $namespace );
+ jetpack_sitemap_array_to_simplexml( $image, $child );
+ }
}
}
@@ -281,45 +288,6 @@ function jetpack_print_sitemap() {
$tree = simplexml_load_string( $initstr );
}
- // Acquire necessary attachment data for all of the posts in a performant manner
- $attachment_parents = wp_list_pluck( $posts, 'ID' );
- $post_attachments = array();
- while ( $sub_posts = array_splice( $attachment_parents, 0, 100 ) ) {
- $post_parents = implode( ',', array_map( 'intval', $sub_posts ) );
-
- // Get the attachment IDs for all posts. We need to see how many
- // attachments each post parent has and limit it to 5.
- $query = "SELECT ID, post_parent FROM {$wpdb->posts} WHERE post_parent IN ({$post_parents}) AND post_type='attachment' AND ( post_mime_type='image/jpeg' OR post_mime_type='image/png' ) LIMIT 0,1000;";
- $all_attachments = $wpdb->get_results( $query );
- $selected_attachments = array();
- $attachment_count = array();
-
- foreach ( $all_attachments as $attachment ) {
- if ( ! isset( $attachment_count[ $attachment->post_parent ] ) ) {
- $attachment_count[ $attachment->post_parent ] = 0;
- }
-
- // Skip this particular attachment if we already have 5 for the post
- if ( $attachment_count[ $attachment->post_parent ] >= 5 ) {
- continue;
- }
-
- $selected_attachments[] = $attachment->ID;
- $attachment_count[ $attachment->post_parent ] ++;
- }
-
- // bail if there weren't any attachments to avoid an extra query
- if ( empty( $selected_attachments ) ) {
- continue;
- }
-
- // Get more of the attachment object for the attachments we actually care about
- $attachment_ids = implode( ',', array_map( 'intval', $selected_attachments ) );
- $query = "SELECT p.ID, p.post_parent, p.post_title, p.post_excerpt, p.guid FROM {$wpdb->posts} as p WHERE p.ID IN ({$attachment_ids}) AND p.post_type='attachment' AND ( p.post_mime_type='image/jpeg' OR p.post_mime_type='image/png' ) LIMIT 500;";
- $attachments = $wpdb->get_results( $query );
- $post_attachments = array_merge( $post_attachments, $attachments );
- }
-
unset( $initstr );
$latest_mod = '';
foreach ( $posts as $post ) {
@@ -351,28 +319,43 @@ function jetpack_print_sitemap() {
// Image node specified in http://support.google.com/webmasters/bin/answer.py?hl=en&answer=178636
// These attachments were produced with batch SQL earlier in the script
- if ( ! post_password_required( $post->ID ) && $attachments = wp_filter_object_list( $post_attachments, array( 'post_parent' => $post->ID ) ) ) {
-
- $url['image:image'] = array();
+ if ( ! post_password_required( $post->ID ) ) {
+
+ $media = array();
+ $methods = array(
+ 'from_thumbnail' => false,
+ 'from_slideshow' => false,
+ 'from_gallery' => false,
+ 'from_attachment' => false,
+ 'from_html' => false,
+ );
+ foreach ( $methods as $method => $value ) {
+ $methods[ $method ] = true;
+ $images_collected = Jetpack_PostImages::get_images( $post->ID, $methods );
+ if ( is_array( $images_collected ) ) {
+ $media = array_merge( $media, $images_collected );
+ }
+ $methods[ $method ] = false;
+ }
- foreach ( $attachments as $attachment ) {
- $attachment_url = wp_get_attachment_url( $attachment->ID );
+ $images = array();
- if ( $attachment_url ) {
- $url['image:image']['loc'] = esc_url( $attachment_url );
+ foreach ( $media as $item ) {
+ if ( ! isset( $item['type'] ) || 'image' != $item['type'] ) {
+ continue;
}
+ $one_image = array();
- // Only include title if not empty.
- /** This filter is documented in wp-includes/feed.php */
- if ( $attachment_title = apply_filters( 'the_title_rss', $attachment->post_title ) ) {
- $url['image:image']['title'] = html_entity_decode( esc_html( $attachment_title ), ENT_XML1 );
+ if ( isset( $item['src'] ) ) {
+ $one_image['image:loc'] = esc_url( $item['src'] );
+ $one_image['image:title'] = sanitize_title_with_dashes( $name = pathinfo( $item['src'], PATHINFO_FILENAME ) );
}
- // Only include caption if not empty.
- /** This filter is documented in wp-includes/feed.php */
- if ( $attachment_caption = apply_filters( 'the_excerpt_rss', $attachment->post_excerpt ) ) {
- $url['image:image']['caption'] = html_entity_decode( esc_html( $attachment_caption ), ENT_XML1 );
- }
+ $images[] = $one_image;
+ }
+
+ if ( ! empty( $images ) ) {
+ $url['image:image'] = $images;
}
}
@@ -524,6 +507,15 @@ function jetpack_print_news_sitemap() {
// URL to XSLT
$xsl = get_option( 'permalink_structure' ) ? home_url( 'news-sitemap.xsl' ) : home_url( '/?jetpack-news-sitemap-xsl=true' );
+ // Unless it's zh-cn for Simplified Chinese or zh-tw for Traditional Chinese,
+ // trim national variety so an ISO 639 language code as required by Google.
+ $language_code = strtolower( get_locale() );
+ if ( in_array( $language_code, array( 'zh_tw', 'zh_cn' ) ) ) {
+ $language_code = str_replace( '_', '-', $language_code );
+ } else {
+ $language_code = preg_replace( '/(_.*)$/i', '', $language_code );
+ }
+
header( 'Content-Type: application/xml' );
ob_start();
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
@@ -560,9 +552,7 @@ function jetpack_print_news_sitemap() {
$url['loc'] = get_permalink( $post->ID );
$news = array();
$news['news:publication']['news:name'] = get_bloginfo_rss( 'name' );
- if ( function_exists( 'get_blog_lang_code' ) ) {
- $news['news:publication']['news:language'] = get_blog_lang_code();
- }
+ $news['news:publication']['news:language'] = $language_code;
$news['news:publication_date'] = jetpack_w3cdate_from_mysql( $post->post_date_gmt );
$news['news:title'] = get_the_title_rss();
if ( $post->keywords ) {
@@ -709,8 +699,18 @@ function jetpack_sitemap_initialize() {
if ( $discover_sitemap ) {
add_action( 'do_robotstxt', 'jetpack_sitemap_discovery', 5, 0 );
+ if ( get_option( 'permalink_structure' ) ) {
+ /** This filter is documented in modules/sitemaps/sitemaps.php */
+ $sitemap = apply_filters( 'jetpack_sitemap_location', home_url( '/sitemap.xml' ) );
+ $sitemap = parse_url( $sitemap, PHP_URL_PATH );
+ } else {
+ /** This filter is documented in modules/sitemaps/sitemaps.php */
+ $sitemap = apply_filters( 'jetpack_sitemap_location', home_url( '/?jetpack-sitemap=true' ) );
+ $sitemap = preg_replace( '/(=.*?)$/i', '', parse_url( $sitemap, PHP_URL_QUERY ) );
+ }
+
// Sitemap XML
- if ( preg_match( '#(/sitemap\.xml)$#i', $_SERVER['REQUEST_URI'] ) || ( isset( $_GET['jetpack-sitemap'] ) && 'true' == $_GET['jetpack-sitemap'] ) ) {
+ if ( preg_match( '#(' . $sitemap . ')$#i', $_SERVER['REQUEST_URI'] ) || ( isset( $_GET[ $sitemap ] ) && 'true' == $_GET[ $sitemap ] ) ) {
// run later so things like custom post types have been registered
add_action( 'init', 'jetpack_print_sitemap', 999 );
}
@@ -734,8 +734,18 @@ function jetpack_sitemap_initialize() {
if ( $discover_news_sitemap ) {
add_action( 'do_robotstxt', 'jetpack_news_sitemap_discovery', 5, 0 );
+ if ( get_option( 'permalink_structure' ) ) {
+ /** This filter is documented in modules/sitemaps/sitemaps.php */
+ $sitemap = apply_filters( 'jetpack_news_sitemap_location', home_url( '/news-sitemap.xml' ) );
+ $sitemap = parse_url( $sitemap, PHP_URL_PATH );
+ } else {
+ /** This filter is documented in modules/sitemaps/sitemaps.php */
+ $sitemap = apply_filters( 'jetpack_news_sitemap_location', home_url( '/?jetpack-news-sitemap=true' ) );
+ $sitemap = preg_replace( '/(=.*?)$/i', '', parse_url( $sitemap, PHP_URL_QUERY ) );
+ }
+
// News Sitemap XML
- if ( preg_match( '#(/news-sitemap\.xml)$#i', $_SERVER['REQUEST_URI'] ) || ( isset( $_GET['jetpack-news-sitemap'] ) && 'true' == $_GET['jetpack-news-sitemap'] ) ) {
+ if ( preg_match( '#(' . $sitemap . ')$#i', $_SERVER['REQUEST_URI'] ) || ( isset( $_GET[ $sitemap ] ) && 'true' == $_GET[ $sitemap ] ) ) {
// run later so things like custom post types have been registered
add_action( 'init', 'jetpack_print_news_sitemap', 999 );
}
diff --git a/plugins/jetpack/modules/sso.php b/plugins/jetpack/modules/sso.php
index d479d509..d822e28d 100644
--- a/plugins/jetpack/modules/sso.php
+++ b/plugins/jetpack/modules/sso.php
@@ -219,8 +219,11 @@ class Jetpack_SSO {
* @since 2.7
**/
public function render_require_two_step() {
+ /** This filter is documented in modules/sso.php */
+ $require_two_step = 1 == apply_filters( 'jetpack_sso_require_two_step', get_option( 'jetpack_sso_require_two_step' ) );
+ $disabled = $require_two_step ? ' disabled="disabled"' : '';
echo '<label>';
- echo '<input type="checkbox" name="jetpack_sso_require_two_step" ' . checked( 1 == get_option( 'jetpack_sso_require_two_step' ), true, false ) . '> ';
+ echo '<input type="checkbox" name="jetpack_sso_require_two_step" ' . checked( $require_two_step, true, false ) . "$disabled>";
esc_html_e( 'Require Two-Step Authentication' , 'jetpack' );
echo '</label>';
}
@@ -242,8 +245,10 @@ class Jetpack_SSO {
* @since 2.9
**/
public function render_match_by_email() {
+ $match_by_email = 1 == $this->match_by_email();
+ $disabled = $match_by_email ? ' disabled="disabled"' : '';
echo '<label>';
- echo '<input type="checkbox" name="jetpack_sso_match_by_email"' . checked( 1 == get_option( 'jetpack_sso_match_by_email' ), true, false) . '> ';
+ echo '<input type="checkbox" name="jetpack_sso_match_by_email"' . checked( $match_by_email, true, false ) . "$disabled>";
esc_html_e( 'Match by Email', 'jetpack' );
echo '</label>';
}
diff --git a/plugins/jetpack/modules/stats.php b/plugins/jetpack/modules/stats.php
index c80ed09e..9dca3975 100644
--- a/plugins/jetpack/modules/stats.php
+++ b/plugins/jetpack/modules/stats.php
@@ -130,7 +130,7 @@ function stats_map_meta_caps( $caps, $cap, $user_id, $args ) {
}
function stats_template_redirect() {
- global $wp_the_query, $current_user, $stats_footer;
+ global $current_user, $stats_footer;
if ( is_feed() || is_robots() || is_trackback() || is_preview() )
return;
@@ -145,6 +145,24 @@ function stats_template_redirect() {
add_action( 'wp_footer', 'stats_footer', 101 );
add_action( 'wp_head', 'stats_add_shutdown_action' );
+ $script = set_url_scheme( '//stats.wp.com/e-' . gmdate( 'YW' ) . '.js' );
+ $data = stats_build_view_data();
+ $data_stats_array = stats_array( $data );
+
+ $stats_footer = <<<END
+<script type='text/javascript' src='{$script}' async defer></script>
+<script type='text/javascript'>
+ _stq = window._stq || [];
+ _stq.push([ 'view', {{$data_stats_array}} ]);
+ _stq.push([ 'clickTrackerInit', '{$data['blog']}', '{$data['post']}' ]);
+</script>
+
+END;
+}
+
+function stats_build_view_data() {
+ global $wp_the_query;
+
$blog = Jetpack_Options::get_option( 'id' );
$tz = get_option( 'gmt_offset' );
$v = 'ext';
@@ -169,18 +187,7 @@ function stats_template_redirect() {
$post = '0';
}
- $script = set_url_scheme( '//stats.wp.com/e-' . gmdate( 'YW' ) . '.js' );
- $data = stats_array( compact( 'v', 'j', 'blog', 'post', 'tz', 'srv' ) );
-
- $stats_footer = <<<END
-<script type='text/javascript' src='{$script}' async defer></script>
-<script type='text/javascript'>
- _stq = window._stq || [];
- _stq.push([ 'view', {{$data}} ]);
- _stq.push([ 'clickTrackerInit', '{$blog}', '{$post}' ]);
-</script>
-
-END;
+ return compact( 'v', 'j', 'blog', 'post', 'tz', 'srv' );
}
function stats_add_shutdown_action() {
@@ -366,14 +373,14 @@ if ( -1 == document.location.href.indexOf( 'noheader' ) ) {
<?php
}
-function stats_reports_page() {
+function stats_reports_page( $main_chart_only = false ) {
if ( isset( $_GET['dashboard'] ) )
return stats_dashboard_widget_content();
$blog_id = stats_get_option( 'blog_id' );
$domain = Jetpack::build_raw_urls( get_home_url() );
- if ( !isset( $_GET['noheader'] ) && empty( $_GET['nojs'] ) && empty( $_COOKIE['stnojs'] ) ) {
+ if ( ! $main_chart_only && !isset( $_GET['noheader'] ) && empty( $_GET['nojs'] ) && empty( $_COOKIE['stnojs'] ) ) {
$nojs_url = add_query_arg( 'nojs', '1' );
$http = is_ssl() ? 'https' : 'http';
// Loading message
@@ -409,6 +416,8 @@ echo esc_url( apply_filters( 'jetpack_static_url', "{$http}://en.wordpress.com/i
if ( get_locale() !== 'en_US' ) {
$q['jp_lang'] = get_locale();
}
+ // Only show the main chart, without extra header data, or metaboxes.
+ $q['main_chart_only'] = $main_chart_only;
$args = array(
'view' => array( 'referrers', 'postviews', 'searchterms', 'clicks', 'post', 'table' ),
'numdays' => 'int',
diff --git a/plugins/jetpack/modules/subscriptions/subscriptions.css b/plugins/jetpack/modules/subscriptions/subscriptions.css
index c70bee05..feda9836 100644
--- a/plugins/jetpack/modules/subscriptions/subscriptions.css
+++ b/plugins/jetpack/modules/subscriptions/subscriptions.css
@@ -1,6 +1,5 @@
#subscribe-email input {
width: 95%;
- padding: 1px 2px;
}
.comment-subscription-form .subscribe-label {
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php b/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php
index 848ce2e5..5f93adb6 100644
--- a/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php
+++ b/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php
@@ -1,7 +1,7 @@
<?php
/**
* Jetpack Compatibility File
- * See: http://jetpack.me/
+ * See: http://jetpack.com/
*/
function twentyfifteen_jetpack_setup() {
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php b/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php
index 7cf80f66..2881790b 100644
--- a/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php
+++ b/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php
@@ -1,7 +1,7 @@
<?php
/**
* Jetpack Compatibility File
- * See: http://jetpack.me/
+ * See: http://jetpack.com/
*/
function twentysixteen_jetpack_setup() {
diff --git a/plugins/jetpack/modules/theme-tools/random-redirect.php b/plugins/jetpack/modules/theme-tools/random-redirect.php
index 82990ec3..de6c5d43 100644
--- a/plugins/jetpack/modules/theme-tools/random-redirect.php
+++ b/plugins/jetpack/modules/theme-tools/random-redirect.php
@@ -17,21 +17,21 @@ function jetpack_matt_random_redirect() {
}
// Set default post type.
- $post_type = get_post_type();
+ $post_type = get_post_type();
// Set default category type
- if ( is_category() ) {
- $category = get_the_category();
- if ( isset( $category ) && ! empty( $category ) ) {
- $random_cat_id = $category[0]->term_id;
- }
+ if ( is_category() ) {
+ $category = get_the_category();
+ if ( isset( $category ) && ! empty( $category ) ) {
+ $random_cat_id = $category[0]->term_id;
}
+ }
// Set author name if we're on an author archive.
- if ( is_author() ) {
- $random_author_name = get_the_author_meta( 'user_login' );
- $random_author_query = 'AND user_login = "' . $random_author_name . '"';
- }
+ if ( is_author() ) {
+ $random_author_name = get_the_author_meta( 'user_login' );
+ $random_author_query = 'AND user_login = "' . $random_author_name . '"';
+ }
// Acceptable URL formats: /[...]/?random=[post type], /?random, /&random, /&random=1
if ( ! isset( $_GET['random'] ) && ! in_array( strtolower( $_SERVER['REQUEST_URI'] ), array( '/&random', '/&random=1' ) ) )
@@ -53,6 +53,11 @@ function jetpack_matt_random_redirect() {
if ( isset( $_GET['random_post_type'] ) && post_type_exists( $_GET['random_post_type'] ) )
$post_type = $_GET['random_post_type'];
+ // Don't show a random page if 'page' isn't specified as the post type specifically.
+ if ( 'page' === $post_type && is_front_page() && ! isset( $_GET['random_post_type'] ) ) {
+ $post_type = 'post';
+ }
+
global $wpdb;
if ( isset( $random_cat_id ) ) {
diff --git a/plugins/jetpack/modules/theme-tools/responsive-videos.php b/plugins/jetpack/modules/theme-tools/responsive-videos.php
index 9bc4b2e4..59913a96 100644
--- a/plugins/jetpack/modules/theme-tools/responsive-videos.php
+++ b/plugins/jetpack/modules/theme-tools/responsive-videos.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Load the Responsive videos plugin
*/
diff --git a/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js b/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js
index 51ac1363..e9f31ba8 100644
--- a/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js
+++ b/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js
@@ -38,7 +38,7 @@
* A function to resize videos.
*/
function responsive_videos() {
-
+
$( '.jetpack-video-wrapper' ).find( 'embed, iframe, object' ).each( function() {
var video_element, video_width, video_height, video_ratio, video_wrapper, video_margin, container_width;
diff --git a/plugins/jetpack/modules/theme-tools/site-logo.php b/plugins/jetpack/modules/theme-tools/site-logo.php
index 410344fc..d6510c2b 100644
--- a/plugins/jetpack/modules/theme-tools/site-logo.php
+++ b/plugins/jetpack/modules/theme-tools/site-logo.php
@@ -1,7 +1,7 @@
<?php
/*
* Site Logo.
- * @see http://jetpack.me/support/site-logo/
+ * @see http://jetpack.com/support/site-logo/
*
* This feature will only be activated for themes that declare their support.
* This can be done by adding code similar to the following during the
@@ -25,6 +25,12 @@
* @since 3.2
*/
function site_logo_init() {
+ // For transferring existing site logo from Jetpack -> Core
+ if ( current_theme_supports( 'custom-logo' ) && ! get_theme_mod( 'custom_logo' ) && $jp_logo = get_option( 'site_logo' ) ) {
+ set_theme_mod( 'custom_logo', $jp_logo['id'] );
+ delete_option( 'site_logo' );
+ }
+
// Only load our code if our theme declares support, and the standalone plugin is not activated.
if ( current_theme_supports( 'site-logo' ) && ! class_exists( 'Site_Logo', false ) ) {
// Load our class for namespacing.
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php b/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php
index a2ffae30..728a1548 100644
--- a/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php
+++ b/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php
@@ -51,6 +51,11 @@ class Site_Logo {
* @uses add_filter
*/
public function register_hooks() {
+ // This would only happen if a theme supports BOTH site-logo and custom-logo for some reason
+ if ( current_theme_supports( 'custom-logo' ) ) {
+ return;
+ }
+
add_action( 'wp_head', array( $this, 'head_text_styles' ) );
add_action( 'customize_register', array( $this, 'customize_register' ) );
add_action( 'customize_preview_init', array( $this, 'preview_enqueue' ) );
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php b/plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php
index 2117bf88..12817e5f 100644
--- a/plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php
+++ b/plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php
@@ -102,6 +102,8 @@ function jetpack_has_site_logo() {
*/
function jetpack_the_site_logo() {
$logo = site_logo()->logo;
+ $logo_id = get_theme_mod( 'custom_logo' ); // Check for WP 4.5 Site Logo
+ $logo_id = $logo_id ? $logo_id : $logo['id']; // Use WP Core logo if present, otherwise use Jetpack's.
$size = site_logo()->theme_size();
$html = '';
@@ -120,7 +122,7 @@ function jetpack_the_site_logo() {
$html = sprintf( '<a href="%1$s" class="site-logo-link" rel="home" itemprop="url">%2$s</a>',
esc_url( home_url( '/' ) ),
wp_get_attachment_image(
- $logo['id'],
+ $logo_id,
$size,
false,
array(
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js
index e44c3923..133fd9b9 100644
--- a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js
+++ b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js
@@ -87,10 +87,11 @@
*/
pick: function() {
// get the attachment from the modal frame
- var attachment = this.frame.state().get( 'selection' ).first().toJSON();
- attachment = this.reduceMembers( attachment );
- // set the setting - the callback will take care of rendering
- this.setting( attachment );
+ var attachment = this.frame.state().get( 'selection' ).single();
+ if ( 'image' === attachment.get( 'type' ) ) {
+ // set the setting - the callback will take care of rendering
+ this.setting( this.reduceMembers( attachment.toJSON() ) );
+ }
},
/**
* Reduces the attachment object to just the few desired members.
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/carousel-container.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/carousel-container.php
index 38f16dfc..c873d092 100644
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/carousel-container.php
+++ b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/carousel-container.php
@@ -13,6 +13,7 @@ if ( defined( 'JSON_HEX_AMP' ) ) {
<?php if ( isset( $extra ) ): ?>
data-carousel-extra='<?php echo _wp_specialchars( wp_check_invalid_utf8( $extra ), ENT_QUOTES, false, true ); ?>'
<?php endif; ?>
+ itemscope itemtype="http://schema.org/ImageGallery"
>
<?php $this->template( "$this->type-layout", $context ); ?>
</div>
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/item.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/item.php
index 2bbd2ce6..f569cb50 100644
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/item.php
+++ b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/item.php
@@ -6,10 +6,12 @@ if ( empty( $item->image_alt ) && ! empty( $item->image_title ) ) {
$item->image_alt = $item->image_title;
}
?>
-<div class="tiled-gallery-item<?php if ( isset( $item->size ) ) echo " tiled-gallery-item-$item->size"; ?>">
+<div class="tiled-gallery-item<?php if ( isset( $item->size ) ) echo " tiled-gallery-item-$item->size"; ?>" itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<?php if ( $add_link ): ?>
- <a href="<?php echo $item->link; ?>" border="0">
+ <a href="<?php echo $item->link; ?>" border="0" itemprop="url">
<?php endif; ?>
+ <meta itemprop="width" content="<?php echo esc_attr( $item->image->width ); ?>">
+ <meta itemprop="height" content="<?php echo esc_attr( $item->image->height ); ?>">
<img
<?php $this->partial( 'carousel-image-args', array( 'item' => $item ) ); ?>
src="<?php echo esc_url( $item->img_src ); ?>"
@@ -17,6 +19,7 @@ if ( empty( $item->image_alt ) && ! empty( $item->image_title ) ) {
height="<?php echo esc_attr( $item->image->height ); ?>"
data-original-width="<?php echo esc_attr( $item->image->width ); ?>"
data-original-height="<?php echo esc_attr( $item->image->height ); ?>"
+ itemprop="http://schema.org/image"
title="<?php echo esc_attr( $item->image_title ); ?>"
alt="<?php echo esc_attr( $item->image_alt ); ?>"
style="width: <?php echo esc_attr( $item->image->width ); ?>px; height: <?php echo esc_attr( $item->image->height ); ?>px;"
@@ -27,8 +30,10 @@ if ( empty( $item->image_alt ) && ! empty( $item->image_title ) ) {
<?php if ( $this->grayscale == true ): ?>
<?php if ( $add_link ): ?>
- <a href="<?php echo $item->link; ?>" border="0">
+ <a href="<?php echo $item->link; ?>" border="0" itemprop="url">
<?php endif; ?>
+ <meta itemprop="width" content="<?php echo esc_attr( $item->image->width ); ?>">
+ <meta itemprop="height" content="<?php echo esc_attr( $item->image->height ); ?>">
<img
class="grayscale"
src="<?php echo esc_url( $item->img_src_grayscale ); ?>"
@@ -36,6 +41,7 @@ if ( empty( $item->image_alt ) && ! empty( $item->image_title ) ) {
height="<?php echo esc_attr( $item->image->height ); ?>"
data-original-width="<?php echo esc_attr( $item->image->width ); ?>"
data-original-height="<?php echo esc_attr( $item->image->height ); ?>"
+ itemprop="http://schema.org/image"
title="<?php echo esc_attr( $item->image_title ); ?>"
align="left"
alt="<?php echo esc_attr( $item->image_alt ); ?>"
@@ -47,9 +53,8 @@ if ( empty( $item->image_alt ) && ! empty( $item->image_title ) ) {
<?php endif; ?>
<?php if ( trim( $item->image->post_excerpt ) ): ?>
- <div class="tiled-gallery-caption">
+ <div class="tiled-gallery-caption" itemprop="caption description">
<?php echo wptexturize( $item->image->post_excerpt ); ?>
</div>
<?php endif; ?>
</div>
-
diff --git a/plugins/jetpack/modules/videopress/videopress.php b/plugins/jetpack/modules/videopress/videopress.php
index c3542a45..1f7236a1 100644
--- a/plugins/jetpack/modules/videopress/videopress.php
+++ b/plugins/jetpack/modules/videopress/videopress.php
@@ -22,7 +22,7 @@ class Jetpack_VideoPress {
function __construct() {
$this->version = time(); // <s>ghost</s> cache busters!
- add_action( 'jetpack_modules_loaded', array( $this, 'jetpack_modules_loaded' ) );
+ add_action( 'init', array( $this, 'on_init' ) );
add_action( 'jetpack_activate_module_videopress', array( $this, 'jetpack_module_activated' ) );
add_action( 'jetpack_deactivate_module_videopress', array( $this, 'jetpack_module_deactivated' ) );
@@ -30,9 +30,9 @@ class Jetpack_VideoPress {
}
/**
- * After all modules have been loaded.
+ * Fires on init since is_connection_owner should wait until the user is initialized by $wp->init();
*/
- function jetpack_modules_loaded() {
+ function on_init() {
$options = $this->get_options();
// Only the connection owner can configure this module.
diff --git a/plugins/jetpack/modules/widget-visibility/widget-conditions.php b/plugins/jetpack/modules/widget-visibility/widget-conditions.php
index 0878f56d..c6241dea 100644
--- a/plugins/jetpack/modules/widget-visibility/widget-conditions.php
+++ b/plugins/jetpack/modules/widget-visibility/widget-conditions.php
@@ -252,6 +252,7 @@ class Jetpack_Widget_Conditions {
<?php
foreach ( $conditions['rules'] as $rule ) {
+ $rule = wp_parse_args( $rule, array( 'major' => '', 'minor' => '', 'has_children' => '' ) );
?>
<div class="condition">
<div class="selection alignleft">
@@ -311,6 +312,10 @@ class Jetpack_Widget_Conditions {
* @return array Modified settings.
*/
public static function widget_update( $instance, $new_instance, $old_instance ) {
+ if ( empty( $_POST['conditions'] ) ) {
+ return $instance;
+ }
+
$conditions = array();
$conditions['action'] = $_POST['conditions']['action'];
$conditions['rules'] = array();
@@ -513,7 +518,8 @@ class Jetpack_Widget_Conditions {
$condition_result = $wp_query->is_posts_page;
} else {
// $rule['minor'] is a page ID
- $condition_result = is_page( $rule['minor'] );
+ $condition_result = is_page() && ( $rule['minor'] == get_the_ID() );
+
// Check if $rule['minor'] is parent of page ID
if ( ! $condition_result && isset( $rule['has_children'] ) && $rule['has_children'] )
$condition_result = wp_get_post_parent_id( get_the_ID() ) == $rule['minor'];
diff --git a/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js b/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js
index e6749e4b..34dc4dd9 100644
--- a/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js
+++ b/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js
@@ -48,9 +48,8 @@ jQuery( function( $ ) {
}
}
- $( 'a.display-options' ).each( function() {
- var $displayOptionsButton = $( this ),
- $widget = $displayOptionsButton.closest( 'div.widget' );
+ function moveWidgetVisibilityButton( $widget ) {
+ var $displayOptionsButton = $widget.find( 'a.display-options' ).first();
$displayOptionsButton.insertBefore( $widget.find( 'input.widget-control-save' ) );
// Widgets with no configurable options don't show the Save button's container.
@@ -61,7 +60,16 @@ jQuery( function( $ ) {
.remove()
.css( 'float', 'left' )
.prependTo( $displayOptionsButton.parent() );
+ }
+ $( '.widget' ).each( function() {
+ moveWidgetVisibilityButton( $( this ) );
+ } );
+
+ $( document ).on( 'widget-added', function( e, $widget ) {
+ if ( $widget.find( 'div.widget-control-actions a.display-options' ).length === 0 ) {
+ moveWidgetVisibilityButton( $widget );
+ }
} );
widgets_shell.on( 'click.widgetconditions', 'a.add-condition', function( e ) {
diff --git a/plugins/jetpack/modules/widgets/contact-info.php b/plugins/jetpack/modules/widgets/contact-info.php
index dcf2878e..5457f525 100644
--- a/plugins/jetpack/modules/widgets/contact-info.php
+++ b/plugins/jetpack/modules/widgets/contact-info.php
@@ -24,7 +24,8 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
function __construct() {
$widget_ops = array(
'classname' => 'widget_contact_info',
- 'description' => __( 'Display your location, hours, and contact information.', 'jetpack' )
+ 'description' => __( 'Display your location, hours, and contact information.', 'jetpack' ),
+ 'customize_selective_refresh' => true,
);
parent::__construct(
'widget_contact_info',
@@ -33,8 +34,21 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
$widget_ops
);
$this->alt_option_name = 'widget_contact_info';
+
+ if ( is_customize_preview() ) {
+ add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
+ }
}
+ /**
+ * Enqueue scripts and styles.
+ */
+ public function enqueue_scripts() {
+ wp_enqueue_script( 'jquery' );
+ wp_enqueue_script( 'google-maps', 'https://maps.googleapis.com/maps/api/js?sensor=false' );
+ 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 );
+ }
/**
* Return an associative array of default values
@@ -71,6 +85,14 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
if ( $instance['title'] != '' )
echo $before_title . $instance['title'] . $after_title;
+ /**
+ * Fires at the beginning of the Contact Info widget, after the title.
+ *
+ * @module widgets
+ *
+ * @since 3.9.2
+ */
+ do_action( 'jetpack_contact_info_widget_start' );
$map_link = 0;
@@ -111,6 +133,16 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
}
+ /**
+ * Fires at the end of Contact Info widget.
+ *
+ * @module widgets
+ *
+ * @since 3.9.2
+ */
+ do_action( 'jetpack_contact_info_widget_end' );
+
+
echo $after_widget;
}
@@ -227,11 +259,7 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
function build_map( $lat, $lon ) {
-
- wp_enqueue_script( "jquery" );
- wp_enqueue_script( "google-maps", "https://maps.googleapis.com/maps/api/js?sensor=false" );
- 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 );
+ $this->enqueue_scripts();
$lat = esc_attr( $lat );
$lon = esc_attr( $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 11a85fdb..3b5a0de7 100644
--- a/plugins/jetpack/modules/widgets/contact-info/contact-info-map.js
+++ b/plugins/jetpack/modules/widgets/contact-info/contact-info-map.js
@@ -1,8 +1,13 @@
/* global google */
/* jshint unused:false */
-if (jQuery) {
- jQuery().ready(function() {
- jQuery('div.contact-map').each(function(){
+jQuery( function( $ ) {
+ var hasSelectiveRefresh;
+
+ function setupContactMaps( rootElement ) {
+ rootElement = $( rootElement || document.body );
+
+ rootElement.find( 'div.contact-map' ).each( function() {
+
// get lat and lon from hidden input values
var lat = jQuery(this).find('.contact-info-map-lat').val(),
lon = jQuery(this).find('.contact-info-map-lon').val(),
@@ -18,10 +23,27 @@ if (jQuery) {
position: lat_lon
});
- google.maps.event.addListenerOnce(map, 'mouseover', function() {
- google.maps.event.trigger(map, 'resize');
- });
+ google.maps.event.addListenerOnce(map, 'mouseover', function() {
+ google.maps.event.trigger(map, 'resize');
+ });
});
- });
-}
+ }
+
+ setupContactMaps();
+
+ hasSelectiveRefresh = (
+ 'undefined' !== typeof wp &&
+ wp.customize &&
+ wp.customize.selectiveRefresh &&
+ wp.customize.widgetsPreview &&
+ wp.customize.widgetsPreview.WidgetPartial
+ );
+ if ( hasSelectiveRefresh ) {
+ wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
+ if ( placement.partial.widgetId && /^widget_contact_info-\d+$/.test( placement.partial.widgetId ) ) {
+ setupContactMaps( placement.container );
+ }
+ } );
+ }
+} );
diff --git a/plugins/jetpack/modules/widgets/facebook-likebox.php b/plugins/jetpack/modules/widgets/facebook-likebox.php
index 2943bc09..4bf00713 100644
--- a/plugins/jetpack/modules/widgets/facebook-likebox.php
+++ b/plugins/jetpack/modules/widgets/facebook-likebox.php
@@ -38,9 +38,23 @@ class WPCOM_Widget_Facebook_LikeBox extends WP_Widget {
apply_filters( 'jetpack_widget_name', __( 'Facebook Page Plugin', 'jetpack' ) ),
array(
'classname' => 'widget_facebook_likebox',
- 'description' => __( 'Use the Facebook Page Plugin to connect visitors to your Facebook Page', 'jetpack' )
+ 'description' => __( 'Use the Facebook Page Plugin to connect visitors to your Facebook Page', 'jetpack' ),
+ 'customize_selective_refresh' => true,
)
);
+
+ if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
+ add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
+ }
+ }
+
+ /**
+ * Enqueue scripts.
+ */
+ public function enqueue_scripts() {
+ wp_enqueue_script( 'jetpack-facebook-embed' );
+ wp_enqueue_style( 'jetpack_facebook_likebox', plugins_url( 'facebook-likebox/style.css', __FILE__ ) );
+ wp_style_add_data( 'jetpack_facebook_likebox', 'jetpack-inline', true );
}
function widget( $args, $instance ) {
@@ -49,9 +63,6 @@ class WPCOM_Widget_Facebook_LikeBox extends WP_Widget {
$like_args = $this->normalize_facebook_args( $instance['like_args'] );
- wp_enqueue_style( 'jetpack_facebook_likebox', plugins_url( 'facebook-likebox/style.css', __FILE__ ) );
- wp_style_add_data( 'jetpack_facebook_likebox', 'jetpack-inline', true );
-
if ( empty( $like_args['href'] ) || ! $this->is_valid_facebook_url( $like_args['href'] ) ) {
if ( current_user_can('edit_theme_options') ) {
echo $before_widget;
@@ -70,16 +81,6 @@ class WPCOM_Widget_Facebook_LikeBox extends WP_Widget {
$like_args['stream'] = (bool) $like_args['stream'] ? 'true' : 'false';
$like_args['cover'] = (bool) $like_args['cover'] ? 'false' : 'true';
- $locale = $this->get_locale();
-
- /** This filter is documented in modules/sharedaddy/sharing-sources.php */
- $fb_app_id = apply_filters( 'jetpack_sharing_facebook_app_id', '249643311490' );
- if ( is_numeric( $fb_app_id ) ) {
- $fb_app_id = '&appId=' . $fb_app_id;
- } else {
- $fb_app_id = '';
- }
-
echo $before_widget;
if ( ! empty( $title ) ) :
@@ -108,8 +109,8 @@ class WPCOM_Widget_Facebook_LikeBox extends WP_Widget {
<div class="fb-page" data-href="<?php echo esc_url( $page_url ); ?>" data-width="<?php echo intval( $like_args['width'] ); ?>" data-height="<?php echo intval( $like_args['height'] ); ?>" data-hide-cover="<?php echo esc_attr( $like_args['cover'] ); ?>" data-show-facepile="<?php echo esc_attr( $like_args['show_faces'] ); ?>" data-show-posts="<?php echo esc_attr( $like_args['stream'] ); ?>">
<div class="fb-xfbml-parse-ignore"><blockquote cite="<?php echo esc_url( $page_url ); ?>"><a href="<?php echo esc_url( $page_url ); ?>"><?php echo esc_html( $title ); ?></a></blockquote></div>
</div>
- <script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = '//connect.facebook.net/<?php echo esc_html( $locale ); ?>/sdk.js#xfbml=1<?php echo $fb_app_id; ?>&version=v2.3'; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script>
<?php
+ wp_enqueue_script( 'jetpack-facebook-embed' );
echo $after_widget;
/** This action is already documented in modules/widgets/gravatar-profile.php */
@@ -283,54 +284,20 @@ class WPCOM_Widget_Facebook_LikeBox extends WP_Widget {
return $value;
}
+ /**
+ * @deprecated
+ */
function guess_locale_from_lang( $lang ) {
- if ( 'en' == $lang || 'en_US' == $lang || !$lang ) {
- return 'en_US';
- }
-
- if ( !class_exists( 'GP_Locales' ) ) {
- if ( !defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) || !file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
- return false;
- }
-
- require JETPACK__GLOTPRESS_LOCALES_PATH;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- // WP.com: get_locale() returns 'it'
- $locale = GP_Locales::by_slug( $lang );
- } else {
- // Jetpack: get_locale() returns 'it_IT';
- $locale = GP_Locales::by_field( 'facebook_locale', $lang );
- }
-
- if ( ! $locale ) {
- return false;
- }
-
- if ( empty( $locale->facebook_locale ) ) {
- if ( empty( $locale->wp_locale ) ) {
- return false;
- } else {
- // Facebook SDK is smart enough to fall back to en_US if a
- // locale isn't supported. Since supported Facebook locales
- // can fall out of sync, we'll attempt to use the known
- // wp_locale value and rely on said fallback.
- return $locale->wp_locale;
- }
- }
-
- return $locale->facebook_locale;
+ _deprecated_function( __METHOD__, '3.10', 'Jetpack::guess_locale_from_lang()' );
+ Jetpack::$instance->get_locale_from_lang( $lang );
}
+ /**
+ * @deprecated
+ */
function get_locale() {
- $locale = $this->guess_locale_from_lang( get_locale() );
-
- if ( ! $locale ) {
- $locale = 'en_US';
- }
-
- return $locale;
+ _deprecated_function( __METHOD__, '3.10', 'Jetpack::get_locale()' );
+ Jetpack::$instance->get_locale();
}
}
diff --git a/plugins/jetpack/modules/widgets/social-media-icons.php b/plugins/jetpack/modules/widgets/social-media-icons.php
index 30908669..f46ef290 100644
--- a/plugins/jetpack/modules/widgets/social-media-icons.php
+++ b/plugins/jetpack/modules/widgets/social-media-icons.php
@@ -18,7 +18,10 @@ class WPCOM_social_media_icons_widget extends WP_Widget {
'wpcom_social_media_icons_widget',
/** This filter is documented in modules/widgets/facebook-likebox.php */
apply_filters( 'jetpack_widget_name', esc_html__( 'Social Media Icons', 'jetpack' ) ),
- array( 'description' => __( 'A simple widget that displays social media icons.', 'jetpack' ), )
+ array(
+ 'description' => __( 'A simple widget that displays social media icons.', 'jetpack' ),
+ 'customize_selective_refresh' => true,
+ )
);
$this->defaults = array(
@@ -46,7 +49,7 @@ class WPCOM_social_media_icons_widget extends WP_Widget {
'googleplus' => array( 'Google+', 'https://plus.google.com/u/0/%s/' ),
);
- if ( is_active_widget( false, false, $this->id_base ) ) {
+ if ( is_active_widget( false, false, $this->id_base ) || is_customize_preview() ) {
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ) );
}
}
diff --git a/plugins/jetpack/modules/widgets/top-posts.php b/plugins/jetpack/modules/widgets/top-posts.php
index e14b4434..3bf12b7c 100644
--- a/plugins/jetpack/modules/widgets/top-posts.php
+++ b/plugins/jetpack/modules/widgets/top-posts.php
@@ -44,6 +44,15 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
if ( is_active_widget( false, false, $this->id_base ) ) {
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ) );
}
+
+ /**
+ * Add explanation about how the statistics are calculated.
+ *
+ * @module widgets
+ *
+ * @since 3.9.3
+ */
+ add_action( 'jetpack_widget_top_posts_after_fields', array( $this, 'stats_explanation' ) );
}
function enqueue_style() {
@@ -52,10 +61,9 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
}
function form( $instance ) {
- $title = isset( $instance['title' ] ) ? $instance['title'] : false;
- if ( false === $title ) {
- $title = $this->default_title;
- }
+ $instance = wp_parse_args( (array) $instance, $this->defaults() );
+
+ $title = stripslashes( $instance['title'] );
$count = isset( $instance['count'] ) ? (int) $instance['count'] : 10;
if ( $count < 1 || 10 < $count ) {
@@ -65,6 +73,9 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
$allowed_post_types = array_values( get_post_types( array( 'public' => true ) ) );
$types = isset( $instance['types'] ) ? (array) $instance['types'] : array( 'post', 'page' );
+ // 'likes' are not available in Jetpack
+ $ordering = isset( $instance['ordering'] ) && 'likes' === $instance['ordering'] ? 'likes' : 'views';
+
if ( isset( $instance['display'] ) && in_array( $instance['display'], array( 'grid', 'list', 'text' ) ) ) {
$display = $instance['display'];
} else {
@@ -83,6 +94,16 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
<input id="<?php echo $this->get_field_id( 'count' ); ?>" name="<?php echo $this->get_field_name( 'count' ); ?>" type="number" value="<?php echo (int) $count; ?>" min="1" max="10" />
</p>
+ <?php if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) : ?>
+ <p>
+ <label><?php esc_html_e( 'Order Top Posts &amp; Pages By:', 'jetpack' ); ?></label>
+ <ul>
+ <li><label><input id="<?php echo $this->get_field_id( 'ordering' ); ?>-likes" name="<?php echo $this->get_field_name( 'ordering' ); ?>" type="radio" value="likes" <?php checked( 'likes', $ordering ); ?> /> <?php esc_html_e( 'Likes', 'jetpack' ); ?></label></li>
+ <li><label><input id="<?php echo $this->get_field_id( 'ordering' ); ?>-views" name="<?php echo $this->get_field_name( 'ordering' ); ?>" type="radio" value="views" <?php checked( 'views', $ordering ); ?> /> <?php esc_html_e( 'Views', 'jetpack' ); ?></label></li>
+ </ul>
+ </p>
+ <?php endif; ?>
+
<p>
<label for="<?php echo $this->get_field_id( 'types' ); ?>"><?php esc_html_e( 'Types of pages to display:', 'jetpack' ); ?></label>
<ul>
@@ -112,11 +133,32 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
<li><label><input id="<?php echo $this->get_field_id( 'display' ); ?>-list" name="<?php echo $this->get_field_name( 'display' ); ?>" type="radio" value="list" <?php checked( 'list', $display ); ?> /> <?php esc_html_e( 'Image List', 'jetpack' ); ?></label></li>
<li><label><input id="<?php echo $this->get_field_id( 'display' ); ?>-grid" name="<?php echo $this->get_field_name( 'display' ); ?>" type="radio" value="grid" <?php checked( 'grid', $display ); ?> /> <?php esc_html_e( 'Image Grid', 'jetpack' ); ?></label></li>
</ul>
- </p>
+ </p><?php
- <p><?php esc_html_e( 'Top Posts &amp; Pages by views are calculated from 24-48 hours of stats. They take a while to change.', 'jetpack' ); ?></p>
+ /**
+ * Fires after the fields are displayed in the Top Posts Widget settings in wp-admin.
+ *
+ * Allow adding extra content after the fields are displayed.
+ *
+ * @module widgets
+ *
+ * @since 3.9.3
+ *
+ * @param array $args {
+ * @param array $instance The widget instance.
+ * @param object $this The class object.
+ * }
+ */
+ do_action( 'jetpack_widget_top_posts_after_fields', array( $instance, $this ) );
+ }
+
+ /**
+ * Explains how the statics are calculated.
+ */
+ function stats_explanation() {
+ ?>
- <?php
+ <p><?php esc_html_e( 'Top Posts &amp; Pages by views are calculated from 24-48 hours of stats. They take a while to change.', 'jetpack' ); ?></p><?php
}
function update( $new_instance, $old_instance ) {
@@ -131,6 +173,9 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
$instance['count'] = 10;
}
+ // 'likes' are not available in Jetpack
+ $instance['ordering'] = isset( $new_instance['ordering'] ) && 'likes' == $new_instance['ordering'] ? 'likes' : 'views';
+
$allowed_post_types = array_values( get_post_types( array( 'public' => true ) ) );
$instance['types'] = $new_instance['types'];
foreach( $new_instance['types'] as $key => $type ) {
@@ -145,10 +190,24 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
$instance['display'] = 'text';
}
+ /**
+ * Filters Top Posts Widget settings before they're saved.
+ *
+ * @module widgets
+ *
+ * @since 3.9.3
+ *
+ * @param array $instance The santized widget instance. Only contains data processed by the current widget.
+ * @param array $new_instance The new widget instance before sanitization.
+ */
+ $instance = apply_filters( 'jetpack_top_posts_saving', $instance, $new_instance );
+
return $instance;
}
function widget( $args, $instance ) {
+ $instance = wp_parse_args( (array) $instance, $this->defaults() );
+
$title = isset( $instance['title' ] ) ? $instance['title'] : false;
if ( false === $title ) {
$title = $this->default_title;
@@ -173,6 +232,9 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
$types = isset( $instance['types'] ) ? (array) $instance['types'] : array( 'post', 'page' );
+ // 'likes' are not available in Jetpack
+ $ordering = isset( $instance['ordering'] ) && 'likes' == $instance['ordering'] ? 'likes' : 'views';
+
if ( isset( $instance['display'] ) && in_array( $instance['display'], array( 'grid', 'list', 'text' ) ) ) {
$display = $instance['display'];
} else {
@@ -207,7 +269,11 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
$get_image_options = apply_filters( 'jetpack_top_posts_widget_image_options', $get_image_options );
}
- $posts = $this->get_by_views( $count );
+ if ( function_exists( 'wpl_get_blogs_most_liked_posts' ) && 'likes' == $ordering ) {
+ $posts = $this->get_by_likes( $count );
+ } else {
+ $posts = $this->get_by_views( $count, $args );
+ }
// Filter the returned posts. Remove all posts that do not match the chosen Post Types.
if ( isset( $types ) ) {
@@ -343,17 +409,55 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
echo $args['after_widget'];
}
- function get_by_views( $count ) {
+ public static function defaults() {
+ return array(
+ 'title' => esc_html__( 'Top Posts &amp; Pages', 'jetpack' ),
+ 'count' => absint( 10 ),
+ 'types' => array( 'post', 'page' ),
+ 'ordering' => 'views',
+ 'display' => 'text',
+ );
+ }
+
+ /*
+ * Get most liked posts
+ *
+ * ONLY TO BE USED IN WPCOM
+ */
+ function get_by_likes( $count ) {
+ $post_likes = wpl_get_blogs_most_liked_posts();
+ if ( !$post_likes ) {
+ return array();
+ }
+
+ return $this->get_posts( array_keys( $post_likes ), $count );
+ }
+
+ function get_by_views( $count, $args ) {
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
+ global $wpdb;
+
+ $post_views = wp_cache_get( "get_top_posts_$count", 'stats' );
+ if ( false === $post_views ) {
+ $post_views = array_shift( stats_get_daily_history( false, get_current_blog_id(), 'postviews', 'post_id', false, 2, '', $count * 2 + 10, true ) );
+ unset( $post_views[0] );
+ wp_cache_add( "get_top_posts_$count", $post_views, 'stats', 1200);
+ }
+
+ return $this->get_posts( array_keys( $post_views ), $count );
+ }
+
/**
* Filter the number of days used to calculate Top Posts for the Top Posts widget.
*
* @module widgets
*
- * @since 2.8.0
+ * @since 3.9.3
*
* @param int 2 Number of days. Default is 2.
+ * @param array $args The widget arguments.
*/
- $days = (int) apply_filters( 'jetpack_top_posts_days', 2 );
+ $days = (int) apply_filters( 'jetpack_top_posts_days', 2, $args );
if ( $days < 1 ) {
$days = 2;
@@ -448,3 +552,33 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
return apply_filters( 'jetpack_widget_get_top_posts', $posts, $post_ids, $count );
}
}
+
+/**
+ * Create a shortcode to display the widget anywhere.
+ *
+ * @since 3.9.2
+ */
+function jetpack_do_top_posts_widget( $instance ) {
+ // Post Types can't be entered as an array in the shortcode parameters.
+ if ( isset( $instance['types'] ) && is_array( $instance['types'] ) ) {
+ $instance['types'] = implode( ',', $instance['types'] );
+ }
+
+ $instance = shortcode_atts(
+ Jetpack_Top_Posts_Widget::defaults(),
+ $instance,
+ 'jetpack_top_posts_widget'
+ );
+
+ // Add a class to allow styling
+ $args = array(
+ 'before_widget' => sprintf( '<div class="%s">', 'jetpack_top_posts_widget' ),
+ );
+
+ ob_start();
+ the_widget( 'Jetpack_Top_Posts_Widget', $instance, $args );
+ $output = ob_get_clean();
+
+ return $output;
+}
+add_shortcode( 'jetpack_top_posts_widget', 'jetpack_do_top_posts_widget' );
diff --git a/plugins/jetpack/modules/widgets/twitter-timeline.php b/plugins/jetpack/modules/widgets/twitter-timeline.php
index 9301f639..76719043 100644
--- a/plugins/jetpack/modules/widgets/twitter-timeline.php
+++ b/plugins/jetpack/modules/widgets/twitter-timeline.php
@@ -25,31 +25,31 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
apply_filters( 'jetpack_widget_name', esc_html__( 'Twitter Timeline', 'jetpack' ) ),
array(
'classname' => 'widget_twitter_timeline',
- 'description' => __( 'Display an official Twitter Embedded Timeline widget.', 'jetpack' )
+ 'description' => __( 'Display an official Twitter Embedded Timeline widget.', 'jetpack' ),
+ 'customize_selective_refresh' => true,
)
);
- if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) ) {
- add_action( 'wp_footer', array( $this, 'library' ) );
+ if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
+ add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
}
}
/**
- * Enqueue Twitter's widget library
+ * Enqueue scripts.
+ */
+ public function enqueue_scripts() {
+ wp_enqueue_script( 'jetpack-twitter-timeline' );
+ }
+
+ /**
+ * Enqueue Twitter's widget library.
+ *
+ * @deprecated
*/
public function library() {
- ?>
- <script type="text/javascript">
- !function(d,s,id){
- var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';
- if(!d.getElementById(id)){
- js=d.createElement(s);
- js.id=id;js.src=p+"://platform.twitter.com/widgets.js";
- fjs.parentNode.insertBefore(js,fjs);
- }
- }(document,"script","twitter-wjs");
- </script>
- <?php
+ _deprecated_function( __METHOD__, '3.10' );
+ wp_print_scripts( array( 'jetpack-twitter-timeline' ) );
}
/**
@@ -203,7 +203,7 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
</p>
<p>
- <label for="<?php echo $this->get_field_id( 'width' ); ?>"><?php esc_html_e( 'Width (px):', 'jetpack' ); ?></label>
+ <label for="<?php echo $this->get_field_id( 'width' ); ?>"><?php esc_html_e( 'Maximum Width (px):', 'jetpack' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'width' ); ?>" name="<?php echo $this->get_field_name( 'width' ); ?>" type="text" value="<?php echo esc_attr( $instance['width'] ); ?>" />
</p>
diff --git a/plugins/jetpack/modules/widgets/wordpress-post-widget.php b/plugins/jetpack/modules/widgets/wordpress-post-widget.php
index 198effc4..f06753bc 100644
--- a/plugins/jetpack/modules/widgets/wordpress-post-widget.php
+++ b/plugins/jetpack/modules/widgets/wordpress-post-widget.php
@@ -597,21 +597,22 @@ class Jetpack_Display_Posts_Widget extends WP_Widget {
return false;
}
- /**
- * If Jetpack is not active or in development mode, we don't want to update widget data.
- */
- if ( ! Jetpack::is_active() && ! Jetpack::is_development_mode() ) {
- return false;
- }
+ if ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM ) {
+ /**
+ * If Jetpack is not active or in development mode, we don't want to update widget data.
+ */
+ if ( ! Jetpack::is_active() && ! Jetpack::is_development_mode() ) {
+ return false;
+ }
- /**
- * If Extra Sidebar Widgets module is not active, we don't need to update widget data.
- */
- if ( ! Jetpack::is_module_active( 'widgets' ) ) {
- return false;
+ /**
+ * If Extra Sidebar Widgets module is not active, we don't need to update widget data.
+ */
+ if ( ! Jetpack::is_module_active( 'widgets' ) ) {
+ return false;
+ }
}
-
-
+
/**
* If none of the above checks failed, then we definitely want to update widget data.
*/
@@ -790,7 +791,7 @@ class Jetpack_Display_Posts_Widget extends WP_Widget {
* @param array $args Array of Photon Parameters.
*/
$image_params = apply_filters( 'jetpack_display_posts_widget_image_params', array() );
- echo '<a title="' . esc_attr( $post_title ) . '" href="' . esc_url( $single_post['url'] ) . '"><img src="' . jetpack_photon_url( $featured_image, $image_params ) . '" alt="' . esc_attr( $post_title ) . '"/></a>';
+ echo '<a title="' . esc_attr( $post_title ) . '" href="' . esc_url( $single_post['url'] ) . '"' . $target . '><img src="' . jetpack_photon_url( $featured_image, $image_params ) . '" alt="' . esc_attr( $post_title ) . '"/></a>';
}
if ( $instance['show_excerpts'] == true ) {
@@ -926,7 +927,12 @@ class Jetpack_Display_Posts_Widget extends WP_Widget {
<?php _e( "Enter a WordPress.com or Jetpack WordPress site URL.", 'jetpack' ); ?>
</i>
<?php
- if ( empty( $url ) ) {
+ /**
+ * Show an error if the URL field was left empty.
+ *
+ * The error is shown only when the widget was already saved.
+ */
+ if ( empty( $url ) && ! preg_match( '/__i__|%i%/', $this->id ) ) {
?>
<br />
<i class="error-message"><?php echo __( 'You must specify a valid blog URL!', 'jetpack' ); ?></i>
@@ -968,10 +974,10 @@ class Jetpack_Display_Posts_Widget extends WP_Widget {
* Prepare the error messages.
*/
- $what_broke_down = '';
+ $where_message = '';
switch ( $update_errors['where'] ) {
case 'posts':
- $what_broke_down .= __( 'posts list', 'jetpack' );
+ $where_message .= __( 'An error occurred while downloading blog posts list', 'jetpack' );
break;
/**
@@ -981,19 +987,13 @@ class Jetpack_Display_Posts_Widget extends WP_Widget {
*/
case 'site_info':
default:
- $what_broke_down .= __( 'information', 'jetpack' );
+ $where_message .= __( 'An error occurred while downloading blog information', 'jetpack' );
break;
}
- $where_message = sprintf(
- __( 'An error occurred while downloading blog %s', 'jetpack' ),
- $what_broke_down
- );
-
-
?>
<p class="error-message">
- <?php echo $where_message; ?>:
+ <?php echo esc_html( $where_message ); ?>:
<br />
<i>
<?php echo esc_html( $update_errors['message'] ); ?>
@@ -1005,7 +1005,7 @@ class Jetpack_Display_Posts_Widget extends WP_Widget {
?>
<br />
<br />
- <?php echo __( 'Detailed information', 'jetpack' ); ?>:
+ <?php esc_html_e( 'Detailed information', 'jetpack' ); ?>:
<br />
<?php echo esc_html( $update_errors['debug'] ); ?>
<?php
@@ -1124,4 +1124,4 @@ class Jetpack_Display_Posts_Widget extends WP_Widget {
public function wp_wp_remote_get( $url, $args = array() ) {
return wp_remote_get( $url, $args );
}
-} \ No newline at end of file
+}
diff --git a/plugins/jetpack/readme.txt b/plugins/jetpack/readme.txt
index 38d9b78c..f4700892 100644
--- a/plugins/jetpack/readme.txt
+++ b/plugins/jetpack/readme.txt
@@ -1,11 +1,11 @@
=== Jetpack by WordPress.com ===
-Contributors: automattic, aduth, akirk, allendav, alternatekev, andy, apeatling, azaozz, batmoo, barry, beaulebens, blobaugh, cainm, cfinke, chellycat, christinepollock, csonnek, danielbachhuber, daniloercoli, designsimply, dllh, dsmart, dzver, ebinnion, enej, eoigal, ethitter, gcorne, georgestephanis, gibrown, hew, hugobaeta, HypertextRanch, iammattthomas, iandunn, jblz, jeherve, jenia, jkudish, jmdodd, Joen, johnjamesjacoby, jshreve, koke, kraftbj, lancewillett, martinremy, matt, matveb, mattwiebe, maverick3x6, mcsf, mdawaffe, michaeldcain, michael-arestad, migueluy, mikeyarce, mjangda, mkaz, nickmomrik, obenland, pento, professor44, ryancowles, richardmuscat, richardmtl, roccotripaldi, samhotchkiss, sdquirk, stephdau, tmoorewp, Viper007Bond, westi, yoavf, zinigor
+Contributors: automattic, adamkheckler, aduth, akirk, allendav, alternatekev, andy, apeatling, azaozz, batmoo, barry, beaulebens, blobaugh, cainm, cfinke, chaselivingston, chellycat, christinepollock, csonnek, danielbachhuber, daniloercoli, designsimply, dllh, dsmart, dzver, ebinnion, eliorivero, enej, eoigal, ethitter, gcorne, georgestephanis, gibrown, goldsounds, hew, hugobaeta, HypertextRanch, iammattthomas, iandunn, jacobshere, jblz, jeherve, jenhooks, jenia, jkudish, jmdodd, Joen, johnjamesjacoby, jshreve, koke, kraftbj, lancewillett, lschuyler, macmanx, martinremy, matt, matveb, mattwiebe, maverick3x6, mcsf, mdawaffe, michaeldcain, michael-arestad, migueluy, mikeyarce, mjangda, mkaz, nancythanki, nickmomrik, obenland, pento, professor44, ryancowles, richardmuscat, richardmtl, roccotripaldi, samhotchkiss, sdquirk, stephdau, tmoorewp, Viper007Bond, westi, yoavf, zinigor
Tags: WordPress.com, jet pack, comments, contact, gallery, performance, sharing, security, shortcodes, stats, subscriptions, widgets
-Stable tag: 3.9.1
+Stable tag: 3.9.6
Requires at least: 4.3
-Tested up to: 4.4
+Tested up to: 4.5
-Your WordPress, Simplified.
+Increase your traffic, view your stats, speed up your site, and protect yourself from hackers with Jetpack.
== Description ==
@@ -24,22 +24,22 @@ Jetpack automatically **optimizes and speeds up** images using the global WordPr
With Jetpack comes a **centralized dashboard** on WordPress.com. Manage plugins and menus, publish posts, and view enhanced site stats for all of your sites.
= A few more things that our users love =
-Jetpack includes other features that help you customize your site including Custom CSS, Contact Forms, Galleries and Carousels, Notifications and Subscriptions, Configurable Widgets, and [many more](https://jetpack.me/features).
+Jetpack includes other features that help you customize your site including Custom CSS, Contact Forms, Galleries and Carousels, Notifications and Subscriptions, Configurable Widgets, and [many more](https://jetpack.com/features).
= Dedicated Support =
-We have an entire team of happiness engineers ready to help you. Ask your questions in the support forum, or [contact us directly](https://jetpack.me/contact-support).
+We have an entire team of happiness engineers ready to help you. Ask your questions in the support forum, or [contact us directly](https://jetpack.com/contact-support).
= Contributing to Jetpack =
-Jetpack is open-source and we actively encourage community contributions: whether it's a compliment, bug report, code, or an idea we welcome it with open arms! [Learn about contributing](https://jetpack.me/contribute) or consider [joining our beta program](https://jetpack.me/beta).
+Jetpack is open-source and we actively encourage community contributions: whether it's a compliment, bug report, code, or an idea we welcome it with open arms! [Learn about contributing](https://jetpack.com/contribute) or consider [joining our beta program](https://jetpack.com/beta).
== Installation ==
-[Install Jetpack from our site](https://jetpack.me/install?from=wporg) by typing in your site address.
+[Install Jetpack from our site](https://jetpack.com/install?from=wporg) by typing in your site address.
Alternatively install Jetpack via the plugin directory, or by uploading the files manually to your server. After activating Jetpack, connect to WordPress.com to enable the Jetpack features.
-If you need additional help [read our detailed instructions (including a video walkthrough)](http://jetpack.me/support/installing-jetpack/).
+If you need additional help [read our detailed instructions (including a video walkthrough)](http://jetpack.com/support/installing-jetpack/).
== Frequently Asked Questions ==
@@ -62,7 +62,7 @@ Once you've installed Jetpack your stats will be available via "Site Stats" whic
= How do I contribute to Jetpack? =
-There are opportunities for developers at all levels to contribute. [Learn more about contributing to Jetpack](https://jetpack.me/contribute) or consider [joining our beta program](https://jetpack.me/beta).
+There are opportunities for developers at all levels to contribute. [Learn more about contributing to Jetpack](https://jetpack.com/contribute) or consider [joining our beta program](https://jetpack.com/beta).
== Screenshots ==
@@ -75,6 +75,105 @@ There are opportunities for developers at all levels to contribute. [Learn more
== Changelog ==
+= 3.9.6 =
+Release date: March 31st, 2016
+
+Bug fix: Shortcodes: fixed incorrect Vimeo embed logic.
+
+= 3.9.5 =
+Release date: March 31st, 2016
+
+This release features several WordPress 4.5 compatibility changes that make several Jetpack features work properly in the Customizer view. Big thanks to @westonruter for contributing the code!
+
+Other enhancements and bug fixes:
+
+* Contact Form: no longer calling the datepicker method if it's not available.
+* SSO: settings checkboxes now honor filters and constants that restrict certain sign-in modes.
+* Shortcodes: fixed a problem with Gist fetching.
+* Shortcodes: fixed invalid HTML5 markup in YouTube embed code.
+* Shortcodes: made the Vimeo links work properly in case of multiple mixed uses in one post.
+
+= 3.9.4 =
+Release date: March 10th, 2016
+
+Bug fix: Shortcodes: Addresses an issue with embedded Vimeo content
+
+= 3.9.3 =
+Release date: Mar 9th, 2016
+Release post: http://wp.me/p1moTy-396
+
+Featured:
+
+* Site Logo now supports Custom Logo - a theme tool to be introduced in WordPress 4.5.
+
+Enhancements:
+
+* Carousel: Made the full size image URL use a Photon URL if enabled.
+* Comments: Removed an unnecessary redirect by always connecting via HTTPS.
+* General: Added new actions that fire before automatic updates.
+* Infinite Scroll: Introduced a later filter for settings.
+* Infinite Scroll: Removed code that is now redundant due to WordPress Core.
+* Markdown: Removed deprecated markup from the output.
+* Publicize: Improved handling of featured images in posts.
+* Shortcodes: Added houzz.com support.
+* Sitemaps: Added a language attribute to the news sitemap.
+* Sitemaps: Improved the image retrieval mechanism for posts.
+* Widgets: Added new filters in the Top Posts Widget code.
+* Widgets: Cleaned up the CSS for the Subscription widget.
+
+Bug Fixes:
+
+* Comments: No longer reloading the page on clicking the reply button.
+* Contact Forms: Fixed a fatal error on missing metadata.
+* Contact Forms: Fixed message formatting for plaintext email clients.
+* Shortcodes: Fixed dimensions of Vimeo embeds in certain cases.
+* Shortcodes: Fixed warnings and allowed shorter style Vimeo embeds.
+* Shortcodes: Removed alignment markup from feeds for YouTube embeds.
+* Sitemaps: Made URLs display properly according to the permalink structure.
+* Stats: Fixed non-XHTML-valid markup.
+* Widgets: No longer showing errors when adding new instances of the Display Post Widget.
+
+= 3.9.2 =
+Release date: Feb 25th, 2016
+Release post: http://wp.me/p1moTy-2Ei
+
+Maintenance and Security Release
+
+Featured:
+
+* Beautiful Math: fix XSS vulnerability when parsing LaTeX markup within HTML elements.
+* Contact Form: do not save private site credentials in post meta. Thanks to @visualdatasolutions.
+
+Enhancements:
+
+* Contact Info: Added two hooks for adding arbitrary information to the widget.
+* Development: Added new possibilities for REST API debugging.
+* Embeds: Added Codepen embeds support.
+* Embeds: Added Sketchfab embeds support.
+* I18n: Added support for translation packages for the Finnish language.
+* Markdown: Added a filter to enable skipping processing of developer supplied patterns.
+* Related Posts: Added a filter to change heading markup.
+* Staging: Added a constant to force staging mode.
+* Staging: Added a notice to make staging mode more obvious.
+* Top Posts Widget: Added a new `[jetpack_top_posts_widget]` shortcode.
+
+Bug Fixes:
+
+* Custom Post Types: Nova: Fixed a JavaScript bug on adding multiple items.
+* Embeds: Allowing embeds from Instagram with a www in an URL.
+* General: Fixed untranslated module names on the Settings screen.
+* General: Improved module descriptions and fixed misleading or broken links in descriptions.
+* General: No more notices on module deprecation on older installations.
+* General: Only showing one prompt to enable Photon when uploading several new images.
+* Multisite: Fixed a problem with site lists for older WordPress installations.
+* OpenGraph: Fixed a bug to properly fallback to a WordPress Site Icon image.
+* Photon: Improve performance for images over a secure connection.
+* Photon: No longer including links from data attributes.
+* Publicize: Fixed problems for en_AU and en_CA locales with Facebook.
+* Related Posts: Fixed a notice on certain requests.
+* Site Logo: It's no longer possible to choose a non-image.
+* Widget Visibility: No longer confusing page IDs and titles in certain cases.
+
= 3.9.1 =
Release date: Jan 21st, 2016
diff --git a/plugins/jetpack/to-test.md b/plugins/jetpack/to-test.md
deleted file mode 100644
index 3763c693..00000000
--- a/plugins/jetpack/to-test.md
+++ /dev/null
@@ -1,287 +0,0 @@
-## 3.9
-
-### Sitemaps
-
-That's a brand new module! Once you activate it, 2 sitemaps will be generated and will be available at `/sitemap.xml` and `news-sitemap.xml`. To test:
-
-- Make sure the sitemap isn't generated if your site is private.
-- Make sure the module isn't automatically enabled if you already use a Sitemap plugin.
-- Make sure the sitemaps work regardless of your permalink structure.
-- Check the posts included in both sitemaps.
-
-### Carousel
-
-- Revert change that broke direct link to carousel image. To test, open the Carousel view, copy the URL from your browser bar, and reload that URL in a different tab. Carousel view should open for that specific image.
-- Full Carousel images are now served by Photon again.
-
-### Contact Form
-
-- Fix notices when creating feedback entries without a contact form. Steps to reproduce the issue are available [here](https://github.com/Automattic/jetpack/issues/3115).
-- CSV export option now handles multiple options questions in forms. To test, create a contact form with multiple questions, and questions with multiple options. See if you can then export submitted forms via the Feedback menu.
-- New filter: `jetpack_required_field_text` allows you to change the "Required" text. To test, use a code snippet like this one:
-```php
-function jeherve_custom_required() {
- return 'this is important';
-}
-add_filter( 'jetpack_required_field_text', 'jeherve_custom_required' );
-```
-
-### General
-
-We've added New Just In Time messages to promote WordPress.com new interface. To test:
-- Message appearing in Media > Add New when Photon is inactive.
-- Message appearing in Posts > Add New and Pages > Add New.
-- Message appearing in Posts > Add New, in the image insert modal, when Photon is disabled, before you publish a post.
-- Message about Stats, appearing in Posts > Add New and Pages > Add New, after publishing a post.
-- Message appearing in Dashboard > Updates, if auto updates are allowed on the site and if Manage is disabled.
-- Message appearing in the Plugins menu, after activating one or more plugins, if auto updates are allowed on the site, if the plugin is in the W.org repo, and if the plugin is already set to autoupdate on WordPress.com via Manage.
-
-For each scenario, check the link in the message, to make sure it's correct. Make sure you can activate modules from the message when the option is available. Also check that when dismissing one message, all the others disappear as well.
-
-- Multisite: hide archived sites in Network > Jetpack > Sites. To test, make sure no archived sites are displayed on this page.
-
-
-### Likes
-
-- Add conditional for `is_comments_popup` as 4.5 deprecates it. Test it by enabling Likes on a site running WordPress trunk and `WP_DEBUG` set to true.
-
-### Manage
-
-- New endpoints for user management. To test, go to [wordpress.com/people/](https://wordpress.com/people/) and try to search, edit, and delete users on your site. It's worth testing things on both Multisite and single installations.
-- Update plugin installation process. To test, ensure you can use WordPress.com to install plugins to your site.
-
-### Photon
-
-We've made several changes to improve compatibility with WP 4.4. All images should now be parsed by Photon, and should not generate any notices when `WP_DEBUG` is set. To test:
-
-- set your theme to call `the_post_thumbnail( array( 800, 800 ) )` using an array for the size that happens to be larger than the original image (say 500 x 500 for this example). Make sure the image is still displayed properly.
-- Enable Twenty Sixteen and make sure all images use Photon, and all `scrset` image values are correct (you can check this with your browser inspector).
-- Create a new image size in your theme by adding the following to your theme's functions.php: `add_image_size( 'jetpack-test-featured-thumbnail', 405, 405, true );`. Then output the image in your theme, with `the_post_thumbnail( 'jetpack-test-featured-thumbnail' );`. Create a new post, and use an old image from your Media Library as Featured Image. In your post, the returned image should fit within 400x400, using Photon, with the current values on both the `img` tag and the resize string in the Photon URL.
-- You can also test several variations with different slider plugins activated.
-
-- Photon is now enabled by default on sites using HTTPS. In the past, you had to add `add_filter( 'jetpack_photon_reject_https', '__return_false' );` for images served with HTTPS to be cached by Photon. You don't need that snippet anymore.
-
-### Publicize
-
-- Show Publicize options only to roles that can publish posts. To test, log in with a subscriber or contributor and make sure Publicize options are not displayed in Posts > Add New.
-- Fix notices appearing on Publicize settings screen when bbPress or BuddyPress are installed.
-
-### Related Posts
-
-- Fix incorrect condition for Related Posts exclusions. To test, make sure that when clicking on a Related Post, no `&relatedposts_exclude=undefined` is added to the URL of the related post.
-
-### Sharing
-
-- New Sharing button: Skype. To test, go to Settings > Sharing and enable the new Skype service. Try switching between button styles to make sure the button is displayed properly regardless of the button style, and try using the button.
-- The new `jetpack_open_graph_fallback_description` filter allows you to change the default Open Graph description, "Visit the post for more".
-
-### Shortcodes
-
-- Bandcamp: Switch to `esc_attr` instead of `int` for IDs, to allow for large track IDs. Try using very large track IDs like the ones from [this artist](https://renaudgabrielpion.bandcamp.com/album/voices-in-a-room).
-- Bandcamp: add support for `tracks` and `esig` attributes. The 2 attributes are only available to approved artists, but general testing of the [Bandcamp shortcode](https://en.support.wordpress.com/audio/bandcamp/) should help.
-- Medium: Improve URL path type matching. The list of possible URL formats is available [here](https://github.com/Automattic/jetpack/pull/3063).
-- Slideshow: better detection of older versions of IE. Try viewing a post with a slideshow in IE8, IE9, and IE11.
-- Add new Wistia oEmbed. To test, try inserting Wistia URLs into your posts. An example would be `http://automattic-2.wistia.com/medias/mqf9c9147u?embedType=iframe&videoWidth=320`
-
-### Spellchecking
-
-- Exclude `pre` tags from spellchecking. To test, add some code inside `pre` tags, including text that would trigger the spellchecker. Once you've done so, click on the "proofread" button and make sure content inside the `pre` tags is ignored.
-- Do not replace emoji by `img` tags when using the spellchecker. Testing instructions can be found [here]
-(https://github.com/Automattic/jetpack/issues/3220).
-
-### Stats
-
-- Fix Stats Dashboard widget when resizing stats chart in the browser. To test, check the Stats dashboard widget, and resize your browser. You can test in as many browsers as possible.
-
-### Theme Tools
-
-- Custom Content Types: do not register Nova CPT if it's already registered.
-- Infinite Scroll: disable in the Customizer when previewing a non-active theme.
-- Infinite Scroll: the new `infinite_scroll_got_infinity` filter allows you to filter the parameter used to check if Infinite Scroll has been triggered.
-- Responsive Videos: center videos when it's wrapped in a centered paragraph. To test, enable a theme using Responsive Videos, like Sapor, and create a new post with a YouTube video, wrapped in a centered paragraph. Make sure the video is centered on all devices.
-- Responsive Videos: fix [warning](https://github.com/Automattic/jetpack/issues/3048) appearing when `WP_DEBUG` was set to `true`. To test, enable `WP_DEBUG` on your site, switch to a theme that supports Responsive Videos like Sapor, and view posts including videos.
-- Social Menu: this new theme tool adds a "Social Menu" menu location if your theme includes `add_theme_support( 'jetpack-social-menu' );`. The menu then uses Genericons to display Social Links, much like in Twenty Sixteen.
-
-
-### Widgets
-
-- Facebook Like Box: add "Width" option.
-- Facebook Like Box: fallback to English US when a locale isn't supported by Facebook (e.g. Australian).
-- Top Posts: add size parameters to `img` tag to avoid warnings on performance tests. To test, make sure the widget is still displayed properly on your site, when using one of the Top Posts widget layouts including images.
-- Top Posts: layout fixes for Twenty Sixteen. To test, add a Top Posts widget using images to a site running Twenty Sixteen, and make sure the layout looks as shown [here](https://github.com/Automattic/jetpack/pull/3239).
-- Image Widget: refactor to remove `extract()`. To test, try editing existing image widget options, and create new image widgets. All options must be saved properly, and applied on the site's frontend.
-- Display Posts Widget: speed and stability improvements. To test, check if your existing Display Posts widgets still display posts from third-party Jetpack or WordPress.com sites, and try creating new widgets and see if everything works as expected, regardless of the widget settings.
-
-------------------
-
-# Past Releases
-
-## 3.8.1
-
-### WordPress 4.4 Compatibility
-
-If you're running a WordPress 4.4 beta, or trunk, please test out the following:
-
-- Photon + Responsive images:
-Make sure your images are playing nicely with Responsive Images when Photon is active. Look for image distortion, strange cropping, or Photon/srcset simply not working.
-
-- Twenty Sixteen theme:
-Activate the 2016 theme and look for any strangeness with Jetpack features. Pay special attention to these features:
- - Gallery Widget
- - Sharing & Likes buttons should not be shown on custom excerpts
- - Infinite scroll
-
-### Other testing
-
-- Subscriptions filter:
-Add `add_filter( 'jetpack_allow_per_post_subscriptions', '__return_true' );` to your theme's functions.php. You should see this when writing up a new post: https://cloudup.com/czXrr6ni5GX
-
-- General styling with Jetpack admin messages
-- We've made some changes to the heading structures with our admin notices to improve accessibility. Toggle some modules, connect/disconnect your site, trigger some errors. Let us know if anything looks off in regards to the message styles.
-
-- Comments filter: filter to allow disabling Jetpack comments per post type.
-This filter, when applied, should revert WordPress to its comment behaviour as it would have been without Jetpack.
-`add_filter( 'jetpack_comment_form_enabled_for_page', '__return_false');`
-
-- Carousel: don't scroll to top when closed.
-Open a Carousel gallery. Browse around and close out of it. Scroll position when opened should not change.
-
-- Single Sign On: redirect correctly.
-Step 1. Add `add_filter( 'jetpack_sso_bypass_login_forward_wpcom', '__return_true' );` to a core functionality plugin and verify that visiting your wp-admin skips the local login form.
-Step 2. Logged out of both your local site and WP.com, try to visit your site's tools.php directly (e.g. example.com/wp-admin/tools.php )
-Expected result: Login successful, dumped to /wp-admin/tools.php
-
-## 3.8
-
-### New Features/Enhancements
-
-- Google+ Sidebar Widget
-New widget!
-To test: Add widget in both wp-admin and Customizer. Make sure there are no errors when adding either a person, page, or community badge.
-
-Example Google+ urls to use:
-
-https://plus.google.com/communities/101504763068635549461?hl=en (community)
-https://plus.google.com/+WordPress/posts?hl=en (page)
-https://plus.google.com/u/0/106016569422981142354/posts (profile)
-
-- Social Media Icons: Add Google+
-Adding Google+ to the Social Media Icons widget.
-To test: set up a Google+ account in the widget using a Google+ username/user ID. Typically it's the value found in your Google+ page URL: https://plus.google.com/[USER_ID]/posts. Try with both the numerical value or a custom Google+ name if your URL uses +FirstName in the [USER_ID] instead of a numerical value.
-
-- Sharing: Remove Twitter share counts.
-Due to Twitter removing support for third party sharing counts, we needed to remove the option from our Twitter sharing buttons.
-To test: Enable the Twitter sharing button (Icon, Icon + Text, or Text only) on a post that has Twitter share counts - you can verify existing counts by using the Official button - and verify that the share counts have been removed.
-
-- Contact Form: Check for valid email address.
-We've added a check to see if the "To" address in the Contact Form meets the Official Standard: RFC 5322 -- http://www.regular-expressions.info/email.html.
-To test: Set up a contact form "To" address using an invalid email address. For example: "thisemail@is.invalid" or similar. You should see an alert message notifying you of the invalid email address.
-
-- Contact Form: Checkbox with multiple items
-In previous versions of Jetpack, if you wanted multiple checkboxes on your Contact Form, you had to enter one per field. Now, you can have multiple checkbox options in a single form field.
-To test: Create a contact form using the new "Checkbox with Multiple Items" field type and ensure that they work properly in contact form submissions.
-
-- Shortcodes: Add Twitch.tv shortcode embeds
-Adding the Twitch.tv shortcode from WordPress.com.
-To test: Add shortcode to a post or page. The most basic form of the shortcode requires only the URL parameter, and looks like this: [twitchtv url="http://www.twitch.tv/paperbat/b/323486192"]
-
-You can also add additional parameters to customize the appearance:
-
-height – defaults to 378 pixels
-width – defaults to 620 pixels
-autoplay – defaults to false
-
-A more advanced shortcode would look something like: [twitchtv url="http://www.twitch.tv/paperbat" width="400" height="244" autoplay="true"]
-
-- Notices
-If you don't have Manage enabled, head on over to your updates page (update-core.php) -- you may see a message from us.
-
-### Fixes
-
-- Subscriptions: better error messaging for blocked emails.
-Previously, if you had blocked emails from WordPress.com, then tried to subscribe to a page using Jetpack Subscriptions, you would never receive the confirmation email.
-To test: Using your WordPress.com account, log into subscribe.wordpress.com, go to the Settings tab, and check the box to block all emails from WordPress.com and save. Leaving that window open, open a new tab/window to your test site (where you are not already subscribed to your site) and attempt to sign up using the same email address. Verify that the error message says "The email address has opted out of subscription emails." and includes a link to where you can fix the issue Then, refresh the subscribe.wordpress.com page and check to see if your subscription request is listed under the "Pending" tab. Don't forget to uncheck the "block emails" option under Settings when you're finished testing.
-
-- Infinite Scroll: Use theme posts_per_page variable if set.
-Previously, Jetpack ignored the posts_per_page variable set when declaring theme support for Infinite Scroll when the site was set to load additional posts on click. Now, if this variable is set in the theme, Jetpack will use the theme's variable when loading posts via Infinite Scroll.
-To test: Using a theme that uses a posts_per_page that is not 7 (the default for Infinite Scroll), test to see whether or not the custom posts_per_page number is used when Infinite Scroll is enabled.
-
-### New Filters/Hooks
-
-- Sharing: Filter whether to display the Sharing Meta Box or not.
-https://github.com/Automattic/jetpack/pull/2837/files
-
-- Related Posts: Filter the post css classes added on HTML markup.
-https://github.com/Automattic/jetpack/pull/2811
-
-- Social Media Icon Widget: Filter the icons
-See example in https://github.com/Automattic/jetpack/pull/2741
-
-- Sharing: Filter the App ID used in the official Facebook Share button.
-Example in https://github.com/Automattic/jetpack/pull/2590
-
-
-## 3.7
-
-### New Features/Enhancements
-
-- New admin page UI!
-You'll notice that the main Jetpack admin page has changed.
-To test: Please follow these instructions https://github.com/Automattic/jetpack/pull/2549, and anything else you can think of.
-
-- Staging Site Support!
-Clone your site's database to a new site, e.g. using a host's staging site feature. Previously, since both databases had the needed info to communicate to WordPress.com's record for the original site, there would be lots of things broken/weird. Now, when opening on a site where WP.com and your site's siteurl/homeurl settings differ, we'll prompt you to ask what's going on.
-To test: A brand new site cloned from an existing one: Confirm that the "Reset Connection" option properly connects the new site (e.g. the stats aren't shared with another site) and the original site remains operational.
-To test: On a staging site, any changes made (e.g. creating new posts) are not reflected on the WP.com record. Example way to check: Visit the wordpress.com My Sites for the original test site and confirm any posts made only on the staging site aren't listed as a post there.
-
-- Subscriptions per-post opt out!
-When using the Subscriptions module, you can now opt-out individual posts from being sent out to subscribers.
-To test: Toggle the checkmark in the publish meta box on an unpublished post.
-
-- Switched notifications to API v1.1
-To test: Make sure that new notification overlay is properly displayed both in the admin area and in the front-end area.
-
-- Reddit "Official" Sharing Button
-To test: Confirm that, when using the official Reddit button, the Reddit posting page opens in a new window/tab, not the original.
-
-- Publicize Custom Message: Previously, once a custom Publicize message was set, it could not be completely removed.
-To test: Set a custom message when writing a new post, save a draft, then come back and remove the message to restore the default settings.
-
-- Open Graph tags with smart punctuation
-To test: Set the post title or description (e.g. excerpt) to use smart punctuation—curly quotes, angled apostrophes, etc, and confirm sharing on various services that use OG tags works as expected (Facebook, Twitter, Pinterest, etc).
-
-- New VideoPress player
-Updates the Jetpack VideoPress player to HTML 5 when using the [wpvideo] shortcode and registers VideoPress as an oEmbed provider.
-To test: Add an VideoPress permalink into the editor to test oEmbed.
-To test: Play videos via oEmbed and the wpvideo shortcode on a number of browser/OS combinations.
-
-- PollDaddy shortcode
-The PollDaddy shortcode had been updated and enhanced quite a bit on WP.com. 3.7 brings those enhancements downstream.
-To test: Add a PD poll via the Shortcode. Confirm it loads and no JS errors (JS changed to async)
-To test: Add a PD poll via oEmbed (dropping in the poll.fm link). New to Jetpack.
-To test: Add a PD poll via Shortcode on a HTTPS site. Expected: Works with no mixed content issues.
-
-- Widget Visibility Enhancement!
-A new rule has been added to show/hide widgets based on Parent Page. Very helpful for all of your hierarchical page-based site needs!
-To test: Set widget visibility option for a parent page, confirm works as expected on a child of that page.
-
-- bbPress Love!
-Previously, Jetpack didn't insert Sharing buttons on bbPress CPTs even if they were set to be used via Settings->Sharing
-To test: Enable Sharing on bbPress CPTs and confirm they're added.
-
-### Fixes
-
-- No longer forcing http:// on API urls
-To test: If you have a site that uses HTTPS, please test to ensure that social sharing, shortlinks, and managing your site through WordPress.com all work as expected
-
-- Edit Posts List Table: Fixed the styling associated with the Likes column resulting from 4.3 changes.
-To test: Confirm no visual oddities while on either WP 4.2.x or 4.3.x
-
-- Facebook Embeds: In some cases, the script loaded early resulting in no embed
-To test: Try embedding a FB post using the Facebook shortcode.
-
-- Sharing/Likes: Front Page settings
-To test: Set a page as your site's front page and confirm the "Front Page" sharing option is respected.
-
-- Open Graph Tags
-DailyMotion videos are treated the same as YouTube/Vimeo. If the logic suggests a video screencap should be used, it'll now include DailyMotion.
diff --git a/plugins/jetpack/views/admin/admin-page.php b/plugins/jetpack/views/admin/admin-page.php
index 3e092178..cc4edeec 100644
--- a/plugins/jetpack/views/admin/admin-page.php
+++ b/plugins/jetpack/views/admin/admin-page.php
@@ -71,7 +71,7 @@
<h3 title="<?php esc_attr_e( 'Performance &amp; Security', 'jetpack' ); ?>">
<?php /* Leave out until better link is available
- <a class="dashicons dashicons-editor-help" href="http://jetpack.me/features/" title="<?php esc_attr_e( 'Learn more about Jetpack\'s Performance &amp; Security tools', 'jetpack' ); ?>" target="_blank"></a>
+ <a class="dashicons dashicons-editor-help" href="http://jetpack.com/features/" title="<?php esc_attr_e( 'Learn more about Jetpack\'s Performance &amp; Security tools', 'jetpack' ); ?>" target="_blank"></a>
*/ ?>
<?php _e( 'Performance &amp; Security', 'jetpack' ); ?>
</h3>
@@ -89,7 +89,7 @@
<h3 title="<?php esc_attr_e( 'Traffic Growth', 'jetpack' ); ?>">
<?php /* Leave out until better link is available
- <a class="dashicons dashicons-editor-help" href="http://jetpack.me/features/" title="<?php esc_attr_e( 'Learn more about Jetpack\'s Traffic Boosting tools', 'jetpack' ); ?>" target="_blank"></a>
+ <a class="dashicons dashicons-editor-help" href="http://jetpack.com/features/" title="<?php esc_attr_e( 'Learn more about Jetpack\'s Traffic Boosting tools', 'jetpack' ); ?>" target="_blank"></a>
*/ ?>
<?php _e( 'Traffic Growth', 'jetpack' ); ?>
</h3>
@@ -106,7 +106,7 @@
<div class="wpcom j-col j-lrg-4 main-col">
<div class="nux-in">
- <h3 title="<?php esc_attr_e( 'WordPress.com Tools', 'jetpack' ); ?>"><a class="dashicons dashicons-editor-help" href="http://jetpack.me/support/site-management/" title="<?php esc_attr_e( 'Learn more about WordPress.com\'s free tools', 'jetpack' ); ?>" target="_blank"></a><?php _e( 'WordPress.com Tools', 'jetpack' ); ?></h3>
+ <h3 title="<?php esc_attr_e( 'WordPress.com Tools', 'jetpack' ); ?>"><a class="dashicons dashicons-editor-help" href="http://jetpack.com/support/site-management/" title="<?php esc_attr_e( 'Learn more about WordPress.com\'s free tools', 'jetpack' ); ?>" target="_blank"></a><?php _e( 'WordPress.com Tools', 'jetpack' ); ?></h3>
<div class="j-row">
<div class="j-col j-lrg-12 j-md-12 j-sm-12">
@@ -203,7 +203,7 @@
$default_he_img = plugins_url( 'images/jetpack-icon.jpg', JETPACK__PLUGIN_FILE );
printf(
- '<a href="http://jetpack.me/support/" target="_blank"><img src="https://secure.gravatar.com/avatar/%1$s?s=75&d=%2$s" alt="Jetpack Happiness Engineer" /></a>',
+ '<a href="http://jetpack.com/support/" target="_blank"><img src="https://secure.gravatar.com/avatar/%1$s?s=75&d=%2$s" alt="Jetpack Happiness Engineer" /></a>',
$jetpack_hes[ array_rand( $jetpack_hes ) ],
urlencode( $default_he_img )
);
@@ -211,9 +211,9 @@
<p><?php _e( 'Help and Support', 'jetpack' ); ?></p>
<p><?php _e( 'We offer free, full support to all Jetpack users. Our support team is always around to help you.', 'jetpack' ); ?></p>
<ul class="actions">
- <li><a href="http://jetpack.me/support/" target="_blank" class="button"><?php esc_html_e( 'Visit support site', 'jetpack' ); ?></a></li>
+ <li><a href="http://jetpack.com/support/" target="_blank" class="button"><?php esc_html_e( 'Visit support site', 'jetpack' ); ?></a></li>
<li><a href="https://wordpress.org/support/plugin/jetpack" target="_blank"><?php esc_html_e( 'Browse forums', 'jetpack' ); ?></a></li>
- <li><a href="http://jetpack.me/contact-support/" target="_blank"><?php esc_html_e( 'Contact us directly', 'jetpack' ); ?></a></li>
+ <li><a href="http://jetpack.com/contact-support/" target="_blank"><?php esc_html_e( 'Contact us directly', 'jetpack' ); ?></a></li>
</ul>
</div>
<div class="j-col j-lrg-4 j-md-4 j-sm-12">
@@ -221,7 +221,7 @@
<p><?php esc_html_e( 'Business site? Safeguard it with real-time backups, security scans, and anti-spam.', 'jetpack' ); ?></p>
<p>&nbsp;</p>
<?php $normalized_site_url = Jetpack::build_raw_urls( get_home_url() ); ?>
- <div class="actions"><a href="<?php echo esc_url( 'https://wordpress.com/plans/' . $normalized_site_url ); ?>" target="_blank" class="button"><?php esc_html_e( 'Compare Options', 'jetpack' ); ?></a></div>
+ <div class="actions jptracks" data-jptracks-name="nudge_click" data-jptracks-prop="nux-addons"><a href="<?php echo esc_url( 'https://wordpress.com/plans/' . $normalized_site_url ); ?>" target="_blank" class="button"><?php esc_html_e( 'Compare Options', 'jetpack' ); ?></a></div>
</div>
</div><?php // nux-foot ?>
@@ -235,9 +235,9 @@
<div class="connect-btn j-col j-sm-12 j-md-12">
<p><?php echo wp_kses( __( 'Connecting Jetpack will show you <strong>stats</strong> about your traffic, <strong>protect</strong> you from brute force attacks, <strong>speed up</strong> your images and photos, and enable other <strong>traffic and security</strong> features.', 'jetpack' ), 'jetpack' ) ?></p>
<?php if ( ! $data['is_connected'] && current_user_can( 'jetpack_connect' ) ) : ?>
- <a href="<?php echo Jetpack::init()->build_connect_url() ?>" class="download-jetpack"><?php esc_html_e( 'Connect Jetpack', 'jetpack' ); ?></a>
+ <a href="<?php echo Jetpack::init()->build_connect_url( false, false, 'landing-page-top' ) ?>" class="download-jetpack"><?php esc_html_e( 'Connect Jetpack', 'jetpack' ); ?></a>
<?php elseif ( $data['is_connected'] && ! $data['is_user_connected'] && current_user_can( 'jetpack_connect_user' ) ) : ?>
- <a href="<?php echo Jetpack::init()->build_connect_url() ?>" class="download-jetpack"><?php esc_html_e( 'Connect your account', 'jetpack' ); ?></a>
+ <a href="<?php echo Jetpack::init()->build_connect_url( false, false, 'landing-page-top' ) ?>" class="download-jetpack"><?php esc_html_e( 'Connect your account', 'jetpack' ); ?></a>
<?php endif; ?>
</div>
</div>
diff --git a/plugins/jetpack/views/admin/landing-page-templates.php b/plugins/jetpack/views/admin/landing-page-templates.php
index b979c798..acb1c6a7 100644
--- a/plugins/jetpack/views/admin/landing-page-templates.php
+++ b/plugins/jetpack/views/admin/landing-page-templates.php
@@ -83,9 +83,9 @@
<# if ( 'vaultpress' == data.module ) { #>
<?php if ( is_plugin_active( 'vaultpress/vaultpress.php' ) ) : ?>
- <a href="<?php echo esc_url( $vp_link ); ?>" class="dashicons dashicons-external" title="<?php esc_attr_e( 'Configure', 'jetpack' ); ?>" target="<?php echo $target; ?>"></a>
+ <a href="<?php echo esc_url( $vp_link ); ?>" class="dashicons dashicons-external jptracks" data-jptracks-name="nudge_click" data-jptracks-prop="nux-vaultpress-configure" title="<?php esc_attr_e( 'Configure', 'jetpack' ); ?>" target="<?php echo $target; ?>"></a>
<?php else : ?>
- <a href="<?php echo esc_url( $vp_link ); ?>" class="lmore" title="<?php esc_attr_e( 'Learn More', 'jetpack' ); ?>" target="<?php echo $target; ?>"><?php _e( 'Learn More', 'jetpack' ); ?></a>
+ <a href="<?php echo esc_url( $vp_link ); ?>" class="lmore jptracks" data-jptracks-name="nudge_click" data-jptracks-prop="nux-vaultpress-learnmore" title="<?php esc_attr_e( 'Learn More', 'jetpack' ); ?>" target="<?php echo $target; ?>"><?php _e( 'Learn More', 'jetpack' ); ?></a>
<?php endif; ?>
<# } else { #>
<span class="form-toggle__switch"></span>
diff --git a/plugins/jetpack/views/admin/my-jetpack-page.php b/plugins/jetpack/views/admin/my-jetpack-page.php
index aa4a26e0..9fac14b4 100644
--- a/plugins/jetpack/views/admin/my-jetpack-page.php
+++ b/plugins/jetpack/views/admin/my-jetpack-page.php
@@ -95,7 +95,7 @@
<?php if ( current_user_can( 'jetpack_disconnect' ) ) : ?>
<div class="j-row my-jetpack-actions">
<div class="j-col j-lrg-6 j-md-6 j-sm-12">
- <h4><?php _e( 'Jetpack Primary User', 'jetpack' ); ?><a title="<?php esc_attr_e( 'Learn about what being the Primary User means.', 'jetpack' ); ?>" class="dashicons dashicons-editor-help what-is-primary" href="https://jetpack.me/support/primary-user" target="_blank"></a></h4>
+ <h4><?php _e( 'Jetpack Primary User', 'jetpack' ); ?><a title="<?php esc_attr_e( 'Learn about what being the Primary User means.', 'jetpack' ); ?>" class="dashicons dashicons-editor-help what-is-primary" href="https://jetpack.com/support/primary-user" target="_blank"></a></h4>
<?php
// Only show dropdown if there are other admins
$all_users = count_users();
@@ -132,7 +132,14 @@
</form>
<?php else : ?>
<p>{{{ data.masterUser.masterUser.data.user_login }}} <?php echo $primary_text; ?></p>
- <p><em><?php _e( 'Create additional admins to change primary user.', 'jetpack' ); ?></em></p>
+ <p><em><?php
+ echo wp_kses(
+ sprintf(
+ __( 'Create <a href="%s" title="Go to Users → All Users">additional Administrators</a> to change primary user.', 'jetpack' ),
+ admin_url( 'users.php' ) ),
+ array( 'a' => array( 'href' => true, 'title' => true ) )
+ );
+ ?></p>
<?php endif; ?>
</div>
<div class="j-col j-lrg-6 j-md-6 j-sm-12">
@@ -149,17 +156,17 @@
<h2><?php _e( 'Disconnecting Jetpack', 'jetpack' ); ?></h2>
<p><?php _e( 'Before you completely disconnect Jetpack is there anything we can do to help?', 'jetpack' ); ?></p>
<a class="button" id="confirm-disconnect" title="<?php esc_attr_e( 'Disconnect Jetpack', 'jetpack' ); ?>" href="<?php echo wp_nonce_url( Jetpack::admin_url( 'action=disconnect' ), 'jetpack-disconnect' ); ?>"><?php _e( 'Confirm Disconnect', 'jetpack' ); ?></a>
- <a class="button primary" id="support-no-disconnect" target="_blank" title="<?php esc_attr_e( 'Jetpack Support', 'jetpack' ); ?>" href="http://jetpack.me/contact-support/"><?php esc_html_e( 'I Need Support', 'jetpack' ); ?></a>
+ <a class="button primary" id="support-no-disconnect" target="_blank" title="<?php esc_attr_e( 'Jetpack Support', 'jetpack' ); ?>" href="http://jetpack.com/contact-support/"><?php esc_html_e( 'I Need Support', 'jetpack' ); ?></a>
<?php else : ?>
<h2><?php _e( 'Can not disconnect Jetpack', 'jetpack' ); ?></h2>
<p><?php
printf(
__( 'Disconnecting is not possible while in staging mode.<br /><a href="%s" target="_blank">Learn more about how staging sites work</a>.', 'jetpack' ),
- 'https://jetpack.me/support/why-cant-i-disconnect-my-site/'
+ 'https://jetpack.com/support/why-cant-i-disconnect-my-site/'
);
?></p>
<input type="button" class="button" disabled="disabled" id="confirm-disconnect" value="<?php _e( 'Confirm Disconnect', 'jetpack' ); ?>">
- <a class="button primary" id="support-no-disconnect" target="_blank" title="<?php esc_attr_e( 'Jetpack Support', 'jetpack' ); ?>" href="https://jetpack.me/support/why-cant-i-disconnect-my-site/"><?php esc_html_e( 'I Need Support', 'jetpack' ); ?></a>
+ <a class="button primary" id="support-no-disconnect" target="_blank" title="<?php esc_attr_e( 'Jetpack Support', 'jetpack' ); ?>" href="https://jetpack.com/support/why-cant-i-disconnect-my-site/"><?php esc_html_e( 'I Need Support', 'jetpack' ); ?></a>
<?php endif; ?>
<a class="cancel-disconnect" id="cancel-disconnect" target="_blank" title="<?php esc_attr_e( 'cancel', 'jetpack' ); ?>" href="#"><?php esc_html_e( 'cancel', 'jetpack' ); ?></a>
diff --git a/plugins/jetpack/views/admin/network-admin-footer.php b/plugins/jetpack/views/admin/network-admin-footer.php
index d996fdf7..3244b6b6 100644
--- a/plugins/jetpack/views/admin/network-admin-footer.php
+++ b/plugins/jetpack/views/admin/network-admin-footer.php
@@ -6,7 +6,7 @@
<?php _e( 'Answer a short survey to let us know how we&#8217;re doing and what to add in the future.', 'jetpack' ); ?>
</div>
<div class="jp-survey-button-container">
- <p class="submit"><?php printf( '<a id="jp-survey-button" class="button-primary" target="_blank" href="%1$s">%2$s</a>', 'http://jetpack.me/survey/?rel=' . JETPACK__VERSION, __( 'Take Survey', 'jetpack' ) ); ?></p>
+ <p class="submit"><?php printf( '<a id="jp-survey-button" class="button-primary" target="_blank" href="%1$s">%2$s</a>', 'http://jetpack.com/survey/?rel=' . JETPACK__VERSION, __( 'Take Survey', 'jetpack' ) ); ?></p>
</div>
</div>
</div>
@@ -14,13 +14,13 @@
<div id="jp-footer">
<p class="automattic"><?php _e( 'An <span>Automattic</span> Airline', 'jetpack' ) ?></p>
<p class="small">
- <a href="http://jetpack.me/" target="_blank">Jetpack <?php echo esc_html( JETPACK__VERSION ); ?></a> |
+ <a href="http://jetpack.com/" target="_blank">Jetpack <?php echo esc_html( JETPACK__VERSION ); ?></a> |
<a href="http://automattic.com/privacy/" target="_blank"><?php _e( 'Privacy Policy', 'jetpack' ); ?></a> |
<a href="http://wordpress.com/tos/" target="_blank"><?php _e( 'Terms of Service', 'jetpack' ); ?></a> |
<?php if ( current_user_can( 'manage_options' ) ) : ?>
<a href="<?php echo Jetpack::admin_url( array( 'page' => 'jetpack-debugger' ) ); ?>"><?php _e( 'Debug', 'jetpack' ); ?></a> |
<?php endif; ?>
- <a href="http://jetpack.me/support/" target="_blank"><?php _e( 'Support', 'jetpack' ); ?></a>
+ <a href="http://jetpack.com/support/" target="_blank"><?php _e( 'Support', 'jetpack' ); ?></a>
</p>
</div>
</div>