Jetpack by WordPress.com - Version 4.1.1

Version Description

  • Release date: July 7th, 2016

Bug Fixes:

  • SSO: Use high-resolution Gravatar images on the log-in form on Retina devices.
  • Publicize: improve reliability of Publicize when publishing new posts.
Download this release

Release Info

Developer jeherve
Plugin Icon 128x128 Jetpack by WordPress.com
Version 4.1.1
Comparing to
See all releases

Code changes from version 4.0.4 to 4.1.1

Files changed (161) hide show
  1. 3rd-party/3rd-party.php +1 -0
  2. 3rd-party/bitly.php +7 -2
  3. 3rd-party/vaultpress.php +13 -0
  4. _inc/jetpack.js +1 -1
  5. _inc/jp.js +3 -3
  6. _inc/jquery.jetpack-resize.js +1 -1
  7. _inc/lib/class.media-extractor.php +0 -1
  8. _inc/social-logos.php +14 -0
  9. _inc/social-logos/social-logos.css +257 -0
  10. _inc/social-logos/social-logos.eot +0 -0
  11. _inc/social-logos/social-logos.html +428 -0
  12. _inc/social-logos/social-logos.min.css +1 -0
  13. _inc/social-logos/social-logos.ttf +0 -0
  14. _inc/social-logos/social-logos.woff2 +0 -0
  15. changelog.txt +66 -1
  16. class.jetpack-client-server.php +70 -67
  17. class.jetpack-data.php +13 -0
  18. class.jetpack-debugger.php +47 -26
  19. class.jetpack-jitm.php +6 -17
  20. class.jetpack-signature.php +21 -2
  21. class.jetpack-tracks.php +1 -1
  22. class.jetpack.php +197 -212
  23. class.json-api-endpoints.php +40 -285
  24. class.photon.php +4 -0
  25. css/dashboard-widget.css.map +1 -1
  26. css/jetpack-admin-rtl.css +7 -4
  27. css/jetpack-admin-rtl.min.css +1 -1
  28. css/jetpack-admin.css +6 -3
  29. css/jetpack-admin.css.map +1 -1
  30. css/jetpack-admin.min.css +1 -1
  31. css/jetpack-admin.min.css.map +1 -1
  32. css/jetpack-banners.css +13 -315
  33. css/jetpack-banners.css.map +1 -1
  34. css/jetpack-banners.min.css +1 -4
  35. css/jetpack-banners.min.css.map +1 -1
  36. css/jetpack-rtl.css +1 -1
  37. css/jetpack.css +1 -1
  38. functions.global.php +10 -0
  39. functions.photon.php +15 -0
  40. jetpack.php +3 -2
  41. json-endpoints.php +160 -2
  42. json-endpoints/class.wpcom-json-api-comment-endpoint.php +8 -10
  43. json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php +11 -5
  44. json-endpoints/class.wpcom-json-api-get-site-endpoint.php +126 -94
  45. json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php +6 -19
  46. json-endpoints/class.wpcom-json-api-get-term-endpoint.php +38 -0
  47. json-endpoints/class.wpcom-json-api-list-comments-endpoint.php +9 -5
  48. json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php +1 -1
  49. json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php +0 -1
  50. json-endpoints/class.wpcom-json-api-list-post-type-taxonomies-endpoint.php +71 -0
  51. json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php +9 -2
  52. json-endpoints/class.wpcom-json-api-list-posts-endpoint.php +1 -1
  53. json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php +2 -2
  54. json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php +2 -2
  55. json-endpoints/class.wpcom-json-api-list-terms-endpoint.php +87 -0
  56. json-endpoints/class.wpcom-json-api-list-users-endpoint.php +8 -6
  57. json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php +3 -0
  58. json-endpoints/class.wpcom-json-api-post-endpoint.php +12 -10
  59. json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php +79 -447
  60. json-endpoints/class.wpcom-json-api-render-embed-endpoint.php +0 -11
  61. json-endpoints/class.wpcom-json-api-render-endpoint.php +23 -2
  62. json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php +0 -6
  63. json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php +3 -3
  64. json-endpoints/class.wpcom-json-api-site-settings-endpoint.php +37 -3
  65. json-endpoints/class.wpcom-json-api-site-user-endpoint.php +15 -8
  66. json-endpoints/class.wpcom-json-api-update-invites-endpoint.php +1 -1
  67. json-endpoints/class.wpcom-json-api-update-post-endpoint.php +9 -5
  68. json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php +76 -26
  69. json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php +86 -39
  70. json-endpoints/class.wpcom-json-api-update-term-endpoint.php +164 -0
  71. json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php +2 -0
  72. modules/after-the-deadline/atd-nonvis-editor-plugin.js +2 -1
  73. modules/after-the-deadline/atd.core.js +1 -1
  74. modules/after-the-deadline/jquery.atd.js +1 -1
  75. modules/after-the-deadline/tinymce/editor_plugin.js +1 -1
  76. modules/carousel/jetpack-carousel.js +9 -0
  77. modules/comments/comments.php +4 -8
  78. modules/contact-form/admin.php +0 -18
  79. modules/contact-form/css/menu-alter.css +0 -73
  80. modules/contact-form/grunion-contact-form.php +44 -5
  81. modules/contact-form/images/grunion-menu-2x.png +0 -0
  82. modules/contact-form/images/grunion-menu-big-2x.png +0 -0
  83. modules/contact-form/images/grunion-menu-big.png +0 -0
  84. modules/contact-form/images/grunion-menu-hover-2x.png +0 -0
  85. modules/contact-form/images/grunion-menu-hover.png +0 -0
  86. modules/contact-form/images/grunion-menu.png +0 -0
  87. modules/custom-css/csstidy/data-wp.inc.php +4 -0
  88. modules/custom-css/custom-css.php +1 -1
  89. modules/custom-post-types/js/menu-checkboxes.js +3 -1
  90. modules/custom-post-types/nova.php +29 -17
  91. modules/custom-post-types/portfolios.php +63 -0
  92. modules/custom-post-types/testimonial.php +3 -3
  93. modules/gravatar-hovercards.php +1 -1
  94. modules/infinite-scroll.php +2 -1
  95. modules/infinite-scroll/infinity.js +14 -0
  96. modules/infinite-scroll/infinity.php +3 -2
  97. modules/likes.php +2 -2
  98. modules/likes/queuehandler.js +1 -1
  99. modules/manage.php +2 -2
  100. modules/publicize/ui.php +13 -3
  101. modules/related-posts/jetpack-related-posts.php +2 -2
  102. modules/related-posts/related-posts.css +1 -0
  103. modules/sharedaddy/admin-sharing-rtl.css +54 -8
  104. modules/sharedaddy/admin-sharing-rtl.min.css +1 -1
  105. modules/sharedaddy/admin-sharing.css +54 -8
  106. modules/sharedaddy/admin-sharing.js +17 -12
  107. modules/sharedaddy/admin-sharing.min.css +1 -1
  108. modules/sharedaddy/sharing-service.php +15 -13
  109. modules/sharedaddy/sharing-sources.php +44 -1
  110. modules/sharedaddy/sharing.css +96 -30
  111. modules/sharedaddy/sharing.js +1 -1
  112. modules/sharedaddy/sharing.php +10 -4
  113. modules/shortcodes.php +7 -31
  114. modules/shortcodes/audio.php +4 -433
  115. modules/shortcodes/css/recipes-print.css +33 -0
  116. modules/shortcodes/css/recipes.css +3 -0
  117. modules/shortcodes/css/rtl/recipes-rtl.css +4 -1
  118. modules/shortcodes/js/audio-shortcode.js +0 -159
  119. modules/shortcodes/recipe.php +267 -35
  120. modules/shortcodes/twitter-timeline.php +24 -11
  121. modules/shortcodes/untappd-menu.php +65 -0
  122. modules/shortcodes/videopress.php +0 -5
  123. modules/sitemaps/sitemaps.php +27 -6
  124. modules/sso.php +597 -493
  125. modules/sso/class.jetpack-sso-helpers.php +159 -0
  126. modules/sso/jetpack-sso-login-rtl.css +179 -0
  127. modules/sso/jetpack-sso-login-rtl.min.css +1 -0
  128. modules/sso/jetpack-sso-login.css +179 -0
  129. modules/sso/jetpack-sso-login.js +47 -0
  130. modules/sso/jetpack-sso-login.min.css +1 -0
  131. modules/sso/jetpack-sso-profile.css +72 -0
  132. modules/stats.php +12 -2
  133. modules/theme-tools/compat/twentysixteen-rtl.css +1 -0
  134. modules/theme-tools/compat/twentysixteen.css +1 -0
  135. modules/tiled-gallery/tiled-gallery.php +4 -2
  136. modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php +1 -2
  137. modules/tiled-gallery/tiled-gallery/tiled-gallery.js +1 -1
  138. modules/videopress.php +4 -9
  139. modules/videopress/class.videopress-player.php +21 -9
  140. modules/videopress/css/editor.css +59 -0
  141. modules/videopress/{videopress-editor-style.css → css/videopress-editor-style.css} +0 -0
  142. modules/videopress/editor-media-view.php +213 -0
  143. modules/videopress/js/videopress-admin.js +1 -1
  144. modules/videopress/shortcode.php +42 -107
  145. modules/videopress/utility-functions.php +105 -0
  146. modules/videopress/videopress.php +109 -0
  147. modules/widgets/contact-info.php +133 -81
  148. modules/widgets/contact-info/contact-info-map.js +1 -1
  149. modules/widgets/gallery.php +1 -1
  150. modules/widgets/image-widget.php +25 -26
  151. modules/widgets/rsslinks-widget.php +1 -1
  152. modules/widgets/top-posts.php +6 -6
  153. modules/widgets/twitter-timeline-admin.js +35 -0
  154. modules/widgets/twitter-timeline.php +277 -71
  155. readme.txt +77 -3
  156. sal/class.json-api-date.php +55 -0
  157. sal/class.json-api-links.php +269 -0
  158. sal/class.json-api-metadata.php +39 -0
  159. sal/class.json-api-platform-jetpack.php +7 -5
  160. sal/class.json-api-platform.php +18 -0
  161. sal/class.json-api-post-base.php +420 -0
3rd-party/3rd-party.php CHANGED
@@ -10,3 +10,4 @@ require_once( JETPACK__PLUGIN_DIR . '3rd-party/wpml.php' );
10
  require_once( JETPACK__PLUGIN_DIR . '3rd-party/bitly.php' );
11
  require_once( JETPACK__PLUGIN_DIR . '3rd-party/bbpress.php' );
12
  require_once( JETPACK__PLUGIN_DIR . '3rd-party/woocommerce.php' );
 
10
  require_once( JETPACK__PLUGIN_DIR . '3rd-party/bitly.php' );
11
  require_once( JETPACK__PLUGIN_DIR . '3rd-party/bbpress.php' );
12
  require_once( JETPACK__PLUGIN_DIR . '3rd-party/woocommerce.php' );
13
+ require_once( JETPACK__PLUGIN_DIR . '3rd-party/vaultpress.php' );
3rd-party/bitly.php CHANGED
@@ -7,7 +7,10 @@
7
  if( class_exists( 'Bitly' ) ) {
8
 
9
  if( isset( $GLOBALS['bitly'] ) ) {
10
- remove_action( 'wp_head', array( $GLOBALS['bitly'], 'og_tags' ) );
 
 
 
11
  add_action( 'wp_head', 'jetpack_bitly_og_tag', 100 );
12
  }
13
 
@@ -21,7 +24,9 @@ if( class_exists( 'Bitly' ) ) {
21
  function jetpack_bitly_og_tag() {
22
  if( has_filter( 'wp_head', 'jetpack_og_tags') === false ) {
23
  // Add the bitly part again back if we don't have any jetpack_og_tags added
24
- $GLOBALS['bitly']->og_tags();
 
 
25
  } elseif ( isset( $GLOBALS['posts'] ) && $GLOBALS['posts'][0]->ID > 0 ) {
26
  printf( "<meta property=\"bitly:url\" content=\"%s\" /> \n", esc_attr( $GLOBALS['bitly']->get_bitly_link_for_post_id( $GLOBALS['posts'][0]->ID ) ) );
27
  }
7
  if( class_exists( 'Bitly' ) ) {
8
 
9
  if( isset( $GLOBALS['bitly'] ) ) {
10
+ if ( method_exists( $GLOBALS['bitly'], 'og_tags' ) ) {
11
+ remove_action( 'wp_head', array( $GLOBALS['bitly'], 'og_tags' ) );
12
+ }
13
+
14
  add_action( 'wp_head', 'jetpack_bitly_og_tag', 100 );
15
  }
16
 
24
  function jetpack_bitly_og_tag() {
25
  if( has_filter( 'wp_head', 'jetpack_og_tags') === false ) {
26
  // Add the bitly part again back if we don't have any jetpack_og_tags added
27
+ if ( method_exists( $GLOBALS['bitly'], 'og_tags' ) ) {
28
+ $GLOBALS['bitly']->og_tags();
29
+ }
30
  } elseif ( isset( $GLOBALS['posts'] ) && $GLOBALS['posts'][0]->ID > 0 ) {
31
  printf( "<meta property=\"bitly:url\" content=\"%s\" /> \n", esc_attr( $GLOBALS['bitly']->get_bitly_link_for_post_id( $GLOBALS['posts'][0]->ID ) ) );
32
  }
3rd-party/vaultpress.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * For backward compatibility with VaultPress 1.8.3 to play nicely with Jetpack 4.1
5
+ */
6
+ add_action( 'init', 'jetpack_vaultpress_sync_options' );
7
+ function jetpack_vaultpress_sync_options() {
8
+ if ( ! class_exists( 'VaultPress' ) ) {
9
+ return;
10
+ }
11
+ $vaultpress = VaultPress::init();
12
+ Jetpack_Sync::sync_options( __FILE__, $vaultpress->auto_register_option, $vaultpress->option_name );
13
+ }
_inc/jetpack.js CHANGED
@@ -18,7 +18,7 @@ jetpack = {
18
  didDebug: false,
19
 
20
  init: function() {
21
- jetpack.numModules = jQuery( 'div.jetpack-module' ).not( '.placeholder' ).size();
22
  jetpack.container = jQuery( 'div.module-container' );
23
 
24
  jetpack.level_modules();
18
  didDebug: false,
19
 
20
  init: function() {
21
+ jetpack.numModules = jQuery( 'div.jetpack-module' ).not( '.placeholder' ).length;
22
  jetpack.container = jQuery( 'div.module-container' );
23
 
24
  jetpack.level_modules();
_inc/jp.js CHANGED
@@ -306,8 +306,8 @@
306
  $( checkBox ).prop( 'checked', true );
307
  });
308
 
309
- $( '.jumpstart-spinner, .jstart, #jumpstart-cta, .manage-cta-inactive' ).hide();
310
- $( '.jumpstart-message, .manage-cta-active' ).toggle();
311
  $( '#jump-start-area' ).delay( 5000 ).hide( 600 );
312
 
313
  // Log Jump Start event in MC Stats
@@ -391,7 +391,7 @@
391
  // Manual element alteration for Manage, since it's not part of the template
392
  if ( 'manage' === data.thisModuleSlug ) {
393
  if ( response.activated ) {
394
- thisLabel.show().html( 'ACTIVE' );
395
  $( '#manage-row' ).addClass( 'activated' );
396
  } else {
397
  thisLabel.show().html( 'INACTIVE' );
306
  $( checkBox ).prop( 'checked', true );
307
  });
308
 
309
+ $( '.jumpstart-spinner, .jstart, #jumpstart-cta' ).hide();
310
+ $( '.jumpstart-message' ).toggle();
311
  $( '#jump-start-area' ).delay( 5000 ).hide( 600 );
312
 
313
  // Log Jump Start event in MC Stats
391
  // Manual element alteration for Manage, since it's not part of the template
392
  if ( 'manage' === data.thisModuleSlug ) {
393
  if ( response.activated ) {
394
+ $( '#manage-row .module-action' ).hide();
395
  $( '#manage-row' ).addClass( 'activated' );
396
  } else {
397
  thisLabel.show().html( 'INACTIVE' );
_inc/jquery.jetpack-resize.js CHANGED
@@ -1,4 +1,4 @@
1
- /* global Jetpack */
2
  /**
3
  * Resizeable Iframes.
4
  *
1
+ /* global Jetpack, JSON */
2
  /**
3
  * Resizeable Iframes.
4
  *
_inc/lib/class.media-extractor.php CHANGED
@@ -24,7 +24,6 @@ class Jetpack_Media_Meta_Extractor {
24
  'hulu',
25
  'ted',
26
  'wpvideo',
27
- 'audio',
28
  );
29
 
30
  /**
24
  'hulu',
25
  'ted',
26
  'wpvideo',
 
27
  );
28
 
29
  /**
_inc/social-logos.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Globally registers the 'social-logos' style and font.
4
+ *
5
+ * This ensures any theme or plugin using it is on the latest version of Social Logos, and helps to avoid conflicts.
6
+ */
7
+ add_action( 'init', 'jetpack_register_social_logos', 1 );
8
+ function jetpack_register_social_logos() {
9
+ if ( ! wp_style_is( 'social-logos', 'registered' ) ) {
10
+ $post_fix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
11
+ wp_register_style( 'social-logos', plugins_url( 'social-logos/social-logos' . $post_fix . '.css', __FILE__ ), false, '1' );
12
+ }
13
+ }
14
+
_inc/social-logos/social-logos.css ADDED
@@ -0,0 +1,257 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Generated by grunt-webfont */
2
+
3
+
4
+
5
+ @font-face {
6
+ font-family:"social-logos";
7
+ src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
8
+ font-weight:normal;
9
+ font-style:normal;
10
+ }
11
+ @font-face {
12
+ font-family:"social-logos";
13
+ src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
14
+ src:url("social-logos.eot?#iefix") format("embedded-opentype"),
15
+ url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"),
16
+ url("social-logos.ttf?51b607ee5b5cb2a0e4517176475a424c") format("truetype");
17
+ font-weight:normal;
18
+ font-style:normal;
19
+ }
20
+
21
+ .social-logo {
22
+ font-family:"social-logos";
23
+ display:inline-block;
24
+ vertical-align:middle;
25
+ line-height:1;
26
+ font-weight:normal;
27
+ font-style:normal;
28
+ speak:none;
29
+ text-decoration:inherit;
30
+ text-transform:none;
31
+ text-rendering:auto;
32
+ -webkit-font-smoothing:antialiased;
33
+ -moz-osx-font-smoothing:grayscale;
34
+ }
35
+
36
+
37
+ /* Icons */
38
+
39
+
40
+ .social-logo__amazon:before {
41
+ content:"\f600";
42
+ }
43
+
44
+
45
+ .social-logo__behance:before {
46
+ content:"\f101";
47
+ }
48
+
49
+
50
+ .social-logo__blogger-alt:before {
51
+ content:"\f601";
52
+ }
53
+
54
+
55
+ .social-logo__blogger:before {
56
+ content:"\f602";
57
+ }
58
+
59
+
60
+ .social-logo__codepen:before {
61
+ content:"\f216";
62
+ }
63
+
64
+
65
+ .social-logo__dribbble:before {
66
+ content:"\f201";
67
+ }
68
+
69
+
70
+ .social-logo__dropbox:before {
71
+ content:"\f225";
72
+ }
73
+
74
+
75
+ .social-logo__eventbrite:before {
76
+ content:"\f603";
77
+ }
78
+
79
+
80
+ .social-logo__facebook:before {
81
+ content:"\f203";
82
+ }
83
+
84
+
85
+ .social-logo__feed:before {
86
+ content:"\f413";
87
+ }
88
+
89
+
90
+ .social-logo__flickr:before {
91
+ content:"\f211";
92
+ }
93
+
94
+
95
+ .social-logo__foursquare:before {
96
+ content:"\f226";
97
+ }
98
+
99
+
100
+ .social-logo__ghost:before {
101
+ content:"\f61c";
102
+ }
103
+
104
+
105
+ .social-logo__github:before {
106
+ content:"\f200";
107
+ }
108
+
109
+
110
+ .social-logo__google-plus-alt:before {
111
+ content:"\f218";
112
+ }
113
+
114
+
115
+ .social-logo__google-plus:before {
116
+ content:"\f206";
117
+ }
118
+
119
+
120
+ .social-logo__instagram:before {
121
+ content:"\f215";
122
+ }
123
+
124
+
125
+ .social-logo__linkedin:before {
126
+ content:"\f207";
127
+ }
128
+
129
+
130
+ .social-logo__mail:before {
131
+ content:"\f410";
132
+ }
133
+
134
+
135
+ .social-logo__medium:before {
136
+ content:"\f623";
137
+ }
138
+
139
+
140
+ .social-logo__path-alt:before {
141
+ content:"\f604";
142
+ }
143
+
144
+
145
+ .social-logo__path:before {
146
+ content:"\f219";
147
+ }
148
+
149
+
150
+ .social-logo__pinterest-alt:before {
151
+ content:"\f210";
152
+ }
153
+
154
+
155
+ .social-logo__pinterest:before {
156
+ content:"\f209";
157
+ }
158
+
159
+
160
+ .social-logo__pocket:before {
161
+ content:"\f224";
162
+ }
163
+
164
+
165
+ .social-logo__polldaddy:before {
166
+ content:"\f217";
167
+ }
168
+
169
+
170
+ .social-logo__print:before {
171
+ content:"\f469";
172
+ }
173
+
174
+
175
+ .social-logo__reddit:before {
176
+ content:"\f222";
177
+ }
178
+
179
+
180
+ .social-logo__share:before {
181
+ content:"\f415";
182
+ }
183
+
184
+
185
+ .social-logo__skype:before {
186
+ content:"\f220";
187
+ }
188
+
189
+
190
+ .social-logo__spotify:before {
191
+ content:"\f515";
192
+ }
193
+
194
+
195
+ .social-logo__squarespace:before {
196
+ content:"\f605";
197
+ }
198
+
199
+
200
+ .social-logo__stumbleupon:before {
201
+ content:"\f223";
202
+ }
203
+
204
+
205
+ .social-logo__telegram:before {
206
+ content:"\f606";
207
+ }
208
+
209
+
210
+ .social-logo__tumblr-alt:before {
211
+ content:"\f607";
212
+ }
213
+
214
+
215
+ .social-logo__tumblr:before {
216
+ content:"\f214";
217
+ }
218
+
219
+
220
+ .social-logo__twitch:before {
221
+ content:"\f516";
222
+ }
223
+
224
+
225
+ .social-logo__twitter-alt:before {
226
+ content:"\f202";
227
+ }
228
+
229
+
230
+ .social-logo__twitter:before {
231
+ content:"\f610";
232
+ }
233
+
234
+
235
+ .social-logo__vimeo:before {
236
+ content:"\f212";
237
+ }
238
+
239
+
240
+ .social-logo__whatsapp:before {
241
+ content:"\f608";
242
+ }
243
+
244
+
245
+ .social-logo__wordpress:before {
246
+ content:"\f205";
247
+ }
248
+
249
+
250
+ .social-logo__xanga:before {
251
+ content:"\f609";
252
+ }
253
+
254
+
255
+ .social-logo__youtube:before {
256
+ content:"\f213";
257
+ }
_inc/social-logos/social-logos.eot ADDED
Binary file
_inc/social-logos/social-logos.html ADDED
@@ -0,0 +1,428 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>social-logos</title>
6
+ <style>
7
+ body {
8
+ margin:0;
9
+ padding:10px 20px;
10
+ background:#fff;
11
+ color:#222;
12
+ }
13
+ h1, div, footer {
14
+ font-family:"Helvetica Neue", Arial, sans-serif;
15
+ }
16
+ h1 {
17
+ margin:0 0 20px;
18
+ font-size:32px;
19
+ font-weight:normal;
20
+ }
21
+ .icons {
22
+ margin-bottom:40px;
23
+ -webkit-column-count:5;
24
+ -moz-column-count:5;
25
+ column-count:5;
26
+ -webkit-column-gap:20px;
27
+ -moz-column-gap:20px;
28
+ column-gap:20px;
29
+ }
30
+ .icons__item,
31
+ .icons__item i {
32
+ line-height:2em;
33
+ cursor:pointer;
34
+ overflow:hidden;
35
+ }
36
+ .icons__item:hover {
37
+ color:#3c90be;
38
+ }
39
+ .icons__item i {
40
+ display:inline-block;
41
+ width:32px;
42
+ text-align:center;
43
+ }
44
+ .icons__item:hover i {
45
+ -webkit-transform:scale(1.5);
46
+ transform:scale(1.5);
47
+ }
48
+ footer {
49
+ margin-top:40px;
50
+ font-size:14px;
51
+ color:#999;
52
+ }
53
+
54
+ /* Generated by grunt-webfont */
55
+
56
+
57
+
58
+ @font-face {
59
+ font-family:"social-logos";
60
+ src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
61
+ font-weight:normal;
62
+ font-style:normal;
63
+ }
64
+ @font-face {
65
+ font-family:"social-logos";
66
+ src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
67
+ src:url("social-logos.eot?#iefix") format("embedded-opentype"),
68
+ url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"),
69
+ url("social-logos.ttf?51b607ee5b5cb2a0e4517176475a424c") format("truetype");
70
+ font-weight:normal;
71
+ font-style:normal;
72
+ }
73
+
74
+ .social-logo {
75
+ font-family:"social-logos";
76
+ display:inline-block;
77
+ vertical-align:middle;
78
+ line-height:1;
79
+ font-weight:normal;
80
+ font-style:normal;
81
+ speak:none;
82
+ text-decoration:inherit;
83
+ text-transform:none;
84
+ text-rendering:auto;
85
+ -webkit-font-smoothing:antialiased;
86
+ -moz-osx-font-smoothing:grayscale;
87
+ }
88
+
89
+
90
+ /* Icons */
91
+
92
+
93
+ .social-logo__amazon:before {
94
+ content:"\f600";
95
+ }
96
+
97
+
98
+ .social-logo__behance:before {
99
+ content:"\f101";
100
+ }
101
+
102
+
103
+ .social-logo__blogger-alt:before {
104
+ content:"\f601";
105
+ }
106
+
107
+
108
+ .social-logo__blogger:before {
109
+ content:"\f602";
110
+ }
111
+
112
+
113
+ .social-logo__codepen:before {
114
+ content:"\f216";
115
+ }
116
+
117
+
118
+ .social-logo__dribbble:before {
119
+ content:"\f201";
120
+ }
121
+
122
+
123
+ .social-logo__dropbox:before {
124
+ content:"\f225";
125
+ }
126
+
127
+
128
+ .social-logo__eventbrite:before {
129
+ content:"\f603";
130
+ }
131
+
132
+
133
+ .social-logo__facebook:before {
134
+ content:"\f203";
135
+ }
136
+
137
+
138
+ .social-logo__feed:before {
139
+ content:"\f413";
140
+ }
141
+
142
+
143
+ .social-logo__flickr:before {
144
+ content:"\f211";
145
+ }
146
+
147
+
148
+ .social-logo__foursquare:before {
149
+ content:"\f226";
150
+ }
151
+
152
+
153
+ .social-logo__ghost:before {
154
+ content:"\f61c";
155
+ }
156
+
157
+
158
+ .social-logo__github:before {
159
+ content:"\f200";
160
+ }
161
+
162
+
163
+ .social-logo__google-plus-alt:before {
164
+ content:"\f218";
165
+ }
166
+
167
+
168
+ .social-logo__google-plus:before {
169
+ content:"\f206";
170
+ }
171
+
172
+
173
+ .social-logo__instagram:before {
174
+ content:"\f215";
175
+ }
176
+
177
+
178
+ .social-logo__linkedin:before {
179
+ content:"\f207";
180
+ }
181
+
182
+
183
+ .social-logo__mail:before {
184
+ content:"\f410";
185
+ }
186
+
187
+
188
+ .social-logo__medium:before {
189
+ content:"\f623";
190
+ }
191
+
192
+
193
+ .social-logo__path-alt:before {
194
+ content:"\f604";
195
+ }
196
+
197
+
198
+ .social-logo__path:before {
199
+ content:"\f219";
200
+ }
201
+
202
+
203
+ .social-logo__pinterest-alt:before {
204
+ content:"\f210";
205
+ }
206
+
207
+
208
+ .social-logo__pinterest:before {
209
+ content:"\f209";
210
+ }
211
+
212
+
213
+ .social-logo__pocket:before {
214
+ content:"\f224";
215
+ }
216
+
217
+
218
+ .social-logo__polldaddy:before {
219
+ content:"\f217";
220
+ }
221
+
222
+
223
+ .social-logo__print:before {
224
+ content:"\f469";
225
+ }
226
+
227
+
228
+ .social-logo__reddit:before {
229
+ content:"\f222";
230
+ }
231
+
232
+
233
+ .social-logo__share:before {
234
+ content:"\f415";
235
+ }
236
+
237
+
238
+ .social-logo__skype:before {
239
+ content:"\f220";
240
+ }
241
+
242
+
243
+ .social-logo__spotify:before {
244
+ content:"\f515";
245
+ }
246
+
247
+
248
+ .social-logo__squarespace:before {
249
+ content:"\f605";
250
+ }
251
+
252
+
253
+ .social-logo__stumbleupon:before {
254
+ content:"\f223";
255
+ }
256
+
257
+
258
+ .social-logo__telegram:before {
259
+ content:"\f606";
260
+ }
261
+
262
+
263
+ .social-logo__tumblr-alt:before {
264
+ content:"\f607";
265
+ }
266
+
267
+
268
+ .social-logo__tumblr:before {
269
+ content:"\f214";
270
+ }
271
+
272
+
273
+ .social-logo__twitch:before {
274
+ content:"\f516";
275
+ }
276
+
277
+
278
+ .social-logo__twitter-alt:before {
279
+ content:"\f202";
280
+ }
281
+
282
+
283
+ .social-logo__twitter:before {
284
+ content:"\f610";
285
+ }
286
+
287
+
288
+ .social-logo__vimeo:before {
289
+ content:"\f212";
290
+ }
291
+
292
+
293
+ .social-logo__whatsapp:before {
294
+ content:"\f608";
295
+ }
296
+
297
+
298
+ .social-logo__wordpress:before {
299
+ content:"\f205";
300
+ }
301
+
302
+
303
+ .social-logo__xanga:before {
304
+ content:"\f609";
305
+ }
306
+
307
+
308
+ .social-logo__youtube:before {
309
+ content:"\f213";
310
+ }
311
+
312
+ </style>
313
+ </head>
314
+ <body>
315
+ <h1>social-logos</h1>
316
+
317
+ <div class="icons" id="icons">
318
+
319
+ <div class="icons__item" data-name="amazon"><i class="social-logo social-logo__amazon"></i> social-logo__amazon</div>
320
+
321
+ <div class="icons__item" data-name="behance"><i class="social-logo social-logo__behance"></i> social-logo__behance</div>
322
+
323
+ <div class="icons__item" data-name="blogger-alt"><i class="social-logo social-logo__blogger-alt"></i> social-logo__blogger-alt</div>
324
+
325
+ <div class="icons__item" data-name="blogger"><i class="social-logo social-logo__blogger"></i> social-logo__blogger</div>
326
+
327
+ <div class="icons__item" data-name="codepen"><i class="social-logo social-logo__codepen"></i> social-logo__codepen</div>
328
+
329
+ <div class="icons__item" data-name="dribbble"><i class="social-logo social-logo__dribbble"></i> social-logo__dribbble</div>
330
+
331
+ <div class="icons__item" data-name="dropbox"><i class="social-logo social-logo__dropbox"></i> social-logo__dropbox</div>
332
+
333
+ <div class="icons__item" data-name="eventbrite"><i class="social-logo social-logo__eventbrite"></i> social-logo__eventbrite</div>
334
+
335
+ <div class="icons__item" data-name="facebook"><i class="social-logo social-logo__facebook"></i> social-logo__facebook</div>
336
+
337
+ <div class="icons__item" data-name="feed"><i class="social-logo social-logo__feed"></i> social-logo__feed</div>
338
+
339
+ <div class="icons__item" data-name="flickr"><i class="social-logo social-logo__flickr"></i> social-logo__flickr</div>
340
+
341
+ <div class="icons__item" data-name="foursquare"><i class="social-logo social-logo__foursquare"></i> social-logo__foursquare</div>
342
+
343
+ <div class="icons__item" data-name="ghost"><i class="social-logo social-logo__ghost"></i> social-logo__ghost</div>
344
+
345
+ <div class="icons__item" data-name="github"><i class="social-logo social-logo__github"></i> social-logo__github</div>
346
+
347
+ <div class="icons__item" data-name="google-plus-alt"><i class="social-logo social-logo__google-plus-alt"></i> social-logo__google-plus-alt</div>
348
+
349
+ <div class="icons__item" data-name="google-plus"><i class="social-logo social-logo__google-plus"></i> social-logo__google-plus</div>
350
+
351
+ <div class="icons__item" data-name="instagram"><i class="social-logo social-logo__instagram"></i> social-logo__instagram</div>
352
+
353
+ <div class="icons__item" data-name="linkedin"><i class="social-logo social-logo__linkedin"></i> social-logo__linkedin</div>
354
+
355
+ <div class="icons__item" data-name="mail"><i class="social-logo social-logo__mail"></i> social-logo__mail</div>
356
+
357
+ <div class="icons__item" data-name="medium"><i class="social-logo social-logo__medium"></i> social-logo__medium</div>
358
+
359
+ <div class="icons__item" data-name="path-alt"><i class="social-logo social-logo__path-alt"></i> social-logo__path-alt</div>
360
+
361
+ <div class="icons__item" data-name="path"><i class="social-logo social-logo__path"></i> social-logo__path</div>
362
+
363
+ <div class="icons__item" data-name="pinterest-alt"><i class="social-logo social-logo__pinterest-alt"></i> social-logo__pinterest-alt</div>
364
+
365
+ <div class="icons__item" data-name="pinterest"><i class="social-logo social-logo__pinterest"></i> social-logo__pinterest</div>
366
+
367
+ <div class="icons__item" data-name="pocket"><i class="social-logo social-logo__pocket"></i> social-logo__pocket</div>
368
+
369
+ <div class="icons__item" data-name="polldaddy"><i class="social-logo social-logo__polldaddy"></i> social-logo__polldaddy</div>
370
+
371
+ <div class="icons__item" data-name="print"><i class="social-logo social-logo__print"></i> social-logo__print</div>
372
+
373
+ <div class="icons__item" data-name="reddit"><i class="social-logo social-logo__reddit"></i> social-logo__reddit</div>
374
+
375
+ <div class="icons__item" data-name="share"><i class="social-logo social-logo__share"></i> social-logo__share</div>
376
+
377
+ <div class="icons__item" data-name="skype"><i class="social-logo social-logo__skype"></i> social-logo__skype</div>
378
+
379
+ <div class="icons__item" data-name="spotify"><i class="social-logo social-logo__spotify"></i> social-logo__spotify</div>
380
+
381
+ <div class="icons__item" data-name="squarespace"><i class="social-logo social-logo__squarespace"></i> social-logo__squarespace</div>
382
+
383
+ <div class="icons__item" data-name="stumbleupon"><i class="social-logo social-logo__stumbleupon"></i> social-logo__stumbleupon</div>
384
+
385
+ <div class="icons__item" data-name="telegram"><i class="social-logo social-logo__telegram"></i> social-logo__telegram</div>
386
+
387
+ <div class="icons__item" data-name="tumblr-alt"><i class="social-logo social-logo__tumblr-alt"></i> social-logo__tumblr-alt</div>
388
+
389
+ <div class="icons__item" data-name="tumblr"><i class="social-logo social-logo__tumblr"></i> social-logo__tumblr</div>
390
+
391
+ <div class="icons__item" data-name="twitch"><i class="social-logo social-logo__twitch"></i> social-logo__twitch</div>
392
+
393
+ <div class="icons__item" data-name="twitter-alt"><i class="social-logo social-logo__twitter-alt"></i> social-logo__twitter-alt</div>
394
+
395
+ <div class="icons__item" data-name="twitter"><i class="social-logo social-logo__twitter"></i> social-logo__twitter</div>
396
+
397
+ <div class="icons__item" data-name="vimeo"><i class="social-logo social-logo__vimeo"></i> social-logo__vimeo</div>
398
+
399
+ <div class="icons__item" data-name="whatsapp"><i class="social-logo social-logo__whatsapp"></i> social-logo__whatsapp</div>
400
+
401
+ <div class="icons__item" data-name="wordpress"><i class="social-logo social-logo__wordpress"></i> social-logo__wordpress</div>
402
+
403
+ <div class="icons__item" data-name="xanga"><i class="social-logo social-logo__xanga"></i> social-logo__xanga</div>
404
+
405
+ <div class="icons__item" data-name="youtube"><i class="social-logo social-logo__youtube"></i> social-logo__youtube</div>
406
+
407
+ </div>
408
+
409
+
410
+
411
+ <h1>Usage</h1>
412
+ <pre><code>&lt;i class=&quot;social-logo social-logo__<span id="name">name</span>&quot;&gt;&lt;/i&gt;</code></pre>
413
+
414
+
415
+ <footer>Generated by <a href="https://github.com/sapegin/grunt-webfont">grunt-webfont</a>.</footer>
416
+
417
+ <script>
418
+ (function() {
419
+ document.getElementById('icons').onclick = function(e) {
420
+ e = e || window.event;
421
+ var name = e.target.getAttribute('data-name') || e.target.parentNode.getAttribute('data-name');
422
+ document.getElementById('name').innerHTML = name;
423
+
424
+ }
425
+ })();
426
+ </script>
427
+ </body>
428
+ </html>
_inc/social-logos/social-logos.min.css ADDED
@@ -0,0 +1 @@
 
1
+ @font-face{font-family:social-logos;src:url(social-logos.eot?51b607ee5b5cb2a0e4517176475a424c);font-weight:400;font-style:normal}@font-face{font-family:social-logos;src:url(social-logos.eot?51b607ee5b5cb2a0e4517176475a424c);src:url(social-logos.eot?#iefix) format("embedded-opentype"),url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"),url(social-logos.ttf?51b607ee5b5cb2a0e4517176475a424c) format("truetype");font-weight:400;font-style:normal}.social-logo{font-family:social-logos;display:inline-block;vertical-align:middle;line-height:1;font-weight:400;font-style:normal;speak:none;text-decoration:inherit;text-transform:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.social-logo__amazon:before{content:"\f600"}.social-logo__behance:before{content:"\f101"}.social-logo__blogger-alt:before{content:"\f601"}.social-logo__blogger:before{content:"\f602"}.social-logo__codepen:before{content:"\f216"}.social-logo__dribbble:before{content:"\f201"}.social-logo__dropbox:before{content:"\f225"}.social-logo__eventbrite:before{content:"\f603"}.social-logo__facebook:before{content:"\f203"}.social-logo__feed:before{content:"\f413"}.social-logo__flickr:before{content:"\f211"}.social-logo__foursquare:before{content:"\f226"}.social-logo__ghost:before{content:"\f61c"}.social-logo__github:before{content:"\f200"}.social-logo__google-plus-alt:before{content:"\f218"}.social-logo__google-plus:before{content:"\f206"}.social-logo__instagram:before{content:"\f215"}.social-logo__linkedin:before{content:"\f207"}.social-logo__mail:before{content:"\f410"}.social-logo__medium:before{content:"\f623"}.social-logo__path-alt:before{content:"\f604"}.social-logo__path:before{content:"\f219"}.social-logo__pinterest-alt:before{content:"\f210"}.social-logo__pinterest:before{content:"\f209"}.social-logo__pocket:before{content:"\f224"}.social-logo__polldaddy:before{content:"\f217"}.social-logo__print:before{content:"\f469"}.social-logo__reddit:before{content:"\f222"}.social-logo__share:before{content:"\f415"}.social-logo__skype:before{content:"\f220"}.social-logo__spotify:before{content:"\f515"}.social-logo__squarespace:before{content:"\f605"}.social-logo__stumbleupon:before{content:"\f223"}.social-logo__telegram:before{content:"\f606"}.social-logo__tumblr-alt:before{content:"\f607"}.social-logo__tumblr:before{content:"\f214"}.social-logo__twitch:before{content:"\f516"}.social-logo__twitter-alt:before{content:"\f202"}.social-logo__twitter:before{content:"\f610"}.social-logo__vimeo:before{content:"\f212"}.social-logo__whatsapp:before{content:"\f608"}.social-logo__wordpress:before{content:"\f205"}.social-logo__xanga:before{content:"\f609"}.social-logo__youtube:before{content:"\f213"}
_inc/social-logos/social-logos.ttf ADDED
Binary file
_inc/social-logos/social-logos.woff2 ADDED
Binary file
changelog.txt CHANGED
@@ -1,4 +1,69 @@
1
- == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  = 4.0.4 =
4
  Release date: June 20th, 2016
1
+ == Changelog ==
2
+
3
+ = 4.1 =
4
+
5
+ * Release date: July 6th, 2016
6
+ * Release Post: http://wp.me/p1moTy-3jd
7
+
8
+ **Performance Enhancements:**
9
+
10
+ * Carousel no longer loads full-size images in the previous and next previews, increasing the speed and performance of slideshows.
11
+ * We’ve improved Jetpack’s performance by making calls to the database more efficient; essentially, Jetpack is doing less on each page load, making things faster.
12
+ * We’ve improved Photon dev mode, eliminating unnecessary attempts to sync images.
13
+
14
+ **Exciting Feature and UI Improvements:**
15
+
16
+ * A new look: SSO, redesigned and refactored, provides a new and improved experience.
17
+ * Tracking made simple: quickly view the number of unread feedback submissions in your sidebar.
18
+ * Getting support just got easier! Access improved self-help tools in the Jetpack Debug menu.
19
+ * Greater control over Infinite Scroll: pause and resume Infinite Scroll with two new JavaScript methods.
20
+ * Improved Sharing: we’ve swapped image icons for icon fonts and added Telegram and WhatsApp buttons.
21
+ * Untappd shortcode: now you can sip and share your favorite craft brews. Cheers!
22
+ * Recipes, revamped: we’ve added new recipe shortcodes and options to create more detailed recipes.
23
+ * Improved Gallery Widgets now use Photon to resize and serve images.
24
+
25
+ **Security:**
26
+
27
+ * We’re continuing our efforts to harden Jetpack security by implementing the `hash_equals()` function in an effort to avoid timing attacks when comparing strings.
28
+ * We’ve made it easier to use SSL connections on ports `80` and `443`, improving our ability to communicate with an increased number of secure websites.
29
+ * You will now receive a warning for any failed attempts when connecting your website via SSL.
30
+
31
+ **Slightly Less Exciting Feature Improvements:**
32
+
33
+ * Updated the Infinite Scroll settings verbiage, which was a bit confusing.
34
+ * Removed Jetpack Audio Shortcode, which is no longer in use.
35
+ * Redesigned Jetpack banner notices to match core notification styles.
36
+ * Added an icon on a connected Jetpack user’s profile page, next to their name.
37
+ * Added the ability to edit Portfolio custom-post-type options in the Customizer.
38
+ * Added a new filter called `jetpack_publicize_capability` which allows you to override user role restrictions for Publicize.
39
+ * Improved the connection process between Jetpack and WordPress.com making it easier to start using Manage.
40
+ * Updated the Top Posts Widget so you can use and display posts that are older than 10 days.
41
+ * Updated the Twitter Timeline Widget to support updates made by Twitter.
42
+ * Improved the VideoPress Shortcode modal.
43
+ * Updated VideoPress, which now defaults to HTML5 videos when the `freedom` shortcode parameter is in use.
44
+ * Improved how Jetpack syncs by removing mock options.
45
+ * Updated the naming convention for feedback posts.
46
+ * Updated several JSON API endpoints to match WordPress.com endpoints, added support for custom taxonomies, and enabled trash as a valid status for the post update endpoint.
47
+
48
+ **Improved Compatibility:**
49
+
50
+ * A community member found and fixed a compatibility issue with our Open Graph Meta Tags and Bitly’s older plugin -- we now check to make sure we don’t create conflicts.
51
+ * We’ve fixed a rare scenario where an error would occur when other plugins or sites were using the `JETPACK__GLOTPRESS_LOCALES_PATH` constant.
52
+
53
+ **Bug Fixes:**
54
+
55
+ * Comment avatars are now retrieved in a manner more consistent with the login avatar, improving consistency and eliminating the possibility of a future bug.
56
+ * We eliminated PHP notices that were appearing when Custom Content Types were defined without labels or sections.
57
+ * PHP memory limits were reached in rare cases when a website had thousands of revisions of their Custom CSS. The issue is fixed -- happy editing!
58
+ * jQuery deprecated the `size()` function -- as a result, we’ve stopped using it as well.
59
+ * A PHP notice popped up when plugins were updated from the WordPress.com plugin management interface -- these notices will no longer appear.
60
+ * We fixed a bug where Photon wasn’t providing the original size for images that were being used outside of the post content.
61
+ * We eliminated the PHP notices that displayed when posts with slideshows were added to a sitemap.
62
+ * We fixed an error that was showing up in Sitemaps when a website permalink structure used `index.php`.
63
+ * We eliminated JavaScript errors that displayed when tiled galleries were viewed.
64
+ * We fixed an issue where image dimensions weren’t properly saved when added to a new widget.
65
+ * Since Google Maps API keys are now required to use maps, we’ve updated the Contact Info Widget to allow site owners to set up their keys.
66
+ * We fixed a bug where multiple `display` properties weren’t able to be saved in Custom CSS.
67
 
68
  = 4.0.4 =
69
  Release date: June 20th, 2016
class.jetpack-client-server.php CHANGED
@@ -42,7 +42,7 @@ class Jetpack_Client_Server {
42
  $jetpack_unique_connection = array(
43
  'connected' => 0,
44
  'disconnected' => 0,
45
- 'version' => '3.6.1'
46
  );
47
 
48
  update_option( 'jetpack_unique_connection', $jetpack_unique_connection );
@@ -58,81 +58,78 @@ class Jetpack_Client_Server {
58
  $jetpack_unique_connection['connected'] += 1;
59
  Jetpack_Options::update_option( 'unique_connection', $jetpack_unique_connection );
60
 
61
- do {
62
- $jetpack = $this->get_jetpack();
63
- $role = $jetpack->translate_current_user_to_role();
64
-
65
- if ( ! $role ) {
66
- return new Jetpack_Error( 'no_role', 'Invalid request.', 400 );
67
- }
68
 
69
- $cap = $jetpack->translate_role_to_cap( $role );
70
- if ( !$cap ) {
71
- return new Jetpack_Error( 'no_cap', 'Invalid request.', 400 );
72
- }
73
 
74
- if ( ! empty( $data['error'] ) ) {
75
- return new Jetpack_Error( $data['error'], 'Error included in the request.', 400 );
76
- }
 
77
 
78
- if ( ! isset( $data['state'] ) ) {
79
- return new Jetpack_Error( 'no_state', 'Request must include state.', 400 );
80
- }
81
 
82
- if ( ! ctype_digit( $data['state'] ) ) {
83
- return new Jetpack_Error( $data['error'], 'State must be an integer.', 400 );
84
- }
85
 
86
- $current_user_id = get_current_user_id();
87
- if ( $current_user_id != $data['state'] ) {
88
- return new Jetpack_Error( 'wrong_state', 'State does not match current user.', 400 );
89
- }
90
 
91
- if ( empty( $data['code'] ) ) {
92
- return new Jetpack_Error( 'no_code', 'Request must include an authorization code.', 400 );
93
- }
 
94
 
95
- $token = $this->get_token( $data );
 
 
96
 
97
- if ( is_wp_error( $token ) ) {
98
- $code = $token->get_error_code();
99
- if ( empty( $code ) ) {
100
- $code = 'invalid_token';
101
- }
102
- return new Jetpack_Error( $code, $token->get_error_message(), 400 );
103
- }
104
 
105
- if ( ! $token ) {
106
- return new Jetpack_Error( 'no_token', 'Error generating token.', 400 );
 
 
107
  }
 
 
108
 
109
- $is_master_user = ! Jetpack::is_active();
 
 
110
 
111
- Jetpack::update_user_token( $current_user_id, sprintf( '%s.%d', $token, $current_user_id ), $is_master_user );
112
 
 
113
 
114
- if ( ! $is_master_user ) {
115
- // Don't activate anything since we are just connecting a user.
116
- return 'linked';
117
- }
118
 
119
- $redirect_on_activation_error = ( 'client' === $data['auth_type'] ) ? true : false;
120
- if ( $active_modules = Jetpack_Options::get_option( 'active_modules' ) ) {
121
- Jetpack_Options::delete_option( 'active_modules' );
122
 
123
- Jetpack::activate_default_modules( 999, 1, $active_modules, $redirect_on_activation_error );
124
- } else {
125
- Jetpack::activate_default_modules( false, false, array(), $redirect_on_activation_error );
126
- }
127
 
128
- // Sync all registers options and constants
129
- /** This action is documented in class.jetpack.php */
130
- do_action( 'jetpack_sync_all_registered_options' );
131
 
132
- // Start nonce cleaner
133
- wp_clear_scheduled_hook( 'jetpack_clean_nonces' );
134
- wp_schedule_event( time(), 'hourly', 'jetpack_clean_nonces' );
135
- } while ( false );
136
 
137
  return 'authorized';
138
  }
@@ -169,7 +166,7 @@ class Jetpack_Client_Server {
169
  }
170
 
171
  $client_secret = Jetpack_Data::get_access_token();
172
- if ( !$client_secret ) {
173
  return new Jetpack_Error( 'client_secret', __( 'You need to register your Jetpack before connecting it.', 'jetpack' ) );
174
  }
175
 
@@ -206,21 +203,23 @@ class Jetpack_Client_Server {
206
  $code = wp_remote_retrieve_response_code( $response );
207
  $entity = wp_remote_retrieve_body( $response );
208
 
209
- if ( $entity )
210
  $json = json_decode( $entity );
211
- else
212
  $json = false;
 
213
 
214
- if ( 200 != $code || !empty( $json->error ) ) {
215
- if ( empty( $json->error ) )
216
  return new Jetpack_Error( 'unknown', '', $code );
 
217
 
218
  $error_description = isset( $json->error_description ) ? sprintf( __( 'Error Details: %s', 'jetpack' ), (string) $json->error_description ) : '';
219
 
220
  return new Jetpack_Error( (string) $json->error, $error_description, $code );
221
  }
222
 
223
- if ( empty( $json->access_token ) || !is_scalar( $json->access_token ) ) {
224
  return new Jetpack_Error( 'access_token', '', $code );
225
  }
226
 
@@ -231,18 +230,23 @@ class Jetpack_Client_Server {
231
  if ( empty( $json->scope ) ) {
232
  return new Jetpack_Error( 'scope', 'No Scope', $code );
233
  }
 
234
  @list( $role, $hmac ) = explode( ':', $json->scope );
235
  if ( empty( $role ) || empty( $hmac ) ) {
236
  return new Jetpack_Error( 'scope', 'Malformed Scope', $code );
237
  }
 
238
  if ( $jetpack->sign_role( $role ) !== $json->scope ) {
239
  return new Jetpack_Error( 'scope', 'Invalid Scope', $code );
240
  }
241
 
242
- if ( !$cap = $jetpack->translate_role_to_cap( $role ) )
243
  return new Jetpack_Error( 'scope', 'No Cap', $code );
244
- if ( ! current_user_can( $cap ) )
 
 
245
  return new Jetpack_Error( 'scope', 'current_user_cannot', $code );
 
246
 
247
  /**
248
  * Fires after user has successfully received an auth token.
@@ -269,5 +273,4 @@ class Jetpack_Client_Server {
269
  public function do_exit() {
270
  exit;
271
  }
272
-
273
  }
42
  $jetpack_unique_connection = array(
43
  'connected' => 0,
44
  'disconnected' => 0,
45
+ 'version' => '3.6.1',
46
  );
47
 
48
  update_option( 'jetpack_unique_connection', $jetpack_unique_connection );
58
  $jetpack_unique_connection['connected'] += 1;
59
  Jetpack_Options::update_option( 'unique_connection', $jetpack_unique_connection );
60
 
61
+ $jetpack = $this->get_jetpack();
62
+ $role = $jetpack->translate_current_user_to_role();
 
 
 
 
 
63
 
64
+ if ( ! $role ) {
65
+ return new Jetpack_Error( 'no_role', 'Invalid request.', 400 );
66
+ }
 
67
 
68
+ $cap = $jetpack->translate_role_to_cap( $role );
69
+ if ( ! $cap ) {
70
+ return new Jetpack_Error( 'no_cap', 'Invalid request.', 400 );
71
+ }
72
 
73
+ if ( ! empty( $data['error'] ) ) {
74
+ return new Jetpack_Error( $data['error'], 'Error included in the request.', 400 );
75
+ }
76
 
77
+ if ( ! isset( $data['state'] ) ) {
78
+ return new Jetpack_Error( 'no_state', 'Request must include state.', 400 );
79
+ }
80
 
81
+ if ( ! ctype_digit( $data['state'] ) ) {
82
+ return new Jetpack_Error( $data['error'], 'State must be an integer.', 400 );
83
+ }
 
84
 
85
+ $current_user_id = get_current_user_id();
86
+ if ( $current_user_id != $data['state'] ) {
87
+ return new Jetpack_Error( 'wrong_state', 'State does not match current user.', 400 );
88
+ }
89
 
90
+ if ( empty( $data['code'] ) ) {
91
+ return new Jetpack_Error( 'no_code', 'Request must include an authorization code.', 400 );
92
+ }
93
 
94
+ $token = $this->get_token( $data );
 
 
 
 
 
 
95
 
96
+ if ( is_wp_error( $token ) ) {
97
+ $code = $token->get_error_code();
98
+ if ( empty( $code ) ) {
99
+ $code = 'invalid_token';
100
  }
101
+ return new Jetpack_Error( $code, $token->get_error_message(), 400 );
102
+ }
103
 
104
+ if ( ! $token ) {
105
+ return new Jetpack_Error( 'no_token', 'Error generating token.', 400 );
106
+ }
107
 
108
+ $is_master_user = ! Jetpack::is_active();
109
 
110
+ Jetpack::update_user_token( $current_user_id, sprintf( '%s.%d', $token, $current_user_id ), $is_master_user );
111
 
112
+ if ( ! $is_master_user ) {
113
+ // Don't activate anything since we are just connecting a user.
114
+ return 'linked';
115
+ }
116
 
117
+ $redirect_on_activation_error = ( 'client' === $data['auth_type'] ) ? true : false;
118
+ if ( $active_modules = Jetpack_Options::get_option( 'active_modules' ) ) {
119
+ Jetpack_Options::delete_option( 'active_modules' );
120
 
121
+ Jetpack::activate_default_modules( 999, 1, $active_modules, $redirect_on_activation_error );
122
+ } else {
123
+ Jetpack::activate_default_modules( false, false, array(), $redirect_on_activation_error );
124
+ }
125
 
126
+ // Sync all registers options and constants
127
+ /** This action is documented in class.jetpack.php */
128
+ do_action( 'jetpack_sync_all_registered_options' );
129
 
130
+ // Start nonce cleaner
131
+ wp_clear_scheduled_hook( 'jetpack_clean_nonces' );
132
+ wp_schedule_event( time(), 'hourly', 'jetpack_clean_nonces' );
 
133
 
134
  return 'authorized';
135
  }
166
  }
167
 
168
  $client_secret = Jetpack_Data::get_access_token();
169
+ if ( ! $client_secret ) {
170
  return new Jetpack_Error( 'client_secret', __( 'You need to register your Jetpack before connecting it.', 'jetpack' ) );
171
  }
172
 
203
  $code = wp_remote_retrieve_response_code( $response );
204
  $entity = wp_remote_retrieve_body( $response );
205
 
206
+ if ( $entity ) {
207
  $json = json_decode( $entity );
208
+ } else {
209
  $json = false;
210
+ }
211
 
212
+ if ( 200 != $code || ! empty( $json->error ) ) {
213
+ if ( empty( $json->error ) ) {
214
  return new Jetpack_Error( 'unknown', '', $code );
215
+ }
216
 
217
  $error_description = isset( $json->error_description ) ? sprintf( __( 'Error Details: %s', 'jetpack' ), (string) $json->error_description ) : '';
218
 
219
  return new Jetpack_Error( (string) $json->error, $error_description, $code );
220
  }
221
 
222
+ if ( empty( $json->access_token ) || ! is_scalar( $json->access_token ) ) {
223
  return new Jetpack_Error( 'access_token', '', $code );
224
  }
225
 
230
  if ( empty( $json->scope ) ) {
231
  return new Jetpack_Error( 'scope', 'No Scope', $code );
232
  }
233
+
234
  @list( $role, $hmac ) = explode( ':', $json->scope );
235
  if ( empty( $role ) || empty( $hmac ) ) {
236
  return new Jetpack_Error( 'scope', 'Malformed Scope', $code );
237
  }
238
+
239
  if ( $jetpack->sign_role( $role ) !== $json->scope ) {
240
  return new Jetpack_Error( 'scope', 'Invalid Scope', $code );
241
  }
242
 
243
+ if ( ! $cap = $jetpack->translate_role_to_cap( $role ) ) {
244
  return new Jetpack_Error( 'scope', 'No Cap', $code );
245
+ }
246
+
247
+ if ( ! current_user_can( $cap ) ) {
248
  return new Jetpack_Error( 'scope', 'current_user_cannot', $code );
249
+ }
250
 
251
  /**
252
  * Fires after user has successfully received an auth token.
273
  public function do_exit() {
274
  exit;
275
  }
 
276
  }
class.jetpack-data.php CHANGED
@@ -55,6 +55,19 @@ class Jetpack_Data {
55
  return new WP_Error( 'fail_domain_empty', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as it is empty.', 'jetpack' ), $domain ) );
56
  }
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  // None of the explicit localhosts.
59
  $forbidden_domains = array(
60
  'wordpress.com',
55
  return new WP_Error( 'fail_domain_empty', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as it is empty.', 'jetpack' ), $domain ) );
56
  }
57
 
58
+ /**
59
+ * Skips the usuable domain check when connecting a site.
60
+ *
61
+ * Allows site administrators with domains that fail gethostname-based checks to pass the request to WP.com
62
+ *
63
+ * @since 4.1.0
64
+ *
65
+ * @param bool If the check should be skipped. Default false.
66
+ */
67
+ if ( apply_filters( 'jetpack_skip_usuable_domain_check', false ) ) {
68
+ return true;
69
+ }
70
+
71
  // None of the explicit localhosts.
72
  $forbidden_domains = array(
73
  'wordpress.com',
class.jetpack-debugger.php CHANGED
@@ -4,7 +4,11 @@ class Jetpack_Debugger {
4
 
5
  private static function is_jetpack_support_open() {
6
  try {
7
- $response = wp_remote_request( "http://jetpack.com/is-support-open" );
 
 
 
 
8
  $body = wp_remote_retrieve_body( $response );
9
  $json = json_decode( $body );
10
  return ( ( bool ) $json->is_support_open );
@@ -55,10 +59,11 @@ class Jetpack_Debugger {
55
  $debug_info .= "\r\n" . esc_html( "JETPACK__PLUGIN_DIR: " . JETPACK__PLUGIN_DIR );
56
  $debug_info .= "\r\n" . esc_html( "SITE_URL: " . site_url() );
57
  $debug_info .= "\r\n" . esc_html( "HOME_URL: " . home_url() );
58
- $debug_info .= "\r\n" . esc_html( "SERVER_PORT: " . $_SERVER['SERVER_PORT'] );
59
-
60
 
61
  foreach ( array (
 
 
 
62
  'GD_PHP_HANDLER',
63
  'HTTP_AKAMAI_ORIGIN_HOP',
64
  'HTTP_CF_CONNECTING_IP',
@@ -77,15 +82,12 @@ class Jetpack_Debugger {
77
  'HTTP_X_VARNISH',
78
  'REMOTE_ADDR'
79
  ) as $header ) {
80
- if( isset( $_SERVER[$header] ) ) {
81
- $debug_info .= "\r\n" . esc_html( 'IP HEADER: '.$header . ": " . $_SERVER[$header] );
82
- } else {
83
- $debug_info .= "\r\n" . esc_html( 'IP HEADER: '.$header . ": Not Set" );
84
  }
85
  }
86
 
87
-
88
- $debug_info .= "\r\n" . esc_html( "PROTECT_TRUSTED_HEADER: " . json_encode(get_site_option( 'trusted_ip_header' )));
89
 
90
  $debug_info .= "\r\n\r\nTEST RESULTS:\r\n\r\n";
91
  $debug_raw_info = '';
@@ -118,7 +120,11 @@ class Jetpack_Debugger {
118
  add_filter( 'http_request_timeout', array( 'Jetpack_Debugger', 'jetpack_increase_timeout' ) );
119
 
120
  $tests['SELF']['result'] = wp_remote_get( $testsite_url . $self_xml_rpc_url );
121
- $tests['SELF']['fail_message'] = esc_html__( 'It looks like your site can not communicate properly with Jetpack.', 'jetpack' );
 
 
 
 
122
 
123
  remove_filter( 'http_request_timeout', array( 'Jetpack_Debugger', 'jetpack_increase_timeout' ) );
124
 
@@ -245,13 +251,13 @@ class Jetpack_Debugger {
245
  <input name="your_email" type="text" id="your_email" value="<?php esc_html_e( $current_user->user_email, 'jetpack'); ?>" size="40">
246
  </div>
247
 
248
- <div id="toggle_debug_info" class="formbox">
249
  <p><?php _e( 'The test results and some other useful debug information will be sent to the support team. Please feel free to <a href="#">review/modify</a> this information.', 'jetpack' ); ?></p>
250
  </div>
251
 
252
- <div id="debug_info_div" class="formbox" style="display:none">
253
  <label class="h" for="debug_info"><?php esc_html_e( 'Debug Info', 'jetpack' ); ?></label>
254
- <textarea name="debug_info" cols="40" rows="7" id="debug_info"><?php echo esc_attr( $debug_info ); ?></textarea>
255
  </div>
256
 
257
  <div style="clear: both;"></div>
@@ -264,7 +270,12 @@ class Jetpack_Debugger {
264
  <div style="clear: both;"></div>
265
  </form>
266
  <?php endif; ?>
267
- </div>
 
 
 
 
 
268
  </div>
269
  <?php
270
  }
@@ -336,7 +347,7 @@ class Jetpack_Debugger {
336
  margin: 0 0 25px 0;
337
  }
338
 
339
- .formbox input[type="text"], .formbox input[type="email"], .formbox input[type="url"], .formbox textarea {
340
  border: 1px solid #e5e5e5;
341
  border-radius: 11px;
342
  box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);
@@ -385,11 +396,16 @@ class Jetpack_Debugger {
385
  display: list-item;
386
  }
387
 
 
 
 
 
388
  </style>
389
  <script type="text/javascript">
390
  jQuery( document ).ready( function($) {
391
 
392
- $('#debug_info').prepend('jQuery version: ' + jQuery.fn.jquery + "\r\n");
 
393
 
394
  $( '.jetpack-test-error .jetpack-test-heading' ).on( 'click', function() {
395
  $( this ).parents( '.jetpack-test-error' ).find( '.jetpack-test-details' ).slideToggle();
@@ -397,33 +413,38 @@ class Jetpack_Debugger {
397
  } );
398
 
399
  $( '.jetpack-show-contact-form a' ).on( 'click', function() {
400
- $('#contact-message').slideToggle();
401
  return false;
402
  } );
403
 
404
  $( '#toggle_debug_info a' ).on( 'click', function() {
405
- $('#debug_info_div').slideToggle();
 
 
 
 
 
406
  return false;
407
  } );
408
 
409
- $('form#contactme').on("submit", function(e){
410
- var form = $(this);
411
- var message = form.find('#did');
412
- var name = form.find('#your_name');
413
- var email = form.find('#your_email')
414
  var validation_error = false;
415
  if( !name.val() ) {
416
- name.parents('.formbox').addClass('error');
417
  validation_error = true;
418
  }
419
  if( !email.val() ) {
420
- email.parents('.formbox').addClass('error');
421
  validation_error = true;
422
  }
423
  if ( validation_error ) {
424
  return false;
425
  }
426
- message.val(message.val() + "\r\n\r\n----------------------------------------------\r\n\r\nDEBUG INFO:\r\n" + $('#debug_info').val() );
427
  return true;
428
  });
429
 
4
 
5
  private static function is_jetpack_support_open() {
6
  try {
7
+ $url = add_query_arg( 'ver', JETPACK__VERSION, 'https://jetpack.com/is-support-open/' );
8
+ $response = wp_remote_request( esc_url_raw( $url ) );
9
+ if ( is_wp_error( $response ) ) {
10
+ return false;
11
+ }
12
  $body = wp_remote_retrieve_body( $response );
13
  $json = json_decode( $body );
14
  return ( ( bool ) $json->is_support_open );
59
  $debug_info .= "\r\n" . esc_html( "JETPACK__PLUGIN_DIR: " . JETPACK__PLUGIN_DIR );
60
  $debug_info .= "\r\n" . esc_html( "SITE_URL: " . site_url() );
61
  $debug_info .= "\r\n" . esc_html( "HOME_URL: " . home_url() );
 
 
62
 
63
  foreach ( array (
64
+ 'HTTP_HOST',
65
+ 'SERVER_PORT',
66
+ 'HTTPS',
67
  'GD_PHP_HANDLER',
68
  'HTTP_AKAMAI_ORIGIN_HOP',
69
  'HTTP_CF_CONNECTING_IP',
82
  'HTTP_X_VARNISH',
83
  'REMOTE_ADDR'
84
  ) as $header ) {
85
+ if ( isset( $_SERVER[ $header ] ) ) {
86
+ $debug_info .= "\r\n" . esc_html( $header . ": " . $_SERVER[ $header ] );
 
 
87
  }
88
  }
89
 
90
+ $debug_info .= "\r\n" . esc_html( "PROTECT_TRUSTED_HEADER: " . json_encode( get_site_option( 'trusted_ip_header' ) ) );
 
91
 
92
  $debug_info .= "\r\n\r\nTEST RESULTS:\r\n\r\n";
93
  $debug_raw_info = '';
120
  add_filter( 'http_request_timeout', array( 'Jetpack_Debugger', 'jetpack_increase_timeout' ) );
121
 
122
  $tests['SELF']['result'] = wp_remote_get( $testsite_url . $self_xml_rpc_url );
123
+ if ( is_wp_error( $tests['SELF']['result'] ) && 0 == strpos( $tests['SELF']['result']->get_error_message(), 'Operation timed out' ) ){
124
+ $tests['SELF']['fail_message'] = esc_html__( 'Your site did not get a response from our debugging service in the expected timeframe. If you are not experiencing other issues, this could be due to a slow connection between your site and our server.', 'jetpack' );
125
+ } else {
126
+ $tests['SELF']['fail_message'] = esc_html__( 'It looks like your site can not communicate properly with Jetpack.', 'jetpack' );
127
+ }
128
 
129
  remove_filter( 'http_request_timeout', array( 'Jetpack_Debugger', 'jetpack_increase_timeout' ) );
130
 
251
  <input name="your_email" type="text" id="your_email" value="<?php esc_html_e( $current_user->user_email, 'jetpack'); ?>" size="40">
252
  </div>
253
 
254
+ <div id="toggle_debug_form_info" class="formbox">
255
  <p><?php _e( 'The test results and some other useful debug information will be sent to the support team. Please feel free to <a href="#">review/modify</a> this information.', 'jetpack' ); ?></p>
256
  </div>
257
 
258
+ <div id="debug_info_form_div" class="formbox" style="display:none">
259
  <label class="h" for="debug_info"><?php esc_html_e( 'Debug Info', 'jetpack' ); ?></label>
260
+ <textarea name="debug_info" cols="40" rows="7" id="debug_form_info"><?php echo esc_attr( $debug_info ); ?></textarea>
261
  </div>
262
 
263
  <div style="clear: both;"></div>
270
  <div style="clear: both;"></div>
271
  </form>
272
  <?php endif; ?>
273
+ </div> <!-- contact-message, hidden by default. -->
274
+ <div id="toggle_debug_info"><a href="#"><?php _e( 'View Advanced Debug Results', 'jetpack' ); ?></a></div>
275
+ <div id="debug_info_div" style="display:none">
276
+ <h4><?php esc_html_e( 'Debug Info', 'jetpack' ); ?></h4>
277
+ <div id="debug_info"><?php echo wpautop( esc_html( $debug_info ) ); ?></div>
278
+ </div>
279
  </div>
280
  <?php
281
  }
347
  margin: 0 0 25px 0;
348
  }
349
 
350
+ .formbox input[type="text"], .formbox input[type="email"], .formbox input[type="url"], .formbox textarea, #debug_info_div {
351
  border: 1px solid #e5e5e5;
352
  border-radius: 11px;
353
  box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);
396
  display: list-item;
397
  }
398
 
399
+ #debug_info_div, #toggle_debug_info, #debug_info_div p {
400
+ font-size: smaller;
401
+ }
402
+
403
  </style>
404
  <script type="text/javascript">
405
  jQuery( document ).ready( function($) {
406
 
407
+ $( '#debug_info' ).prepend( 'jQuery version: ' + jQuery.fn.jquery + "\r\n" );
408
+ $( '#debug_form_info' ).prepend( 'jQuery version: ' + jQuery.fn.jquery + "\r\n" );
409
 
410
  $( '.jetpack-test-error .jetpack-test-heading' ).on( 'click', function() {
411
  $( this ).parents( '.jetpack-test-error' ).find( '.jetpack-test-details' ).slideToggle();
413
  } );
414
 
415
  $( '.jetpack-show-contact-form a' ).on( 'click', function() {
416
+ $( '#contact-message' ).slideToggle();
417
  return false;
418
  } );
419
 
420
  $( '#toggle_debug_info a' ).on( 'click', function() {
421
+ $( '#debug_info_div' ).slideToggle();
422
+ return false;
423
+ } );
424
+
425
+ $( '#toggle_debug_form_info a' ).on( 'click', function() {
426
+ $( '#debug_info_form_div' ).slideToggle();
427
  return false;
428
  } );
429
 
430
+ $( 'form#contactme' ).on( "submit", function(e){
431
+ var form = $( this );
432
+ var message = form.find( '#did' );
433
+ var name = form.find( '#your_name' );
434
+ var email = form.find( '#your_email' )
435
  var validation_error = false;
436
  if( !name.val() ) {
437
+ name.parents( '.formbox' ).addClass( 'error' );
438
  validation_error = true;
439
  }
440
  if( !email.val() ) {
441
+ email.parents( '.formbox' ).addClass( 'error' );
442
  validation_error = true;
443
  }
444
  if ( validation_error ) {
445
  return false;
446
  }
447
+ message.val( message.val() + "\r\n\r\n----------------------------------------------\r\n\r\nDEBUG INFO:\r\n" + $('#debug_info').val() );
448
  return true;
449
  });
450
 
class.jetpack-jitm.php CHANGED
@@ -84,7 +84,7 @@ class Jetpack_JITM {
84
  <a href="#" data-module="manage" class="dismiss"><span class="genericon genericon-close"></span></a>
85
 
86
  <div class="jp-emblem">
87
- <?php echo self::get_jp_emblem(); ?>
88
  </div>
89
  <p class="msg">
90
  <?php esc_html_e( 'Reduce security risks with automated plugin updates.', 'jetpack' ); ?>
@@ -115,7 +115,7 @@ class Jetpack_JITM {
115
  <a href="#" data-module="photon" class="dismiss"><span class="genericon genericon-close"></span></a>
116
 
117
  <div class="jp-emblem">
118
- <?php echo self::get_jp_emblem(); ?>
119
  </div>
120
  <p class="msg">
121
  <?php esc_html_e( 'Speed up your photos and save bandwidth costs by using a free content delivery network.', 'jetpack' ); ?>
@@ -144,7 +144,7 @@ class Jetpack_JITM {
144
  <a href="#" data-module="photon" class="dismiss"><span class="genericon genericon-close"></span></a>
145
 
146
  <div class="jp-emblem">
147
- <?php echo self::get_jp_emblem(); ?>
148
  </div>
149
  <p class="msg">
150
  <?php esc_html_e( 'Let Jetpack deliver your images optimized and faster than ever.', 'jetpack' ); ?>
@@ -212,7 +212,7 @@ class Jetpack_JITM {
212
  <a href="#" data-module="manage-pi" class="dismiss"><span class="genericon genericon-close"></span></a>
213
 
214
  <div class="jp-emblem">
215
- <?php echo self::get_jp_emblem(); ?>
216
  </div>
217
  <?php if ( ! $manage_active ) : ?>
218
  <p class="msg">
@@ -254,7 +254,7 @@ class Jetpack_JITM {
254
  <div class="jp-jitm">
255
  <a href="#" data-module="editor" class="dismiss"><span class="genericon genericon-close"></span></a>
256
  <div class="jp-emblem">
257
- <?php echo self::get_jp_emblem(); ?>
258
  </div>
259
  <p class="msg">
260
  <?php esc_html_e( 'Try the brand new editor.', 'jetpack' ); ?>
@@ -285,7 +285,7 @@ class Jetpack_JITM {
285
  <a href="#" data-module="stats" class="dismiss"><span class="genericon genericon-close"></span></a>
286
 
287
  <div class="jp-emblem">
288
- <?php echo self::get_jp_emblem(); ?>
289
  </div>
290
  <p class="msg">
291
  <?php esc_html_e( 'Track detailed stats on this post and the rest of your site.', 'jetpack' ); ?>
@@ -453,17 +453,6 @@ class Jetpack_JITM {
453
  // so if it's not an array, it means no JITM was dismissed
454
  return is_array( self::$jetpack_hide_jitm );
455
  }
456
-
457
- /**
458
- * Return string containing the Jetpack logo.
459
- *
460
- * @since 3.9.0
461
- *
462
- * @return string
463
- */
464
- function get_jp_emblem() {
465
- return '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0" y="0" viewBox="0 0 172.9 172.9" enable-background="new 0 0 172.9 172.9" xml:space="preserve"> <path d="M86.4 0C38.7 0 0 38.7 0 86.4c0 47.7 38.7 86.4 86.4 86.4s86.4-38.7 86.4-86.4C172.9 38.7 134.2 0 86.4 0zM83.1 106.6l-27.1-6.9C49 98 45.7 90.1 49.3 84l33.8-58.5V106.6zM124.9 88.9l-33.8 58.5V66.3l27.1 6.9C125.1 74.9 128.4 82.8 124.9 88.9z" /></svg>';
466
- }
467
  }
468
  /**
469
  * Filter to turn off all just in time messages
84
  <a href="#" data-module="manage" class="dismiss"><span class="genericon genericon-close"></span></a>
85
 
86
  <div class="jp-emblem">
87
+ <?php echo Jetpack::get_jp_emblem(); ?>
88
  </div>
89
  <p class="msg">
90
  <?php esc_html_e( 'Reduce security risks with automated plugin updates.', 'jetpack' ); ?>
115
  <a href="#" data-module="photon" class="dismiss"><span class="genericon genericon-close"></span></a>
116
 
117
  <div class="jp-emblem">
118
+ <?php echo Jetpack::get_jp_emblem(); ?>
119
  </div>
120
  <p class="msg">
121
  <?php esc_html_e( 'Speed up your photos and save bandwidth costs by using a free content delivery network.', 'jetpack' ); ?>
144
  <a href="#" data-module="photon" class="dismiss"><span class="genericon genericon-close"></span></a>
145
 
146
  <div class="jp-emblem">
147
+ <?php echo Jetpack::get_jp_emblem(); ?>
148
  </div>
149
  <p class="msg">
150
  <?php esc_html_e( 'Let Jetpack deliver your images optimized and faster than ever.', 'jetpack' ); ?>
212
  <a href="#" data-module="manage-pi" class="dismiss"><span class="genericon genericon-close"></span></a>
213
 
214
  <div class="jp-emblem">
215
+ <?php echo Jetpack::get_jp_emblem(); ?>
216
  </div>
217
  <?php if ( ! $manage_active ) : ?>
218
  <p class="msg">
254
  <div class="jp-jitm">
255
  <a href="#" data-module="editor" class="dismiss"><span class="genericon genericon-close"></span></a>
256
  <div class="jp-emblem">
257
+ <?php echo Jetpack::get_jp_emblem(); ?>
258
  </div>
259
  <p class="msg">
260
  <?php esc_html_e( 'Try the brand new editor.', 'jetpack' ); ?>
285
  <a href="#" data-module="stats" class="dismiss"><span class="genericon genericon-close"></span></a>
286
 
287
  <div class="jp-emblem">
288
+ <?php echo Jetpack::get_jp_emblem(); ?>
289
  </div>
290
  <p class="msg">
291
  <?php esc_html_e( 'Track detailed stats on this post and the rest of your site.', 'jetpack' ); ?>
453
  // so if it's not an array, it means no JITM was dismissed
454
  return is_array( self::$jetpack_hide_jitm );
455
  }
 
 
 
 
 
 
 
 
 
 
 
456
  }
457
  /**
458
  * Filter to turn off all just in time messages
class.jetpack-signature.php CHANGED
@@ -1,5 +1,8 @@
1
  <?php
2
 
 
 
 
3
  defined( 'JETPACK_SIGNATURE__HTTP_PORT' ) or define( 'JETPACK_SIGNATURE__HTTP_PORT' , 80 );
4
  defined( 'JETPACK_SIGNATURE__HTTPS_PORT' ) or define( 'JETPACK_SIGNATURE__HTTPS_PORT', 443 );
5
  defined( 'JETPACK__WPCOM_JSON_API_HOST' ) or define( 'JETPACK__WPCOM_JSON_API_HOST', 'public-api.wordpress.com' );
@@ -32,10 +35,26 @@ class Jetpack_Signature {
32
  }
33
  }
34
 
 
 
35
  if ( is_ssl() ) {
36
- $port = JETPACK_SIGNATURE__HTTPS_PORT == $_SERVER['SERVER_PORT'] ? '' : $_SERVER['SERVER_PORT'];
 
 
 
 
 
 
 
 
 
37
  } else {
38
- $port = JETPACK_SIGNATURE__HTTP_PORT == $_SERVER['SERVER_PORT'] ? '' : $_SERVER['SERVER_PORT'];
 
 
 
 
 
39
  }
40
 
41
  $url = "{$scheme}://{$_SERVER['HTTP_HOST']}:{$port}" . stripslashes( $_SERVER['REQUEST_URI'] );
1
  <?php
2
 
3
+ // These constants can be set in wp-config.php to ensure sites behind proxies will still work.
4
+ // Setting these constants, though, is *not* the preferred method. It's better to configure
5
+ // the proxy to send the X-Forwarded-Port header.
6
  defined( 'JETPACK_SIGNATURE__HTTP_PORT' ) or define( 'JETPACK_SIGNATURE__HTTP_PORT' , 80 );
7
  defined( 'JETPACK_SIGNATURE__HTTPS_PORT' ) or define( 'JETPACK_SIGNATURE__HTTPS_PORT', 443 );
8
  defined( 'JETPACK__WPCOM_JSON_API_HOST' ) or define( 'JETPACK__WPCOM_JSON_API_HOST', 'public-api.wordpress.com' );
35
  }
36
  }
37
 
38
+ $host_port = isset( $_SERVER['HTTP_X_FORWARDED_PORT'] ) ? $_SERVER['HTTP_X_FORWARDED_PORT'] : $_SERVER['SERVER_PORT'];
39
+
40
  if ( is_ssl() ) {
41
+ // 443: Standard Port
42
+ // 80: Assume we're behind a proxy without X-Forwarded-Port. Hardcoding "80" here means most sites
43
+ // with SSL termination proxies (self-served, Cloudflare, etc.) don't need to fiddle with
44
+ // the JETPACK_SIGNATURE__HTTPS_PORT constant. The code also implies we can't talk to a
45
+ // site at https://example.com:80/ (which would be a strange configuration).
46
+ // JETPACK_SIGNATURE__HTTPS_PORT: Set this constant in wp-config.php to the backend webserver's port
47
+ // if the site is behind a proxy running on port 443 without
48
+ // X-Forwarded-Port and the backend's port is *not* 80. It's better,
49
+ // though, to configure the proxy to send X-Forwarded-Port.
50
+ $port = in_array( $host_port, array( 443, 80, JETPACK_SIGNATURE__HTTPS_PORT ) ) ? '' : $host_port;
51
  } else {
52
+ // 80: Standard Port
53
+ // JETPACK_SIGNATURE__HTTPS_PORT: Set this constant in wp-config.php to the backend webserver's port
54
+ // if the site is behind a proxy running on port 80 without
55
+ // X-Forwarded-Port. It's better, though, to configure the proxy to
56
+ // send X-Forwarded-Port.
57
+ $port = in_array( $host_port, array( 80, JETPACK_SIGNATURE__HTTP_PORT ) ) ? '' : $host_port;
58
  }
59
 
60
  $url = "{$scheme}://{$_SERVER['HTTP_HOST']}:{$port}" . stripslashes( $_SERVER['REQUEST_URI'] );
class.jetpack-tracks.php CHANGED
@@ -58,7 +58,7 @@ class JetpackTracking {
58
  self::record_user_event( 'module_deactivated', array( 'module' => $module ) );
59
  }
60
 
61
- static function record_user_event( $event_type, $data ) {
62
 
63
  $user = wp_get_current_user();
64
  $site_url = get_option( 'siteurl' );
58
  self::record_user_event( 'module_deactivated', array( 'module' => $module ) );
59
  }
60
 
61
+ static function record_user_event( $event_type, $data= array() ) {
62
 
63
  $user = wp_get_current_user();
64
  $site_url = get_option( 'siteurl' );
class.jetpack.php CHANGED
@@ -317,8 +317,6 @@ class Jetpack {
317
 
318
  self::$instance->plugin_upgrade();
319
 
320
- add_action( 'init', array( __CLASS__, 'perform_security_reporting' ) );
321
-
322
  }
323
 
324
  return self::$instance;
@@ -346,6 +344,8 @@ class Jetpack {
346
  * @since 3.3.0
347
  */
348
  do_action( 'jetpack_sync_all_registered_options' );
 
 
349
  }
350
  }
351
  }
@@ -536,8 +536,13 @@ class Jetpack {
536
  add_action( 'wp_ajax_jetpack-sync-reindex-trigger', array( $this, 'sync_reindex_trigger' ) );
537
  add_action( 'wp_ajax_jetpack-sync-reindex-status', array( $this, 'sync_reindex_status' ) );
538
 
 
 
 
539
  // Jump Start AJAX callback function
540
  add_action( 'wp_ajax_jetpack_jumpstart_ajax', array( $this, 'jetpack_jumpstart_ajax_callback' ) );
 
 
541
  add_action( 'update_option', array( $this, 'jumpstart_has_updated_module_option' ) );
542
 
543
  // Identity Crisis AJAX callback function
@@ -906,28 +911,10 @@ class Jetpack {
906
  if ( Jetpack::is_development_mode() ) {
907
  $caps = array( 'manage_options' );
908
  break;
 
 
909
  }
910
-
911
- // Don't ever show to subscribers, but allow access to the page if they're trying to unlink.
912
- if ( ! current_user_can( 'edit_posts' ) ) {
913
- if ( isset( $_GET['redirect'] ) && 'sub-unlink' == $_GET['redirect'] ) {
914
- // We need this in order to unlink the user.
915
- $this->admin_page_load();
916
- }
917
- if ( ! wp_verify_nonce( 'jetpack-unlink' ) ) {
918
- $caps = array( 'do_not_allow' );
919
- break;
920
- }
921
- }
922
-
923
- if ( ! self::is_active() && ! current_user_can( 'jetpack_connect' ) ) {
924
- $caps = array( 'do_not_allow' );
925
- break;
926
- }
927
- /**
928
- * Pass through. If it's not development mode, these should match the admin page.
929
- * Let users disconnect if it's development mode, just in case things glitch.
930
- */
931
  case 'jetpack_connect_user' :
932
  if ( Jetpack::is_development_mode() ) {
933
  $caps = array( 'do_not_allow' );
@@ -1015,6 +1002,12 @@ class Jetpack {
1015
  require_once( JETPACK__PLUGIN_DIR . '_inc/genericons.php' );
1016
  jetpack_register_genericons();
1017
 
 
 
 
 
 
 
1018
  if ( ! wp_style_is( 'jetpack-icons', 'registered' ) )
1019
  wp_register_style( 'jetpack-icons', plugins_url( 'css/jetpack-icons.min.css', JETPACK__PLUGIN_FILE ), false, JETPACK__VERSION );
1020
  }
@@ -1488,7 +1481,7 @@ class Jetpack {
1488
  /**
1489
  * Filters Jetpack's development mode.
1490
  *
1491
- * @see http://jetpack.com/support/development-mode/
1492
  *
1493
  * @since 2.2.1
1494
  *
@@ -1509,19 +1502,19 @@ class Jetpack {
1509
  $notice = sprintf(
1510
  /* translators: %s is a URL */
1511
  __( 'In <a href="%s" target="_blank">Development Mode</a>, via the JETPACK_DEV_DEBUG constant being defined in wp-config.php or elsewhere.', 'jetpack' ),
1512
- 'http://jetpack.com/support/development-mode/'
1513
  );
1514
  } elseif ( site_url() && false === strpos( site_url(), '.' ) ) {
1515
  $notice = sprintf(
1516
  /* translators: %s is a URL */
1517
  __( 'In <a href="%s" target="_blank">Development Mode</a>, via site URL lacking a dot (e.g. http://localhost).', 'jetpack' ),
1518
- 'http://jetpack.com/support/development-mode/'
1519
  );
1520
  } else {
1521
  $notice = sprintf(
1522
  /* translators: %s is a URL */
1523
  __( 'In <a href="%s" target="_blank">Development Mode</a>, via the jetpack_development_mode filter.', 'jetpack' ),
1524
- 'http://jetpack.com/support/development-mode/'
1525
  );
1526
  }
1527
 
@@ -2596,6 +2589,9 @@ class Jetpack {
2596
  $modules[ $index ]['short_description'] = $i18n_module['description'];
2597
  }
2598
  }
 
 
 
2599
  return $modules;
2600
  }
2601
 
@@ -3139,6 +3135,15 @@ p {
3139
 
3140
  Jetpack_Options::update_option( 'user_tokens', $tokens );
3141
 
 
 
 
 
 
 
 
 
 
3142
  return true;
3143
  }
3144
 
@@ -3330,9 +3335,6 @@ p {
3330
  // Show the notice on the Dashboard only for now
3331
 
3332
  add_action( 'load-index.php', array( $this, 'prepare_manage_jetpack_notice' ) );
3333
-
3334
- // Identity crisis notices
3335
- add_action( 'jetpack_notices', array( $this, 'alert_identity_crisis' ) );
3336
  }
3337
 
3338
  // If the plugin has just been disconnected from WP.com, show the survey notice
@@ -3340,8 +3342,8 @@ p {
3340
  add_action( 'jetpack_notices', array( $this, 'disconnect_survey_notice' ) );
3341
  }
3342
 
3343
- if ( current_user_can( 'manage_options' ) && 'ALWAYS' == JETPACK_CLIENT__HTTPS && ! self::permit_ssl() ) {
3344
- add_action( 'admin_notices', array( $this, 'alert_required_ssl_fail' ) );
3345
  }
3346
 
3347
  add_action( 'load-plugins.php', array( $this, 'intercept_plugin_error_scrape_init' ) );
@@ -3358,6 +3360,11 @@ p {
3358
 
3359
  // Jetpack Manage Activation Screen from .com
3360
  Jetpack::module_configuration_activation_screen( 'manage', array( $this, 'manage_activate_screen' ) );
 
 
 
 
 
3361
  }
3362
 
3363
  function admin_body_class( $admin_body_class = '' ) {
@@ -3609,8 +3616,8 @@ p {
3609
  // Help Sidebar
3610
  $current_screen->set_help_sidebar(
3611
  '<p><strong>' . __( 'For more information:', 'jetpack' ) . '</strong></p>' .
3612
- '<p><a href="http://jetpack.com/faq/" target="_blank">' . __( 'Jetpack FAQ', 'jetpack' ) . '</a></p>' .
3613
- '<p><a href="http://jetpack.com/support/" target="_blank">' . __( 'Jetpack Support', 'jetpack' ) . '</a></p>' .
3614
  '<p><a href="' . Jetpack::admin_url( array( 'page' => 'jetpack-debugger' ) ) .'">' . __( 'Jetpack Debugging Center', 'jetpack' ) . '</a></p>'
3615
  );
3616
  }
@@ -3694,16 +3701,17 @@ p {
3694
 
3695
  $dismiss_and_deactivate_url = wp_nonce_url( Jetpack::admin_url( '?page=jetpack&jetpack-notice=dismiss' ), 'jetpack-deactivate' );
3696
  ?>
3697
- <div id="message" class="updated jetpack-message jp-banner" style="display:block !important;">
3698
- <a class="jp-banner__dismiss" href="<?php echo esc_url( $dismiss_and_deactivate_url ); ?>" title="<?php esc_attr_e( 'Dismiss this notice and deactivate Jetpack.', 'jetpack' ); ?>"></a>
3699
  <?php if ( in_array( Jetpack_Options::get_option( 'activated' ) , array( 1, 2, 3 ) ) ) : ?>
3700
- <div class="jp-banner__content is-connection">
3701
- <h2><?php _e( 'Your Jetpack is almost ready!', 'jetpack' ); ?></h2>
3702
- <p><?php _e( 'Connect now to enable features like Stats, Likes, and Social Sharing.', 'jetpack' ); ?></p>
3703
- </div>
3704
- <div class="jp-banner__action-container is-connection">
3705
- <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>
3706
- </div>
 
3707
  <?php else : ?>
3708
  <div class="jp-banner__content">
3709
  <h2><?php _e( 'Jetpack is installed!', 'jetpack' ) ?></h2>
@@ -3747,15 +3755,16 @@ p {
3747
  */
3748
 
3749
  ?>
3750
- <div id="message" class="updated jetpack-message jp-banner is-opt-in" style="display:block !important;">
3751
- <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>
3752
- <div class="jp-banner__content">
3753
- <h2><?php esc_html_e( 'New in Jetpack: Centralized Site Management', 'jetpack' ); ?></h2>
3754
- <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>
3755
- </div>
3756
- <div class="jp-banner__action-container is-opt-in">
3757
- <a href="<?php echo esc_url( $opt_in_url ); ?>" class="jp-banner__button" id="wpcom-connect"><?php _e( 'Activate now', 'jetpack' ); ?></a>
3758
- </div>
 
3759
  </div>
3760
  <?php
3761
  }
@@ -3780,7 +3789,7 @@ p {
3780
  ?>
3781
  <div class="wrap">
3782
  <div id="message" class="jetpack-message is-opt-in">
3783
- <?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' ); ?>
3784
  </div>
3785
  </div>
3786
  <?php
@@ -3937,9 +3946,14 @@ p {
3937
  wp_redirect( $connect_url );
3938
  exit;
3939
  } else {
3940
- Jetpack::state( 'message', 'already_authorized' );
3941
- wp_safe_redirect( Jetpack::admin_url() );
3942
- exit;
 
 
 
 
 
3943
  }
3944
  }
3945
 
@@ -4069,7 +4083,7 @@ p {
4069
  $this->error = __( 'Cheatin&#8217; uh?', 'jetpack' );
4070
  break;
4071
  case 'access_denied' :
4072
- $this->error = sprintf( __( 'Would you mind telling us why you did not complete the Jetpack connection in this <a href="%s">1 question survey</a>?', 'jetpack' ), 'http://jetpack.com/cancelled-connection/' ) . '<br /><small>' . __( 'A Jetpack connection is required for our free security and traffic features to work.', 'jetpack' ) . '</small>';
4073
  break;
4074
  case 'wrong_state' :
4075
  $this->error = __( 'You need to stay logged in to your WordPress blog while you authorize Jetpack.', 'jetpack' );
@@ -4595,7 +4609,10 @@ p {
4595
  'admin.php?page=jetpack-settings' ), $url );
4596
  }
4597
  } else {
4598
- require_once JETPACK__GLOTPRESS_LOCALES_PATH;
 
 
 
4599
  $role = $this->translate_current_user_to_role();
4600
  $signed_role = $this->sign_role( $role );
4601
 
@@ -4603,8 +4620,6 @@ p {
4603
 
4604
  $redirect = $redirect ? esc_url_raw( $redirect ) : esc_url_raw( menu_page_url( 'jetpack', false ) );
4605
 
4606
- $gp_locale = GP_Locales::by_field( 'wp_locale', get_locale() );
4607
-
4608
  if( isset( $_REQUEST['is_multisite'] ) ) {
4609
  $redirect = Jetpack_Network::init()->get_url( 'network_admin_page' );
4610
  }
@@ -4652,7 +4667,7 @@ p {
4652
  }
4653
 
4654
  if ( isset( $_GET['calypso_env'] ) ) {
4655
- $url = add_query_arg( 'calypso_env', $_GET['calypso_env'], $url );
4656
  }
4657
 
4658
  return $raw ? $url : esc_url( $url );
@@ -4842,7 +4857,7 @@ p {
4842
 
4843
  $activate_url = Jetpack::init()->opt_in_jetpack_manage_url();
4844
 
4845
- $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' );
4846
 
4847
  // $extra = __( 'To use Site Management, you need to first activate JSON API to allow remote management of your site. ', 'jetpack' );
4848
  } ?>
@@ -4894,6 +4909,15 @@ p {
4894
  exit;
4895
  }
4896
 
 
 
 
 
 
 
 
 
 
4897
  /* Client API */
4898
 
4899
  /**
@@ -4921,13 +4945,8 @@ p {
4921
  // default : case 'AUTO' :
4922
  }
4923
 
4924
- // Yay! Your host is good!
4925
- if ( self::permit_ssl() && wp_http_supports( array( 'ssl' => true ) ) ) {
4926
- return $url;
4927
- }
4928
-
4929
- // Boo! Your host is bad and makes Jetpack cry!
4930
- return set_url_scheme( $url, 'http' );
4931
  }
4932
 
4933
  /**
@@ -4939,12 +4958,14 @@ p {
4939
  public static function permit_ssl( $force_recheck = false ) {
4940
  // Do some fancy tests to see if ssl is being supported
4941
  if ( $force_recheck || false === ( $ssl = get_transient( 'jetpack_https_test' ) ) ) {
 
4942
  if ( 'https' !== substr( JETPACK__API_BASE, 0, 5 ) ) {
4943
  $ssl = 0;
4944
  } else {
4945
  switch ( JETPACK_CLIENT__HTTPS ) {
4946
  case 'NEVER':
4947
  $ssl = 0;
 
4948
  break;
4949
  case 'ALWAYS':
4950
  case 'AUTO':
@@ -4955,32 +4976,77 @@ p {
4955
 
4956
  // If it's not 'NEVER', test to see
4957
  if ( $ssl ) {
4958
- $response = wp_remote_get( JETPACK__API_BASE . 'test/1/' );
4959
- if ( is_wp_error( $response ) || ( 'OK' !== wp_remote_retrieve_body( $response ) ) ) {
4960
  $ssl = 0;
 
 
 
 
 
 
 
 
 
 
4961
  }
4962
  }
4963
  }
4964
  set_transient( 'jetpack_https_test', $ssl, DAY_IN_SECONDS );
 
4965
  }
4966
 
4967
  return (bool) $ssl;
4968
  }
4969
 
4970
  /*
4971
- * Displays an admin_notice, alerting the user to their JETPACK_CLIENT__HTTPS constant being 'ALWAYS' but SSL isn't working.
4972
  */
4973
- public function alert_required_ssl_fail() {
4974
  if ( ! current_user_can( 'manage_options' ) )
4975
  return;
 
 
4976
  ?>
4977
 
4978
- <div id="message" class="error jetpack-message jp-identity-crisis">
4979
  <div class="jp-banner__content">
4980
- <h2><?php _e( 'Something is being cranky!', 'jetpack' ); ?></h2>
4981
- <p><?php _e( 'Your site is configured to only permit SSL connections to Jetpack, but SSL connections don\'t seem to be functional!', 'jetpack' ); ?></p>
 
 
 
 
 
 
 
 
 
 
4982
  </div>
4983
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4984
 
4985
  <?php
4986
  }
@@ -5731,11 +5797,11 @@ p {
5731
  wp_die( $die_error );
5732
  } else if ( is_wp_error( $signature ) ) {
5733
  wp_die( $die_error );
5734
- } else if ( $signature !== $_GET['signature'] ) {
5735
  if ( is_ssl() ) {
5736
  // If we signed an HTTP request on the Jetpack Servers, but got redirected to HTTPS by the local blog, check the HTTP signature as well
5737
  $signature = $jetpack_signature->sign_current_request( array( 'scheme' => 'http', 'body' => null, 'method' => 'GET' ) );
5738
- if ( ! $signature || is_wp_error( $signature ) || $signature !== $_GET['signature'] ) {
5739
  wp_die( $die_error );
5740
  }
5741
  } else {
@@ -6237,135 +6303,6 @@ p {
6237
  <?php
6238
  }
6239
 
6240
- /**
6241
- * Displays an admin_notice, alerting the user to an identity crisis.
6242
- */
6243
- public function alert_identity_crisis() {
6244
- // @todo temporary killing of feature in 3.8.1 as it revealed a number of scenarios not foreseen.
6245
- if ( ! Jetpack::is_development_version() ) {
6246
- return;
6247
- }
6248
-
6249
- // @todo temporary copout for dealing with domain mapping
6250
- // @see https://github.com/Automattic/jetpack/issues/2702
6251
- if ( is_multisite() && defined( 'SUNRISE' ) && ! Jetpack::is_development_version() ) {
6252
- return;
6253
- }
6254
-
6255
- if ( ! current_user_can( 'jetpack_disconnect' ) ) {
6256
- return;
6257
- }
6258
-
6259
- if ( ! $errors = self::check_identity_crisis() ) {
6260
- return;
6261
- }
6262
-
6263
- // Only show on dashboard and jetpack pages
6264
- $screen = get_current_screen();
6265
- if ( 'dashboard' !== $screen->base && ! did_action( 'jetpack_notices' ) ) {
6266
- return;
6267
- }
6268
-
6269
- // Include the js!
6270
- $ajax_nonce = wp_create_nonce( 'resolve-identity-crisis' );
6271
- $this->identity_crisis_js( $ajax_nonce );
6272
-
6273
- // Include the CSS!
6274
- if ( ! wp_script_is( 'jetpack', 'done' ) ) {
6275
- $this->admin_banner_styles();
6276
- }
6277
-
6278
- if ( ! array_key_exists( 'error_code', $errors ) ) {
6279
- $key = 'siteurl';
6280
- if ( ! $errors[ $key ] ) {
6281
- $key = 'home';
6282
- }
6283
- } else {
6284
- $key = 'error_code';
6285
- // 401 is the only error we care about. Any other errors should not trigger the alert.
6286
- if ( 401 !== $errors[ $key ] ) {
6287
- return;
6288
- }
6289
- }
6290
-
6291
- ?>
6292
-
6293
- <style>
6294
- .jp-identity-crisis .jp-btn-group {
6295
- margin: 15px 0;
6296
- }
6297
- .jp-identity-crisis strong {
6298
- color: #518d2a;
6299
- }
6300
- .jp-identity-crisis.dismiss {
6301
- display: none;
6302
- }
6303
- .jp-identity-crisis .button {
6304
- margin-right: 4px;
6305
- }
6306
- </style>
6307
-
6308
- <div id="message" class="error jetpack-message jp-identity-crisis stay-visible">
6309
- <div class="service-mark"></div>
6310
- <div class="jp-id-banner__content">
6311
- <!-- <h3 class="banner-title"><?php _e( 'Something\'s not quite right with your Jetpack connection! Let\'s fix that.', 'jetpack' ); ?></h3> -->
6312
-
6313
- <div class="jp-id-crisis-question" id="jp-id-crisis-question-1">
6314
- <?php
6315
- // 401 means that this site has been disconnected from wpcom, but the remote site still thinks it's connected.
6316
- if ( 'error_code' == $key && '401' == $errors[ $key ] ) : ?>
6317
- <div class="banner-content">
6318
- <p><?php
6319
- /* translators: %s is a URL */
6320
- 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/' );
6321
- ?></p>
6322
- </div>
6323
- <div class="jp-btn-group">
6324
- <a href="#" class="reset-connection"><?php _e( 'Reset the connection', 'jetpack' ); ?></a>
6325
- <span class="idc-separator">|</span>
6326
- <a href="<?php echo esc_url( wp_nonce_url( Jetpack::admin_url( 'jetpack-notice=dismiss' ), 'jetpack-deactivate' ) ); ?>"><?php _e( 'Deactivate Jetpack', 'jetpack' ); ?></a>
6327
- </div>
6328
- <?php else : ?>
6329
- <div class="banner-content">
6330
- <p><?php printf( __( 'It looks like you may have changed your domain. Is <strong>%1$s</strong> still your site\'s domain, or have you updated it to <strong> %2$s </strong>?', 'jetpack' ), $errors[ $key ], (string) get_option( $key ) ); ?></p>
6331
- </div>
6332
- <div class="jp-btn-group">
6333
- <a href="#" class="regular site-moved"><?php printf( __( '%s is now my domain.', 'jetpack' ), $errors[ $key ] ); ?></a> <span class="idc-separator">|</span> <a href="#" class="site-not-moved" ><?php printf( __( '%s is still my domain.', 'jetpack' ), (string) get_option( $key ) ); ?></a>
6334
- <span class="spinner"></span>
6335
- </div>
6336
- <?php endif ; ?>
6337
- </div>
6338
-
6339
- <div class="jp-id-crisis-question" id="jp-id-crisis-question-2" style="display: none;">
6340
- <div class="banner-content">
6341
- <p><?php printf(
6342
- /* translators: %1$s, %2$s and %3$s are URLs */
6343
- __(
6344
- 'Are <strong> %2$s </strong> and <strong> %1$s </strong> two completely separate websites? If so we should create a new connection, which will reset your followers and linked services. <a href="%3$s"><em>What does this mean?</em></a>',
6345
- 'jetpack'
6346
- ),
6347
- $errors[ $key ],
6348
- (string) get_option( $key ),
6349
- 'https://jetpack.com/support/what-does-resetting-the-connection-mean/'
6350
- ); ?></p>
6351
- </div>
6352
- <div class="jp-btn-group">
6353
- <a href="#" class="reset-connection"><?php _e( 'Reset the connection', 'jetpack' ); ?></a> <span class="idc-separator">|</span>
6354
- <a href="#" class="is-dev-env"><?php _e( 'This is a development environment', 'jetpack' ); ?></a> <span class="idc-separator">|</span>
6355
- <a href="https://jetpack.com/contact-support/" class="contact-support"><?php _e( 'Submit a support ticket', 'jetpack' ); ?></a>
6356
- <span class="spinner"></span>
6357
- </div>
6358
- </div>
6359
-
6360
- <div class="jp-id-crisis-success" id="jp-id-crisis-success" style="display: none;">
6361
- <h3 class="success-notice"><?php printf( __( 'Thanks for taking the time to sort things out. We&#039;ve updated our records accordingly!', 'jetpack' ) ); ?></h3>
6362
- </div>
6363
- </div>
6364
- </div>
6365
-
6366
- <?php
6367
- }
6368
-
6369
  /**
6370
  * Maybe Use a .min.css stylesheet, maybe not.
6371
  *
@@ -6525,6 +6462,7 @@ p {
6525
  'wpl_sharing_2014_1' => null,
6526
  'jetpack-tools-to-include' => 'jetpack_tools_to_include',
6527
  'jetpack_identity_crisis_options_to_check' => null,
 
6528
  );
6529
 
6530
  // This is a silly loop depth. Better way?
@@ -7014,11 +6952,6 @@ p {
7014
  <?php endif; ?>
7015
  </div>
7016
 
7017
-
7018
- <?php if ( ! current_user_can( 'edit_posts' ) && self::is_user_connected() ) : ?>
7019
- <div style="width: 100%; text-align: center; padding-top: 20px; clear: both;"><a class="button" title="<?php esc_attr_e( 'Unlink your account from WordPress.com', 'jetpack' ); ?>" href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'unlink', 'redirect' => 'sub-unlink' ), admin_url( 'index.php' ) ), 'jetpack-unlink' ) ); ?>"><?php esc_html_e( 'Unlink your account from WordPress.com', 'jetpack' ); ?></a></div>
7020
- <?php endif; ?>
7021
-
7022
  </footer>
7023
  <?php
7024
  }
@@ -7095,4 +7028,56 @@ p {
7095
  return true;
7096
  }
7097
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7098
  }
317
 
318
  self::$instance->plugin_upgrade();
319
 
 
 
320
  }
321
 
322
  return self::$instance;
344
  * @since 3.3.0
345
  */
346
  do_action( 'jetpack_sync_all_registered_options' );
347
+
348
+ Jetpack::maybe_set_version_option();
349
  }
350
  }
351
  }
536
  add_action( 'wp_ajax_jetpack-sync-reindex-trigger', array( $this, 'sync_reindex_trigger' ) );
537
  add_action( 'wp_ajax_jetpack-sync-reindex-status', array( $this, 'sync_reindex_status' ) );
538
 
539
+ // returns HTTPS support status
540
+ add_action( 'wp_ajax_jetpack-recheck-ssl', array( $this, 'ajax_recheck_ssl' ) );
541
+
542
  // Jump Start AJAX callback function
543
  add_action( 'wp_ajax_jetpack_jumpstart_ajax', array( $this, 'jetpack_jumpstart_ajax_callback' ) );
544
+
545
+ // If any module option is updated before Jump Start is dismissed, hide Jump Start.
546
  add_action( 'update_option', array( $this, 'jumpstart_has_updated_module_option' ) );
547
 
548
  // Identity Crisis AJAX callback function
911
  if ( Jetpack::is_development_mode() ) {
912
  $caps = array( 'manage_options' );
913
  break;
914
+ } else {
915
+ $caps = array( 'read' );
916
  }
917
+ break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
918
  case 'jetpack_connect_user' :
919
  if ( Jetpack::is_development_mode() ) {
920
  $caps = array( 'do_not_allow' );
1002
  require_once( JETPACK__PLUGIN_DIR . '_inc/genericons.php' );
1003
  jetpack_register_genericons();
1004
 
1005
+ /**
1006
+ * Register the social logos
1007
+ */
1008
+ require_once( JETPACK__PLUGIN_DIR . '_inc/social-logos.php' );
1009
+ jetpack_register_social_logos();
1010
+
1011
  if ( ! wp_style_is( 'jetpack-icons', 'registered' ) )
1012
  wp_register_style( 'jetpack-icons', plugins_url( 'css/jetpack-icons.min.css', JETPACK__PLUGIN_FILE ), false, JETPACK__VERSION );
1013
  }
1481
  /**
1482
  * Filters Jetpack's development mode.
1483
  *
1484
+ * @see https://jetpack.com/support/development-mode/
1485
  *
1486
  * @since 2.2.1
1487
  *
1502
  $notice = sprintf(
1503
  /* translators: %s is a URL */
1504
  __( 'In <a href="%s" target="_blank">Development Mode</a>, via the JETPACK_DEV_DEBUG constant being defined in wp-config.php or elsewhere.', 'jetpack' ),
1505
+ 'https://jetpack.com/support/development-mode/'
1506
  );
1507
  } elseif ( site_url() && false === strpos( site_url(), '.' ) ) {
1508
  $notice = sprintf(
1509
  /* translators: %s is a URL */
1510
  __( 'In <a href="%s" target="_blank">Development Mode</a>, via site URL lacking a dot (e.g. http://localhost).', 'jetpack' ),
1511
+ 'https://jetpack.com/support/development-mode/'
1512
  );
1513
  } else {
1514
  $notice = sprintf(
1515
  /* translators: %s is a URL */
1516
  __( 'In <a href="%s" target="_blank">Development Mode</a>, via the jetpack_development_mode filter.', 'jetpack' ),
1517
+ 'https://jetpack.com/support/development-mode/'
1518
  );
1519
  }
1520
 
2589
  $modules[ $index ]['short_description'] = $i18n_module['description'];
2590
  }
2591
  }
2592
+ if ( Jetpack::is_module_active( 'manage' ) ) {
2593
+ unset( $modules['manage'] );
2594
+ }
2595
  return $modules;
2596
  }
2597
 
3135
 
3136
  Jetpack_Options::update_option( 'user_tokens', $tokens );
3137
 
3138
+ /**
3139
+ * Fires after the current user has been unlinked from WordPress.com.
3140
+ *
3141
+ * @since 4.1.0
3142
+ *
3143
+ * @param int $user_id The current user's ID.
3144
+ */
3145
+ do_action( 'jetpack_unlinked_user', $user_id );
3146
+
3147
  return true;
3148
  }
3149
 
3335
  // Show the notice on the Dashboard only for now
3336
 
3337
  add_action( 'load-index.php', array( $this, 'prepare_manage_jetpack_notice' ) );
 
 
 
3338
  }
3339
 
3340
  // If the plugin has just been disconnected from WP.com, show the survey notice
3342
  add_action( 'jetpack_notices', array( $this, 'disconnect_survey_notice' ) );
3343
  }
3344
 
3345
+ if ( current_user_can( 'manage_options' ) && 'AUTO' == JETPACK_CLIENT__HTTPS && ! self::permit_ssl() ) {
3346
+ add_action( 'jetpack_notices', array( $this, 'alert_auto_ssl_fail' ) );
3347
  }
3348
 
3349
  add_action( 'load-plugins.php', array( $this, 'intercept_plugin_error_scrape_init' ) );
3360
 
3361
  // Jetpack Manage Activation Screen from .com
3362
  Jetpack::module_configuration_activation_screen( 'manage', array( $this, 'manage_activate_screen' ) );
3363
+
3364
+ // Add custom column in wp-admin/users.php to show whether user is linked.
3365
+ add_filter( 'manage_users_columns', array( $this, 'jetpack_icon_user_connected' ) );
3366
+ add_action( 'manage_users_custom_column', array( $this, 'jetpack_show_user_connected_icon' ), 10, 3 );
3367
+ add_action( 'admin_print_styles', array( $this, 'jetpack_user_col_style' ) );
3368
  }
3369
 
3370
  function admin_body_class( $admin_body_class = '' ) {
3616
  // Help Sidebar
3617
  $current_screen->set_help_sidebar(
3618
  '<p><strong>' . __( 'For more information:', 'jetpack' ) . '</strong></p>' .
3619
+ '<p><a href="https://jetpack.com/faq/" target="_blank">' . __( 'Jetpack FAQ', 'jetpack' ) . '</a></p>' .
3620
+ '<p><a href="https://jetpack.com/support/" target="_blank">' . __( 'Jetpack Support', 'jetpack' ) . '</a></p>' .
3621
  '<p><a href="' . Jetpack::admin_url( array( 'page' => 'jetpack-debugger' ) ) .'">' . __( 'Jetpack Debugging Center', 'jetpack' ) . '</a></p>'
3622
  );
3623
  }
3701
 
3702
  $dismiss_and_deactivate_url = wp_nonce_url( Jetpack::admin_url( '?page=jetpack&jetpack-notice=dismiss' ), 'jetpack-deactivate' );
3703
  ?>
3704
+ <div id="message" class="updated jp-banner">
3705
+ <a href="<?php echo esc_url( $dismiss_and_deactivate_url ); ?>" class="notice-dismiss" title="<?php esc_attr_e( 'Dismiss this notice', 'jetpack' ); ?>"></a>
3706
  <?php if ( in_array( Jetpack_Options::get_option( 'activated' ) , array( 1, 2, 3 ) ) ) : ?>
3707
+ <div class="jp-banner__description-container">
3708
+ <h2 class="jp-banner__header"><?php _e( 'Your Jetpack is almost ready!', 'jetpack' ); ?></h2>
3709
+ <p class="jp-banner__description"><?php _e( 'Please connect to or create a WordPress.com account to enable Jetpack, including powerful security, traffic, and customization services.', 'jetpack' ); ?></p>
3710
+ <p class="jp-banner__button-container">
3711
+ <a href="<?php echo $this->build_connect_url( false, false, 'banner' ) ?>" class="button button-primary" id="wpcom-connect"><?php _e( 'Connect to WordPress.com', 'jetpack' ); ?></a>
3712
+ <a href="<?php echo Jetpack::admin_url( 'admin.php?page=jetpack' ) ?>" class="button" title="<?php esc_attr_e( 'Learn about the benefits you receive when you connect Jetpack to WordPress.com', 'jetpack' ); ?>"><?php _e( 'Learn more', 'jetpack' ); ?></a>
3713
+ </p>
3714
+ </div>
3715
  <?php else : ?>
3716
  <div class="jp-banner__content">
3717
  <h2><?php _e( 'Jetpack is installed!', 'jetpack' ) ?></h2>
3755
  */
3756
 
3757
  ?>
3758
+ <div id="message" class="updated jp-banner">
3759
+ <a href="<?php echo esc_url( $opt_out_url ); ?>" class="notice-dismiss" title="<?php esc_attr_e( 'Dismiss this notice', 'jetpack' ); ?>"></a>
3760
+ <div class="jp-banner__description-container">
3761
+ <h2 class="jp-banner__header"><?php esc_html_e( 'Jetpack Centralized Site Management', 'jetpack' ); ?></h2>
3762
+ <p class="jp-banner__description"><?php printf( __( 'Manage multiple Jetpack enabled sites from one single dashboard at wordpress.com. Allows all existing, connected Administrators to modify your site.', 'jetpack' ), 'https://jetpack.com/support/site-management' ); ?></p>
3763
+ <p class="jp-banner__button-container">
3764
+ <a href="<?php echo esc_url( $opt_in_url ); ?>" class="button button-primary" id="wpcom-connect"><?php _e( 'Activate Jetpack Manage', 'jetpack' ); ?></a>
3765
+ <a href="https://jetpack.com/support/site-management" class="button" target="_blank" title="<?php esc_attr_e( 'Learn more about Jetpack Manage on Jetpack.com', 'jetpack' ); ?>"><?php _e( 'Learn more', 'jetpack' ); ?></a>
3766
+ </p>
3767
+ </div>
3768
  </div>
3769
  <?php
3770
  }
3789
  ?>
3790
  <div class="wrap">
3791
  <div id="message" class="jetpack-message is-opt-in">
3792
+ <?php echo sprintf( __( '<p><a href="%1$s" title="Opt in to WordPress.com Site Management" >Activate Site Management</a> to manage multiple sites from our centralized dashboard at wordpress.com/sites. <a href="%2$s" target="_blank">Learn more</a>.</p><a href="%1$s" class="jp-button">Activate Now</a>', 'jetpack' ), $this->opt_in_jetpack_manage_url(), 'https://jetpack.com/support/site-management' ); ?>
3793
  </div>
3794
  </div>
3795
  <?php
3946
  wp_redirect( $connect_url );
3947
  exit;
3948
  } else {
3949
+ if ( ! isset( $_GET['calypso_env'] ) ) {
3950
+ Jetpack::state( 'message', 'already_authorized' );
3951
+ wp_safe_redirect( Jetpack::admin_url() );
3952
+ } else {
3953
+ $connect_url = $this->build_connect_url( true, false, 'iframe' );
3954
+ $connect_url .= '&already_authorized=true';
3955
+ wp_redirect( $connect_url );
3956
+ }
3957
  }
3958
  }
3959
 
4083
  $this->error = __( 'Cheatin&#8217; uh?', 'jetpack' );
4084
  break;
4085
  case 'access_denied' :
4086
+ $this->error = sprintf( __( 'Would you mind telling us why you did not complete the Jetpack connection in this <a href="%s">1 question survey</a>?', 'jetpack' ), 'https://jetpack.com/cancelled-connection/' ) . '<br /><small>' . __( 'A Jetpack connection is required for our free security and traffic features to work.', 'jetpack' ) . '</small>';
4087
  break;
4088
  case 'wrong_state' :
4089
  $this->error = __( 'You need to stay logged in to your WordPress blog while you authorize Jetpack.', 'jetpack' );
4609
  'admin.php?page=jetpack-settings' ), $url );
4610
  }
4611
  } else {
4612
+ if ( defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) && include_once JETPACK__GLOTPRESS_LOCALES_PATH ) {
4613
+ $gp_locale = GP_Locales::by_field( 'wp_locale', get_locale() );
4614
+ }
4615
+
4616
  $role = $this->translate_current_user_to_role();
4617
  $signed_role = $this->sign_role( $role );
4618
 
4620
 
4621
  $redirect = $redirect ? esc_url_raw( $redirect ) : esc_url_raw( menu_page_url( 'jetpack', false ) );
4622
 
 
 
4623
  if( isset( $_REQUEST['is_multisite'] ) ) {
4624
  $redirect = Jetpack_Network::init()->get_url( 'network_admin_page' );
4625
  }
4667
  }
4668
 
4669
  if ( isset( $_GET['calypso_env'] ) ) {
4670
+ $url = add_query_arg( 'calypso_env', sanitize_key( $_GET['calypso_env'] ), $url );
4671
  }
4672
 
4673
  return $raw ? $url : esc_url( $url );
4857
 
4858
  $activate_url = Jetpack::init()->opt_in_jetpack_manage_url();
4859
 
4860
+ $info['description'] = sprintf( __( 'Manage your multiple Jetpack sites from our centralized dashboard at wordpress.com/sites. <a href="%s" target="_blank">Learn more</a>.', 'jetpack' ), 'https://jetpack.com/support/site-management' );
4861
 
4862
  // $extra = __( 'To use Site Management, you need to first activate JSON API to allow remote management of your site. ', 'jetpack' );
4863
  } ?>
4909
  exit;
4910
  }
4911
 
4912
+ function ajax_recheck_ssl() {
4913
+ check_ajax_referer( 'recheck-ssl', 'ajax-nonce' );
4914
+ $result = Jetpack::permit_ssl( true );
4915
+ wp_send_json( array(
4916
+ 'enabled' => $result,
4917
+ 'message' => get_transient( 'jetpack_https_test_message' )
4918
+ ) );
4919
+ }
4920
+
4921
  /* Client API */
4922
 
4923
  /**
4945
  // default : case 'AUTO' :
4946
  }
4947
 
4948
+ // we now return the unmodified SSL URL by default, as a security precaution
4949
+ return $url;
 
 
 
 
 
4950
  }
4951
 
4952
  /**
4958
  public static function permit_ssl( $force_recheck = false ) {
4959
  // Do some fancy tests to see if ssl is being supported
4960
  if ( $force_recheck || false === ( $ssl = get_transient( 'jetpack_https_test' ) ) ) {
4961
+ $message = '';
4962
  if ( 'https' !== substr( JETPACK__API_BASE, 0, 5 ) ) {
4963
  $ssl = 0;
4964
  } else {
4965
  switch ( JETPACK_CLIENT__HTTPS ) {
4966
  case 'NEVER':
4967
  $ssl = 0;
4968
+ $message = __( 'JETPACK_CLIENT__HTTPS is set to NEVER', 'jetpack' );
4969
  break;
4970
  case 'ALWAYS':
4971
  case 'AUTO':
4976
 
4977
  // If it's not 'NEVER', test to see
4978
  if ( $ssl ) {
4979
+ if ( ! wp_http_supports( array( 'ssl' => true ) ) ) {
 
4980
  $ssl = 0;
4981
+ $message = __( 'WordPress reports no SSL support', 'jetpack' );
4982
+ } else {
4983
+ $response = wp_remote_get( JETPACK__API_BASE . 'test/1/' );
4984
+ if ( is_wp_error( $response ) ) {
4985
+ $ssl = 0;
4986
+ $message = __( 'WordPress reports no SSL support', 'jetpack' );
4987
+ } elseif ( 'OK' !== wp_remote_retrieve_body( $response ) ) {
4988
+ $ssl = 0;
4989
+ $message = __( 'Response was not OK: ', 'jetpack' ) . wp_remote_retrieve_body( $response );
4990
+ }
4991
  }
4992
  }
4993
  }
4994
  set_transient( 'jetpack_https_test', $ssl, DAY_IN_SECONDS );
4995
+ set_transient( 'jetpack_https_test_message', $message, DAY_IN_SECONDS );
4996
  }
4997
 
4998
  return (bool) $ssl;
4999
  }
5000
 
5001
  /*
5002
+ * Displays an admin_notice, alerting the user to their JETPACK_CLIENT__HTTPS constant being 'AUTO' but SSL isn't working.
5003
  */
5004
+ public function alert_auto_ssl_fail() {
5005
  if ( ! current_user_can( 'manage_options' ) )
5006
  return;
5007
+
5008
+ $ajax_nonce = wp_create_nonce( 'recheck-ssl' );
5009
  ?>
5010
 
5011
+ <div id="jetpack-ssl-warning" class="error jp-identity-crisis">
5012
  <div class="jp-banner__content">
5013
+ <h2><?php _e( 'Outbound HTTPS not working', 'jetpack' ); ?></h2>
5014
+ <p><?php _e( 'Your site could not connect to WordPress.com via HTTPS. This could be due to any number of reasons, including faulty SSL certificates, misconfigured or missing SSL libraries, or network issues.', 'jetpack' ); ?></p>
5015
+ <p>
5016
+ <?php _e( 'Jetpack will re-test for HTTPS support once a day, but you can click here to try again immediately: ', 'jetpack' ); ?>
5017
+ <a href="#" id="jetpack-recheck-ssl-button"><?php _e( 'Try again', 'jetpack' ); ?></a>
5018
+ <span id="jetpack-recheck-ssl-output"><?php echo get_transient( 'jetpack_https_test_message' ); ?></span>
5019
+ </p>
5020
+ <p>
5021
+ <?php printf( __( 'For more help, try our <a href="%1$s">connection debugger</a> or <a href="%2$s" target="_blank">troubleshooting tips</a>.', 'jetpack' ),
5022
+ esc_url( Jetpack::admin_url( array( 'page' => 'jetpack-debugger' ) ) ),
5023
+ esc_url( 'https://jetpack.com/support/getting-started-with-jetpack/troubleshooting-tips/' ) ); ?>
5024
+ </p>
5025
  </div>
5026
  </div>
5027
+ <style>
5028
+ #jetpack-recheck-ssl-output { margin-left: 5px; color: red; }
5029
+ </style>
5030
+ <script type="text/javascript">
5031
+ jQuery( document ).ready( function( $ ) {
5032
+ $( '#jetpack-recheck-ssl-button' ).click( function( e ) {
5033
+ var $this = $( this );
5034
+ $this.html( <?php echo json_encode( __( 'Checking', 'jetpack' ) ); ?> );
5035
+ $( '#jetpack-recheck-ssl-output' ).html( '' );
5036
+ e.preventDefault();
5037
+ var data = { action: 'jetpack-recheck-ssl', 'ajax-nonce': '<?php echo $ajax_nonce; ?>' };
5038
+ $.post( ajaxurl, data )
5039
+ .done( function( response ) {
5040
+ if ( response.enabled ) {
5041
+ $( '#jetpack-ssl-warning' ).hide();
5042
+ } else {
5043
+ this.html( <?php echo json_encode( __( 'Try again', 'jetpack' ) ); ?> );
5044
+ $( '#jetpack-recheck-ssl-output' ).html( 'SSL Failed: ' + response.message );
5045
+ }
5046
+ }.bind( $this ) );
5047
+ } );
5048
+ } );
5049
+ </script>
5050
 
5051
  <?php
5052
  }
5797
  wp_die( $die_error );
5798
  } else if ( is_wp_error( $signature ) ) {
5799
  wp_die( $die_error );
5800
+ } else if ( ! hash_equals( $signature, $_GET['signature'] ) ) {
5801
  if ( is_ssl() ) {
5802
  // If we signed an HTTP request on the Jetpack Servers, but got redirected to HTTPS by the local blog, check the HTTP signature as well
5803
  $signature = $jetpack_signature->sign_current_request( array( 'scheme' => 'http', 'body' => null, 'method' => 'GET' ) );
5804
+ if ( ! $signature || is_wp_error( $signature ) || ! hash_equals( $signature, $_GET['signature'] ) ) {
5805
  wp_die( $die_error );
5806
  }
5807
  } else {
6303
  <?php
6304
  }
6305
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6306
  /**
6307
  * Maybe Use a .min.css stylesheet, maybe not.
6308
  *
6462
  'wpl_sharing_2014_1' => null,
6463
  'jetpack-tools-to-include' => 'jetpack_tools_to_include',
6464
  'jetpack_identity_crisis_options_to_check' => null,
6465
+ 'audio_player_default_colors' => null,
6466
  );
6467
 
6468
  // This is a silly loop depth. Better way?
6952
  <?php endif; ?>
6953
  </div>
6954
 
 
 
 
 
 
6955
  </footer>
6956
  <?php
6957
  }
7028
  return true;
7029
  }
7030
 
7031
+ /**
7032
+ * Return string containing the Jetpack logo.
7033
+ *
7034
+ * @since 3.9.0
7035
+ *
7036
+ * @return string
7037
+ */
7038
+ public static function get_jp_emblem() {
7039
+ return '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0" y="0" viewBox="0 0 172.9 172.9" enable-background="new 0 0 172.9 172.9" xml:space="preserve"> <path d="M86.4 0C38.7 0 0 38.7 0 86.4c0 47.7 38.7 86.4 86.4 86.4s86.4-38.7 86.4-86.4C172.9 38.7 134.2 0 86.4 0zM83.1 106.6l-27.1-6.9C49 98 45.7 90.1 49.3 84l33.8-58.5V106.6zM124.9 88.9l-33.8 58.5V66.3l27.1 6.9C125.1 74.9 128.4 82.8 124.9 88.9z" /></svg>';
7040
+ }
7041
+
7042
+ /*
7043
+ * Adds a "blank" column in the user admin table to display indication of user connection.
7044
+ */
7045
+ function jetpack_icon_user_connected( $columns ) {
7046
+ $columns['user_jetpack'] = '';
7047
+ return $columns;
7048
+ }
7049
+
7050
+ /*
7051
+ * Show Jetpack icon if the user is linked.
7052
+ */
7053
+ function jetpack_show_user_connected_icon( $val, $col, $user_id ) {
7054
+ if ( 'user_jetpack' == $col && Jetpack::is_user_connected( $user_id ) ) {
7055
+ $emblem_html = sprintf(
7056
+ '<a title="%1$s" class="jp-emblem-user-admin">%2$s</a>',
7057
+ esc_attr__( 'This user is linked and ready to fly with Jetpack.', 'jetpack' ),
7058
+ Jetpack::get_jp_emblem()
7059
+ );
7060
+ return $emblem_html;
7061
+ }
7062
+
7063
+ return $val;
7064
+ }
7065
+
7066
+ /*
7067
+ * Style the Jetpack user column
7068
+ */
7069
+ function jetpack_user_col_style() {
7070
+ global $current_screen;
7071
+ if ( 'users' == $current_screen->base ) { ?>
7072
+ <style>
7073
+ .fixed .column-user_jetpack {
7074
+ width: 21px;
7075
+ }
7076
+ .jp-emblem-user-admin path {
7077
+ fill: #8cc258;
7078
+ }
7079
+ </style>
7080
+ <?php }
7081
+ }
7082
+
7083
  }
class.json-api-endpoints.php CHANGED
@@ -1,12 +1,18 @@
1
  <?php
2
 
3
  require_once( dirname( __FILE__ ) . '/json-api-config.php' );
 
 
 
4
 
5
  // Endpoint
6
  abstract class WPCOM_JSON_API_Endpoint {
7
  // The API Object
8
  public $api;
9
 
 
 
 
10
  public $pass_wpcom_user_details = false;
11
 
12
  // One liner.
@@ -193,6 +199,7 @@ abstract class WPCOM_JSON_API_Endpoint {
193
  }
194
 
195
  $this->api = WPCOM_JSON_API::init(); // Auto-add to WPCOM_JSON_API
 
196
 
197
  /** Example Request/Response ******************************************/
198
 
@@ -643,6 +650,18 @@ abstract class WPCOM_JSON_API_Endpoint {
643
  );
644
  $return[$key] = (array) $this->cast_and_filter( $value, $docs, false, $for_output );
645
  break;
 
 
 
 
 
 
 
 
 
 
 
 
646
 
647
  default :
648
  $method_name = $type['type'] . '_docs';
@@ -1132,9 +1151,9 @@ abstract class WPCOM_JSON_API_Endpoint {
1132
 
1133
  $response['meta'] = (object) array(
1134
  'links' => (object) array(
1135
- 'self' => (string) $this->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
1136
- 'help' => (string) $this->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
1137
- 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
1138
  ),
1139
  );
1140
 
@@ -1244,21 +1263,21 @@ abstract class WPCOM_JSON_API_Endpoint {
1244
 
1245
  $response['meta'] = (object) array(
1246
  'links' => (object) array(
1247
- 'self' => (string) $this->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
1248
- 'help' => (string) $this->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
1249
- 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
1250
  ),
1251
  );
1252
 
1253
  // add VideoPress link to the meta
1254
  if ( in_array( $ext, array( 'ogv', 'mp4', 'mov', 'wmv', 'avi', 'mpg', '3gp', '3g2', 'm4v' ) ) ) {
1255
  if ( function_exists( 'video_get_info_by_blogpostid' ) ) {
1256
- $response['meta']->links->videopress = (string) $this->get_link( '/videos/%s', $response['videopress_guid'], '' );
1257
  }
1258
  }
1259
 
1260
  if ( $media_item->post_parent > 0 ) {
1261
- $response['meta']->links->parent = (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $media_item->post_parent );
1262
  }
1263
 
1264
  return (object) $response;
@@ -1299,14 +1318,15 @@ abstract class WPCOM_JSON_API_Endpoint {
1299
  $response['description'] = (string) $taxonomy->description;
1300
  $response['post_count'] = (int) $taxonomy->count;
1301
 
1302
- if ( 'category' === $taxonomy_type )
1303
  $response['parent'] = (int) $taxonomy->parent;
 
1304
 
1305
  $response['meta'] = (object) array(
1306
  'links' => (object) array(
1307
- 'self' => (string) $this->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type ),
1308
- 'help' => (string) $this->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type, 'help' ),
1309
- 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
1310
  ),
1311
  );
1312
 
@@ -1322,47 +1342,7 @@ abstract class WPCOM_JSON_API_Endpoint {
1322
  * @return string
1323
  */
1324
  function format_date( $date_gmt, $date = null ) {
1325
- $timestamp_gmt = strtotime( "$date_gmt+0000" );
1326
-
1327
- if ( null === $date ) {
1328
- $timestamp = $timestamp_gmt;
1329
- $hours = $minutes = $west = 0;
1330
- } else {
1331
- $date_time = date_create( "$date+0000" );
1332
- if ( $date_time ) {
1333
- $timestamp = date_format( $date_time, 'U' );
1334
- } else {
1335
- $timestamp = 0;
1336
- }
1337
-
1338
- // "0000-00-00 00:00:00" == -62169984000
1339
- if ( -62169984000 == $timestamp_gmt ) {
1340
- // WordPress sets post_date=now, post_date_gmt="0000-00-00 00:00:00" for all drafts
1341
- // WordPress sets post_modified=now, post_modified_gmt="0000-00-00 00:00:00" for new drafts
1342
-
1343
- // Try to guess the correct offset from the blog's options.
1344
- $timezone_string = get_option( 'timezone_string' );
1345
-
1346
- if ( $timezone_string && $date_time ) {
1347
- $timezone = timezone_open( $timezone_string );
1348
- if ( $timezone ) {
1349
- $offset = $timezone->getOffset( $date_time );
1350
- }
1351
- } else {
1352
- $offset = 3600 * get_option( 'gmt_offset' );
1353
- }
1354
- } else {
1355
- $offset = $timestamp - $timestamp_gmt;
1356
- }
1357
-
1358
- $west = $offset < 0;
1359
- $offset = abs( $offset );
1360
- $hours = (int) floor( $offset / 3600 );
1361
- $offset -= $hours * 3600;
1362
- $minutes = (int) floor( $offset / 60 );
1363
- }
1364
-
1365
- return (string) gmdate( 'Y-m-d\\TH:i:s', $timestamp ) . sprintf( '%s%02d:%02d', $west ? '-' : '+', $hours, $minutes );
1366
  }
1367
 
1368
  /**
@@ -1535,235 +1515,6 @@ abstract class WPCOM_JSON_API_Endpoint {
1535
  return false;
1536
  }
1537
 
1538
- /**
1539
- * Try to find the closest supported version of an endpoint to the current endpoint
1540
- *
1541
- * For example, if we were looking at the path /animals/panda:
1542
- * - if the current endpoint is v1.3 and there is a v1.3 of /animals/%s available, we return 1.3
1543
- * - if the current endpoint is v1.3 and there is no v1.3 of /animals/%s known, we fall back to the
1544
- * maximum available version of /animals/%s, e.g. 1.1
1545
- *
1546
- * This method is used in get_link() to construct meta links for API responses.
1547
- *
1548
- * @param $path string The current endpoint path, relative to the version
1549
- * @param $method string Request method used to access the endpoint path
1550
- * @return string The current version, or otherwise the maximum version available
1551
- */
1552
- function get_closest_version_of_endpoint( $path, $request_method = 'GET' ) {
1553
-
1554
- $path = untrailingslashit( $path );
1555
-
1556
- // /help is a special case - always use the current request version
1557
- if ( wp_endswith( $path, '/help' ) ) {
1558
- return $this->api->version;
1559
- }
1560
-
1561
- static $matches;
1562
- if ( empty( $matches ) ) {
1563
- $matches = array();
1564
- } else {
1565
- // try to match out of saved matches
1566
- foreach( $matches as $match ) {
1567
- $regex = $match->regex;
1568
- if ( preg_match( "#^$regex\$#", $path ) ) {
1569
- return $match->version;
1570
- }
1571
- }
1572
- }
1573
-
1574
- $endpoint_path_versions = $this->get_endpoint_path_versions();
1575
- $last_path_segment = $this->get_last_segment_of_relative_path( $path );
1576
- $max_version_found = null;
1577
-
1578
- foreach ( $endpoint_path_versions as $endpoint_last_path_segment => $endpoints ) {
1579
-
1580
- // Does the last part of the path match the path key? (e.g. 'posts')
1581
- // If the last part contains a placeholder (e.g. %s), we want to carry on
1582
- if ( $last_path_segment != $endpoint_last_path_segment && ! strstr( $endpoint_last_path_segment, '%' ) ) {
1583
- continue;
1584
- }
1585
-
1586
- foreach ( $endpoints as $endpoint ) {
1587
- // Does the request method match?
1588
- if ( ! in_array( $request_method, $endpoint['request_methods'] ) ) {
1589
- continue;
1590
- }
1591
-
1592
- $endpoint_path = untrailingslashit( $endpoint['path'] );
1593
- $endpoint_path_regex = str_replace( array( '%s', '%d' ), array( '([^/?&]+)', '(\d+)' ), $endpoint_path );
1594
-
1595
- if ( ! preg_match( "#^$endpoint_path_regex\$#", $path ) ) {
1596
- continue;
1597
- }
1598
-
1599
- // Make sure the endpoint exists at the same version
1600
- if ( version_compare( $this->api->version, $endpoint['min_version'], '>=') &&
1601
- version_compare( $this->api->version, $endpoint['max_version'], '<=') ) {
1602
- array_push( $matches, (object) array( 'version' => $this->api->version, 'regex' => $endpoint_path_regex ) );
1603
- return $this->api->version;
1604
- }
1605
-
1606
- // If the endpoint doesn't exist at the same version, record the max version we found
1607
- if ( empty( $max_version_found ) || version_compare( $max_version_found['version'], $endpoint['max_version'], '<' ) ) {
1608
- $max_version_found = array( 'version' => $endpoint['max_version'], 'regex' => $endpoint_path_regex );
1609
- }
1610
- }
1611
- }
1612
-
1613
- // If the endpoint version is less than the requested endpoint version, return the max version found
1614
- if ( ! empty( $max_version_found ) ) {
1615
- array_push( $matches, (object) $max_version_found );
1616
- return $max_version_found['version'];
1617
- }
1618
-
1619
- // Otherwise, use the API version of the current request
1620
- return $this->api->version;
1621
- }
1622
-
1623
- /**
1624
- * Get an array of endpoint paths with their associated versions
1625
- *
1626
- * The result is cached for 30 minutes.
1627
- *
1628
- * @return array Array of endpoint paths, min_versions and max_versions, keyed by last segment of path
1629
- **/
1630
- protected function get_endpoint_path_versions() {
1631
-
1632
- static $cache_result;
1633
-
1634
- if ( ! empty ( $cache_result ) ) {
1635
- return $cache_result;
1636
- }
1637
-
1638
- /*
1639
- * Create a map of endpoints and their min/max versions keyed by the last segment of the path (e.g. 'posts')
1640
- * This reduces the search space when finding endpoint matches in get_closest_version_of_endpoint()
1641
- */
1642
- $endpoint_path_versions = array();
1643
-
1644
- foreach ( $this->api->endpoints as $key => $endpoint_objects ) {
1645
-
1646
- // The key contains a serialized path, min_version and max_version
1647
- list( $path, $min_version, $max_version ) = unserialize( $key );
1648
-
1649
- // Grab the last component of the relative path to use as the top-level key
1650
- $last_path_segment = $this->get_last_segment_of_relative_path( $path );
1651
-
1652
- $endpoint_path_versions[ $last_path_segment ][] = array(
1653
- 'path' => $path,
1654
- 'min_version' => $min_version,
1655
- 'max_version' => $max_version,
1656
- 'request_methods' => array_keys( $endpoint_objects )
1657
- );
1658
- }
1659
-
1660
- $cache_result = $endpoint_path_versions;
1661
-
1662
- return $endpoint_path_versions;
1663
- }
1664
-
1665
- /**
1666
- * Grab the last segment of a relative path
1667
- *
1668
- * @param string $path Path
1669
- * @return string Last path segment
1670
- */
1671
- protected function get_last_segment_of_relative_path( $path) {
1672
- $path_parts = array_filter( explode( '/', $path ) );
1673
-
1674
- if ( empty( $path_parts ) ) {
1675
- return null;
1676
- }
1677
-
1678
- return end( $path_parts );
1679
- }
1680
-
1681
- /**
1682
- * Generate a URL to an endpoint
1683
- *
1684
- * Used to construct meta links in API responses
1685
- *
1686
- * @param mixed $args Optional arguments to be appended to URL
1687
- * @return string Endpoint URL
1688
- **/
1689
- function get_link() {
1690
- $args = func_get_args();
1691
- $format = array_shift( $args );
1692
- $base = WPCOM_JSON_API__BASE;
1693
-
1694
- $path = array_pop( $args );
1695
-
1696
- if ( $path ) {
1697
- $path = '/' . ltrim( $path, '/' );
1698
- }
1699
-
1700
- $args[] = $path;
1701
-
1702
- // Escape any % in args before using sprintf
1703
- $escaped_args = array();
1704
- foreach ( $args as $arg_key => $arg_value ) {
1705
- $escaped_args[ $arg_key ] = str_replace( '%', '%%', $arg_value );
1706
- }
1707
-
1708
- $relative_path = vsprintf( "$format%s", $escaped_args );
1709
-
1710
- if ( ! wp_startswith( $relative_path, '.' ) ) {
1711
- // Generic version. Match the requested version as best we can
1712
- $api_version = $this->get_closest_version_of_endpoint( $relative_path );
1713
- $base = substr( $base, 0, - 1 ) . $api_version;
1714
- }
1715
-
1716
- // escape any % in the relative path before running it through sprintf again
1717
- $relative_path = str_replace( '%', '%%', $relative_path );
1718
- // http, WPCOM_JSON_API__BASE, ... , path
1719
- // %s , %s , $format, %s
1720
- return esc_url_raw( sprintf( "%s://%s$relative_path", $this->api->public_api_scheme, $base ) );
1721
- }
1722
-
1723
- function get_me_link( $path = '' ) {
1724
- return $this->get_link( '/me', $path );
1725
- }
1726
-
1727
- function get_taxonomy_link( $blog_id, $taxonomy_id, $taxonomy_type, $path = '' ) {
1728
- if ( 'category' === $taxonomy_type )
1729
- return $this->get_link( '/sites/%d/categories/slug:%s', $blog_id, $taxonomy_id, $path );
1730
- else
1731
- return $this->get_link( '/sites/%d/tags/slug:%s', $blog_id, $taxonomy_id, $path );
1732
- }
1733
-
1734
- function get_media_link( $blog_id, $media_id, $path = '' ) {
1735
- return $this->get_link( '/sites/%d/media/%d', $blog_id, $media_id, $path );
1736
- }
1737
-
1738
- function get_site_link( $blog_id, $path = '' ) {
1739
- return $this->get_link( '/sites/%d', $blog_id, $path );
1740
- }
1741
-
1742
- function get_post_link( $blog_id, $post_id, $path = '' ) {
1743
- return $this->get_link( '/sites/%d/posts/%d', $blog_id, $post_id, $path );
1744
- }
1745
-
1746
- function get_comment_link( $blog_id, $comment_id, $path = '' ) {
1747
- return $this->get_link( '/sites/%d/comments/%d', $blog_id, $comment_id, $path );
1748
- }
1749
-
1750
- function get_publicize_connection_link( $blog_id, $publicize_connection_id, $path = '' ) {
1751
- return $this->get_link( '.1/sites/%d/publicize-connections/%d', $blog_id, $publicize_connection_id, $path );
1752
- }
1753
-
1754
- function get_publicize_connections_link( $keyring_token_id, $path = '' ) {
1755
- return $this->get_link( '.1/me/publicize-connections/?keyring_connection_ID=%d', $keyring_token_id, $path );
1756
- }
1757
-
1758
- function get_keyring_connection_link( $keyring_token_id, $path = '' ) {
1759
- return $this->get_link( '.1/me/keyring-connections/%d', $keyring_token_id, $path );
1760
- }
1761
-
1762
- function get_external_service_link( $external_service, $path = '' ) {
1763
- return $this->get_link( '.1/meta/external-services/%s', $external_service, $path );
1764
- }
1765
-
1766
-
1767
  /**
1768
  * Check whether a user can view or edit a post type
1769
  * @param string $post_type post type to check
@@ -1949,7 +1700,7 @@ abstract class WPCOM_JSON_API_Endpoint {
1949
 
1950
  }
1951
 
1952
- function handle_media_sideload( $url, $parent_post_id = 0 ) {
1953
  if ( ! function_exists( 'download_url' ) || ! function_exists( 'media_handle_sideload' ) )
1954
  return false;
1955
 
@@ -1965,8 +1716,8 @@ abstract class WPCOM_JSON_API_Endpoint {
1965
 
1966
  // First check to see if we get a mime-type match by file, otherwise, check to
1967
  // see if WordPress supports this file as an image. If neither, then it is not supported.
1968
- if ( ! $this->is_file_supported_for_sideloading( $tmp ) && ! file_is_displayable_image( $tmp ) ) {
1969
- unlink( $tmp );
1970
  return false;
1971
  }
1972
 
@@ -2128,6 +1879,10 @@ abstract class WPCOM_JSON_API_Endpoint {
2128
  return 'GET' == $this->method || ( $this->allow_unauthorized_request && in_array( $origin, $complete_access_origins ) );
2129
  }
2130
 
 
 
 
 
2131
  /**
2132
  * Return endpoint response
2133
  *
1
  <?php
2
 
3
  require_once( dirname( __FILE__ ) . '/json-api-config.php' );
4
+ require_once( dirname( __FILE__ ) . '/sal/class.json-api-links.php' );
5
+ require_once( dirname( __FILE__ ) . '/sal/class.json-api-metadata.php' );
6
+ require_once( dirname( __FILE__ ) . '/sal/class.json-api-date.php' );
7
 
8
  // Endpoint
9
  abstract class WPCOM_JSON_API_Endpoint {
10
  // The API Object
11
  public $api;
12
 
13
+ // The link-generating utility class
14
+ public $links;
15
+
16
  public $pass_wpcom_user_details = false;
17
 
18
  // One liner.
199
  }
200
 
201
  $this->api = WPCOM_JSON_API::init(); // Auto-add to WPCOM_JSON_API
202
+ $this->links = WPCOM_JSON_API_Links::getInstance();
203
 
204
  /** Example Request/Response ******************************************/
205
 
650
  );
651
  $return[$key] = (array) $this->cast_and_filter( $value, $docs, false, $for_output );
652
  break;
653
+ case 'taxonomy':
654
+ $docs = array(
655
+ 'name' => '(string) The taxonomy slug',
656
+ 'label' => '(string) The taxonomy human-readable name',
657
+ 'labels' => '(object) Mapping of labels for the taxonomy',
658
+ 'description' => '(string) The taxonomy description',
659
+ 'hierarchical' => '(bool) Whether the taxonomy is hierarchical',
660
+ 'public' => '(bool) Whether the taxonomy is public',
661
+ 'capabilities' => '(object) Mapping of current user capabilities for the taxonomy',
662
+ );
663
+ $return[$key] = (array) $this->cast_and_filter( $value, $docs, false, $for_output );
664
+ break;
665
 
666
  default :
667
  $method_name = $type['type'] . '_docs';
1151
 
1152
  $response['meta'] = (object) array(
1153
  'links' => (object) array(
1154
+ 'self' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
1155
+ 'help' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
1156
+ 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
1157
  ),
1158
  );
1159
 
1263
 
1264
  $response['meta'] = (object) array(
1265
  'links' => (object) array(
1266
+ 'self' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
1267
+ 'help' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
1268
+ 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
1269
  ),
1270
  );
1271
 
1272
  // add VideoPress link to the meta
1273
  if ( in_array( $ext, array( 'ogv', 'mp4', 'mov', 'wmv', 'avi', 'mpg', '3gp', '3g2', 'm4v' ) ) ) {
1274
  if ( function_exists( 'video_get_info_by_blogpostid' ) ) {
1275
+ $response['meta']->links->videopress = (string) $this->links->get_link( '/videos/%s', $response['videopress_guid'], '' );
1276
  }
1277
  }
1278
 
1279
  if ( $media_item->post_parent > 0 ) {
1280
+ $response['meta']->links->parent = (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $media_item->post_parent );
1281
  }
1282
 
1283
  return (object) $response;
1318
  $response['description'] = (string) $taxonomy->description;
1319
  $response['post_count'] = (int) $taxonomy->count;
1320
 
1321
+ if ( is_taxonomy_hierarchical( $taxonomy_type ) ) {
1322
  $response['parent'] = (int) $taxonomy->parent;
1323
+ }
1324
 
1325
  $response['meta'] = (object) array(
1326
  'links' => (object) array(
1327
+ 'self' => (string) $this->links->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type ),
1328
+ 'help' => (string) $this->links->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type, 'help' ),
1329
+ 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
1330
  ),
1331
  );
1332
 
1342
  * @return string
1343
  */
1344
  function format_date( $date_gmt, $date = null ) {
1345
+ return WPCOM_JSON_API_Date::format_date( $date_gmt, $date );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1346
  }
1347
 
1348
  /**
1515
  return false;
1516
  }
1517
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1518
  /**
1519
  * Check whether a user can view or edit a post type
1520
  * @param string $post_type post type to check
1700
 
1701
  }
1702
 
1703
+ function handle_media_sideload( $url, $parent_post_id = 0, $type = 'any' ) {
1704
  if ( ! function_exists( 'download_url' ) || ! function_exists( 'media_handle_sideload' ) )
1705
  return false;
1706
 
1716
 
1717
  // First check to see if we get a mime-type match by file, otherwise, check to
1718
  // see if WordPress supports this file as an image. If neither, then it is not supported.
1719
+ if ( ! $this->is_file_supported_for_sideloading( $tmp ) && 'image' === $type && ! file_is_displayable_image( $tmp ) ) {
1720
+ @unlink( $tmp );
1721
  return false;
1722
  }
1723
 
1879
  return 'GET' == $this->method || ( $this->allow_unauthorized_request && in_array( $origin, $complete_access_origins ) );
1880
  }
1881
 
1882
+ function get_platform() {
1883
+ return wpcom_get_sal_platform( $this->api->token_details );
1884
+ }
1885
+
1886
  /**
1887
  * Return endpoint response
1888
  *
class.photon.php CHANGED
@@ -733,12 +733,16 @@ class Jetpack_Photon {
733
  * Filters an array of image `sizes` values, using $content_width instead of image's full size.
734
  *
735
  * @since 4.0.4
 
736
  * @param array $sizes An array of media query breakpoints.
737
  * @param array $size Width and height of the image
738
  * @uses Jetpack::get_content_width
739
  * @return array An array of media query breakpoints.
740
  */
741
  public function filter_sizes( $sizes, $size ) {
 
 
 
742
  $content_width = Jetpack::get_content_width();
743
  if ( ! $content_width ) {
744
  $content_width = 1000;
733
  * Filters an array of image `sizes` values, using $content_width instead of image's full size.
734
  *
735
  * @since 4.0.4
736
+ * @since 4.1.0 Returns early for images not within the_content.
737
  * @param array $sizes An array of media query breakpoints.
738
  * @param array $size Width and height of the image
739
  * @uses Jetpack::get_content_width
740
  * @return array An array of media query breakpoints.
741
  */
742
  public function filter_sizes( $sizes, $size ) {
743
+ if ( ! doing_filter( 'the_content' ) ){
744
+ return $sizes;
745
+ }
746
  $content_width = Jetpack::get_content_width();
747
  if ( ! $content_width ) {
748
  $content_width = 1000;
css/dashboard-widget.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../scss/_utilities/mixins/_button.scss","dashboard-widget.css","../scss/templates/_dashboard-widget.scss","../scss/atoms/colors/_colors.scss"],"names":[],"mappings":"AAEA;;;GCCE;ACDD;;;IDKE;AACH;ECAE,6BAAA;EAAA,wBAAA;EDED;AACD;EAAA,WAAA;ECCC,YAAA;EDCC,wEAAW;EAEZ;AACD;;;EAGE,gBAAe;EAChB;AACD;ECCE,qBAAA;EACC,oBAAA;EDCF;AACD;EAAA,oBAAA;EAEC;AACD;ECCG,aAAA;EACC,cC1BI;EF2BP;AACD;EAAA,eAAA;EAEC;AACD;;;EAGE,aAAY;EACb;AACD;ECKE,mBAAA;EACC,kBAAA;EDHF;AACD;EAAA,aAAA;ECOE,eAAA;EACC,iBAAY;EDJd;AACD;ECKG,oBAAA;EACC,wBAAc;EDHjB;AACD;EAAA,gBAAA;EAEC;AACD;EAAA,aAAA;EAEC;AACD;EAAA,qBAAA;EACE,uBAAoB;EDhDrB,cAAA;EAEC,gEAAY;ECkDb;AACD;EAAA,qBAAA;EACE,uBAAoB;ED9CrB,cAAA;EACC,mCAAY;ECiDb;AACD;EAAA,2FAAA;EAEC;AACD;EAAA,qBAAA;EACE,uBAAoB;EDxCrB,cAAA;EAIC,6GAAO;ECwCR;AACD;EAAA,2BAAA;EACE,gCAA0B;ECd3B,kCAAO;EACN,8BAAA;EDiBD;AACD;EAAA,qBAAA;EACE,gBAAA;ECdA,kBAAA;EDgBA,4BAAiB;EAElB;AACD;;EAEE,YAAW;ECdX,aAAA;EACC,kBAAW;EDgBb;AACD;EAAA,kBAAA;EACE,qBAAiB;ECZjB,WAAA;EACC,YAAS;EDeX;AACD;ECZE,WAAA;EACC,YAAS;EDcX;AACD;EAAA,WAAA;EACE,YAAU;EACV,oBAAW;EAEZ","file":"dashboard-widget.css"}
1
+ {"version":3,"sources":["../scss/_utilities/mixins/_button.scss","dashboard-widget.css","../scss/templates/_dashboard-widget.scss"],"names":[],"mappings":"AAEA;;;GCCE;ACDD;;;IDKE;AACH;ECAE,6BAAA;EAAA,wBAAA;EDED;AACD;EAAA,WAAA;EAAA,YAAA;EAAA,wEAAA;EAIC;AACD;;;EAGE,gBAAe;EAChB;AACD;EAAA,qBAAA;EAAA,oBAAA;EAGC;AACD;EAAA,oBAAA;EAEC;AACD;EAAA,aAAA;EAAA,cAAA;EAGC;AACD;EAAA,eAAA;EAEC;AACD;;;EAGE,aAAY;EACb;AACD;EAAA,mBAAA;EAAA,kBAAA;EAGC;AACD;EAAA,aAAA;EAAA,eAAA;EAAA,iBAAA;EAIC;AACD;EAAA,oBAAA;EAAA,wBAAA;EAGC;AACD;EAAA,gBAAA;EAEC;AACD;EAAA,aAAA;EAEC;AACD;EAAA,qBAAA;EAAA,uBAAA;EAAA,cAAA;EAAA,gEAAA;EAKC;AACD;EAAA,qBAAA;EAAA,uBAAA;EAAA,cAAA;EAAA,mCAAA;EAKC;AACD;EAAA,2FAAA;EAEC;AACD;EAAA,qBAAA;EAAA,uBAAA;EAAA,cAAA;EAAA,6GAAA;EAKC;AACD;EAAA,2BAAA;EAAA,gCAAA;EAAA,kCAAA;EAAA,8BAAA;EAKC;AACD;EAAA,qBAAA;EAAA,gBAAA;EAAA,kBAAA;EAAA,4BAAA;EAKC;AACD;;EAEE,YAAW;EAAX,aAAW;EAAX,kBAAW;EAGZ;AACD;EAAA,kBAAA;EAAA,qBAAA;EAAA,WAAA;EAAA,YAAA;EAKC;AACD;EAAA,WAAA;EAAA,YAAA;EAGC;AACD;EAAA,WAAA;EAAA,YAAA;EAAA,oBAAA;EAIC","file":"dashboard-widget.css"}
css/jetpack-admin-rtl.css CHANGED
@@ -3474,6 +3474,12 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
3474
  -webkit-transform: translate(0, -50%);
3475
  transform: translate(0, -50%);
3476
  }
 
 
 
 
 
 
3477
  .nux-intro .nux-foot .j-col {
3478
  padding: 1em;
3479
  }
@@ -3669,9 +3675,6 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
3669
  position: relative;
3670
  top: -1px;
3671
  }
3672
- .nux-intro .wpcom .goto .feat a {
3673
- float: right;
3674
- }
3675
 
3676
  .nux-foot .j-col {
3677
  border: none;
@@ -3769,6 +3772,6 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
3769
  @media (max-width: 782px){.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column){padding:11px 10px;display:block}.jetpack_page_jetpack_modules #doaction{padding:7px 14px}.jetpack_page_jetpack_modules .fixed-top thead .check-column{padding:28px 10px 0 10px}.jetpack_page_jetpack_modules .filter-search{margin-top:28px}.jetpack_page_jetpack_modules .filter-search .button{padding:7px 14px}.manage-right.show .subsubsub li{padding:5px}}@media (max-width: 650px){.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{float:none;padding-right:18px}}@media (max-width: 430px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{display:block}}.configure-module p{font-size:14px}.configure-module p.success,.configure-module p.error{color:#fff;padding:10px}.configure-module p.success{background-color:#81a844}.configure-module p.error{background-color:#d94f4f}.protect-status p{font-size:16px}.protect-status strong{display:inline-block;margin-top:10px;background:#fff;padding:10px;border:1px #ddd solid;font-size:16px;color:#000;max-width:100%}.protect-status.attn{color:#d94f4f}.protect-status.working{color:#81a844}#non-editable-whitelist{margin-top:15px}.protect-whitelist textarea{width:100%;min-height:150px}#editable-whitelist .whitelist-table{width:100%}.configure-module input[disabled]{opacity:.5}.configure-module input.button-primary{font-weight:bold}.whitelist-table{border-top:1px solid;border-left:1px solid;border-color:#ddd;background-color:#fff}.whitelist-table td,.whitelist-table th{padding:10px;margin:0;border-bottom:1px solid;border-right:1px solid;border-color:#ddd;font-size:14px}.whitelist-table th.heading{font-weight:bold;color:#5d6d74;text-align:right;background-color:#eee}.whitelist-table td.item-actions{border-right:none;text-align:left}.whitelist-table .toolbar{padding:0}.whitelist-table .add-btn{text-align:center;width:10%;border-right:1px #ddd solid}.ip-address,.enter-ip{width:90%;text-align:right;vertical-align:middle}.delete-ip-address{text-align:center;border:0;background:transparent;color:#6f7476;box-shadow:none;font-size:20px;margin:0;padding:0;cursor:pointer;border-radius:2px}.delete-ip-address:hover{background:#eee}.toolbar div{float:right;padding:10px}@media only screen and (min-width: 1100px){#non-editable-whitelist{width:28%;float:left;margin-top:0}.protect-whitelist{width:65%;float:right}}@media only screen and (max-width: 1130px){.enter-ip input[type="text"]{max-width:175px}}@media only screen and (max-width: 1250px) and (min-width: 1065px), (max-width: 730px) and (min-width: 600px){.enter-ip{width:85%}.add-btn{width:15%}}@media only screen and (max-width: 782px){.add-btn{text-align:left}.add-btn .ip-add{margin-top:4px;margin-bottom:3px}}@media only screen and (max-width: 730px){.add-btn{text-align:center}}@media only screen and (max-width: 665px) and (min-width: 600px){.enter-ip input[type="text"]{max-width:165px}}@media only screen and (max-width: 600px){.toolbar div{width:100%}.add-btn{border-top:1px #ddd solid}.enter-ip{text-align:center}.enter-ip strong{display:block;margin-bottom:5px}.enter-ip input[type="text"]{width:100%;max-width:100%}.add-btn input,.enter-ip .button{width:50%;margin:0 auto}.enter-ip .button{margin-top:10px}}@media only screen and (max-width: 400px){.protect-status strong{font-size:12px;overflow:auto}.add-btn input,.enter-ip .button{width:100%}}.my-jetpack-actions{margin:0 0 40px 0}.my-jetpack-actions .j-col{padding:0;text-align:center}.my-jetpack-actions #user-list{height:30px;margin-top:-1px;margin-right:-3px}#jetpack-disconnect-content{display:none;text-align:center}#jetpack-disconnect-content .cancel-disconnect{display:block;margin-top:10px}.connection-details{border:1px #ddd solid}.connection-details.local-user{margin-bottom:10px}.connection-details .user-01,.connection-details .wpuser-02,.connection-details .action-btns{padding:10px}.connection-details .user-01 .button,.connection-details .user-01 select,.connection-details .wpuser-02 .button,.connection-details .wpuser-02 select,.connection-details .action-btns .button,.connection-details .action-btns select{margin-top:5px}.connection-details .wpuser-02{margin-top:10px}.connection-details h3{padding:10px;margin:0;background:#eee;border-bottom:1px #ddd solid;font-size:14px}.jp-user img{margin-left:10px;border-radius:50%}.jp-user div,.wp-user div,.wp-action div{display:inline-block;width:100%}.j-col.jp-user,.j-col.wp-user,.j-col.wp-action{padding:0}.my-jetpack-actions select{max-width:150px}.j-actions .button:nth-child(3){margin-left:5px}.j-row.disconnect{text-align:center}.j-row.disconnect .button{margin:0 auto}a.what-is-primary{color:#b4b9be;margin-right:4px}@media (max-width: 782px){.wp-action{border-top:1px #ddd solid}.wp-action h3{display:none}}@media screen and (max-width: 500px){.connection-details{font-size:11px}.connection-details h3{font-size:12px;padding:5px}.connection-details .user-01,.connection-details .wpuser-02{padding:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}.connection-details .action-btns{text-align:center}}@media (max-width: 530px){.connection-details .wpuser-02{margin-top:0;padding:12px}}@media screen and (max-width: 450px){.j-actions .button{width:100%;margin-bottom:5px;text-align:center}.j-actions .button.alignright{float:none}}@media screen and (max-width: 350px){.user-01,.wpuser-02{max-width:100px}}.manage__icon{width:155px;height:155px;margin:20px auto}.manage-page .manage__description{max-width:600px;text-align:center;font-size:22px;color:#999;margin:20px auto}.manage-page .manage__button{font-size:16px;padding:0 20px;height:40px;line-height:40px}.manage__title .genericon{font-size:38px;color:#81A944}.manage__link{font-size:16px;padding:0 20px;height:40px;line-height:40px;font-weight:normal}.manage__link .genericon{font-size:28px;vertical-align:middle;margin-top:-6px}.connection-landing{text-align:center}.connection-landing h1{margin-bottom:0}.connection-landing h2{margin:0;padding:1.14286em 0;font-size:1.57143em;line-height:160%;font-weight:400}.connection-landing h2+p{margin-top:0}.connection-landing p{color:#686f72}.connect-card{text-align:center;margin:2.14286em auto 1.42857em;padding:0 4.28571em 1.42857em}.connect-card p{font-size:1.14286em}@media (max-width: 782px){.connect-card{padding:0 1.42857em 1.42857em}}
3770
  .jp-card{background:#fff;border:1px #d9d9d9 solid;text-align:center;margin-bottom:2.85714em}.jp-card p{font-size:1.14286em}.jp-card .j-int{padding:0 4.28571em}.feature-container{background:#f4f4f4}.feature-container .j-int{background:#fff;padding:0}.feature-container .first-header{position:relative}@media (max-width: 900px){.feature-container .first-header{border-bottom:1px #d9d9d9 solid;background-image:none}.feature-container .first-header .j-header-img{display:none}}@media (min-width: 900px){.feature-container .first-header{background:url("../images/connection-landing/stars-right.svg") no-repeat,url("../images/connection-landing/stars-left.svg") no-repeat,#fff;background-position:10% 50%, 10% 50%;background-size:100px, 125px}}.feature-container .first-header .j-header-img{position:absolute;right:0;left:0;bottom:0}.feature-container .first-header .j-header-img img{margin:0 auto;max-width:100%;z-index:1001;position:absolute;right:0;left:0;bottom:0}@media (min-width: 900px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-12px}}@media (min-width: 1147px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-10px}}.feature-container .first-header .j-header-img img+img{z-index:999}.feature-container .secondary-header{background:transparent;padding:0 10em}@media (max-width: 782px){.feature-container .secondary-header{padding:0 1.42857em}}.feature-container .j-feature-img{padding:0 1.42857em;margin-bottom:2.85714em}.feature-container .j-feature-img img{width:100%}.feature-container .j-feature-img:last-of-type{margin-bottom:1.42857em}@media (min-width: 900px){.j-traffic .first-header{padding-bottom:200px}}
3771
  @media (min-width: 900px){.j-security .first-header{padding-bottom:225px}}
3772
- .three-feature{margin:1.42857em 0;padding:0 1.42857em;display:-moz-box;display:-ms-flexbox;display:flex;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media (max-width: 782px){.three-feature{-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width: 530px){.three-feature{padding:0}}.three-feature .j-col{border:1px #d9d9d9 solid;text-align:right;padding:0;background:#f9f9f9}@media (max-width: 782px){.three-feature .j-col{margin-bottom:1.42857em}}@media (max-width: 530px){.three-feature .j-col{border-right:none;border-left:none}}.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}@media (max-width: 782px){.three-feature .j-col:nth-of-type(2){border:1px #d9d9d9 solid}}@media (max-width: 530px){.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}}.three-feature h3{font-weight:600;font-size:1.14286em;min-width:15.35714em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width: 782px){.three-feature h3{font-size:1em}}.three-feature .feature-img{background:#fff;border-bottom:1px #d9d9d9 solid;text-align:center}.three-feature .feature-img img{width:100%;max-width:500px;margin:0 auto}.three-feature p{line-height:150%;padding-bottom:0;font-size:1em}.three-feature h3,.three-feature p{margin:0;padding:1.42857em}@media (max-width: 782px){.three-feature h3,.three-feature p{font-size:0.92857em}}.three-feature h3{padding-bottom:0}.jp-content .hide{display:none}.jp-content .pointer{cursor:pointer}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font:400 1.75em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-connect .j-col{padding:0}.wpcom-connect .connect-desc{padding-left:25px}.wpcom-connect .connect-btn{text-align:center}.module-grid h2{color:#000;font:300 2.57143em/1em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif}.download-jetpack{margin-top:1em !important}.jump-start-area{background:#fff;border:1px #d9d9d9 solid;text-align:center;padding:0 1.42857em}.jump-start-area p{font-size:1.14286em}.jump-start-area h1{margin:1em auto 0}.jumpstart-message p{padding-left:25px}.jumpstart-desc{text-align:right}#jumpstart-cta{text-align:center;display:inline-block;float:none}.dismiss-jumpstart{color:#999;font-size:14px}#jumpstart-cta .button,#jumpstart-cta .button-primary{margin:1em;font-size:18px;height:45px !important;padding:8px 15px 1px}#jumpstart-cta .button-primary{display:block;margin:20px 20px 5px 20px}#jp-config-list{position:relative;padding-top:15px;padding-bottom:15px;margin-right:-15px;margin-left:-15px}#jp-config-list .j-col{padding:15px}#jp-config-list strong{display:inline-block}#jp-config-list small{display:block;margin-top:5px;line-height:150%}#jp-config-list .close{position:absolute;top:10px;left:0;text-transform:uppercase;font-weight:bold;display:block;z-index:5}.jp-config-status{text-transform:uppercase;font-size:10px;font-weight:bold;line-height:100%;color:#fff;background:#9fbd72;border-radius:2px;padding:2px 4px;display:inline-block}.nux-intro h3{background:#81a844;color:#fff;font-weight:600;padding:.75em;margin:0}.nux-intro h4{margin:0 0 2px 0}.nux-intro p{text-align:center;font-size:1.24em;line-height:175%}.nux-intro a{transition:all .4s ease}.nux-intro .j-col{padding:0 0.5em}.nux-intro .j-col:first-of-type{padding-right:0}.nux-intro .j-col:last-of-type{padding-left:0}.nux-intro .nux-in{background:#ececec;-webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.nux-intro .nux-in h3{font-size:1.10em;-webkit-border-top-right-radius:6px;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;border-top-left-radius:6px}.nux-intro .nux-in h3 .dashicons{float:left;color:#658435;font-size:1.25em;padding-right:0}.nux-intro .nux-in h3 .dashicons:hover{color:#57722e}.nux-intro .nux-in p{font-size:.9em;line-height:150%;margin:0;text-align:right;color:#686f72}.nux-intro .nux-in .j-row{border-bottom:1px #f9f9f9 solid;padding:5px 0;position:relative;min-height:70px}.nux-intro .nux-in .j-row:hover{background:#e0e0e0}.nux-intro .nux-in .unavailable{opacity:0.5}.nux-intro .nux-in .unavailable .act{display:none}.nux-intro .nux-in .paid{top:4px;margin-right:12px}.nux-intro .nux-in .dashicons{color:#81a844;font-size:1em;position:relative;top:3px;padding-right:6px}.nux-intro .nux-in .dashicons:hover{color:#57722e}.nux-intro .nux-in .dashicons-external{font-size:1.5em;top:2px;padding-right:3px}.nux-intro .nux-in .lmore{font-size:11px;color:#81a844}.nux-intro .nux-in .lmore:hover{color:#57722e}.nux-intro .feat.j-col{padding:10px 10px 10px 2px}.nux-intro .feat .dashicons{display:none}.nux-intro .activated .feat .dashicons{display:inline-block}.nux-intro .act{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%);left:8px;float:left}.nux-intro .act.j-col{padding:5px;text-align:left}.nux-intro .module-action{text-transform:uppercase;font-size:.85em;font-weight:600}.nux-intro .wpcom h3{background:#0087be}.nux-intro .wpcom h3 .dashicons{color:#00638b}.nux-intro .wpcom h3 .dashicons:hover{color:#005172}.nux-intro .wpcom .j-col{padding:10px}.nux-intro .wpcom .goto{text-align:center;padding:1em}.nux-intro .wpcom .goto:hover{background:#ececec}.nux-intro .wpcom .goto .j-col{padding:0 5px}.nux-intro .wpcom .goto a{width:100%;padding:.25em;height:auto}.nux-intro .wpcom .goto .button{height:auto;min-height:28px;line-height:18px;white-space:normal;max-width:200px;margin-bottom:0;padding-top:4px;padding-bottom:5px}.nux-intro .wpcom .goto .feat{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.nux-intro .nux-foot .j-col{padding:1em}.nux-foot{margin-top:2em;background:#ececec;border-radius:6px}.nux-foot .j-col{min-height:75px;padding:1em}@media (max-width: 650px){.nux-foot .j-col{width:100%}}.nux-foot .j-col+.j-col{border-right:1px #f9f9f9 solid}@media (max-width: 650px){.nux-foot .j-col+.j-col{border-right:none;border-top:1px #f9f9f9 solid}}.nux-foot .actions{margin-top:1em}.nux-foot a{text-decoration:underline}.nux-foot img{float:left;margin-right:1em;width:75px;border-radius:4px}.nux-foot p{font-size:.9em;text-align:right;font-weight:600;margin-top:0}.nux-foot p+p{font-weight:400;margin-bottom:0}.nux-foot ul{font-size:.9em;margin-bottom:0}.nux-foot ul li{margin-left:.875em;margin-bottom:0;line-height:175%;display:inline-block;vertical-align:middle}.form-toggle[type="checkbox"]{opacity:0;position:absolute}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:2px;width:40px;height:24px;background:#b9b9b9;vertical-align:middle;outline:0;cursor:pointer;transition:all .4s ease}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{right:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.form-toggle__switch:hover{background:#bdd597}.form-toggle__label{cursor:pointer}.plugin-action__label{padding-left:5px;top:-1px;position:relative;color:#8e9598}.activated .plugin-action__label{color:#81a844}.form-toggle:focus+.form-toggle__label .form-toggle__switch,.form-toggle:focus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #0087be}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{right:16px}.form-toggle:checked:hover+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle:disabled+.form-toggle__label .form-toggle__switch,.form-toggle:disabled:hover+.form-toggle__label .form-toggle__switch{background:#e9eff3}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__switch:after{right:8px}@media (max-width: 1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}.nux-intro .main-col{width:50%;margin-bottom:2em}.nux-intro .main-col.wpcom{width:100%}.nux-intro .main-col+.main-col{padding-left:0}.nux-intro .wpcom{padding:0}.nux-intro .wpcom .j-row{width:50%;float:right;border-bottom:1px #f9f9f9 solid;border-left:1px #f9f9f9 solid}.nux-intro .wpcom .j-row:last-of-type{width:100%;float:none;clear:both;border:none;border-top:1px #f9f9f9 solid;position:relative;top:-1px}.nux-intro .wpcom .goto .feat a{float:right}.nux-foot .j-col{border:none}}@media (max-width: 900px){.nux-intro .main-col{width:100%;padding:0;margin-bottom:2em}.nux-intro .wpcom .j-row{width:100%;float:none}}@media (max-width: 782px){#jumpstart-cta .button-primary{margin:10px 0 5px 0}#jump-start-area .spinner{background-position:50% 35%}}@media (max-width: 600px){.nux-intro h1{font-size:1.75em}.nux-intro p{font-size:1em}}@media (max-width: 530px){.jp-content .landing{padding:0 .5em}#jump-start-area{padding:0 1em}.jumpstart-message p{padding-left:0}#jumpstart-cta .button-primary{margin:0 0 5px 0;padding-bottom:10px}.footer .a8c-attribution a:after{top:6px}}.nav-horizontal:before,.features:before,.modules:before,.load-more:before,.nav-horizontal:after,.features:after,.modules:after,.load-more:after{content:"";display:table}.nav-horizontal:after,.features:after,.modules:after,.load-more:after{clear:both}
3773
 
3774
  /*# sourceMappingURL=jetpack-admin.min.css.map */
3474
  -webkit-transform: translate(0, -50%);
3475
  transform: translate(0, -50%);
3476
  }
3477
+ .nux-intro .wpcom .goto.activated .feat {
3478
+ left: 50%;
3479
+ -ms-transform: translate(50%, -50%);
3480
+ -webkit-transform: translate(50%, -50%);
3481
+ transform: translate(50%, -50%);
3482
+ }
3483
  .nux-intro .nux-foot .j-col {
3484
  padding: 1em;
3485
  }
3675
  position: relative;
3676
  top: -1px;
3677
  }
 
 
 
3678
 
3679
  .nux-foot .j-col {
3680
  border: none;
3772
  @media (max-width: 782px){.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column){padding:11px 10px;display:block}.jetpack_page_jetpack_modules #doaction{padding:7px 14px}.jetpack_page_jetpack_modules .fixed-top thead .check-column{padding:28px 10px 0 10px}.jetpack_page_jetpack_modules .filter-search{margin-top:28px}.jetpack_page_jetpack_modules .filter-search .button{padding:7px 14px}.manage-right.show .subsubsub li{padding:5px}}@media (max-width: 650px){.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{float:none;padding-right:18px}}@media (max-width: 430px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{display:block}}.configure-module p{font-size:14px}.configure-module p.success,.configure-module p.error{color:#fff;padding:10px}.configure-module p.success{background-color:#81a844}.configure-module p.error{background-color:#d94f4f}.protect-status p{font-size:16px}.protect-status strong{display:inline-block;margin-top:10px;background:#fff;padding:10px;border:1px #ddd solid;font-size:16px;color:#000;max-width:100%}.protect-status.attn{color:#d94f4f}.protect-status.working{color:#81a844}#non-editable-whitelist{margin-top:15px}.protect-whitelist textarea{width:100%;min-height:150px}#editable-whitelist .whitelist-table{width:100%}.configure-module input[disabled]{opacity:.5}.configure-module input.button-primary{font-weight:bold}.whitelist-table{border-top:1px solid;border-left:1px solid;border-color:#ddd;background-color:#fff}.whitelist-table td,.whitelist-table th{padding:10px;margin:0;border-bottom:1px solid;border-right:1px solid;border-color:#ddd;font-size:14px}.whitelist-table th.heading{font-weight:bold;color:#5d6d74;text-align:right;background-color:#eee}.whitelist-table td.item-actions{border-right:none;text-align:left}.whitelist-table .toolbar{padding:0}.whitelist-table .add-btn{text-align:center;width:10%;border-right:1px #ddd solid}.ip-address,.enter-ip{width:90%;text-align:right;vertical-align:middle}.delete-ip-address{text-align:center;border:0;background:transparent;color:#6f7476;box-shadow:none;font-size:20px;margin:0;padding:0;cursor:pointer;border-radius:2px}.delete-ip-address:hover{background:#eee}.toolbar div{float:right;padding:10px}@media only screen and (min-width: 1100px){#non-editable-whitelist{width:28%;float:left;margin-top:0}.protect-whitelist{width:65%;float:right}}@media only screen and (max-width: 1130px){.enter-ip input[type="text"]{max-width:175px}}@media only screen and (max-width: 1250px) and (min-width: 1065px), (max-width: 730px) and (min-width: 600px){.enter-ip{width:85%}.add-btn{width:15%}}@media only screen and (max-width: 782px){.add-btn{text-align:left}.add-btn .ip-add{margin-top:4px;margin-bottom:3px}}@media only screen and (max-width: 730px){.add-btn{text-align:center}}@media only screen and (max-width: 665px) and (min-width: 600px){.enter-ip input[type="text"]{max-width:165px}}@media only screen and (max-width: 600px){.toolbar div{width:100%}.add-btn{border-top:1px #ddd solid}.enter-ip{text-align:center}.enter-ip strong{display:block;margin-bottom:5px}.enter-ip input[type="text"]{width:100%;max-width:100%}.add-btn input,.enter-ip .button{width:50%;margin:0 auto}.enter-ip .button{margin-top:10px}}@media only screen and (max-width: 400px){.protect-status strong{font-size:12px;overflow:auto}.add-btn input,.enter-ip .button{width:100%}}.my-jetpack-actions{margin:0 0 40px 0}.my-jetpack-actions .j-col{padding:0;text-align:center}.my-jetpack-actions #user-list{height:30px;margin-top:-1px;margin-right:-3px}#jetpack-disconnect-content{display:none;text-align:center}#jetpack-disconnect-content .cancel-disconnect{display:block;margin-top:10px}.connection-details{border:1px #ddd solid}.connection-details.local-user{margin-bottom:10px}.connection-details .user-01,.connection-details .wpuser-02,.connection-details .action-btns{padding:10px}.connection-details .user-01 .button,.connection-details .user-01 select,.connection-details .wpuser-02 .button,.connection-details .wpuser-02 select,.connection-details .action-btns .button,.connection-details .action-btns select{margin-top:5px}.connection-details .wpuser-02{margin-top:10px}.connection-details h3{padding:10px;margin:0;background:#eee;border-bottom:1px #ddd solid;font-size:14px}.jp-user img{margin-left:10px;border-radius:50%}.jp-user div,.wp-user div,.wp-action div{display:inline-block;width:100%}.j-col.jp-user,.j-col.wp-user,.j-col.wp-action{padding:0}.my-jetpack-actions select{max-width:150px}.j-actions .button:nth-child(3){margin-left:5px}.j-row.disconnect{text-align:center}.j-row.disconnect .button{margin:0 auto}a.what-is-primary{color:#b4b9be;margin-right:4px}@media (max-width: 782px){.wp-action{border-top:1px #ddd solid}.wp-action h3{display:none}}@media screen and (max-width: 500px){.connection-details{font-size:11px}.connection-details h3{font-size:12px;padding:5px}.connection-details .user-01,.connection-details .wpuser-02{padding:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}.connection-details .action-btns{text-align:center}}@media (max-width: 530px){.connection-details .wpuser-02{margin-top:0;padding:12px}}@media screen and (max-width: 450px){.j-actions .button{width:100%;margin-bottom:5px;text-align:center}.j-actions .button.alignright{float:none}}@media screen and (max-width: 350px){.user-01,.wpuser-02{max-width:100px}}.manage__icon{width:155px;height:155px;margin:20px auto}.manage-page .manage__description{max-width:600px;text-align:center;font-size:22px;color:#999;margin:20px auto}.manage-page .manage__button{font-size:16px;padding:0 20px;height:40px;line-height:40px}.manage__title .genericon{font-size:38px;color:#81A944}.manage__link{font-size:16px;padding:0 20px;height:40px;line-height:40px;font-weight:normal}.manage__link .genericon{font-size:28px;vertical-align:middle;margin-top:-6px}.connection-landing{text-align:center}.connection-landing h1{margin-bottom:0}.connection-landing h2{margin:0;padding:1.14286em 0;font-size:1.57143em;line-height:160%;font-weight:400}.connection-landing h2+p{margin-top:0}.connection-landing p{color:#686f72}.connect-card{text-align:center;margin:2.14286em auto 1.42857em;padding:0 4.28571em 1.42857em}.connect-card p{font-size:1.14286em}@media (max-width: 782px){.connect-card{padding:0 1.42857em 1.42857em}}
3773
  .jp-card{background:#fff;border:1px #d9d9d9 solid;text-align:center;margin-bottom:2.85714em}.jp-card p{font-size:1.14286em}.jp-card .j-int{padding:0 4.28571em}.feature-container{background:#f4f4f4}.feature-container .j-int{background:#fff;padding:0}.feature-container .first-header{position:relative}@media (max-width: 900px){.feature-container .first-header{border-bottom:1px #d9d9d9 solid;background-image:none}.feature-container .first-header .j-header-img{display:none}}@media (min-width: 900px){.feature-container .first-header{background:url("../images/connection-landing/stars-right.svg") no-repeat,url("../images/connection-landing/stars-left.svg") no-repeat,#fff;background-position:10% 50%, 10% 50%;background-size:100px, 125px}}.feature-container .first-header .j-header-img{position:absolute;right:0;left:0;bottom:0}.feature-container .first-header .j-header-img img{margin:0 auto;max-width:100%;z-index:1001;position:absolute;right:0;left:0;bottom:0}@media (min-width: 900px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-12px}}@media (min-width: 1147px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-10px}}.feature-container .first-header .j-header-img img+img{z-index:999}.feature-container .secondary-header{background:transparent;padding:0 10em}@media (max-width: 782px){.feature-container .secondary-header{padding:0 1.42857em}}.feature-container .j-feature-img{padding:0 1.42857em;margin-bottom:2.85714em}.feature-container .j-feature-img img{width:100%}.feature-container .j-feature-img:last-of-type{margin-bottom:1.42857em}@media (min-width: 900px){.j-traffic .first-header{padding-bottom:200px}}
3774
  @media (min-width: 900px){.j-security .first-header{padding-bottom:225px}}
3775
+ .three-feature{margin:1.42857em 0;padding:0 1.42857em;display:-moz-box;display:-ms-flexbox;display:flex;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media (max-width: 782px){.three-feature{-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width: 530px){.three-feature{padding:0}}.three-feature .j-col{border:1px #d9d9d9 solid;text-align:right;padding:0;background:#f9f9f9}@media (max-width: 782px){.three-feature .j-col{margin-bottom:1.42857em}}@media (max-width: 530px){.three-feature .j-col{border-right:none;border-left:none}}.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}@media (max-width: 782px){.three-feature .j-col:nth-of-type(2){border:1px #d9d9d9 solid}}@media (max-width: 530px){.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}}.three-feature h3{font-weight:600;font-size:1.14286em;min-width:15.35714em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width: 782px){.three-feature h3{font-size:1em}}.three-feature .feature-img{background:#fff;border-bottom:1px #d9d9d9 solid;text-align:center}.three-feature .feature-img img{width:100%;max-width:500px;margin:0 auto}.three-feature p{line-height:150%;padding-bottom:0;font-size:1em}.three-feature h3,.three-feature p{margin:0;padding:1.42857em}@media (max-width: 782px){.three-feature h3,.three-feature p{font-size:0.92857em}}.three-feature h3{padding-bottom:0}.jp-content .hide{display:none}.jp-content .pointer{cursor:pointer}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font:400 1.75em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-connect .j-col{padding:0}.wpcom-connect .connect-desc{padding-left:25px}.wpcom-connect .connect-btn{text-align:center}.module-grid h2{color:#000;font:300 2.57143em/1em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif}.download-jetpack{margin-top:1em !important}.jump-start-area{background:#fff;border:1px #d9d9d9 solid;text-align:center;padding:0 1.42857em}.jump-start-area p{font-size:1.14286em}.jump-start-area h1{margin:1em auto 0}.jumpstart-message p{padding-left:25px}.jumpstart-desc{text-align:right}#jumpstart-cta{text-align:center;display:inline-block;float:none}.dismiss-jumpstart{color:#999;font-size:14px}#jumpstart-cta .button,#jumpstart-cta .button-primary{margin:1em;font-size:18px;height:45px !important;padding:8px 15px 1px}#jumpstart-cta .button-primary{display:block;margin:20px 20px 5px 20px}#jp-config-list{position:relative;padding-top:15px;padding-bottom:15px;margin-right:-15px;margin-left:-15px}#jp-config-list .j-col{padding:15px}#jp-config-list strong{display:inline-block}#jp-config-list small{display:block;margin-top:5px;line-height:150%}#jp-config-list .close{position:absolute;top:10px;left:0;text-transform:uppercase;font-weight:bold;display:block;z-index:5}.jp-config-status{text-transform:uppercase;font-size:10px;font-weight:bold;line-height:100%;color:#fff;background:#9fbd72;border-radius:2px;padding:2px 4px;display:inline-block}.nux-intro h3{background:#81a844;color:#fff;font-weight:600;padding:.75em;margin:0}.nux-intro h4{margin:0 0 2px 0}.nux-intro p{text-align:center;font-size:1.24em;line-height:175%}.nux-intro a{transition:all .4s ease}.nux-intro .j-col{padding:0 0.5em}.nux-intro .j-col:first-of-type{padding-right:0}.nux-intro .j-col:last-of-type{padding-left:0}.nux-intro .nux-in{background:#ececec;-webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.nux-intro .nux-in h3{font-size:1.10em;-webkit-border-top-right-radius:6px;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;border-top-left-radius:6px}.nux-intro .nux-in h3 .dashicons{float:left;color:#658435;font-size:1.25em;padding-right:0}.nux-intro .nux-in h3 .dashicons:hover{color:#57722e}.nux-intro .nux-in p{font-size:.9em;line-height:150%;margin:0;text-align:right;color:#686f72}.nux-intro .nux-in .j-row{border-bottom:1px #f9f9f9 solid;padding:5px 0;position:relative;min-height:70px}.nux-intro .nux-in .j-row:hover{background:#e0e0e0}.nux-intro .nux-in .unavailable{opacity:0.5}.nux-intro .nux-in .unavailable .act{display:none}.nux-intro .nux-in .paid{top:4px;margin-right:12px}.nux-intro .nux-in .dashicons{color:#81a844;font-size:1em;position:relative;top:3px;padding-right:6px}.nux-intro .nux-in .dashicons:hover{color:#57722e}.nux-intro .nux-in .dashicons-external{font-size:1.5em;top:2px;padding-right:3px}.nux-intro .nux-in .lmore{font-size:11px;color:#81a844}.nux-intro .nux-in .lmore:hover{color:#57722e}.nux-intro .feat.j-col{padding:10px 10px 10px 2px}.nux-intro .feat .dashicons{display:none}.nux-intro .activated .feat .dashicons{display:inline-block}.nux-intro .act{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%);left:8px;float:left}.nux-intro .act.j-col{padding:5px;text-align:left}.nux-intro .module-action{text-transform:uppercase;font-size:.85em;font-weight:600}.nux-intro .wpcom h3{background:#0087be}.nux-intro .wpcom h3 .dashicons{color:#00638b}.nux-intro .wpcom h3 .dashicons:hover{color:#005172}.nux-intro .wpcom .j-col{padding:10px}.nux-intro .wpcom .goto{text-align:center;padding:1em}.nux-intro .wpcom .goto:hover{background:#ececec}.nux-intro .wpcom .goto .j-col{padding:0 5px}.nux-intro .wpcom .goto a{width:100%;padding:.25em;height:auto}.nux-intro .wpcom .goto .button{height:auto;min-height:28px;line-height:18px;white-space:normal;max-width:200px;margin-bottom:0;padding-top:4px;padding-bottom:5px}.nux-intro .wpcom .goto .feat{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.nux-intro .wpcom .goto.activated .feat{left:50%;-ms-transform:translate(50%, -50%);-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%)}.nux-intro .nux-foot .j-col{padding:1em}.nux-foot{margin-top:2em;background:#ececec;border-radius:6px}.nux-foot .j-col{min-height:75px;padding:1em}@media (max-width: 650px){.nux-foot .j-col{width:100%}}.nux-foot .j-col+.j-col{border-right:1px #f9f9f9 solid}@media (max-width: 650px){.nux-foot .j-col+.j-col{border-right:none;border-top:1px #f9f9f9 solid}}.nux-foot .actions{margin-top:1em}.nux-foot a{text-decoration:underline}.nux-foot img{float:left;margin-right:1em;width:75px;border-radius:4px}.nux-foot p{font-size:.9em;text-align:right;font-weight:600;margin-top:0}.nux-foot p+p{font-weight:400;margin-bottom:0}.nux-foot ul{font-size:.9em;margin-bottom:0}.nux-foot ul li{margin-left:.875em;margin-bottom:0;line-height:175%;display:inline-block;vertical-align:middle}.form-toggle[type="checkbox"]{opacity:0;position:absolute}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:2px;width:40px;height:24px;background:#b9b9b9;vertical-align:middle;outline:0;cursor:pointer;transition:all .4s ease}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{right:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.form-toggle__switch:hover{background:#bdd597}.form-toggle__label{cursor:pointer}.plugin-action__label{padding-left:5px;top:-1px;position:relative;color:#8e9598}.activated .plugin-action__label{color:#81a844}.form-toggle:focus+.form-toggle__label .form-toggle__switch,.form-toggle:focus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #0087be}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{right:16px}.form-toggle:checked:hover+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle:disabled+.form-toggle__label .form-toggle__switch,.form-toggle:disabled:hover+.form-toggle__label .form-toggle__switch{background:#e9eff3}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__switch:after{right:8px}@media (max-width: 1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}.nux-intro .main-col{width:50%;margin-bottom:2em}.nux-intro .main-col.wpcom{width:100%}.nux-intro .main-col+.main-col{padding-left:0}.nux-intro .wpcom{padding:0}.nux-intro .wpcom .j-row{width:50%;float:right;border-bottom:1px #f9f9f9 solid;border-left:1px #f9f9f9 solid}.nux-intro .wpcom .j-row:last-of-type{width:100%;float:none;clear:both;border:none;border-top:1px #f9f9f9 solid;position:relative;top:-1px}.nux-foot .j-col{border:none}}@media (max-width: 900px){.nux-intro .main-col{width:100%;padding:0;margin-bottom:2em}.nux-intro .wpcom .j-row{width:100%;float:none}}@media (max-width: 782px){#jumpstart-cta .button-primary{margin:10px 0 5px 0}#jump-start-area .spinner{background-position:50% 35%}}@media (max-width: 600px){.nux-intro h1{font-size:1.75em}.nux-intro p{font-size:1em}}@media (max-width: 530px){.jp-content .landing{padding:0 .5em}#jump-start-area{padding:0 1em}.jumpstart-message p{padding-left:0}#jumpstart-cta .button-primary{margin:0 0 5px 0;padding-bottom:10px}.footer .a8c-attribution a:after{top:6px}}.nav-horizontal:before,.features:before,.modules:before,.load-more:before,.nav-horizontal:after,.features:after,.modules:after,.load-more:after{content:"";display:table}.nav-horizontal:after,.features:after,.modules:after,.load-more:after{clear:both}
3776
 
3777
  /*# sourceMappingURL=jetpack-admin.min.css.map */
css/jetpack-admin-rtl.min.css CHANGED
@@ -32,6 +32,6 @@
32
  @media (max-width: 782px){.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column){padding:11px 10px;display:block}.jetpack_page_jetpack_modules #doaction{padding:7px 14px}.jetpack_page_jetpack_modules .fixed-top thead .check-column{padding:28px 10px 0 10px}.jetpack_page_jetpack_modules .filter-search{margin-top:28px}.jetpack_page_jetpack_modules .filter-search .button{padding:7px 14px}.manage-right.show .subsubsub li{padding:5px}}@media (max-width: 650px){.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{float:none;padding-right:18px}}@media (max-width: 430px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{display:block}}.configure-module p{font-size:14px}.configure-module p.success,.configure-module p.error{color:#fff;padding:10px}.configure-module p.success{background-color:#81a844}.configure-module p.error{background-color:#d94f4f}.protect-status p{font-size:16px}.protect-status strong{display:inline-block;margin-top:10px;background:#fff;padding:10px;border:1px #ddd solid;font-size:16px;color:#000;max-width:100%}.protect-status.attn{color:#d94f4f}.protect-status.working{color:#81a844}#non-editable-whitelist{margin-top:15px}.protect-whitelist textarea{width:100%;min-height:150px}#editable-whitelist .whitelist-table{width:100%}.configure-module input[disabled]{opacity:.5}.configure-module input.button-primary{font-weight:bold}.whitelist-table{border-top:1px solid;border-left:1px solid;border-color:#ddd;background-color:#fff}.whitelist-table td,.whitelist-table th{padding:10px;margin:0;border-bottom:1px solid;border-right:1px solid;border-color:#ddd;font-size:14px}.whitelist-table th.heading{font-weight:bold;color:#5d6d74;text-align:right;background-color:#eee}.whitelist-table td.item-actions{border-right:none;text-align:left}.whitelist-table .toolbar{padding:0}.whitelist-table .add-btn{text-align:center;width:10%;border-right:1px #ddd solid}.ip-address,.enter-ip{width:90%;text-align:right;vertical-align:middle}.delete-ip-address{text-align:center;border:0;background:transparent;color:#6f7476;box-shadow:none;font-size:20px;margin:0;padding:0;cursor:pointer;border-radius:2px}.delete-ip-address:hover{background:#eee}.toolbar div{float:right;padding:10px}@media only screen and (min-width: 1100px){#non-editable-whitelist{width:28%;float:left;margin-top:0}.protect-whitelist{width:65%;float:right}}@media only screen and (max-width: 1130px){.enter-ip input[type="text"]{max-width:175px}}@media only screen and (max-width: 1250px) and (min-width: 1065px), (max-width: 730px) and (min-width: 600px){.enter-ip{width:85%}.add-btn{width:15%}}@media only screen and (max-width: 782px){.add-btn{text-align:left}.add-btn .ip-add{margin-top:4px;margin-bottom:3px}}@media only screen and (max-width: 730px){.add-btn{text-align:center}}@media only screen and (max-width: 665px) and (min-width: 600px){.enter-ip input[type="text"]{max-width:165px}}@media only screen and (max-width: 600px){.toolbar div{width:100%}.add-btn{border-top:1px #ddd solid}.enter-ip{text-align:center}.enter-ip strong{display:block;margin-bottom:5px}.enter-ip input[type="text"]{width:100%;max-width:100%}.add-btn input,.enter-ip .button{width:50%;margin:0 auto}.enter-ip .button{margin-top:10px}}@media only screen and (max-width: 400px){.protect-status strong{font-size:12px;overflow:auto}.add-btn input,.enter-ip .button{width:100%}}.my-jetpack-actions{margin:0 0 40px 0}.my-jetpack-actions .j-col{padding:0;text-align:center}.my-jetpack-actions #user-list{height:30px;margin-top:-1px;margin-right:-3px}#jetpack-disconnect-content{display:none;text-align:center}#jetpack-disconnect-content .cancel-disconnect{display:block;margin-top:10px}.connection-details{border:1px #ddd solid}.connection-details.local-user{margin-bottom:10px}.connection-details .user-01,.connection-details .wpuser-02,.connection-details .action-btns{padding:10px}.connection-details .user-01 .button,.connection-details .user-01 select,.connection-details .wpuser-02 .button,.connection-details .wpuser-02 select,.connection-details .action-btns .button,.connection-details .action-btns select{margin-top:5px}.connection-details .wpuser-02{margin-top:10px}.connection-details h3{padding:10px;margin:0;background:#eee;border-bottom:1px #ddd solid;font-size:14px}.jp-user img{margin-left:10px;border-radius:50%}.jp-user div,.wp-user div,.wp-action div{display:inline-block;width:100%}.j-col.jp-user,.j-col.wp-user,.j-col.wp-action{padding:0}.my-jetpack-actions select{max-width:150px}.j-actions .button:nth-child(3){margin-left:5px}.j-row.disconnect{text-align:center}.j-row.disconnect .button{margin:0 auto}a.what-is-primary{color:#b4b9be;margin-right:4px}@media (max-width: 782px){.wp-action{border-top:1px #ddd solid}.wp-action h3{display:none}}@media screen and (max-width: 500px){.connection-details{font-size:11px}.connection-details h3{font-size:12px;padding:5px}.connection-details .user-01,.connection-details .wpuser-02{padding:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}.connection-details .action-btns{text-align:center}}@media (max-width: 530px){.connection-details .wpuser-02{margin-top:0;padding:12px}}@media screen and (max-width: 450px){.j-actions .button{width:100%;margin-bottom:5px;text-align:center}.j-actions .button.alignright{float:none}}@media screen and (max-width: 350px){.user-01,.wpuser-02{max-width:100px}}.manage__icon{width:155px;height:155px;margin:20px auto}.manage-page .manage__description{max-width:600px;text-align:center;font-size:22px;color:#999;margin:20px auto}.manage-page .manage__button{font-size:16px;padding:0 20px;height:40px;line-height:40px}.manage__title .genericon{font-size:38px;color:#81A944}.manage__link{font-size:16px;padding:0 20px;height:40px;line-height:40px;font-weight:normal}.manage__link .genericon{font-size:28px;vertical-align:middle;margin-top:-6px}.connection-landing{text-align:center}.connection-landing h1{margin-bottom:0}.connection-landing h2{margin:0;padding:1.14286em 0;font-size:1.57143em;line-height:160%;font-weight:400}.connection-landing h2+p{margin-top:0}.connection-landing p{color:#686f72}.connect-card{text-align:center;margin:2.14286em auto 1.42857em;padding:0 4.28571em 1.42857em}.connect-card p{font-size:1.14286em}@media (max-width: 782px){.connect-card{padding:0 1.42857em 1.42857em}}
33
  .jp-card{background:#fff;border:1px #d9d9d9 solid;text-align:center;margin-bottom:2.85714em}.jp-card p{font-size:1.14286em}.jp-card .j-int{padding:0 4.28571em}.feature-container{background:#f4f4f4}.feature-container .j-int{background:#fff;padding:0}.feature-container .first-header{position:relative}@media (max-width: 900px){.feature-container .first-header{border-bottom:1px #d9d9d9 solid;background-image:none}.feature-container .first-header .j-header-img{display:none}}@media (min-width: 900px){.feature-container .first-header{background:url("../images/connection-landing/stars-right.svg") no-repeat,url("../images/connection-landing/stars-left.svg") no-repeat,#fff;background-position:10% 50%, 10% 50%;background-size:100px, 125px}}.feature-container .first-header .j-header-img{position:absolute;right:0;left:0;bottom:0}.feature-container .first-header .j-header-img img{margin:0 auto;max-width:100%;z-index:1001;position:absolute;right:0;left:0;bottom:0}@media (min-width: 900px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-12px}}@media (min-width: 1147px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-10px}}.feature-container .first-header .j-header-img img+img{z-index:999}.feature-container .secondary-header{background:transparent;padding:0 10em}@media (max-width: 782px){.feature-container .secondary-header{padding:0 1.42857em}}.feature-container .j-feature-img{padding:0 1.42857em;margin-bottom:2.85714em}.feature-container .j-feature-img img{width:100%}.feature-container .j-feature-img:last-of-type{margin-bottom:1.42857em}@media (min-width: 900px){.j-traffic .first-header{padding-bottom:200px}}
34
  @media (min-width: 900px){.j-security .first-header{padding-bottom:225px}}
35
- .three-feature{margin:1.42857em 0;padding:0 1.42857em;display:-moz-box;display:-ms-flexbox;display:flex;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media (max-width: 782px){.three-feature{-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width: 530px){.three-feature{padding:0}}.three-feature .j-col{border:1px #d9d9d9 solid;text-align:right;padding:0;background:#f9f9f9}@media (max-width: 782px){.three-feature .j-col{margin-bottom:1.42857em}}@media (max-width: 530px){.three-feature .j-col{border-right:none;border-left:none}}.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}@media (max-width: 782px){.three-feature .j-col:nth-of-type(2){border:1px #d9d9d9 solid}}@media (max-width: 530px){.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}}.three-feature h3{font-weight:600;font-size:1.14286em;min-width:15.35714em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width: 782px){.three-feature h3{font-size:1em}}.three-feature .feature-img{background:#fff;border-bottom:1px #d9d9d9 solid;text-align:center}.three-feature .feature-img img{width:100%;max-width:500px;margin:0 auto}.three-feature p{line-height:150%;padding-bottom:0;font-size:1em}.three-feature h3,.three-feature p{margin:0;padding:1.42857em}@media (max-width: 782px){.three-feature h3,.three-feature p{font-size:0.92857em}}.three-feature h3{padding-bottom:0}.jp-content .hide{display:none}.jp-content .pointer{cursor:pointer}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font:400 1.75em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-connect .j-col{padding:0}.wpcom-connect .connect-desc{padding-left:25px}.wpcom-connect .connect-btn{text-align:center}.module-grid h2{color:#000;font:300 2.57143em/1em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif}.download-jetpack{margin-top:1em !important}.jump-start-area{background:#fff;border:1px #d9d9d9 solid;text-align:center;padding:0 1.42857em}.jump-start-area p{font-size:1.14286em}.jump-start-area h1{margin:1em auto 0}.jumpstart-message p{padding-left:25px}.jumpstart-desc{text-align:right}#jumpstart-cta{text-align:center;display:inline-block;float:none}.dismiss-jumpstart{color:#999;font-size:14px}#jumpstart-cta .button,#jumpstart-cta .button-primary{margin:1em;font-size:18px;height:45px !important;padding:8px 15px 1px}#jumpstart-cta .button-primary{display:block;margin:20px 20px 5px 20px}#jp-config-list{position:relative;padding-top:15px;padding-bottom:15px;margin-right:-15px;margin-left:-15px}#jp-config-list .j-col{padding:15px}#jp-config-list strong{display:inline-block}#jp-config-list small{display:block;margin-top:5px;line-height:150%}#jp-config-list .close{position:absolute;top:10px;left:0;text-transform:uppercase;font-weight:bold;display:block;z-index:5}.jp-config-status{text-transform:uppercase;font-size:10px;font-weight:bold;line-height:100%;color:#fff;background:#9fbd72;border-radius:2px;padding:2px 4px;display:inline-block}.nux-intro h3{background:#81a844;color:#fff;font-weight:600;padding:.75em;margin:0}.nux-intro h4{margin:0 0 2px 0}.nux-intro p{text-align:center;font-size:1.24em;line-height:175%}.nux-intro a{transition:all .4s ease}.nux-intro .j-col{padding:0 0.5em}.nux-intro .j-col:first-of-type{padding-right:0}.nux-intro .j-col:last-of-type{padding-left:0}.nux-intro .nux-in{background:#ececec;-webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.nux-intro .nux-in h3{font-size:1.10em;-webkit-border-top-right-radius:6px;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;border-top-left-radius:6px}.nux-intro .nux-in h3 .dashicons{float:left;color:#658435;font-size:1.25em;padding-right:0}.nux-intro .nux-in h3 .dashicons:hover{color:#57722e}.nux-intro .nux-in p{font-size:.9em;line-height:150%;margin:0;text-align:right;color:#686f72}.nux-intro .nux-in .j-row{border-bottom:1px #f9f9f9 solid;padding:5px 0;position:relative;min-height:70px}.nux-intro .nux-in .j-row:hover{background:#e0e0e0}.nux-intro .nux-in .unavailable{opacity:0.5}.nux-intro .nux-in .unavailable .act{display:none}.nux-intro .nux-in .paid{top:4px;margin-right:12px}.nux-intro .nux-in .dashicons{color:#81a844;font-size:1em;position:relative;top:3px;padding-right:6px}.nux-intro .nux-in .dashicons:hover{color:#57722e}.nux-intro .nux-in .dashicons-external{font-size:1.5em;top:2px;padding-right:3px}.nux-intro .nux-in .lmore{font-size:11px;color:#81a844}.nux-intro .nux-in .lmore:hover{color:#57722e}.nux-intro .feat.j-col{padding:10px 10px 10px 2px}.nux-intro .feat .dashicons{display:none}.nux-intro .activated .feat .dashicons{display:inline-block}.nux-intro .act{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%);left:8px;float:left}.nux-intro .act.j-col{padding:5px;text-align:left}.nux-intro .module-action{text-transform:uppercase;font-size:.85em;font-weight:600}.nux-intro .wpcom h3{background:#0087be}.nux-intro .wpcom h3 .dashicons{color:#00638b}.nux-intro .wpcom h3 .dashicons:hover{color:#005172}.nux-intro .wpcom .j-col{padding:10px}.nux-intro .wpcom .goto{text-align:center;padding:1em}.nux-intro .wpcom .goto:hover{background:#ececec}.nux-intro .wpcom .goto .j-col{padding:0 5px}.nux-intro .wpcom .goto a{width:100%;padding:.25em;height:auto}.nux-intro .wpcom .goto .button{height:auto;min-height:28px;line-height:18px;white-space:normal;max-width:200px;margin-bottom:0;padding-top:4px;padding-bottom:5px}.nux-intro .wpcom .goto .feat{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.nux-intro .nux-foot .j-col{padding:1em}.nux-foot{margin-top:2em;background:#ececec;border-radius:6px}.nux-foot .j-col{min-height:75px;padding:1em}@media (max-width: 650px){.nux-foot .j-col{width:100%}}.nux-foot .j-col+.j-col{border-right:1px #f9f9f9 solid}@media (max-width: 650px){.nux-foot .j-col+.j-col{border-right:none;border-top:1px #f9f9f9 solid}}.nux-foot .actions{margin-top:1em}.nux-foot a{text-decoration:underline}.nux-foot img{float:left;margin-right:1em;width:75px;border-radius:4px}.nux-foot p{font-size:.9em;text-align:right;font-weight:600;margin-top:0}.nux-foot p+p{font-weight:400;margin-bottom:0}.nux-foot ul{font-size:.9em;margin-bottom:0}.nux-foot ul li{margin-left:.875em;margin-bottom:0;line-height:175%;display:inline-block;vertical-align:middle}.form-toggle[type="checkbox"]{opacity:0;position:absolute}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:2px;width:40px;height:24px;background:#b9b9b9;vertical-align:middle;outline:0;cursor:pointer;transition:all .4s ease}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{right:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.form-toggle__switch:hover{background:#bdd597}.form-toggle__label{cursor:pointer}.plugin-action__label{padding-left:5px;top:-1px;position:relative;color:#8e9598}.activated .plugin-action__label{color:#81a844}.form-toggle:focus+.form-toggle__label .form-toggle__switch,.form-toggle:focus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #0087be}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{right:16px}.form-toggle:checked:hover+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle:disabled+.form-toggle__label .form-toggle__switch,.form-toggle:disabled:hover+.form-toggle__label .form-toggle__switch{background:#e9eff3}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__switch:after{right:8px}@media (max-width: 1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}.nux-intro .main-col{width:50%;margin-bottom:2em}.nux-intro .main-col.wpcom{width:100%}.nux-intro .main-col+.main-col{padding-left:0}.nux-intro .wpcom{padding:0}.nux-intro .wpcom .j-row{width:50%;float:right;border-bottom:1px #f9f9f9 solid;border-left:1px #f9f9f9 solid}.nux-intro .wpcom .j-row:last-of-type{width:100%;float:none;clear:both;border:none;border-top:1px #f9f9f9 solid;position:relative;top:-1px}.nux-intro .wpcom .goto .feat a{float:right}.nux-foot .j-col{border:none}}@media (max-width: 900px){.nux-intro .main-col{width:100%;padding:0;margin-bottom:2em}.nux-intro .wpcom .j-row{width:100%;float:none}}@media (max-width: 782px){#jumpstart-cta .button-primary{margin:10px 0 5px 0}#jump-start-area .spinner{background-position:50% 35%}}@media (max-width: 600px){.nux-intro h1{font-size:1.75em}.nux-intro p{font-size:1em}}@media (max-width: 530px){.jp-content .landing{padding:0 .5em}#jump-start-area{padding:0 1em}.jumpstart-message p{padding-left:0}#jumpstart-cta .button-primary{margin:0 0 5px 0;padding-bottom:10px}.footer .a8c-attribution a:after{top:6px}}.nav-horizontal:before,.features:before,.modules:before,.load-more:before,.nav-horizontal:after,.features:after,.modules:after,.load-more:after{content:"";display:table}.nav-horizontal:after,.features:after,.modules:after,.load-more:after{clear:both}
36
 
37
  /*# sourceMappingURL=jetpack-admin.min.css.map */
32
  @media (max-width: 782px){.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column){padding:11px 10px;display:block}.jetpack_page_jetpack_modules #doaction{padding:7px 14px}.jetpack_page_jetpack_modules .fixed-top thead .check-column{padding:28px 10px 0 10px}.jetpack_page_jetpack_modules .filter-search{margin-top:28px}.jetpack_page_jetpack_modules .filter-search .button{padding:7px 14px}.manage-right.show .subsubsub li{padding:5px}}@media (max-width: 650px){.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{float:none;padding-right:18px}}@media (max-width: 430px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{display:block}}.configure-module p{font-size:14px}.configure-module p.success,.configure-module p.error{color:#fff;padding:10px}.configure-module p.success{background-color:#81a844}.configure-module p.error{background-color:#d94f4f}.protect-status p{font-size:16px}.protect-status strong{display:inline-block;margin-top:10px;background:#fff;padding:10px;border:1px #ddd solid;font-size:16px;color:#000;max-width:100%}.protect-status.attn{color:#d94f4f}.protect-status.working{color:#81a844}#non-editable-whitelist{margin-top:15px}.protect-whitelist textarea{width:100%;min-height:150px}#editable-whitelist .whitelist-table{width:100%}.configure-module input[disabled]{opacity:.5}.configure-module input.button-primary{font-weight:bold}.whitelist-table{border-top:1px solid;border-left:1px solid;border-color:#ddd;background-color:#fff}.whitelist-table td,.whitelist-table th{padding:10px;margin:0;border-bottom:1px solid;border-right:1px solid;border-color:#ddd;font-size:14px}.whitelist-table th.heading{font-weight:bold;color:#5d6d74;text-align:right;background-color:#eee}.whitelist-table td.item-actions{border-right:none;text-align:left}.whitelist-table .toolbar{padding:0}.whitelist-table .add-btn{text-align:center;width:10%;border-right:1px #ddd solid}.ip-address,.enter-ip{width:90%;text-align:right;vertical-align:middle}.delete-ip-address{text-align:center;border:0;background:transparent;color:#6f7476;box-shadow:none;font-size:20px;margin:0;padding:0;cursor:pointer;border-radius:2px}.delete-ip-address:hover{background:#eee}.toolbar div{float:right;padding:10px}@media only screen and (min-width: 1100px){#non-editable-whitelist{width:28%;float:left;margin-top:0}.protect-whitelist{width:65%;float:right}}@media only screen and (max-width: 1130px){.enter-ip input[type="text"]{max-width:175px}}@media only screen and (max-width: 1250px) and (min-width: 1065px), (max-width: 730px) and (min-width: 600px){.enter-ip{width:85%}.add-btn{width:15%}}@media only screen and (max-width: 782px){.add-btn{text-align:left}.add-btn .ip-add{margin-top:4px;margin-bottom:3px}}@media only screen and (max-width: 730px){.add-btn{text-align:center}}@media only screen and (max-width: 665px) and (min-width: 600px){.enter-ip input[type="text"]{max-width:165px}}@media only screen and (max-width: 600px){.toolbar div{width:100%}.add-btn{border-top:1px #ddd solid}.enter-ip{text-align:center}.enter-ip strong{display:block;margin-bottom:5px}.enter-ip input[type="text"]{width:100%;max-width:100%}.add-btn input,.enter-ip .button{width:50%;margin:0 auto}.enter-ip .button{margin-top:10px}}@media only screen and (max-width: 400px){.protect-status strong{font-size:12px;overflow:auto}.add-btn input,.enter-ip .button{width:100%}}.my-jetpack-actions{margin:0 0 40px 0}.my-jetpack-actions .j-col{padding:0;text-align:center}.my-jetpack-actions #user-list{height:30px;margin-top:-1px;margin-right:-3px}#jetpack-disconnect-content{display:none;text-align:center}#jetpack-disconnect-content .cancel-disconnect{display:block;margin-top:10px}.connection-details{border:1px #ddd solid}.connection-details.local-user{margin-bottom:10px}.connection-details .user-01,.connection-details .wpuser-02,.connection-details .action-btns{padding:10px}.connection-details .user-01 .button,.connection-details .user-01 select,.connection-details .wpuser-02 .button,.connection-details .wpuser-02 select,.connection-details .action-btns .button,.connection-details .action-btns select{margin-top:5px}.connection-details .wpuser-02{margin-top:10px}.connection-details h3{padding:10px;margin:0;background:#eee;border-bottom:1px #ddd solid;font-size:14px}.jp-user img{margin-left:10px;border-radius:50%}.jp-user div,.wp-user div,.wp-action div{display:inline-block;width:100%}.j-col.jp-user,.j-col.wp-user,.j-col.wp-action{padding:0}.my-jetpack-actions select{max-width:150px}.j-actions .button:nth-child(3){margin-left:5px}.j-row.disconnect{text-align:center}.j-row.disconnect .button{margin:0 auto}a.what-is-primary{color:#b4b9be;margin-right:4px}@media (max-width: 782px){.wp-action{border-top:1px #ddd solid}.wp-action h3{display:none}}@media screen and (max-width: 500px){.connection-details{font-size:11px}.connection-details h3{font-size:12px;padding:5px}.connection-details .user-01,.connection-details .wpuser-02{padding:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}.connection-details .action-btns{text-align:center}}@media (max-width: 530px){.connection-details .wpuser-02{margin-top:0;padding:12px}}@media screen and (max-width: 450px){.j-actions .button{width:100%;margin-bottom:5px;text-align:center}.j-actions .button.alignright{float:none}}@media screen and (max-width: 350px){.user-01,.wpuser-02{max-width:100px}}.manage__icon{width:155px;height:155px;margin:20px auto}.manage-page .manage__description{max-width:600px;text-align:center;font-size:22px;color:#999;margin:20px auto}.manage-page .manage__button{font-size:16px;padding:0 20px;height:40px;line-height:40px}.manage__title .genericon{font-size:38px;color:#81A944}.manage__link{font-size:16px;padding:0 20px;height:40px;line-height:40px;font-weight:normal}.manage__link .genericon{font-size:28px;vertical-align:middle;margin-top:-6px}.connection-landing{text-align:center}.connection-landing h1{margin-bottom:0}.connection-landing h2{margin:0;padding:1.14286em 0;font-size:1.57143em;line-height:160%;font-weight:400}.connection-landing h2+p{margin-top:0}.connection-landing p{color:#686f72}.connect-card{text-align:center;margin:2.14286em auto 1.42857em;padding:0 4.28571em 1.42857em}.connect-card p{font-size:1.14286em}@media (max-width: 782px){.connect-card{padding:0 1.42857em 1.42857em}}
33
  .jp-card{background:#fff;border:1px #d9d9d9 solid;text-align:center;margin-bottom:2.85714em}.jp-card p{font-size:1.14286em}.jp-card .j-int{padding:0 4.28571em}.feature-container{background:#f4f4f4}.feature-container .j-int{background:#fff;padding:0}.feature-container .first-header{position:relative}@media (max-width: 900px){.feature-container .first-header{border-bottom:1px #d9d9d9 solid;background-image:none}.feature-container .first-header .j-header-img{display:none}}@media (min-width: 900px){.feature-container .first-header{background:url("../images/connection-landing/stars-right.svg") no-repeat,url("../images/connection-landing/stars-left.svg") no-repeat,#fff;background-position:10% 50%, 10% 50%;background-size:100px, 125px}}.feature-container .first-header .j-header-img{position:absolute;right:0;left:0;bottom:0}.feature-container .first-header .j-header-img img{margin:0 auto;max-width:100%;z-index:1001;position:absolute;right:0;left:0;bottom:0}@media (min-width: 900px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-12px}}@media (min-width: 1147px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-10px}}.feature-container .first-header .j-header-img img+img{z-index:999}.feature-container .secondary-header{background:transparent;padding:0 10em}@media (max-width: 782px){.feature-container .secondary-header{padding:0 1.42857em}}.feature-container .j-feature-img{padding:0 1.42857em;margin-bottom:2.85714em}.feature-container .j-feature-img img{width:100%}.feature-container .j-feature-img:last-of-type{margin-bottom:1.42857em}@media (min-width: 900px){.j-traffic .first-header{padding-bottom:200px}}
34
  @media (min-width: 900px){.j-security .first-header{padding-bottom:225px}}
35
+ .three-feature{margin:1.42857em 0;padding:0 1.42857em;display:-moz-box;display:-ms-flexbox;display:flex;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media (max-width: 782px){.three-feature{-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width: 530px){.three-feature{padding:0}}.three-feature .j-col{border:1px #d9d9d9 solid;text-align:right;padding:0;background:#f9f9f9}@media (max-width: 782px){.three-feature .j-col{margin-bottom:1.42857em}}@media (max-width: 530px){.three-feature .j-col{border-right:none;border-left:none}}.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}@media (max-width: 782px){.three-feature .j-col:nth-of-type(2){border:1px #d9d9d9 solid}}@media (max-width: 530px){.three-feature .j-col:nth-of-type(2){border-right:none;border-left:none}}.three-feature h3{font-weight:600;font-size:1.14286em;min-width:15.35714em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width: 782px){.three-feature h3{font-size:1em}}.three-feature .feature-img{background:#fff;border-bottom:1px #d9d9d9 solid;text-align:center}.three-feature .feature-img img{width:100%;max-width:500px;margin:0 auto}.three-feature p{line-height:150%;padding-bottom:0;font-size:1em}.three-feature h3,.three-feature p{margin:0;padding:1.42857em}@media (max-width: 782px){.three-feature h3,.three-feature p{font-size:0.92857em}}.three-feature h3{padding-bottom:0}.jp-content .hide{display:none}.jp-content .pointer{cursor:pointer}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font:400 1.75em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-connect .j-col{padding:0}.wpcom-connect .connect-desc{padding-left:25px}.wpcom-connect .connect-btn{text-align:center}.module-grid h2{color:#000;font:300 2.57143em/1em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif}.download-jetpack{margin-top:1em !important}.jump-start-area{background:#fff;border:1px #d9d9d9 solid;text-align:center;padding:0 1.42857em}.jump-start-area p{font-size:1.14286em}.jump-start-area h1{margin:1em auto 0}.jumpstart-message p{padding-left:25px}.jumpstart-desc{text-align:right}#jumpstart-cta{text-align:center;display:inline-block;float:none}.dismiss-jumpstart{color:#999;font-size:14px}#jumpstart-cta .button,#jumpstart-cta .button-primary{margin:1em;font-size:18px;height:45px !important;padding:8px 15px 1px}#jumpstart-cta .button-primary{display:block;margin:20px 20px 5px 20px}#jp-config-list{position:relative;padding-top:15px;padding-bottom:15px;margin-right:-15px;margin-left:-15px}#jp-config-list .j-col{padding:15px}#jp-config-list strong{display:inline-block}#jp-config-list small{display:block;margin-top:5px;line-height:150%}#jp-config-list .close{position:absolute;top:10px;left:0;text-transform:uppercase;font-weight:bold;display:block;z-index:5}.jp-config-status{text-transform:uppercase;font-size:10px;font-weight:bold;line-height:100%;color:#fff;background:#9fbd72;border-radius:2px;padding:2px 4px;display:inline-block}.nux-intro h3{background:#81a844;color:#fff;font-weight:600;padding:.75em;margin:0}.nux-intro h4{margin:0 0 2px 0}.nux-intro p{text-align:center;font-size:1.24em;line-height:175%}.nux-intro a{transition:all .4s ease}.nux-intro .j-col{padding:0 0.5em}.nux-intro .j-col:first-of-type{padding-right:0}.nux-intro .j-col:last-of-type{padding-left:0}.nux-intro .nux-in{background:#ececec;-webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.nux-intro .nux-in h3{font-size:1.10em;-webkit-border-top-right-radius:6px;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;border-top-left-radius:6px}.nux-intro .nux-in h3 .dashicons{float:left;color:#658435;font-size:1.25em;padding-right:0}.nux-intro .nux-in h3 .dashicons:hover{color:#57722e}.nux-intro .nux-in p{font-size:.9em;line-height:150%;margin:0;text-align:right;color:#686f72}.nux-intro .nux-in .j-row{border-bottom:1px #f9f9f9 solid;padding:5px 0;position:relative;min-height:70px}.nux-intro .nux-in .j-row:hover{background:#e0e0e0}.nux-intro .nux-in .unavailable{opacity:0.5}.nux-intro .nux-in .unavailable .act{display:none}.nux-intro .nux-in .paid{top:4px;margin-right:12px}.nux-intro .nux-in .dashicons{color:#81a844;font-size:1em;position:relative;top:3px;padding-right:6px}.nux-intro .nux-in .dashicons:hover{color:#57722e}.nux-intro .nux-in .dashicons-external{font-size:1.5em;top:2px;padding-right:3px}.nux-intro .nux-in .lmore{font-size:11px;color:#81a844}.nux-intro .nux-in .lmore:hover{color:#57722e}.nux-intro .feat.j-col{padding:10px 10px 10px 2px}.nux-intro .feat .dashicons{display:none}.nux-intro .activated .feat .dashicons{display:inline-block}.nux-intro .act{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%);left:8px;float:left}.nux-intro .act.j-col{padding:5px;text-align:left}.nux-intro .module-action{text-transform:uppercase;font-size:.85em;font-weight:600}.nux-intro .wpcom h3{background:#0087be}.nux-intro .wpcom h3 .dashicons{color:#00638b}.nux-intro .wpcom h3 .dashicons:hover{color:#005172}.nux-intro .wpcom .j-col{padding:10px}.nux-intro .wpcom .goto{text-align:center;padding:1em}.nux-intro .wpcom .goto:hover{background:#ececec}.nux-intro .wpcom .goto .j-col{padding:0 5px}.nux-intro .wpcom .goto a{width:100%;padding:.25em;height:auto}.nux-intro .wpcom .goto .button{height:auto;min-height:28px;line-height:18px;white-space:normal;max-width:200px;margin-bottom:0;padding-top:4px;padding-bottom:5px}.nux-intro .wpcom .goto .feat{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.nux-intro .wpcom .goto.activated .feat{left:50%;-ms-transform:translate(50%, -50%);-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%)}.nux-intro .nux-foot .j-col{padding:1em}.nux-foot{margin-top:2em;background:#ececec;border-radius:6px}.nux-foot .j-col{min-height:75px;padding:1em}@media (max-width: 650px){.nux-foot .j-col{width:100%}}.nux-foot .j-col+.j-col{border-right:1px #f9f9f9 solid}@media (max-width: 650px){.nux-foot .j-col+.j-col{border-right:none;border-top:1px #f9f9f9 solid}}.nux-foot .actions{margin-top:1em}.nux-foot a{text-decoration:underline}.nux-foot img{float:left;margin-right:1em;width:75px;border-radius:4px}.nux-foot p{font-size:.9em;text-align:right;font-weight:600;margin-top:0}.nux-foot p+p{font-weight:400;margin-bottom:0}.nux-foot ul{font-size:.9em;margin-bottom:0}.nux-foot ul li{margin-left:.875em;margin-bottom:0;line-height:175%;display:inline-block;vertical-align:middle}.form-toggle[type="checkbox"]{opacity:0;position:absolute}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:2px;width:40px;height:24px;background:#b9b9b9;vertical-align:middle;outline:0;cursor:pointer;transition:all .4s ease}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{right:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.form-toggle__switch:hover{background:#bdd597}.form-toggle__label{cursor:pointer}.plugin-action__label{padding-left:5px;top:-1px;position:relative;color:#8e9598}.activated .plugin-action__label{color:#81a844}.form-toggle:focus+.form-toggle__label .form-toggle__switch,.form-toggle:focus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #0087be}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{right:16px}.form-toggle:checked:hover+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle:disabled+.form-toggle__label .form-toggle__switch,.form-toggle:disabled:hover+.form-toggle__label .form-toggle__switch{background:#e9eff3}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__switch:after{right:8px}@media (max-width: 1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}.nux-intro .main-col{width:50%;margin-bottom:2em}.nux-intro .main-col.wpcom{width:100%}.nux-intro .main-col+.main-col{padding-left:0}.nux-intro .wpcom{padding:0}.nux-intro .wpcom .j-row{width:50%;float:right;border-bottom:1px #f9f9f9 solid;border-left:1px #f9f9f9 solid}.nux-intro .wpcom .j-row:last-of-type{width:100%;float:none;clear:both;border:none;border-top:1px #f9f9f9 solid;position:relative;top:-1px}.nux-foot .j-col{border:none}}@media (max-width: 900px){.nux-intro .main-col{width:100%;padding:0;margin-bottom:2em}.nux-intro .wpcom .j-row{width:100%;float:none}}@media (max-width: 782px){#jumpstart-cta .button-primary{margin:10px 0 5px 0}#jump-start-area .spinner{background-position:50% 35%}}@media (max-width: 600px){.nux-intro h1{font-size:1.75em}.nux-intro p{font-size:1em}}@media (max-width: 530px){.jp-content .landing{padding:0 .5em}#jump-start-area{padding:0 1em}.jumpstart-message p{padding-left:0}#jumpstart-cta .button-primary{margin:0 0 5px 0;padding-bottom:10px}.footer .a8c-attribution a:after{top:6px}}.nav-horizontal:before,.features:before,.modules:before,.load-more:before,.nav-horizontal:after,.features:after,.modules:after,.load-more:after{content:"";display:table}.nav-horizontal:after,.features:after,.modules:after,.load-more:after{clear:both}
36
 
37
  /*# sourceMappingURL=jetpack-admin.min.css.map */
css/jetpack-admin.css CHANGED
@@ -3474,6 +3474,12 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
3474
  -webkit-transform: translate(0, -50%);
3475
  transform: translate(0, -50%);
3476
  }
 
 
 
 
 
 
3477
  .nux-intro .nux-foot .j-col {
3478
  padding: 1em;
3479
  }
@@ -3669,9 +3675,6 @@ So I moved to stack the svgs as actual imgs instead. IE also had a hard time dea
3669
  position: relative;
3670
  top: -1px;
3671
  }
3672
- .nux-intro .wpcom .goto .feat a {
3673
- float: left;
3674
- }
3675
 
3676
  .nux-foot .j-col {
3677
  border: none;
3474
  -webkit-transform: translate(0, -50%);
3475
  transform: translate(0, -50%);
3476
  }
3477
+ .nux-intro .wpcom .goto.activated .feat {
3478
+ right: 50%;
3479
+ -ms-transform: translate(50%, -50%);
3480
+ -webkit-transform: translate(50%, -50%);
3481
+ transform: translate(50%, -50%);
3482
+ }
3483
  .nux-intro .nux-foot .j-col {
3484
  padding: 1em;
3485
  }
3675
  position: relative;
3676
  top: -1px;
3677
  }
 
 
 
3678
 
3679
  .nux-foot .j-col {
3680
  border: none;
css/jetpack-admin.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../scss/_utilities/_grid.scss","jetpack-admin.css","../scss/_utilities/mixins/_breakpoint.scss","../scss/atoms/typography/_typography.scss","../scss/atoms/_media.scss","../scss/atoms/_animations.scss","../scss/atoms/_buttons.scss","../scss/atoms/icons/_automatticons.scss","../scss/atoms/icons/_jetpack.scss","../scss/molecules/_nav-horizontal.scss","../scss/templates/_main.scss","../scss/templates/_settings.scss","../scss/pages/_protect.scss","../scss/pages/_connection-settings.scss","../scss/pages/_manage.scss","../scss/templates/_connection-landing.scss","../scss/atoms/colors/_colors.scss"],"names":[],"mappings":"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","file":"jetpack-admin.css"}
1
+ {"version":3,"sources":["../scss/_utilities/_grid.scss","jetpack-admin.css","../scss/_utilities/mixins/_breakpoint.scss","../scss/atoms/typography/_typography.scss","../scss/atoms/_media.scss","../scss/atoms/_animations.scss","../scss/pages/_protect.scss"],"names":[],"mappings":"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","file":"jetpack-admin.css"}
css/jetpack-admin.min.css CHANGED
@@ -32,6 +32,6 @@
32
  @media (max-width: 782px){.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column){padding:11px 10px;display:block}.jetpack_page_jetpack_modules #doaction{padding:7px 14px}.jetpack_page_jetpack_modules .fixed-top thead .check-column{padding:28px 10px 0 10px}.jetpack_page_jetpack_modules .filter-search{margin-top:28px}.jetpack_page_jetpack_modules .filter-search .button{padding:7px 14px}.manage-right.show .subsubsub li{padding:5px}}@media (max-width: 650px){.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{float:none;padding-left:18px}}@media (max-width: 430px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{display:block}}.configure-module p{font-size:14px}.configure-module p.success,.configure-module p.error{color:#fff;padding:10px}.configure-module p.success{background-color:#81a844}.configure-module p.error{background-color:#d94f4f}.protect-status p{font-size:16px}.protect-status strong{display:inline-block;margin-top:10px;background:#fff;padding:10px;border:1px #ddd solid;font-size:16px;color:#000;max-width:100%}.protect-status.attn{color:#d94f4f}.protect-status.working{color:#81a844}#non-editable-whitelist{margin-top:15px}.protect-whitelist textarea{width:100%;min-height:150px}#editable-whitelist .whitelist-table{width:100%}.configure-module input[disabled]{opacity:.5}.configure-module input.button-primary{font-weight:bold}.whitelist-table{border-top:1px solid;border-right:1px solid;border-color:#ddd;background-color:#fff}.whitelist-table td,.whitelist-table th{padding:10px;margin:0;border-bottom:1px solid;border-left:1px solid;border-color:#ddd;font-size:14px}.whitelist-table th.heading{font-weight:bold;color:#5d6d74;text-align:left;background-color:#eee}.whitelist-table td.item-actions{border-left:none;text-align:right}.whitelist-table .toolbar{padding:0}.whitelist-table .add-btn{text-align:center;width:10%;border-left:1px #ddd solid}.ip-address,.enter-ip{width:90%;text-align:left;vertical-align:middle}.delete-ip-address{text-align:center;border:0;background:transparent;color:#6f7476;box-shadow:none;font-size:20px;margin:0;padding:0;cursor:pointer;border-radius:2px}.delete-ip-address:hover{background:#eee}.toolbar div{float:left;padding:10px}@media only screen and (min-width: 1100px){#non-editable-whitelist{width:28%;float:right;margin-top:0}.protect-whitelist{width:65%;float:left}}@media only screen and (max-width: 1130px){.enter-ip input[type="text"]{max-width:175px}}@media only screen and (max-width: 1250px) and (min-width: 1065px), (max-width: 730px) and (min-width: 600px){.enter-ip{width:85%}.add-btn{width:15%}}@media only screen and (max-width: 782px){.add-btn{text-align:right}.add-btn .ip-add{margin-top:4px;margin-bottom:3px}}@media only screen and (max-width: 730px){.add-btn{text-align:center}}@media only screen and (max-width: 665px) and (min-width: 600px){.enter-ip input[type="text"]{max-width:165px}}@media only screen and (max-width: 600px){.toolbar div{width:100%}.add-btn{border-top:1px #ddd solid}.enter-ip{text-align:center}.enter-ip strong{display:block;margin-bottom:5px}.enter-ip input[type="text"]{width:100%;max-width:100%}.add-btn input,.enter-ip .button{width:50%;margin:0 auto}.enter-ip .button{margin-top:10px}}@media only screen and (max-width: 400px){.protect-status strong{font-size:12px;overflow:auto}.add-btn input,.enter-ip .button{width:100%}}.my-jetpack-actions{margin:0 0 40px 0}.my-jetpack-actions .j-col{padding:0;text-align:center}.my-jetpack-actions #user-list{height:30px;margin-top:-1px;margin-left:-3px}#jetpack-disconnect-content{display:none;text-align:center}#jetpack-disconnect-content .cancel-disconnect{display:block;margin-top:10px}.connection-details{border:1px #ddd solid}.connection-details.local-user{margin-bottom:10px}.connection-details .user-01,.connection-details .wpuser-02,.connection-details .action-btns{padding:10px}.connection-details .user-01 .button,.connection-details .user-01 select,.connection-details .wpuser-02 .button,.connection-details .wpuser-02 select,.connection-details .action-btns .button,.connection-details .action-btns select{margin-top:5px}.connection-details .wpuser-02{margin-top:10px}.connection-details h3{padding:10px;margin:0;background:#eee;border-bottom:1px #ddd solid;font-size:14px}.jp-user img{margin-right:10px;border-radius:50%}.jp-user div,.wp-user div,.wp-action div{display:inline-block;width:100%}.j-col.jp-user,.j-col.wp-user,.j-col.wp-action{padding:0}.my-jetpack-actions select{max-width:150px}.j-actions .button:nth-child(3){margin-right:5px}.j-row.disconnect{text-align:center}.j-row.disconnect .button{margin:0 auto}a.what-is-primary{color:#b4b9be;margin-left:4px}@media (max-width: 782px){.wp-action{border-top:1px #ddd solid}.wp-action h3{display:none}}@media screen and (max-width: 500px){.connection-details{font-size:11px}.connection-details h3{font-size:12px;padding:5px}.connection-details .user-01,.connection-details .wpuser-02{padding:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}.connection-details .action-btns{text-align:center}}@media (max-width: 530px){.connection-details .wpuser-02{margin-top:0;padding:12px}}@media screen and (max-width: 450px){.j-actions .button{width:100%;margin-bottom:5px;text-align:center}.j-actions .button.alignright{float:none}}@media screen and (max-width: 350px){.user-01,.wpuser-02{max-width:100px}}.manage__icon{width:155px;height:155px;margin:20px auto}.manage-page .manage__description{max-width:600px;text-align:center;font-size:22px;color:#999;margin:20px auto}.manage-page .manage__button{font-size:16px;padding:0 20px;height:40px;line-height:40px}.manage__title .genericon{font-size:38px;color:#81A944}.manage__link{font-size:16px;padding:0 20px;height:40px;line-height:40px;font-weight:normal}.manage__link .genericon{font-size:28px;vertical-align:middle;margin-top:-6px}.connection-landing{text-align:center}.connection-landing h1{margin-bottom:0}.connection-landing h2{margin:0;padding:1.14286em 0;font-size:1.57143em;line-height:160%;font-weight:400}.connection-landing h2+p{margin-top:0}.connection-landing p{color:#686f72}.connect-card{text-align:center;margin:2.14286em auto 1.42857em;padding:0 4.28571em 1.42857em}.connect-card p{font-size:1.14286em}@media (max-width: 782px){.connect-card{padding:0 1.42857em 1.42857em}}
33
  .jp-card{background:#fff;border:1px #d9d9d9 solid;text-align:center;margin-bottom:2.85714em}.jp-card p{font-size:1.14286em}.jp-card .j-int{padding:0 4.28571em}.feature-container{background:#f4f4f4}.feature-container .j-int{background:#fff;padding:0}.feature-container .first-header{position:relative}@media (max-width: 900px){.feature-container .first-header{border-bottom:1px #d9d9d9 solid;background-image:none}.feature-container .first-header .j-header-img{display:none}}@media (min-width: 900px){.feature-container .first-header{background:url("../images/connection-landing/stars-right.svg") no-repeat,url("../images/connection-landing/stars-left.svg") no-repeat,#fff;background-position:90% 50%, 10% 50%;background-size:100px, 125px}}.feature-container .first-header .j-header-img{position:absolute;left:0;right:0;bottom:0}.feature-container .first-header .j-header-img img{margin:0 auto;max-width:100%;z-index:1001;position:absolute;left:0;right:0;bottom:0}@media (min-width: 900px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-12px}}@media (min-width: 1147px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-10px}}.feature-container .first-header .j-header-img img+img{z-index:999}.feature-container .secondary-header{background:transparent;padding:0 10em}@media (max-width: 782px){.feature-container .secondary-header{padding:0 1.42857em}}.feature-container .j-feature-img{padding:0 1.42857em;margin-bottom:2.85714em}.feature-container .j-feature-img img{width:100%}.feature-container .j-feature-img:last-of-type{margin-bottom:1.42857em}@media (min-width: 900px){.j-traffic .first-header{padding-bottom:200px}}
34
  @media (min-width: 900px){.j-security .first-header{padding-bottom:225px}}
35
- .three-feature{margin:1.42857em 0;padding:0 1.42857em;display:-moz-box;display:-ms-flexbox;display:flex;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media (max-width: 782px){.three-feature{-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width: 530px){.three-feature{padding:0}}.three-feature .j-col{border:1px #d9d9d9 solid;text-align:left;padding:0;background:#f9f9f9}@media (max-width: 782px){.three-feature .j-col{margin-bottom:1.42857em}}@media (max-width: 530px){.three-feature .j-col{border-left:none;border-right:none}}.three-feature .j-col:nth-of-type(2){border-left:none;border-right:none}@media (max-width: 782px){.three-feature .j-col:nth-of-type(2){border:1px #d9d9d9 solid}}@media (max-width: 530px){.three-feature .j-col:nth-of-type(2){border-left:none;border-right:none}}.three-feature h3{font-weight:600;font-size:1.14286em;min-width:15.35714em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width: 782px){.three-feature h3{font-size:1em}}.three-feature .feature-img{background:#fff;border-bottom:1px #d9d9d9 solid;text-align:center}.three-feature .feature-img img{width:100%;max-width:500px;margin:0 auto}.three-feature p{line-height:150%;padding-bottom:0;font-size:1em}.three-feature h3,.three-feature p{margin:0;padding:1.42857em}@media (max-width: 782px){.three-feature h3,.three-feature p{font-size:0.92857em}}.three-feature h3{padding-bottom:0}.jp-content .hide{display:none}.jp-content .pointer{cursor:pointer}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font:400 1.75em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-connect .j-col{padding:0}.wpcom-connect .connect-desc{padding-right:25px}.wpcom-connect .connect-btn{text-align:center}.module-grid h2{color:#000;font:300 2.57143em/1em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif}.download-jetpack{margin-top:1em !important}.jump-start-area{background:#fff;border:1px #d9d9d9 solid;text-align:center;padding:0 1.42857em}.jump-start-area p{font-size:1.14286em}.jump-start-area h1{margin:1em auto 0}.jumpstart-message p{padding-right:25px}.jumpstart-desc{text-align:left}#jumpstart-cta{text-align:center;display:inline-block;float:none}.dismiss-jumpstart{color:#999;font-size:14px}#jumpstart-cta .button,#jumpstart-cta .button-primary{margin:1em;font-size:18px;height:45px !important;padding:8px 15px 1px}#jumpstart-cta .button-primary{display:block;margin:20px 20px 5px 20px}#jp-config-list{position:relative;padding-top:15px;padding-bottom:15px;margin-left:-15px;margin-right:-15px}#jp-config-list .j-col{padding:15px}#jp-config-list strong{display:inline-block}#jp-config-list small{display:block;margin-top:5px;line-height:150%}#jp-config-list .close{position:absolute;top:10px;right:0;text-transform:uppercase;font-weight:bold;display:block;z-index:5}.jp-config-status{text-transform:uppercase;font-size:10px;font-weight:bold;line-height:100%;color:#fff;background:#9fbd72;border-radius:2px;padding:2px 4px;display:inline-block}.nux-intro h3{background:#81a844;color:#fff;font-weight:600;padding:.75em;margin:0}.nux-intro h4{margin:0 0 2px 0}.nux-intro p{text-align:center;font-size:1.24em;line-height:175%}.nux-intro a{transition:all .4s ease}.nux-intro .j-col{padding:0 0.5em}.nux-intro .j-col:first-of-type{padding-left:0}.nux-intro .j-col:last-of-type{padding-right:0}.nux-intro .nux-in{background:#ececec;-webkit-border-bottom-right-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-bottomleft:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px}.nux-intro .nux-in h3{font-size:1.10em;-webkit-border-top-left-radius:6px;-webkit-border-top-right-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border-top-left-radius:6px;border-top-right-radius:6px}.nux-intro .nux-in h3 .dashicons{float:right;color:#658435;font-size:1.25em;padding-left:0}.nux-intro .nux-in h3 .dashicons:hover{color:#57722e}.nux-intro .nux-in p{font-size:.9em;line-height:150%;margin:0;text-align:left;color:#686f72}.nux-intro .nux-in .j-row{border-bottom:1px #f9f9f9 solid;padding:5px 0;position:relative;min-height:70px}.nux-intro .nux-in .j-row:hover{background:#e0e0e0}.nux-intro .nux-in .unavailable{opacity:0.5}.nux-intro .nux-in .unavailable .act{display:none}.nux-intro .nux-in .paid{top:4px;margin-left:12px}.nux-intro .nux-in .dashicons{color:#81a844;font-size:1em;position:relative;top:3px;padding-left:6px}.nux-intro .nux-in .dashicons:hover{color:#57722e}.nux-intro .nux-in .dashicons-external{font-size:1.5em;top:2px;padding-left:3px}.nux-intro .nux-in .lmore{font-size:11px;color:#81a844}.nux-intro .nux-in .lmore:hover{color:#57722e}.nux-intro .feat.j-col{padding:10px 2px 10px 10px}.nux-intro .feat .dashicons{display:none}.nux-intro .activated .feat .dashicons{display:inline-block}.nux-intro .act{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%);right:8px;float:right}.nux-intro .act.j-col{padding:5px;text-align:right}.nux-intro .module-action{text-transform:uppercase;font-size:.85em;font-weight:600}.nux-intro .wpcom h3{background:#0087be}.nux-intro .wpcom h3 .dashicons{color:#00638b}.nux-intro .wpcom h3 .dashicons:hover{color:#005172}.nux-intro .wpcom .j-col{padding:10px}.nux-intro .wpcom .goto{text-align:center;padding:1em}.nux-intro .wpcom .goto:hover{background:#ececec}.nux-intro .wpcom .goto .j-col{padding:0 5px}.nux-intro .wpcom .goto a{width:100%;padding:.25em;height:auto}.nux-intro .wpcom .goto .button{height:auto;min-height:28px;line-height:18px;white-space:normal;max-width:200px;margin-bottom:0;padding-top:4px;padding-bottom:5px}.nux-intro .wpcom .goto .feat{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.nux-intro .nux-foot .j-col{padding:1em}.nux-foot{margin-top:2em;background:#ececec;border-radius:6px}.nux-foot .j-col{min-height:75px;padding:1em}@media (max-width: 650px){.nux-foot .j-col{width:100%}}.nux-foot .j-col+.j-col{border-left:1px #f9f9f9 solid}@media (max-width: 650px){.nux-foot .j-col+.j-col{border-left:none;border-top:1px #f9f9f9 solid}}.nux-foot .actions{margin-top:1em}.nux-foot a{text-decoration:underline}.nux-foot img{float:right;margin-left:1em;width:75px;border-radius:4px}.nux-foot p{font-size:.9em;text-align:left;font-weight:600;margin-top:0}.nux-foot p+p{font-weight:400;margin-bottom:0}.nux-foot ul{font-size:.9em;margin-bottom:0}.nux-foot ul li{margin-right:.875em;margin-bottom:0;line-height:175%;display:inline-block;vertical-align:middle}.form-toggle[type="checkbox"]{opacity:0;position:absolute}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:2px;width:40px;height:24px;background:#b9b9b9;vertical-align:middle;outline:0;cursor:pointer;transition:all .4s ease}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{left:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.form-toggle__switch:hover{background:#bdd597}.form-toggle__label{cursor:pointer}.plugin-action__label{padding-right:5px;top:-1px;position:relative;color:#8e9598}.activated .plugin-action__label{color:#81a844}.form-toggle:focus+.form-toggle__label .form-toggle__switch,.form-toggle:focus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #0087be}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{left:16px}.form-toggle:checked:hover+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle:disabled+.form-toggle__label .form-toggle__switch,.form-toggle:disabled:hover+.form-toggle__label .form-toggle__switch{background:#e9eff3}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__switch:after{left:8px}@media (max-width: 1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}.nux-intro .main-col{width:50%;margin-bottom:2em}.nux-intro .main-col.wpcom{width:100%}.nux-intro .main-col+.main-col{padding-right:0}.nux-intro .wpcom{padding:0}.nux-intro .wpcom .j-row{width:50%;float:left;border-bottom:1px #f9f9f9 solid;border-right:1px #f9f9f9 solid}.nux-intro .wpcom .j-row:last-of-type{width:100%;float:none;clear:both;border:none;border-top:1px #f9f9f9 solid;position:relative;top:-1px}.nux-intro .wpcom .goto .feat a{float:left}.nux-foot .j-col{border:none}}@media (max-width: 900px){.nux-intro .main-col{width:100%;padding:0;margin-bottom:2em}.nux-intro .wpcom .j-row{width:100%;float:none}}@media (max-width: 782px){#jumpstart-cta .button-primary{margin:10px 0 5px 0}#jump-start-area .spinner{background-position:50% 35%}}@media (max-width: 600px){.nux-intro h1{font-size:1.75em}.nux-intro p{font-size:1em}}@media (max-width: 530px){.jp-content .landing{padding:0 .5em}#jump-start-area{padding:0 1em}.jumpstart-message p{padding-right:0}#jumpstart-cta .button-primary{margin:0 0 5px 0;padding-bottom:10px}.footer .a8c-attribution a:after{top:6px}}.nav-horizontal:before,.features:before,.modules:before,.load-more:before,.nav-horizontal:after,.features:after,.modules:after,.load-more:after{content:"";display:table}.nav-horizontal:after,.features:after,.modules:after,.load-more:after{clear:both}
36
 
37
  /*# sourceMappingURL=jetpack-admin.min.css.map */
32
  @media (max-width: 782px){.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column){padding:11px 10px;display:block}.jetpack_page_jetpack_modules #doaction{padding:7px 14px}.jetpack_page_jetpack_modules .fixed-top thead .check-column{padding:28px 10px 0 10px}.jetpack_page_jetpack_modules .filter-search{margin-top:28px}.jetpack_page_jetpack_modules .filter-search .button{padding:7px 14px}.manage-right.show .subsubsub li{padding:5px}}@media (max-width: 650px){.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{float:none;padding-left:18px}}@media (max-width: 430px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{display:block}}.configure-module p{font-size:14px}.configure-module p.success,.configure-module p.error{color:#fff;padding:10px}.configure-module p.success{background-color:#81a844}.configure-module p.error{background-color:#d94f4f}.protect-status p{font-size:16px}.protect-status strong{display:inline-block;margin-top:10px;background:#fff;padding:10px;border:1px #ddd solid;font-size:16px;color:#000;max-width:100%}.protect-status.attn{color:#d94f4f}.protect-status.working{color:#81a844}#non-editable-whitelist{margin-top:15px}.protect-whitelist textarea{width:100%;min-height:150px}#editable-whitelist .whitelist-table{width:100%}.configure-module input[disabled]{opacity:.5}.configure-module input.button-primary{font-weight:bold}.whitelist-table{border-top:1px solid;border-right:1px solid;border-color:#ddd;background-color:#fff}.whitelist-table td,.whitelist-table th{padding:10px;margin:0;border-bottom:1px solid;border-left:1px solid;border-color:#ddd;font-size:14px}.whitelist-table th.heading{font-weight:bold;color:#5d6d74;text-align:left;background-color:#eee}.whitelist-table td.item-actions{border-left:none;text-align:right}.whitelist-table .toolbar{padding:0}.whitelist-table .add-btn{text-align:center;width:10%;border-left:1px #ddd solid}.ip-address,.enter-ip{width:90%;text-align:left;vertical-align:middle}.delete-ip-address{text-align:center;border:0;background:transparent;color:#6f7476;box-shadow:none;font-size:20px;margin:0;padding:0;cursor:pointer;border-radius:2px}.delete-ip-address:hover{background:#eee}.toolbar div{float:left;padding:10px}@media only screen and (min-width: 1100px){#non-editable-whitelist{width:28%;float:right;margin-top:0}.protect-whitelist{width:65%;float:left}}@media only screen and (max-width: 1130px){.enter-ip input[type="text"]{max-width:175px}}@media only screen and (max-width: 1250px) and (min-width: 1065px), (max-width: 730px) and (min-width: 600px){.enter-ip{width:85%}.add-btn{width:15%}}@media only screen and (max-width: 782px){.add-btn{text-align:right}.add-btn .ip-add{margin-top:4px;margin-bottom:3px}}@media only screen and (max-width: 730px){.add-btn{text-align:center}}@media only screen and (max-width: 665px) and (min-width: 600px){.enter-ip input[type="text"]{max-width:165px}}@media only screen and (max-width: 600px){.toolbar div{width:100%}.add-btn{border-top:1px #ddd solid}.enter-ip{text-align:center}.enter-ip strong{display:block;margin-bottom:5px}.enter-ip input[type="text"]{width:100%;max-width:100%}.add-btn input,.enter-ip .button{width:50%;margin:0 auto}.enter-ip .button{margin-top:10px}}@media only screen and (max-width: 400px){.protect-status strong{font-size:12px;overflow:auto}.add-btn input,.enter-ip .button{width:100%}}.my-jetpack-actions{margin:0 0 40px 0}.my-jetpack-actions .j-col{padding:0;text-align:center}.my-jetpack-actions #user-list{height:30px;margin-top:-1px;margin-left:-3px}#jetpack-disconnect-content{display:none;text-align:center}#jetpack-disconnect-content .cancel-disconnect{display:block;margin-top:10px}.connection-details{border:1px #ddd solid}.connection-details.local-user{margin-bottom:10px}.connection-details .user-01,.connection-details .wpuser-02,.connection-details .action-btns{padding:10px}.connection-details .user-01 .button,.connection-details .user-01 select,.connection-details .wpuser-02 .button,.connection-details .wpuser-02 select,.connection-details .action-btns .button,.connection-details .action-btns select{margin-top:5px}.connection-details .wpuser-02{margin-top:10px}.connection-details h3{padding:10px;margin:0;background:#eee;border-bottom:1px #ddd solid;font-size:14px}.jp-user img{margin-right:10px;border-radius:50%}.jp-user div,.wp-user div,.wp-action div{display:inline-block;width:100%}.j-col.jp-user,.j-col.wp-user,.j-col.wp-action{padding:0}.my-jetpack-actions select{max-width:150px}.j-actions .button:nth-child(3){margin-right:5px}.j-row.disconnect{text-align:center}.j-row.disconnect .button{margin:0 auto}a.what-is-primary{color:#b4b9be;margin-left:4px}@media (max-width: 782px){.wp-action{border-top:1px #ddd solid}.wp-action h3{display:none}}@media screen and (max-width: 500px){.connection-details{font-size:11px}.connection-details h3{font-size:12px;padding:5px}.connection-details .user-01,.connection-details .wpuser-02{padding:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}.connection-details .action-btns{text-align:center}}@media (max-width: 530px){.connection-details .wpuser-02{margin-top:0;padding:12px}}@media screen and (max-width: 450px){.j-actions .button{width:100%;margin-bottom:5px;text-align:center}.j-actions .button.alignright{float:none}}@media screen and (max-width: 350px){.user-01,.wpuser-02{max-width:100px}}.manage__icon{width:155px;height:155px;margin:20px auto}.manage-page .manage__description{max-width:600px;text-align:center;font-size:22px;color:#999;margin:20px auto}.manage-page .manage__button{font-size:16px;padding:0 20px;height:40px;line-height:40px}.manage__title .genericon{font-size:38px;color:#81A944}.manage__link{font-size:16px;padding:0 20px;height:40px;line-height:40px;font-weight:normal}.manage__link .genericon{font-size:28px;vertical-align:middle;margin-top:-6px}.connection-landing{text-align:center}.connection-landing h1{margin-bottom:0}.connection-landing h2{margin:0;padding:1.14286em 0;font-size:1.57143em;line-height:160%;font-weight:400}.connection-landing h2+p{margin-top:0}.connection-landing p{color:#686f72}.connect-card{text-align:center;margin:2.14286em auto 1.42857em;padding:0 4.28571em 1.42857em}.connect-card p{font-size:1.14286em}@media (max-width: 782px){.connect-card{padding:0 1.42857em 1.42857em}}
33
  .jp-card{background:#fff;border:1px #d9d9d9 solid;text-align:center;margin-bottom:2.85714em}.jp-card p{font-size:1.14286em}.jp-card .j-int{padding:0 4.28571em}.feature-container{background:#f4f4f4}.feature-container .j-int{background:#fff;padding:0}.feature-container .first-header{position:relative}@media (max-width: 900px){.feature-container .first-header{border-bottom:1px #d9d9d9 solid;background-image:none}.feature-container .first-header .j-header-img{display:none}}@media (min-width: 900px){.feature-container .first-header{background:url("../images/connection-landing/stars-right.svg") no-repeat,url("../images/connection-landing/stars-left.svg") no-repeat,#fff;background-position:90% 50%, 10% 50%;background-size:100px, 125px}}.feature-container .first-header .j-header-img{position:absolute;left:0;right:0;bottom:0}.feature-container .first-header .j-header-img img{margin:0 auto;max-width:100%;z-index:1001;position:absolute;left:0;right:0;bottom:0}@media (min-width: 900px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-12px}}@media (min-width: 1147px){.feature-container .first-header .j-header-img img:first-of-type{bottom:-10px}}.feature-container .first-header .j-header-img img+img{z-index:999}.feature-container .secondary-header{background:transparent;padding:0 10em}@media (max-width: 782px){.feature-container .secondary-header{padding:0 1.42857em}}.feature-container .j-feature-img{padding:0 1.42857em;margin-bottom:2.85714em}.feature-container .j-feature-img img{width:100%}.feature-container .j-feature-img:last-of-type{margin-bottom:1.42857em}@media (min-width: 900px){.j-traffic .first-header{padding-bottom:200px}}
34
  @media (min-width: 900px){.j-security .first-header{padding-bottom:225px}}
35
+ .three-feature{margin:1.42857em 0;padding:0 1.42857em;display:-moz-box;display:-ms-flexbox;display:flex;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media (max-width: 782px){.three-feature{-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width: 530px){.three-feature{padding:0}}.three-feature .j-col{border:1px #d9d9d9 solid;text-align:left;padding:0;background:#f9f9f9}@media (max-width: 782px){.three-feature .j-col{margin-bottom:1.42857em}}@media (max-width: 530px){.three-feature .j-col{border-left:none;border-right:none}}.three-feature .j-col:nth-of-type(2){border-left:none;border-right:none}@media (max-width: 782px){.three-feature .j-col:nth-of-type(2){border:1px #d9d9d9 solid}}@media (max-width: 530px){.three-feature .j-col:nth-of-type(2){border-left:none;border-right:none}}.three-feature h3{font-weight:600;font-size:1.14286em;min-width:15.35714em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width: 782px){.three-feature h3{font-size:1em}}.three-feature .feature-img{background:#fff;border-bottom:1px #d9d9d9 solid;text-align:center}.three-feature .feature-img img{width:100%;max-width:500px;margin:0 auto}.three-feature p{line-height:150%;padding-bottom:0;font-size:1em}.three-feature h3,.three-feature p{margin:0;padding:1.42857em}@media (max-width: 782px){.three-feature h3,.three-feature p{font-size:0.92857em}}.three-feature h3{padding-bottom:0}.jp-content .hide{display:none}.jp-content .pointer{cursor:pointer}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font:400 1.75em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-connect .j-col{padding:0}.wpcom-connect .connect-desc{padding-right:25px}.wpcom-connect .connect-btn{text-align:center}.module-grid h2{color:#000;font:300 2.57143em/1em "proxima-nova","Open Sans",Helvetica,Arial,sans-serif}.download-jetpack{margin-top:1em !important}.jump-start-area{background:#fff;border:1px #d9d9d9 solid;text-align:center;padding:0 1.42857em}.jump-start-area p{font-size:1.14286em}.jump-start-area h1{margin:1em auto 0}.jumpstart-message p{padding-right:25px}.jumpstart-desc{text-align:left}#jumpstart-cta{text-align:center;display:inline-block;float:none}.dismiss-jumpstart{color:#999;font-size:14px}#jumpstart-cta .button,#jumpstart-cta .button-primary{margin:1em;font-size:18px;height:45px !important;padding:8px 15px 1px}#jumpstart-cta .button-primary{display:block;margin:20px 20px 5px 20px}#jp-config-list{position:relative;padding-top:15px;padding-bottom:15px;margin-left:-15px;margin-right:-15px}#jp-config-list .j-col{padding:15px}#jp-config-list strong{display:inline-block}#jp-config-list small{display:block;margin-top:5px;line-height:150%}#jp-config-list .close{position:absolute;top:10px;right:0;text-transform:uppercase;font-weight:bold;display:block;z-index:5}.jp-config-status{text-transform:uppercase;font-size:10px;font-weight:bold;line-height:100%;color:#fff;background:#9fbd72;border-radius:2px;padding:2px 4px;display:inline-block}.nux-intro h3{background:#81a844;color:#fff;font-weight:600;padding:.75em;margin:0}.nux-intro h4{margin:0 0 2px 0}.nux-intro p{text-align:center;font-size:1.24em;line-height:175%}.nux-intro a{transition:all .4s ease}.nux-intro .j-col{padding:0 0.5em}.nux-intro .j-col:first-of-type{padding-left:0}.nux-intro .j-col:last-of-type{padding-right:0}.nux-intro .nux-in{background:#ececec;-webkit-border-bottom-right-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-bottomleft:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px}.nux-intro .nux-in h3{font-size:1.10em;-webkit-border-top-left-radius:6px;-webkit-border-top-right-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border-top-left-radius:6px;border-top-right-radius:6px}.nux-intro .nux-in h3 .dashicons{float:right;color:#658435;font-size:1.25em;padding-left:0}.nux-intro .nux-in h3 .dashicons:hover{color:#57722e}.nux-intro .nux-in p{font-size:.9em;line-height:150%;margin:0;text-align:left;color:#686f72}.nux-intro .nux-in .j-row{border-bottom:1px #f9f9f9 solid;padding:5px 0;position:relative;min-height:70px}.nux-intro .nux-in .j-row:hover{background:#e0e0e0}.nux-intro .nux-in .unavailable{opacity:0.5}.nux-intro .nux-in .unavailable .act{display:none}.nux-intro .nux-in .paid{top:4px;margin-left:12px}.nux-intro .nux-in .dashicons{color:#81a844;font-size:1em;position:relative;top:3px;padding-left:6px}.nux-intro .nux-in .dashicons:hover{color:#57722e}.nux-intro .nux-in .dashicons-external{font-size:1.5em;top:2px;padding-left:3px}.nux-intro .nux-in .lmore{font-size:11px;color:#81a844}.nux-intro .nux-in .lmore:hover{color:#57722e}.nux-intro .feat.j-col{padding:10px 2px 10px 10px}.nux-intro .feat .dashicons{display:none}.nux-intro .activated .feat .dashicons{display:inline-block}.nux-intro .act{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%);right:8px;float:right}.nux-intro .act.j-col{padding:5px;text-align:right}.nux-intro .module-action{text-transform:uppercase;font-size:.85em;font-weight:600}.nux-intro .wpcom h3{background:#0087be}.nux-intro .wpcom h3 .dashicons{color:#00638b}.nux-intro .wpcom h3 .dashicons:hover{color:#005172}.nux-intro .wpcom .j-col{padding:10px}.nux-intro .wpcom .goto{text-align:center;padding:1em}.nux-intro .wpcom .goto:hover{background:#ececec}.nux-intro .wpcom .goto .j-col{padding:0 5px}.nux-intro .wpcom .goto a{width:100%;padding:.25em;height:auto}.nux-intro .wpcom .goto .button{height:auto;min-height:28px;line-height:18px;white-space:normal;max-width:200px;margin-bottom:0;padding-top:4px;padding-bottom:5px}.nux-intro .wpcom .goto .feat{position:absolute;top:50%;-ms-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.nux-intro .wpcom .goto.activated .feat{right:50%;-ms-transform:translate(50%, -50%);-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%)}.nux-intro .nux-foot .j-col{padding:1em}.nux-foot{margin-top:2em;background:#ececec;border-radius:6px}.nux-foot .j-col{min-height:75px;padding:1em}@media (max-width: 650px){.nux-foot .j-col{width:100%}}.nux-foot .j-col+.j-col{border-left:1px #f9f9f9 solid}@media (max-width: 650px){.nux-foot .j-col+.j-col{border-left:none;border-top:1px #f9f9f9 solid}}.nux-foot .actions{margin-top:1em}.nux-foot a{text-decoration:underline}.nux-foot img{float:right;margin-left:1em;width:75px;border-radius:4px}.nux-foot p{font-size:.9em;text-align:left;font-weight:600;margin-top:0}.nux-foot p+p{font-weight:400;margin-bottom:0}.nux-foot ul{font-size:.9em;margin-bottom:0}.nux-foot ul li{margin-right:.875em;margin-bottom:0;line-height:175%;display:inline-block;vertical-align:middle}.form-toggle[type="checkbox"]{opacity:0;position:absolute}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:2px;width:40px;height:24px;background:#b9b9b9;vertical-align:middle;outline:0;cursor:pointer;transition:all .4s ease}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{left:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.form-toggle__switch:hover{background:#bdd597}.form-toggle__label{cursor:pointer}.plugin-action__label{padding-right:5px;top:-1px;position:relative;color:#8e9598}.activated .plugin-action__label{color:#81a844}.form-toggle:focus+.form-toggle__label .form-toggle__switch,.form-toggle:focus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #0087be}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{left:16px}.form-toggle:checked:hover+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle:disabled+.form-toggle__label .form-toggle__switch,.form-toggle:disabled:hover+.form-toggle__label .form-toggle__switch{background:#e9eff3}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#81a844}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#bdd597}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__switch:after{left:8px}@media (max-width: 1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}.nux-intro .main-col{width:50%;margin-bottom:2em}.nux-intro .main-col.wpcom{width:100%}.nux-intro .main-col+.main-col{padding-right:0}.nux-intro .wpcom{padding:0}.nux-intro .wpcom .j-row{width:50%;float:left;border-bottom:1px #f9f9f9 solid;border-right:1px #f9f9f9 solid}.nux-intro .wpcom .j-row:last-of-type{width:100%;float:none;clear:both;border:none;border-top:1px #f9f9f9 solid;position:relative;top:-1px}.nux-foot .j-col{border:none}}@media (max-width: 900px){.nux-intro .main-col{width:100%;padding:0;margin-bottom:2em}.nux-intro .wpcom .j-row{width:100%;float:none}}@media (max-width: 782px){#jumpstart-cta .button-primary{margin:10px 0 5px 0}#jump-start-area .spinner{background-position:50% 35%}}@media (max-width: 600px){.nux-intro h1{font-size:1.75em}.nux-intro p{font-size:1em}}@media (max-width: 530px){.jp-content .landing{padding:0 .5em}#jump-start-area{padding:0 1em}.jumpstart-message p{padding-right:0}#jumpstart-cta .button-primary{margin:0 0 5px 0;padding-bottom:10px}.footer .a8c-attribution a:after{top:6px}}.nav-horizontal:before,.features:before,.modules:before,.load-more:before,.nav-horizontal:after,.features:after,.modules:after,.load-more:after{content:"";display:table}.nav-horizontal:after,.features:after,.modules:after,.load-more:after{clear:both}
36
 
37
  /*# sourceMappingURL=jetpack-admin.min.css.map */
css/jetpack-admin.min.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../scss/_utilities/_grid.scss","../scss/_utilities/mixins/_breakpoint.scss","../scss/atoms/typography/_typography.scss","../scss/atoms/_media.scss","../scss/atoms/_animations.scss","../scss/atoms/_buttons.scss","../scss/atoms/icons/_automatticons.scss","../scss/atoms/icons/_jetpack.scss","../scss/molecules/_nav-horizontal.scss","../scss/templates/_main.scss","../scss/atoms/colors/_colors.scss","../scss/templates/_settings.scss","../scss/pages/_protect.scss","../scss/pages/_connection-settings.scss","../scss/pages/_manage.scss","../scss/templates/_connection-landing.scss","../scss/_utilities/_clearings.scss"],"names":[],"mappings":"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","file":"jetpack-admin.min.css"}
1
+ {"version":3,"sources":["../scss/_utilities/_grid.scss","../scss/_utilities/mixins/_breakpoint.scss","../scss/atoms/typography/_typography.scss","../scss/atoms/_media.scss","../scss/atoms/_animations.scss","../scss/atoms/_buttons.scss","../scss/atoms/icons/_automatticons.scss","../scss/atoms/icons/_jetpack.scss","../scss/molecules/_nav-horizontal.scss","../scss/templates/_main.scss","../scss/atoms/colors/_colors.scss","../scss/templates/_settings.scss","../scss/pages/_protect.scss","../scss/pages/_connection-settings.scss","../scss/pages/_manage.scss","../scss/templates/_connection-landing.scss","../scss/_utilities/_clearings.scss"],"names":[],"mappings":"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","file":"jetpack-admin.min.css"}
css/jetpack-banners.css CHANGED
@@ -2,329 +2,27 @@
2
  * Do not modify this file directly. It is compiled Sass code.
3
  * @see: jetpack/_inc/jetpack.scss
4
  */
5
- #message.jp-identity-crisis {
6
- display: table;
7
- padding: 0;
8
- background: #d94f4f;
9
- border: none;
10
- color: #fff;
11
- }
12
- #message.jp-identity-crisis .service-mark {
13
- display: table-cell;
14
- vertical-align: middle;
15
- padding: 0 20px;
16
- }
17
- #message.jp-identity-crisis .service-mark:before {
18
- font-family: "jetpack" !important;
19
- content: "\f102";
20
- font-size: 40px;
21
- line-height: 1;
22
- color: #fff;
23
- }
24
- #message.jp-identity-crisis .jp-id-banner__content {
25
- display: table;
26
- padding: 10px 10px 10px 0;
27
- }
28
- #message.jp-identity-crisis .jp-id-banner__content .success-notice {
29
- color: #fff;
30
- }
31
- #message.jp-identity-crisis .jp-id-banner__content .banner-content {
32
- display: table-row;
33
- }
34
- #message.jp-identity-crisis .jp-id-banner__content .banner-content p {
35
- margin: 0;
36
- font-size: 13px;
37
- color: #fff;
38
- opacity: 1.0;
39
- }
40
- #message.jp-identity-crisis .jp-id-banner__content .banner-content p strong {
41
- text-decoration: none;
42
- font-weight: 600;
43
- color: #fff;
44
- opacity: 1.0;
45
- }
46
- #message.jp-identity-crisis .jp-id-banner__content .banner-content a {
47
- display: inline-block;
48
- color: rgba(255, 255, 255, 0.8);
49
- border-bottom: 1px solid rgba(255, 255, 255, 0.5);
50
- text-decoration: none;
51
- -webkit-transform: all 1s ease;
52
- }
53
- #message.jp-identity-crisis .jp-id-banner__content .jp-btn-group {
54
- display: table-row;
55
- }
56
- #message.jp-identity-crisis .jp-id-banner__content .jp-btn-group a {
57
- display: inline-block;
58
- margin: 10px 0 0 0;
59
- padding: 0 0 1px 0;
60
- color: rgba(255, 255, 255, 0.8);
61
- border-bottom: 1px solid rgba(255, 255, 255, 0.5);
62
- text-decoration: none;
63
- -webkit-transform: all 1s ease;
64
- }
65
- #message.jp-identity-crisis .jp-id-banner__content .jp-btn-group a:hover {
66
- color: white;
67
- border-bottom: 1px solid rgba(255, 255, 255, 0.8);
68
- }
69
- #message.jp-identity-crisis .jp-id-banner__content .jp-btn-group .idc-separator {
70
- margin: 0 6px;
71
- }
72
-
73
- #message.jp-banner {
74
  position: relative;
75
- margin-bottom: 26px;
76
- padding: 17px 44px 17px 0;
77
- border: none;
78
- background: #81a844;
79
- color: #fff;
80
- overflow: hidden;
81
- -moz-box-sizing: border-box;
82
- box-sizing: border-box;
83
- }
84
- #message.jp-banner:after {
85
- content: '';
86
- position: absolute;
87
- bottom: 0;
88
- right: -100px;
89
- width: 100%;
90
- height: 50px;
91
- background: url("../images/the-footcloud.svg") right bottom no-repeat;
92
- pointer-events: none;
93
- z-index: 1;
94
- }
95
- @media (max-width: 830px) {
96
- #message.jp-banner:after {
97
- display: none;
98
- }
99
- }
100
- #message.jp-banner a {
101
- color: #fff;
102
- }
103
- #message.jp-banner h2 {
104
- display: block;
105
- margin: 0;
106
- padding: 0;
107
- color: #fff;
108
- font-size: 20px;
109
- line-height: 1.3;
110
- font-weight: normal;
111
- }
112
- #message.jp-banner h2 + p {
113
- margin-top: 10px;
114
- }
115
-
116
- .jp-banner a {
117
- padding: 0;
118
- }
119
-
120
- #message .jp-banner__content {
121
- color: #dfffcc;
122
- padding: 0 0 0 20px;
123
- -moz-box-sizing: border-box;
124
- box-sizing: border-box;
125
- width: 50%;
126
- }
127
- @media (max-width: 768px) {
128
- #message .jp-banner__content {
129
- width: 100%;
130
- }
131
- #message .jp-banner__content.is-connection {
132
- width: 100%;
133
- }
134
- }
135
- #message .jp-banner__content a {
136
- text-decoration: underline;
137
- /* Medium.com text underline hack - doesn't work well on small mobile devices... reverting to traditional underline
138
- background-image: linear-gradient(to bottom, rgba(0,0,0,0) 75%, #fff 50%);
139
- background-repeat: repeat-x;
140
- background-size: 2px 2px;
141
- background-position: 0 95%;
142
- display: inline-block;
143
-
144
- @media not all, only screen and (min-resolution: 2dppx), only screen and (-webkit-min-device-pixel-ratio: 2) {
145
- background-image: linear-gradient(to bottom, rgba(0,0,0,0) 75%, #fff 75%);
146
- background-repeat: repeat-x;
147
- }
148
- */
149
- }
150
- #message .jp-banner__content p {
151
- margin: 0;
152
  padding: 0;
153
- line-height: 1.5;
154
  }
155
-
156
- #message .jp-banner__action-container {
157
- position: absolute;
158
- top: 0;
159
- right: 0;
160
- padding-left: 20px;
161
- width: 50%;
162
- height: 100%;
163
- -moz-box-sizing: border-box;
164
- box-sizing: border-box;
165
- }
166
- @media (max-width: 768px) {
167
- #message .jp-banner__action-container {
168
- position: static;
169
- margin: 14px 0 9px;
170
- width: 100%;
171
- }
172
- }
173
- #message .jp-banner__action-container.is-full-width {
174
- position: static;
175
- margin: 14px 0 9px;
176
- width: 100%;
177
- height: auto;
178
- }
179
- @media (max-width: 768px) {
180
- #message .jp-banner__action-container.is-connection {
181
- width: 100%;
182
- }
183
- }
184
-
185
- #message.is-opt-in .jp-banner__content {
186
- width: 60%;
187
- }
188
- #message.is-opt-in .jp-banner__action-container {
189
- width: 40%;
190
- }
191
- @media (max-width: 768px) {
192
- #message.is-opt-in .jp-banner__content, #message.is-opt-in .jp-banner__action-container {
193
- width: 100%;
194
- }
195
- }
196
-
197
- #message .jp-banner__button {
198
- display: inline-block;
199
- position: absolute;
200
- top: 50%;
201
- right: 125px;
202
- margin-top: -23px;
203
- padding: 0.57143em 0.85714em 0.38095em 0.57143em;
204
- border-radius: 6px;
205
- -moz-box-sizing: border-box;
206
- box-sizing: border-box;
207
- background: #518d2a;
208
- box-shadow: 0 4px 0 #3e6c20, 0 2px 3px rgba(0, 0, 0, 0.2);
209
- font: 400 1.5em/1 'Open Sans', Helvetica, sans-serif;
210
- transition: all .1s ease-in-out;
211
- }
212
- @media (max-width: 1175px) {
213
- #message .jp-banner__button {
214
- font-size: 1.25em;
215
- right: 110px;
216
- }
217
- }
218
- @media (max-width: 830px) {
219
- #message .jp-banner__button {
220
- right: 45px;
221
- }
222
- }
223
- @media (max-width: 768px) {
224
- #message .jp-banner__button {
225
- position: static;
226
- margin: 0;
227
- }
228
- }
229
- @media (max-width: 420px) {
230
- #message .jp-banner__button {
231
- display: block;
232
- width: 100%;
233
- text-align: center;
234
- font-size: 1.1em;
235
- right: 0;
236
- }
237
- }
238
- #message .jp-banner__button:hover, #message .jp-banner__button:focus {
239
- box-shadow: 0 4px 0 #3e6c20, 0 2px 3px rgba(0, 0, 0, 0.2);
240
- }
241
- #message .jp-banner__button:active {
242
- outline: none;
243
- -webkit-transform: translateY(2px);
244
- -ms-transform: translateY(2px);
245
- transform: translateY(2px);
246
- box-shadow: 0 0px 0 #3e6c20, 0 0 0 rgba(0, 0, 0, 0.2);
247
  }
248
- #message .jp-banner__button:active:after {
249
- top: -2px;
250
- }
251
- #message .jp-banner__button:before {
252
- content: '';
253
- display: inline-block;
254
- position: relative;
255
- vertical-align: middle;
256
- background: url("../images/connect-plug.svg") center center no-repeat;
257
- background-size: 100%;
258
- top: -2px;
259
- margin-right: 13px;
260
- width: 22px;
261
- height: 22px;
262
- }
263
- @media (max-width: 420px) {
264
- #message .jp-banner__button:before {
265
- display: none;
266
- }
267
- }
268
-
269
- #message .is-full-width .jp-banner__button {
270
- position: static;
271
- margin: 0;
272
  }
273
 
274
- #message .is-opt-in .jp-banner__button:before {
275
- content: "\f147";
276
- width: 20px;
277
- height: 20px;
278
- background: none;
279
- font: normal 20px/1 Dashicons;
280
  }
281
 
282
- #message .jp-banner__dismiss {
283
- position: absolute;
284
- top: 0;
285
- right: 0;
286
- width: 44px;
287
- height: 44px;
288
- text-align: center;
289
- z-index: 99;
290
- }
291
- #message .jp-banner__dismiss:before {
292
- color: #a7c979;
293
- content: '\f158';
294
- font: normal 20px/44px 'dashicons';
295
- }
296
- #message .jp-banner__dismiss:hover {
297
- opacity: 0.8;
298
- }
299
- #message .jp-banner__dismiss:active {
300
- opacity: 1;
301
- outline: none;
302
  }
303
 
304
- #message.jp-banner.protect-error {
305
- background: #fff;
306
- border-left: 4px #d94f4f solid;
307
- }
308
- #message.jp-banner.protect-error .jp-banner__content {
309
- color: #444;
310
- }
311
- #message.jp-banner.protect-error .jp-banner__content h2, #message.jp-banner.protect-error .jp-banner__content a {
312
- color: #d94f4f;
313
- }
314
- #message.jp-banner.protect-error .jp-banner__content a:hover {
315
- color: #d43a3a;
316
- }
317
- #message.jp-banner.protect-error .jp-banner__button {
318
- background: #d94f4f;
319
- box-shadow: none;
320
- color: #fff;
321
- }
322
- #message.jp-banner.protect-error .jp-banner__button:hover, #message.jp-banner.protect-error .jp-banner__button:focus, #message.jp-banner.protect-error .jp-banner__button:active {
323
- box-shadow: none;
324
- }
325
- #message.jp-banner.protect-error .jp-banner__button:hover {
326
- background: #d43a3a;
327
- }
328
- #message.jp-banner.protect-error .jp-banner__dismiss:before {
329
- color: #a0a5aa;
330
  }
2
  * Do not modify this file directly. It is compiled Sass code.
3
  * @see: jetpack/_inc/jetpack.scss
4
  */
5
+ .updated.jp-banner {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  position: relative;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  padding: 0;
 
8
  }
9
+ .updated .jp-banner__header {
10
+ font-size: 18px;
11
+ font-weight: 400;
12
+ margin-top: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  }
14
+ .updated .jp-banner__button-container {
15
+ padding: 12px 0 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  }
17
 
18
+ .jp-banner .notice-dismiss {
19
+ text-decoration: none;
 
 
 
 
20
  }
21
 
22
+ .jp-banner__description {
23
+ font-size: 14px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  }
25
 
26
+ .jp-banner__description-container {
27
+ padding: 16px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  }
css/jetpack-banners.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../scss/organisms/_banners.scss","jetpack-banners.css"],"names":[],"mappings":"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","file":"jetpack-banners.css"}
1
+ {"version":3,"sources":["../scss/organisms/_banners.scss","jetpack-banners.css"],"names":[],"mappings":"AAAA;;;GCGE;AACF;EDCC,oBAAA;ECCC,YAAA;EACD;AACD;EDCE,iBAAA;ECCD,kBAAA;EACD,eAAA;EACC;AACD;EDAG,mBAAA;ECEF;;AAED;EACE,uBAAA;EACD;;AAED;EACC,iBAAA;EACA;;AAED;EACC,eAAA;EACA","file":"jetpack-banners.css"}
css/jetpack-banners.min.css CHANGED
@@ -1,6 +1,3 @@
1
- #message.jp-identity-crisis{display:table;padding:0;background:#d94f4f;border:none;color:#fff}#message.jp-identity-crisis .service-mark{display:table-cell;vertical-align:middle;padding:0 20px}#message.jp-identity-crisis .service-mark:before{font-family:"jetpack" !important;content:"\f102";font-size:40px;line-height:1;color:#fff}#message.jp-identity-crisis .jp-id-banner__content{display:table;padding:10px 10px 10px 0}#message.jp-identity-crisis .jp-id-banner__content .success-notice{color:#fff}#message.jp-identity-crisis .jp-id-banner__content .banner-content{display:table-row}#message.jp-identity-crisis .jp-id-banner__content .banner-content p{margin:0;font-size:13px;color:#fff;opacity:1.0}#message.jp-identity-crisis .jp-id-banner__content .banner-content p strong{text-decoration:none;font-weight:600;color:#fff;opacity:1.0}#message.jp-identity-crisis .jp-id-banner__content .banner-content a{display:inline-block;color:rgba(255,255,255,0.8);border-bottom:1px solid rgba(255,255,255,0.5);text-decoration:none;-webkit-transform:all 1s ease}#message.jp-identity-crisis .jp-id-banner__content .jp-btn-group{display:table-row}#message.jp-identity-crisis .jp-id-banner__content .jp-btn-group a{display:inline-block;margin:10px 0 0 0;padding:0 0 1px 0;color:rgba(255,255,255,0.8);border-bottom:1px solid rgba(255,255,255,0.5);text-decoration:none;-webkit-transform:all 1s ease}#message.jp-identity-crisis .jp-id-banner__content .jp-btn-group a:hover{color:#fff;border-bottom:1px solid rgba(255,255,255,0.8)}#message.jp-identity-crisis .jp-id-banner__content .jp-btn-group .idc-separator{margin:0 6px}#message.jp-banner{position:relative;margin-bottom:26px;padding:17px 44px 17px 0;border:none;background:#81a844;color:#fff;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box}#message.jp-banner:after{content:'';position:absolute;bottom:0;right:-100px;width:100%;height:50px;background:url("../images/the-footcloud.svg") right bottom no-repeat;pointer-events:none;z-index:1}@media (max-width: 830px){#message.jp-banner:after{display:none}}#message.jp-banner a{color:#fff}#message.jp-banner h2{display:block;margin:0;padding:0;color:#fff;font-size:20px;line-height:1.3;font-weight:normal}#message.jp-banner h2+p{margin-top:10px}.jp-banner a{padding:0}#message .jp-banner__content{color:#dfffcc;padding:0 0 0 20px;-moz-box-sizing:border-box;box-sizing:border-box;width:50%}@media (max-width: 768px){#message .jp-banner__content{width:100%}#message .jp-banner__content.is-connection{width:100%}}#message .jp-banner__content a{text-decoration:underline}#message .jp-banner__content p{margin:0;padding:0;line-height:1.5}#message .jp-banner__action-container{position:absolute;top:0;right:0;padding-left:20px;width:50%;height:100%;-moz-box-sizing:border-box;box-sizing:border-box}@media (max-width: 768px){#message .jp-banner__action-container{position:static;margin:14px 0 9px;width:100%}}#message .jp-banner__action-container.is-full-width{position:static;margin:14px 0 9px;width:100%;height:auto}@media (max-width: 768px){#message .jp-banner__action-container.is-connection{width:100%}}
2
- #message.is-opt-in .jp-banner__content{width:60%}#message.is-opt-in .jp-banner__action-container{width:40%}@media (max-width: 768px){#message.is-opt-in .jp-banner__content,#message.is-opt-in .jp-banner__action-container{width:100%}}
3
- #message .jp-banner__button{display:inline-block;position:absolute;top:50%;right:125px;margin-top:-23px;padding:0.57143em 0.85714em 0.38095em 0.57143em;border-radius:6px;-moz-box-sizing:border-box;box-sizing:border-box;background:#518d2a;box-shadow:0 4px 0 #3e6c20,0 2px 3px rgba(0,0,0,0.2);font:400 1.5em/1 'Open Sans', Helvetica, sans-serif;transition:all .1s ease-in-out}@media (max-width: 1175px){#message .jp-banner__button{font-size:1.25em;right:110px}}@media (max-width: 830px){#message .jp-banner__button{right:45px}}@media (max-width: 768px){#message .jp-banner__button{position:static;margin:0}}@media (max-width: 420px){#message .jp-banner__button{display:block;width:100%;text-align:center;font-size:1.1em;right:0}}#message .jp-banner__button:hover,#message .jp-banner__button:focus{box-shadow:0 4px 0 #3e6c20,0 2px 3px rgba(0,0,0,0.2)}#message .jp-banner__button:active{outline:none;-webkit-transform:translateY(2px);-ms-transform:translateY(2px);transform:translateY(2px);box-shadow:0 0px 0 #3e6c20,0 0 0 rgba(0,0,0,0.2)}#message .jp-banner__button:active:after{top:-2px}#message .jp-banner__button:before{content:'';display:inline-block;position:relative;vertical-align:middle;background:url("../images/connect-plug.svg") center center no-repeat;background-size:100%;top:-2px;margin-right:13px;width:22px;height:22px}@media (max-width: 420px){#message .jp-banner__button:before{display:none}}
4
- #message .is-full-width .jp-banner__button{position:static;margin:0}#message .is-opt-in .jp-banner__button:before{content:"\f147";width:20px;height:20px;background:none;font:normal 20px/1 Dashicons}#message .jp-banner__dismiss{position:absolute;top:0;right:0;width:44px;height:44px;text-align:center;z-index:99}#message .jp-banner__dismiss:before{color:#a7c979;content:'\f158';font:normal 20px/44px 'dashicons'}#message .jp-banner__dismiss:hover{opacity:0.8}#message .jp-banner__dismiss:active{opacity:1;outline:none}#message.jp-banner.protect-error{background:#fff;border-left:4px #d94f4f solid}#message.jp-banner.protect-error .jp-banner__content{color:#444}#message.jp-banner.protect-error .jp-banner__content h2,#message.jp-banner.protect-error .jp-banner__content a{color:#d94f4f}#message.jp-banner.protect-error .jp-banner__content a:hover{color:#d43a3a}#message.jp-banner.protect-error .jp-banner__button{background:#d94f4f;box-shadow:none;color:#fff}#message.jp-banner.protect-error .jp-banner__button:hover,#message.jp-banner.protect-error .jp-banner__button:focus,#message.jp-banner.protect-error .jp-banner__button:active{box-shadow:none}#message.jp-banner.protect-error .jp-banner__button:hover{background:#d43a3a}#message.jp-banner.protect-error .jp-banner__dismiss:before{color:#a0a5aa}
5
 
6
  /*# sourceMappingURL=jetpack-banners.min.css.map */
1
+ .updated.jp-banner{position:relative;padding:0}.updated .jp-banner__header{font-size:18px;font-weight:400;margin-top:0}.updated .jp-banner__button-container{padding:12px 0 0}.jp-banner .notice-dismiss{text-decoration:none}.jp-banner__description{font-size:14px}.jp-banner__description-container{padding:16px}
 
 
 
2
 
3
  /*# sourceMappingURL=jetpack-banners.min.css.map */
css/jetpack-banners.min.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../scss/organisms/_banners.scss"],"names":[],"mappings":"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","file":"jetpack-banners.min.css"}
1
+ {"version":3,"sources":["../scss/organisms/_banners.scss"],"names":[],"mappings":"AACC,mBACC,kBACA,CAAA,SAGD,CAAA,2BACC,eACA,CAAA,eACA,CAAA,YAGD,CAAA,qCACC,iBAIF,CAAA,0BACC,qBAGD,CAAA,uBACC,eAGD,CAAA,iCACC,aAAa,CAAA","file":"jetpack-banners.min.css"}
css/jetpack-rtl.css CHANGED
@@ -1,4 +1,4 @@
1
  /*!
2
  * Do not modify this file directly. It is concatenated from individual module CSS files.
3
  */
4
- .jp-carousel-wrap *{line-height:inherit}.jp-carousel-overlay{background:#000}div.jp-carousel-fadeaway{position:fixed;bottom:0;z-index:2147483647;width:100%;height:15px}.jp-carousel-next-button span,.jp-carousel-previous-button span{background:url(../modules/carousel/images/arrows.png) center center/200px 126px no-repeat}.jp-carousel-msg{font-family:"Open Sans",sans-serif;font-style:normal;display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:center;margin:25px 2px 0 20px;background-color:#fff;border-right:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.jp-carousel-next-button span,.jp-carousel-previous-button span{background-image:url(../modules/carousel/images/arrows-2x.png)}}.jp-carousel-wrap{font-family:"Helvetica Neue",sans-serif!important}.jp-carousel-info{position:absolute;bottom:0;text-align:right!important;-webkit-font-smoothing:subpixel-antialiased!important}.jp-carousel-info ::selection{background:#68c9e8;color:#fff}.jp-carousel-info ::-moz-selection{background:#68c9e8;color:#fff}.jp-carousel-photo-info{position:relative;right:25%;width:50%}.jp-carousel-transitions .jp-carousel-photo-info{transition:400ms ease-out}.jp-carousel-info h2{background:none!important;border:none!important;color:#999;display:block!important;font:400 13px/1.25em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;margin:7px 0 0!important;padding:10px 0 0!important;overflow:hidden;text-align:right;text-shadow:none!important;text-transform:none!important;-webkit-font-smoothing:subpixel-antialiased}.jp-carousel-next-button,.jp-carousel-previous-button{text-indent:-9999px;overflow:hidden;cursor:pointer}.jp-carousel-next-button span,.jp-carousel-previous-button span{position:absolute;top:0;bottom:0;width:82px;zoom:1;filter:alpha(opacity=20);opacity:.2}.jp-carousel-transitions .jp-carousel-next-button span,.jp-carousel-transitions .jp-carousel-previous-button span{transition:500ms opacity ease-out}.jp-carousel-next-button:hover span,.jp-carousel-previous-button:hover span{filter:alpha(opacity=60);opacity:.6}.jp-carousel-next-button span{background-position:-110px center;left:0}.jp-carousel-previous-button span{background-position:-10px center;right:0}.jp-carousel-buttons{margin:-18px -20px 15px;padding:8px 10px;border-bottom:1px solid #222;background:#222;text-align:center}div.jp-carousel-buttons a{border:none!important;color:#999;font:400 11px/1.2em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;padding:5px 0 5px 2px;text-decoration:none!important;text-shadow:none!important;vertical-align:middle;-webkit-font-smoothing:subpixel-antialiased}div.jp-carousel-buttons a:hover{color:#68c9e8;border:none!important}.jp-carousel-transitions div.jp-carousel-buttons a:hover{transition:none!important}.jp-carousel-next-button,.jp-carousel-previous-button,.jp-carousel-slide,.jp-carousel-slide img{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.jp-carousel-slide{position:fixed;width:0;bottom:0;background-color:#000;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}.jp-carousel-slide.selected{position:absolute!important;filter:alpha(opacity=100);opacity:1}.jp-carousel-slide{filter:alpha(opacity=25);opacity:.25}.jp-carousel-slide img{display:block;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;background:none!important;border:none!important;padding:0!important;box-shadow:0 2px 8px rgba(0,0,0,.1);zoom:1}.jp-carousel-transitions .jp-carousel-slide{transition:opacity 400ms linear}.jp-carousel-close-hint{color:#999;cursor:default;letter-spacing:0!important;padding:.35em 0 0;position:absolute;text-align:right;width:90%}.jp-carousel-transitions .jp-carousel-close-hint{transition:color 200ms linear}.jp-carousel-close-hint span{cursor:pointer;background-color:#000;background-color:rgba(0,0,0,.8);display:block;height:22px;font:400 24px/1 "Helvetica Neue",sans-serif!important;line-height:22px;margin:0 .4em 0 0;text-align:center;vertical-align:middle;width:22px;border-radius:4px}.jp-carousel-transitions .jp-carousel-close-hint span{transition:border-color 200ms linear}.jp-carousel-close-hint:hover{cursor:default;color:#fff}.jp-carousel-close-hint:hover span{border-color:#fff}a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background:url(../modules/carousel/images/carousel-sprite.png?5) 0 0/16px 200px no-repeat}div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{margin:0 0 0 14px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#303030;padding-left:8px!important;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;margin:0 -12px 0 2px!important}div.jp-carousel-buttons a.jp-carousel-reblog,div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{background-position:6px -36px;padding-left:auto!important;padding-right:26px!important;color:#999}div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -156px;padding-right:19px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{cursor:default}div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:6px -56px;color:#68c9e8}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background-image:url(../modules/carousel/images/carousel-sprite-2x.png?5)}}div#carousel-reblog-box{background:#222;padding:3px 0 0;display:none;margin:5px auto 0;border-radius:2px;box-shadow:0 0 20px rgba(0,0,0,.9);height:74px;width:565px}#carousel-reblog-box textarea{background:#999;font:13px/1.4 "Helvetica Neue",sans-serif!important;color:#444;padding:3px 6px;width:370px;height:48px;float:right;margin:6px 9px 0;border:1px solid #666;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:2px}#carousel-reblog-box textarea:focus{background:#ccc;color:#222}#carousel-reblog-box label{color:#aaa;font-size:11px;padding-left:2px;padding-right:2px;display:inline;font-weight:400}#carousel-reblog-box select{width:110px;padding:0;font-size:12px;font-family:"Helvetica Neue",sans-serif!important;background:#333;color:#eee;border:1px solid #444;margin-top:5px}#carousel-reblog-box .submit,#wrapper #carousel-reblog-box p.response{float:right;width:154px;padding-top:0;padding-right:1px;overflow:hidden;height:34px;margin:3px 2px 0 0!important}#wrapper #carousel-reblog-box p.response{font-size:13px;clear:none;padding-right:2px;height:34px;color:#aaa}#carousel-reblog-box input#carousel-reblog-submit,#jp-carousel-comment-form-button-submit{font:13px/24px "Helvetica Neue",sans-serif!important;margin-top:8px;padding:0 10px!important;border-radius:1em;height:24px;color:#333;cursor:pointer;font-weight:400;background:#aaa;border:1px solid #444}#carousel-reblog-box input#carousel-reblog-submit:hover,#jp-carousel-comment-form-button-submit:hover{background:#ccc}#carousel-reblog-box .canceltext{color:#aaa;font-size:11px;line-height:24px}#carousel-reblog-box .canceltext a{color:#fff}.jp-carousel-titleanddesc{border-top:1px solid #222;color:#999;font-size:15px;padding-top:24px;margin-bottom:20px;font-weight:400}.jp-carousel-titleanddesc-title{font:300 1.5em/1.1 "Helvetica Neue",sans-serif!important;text-transform:none!important;color:#fff;margin:0 0 15px;padding:0}.jp-carousel-titleanddesc-desc p{color:#999;line-height:1.4;margin-bottom:.75em}.jp-carousel-comments p a,.jp-carousel-info h2 a,.jp-carousel-titleanddesc p a{color:#fff!important;border:none!important;text-decoration:underline!important;font-weight:400!important;font-style:normal!important}.jp-carousel-titleanddesc p b,.jp-carousel-titleanddesc p strong{font-weight:700;color:#999}.jp-carousel-titleanddesc p em,.jp-carousel-titleanddesc p i{font-style:italic;color:#999}.jp-carousel-comments p a:hover,.jp-carousel-info h2 a:hover,.jp-carousel-titleanddesc p a:hover{color:#68c9e8!important}.jp-carousel-titleanddesc p:empty{display:none}.jp-carousel-left-column-wrapper h1:after,.jp-carousel-left-column-wrapper h1:before,.jp-carousel-photo-info h1:after,.jp-carousel-photo-info h1:before{content:none!important}.jp-carousel-image-meta{background:#111;border:1px solid #222;color:#fff;font:12px/1.4 "Helvetica Neue",sans-serif!important;overflow:hidden;padding:18px 20px;width:209px!important}.jp-carousel-image-meta h5,.jp-carousel-image-meta li{font-family:"Helvetica Neue",sans-serif!important;position:inherit!important;top:auto!important;left:auto!important;right:auto!important;bottom:auto!important;background:none!important;border:none!important;font-weight:400!important;line-height:1.3em!important}.jp-carousel-image-meta ul{margin:0!important;padding:0!important;list-style:none!important}.jp-carousel-image-meta li{width:48%!important;float:right!important;margin:0 0 15px 2%!important;color:#fff!important;font-size:13px!important}.jp-carousel-image-meta h5{color:#999!important;text-transform:uppercase!important;font-size:10px!important;margin:0 0 2px!important;letter-spacing:.1em!important}a.jp-carousel-image-download{padding-right:23px;display:inline-block;clear:both;color:#999;line-height:1;font-weight:400;font-size:13px;text-decoration:none;background-position:0 -82px}a.jp-carousel-image-download span.photo-size{font-size:11px;border-radius:1em;margin-right:2px;display:inline-block}a.jp-carousel-image-download span.photo-size-times{padding:0 2px 0 1px}a.jp-carousel-image-download:hover{background-position:0 -122px;color:#68c9e8;border:none!important}.jp-carousel-image-map{position:relative;margin:-20px -20px 20px;border-bottom:1px solid rgba(255,255,255,.17);height:154px}.jp-carousel-image-map img.gmap-main{border-top-right-radius:6px;border-left:1px solid rgba(255,255,255,.17)}.jp-carousel-image-map div.gmap-topright{width:94px;height:154px;position:absolute;top:0;left:0}.jp-carousel-image-map div.imgclip{overflow:hidden;border-top-left-radius:6px}.jp-carousel-image-map div.gmap-topright img{margin-right:-40px}.jp-carousel-image-map img.gmap-bottomright{position:absolute;top:96px;left:0}.jp-carousel-comments{font:15px/1.7 "Helvetica Neue",sans-serif!important;font-weight:400;background:none}.jp-carousel-comments p a:active,.jp-carousel-comments p a:focus,.jp-carousel-comments p a:hover{color:#68c9e8!important}.jp-carousel-comment{background:none;color:#999;margin-bottom:20px;clear:right;overflow:auto;width:100%}.jp-carousel-comment p{color:#999!important}.jp-carousel-comment .comment-author{font-size:13px;font-weight:400;padding:0;width:auto;display:inline;float:none;border:none;margin:0}.jp-carousel-comment .comment-author a{color:#fff}.jp-carousel-comment .comment-gravatar{float:right}.jp-carousel-comment .comment-content{border:none;margin-right:85px;padding:0}.jp-carousel-comment .avatar{margin:0 0 0 20px;border-radius:4px;border:none!important;padding:0!important;background-color:transparent!important}.jp-carousel-comment .comment-date{color:#999;margin-top:4px;font-size:11px;display:inline;float:left}#jp-carousel-comment-form{margin:0 0 10px!important;float:right;width:100%}textarea#jp-carousel-comment-form-comment-field{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:15px/1.4 "Helvetica Neue",sans-serif!important;width:100%;padding:10px 10px 5px;margin:0;float:none;height:147px;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:3px;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box}textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#555}textarea#jp-carousel-comment-form-comment-field:focus{background:#ccc;color:#222}textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#aaa}#jp-carousel-comment-form-spinner{color:#fff;margin:22px 10px 0 0;display:block;width:20px;height:20px;float:right}#jp-carousel-comment-form-submit-and-info-wrapper{display:none;overflow:hidden;width:100%}#jp-carousel-comment-form-commenting-as input{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:13px/1.4 "Helvetica Neue",sans-serif!important;padding:3px 6px;float:right;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:2px;width:285px}#jp-carousel-comment-form-commenting-as input:focus{background:#ccc;color:#222}#jp-carousel-comment-form-commenting-as p{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:22px 0 0;float:right}#jp-carousel-comment-form-commenting-as fieldset{float:right;border:none;margin:20px 0 0;padding:0;clear:both}#jp-carousel-comment-form-commenting-as label{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:0 0 3px 20px;float:right;width:100px}#jp-carousel-comment-form-button-submit{margin-top:20px;float:left}#jp-carousel-comment-form-container,#js-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-post-results{display:none;overflow:auto;width:100%}#jp-carousel-comment-post-results span{display:block;text-align:center;margin-top:20px;width:100%;overflow:auto;padding:1em 0;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(0,0,0,.7);border-radius:2px;font:13px/1.4 "Helvetica Neue",sans-serif!important;border:1px solid rgba(255,255,255,.17);box-shadow:inset 0 0 5px 5px rgba(0,0,0,1)}.jp-carousel-comment-post-error{color:#DF4926}#jp-carousel-comments-closed{display:none;color:#999}#jp-carousel-comments-loading{font:400 15px/1.7 "Helvetica Neue",sans-serif!important;display:none;color:#999;text-align:right;margin-bottom:20px}.jp-carousel-light .jp-carousel-overlay{background:#fff}.jp-carousel-light .jp-carousel-next-button:hover span,.jp-carousel-light .jp-carousel-previous-button:hover span{opacity:.8}.jp-carousel-light .jp-carousel-close-hint:hover,.jp-carousel-light .jp-carousel-titleanddesc div{color:#000!important}.jp-carousel-light .jp-carousel-comment .comment-author a,.jp-carousel-light .jp-carousel-comments p a,.jp-carousel-light .jp-carousel-info h2 a,.jp-carousel-light .jp-carousel-titleanddesc p a{color:#1e8cbe!important}.jp-carousel-light .jp-carousel-comment .comment-author a:hover,.jp-carousel-light .jp-carousel-comments p a:hover,.jp-carousel-light .jp-carousel-info h2 a:hover,.jp-carousel-light .jp-carousel-titleanddesc p a:hover{color:#f1831e!important}.jp-carousel-light .jp-carousel-comment,.jp-carousel-light .jp-carousel-comment p,.jp-carousel-light .jp-carousel-info h2,.jp-carousel-light .jp-carousel-titleanddesc,.jp-carousel-light .jp-carousel-titleanddesc p,.jp-carousel-light .jp-carousel-titleanddesc p b,.jp-carousel-light .jp-carousel-titleanddesc p em,.jp-carousel-light .jp-carousel-titleanddesc p i,.jp-carousel-light .jp-carousel-titleanddesc p strong,.jp-carousel-light div.jp-carousel-buttons a{color:#666}.jp-carousel-light .jp-carousel-buttons{border-bottom-color:#f0f0f0;background:#f5f5f5}.jp-carousel-light div.jp-carousel-buttons a:hover{text-decoration:none;color:#f1831e}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:4px -56px;padding-right:24px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#2ea2cc;color:#fff}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -176px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-position:5px -36px}.jp-carousel-light div#carousel-reblog-box{background:#eee;box-shadow:0 2px 10px rgba(0,0,0,.1);border:1px solid #ddd}.jp-carousel-light #carousel-reblog-box textarea{color:#666;border:1px solid #cfcfcf;background:#fff}.jp-carousel-light #carousel-reblog-box .canceltext{color:#888}.jp-carousel-light #carousel-reblog-box .canceltext a{color:#666}.jp-carousel-light #carousel-reblog-box select{background:#eee;color:#333;border:1px solid #aaa}#jp-carousel-comment-form-button-submit,.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit{color:#333;background:#fff;border:1px solid #aaa}.jp-carousel-light .jp-carousel-image-meta{background:#fafafa;border:1px solid #eee;border-top-color:#f5f5f5;border-right-color:#f5f5f5;color:#333}.jp-carousel-light .jp-carousel-image-meta li{color:#000!important}.jp-carousel-light .jp-carousel-close-hint{color:#ccc}.jp-carousel-light .jp-carousel-close-hint span{background-color:#fff;border-color:#ccc}.jp-carousel-light #jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#aaa}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus{color:#333}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#ddd}.jp-carousel-light a.jp-carousel-image-download{background-position:0 -122px}.jp-carousel-light a.jp-carousel-image-download:hover{background-position:0 -122px;color:#f1831e}.jp-carousel-light textarea#jp-carousel-comment-form-comment-field{background:#fbfbfb;color:#333;border:1px solid #dfdfdf;box-shadow:inset -2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input{background:#fbfbfb;border:1px solid #dfdfdf;color:#333;box-shadow:inset -2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus{background:#fbfbfb;color:#333}.jp-carousel-light #jp-carousel-comment-post-results span{background:#f7f7f7;border:1px solid #dfdfdf;box-shadow:inset 0 0 5px rgba(0,0,0,.05)}.jp-carousel-light .jp-carousel-slide{background-color:#fff}.jp-carousel-light .jp-carousel-titleanddesc{border-top:1px solid #eee}@media only screen and (max-width:760px){.jp-carousel-info{margin:0 10px!important}.jp-carousel-buttons,.jp-carousel-next-button,.jp-carousel-previous-button{display:none!important}.jp-carousel-image-meta{float:none!important;width:100%!important;-moz-box-sizing:border-box;box-sizing:border-box}.jp-carousel-close-hint{font-weight:800!important;font-size:26px!important;position:fixed!important;top:-10px}.jp-carousel-slide img{filter:alpha(opacity=100);opacity:1}.jp-carousel-wrap{background-color:#000}.jp-carousel-fadeaway{display:none}#jp-carousel-comment-form-container{display:none!important}.jp-carousel-titleanddesc{padding-top:0!important;border:none!important}.jp-carousel-titleanddesc-title{font-size:1em!important}.jp-carousel-left-column-wrapper{padding:0;width:100%!important}.jp-carousel-photo-info{right:0!important;width:100%!important}}.contact-form .clear-form{clear:both}.contact-form input[type=email],.contact-form input[type=text]{width:300px;max-width:98%;margin-bottom:13px}.contact-form select{margin-bottom:13px}.contact-form textarea{height:200px;width:80%;float:none;margin-bottom:13px}.contact-form input[type=checkbox],.contact-form input[type=radio]{float:none;margin-bottom:13px}.contact-form label{margin-bottom:3px;float:none;font-weight:700;display:block}.contact-form label.checkbox,.contact-form label.radio{margin-bottom:3px;float:none;font-weight:700;display:inline-block}.contact-form label span{color:#AAA;margin-right:4px;font-weight:400}.contact-form-submission{margin-bottom:4em;padding:1.5em 1em}.contact-form-submission p{margin:0 auto}.form-errors .form-error-message{color:red}.textwidget .contact-form input[type=email],.textwidget .contact-form input[type=text],.textwidget .contact-form textarea{width:250px;max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box}#jetpack-check-feedback-spam{margin:1px 0 0 8px}.jetpack-check-feedback-spam-spinner{display:inline-block;margin-top:7px}.infinite-loader{color:#000;display:block;height:28px;text-indent:-9999px}#infinite-handle span{background:#333;border-radius:1px;color:#eee;cursor:pointer;font-size:13px;padding:6px 16px}#infinite-handle span button,#infinite-handle span button:focus,#infinite-handle span button:hover{display:inline;position:static;padding:0;margin:0;border:none;line-height:inherit;background:0 0;color:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}#infinite-handle span button::-moz-focus-inner{margin:0;padding:0;border:none}@media (max-width:800px){#infinite-handle span:before{display:none}#infinite-handle span{display:block}}#infinite-footer{position:fixed;bottom:-50px;right:0;width:100%}#infinite-footer a{text-decoration:none}#infinite-footer .blog-credits a:hover,#infinite-footer .blog-info a:hover{color:#444;text-decoration:underline}#infinite-footer .container{background:rgba(255,255,255,.8);border-color:#ccc;border-color:rgba(0,0,0,.1);border-style:solid;border-width:1px 0 0;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 auto;overflow:hidden;padding:1px 20px;width:780px}#infinite-footer .blog-credits,#infinite-footer .blog-info{-moz-box-sizing:border-box;box-sizing:border-box;line-height:25px}#infinite-footer .blog-info{float:right;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:40%}#infinite-footer .blog-credits{font-weight:400;float:left;width:60%}#infinite-footer .blog-info a{color:#111;font-size:14px;font-weight:700}#infinite-footer .blog-credits{color:#888;font-size:12px;text-align:left}#infinite-footer .blog-credits a{color:#666}.infinity-end.neverending #infinite-footer{display:none}@media (max-width:640px){#infinite-footer .container{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#infinite-footer .blog-info{width:30%}#infinite-footer .blog-credits{width:70%}#infinite-footer .blog-credits,#infinite-footer .blog-info a{font-size:10px}}@media (max-width:640px){#infinite-footer{position:static}}#wpadminbar li#wp-admin-bar-admin-bar-likes-widget{width:61px;overflow:hidden}#wpadminbar iframe.admin-bar-likes-widget{width:61px;height:28px;min-height:28px;border-width:0;position:absolute;top:0}div.jetpack-likes-widget-wrapper{width:100%;min-height:50px;position:relative}div.jetpack-likes-widget-wrapper .sd-link-color{font-size:12px}div.jetpack-likes-widget-wrapper.slim-likes-widget{width:1px;min-height:0}#likes-other-gravatars{display:none;position:absolute;padding:10px 10px 12px;background-color:#2e4453;border-width:0;box-shadow:0 0 10px #2e4453;box-shadow:0 0 10px rgba(46,68,83,.6);min-width:130px;z-index:1000}#likes-other-gravatars *{line-height:normal}#likes-other-gravatars .likes-text{color:#fff;font-size:12px;padding-bottom:8px}#likes-other-gravatars li,#likes-other-gravatars ul{margin:0;padding:0;text-indent:0;list-style-type:none}#likes-other-gravatars li::before{content:""}#likes-other-gravatars ul.wpl-avatars{overflow:auto;display:block;max-height:190px}#likes-other-gravatars ul.wpl-avatars li{width:32px;height:32px;float:right;margin:0 0 5px 5px}#likes-other-gravatars ul.wpl-avatars li a{margin:0 0 0 2px;border-bottom:none!important;display:block}#likes-other-gravatars ul.wpl-avatars li a img{background:0 0;border:none;margin:0!important;padding:0!important;position:static}div.sd-box{border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.13)}.comment-likes-widget,.entry-content .post-likes-widget,.post-likes-widget{margin:0;border-width:0;display:block}.post-likes-widget-placeholder{margin:0;border-width:0;position:relative}.post-likes-widget-placeholder .button{display:none}.post-likes-widget-placeholder .loading{color:#999;font-size:12px}.slim-likes-widget .post-likes-widget{width:auto;float:none}div.sharedaddy.sd-like-enabled .sd-like h3{display:none}div.sharedaddy.sd-like-enabled .sd-like .post-likes-widget{width:100%;float:none;position:absolute;top:0}.comment-likes-widget{width:100%}.pd-rating{display:block!important}.sd-gplus .sd-title{display:none}#jp-relatedposts{display:none;padding-top:1em;margin:1em 0;position:relative;clear:both}.jp-relatedposts:after{content:'';display:block;clear:both}#jp-relatedposts h3.jp-relatedposts-headline{margin:0 0 1em;display:inline-block;float:right;font-size:9pt;font-weight:700;font-family:inherit}#jp-relatedposts h3.jp-relatedposts-headline em:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}#jp-relatedposts h3.jp-relatedposts-headline em{font-style:normal;font-weight:700}#jp-relatedposts .jp-relatedposts-items{clear:right}#jp-relatedposts .jp-relatedposts-items-visual{margin-left:-20px}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{float:right;width:33%;margin:0 0 1em;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post{padding-left:20px;filter:alpha(opacity=80);-moz-opacity:.8;opacity:.8}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n+4),#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post:nth-child(3n+4){clear:both}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover{filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items p,#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-size:14px;line-height:20px;margin:0}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs{position:relative}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay{position:absolute;top:0;bottom:0;right:0;left:0;display:block}#jp-relatedposts .jp-relatedposts-items p{margin-bottom:0}#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{text-transform:none;margin:0;font-family:inherit;display:block;max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a{font-size:inherit;font-weight:400;text-decoration:none;filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span{display:block;max-width:90%;overflow:hidden;text-overflow:ellipsis}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post span{max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{opacity:.6}#jp-relatedposts .jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt,.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{display:none}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt{overflow:hidden}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs span{margin-bottom:1em}@media only screen and (max-width:640px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:50%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n){clear:right}#jp-relatedposts .jp-relatedposts-items-visual{margin-left:20px}}@media only screen and (max-width:320px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:100%;clear:both;margin:0 0 1em}}#jp-post-flair{padding-top:.5em}#content div.sharedaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{margin:0 0 1em;display:inline-block;line-height:1.2;font-size:9pt;font-weight:700}div.sharedaddy h3.sd-title:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;margin-bottom:1em}body.highlander-light h3.sd-title:before{border-top:1px solid rgba(0,0,0,.2)}body.highlander-dark h3.sd-title:before{border-top:1px solid rgba(255,255,255,.4)}.sd-content ul{padding:0!important;margin:0 0 .7em!important;list-style:none!important}.sd-content ul li{display:inline-block}.sd-block.sd-gplus{margin:0 0 .5em}.sd-gplus .sd-content{font-size:12px}#sharing_email .sharing_send,.sd-content ul li .option a.share-ustom,.sd-content ul li a.sd-button,.sd-content ul li.advanced a.share-more,.sd-content ul li.preview-item div.option.option-smart-off a,.sd-social-icon .sd-content ul li a.sd-button,.sd-social-icon-text .sd-content ul li a.sd-button,.sd-social-official .sd-content>ul>li .digg_button >a,.sd-social-official .sd-content>ul>li>a.sd-button,.sd-social-text .sd-content ul li a.sd-button{text-decoration:none!important;display:inline-block;margin:0 0 5px 5px;font-size:12px;font-family:"Open Sans",sans-serif;font-weight:400;border-radius:3px;color:#777!important;background:#f8f8f8;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,.08);text-shadow:none;line-height:23px;padding:1px 5px 0 8px}.sd-content ul li .option a.share-ustom span,.sd-content ul li a.sd-button>span,.sd-content ul li.advanced a.share-more span,.sd-content ul li.preview-item div.option.option-smart-off a span,.sd-social-icon-text .sd-content ul li a.sd-button>span,.sd-social-official .sd-content>ul>li .digg_button >a span,.sd-social-official .sd-content>ul>li>a.sd-button span,.sd-social-text .sd-content ul li a.sd-button span{line-height:23px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button,.sd-social-official .sd-content>ul>li .digg_button>a,.sd-social-official .sd-content>ul>li>a.sd-button{line-height:17px;box-shadow:none;vertical-align:top}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,.sd-social-official .sd-content>ul>li .digg_button>a:before,.sd-social-official .sd-content>ul>li>a.sd-button:before{margin-bottom:-1px;top:0}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon .sd-content ul li a.sd-button:hover,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:hover,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li .digg_button>a:hover,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-official .sd-content>ul>li>a.sd-button:hover,.sd-social-text .sd-content ul li a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:hover{color:#555;background:#fafafa;border:1px solid #999}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.16)}.sd-content ul li a.sd-button:before{display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font:400 16px/1 Genericons;vertical-align:top;position:relative;top:3px;text-align:center}.sd-content ul li{margin:0!important;padding:0}.sd-content ul li.preview-item a.sd-button span,.sd-social-icon-text .sd-content ul li a span,.sd-social-official .sd-content ul li a.sd-button span{margin-right:3px}.sd-content ul li.preview-item.no-icon a.sd-button span{margin-right:0}.sd-content ul li.no-icon a:before,.sd-social-text .sd-content ul li a:before{display:none}body .sd-content ul li.share-custom.no-icon a span,body .sd-social-text .sd-content ul li.share-custom a span{background-image:none;background-position:-500px -500px!important;background-repeat:no-repeat!important;padding-right:0;height:0;line-height:inherit}.sd-social-icon .sd-content ul li a.share-more{position:relative;top:2px}.sd-social-icon .sd-content ul li a.share-more span{margin-right:3px}.sd-content ul li.share-print div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-print a:before,.sd-social-icon-text .sd-content li.share-print a:before,.sd-social-official .sd-content li.share-print a:before,.sd-social-text .sd-content ul li.share-print a:before{content:'\f469'}.sd-content ul li.share-email div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-email a:before,.sd-social-icon-text .sd-content li.share-email a:before,.sd-social-official .sd-content li.share-email a:before,.sd-social-text .sd-content ul li.share-email a:before{content:'\f410'}.sd-content ul li.share-linkedin div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-linkedin a:before,.sd-social-icon-text .sd-content li.share-linkedin a:before,.sd-social-text .sd-content ul li.share-linkedin a:before{content:'\f207'}.sd-content ul li.share-twitter div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-twitter a:before,.sd-social-icon-text .sd-content li.share-twitter a:before,.sd-social-text .sd-content ul li.share-twitter a:before{content:'\f202'}.sd-content ul li.share-reddit div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-reddit a:before,.sd-social-icon-text .sd-content li.share-reddit a:before,.sd-social-text .sd-content ul li.share-reddit a:before{content:'\f222'}.sd-content ul li.share-tumblr div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-tumblr a:before,.sd-social-icon-text .sd-content li.share-tumblr a:before,.sd-social-text .sd-content ul li.share-tumblr a:before{content:'\f214'}.sd-content ul li.share-pocket div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pocket a:before,.sd-social-icon-text .sd-content li.share-pocket a:before,.sd-social-text .sd-content ul li.share-pocket a:before{content:'\f224'}.sd-content ul li.share-skype div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-skype a:before,.sd-social-icon-text .sd-content li.share-skype a:before,.sd-social-text .sd-content ul li.share-skype a:before{content:'\f220'}.sd-content ul li.share-pinterest div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pinterest a:before,.sd-social-icon-text .sd-content li.share-pinterest a:before,.sd-social-text .sd-content ul li.share-pinterest a:before{content:'\f209'}.sd-content ul li.share-google-plus-1 div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-google-plus-1 a:before,.sd-social-icon-text .sd-content li.share-google-plus-1 a:before,.sd-social-text .sd-content ul li.share-google-plus-1 a:before{content:'\f218'}.sd-content ul li.share-facebook div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-facebook a:before,.sd-social-icon-text .sd-content li.share-facebook a:before,.sd-social-text .sd-content ul li.share-facebook a:before{content:'\f204'}.sd-content ul li.share-press-this div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-press-this a:before,.sd-social-icon-text .sd-content li.share-press-this a:before,.sd-social-official .sd-content li.share-press-this a:before,.sd-social-text .sd-content ul li.share-press-this a:before{content:'\f205'}.sd-social-official .sd-content li.share-press-this a:before{color:#2ba1cb}.sd-content ul li.advanced a.share-more:before,.sd-social-icon .sd-content ul a.share-more:before,.sd-social-icon-text .sd-content a.share-more:before,.sd-social-official .sd-content a.share-more:before,.sd-social-text .sd-content ul a.share-more:before{content:'\f415'}.sd-social-official .sd-content a.share-more:before{color:#2ba1cb}.sd-social .sd-button .share-count{background:#2ea2cc;color:#fff;border-radius:10px;display:inline-block;text-align:center;font-size:10px;padding:1px 3px;line-height:1}.sd-social-official .sd-content ul,.sd-social-official .sd-content ul li{line-height:25px!important}.sd-social-official .sd-content>ul>li>a.sd-button span{line-height:1}.sd-social-official .sd-content ul:after{content:".";display:block;height:0;clear:both;visibility:hidden}.sd-social-official .sd-content li.share-press-this a{margin:0 0 5px}.sd-social-official .sd-content ul>li{display:block;float:right;margin:0 0 5px 10px!important;height:25px}.sd-social-official .fb-share-button>span{vertical-align:top!important}.sd-social-official .sd-content .pocket_button iframe{width:98px}.sd-social-official .sd-content .skypeShare{width:55px}.googleplus1_button .g-plus{vertical-align:top!important}.reddit_button iframe{margin-top:1px}.googleplus1_button iframe,.linkedin_button>span,.pinterest_button,.pocket_button iframe,.twitter_button{margin:0!important}body .sd-social-official li a.share-more,body .sd-social-official li.share-custom a,body .sd-social-official li.share-digg a,body .sd-social-official li.share-email a,body .sd-social-official li.share-press-this a,body .sd-social-official li.share-print{position:relative;top:0}body .sd-social-icon .sd-content li.share-custom>a{padding:2px 3px 0;position:relative;top:4px}body .sd-content ul li.share-custom a.share-icon span,body .sd-social-icon .sd-content li.share-custom a span,body .sd-social-icon-text .sd-content li.share-custom a span,body .sd-social-official .sd-content li.share-custom a span,body .sd-social-text .sd-content li.share-custom a span{background-size:16px 16px;background-repeat:no-repeat;margin-right:0;padding:0 19px 0 0;display:inline-block;height:16px;line-height:16px}body .sd-social-icon .sd-content li.share-custom a span{width:0}body .sd-social-icon .sd-content li.share-custom a span{padding-right:16px!important}.sharing-hidden .inner{position:absolute;z-index:2;border:1px solid #ccc;padding:10px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);border-radius:2px;margin-top:5px;max-width:400px}.sharing-hidden .inner ul{margin:0!important}.sd-social-official .sd-content .sharing-hidden ul>li.share-end{clear:both;margin:0;height:0}.sharing-hidden .inner:after,.sharing-hidden .inner:before{position:absolute;z-index:1;top:-8px;right:20px;width:0;height:0;border-right:6px solid transparent;border-left:6px solid transparent;border-bottom:8px solid #ccc;content:"";display:block}.sharing-hidden .inner:after{z-index:2;top:-7px;border-right:6px solid transparent;border-left:6px solid transparent;border-bottom:8px solid #fff}.sharing-hidden ul{margin:0}.sd-social-icon .sd-content ul li[class*=share-] a,.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a{border-radius:50%;-webkit-border-radius:50%;border:0;box-shadow:none;padding:8px;position:relative;top:-2px;line-height:1;width:auto;height:auto;margin-bottom:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button>span,.sd-social-icon .sd-content ul li[class*=share-] div.option a span{line-height:1}.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a:hover{border:none;opacity:.6}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button:before{top:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button.share-custom{padding:8px 8px 6px;top:5px}.sd-social-icon .sd-content ul li a.sd-button.share-more{margin-right:10px}.sd-social-icon .sd-content ul li:first-child a.sd-button.share-more{margin-right:0}.sd-social-icon .sd-button span.share-count{position:absolute;bottom:0;left:0;border-radius:0;background:#555;font-size:9px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button{background:#e9e9e9;margin-top:2px;text-indent:0}.sd-social-icon .sd-content ul li[class*=share-].share-tumblr a.sd-button{background:#2c4762;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-facebook a.sd-button{background:#3b5998;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-twitter a.sd-button{background:#00acee;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pinterest a.sd-button{background:#ca1f27;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-digg a.sd-button{color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-press-this a.sd-button{background:#1e8cbe;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-linkedin a.sd-button{background:#0077b5;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-google-plus-1 a.sd-button{background:#dd4b39;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pocket a.sd-button{background:#ee4056;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-skype a.sd-button{background:#00AFF0;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-reddit a.sd-button{background:#cee3f8;color:#555!important}.sharing-screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.sharing-screen-reader-text:active,.sharing-screen-reader-text:focus,.sharing-screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-weight:700;height:auto;right:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}#sharing_email{width:342px;position:absolute;z-index:1001;border:1px solid #ccc;padding:15px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);text-align:right}div.sharedaddy.sharedaddy-dark #sharing_email{border-color:#fff}#sharing_email .errors{color:#fff;background-color:#771a09;font-size:12px;padding:5px 8px;line-height:1;margin:10px 0 0}#sharing_email label{font-size:12px;color:#333;font-weight:700;display:block;padding:0 0 4px;text-align:right;text-shadow:none}#sharing_email form{margin:0}#sharing_email input[type=email],#sharing_email input[type=text]{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid #ccc;margin-bottom:1em;background:#fff;font-size:12px;color:#333;max-width:none;padding:1px 3px}#jetpack-source_f_name{display:none!important;position:absolute!important;right:-9000px}#sharing_email .sharing_cancel{padding:0 1em 0 0;font-size:12px;text-shadow:none}#sharing_email .recaptcha{width:312px;height:123px;margin:0 0 1em}.slideshow-window{background-color:#222;border:20px solid #222;border-radius:10px;height:0;margin-bottom:20px;overflow:hidden;padding-top:30px!important;padding-bottom:56.25%!important;position:relative;z-index:1}.slideshow-window.slideshow-white{background-color:#fff;border-color:#fff}.slideshow-window,.slideshow-window *{-moz-box-sizing:content-box;box-sizing:content-box}.slideshow-loading{height:100%;text-align:center;margin:auto}body div.slideshow-window * img{background-color:transparent!important;background-image:none!important;border-width:0!important;display:block;margin:0 auto;max-width:100%;max-height:100%;padding:0!important;position:relative;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);top:50%}.slideshow-loading img{vertical-align:middle}.slideshow-slide{display:none;height:100%!important;right:0;margin:auto;position:absolute;text-align:center;top:0;width:100%!important}.slideshow-slide img{vertical-align:middle}.slideshow-line-height-hack{overflow:hidden;width:0;font-size:0}.slideshow-slide-caption{font-size:13px;font-family:"Helvetica Neue",sans-serif;color:#f7f7f7;text-shadow:#222 -1px 1px 2px;line-height:25px;height:25px;position:absolute;bottom:5px;right:0;z-index:100;width:100%;text-align:center}.slideshow-controls{z-index:1000;position:absolute;bottom:30px;margin:auto;text-align:center;width:100%;-ms-filter:"alpha(Opacity=50)";opacity:.5;direction:rtl;transition:300ms opacity ease-out}.slideshow-window:hover .slideshow-controls{-ms-filter:"alpha(Opacity=100)";opacity:1}body div div.slideshow-controls a,body div div.slideshow-controls a:hover{border:2px solid rgba(255,255,255,.1)!important;background-color:#000!important;background-color:rgba(0,0,0,.6)!important;background-image:url(../modules/shortcodes/img/slideshow-controls.png)!important;background-repeat:no-repeat;background-size:142px 16px!important;background-position:-34px 8px!important;color:#222!important;margin:0 5px!important;padding:0!important;display:inline-block!important;zoom:1;height:32px!important;width:32px!important;line-height:32px!important;text-align:center!important;-khtml-border-radius:10em!important;border-radius:10em!important;transition:300ms border-color ease-out}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body div div.slideshow-controls a,body div div.slideshow-controls a:hover{background-image:url(../modules/shortcodes/img/slideshow-controls-2x.png)!important}}body div div.slideshow-controls a:hover{border-color:rgba(255,255,255,1)!important}body div div.slideshow-controls a:first-child{background-position:-76px 8px!important}body div div.slideshow-controls a:last-child{background-position:-117px 8px!important}body div div.slideshow-controls a.running,body div div.slideshow-controls a:nth-child(2){background-position:-34px 8px!important}body div div.slideshow-controls a.paused{background-position:9px 8px!important}.slideshow-controls a img{border:50px dotted #f0f}body.presentation-wrapper-fullscreen-parent,html.presentation-wrapper-fullscreen-parent{overflow:hidden!important}.presentation-wrapper-fullscreen-parent #wpadminbar{display:none}.presentation-wrapper-fullscreen,.presentation-wrapper-fullscreen-parent{min-width:100%!important;min-height:100%!important;position:absolute!important;top:0!important;left:0!important;bottom:0!important;right:0!important;margin:0!important;padding:0!important;z-index:10000!important}.presentation-wrapper-fullscreen{background-color:gray;border:none!important}.presentation-wrapper-fullscreen .nav-arrow-left,.presentation-wrapper-fullscreen .nav-arrow-right{z-index:20001}.presentation-wrapper-fullscreen .nav-fullscreen-button{z-index:20002}.presentation-wrapper{margin:20px auto;border:1px solid #e5e5e5;overflow:hidden;line-height:normal}.presentation{position:relative;margin:0;overflow:hidden;outline:0}.presentation,.presentation .step{background-repeat:no-repeat;background-position:center;background-size:100% 100%}.presentation .step.fade:not(.active){opacity:0}.presentation .slide-content{padding:30px}.presentation .nav-arrow-left,.presentation .nav-arrow-right,.presentation .nav-fullscreen-button{position:absolute;width:34px;background-repeat:no-repeat;z-index:2;opacity:0;transition:opacity .25s}.presentation .nav-arrow-left,.presentation .nav-arrow-right{height:100%;background-image:url(../modules/shortcodes/images/slide-nav.png);background-size:450% 61px}.presentation .nav-arrow-left{right:0;background-position:4px 50%}.presentation .nav-arrow-right{left:0;background-position:-120px 50%}.presentation .nav-fullscreen-button{width:32px;height:32px;margin:4px;bottom:0;left:0;z-index:3;background-image:url(../modules/shortcodes/images/expand.png);background-size:100% 100%}.presentation:hover .nav-arrow-left,.presentation:hover .nav-arrow-right{opacity:1}.presentation:hover .nav-fullscreen-button{opacity:.8}.presentation-wrapper-fullscreen .nav-fullscreen-button{background-image:url(../modules/shortcodes/images/collapse.png)}.presentation .autoplay-overlay{height:15%;width:80%;margin:30% 10%;position:relative;z-index:100;display:table;border-radius:50px;background-color:#e5e5e5;background-color:rgba(0,0,0,.75);transition:opacity .5s}.presentation .autoplay-overlay .overlay-msg{position:relative;display:table-cell;text-align:center;vertical-align:middle;color:#fff}.presentation .will-fade{opacity:0}.presentation .do-fade{opacity:1;transition:opacity .5s}#subscribe-email input{width:95%}.comment-subscription-form .subscribe-label{display:inline!important}.jetpack-video-wrapper{margin-bottom:1.6em}.jetpack-video-wrapper>.wp-video,.jetpack-video-wrapper>embed,.jetpack-video-wrapper>iframe,.jetpack-video-wrapper>object{margin-bottom:0}.jetpack-social-navigation ul{display:block;margin:0 0 1.5em;padding:0}.jetpack-social-navigation li{display:inline-block;margin:0;line-height:1}.jetpack-social-navigation a{border:0;height:1em;text-decoration:none;width:1em}.jetpack-social-navigation a:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Genericons;font-size:1em;font-style:normal;font-weight:400;height:1em;line-height:1;speak:none;text-decoration:inherit;vertical-align:top;width:1em;content:"\f415"}.jetpack-social-navigation a[href*="codepen.io"]:before{content:"\f216"}.jetpack-social-navigation a[href*="digg.com"]:before{content:"\f221"}.jetpack-social-navigation a[href*="dribbble.com"]:before{content:"\f201"}.jetpack-social-navigation a[href*="dropbox.com"]:before{content:"\f225"}.jetpack-social-navigation a[href*="mailto:"]:before{content:"\f410"}.jetpack-social-navigation a[href*="facebook.com"]:before{content:"\f203"}.jetpack-social-navigation a[href*="flickr.com"]:before{content:"\f211"}.jetpack-social-navigation a[href*="foursquare.com"]:before{content:"\f226"}.jetpack-social-navigation a[href*="github.com"]:before{content:"\f200"}.jetpack-social-navigation a[href*="plus.google.com"]:before{content:"\f206"}.jetpack-social-navigation a[href*="instagram.com"]:before{content:"\f215"}.jetpack-social-navigation a[href*="linkedin.com"]:before{content:"\f208"}.jetpack-social-navigation a[href*="path.com"]:before{content:"\f219"}.jetpack-social-navigation a[href*="pinterest.com"]:before{content:"\f210"}.jetpack-social-navigation a[href*="getpocket.com"]:before{content:"\f224"}.jetpack-social-navigation a[href*="polldaddy.com"]:before{content:"\f217"}.jetpack-social-navigation a[href*="reddit.com"]:before{content:"\f222"}.jetpack-social-navigation a[href$="/feed/"]:before{content:"\f413"}.jetpack-social-navigation a[href*="skype:"]:before{content:"\f220"}.jetpack-social-navigation a[href*="spotify.com"]:before{content:"\f515"}.jetpack-social-navigation a[href*="stumbleupon.com"]:before{content:"\f223"}.jetpack-social-navigation a[href*="tumblr.com"]:before{content:"\f214"}.jetpack-social-navigation a[href*="twitch.tv"]:before{content:"\f516"}.jetpack-social-navigation a[href*="twitter.com"]:before{content:"\f202"}.jetpack-social-navigation a[href*="vimeo.com"]:before{content:"\f212"}.jetpack-social-navigation a[href*="vine.co"]:before{content:"\f517"}.jetpack-social-navigation a[href*="wordpress.com"]:before,.jetpack-social-navigation a[href*="wordpress.org"]:before{content:"\f205"}.jetpack-social-navigation a[href*="youtube.com"]:before{content:"\f213"}.tiled-gallery{clear:both;margin:0 0 20px;overflow:hidden}.tiled-gallery img{margin:2px!important}.tiled-gallery .gallery-group{float:right;position:relative}.tiled-gallery .tiled-gallery-item{float:right;margin:0;position:relative;width:inherit}.tiled-gallery .gallery-row{overflow:hidden}.tiled-gallery .tiled-gallery-item a{background:0 0;border:none;color:inherit;margin:0;padding:0;text-decoration:none;width:auto}.tiled-gallery .tiled-gallery-item img,.tiled-gallery .tiled-gallery-item img:hover{background:0 0;border:none;box-shadow:none;max-width:100%;padding:0;vertical-align:middle}.tiled-gallery-caption{background:#eee;background:rgba(255,255,255,.8);color:#333;font-size:13px;font-weight:400;overflow:hidden;padding:10px 0;position:absolute;bottom:0;text-indent:10px;text-overflow:ellipsis;width:100%;white-space:nowrap}.tiled-gallery .tiled-gallery-item-small .tiled-gallery-caption{font-size:11px}.widget-gallery .tiled-gallery-unresized{visibility:hidden;height:0;overflow:hidden}.tiled-gallery .tiled-gallery-item img.grayscale{position:absolute;right:0;top:0}.tiled-gallery .tiled-gallery-item img.grayscale:hover{opacity:0}.tiled-gallery.type-circle .tiled-gallery-item img{border-radius:50%!important}.tiled-gallery.type-circle .tiled-gallery-caption{display:none;opacity:0}.jetpack-display-remote-posts{margin:5px 0 20px}.jetpack-display-remote-posts h4{font-size:90%;margin:5px 0;padding:0}.jetpack-display-remote-posts h4 a{text-decoration:none}.jetpack-display-remote-posts p{margin:0!important;padding:0;line-height:1.4em!important;font-size:90%}.jetpack-display-remote-posts img{max-width:100%}.widget-grofile h4{margin:1em 0 .5em}.widget-grofile ul.grofile-urls{margin-right:0;overflow:hidden}.widget-grofile ul.grofile-accounts li{list-style:none;display:inline}.widget-grofile ul.grofile-accounts li::before{content:""!important}.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite.png);background-repeat:no-repeat;width:16px;height:16px;float:right;margin-left:8px;margin-bottom:8px}.rtl .widget-grofile .grofile-accounts-logo{margin-right:8px;margin-left:0}.grofile-thumbnail{width:500px;max-width:100%}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite-2x.png);background-size:16px 784px}}div[class^=gr_custom_container]{border:1px solid gray;border-radius:10px;padding:10px 5px;background-color:#FFF;color:#000}div[class^=gr_custom_container] a{color:#000}h2[class^=gr_custom_header]{display:none}div[class^=gr_custom_each_container]{width:100%;clear:both;margin-bottom:10px;overflow:auto;padding-bottom:4px;border-bottom:1px solid #aaa}div[class^=gr_custom_book_container]{float:left;overflow:hidden;height:60px;margin-right:4px;width:39px}div[class^=gr_custom_author]{font-size:10px}div[class^=gr_custom_tags]{font-size:10px;color:gray}div[class^=gr_custom_rating]{display:none}.widget_wpcom_social_media_icons_widget ul{list-style-type:none;margin-right:0}.widget_wpcom_social_media_icons_widget li{border:0;display:inline;margin-left:.5em}.widget_wpcom_social_media_icons_widget li a{border:0;text-decoration:none}.widget_wpcom_social_media_icons_widget .genericon{font-family:Genericons}.widget_wpcom_social_media_icons_widget .screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.widget_wpcom_social_media_icons_widget .screen-reader-text:active,.widget_wpcom_social_media_icons_widget .screen-reader-text:focus,.widget_wpcom_social_media_icons_widget .screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-size:.875rem;font-weight:700;height:auto;right:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.widgets-grid-layout{width:100%}.widgets-grid-layout:after,.widgets-grid-layout:before{content:" ";display:table}.widgets-grid-layout:after{clear:both}.widget-grid-view-image{float:right;max-width:50%}.widget-grid-view-image a{display:block;margin:0 0 4px 2px}.widget-grid-view-image:image:nth-child(even){float:left}.widget-grid-view-image:nth-child(even) a{margin:0 2px 4px 0}.widgets-grid-layout .widget-grid-view-image img{max-width:100%;height:auto}.widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:0 0;clear:none;float:right;margin:0 0 -3px -5px;padding:0 0 6px 8px;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:0 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widgets-list-layout{padding:0;margin:0;list-style-type:none}.widgets-list-layout li:after,.widgets-list-layout li:before{content:"";display:table}.widgets-list-layout li:after{clear:both}.widgets-list-layout li{zoom:1;margin-bottom:1em;list-style-type:none!important}.widgets-list-layout .widgets-list-layout-blavatar{float:right;width:21.276596%;max-width:40px;height:auto}.widgets-list-layout-links{float:left;width:73.404255%}.widgets-list-layout span{opacity:.5}.widgets-list-layout span:hover{opacity:.8}
1
  /*!
2
  * Do not modify this file directly. It is concatenated from individual module CSS files.
3
  */
4
+ .jp-carousel-wrap *{line-height:inherit}.jp-carousel-overlay{background:#000}div.jp-carousel-fadeaway{position:fixed;bottom:0;z-index:2147483647;width:100%;height:15px}.jp-carousel-next-button span,.jp-carousel-previous-button span{background:url(../modules/carousel/images/arrows.png) center center/200px 126px no-repeat}.jp-carousel-msg{font-family:"Open Sans",sans-serif;font-style:normal;display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:center;margin:25px 2px 0 20px;background-color:#fff;border-right:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.jp-carousel-next-button span,.jp-carousel-previous-button span{background-image:url(../modules/carousel/images/arrows-2x.png)}}.jp-carousel-wrap{font-family:"Helvetica Neue",sans-serif!important}.jp-carousel-info{position:absolute;bottom:0;text-align:right!important;-webkit-font-smoothing:subpixel-antialiased!important}.jp-carousel-info ::selection{background:#68c9e8;color:#fff}.jp-carousel-info ::-moz-selection{background:#68c9e8;color:#fff}.jp-carousel-photo-info{position:relative;right:25%;width:50%}.jp-carousel-transitions .jp-carousel-photo-info{transition:400ms ease-out}.jp-carousel-info h2{background:none!important;border:none!important;color:#999;display:block!important;font:400 13px/1.25em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;margin:7px 0 0!important;padding:10px 0 0!important;overflow:hidden;text-align:right;text-shadow:none!important;text-transform:none!important;-webkit-font-smoothing:subpixel-antialiased}.jp-carousel-next-button,.jp-carousel-previous-button{text-indent:-9999px;overflow:hidden;cursor:pointer}.jp-carousel-next-button span,.jp-carousel-previous-button span{position:absolute;top:0;bottom:0;width:82px;zoom:1;filter:alpha(opacity=20);opacity:.2}.jp-carousel-transitions .jp-carousel-next-button span,.jp-carousel-transitions .jp-carousel-previous-button span{transition:500ms opacity ease-out}.jp-carousel-next-button:hover span,.jp-carousel-previous-button:hover span{filter:alpha(opacity=60);opacity:.6}.jp-carousel-next-button span{background-position:-110px center;left:0}.jp-carousel-previous-button span{background-position:-10px center;right:0}.jp-carousel-buttons{margin:-18px -20px 15px;padding:8px 10px;border-bottom:1px solid #222;background:#222;text-align:center}div.jp-carousel-buttons a{border:none!important;color:#999;font:400 11px/1.2em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;padding:5px 0 5px 2px;text-decoration:none!important;text-shadow:none!important;vertical-align:middle;-webkit-font-smoothing:subpixel-antialiased}div.jp-carousel-buttons a:hover{color:#68c9e8;border:none!important}.jp-carousel-transitions div.jp-carousel-buttons a:hover{transition:none!important}.jp-carousel-next-button,.jp-carousel-previous-button,.jp-carousel-slide,.jp-carousel-slide img{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.jp-carousel-slide{position:fixed;width:0;bottom:0;background-color:#000;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}.jp-carousel-slide.selected{position:absolute!important;filter:alpha(opacity=100);opacity:1}.jp-carousel-slide{filter:alpha(opacity=25);opacity:.25}.jp-carousel-slide img{display:block;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;background:none!important;border:none!important;padding:0!important;box-shadow:0 2px 8px rgba(0,0,0,.1);zoom:1}.jp-carousel-transitions .jp-carousel-slide{transition:opacity 400ms linear}.jp-carousel-close-hint{color:#999;cursor:default;letter-spacing:0!important;padding:.35em 0 0;position:absolute;text-align:right;width:90%}.jp-carousel-transitions .jp-carousel-close-hint{transition:color 200ms linear}.jp-carousel-close-hint span{cursor:pointer;background-color:#000;background-color:rgba(0,0,0,.8);display:block;height:22px;font:400 24px/1 "Helvetica Neue",sans-serif!important;line-height:22px;margin:0 .4em 0 0;text-align:center;vertical-align:middle;width:22px;border-radius:4px}.jp-carousel-transitions .jp-carousel-close-hint span{transition:border-color 200ms linear}.jp-carousel-close-hint:hover{cursor:default;color:#fff}.jp-carousel-close-hint:hover span{border-color:#fff}a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background:url(../modules/carousel/images/carousel-sprite.png?5) 0 0/16px 200px no-repeat}div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{margin:0 0 0 14px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#303030;padding-left:8px!important;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;margin:0 -12px 0 2px!important}div.jp-carousel-buttons a.jp-carousel-reblog,div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{background-position:6px -36px;padding-left:auto!important;padding-right:26px!important;color:#999}div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -156px;padding-right:19px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{cursor:default}div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:6px -56px;color:#68c9e8}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background-image:url(../modules/carousel/images/carousel-sprite-2x.png?5)}}div#carousel-reblog-box{background:#222;padding:3px 0 0;display:none;margin:5px auto 0;border-radius:2px;box-shadow:0 0 20px rgba(0,0,0,.9);height:74px;width:565px}#carousel-reblog-box textarea{background:#999;font:13px/1.4 "Helvetica Neue",sans-serif!important;color:#444;padding:3px 6px;width:370px;height:48px;float:right;margin:6px 9px 0;border:1px solid #666;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:2px}#carousel-reblog-box textarea:focus{background:#ccc;color:#222}#carousel-reblog-box label{color:#aaa;font-size:11px;padding-left:2px;padding-right:2px;display:inline;font-weight:400}#carousel-reblog-box select{width:110px;padding:0;font-size:12px;font-family:"Helvetica Neue",sans-serif!important;background:#333;color:#eee;border:1px solid #444;margin-top:5px}#carousel-reblog-box .submit,#wrapper #carousel-reblog-box p.response{float:right;width:154px;padding-top:0;padding-right:1px;overflow:hidden;height:34px;margin:3px 2px 0 0!important}#wrapper #carousel-reblog-box p.response{font-size:13px;clear:none;padding-right:2px;height:34px;color:#aaa}#carousel-reblog-box input#carousel-reblog-submit,#jp-carousel-comment-form-button-submit{font:13px/24px "Helvetica Neue",sans-serif!important;margin-top:8px;padding:0 10px!important;border-radius:1em;height:24px;color:#333;cursor:pointer;font-weight:400;background:#aaa;border:1px solid #444}#carousel-reblog-box input#carousel-reblog-submit:hover,#jp-carousel-comment-form-button-submit:hover{background:#ccc}#carousel-reblog-box .canceltext{color:#aaa;font-size:11px;line-height:24px}#carousel-reblog-box .canceltext a{color:#fff}.jp-carousel-titleanddesc{border-top:1px solid #222;color:#999;font-size:15px;padding-top:24px;margin-bottom:20px;font-weight:400}.jp-carousel-titleanddesc-title{font:300 1.5em/1.1 "Helvetica Neue",sans-serif!important;text-transform:none!important;color:#fff;margin:0 0 15px;padding:0}.jp-carousel-titleanddesc-desc p{color:#999;line-height:1.4;margin-bottom:.75em}.jp-carousel-comments p a,.jp-carousel-info h2 a,.jp-carousel-titleanddesc p a{color:#fff!important;border:none!important;text-decoration:underline!important;font-weight:400!important;font-style:normal!important}.jp-carousel-titleanddesc p b,.jp-carousel-titleanddesc p strong{font-weight:700;color:#999}.jp-carousel-titleanddesc p em,.jp-carousel-titleanddesc p i{font-style:italic;color:#999}.jp-carousel-comments p a:hover,.jp-carousel-info h2 a:hover,.jp-carousel-titleanddesc p a:hover{color:#68c9e8!important}.jp-carousel-titleanddesc p:empty{display:none}.jp-carousel-left-column-wrapper h1:after,.jp-carousel-left-column-wrapper h1:before,.jp-carousel-photo-info h1:after,.jp-carousel-photo-info h1:before{content:none!important}.jp-carousel-image-meta{background:#111;border:1px solid #222;color:#fff;font:12px/1.4 "Helvetica Neue",sans-serif!important;overflow:hidden;padding:18px 20px;width:209px!important}.jp-carousel-image-meta h5,.jp-carousel-image-meta li{font-family:"Helvetica Neue",sans-serif!important;position:inherit!important;top:auto!important;left:auto!important;right:auto!important;bottom:auto!important;background:none!important;border:none!important;font-weight:400!important;line-height:1.3em!important}.jp-carousel-image-meta ul{margin:0!important;padding:0!important;list-style:none!important}.jp-carousel-image-meta li{width:48%!important;float:right!important;margin:0 0 15px 2%!important;color:#fff!important;font-size:13px!important}.jp-carousel-image-meta h5{color:#999!important;text-transform:uppercase!important;font-size:10px!important;margin:0 0 2px!important;letter-spacing:.1em!important}a.jp-carousel-image-download{padding-right:23px;display:inline-block;clear:both;color:#999;line-height:1;font-weight:400;font-size:13px;text-decoration:none;background-position:0 -82px}a.jp-carousel-image-download span.photo-size{font-size:11px;border-radius:1em;margin-right:2px;display:inline-block}a.jp-carousel-image-download span.photo-size-times{padding:0 2px 0 1px}a.jp-carousel-image-download:hover{background-position:0 -122px;color:#68c9e8;border:none!important}.jp-carousel-image-map{position:relative;margin:-20px -20px 20px;border-bottom:1px solid rgba(255,255,255,.17);height:154px}.jp-carousel-image-map img.gmap-main{border-top-right-radius:6px;border-left:1px solid rgba(255,255,255,.17)}.jp-carousel-image-map div.gmap-topright{width:94px;height:154px;position:absolute;top:0;left:0}.jp-carousel-image-map div.imgclip{overflow:hidden;border-top-left-radius:6px}.jp-carousel-image-map div.gmap-topright img{margin-right:-40px}.jp-carousel-image-map img.gmap-bottomright{position:absolute;top:96px;left:0}.jp-carousel-comments{font:15px/1.7 "Helvetica Neue",sans-serif!important;font-weight:400;background:none}.jp-carousel-comments p a:active,.jp-carousel-comments p a:focus,.jp-carousel-comments p a:hover{color:#68c9e8!important}.jp-carousel-comment{background:none;color:#999;margin-bottom:20px;clear:right;overflow:auto;width:100%}.jp-carousel-comment p{color:#999!important}.jp-carousel-comment .comment-author{font-size:13px;font-weight:400;padding:0;width:auto;display:inline;float:none;border:none;margin:0}.jp-carousel-comment .comment-author a{color:#fff}.jp-carousel-comment .comment-gravatar{float:right}.jp-carousel-comment .comment-content{border:none;margin-right:85px;padding:0}.jp-carousel-comment .avatar{margin:0 0 0 20px;border-radius:4px;border:none!important;padding:0!important;background-color:transparent!important}.jp-carousel-comment .comment-date{color:#999;margin-top:4px;font-size:11px;display:inline;float:left}#jp-carousel-comment-form{margin:0 0 10px!important;float:right;width:100%}textarea#jp-carousel-comment-form-comment-field{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:15px/1.4 "Helvetica Neue",sans-serif!important;width:100%;padding:10px 10px 5px;margin:0;float:none;height:147px;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:3px;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box}textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#555}textarea#jp-carousel-comment-form-comment-field:focus{background:#ccc;color:#222}textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#aaa}#jp-carousel-comment-form-spinner{color:#fff;margin:22px 10px 0 0;display:block;width:20px;height:20px;float:right}#jp-carousel-comment-form-submit-and-info-wrapper{display:none;overflow:hidden;width:100%}#jp-carousel-comment-form-commenting-as input{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:13px/1.4 "Helvetica Neue",sans-serif!important;padding:3px 6px;float:right;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:2px;width:285px}#jp-carousel-comment-form-commenting-as input:focus{background:#ccc;color:#222}#jp-carousel-comment-form-commenting-as p{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:22px 0 0;float:right}#jp-carousel-comment-form-commenting-as fieldset{float:right;border:none;margin:20px 0 0;padding:0;clear:both}#jp-carousel-comment-form-commenting-as label{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:0 0 3px 20px;float:right;width:100px}#jp-carousel-comment-form-button-submit{margin-top:20px;float:left}#jp-carousel-comment-form-container,#js-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-post-results{display:none;overflow:auto;width:100%}#jp-carousel-comment-post-results span{display:block;text-align:center;margin-top:20px;width:100%;overflow:auto;padding:1em 0;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(0,0,0,.7);border-radius:2px;font:13px/1.4 "Helvetica Neue",sans-serif!important;border:1px solid rgba(255,255,255,.17);box-shadow:inset 0 0 5px 5px rgba(0,0,0,1)}.jp-carousel-comment-post-error{color:#DF4926}#jp-carousel-comments-closed{display:none;color:#999}#jp-carousel-comments-loading{font:400 15px/1.7 "Helvetica Neue",sans-serif!important;display:none;color:#999;text-align:right;margin-bottom:20px}.jp-carousel-light .jp-carousel-overlay{background:#fff}.jp-carousel-light .jp-carousel-next-button:hover span,.jp-carousel-light .jp-carousel-previous-button:hover span{opacity:.8}.jp-carousel-light .jp-carousel-close-hint:hover,.jp-carousel-light .jp-carousel-titleanddesc div{color:#000!important}.jp-carousel-light .jp-carousel-comment .comment-author a,.jp-carousel-light .jp-carousel-comments p a,.jp-carousel-light .jp-carousel-info h2 a,.jp-carousel-light .jp-carousel-titleanddesc p a{color:#1e8cbe!important}.jp-carousel-light .jp-carousel-comment .comment-author a:hover,.jp-carousel-light .jp-carousel-comments p a:hover,.jp-carousel-light .jp-carousel-info h2 a:hover,.jp-carousel-light .jp-carousel-titleanddesc p a:hover{color:#f1831e!important}.jp-carousel-light .jp-carousel-comment,.jp-carousel-light .jp-carousel-comment p,.jp-carousel-light .jp-carousel-info h2,.jp-carousel-light .jp-carousel-titleanddesc,.jp-carousel-light .jp-carousel-titleanddesc p,.jp-carousel-light .jp-carousel-titleanddesc p b,.jp-carousel-light .jp-carousel-titleanddesc p em,.jp-carousel-light .jp-carousel-titleanddesc p i,.jp-carousel-light .jp-carousel-titleanddesc p strong,.jp-carousel-light div.jp-carousel-buttons a{color:#666}.jp-carousel-light .jp-carousel-buttons{border-bottom-color:#f0f0f0;background:#f5f5f5}.jp-carousel-light div.jp-carousel-buttons a:hover{text-decoration:none;color:#f1831e}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:4px -56px;padding-right:24px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#2ea2cc;color:#fff}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -176px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-position:5px -36px}.jp-carousel-light div#carousel-reblog-box{background:#eee;box-shadow:0 2px 10px rgba(0,0,0,.1);border:1px solid #ddd}.jp-carousel-light #carousel-reblog-box textarea{color:#666;border:1px solid #cfcfcf;background:#fff}.jp-carousel-light #carousel-reblog-box .canceltext{color:#888}.jp-carousel-light #carousel-reblog-box .canceltext a{color:#666}.jp-carousel-light #carousel-reblog-box select{background:#eee;color:#333;border:1px solid #aaa}#jp-carousel-comment-form-button-submit,.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit{color:#333;background:#fff;border:1px solid #aaa}.jp-carousel-light .jp-carousel-image-meta{background:#fafafa;border:1px solid #eee;border-top-color:#f5f5f5;border-right-color:#f5f5f5;color:#333}.jp-carousel-light .jp-carousel-image-meta li{color:#000!important}.jp-carousel-light .jp-carousel-close-hint{color:#ccc}.jp-carousel-light .jp-carousel-close-hint span{background-color:#fff;border-color:#ccc}.jp-carousel-light #jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#aaa}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus{color:#333}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#ddd}.jp-carousel-light a.jp-carousel-image-download{background-position:0 -122px}.jp-carousel-light a.jp-carousel-image-download:hover{background-position:0 -122px;color:#f1831e}.jp-carousel-light textarea#jp-carousel-comment-form-comment-field{background:#fbfbfb;color:#333;border:1px solid #dfdfdf;box-shadow:inset -2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input{background:#fbfbfb;border:1px solid #dfdfdf;color:#333;box-shadow:inset -2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus{background:#fbfbfb;color:#333}.jp-carousel-light #jp-carousel-comment-post-results span{background:#f7f7f7;border:1px solid #dfdfdf;box-shadow:inset 0 0 5px rgba(0,0,0,.05)}.jp-carousel-light .jp-carousel-slide{background-color:#fff}.jp-carousel-light .jp-carousel-titleanddesc{border-top:1px solid #eee}@media only screen and (max-width:760px){.jp-carousel-info{margin:0 10px!important}.jp-carousel-buttons,.jp-carousel-next-button,.jp-carousel-previous-button{display:none!important}.jp-carousel-image-meta{float:none!important;width:100%!important;-moz-box-sizing:border-box;box-sizing:border-box}.jp-carousel-close-hint{font-weight:800!important;font-size:26px!important;position:fixed!important;top:-10px}.jp-carousel-slide img{filter:alpha(opacity=100);opacity:1}.jp-carousel-wrap{background-color:#000}.jp-carousel-fadeaway{display:none}#jp-carousel-comment-form-container{display:none!important}.jp-carousel-titleanddesc{padding-top:0!important;border:none!important}.jp-carousel-titleanddesc-title{font-size:1em!important}.jp-carousel-left-column-wrapper{padding:0;width:100%!important}.jp-carousel-photo-info{right:0!important;width:100%!important}}.contact-form .clear-form{clear:both}.contact-form input[type=email],.contact-form input[type=text]{width:300px;max-width:98%;margin-bottom:13px}.contact-form select{margin-bottom:13px}.contact-form textarea{height:200px;width:80%;float:none;margin-bottom:13px}.contact-form input[type=checkbox],.contact-form input[type=radio]{float:none;margin-bottom:13px}.contact-form label{margin-bottom:3px;float:none;font-weight:700;display:block}.contact-form label.checkbox,.contact-form label.radio{margin-bottom:3px;float:none;font-weight:700;display:inline-block}.contact-form label span{color:#AAA;margin-right:4px;font-weight:400}.contact-form-submission{margin-bottom:4em;padding:1.5em 1em}.contact-form-submission p{margin:0 auto}.form-errors .form-error-message{color:red}.textwidget .contact-form input[type=email],.textwidget .contact-form input[type=text],.textwidget .contact-form textarea{width:250px;max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box}#jetpack-check-feedback-spam{margin:1px 0 0 8px}.jetpack-check-feedback-spam-spinner{display:inline-block;margin-top:7px}.infinite-loader{color:#000;display:block;height:28px;text-indent:-9999px}#infinite-handle span{background:#333;border-radius:1px;color:#eee;cursor:pointer;font-size:13px;padding:6px 16px}#infinite-handle span button,#infinite-handle span button:focus,#infinite-handle span button:hover{display:inline;position:static;padding:0;margin:0;border:none;line-height:inherit;background:0 0;color:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}#infinite-handle span button::-moz-focus-inner{margin:0;padding:0;border:none}@media (max-width:800px){#infinite-handle span:before{display:none}#infinite-handle span{display:block}}#infinite-footer{position:fixed;bottom:-50px;right:0;width:100%}#infinite-footer a{text-decoration:none}#infinite-footer .blog-credits a:hover,#infinite-footer .blog-info a:hover{color:#444;text-decoration:underline}#infinite-footer .container{background:rgba(255,255,255,.8);border-color:#ccc;border-color:rgba(0,0,0,.1);border-style:solid;border-width:1px 0 0;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 auto;overflow:hidden;padding:1px 20px;width:780px}#infinite-footer .blog-credits,#infinite-footer .blog-info{-moz-box-sizing:border-box;box-sizing:border-box;line-height:25px}#infinite-footer .blog-info{float:right;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:40%}#infinite-footer .blog-credits{font-weight:400;float:left;width:60%}#infinite-footer .blog-info a{color:#111;font-size:14px;font-weight:700}#infinite-footer .blog-credits{color:#888;font-size:12px;text-align:left}#infinite-footer .blog-credits a{color:#666}.infinity-end.neverending #infinite-footer{display:none}@media (max-width:640px){#infinite-footer .container{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#infinite-footer .blog-info{width:30%}#infinite-footer .blog-credits{width:70%}#infinite-footer .blog-credits,#infinite-footer .blog-info a{font-size:10px}}@media (max-width:640px){#infinite-footer{position:static}}#wpadminbar li#wp-admin-bar-admin-bar-likes-widget{width:61px;overflow:hidden}#wpadminbar iframe.admin-bar-likes-widget{width:61px;height:28px;min-height:28px;border-width:0;position:absolute;top:0}div.jetpack-likes-widget-wrapper{width:100%;min-height:50px;position:relative}div.jetpack-likes-widget-wrapper .sd-link-color{font-size:12px}div.jetpack-likes-widget-wrapper.slim-likes-widget{width:1px;min-height:0}#likes-other-gravatars{display:none;position:absolute;padding:10px 10px 12px;background-color:#2e4453;border-width:0;box-shadow:0 0 10px #2e4453;box-shadow:0 0 10px rgba(46,68,83,.6);min-width:130px;z-index:1000}#likes-other-gravatars *{line-height:normal}#likes-other-gravatars .likes-text{color:#fff;font-size:12px;padding-bottom:8px}#likes-other-gravatars li,#likes-other-gravatars ul{margin:0;padding:0;text-indent:0;list-style-type:none}#likes-other-gravatars li::before{content:""}#likes-other-gravatars ul.wpl-avatars{overflow:auto;display:block;max-height:190px}#likes-other-gravatars ul.wpl-avatars li{width:32px;height:32px;float:right;margin:0 0 5px 5px}#likes-other-gravatars ul.wpl-avatars li a{margin:0 0 0 2px;border-bottom:none!important;display:block}#likes-other-gravatars ul.wpl-avatars li a img{background:0 0;border:none;margin:0!important;padding:0!important;position:static}div.sd-box{border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.13)}.comment-likes-widget,.entry-content .post-likes-widget,.post-likes-widget{margin:0;border-width:0;display:block}.post-likes-widget-placeholder{margin:0;border-width:0;position:relative}.post-likes-widget-placeholder .button{display:none}.post-likes-widget-placeholder .loading{color:#999;font-size:12px}.slim-likes-widget .post-likes-widget{width:auto;float:none}div.sharedaddy.sd-like-enabled .sd-like h3{display:none}div.sharedaddy.sd-like-enabled .sd-like .post-likes-widget{width:100%;float:none;position:absolute;top:0}.comment-likes-widget{width:100%}.pd-rating{display:block!important}.sd-gplus .sd-title{display:none}#jp-relatedposts{display:none;padding-top:1em;margin:1em 0;position:relative;clear:both}.jp-relatedposts:after{content:'';display:block;clear:both}#jp-relatedposts h3.jp-relatedposts-headline{margin:0 0 1em;display:inline-block;float:right;font-size:9pt;font-weight:700;font-family:inherit}#jp-relatedposts h3.jp-relatedposts-headline em:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}#jp-relatedposts h3.jp-relatedposts-headline em{font-style:normal;font-weight:700}#jp-relatedposts .jp-relatedposts-items{clear:right}#jp-relatedposts .jp-relatedposts-items-visual{margin-left:-20px}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{float:right;width:33%;margin:0 0 1em;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post{padding-left:20px;filter:alpha(opacity=80);-moz-opacity:.8;opacity:.8}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n+4),#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post:nth-child(3n+4){clear:both}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover{filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items p,#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-size:14px;line-height:20px;margin:0}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs{position:relative}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay{position:absolute;top:0;bottom:0;right:0;left:0;display:block;border-bottom:0}#jp-relatedposts .jp-relatedposts-items p{margin-bottom:0}#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{text-transform:none;margin:0;font-family:inherit;display:block;max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a{font-size:inherit;font-weight:400;text-decoration:none;filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span{display:block;max-width:90%;overflow:hidden;text-overflow:ellipsis}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post span{max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{opacity:.6}#jp-relatedposts .jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt,.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{display:none}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt{overflow:hidden}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs span{margin-bottom:1em}@media only screen and (max-width:640px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:50%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n){clear:right}#jp-relatedposts .jp-relatedposts-items-visual{margin-left:20px}}@media only screen and (max-width:320px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:100%;clear:both;margin:0 0 1em}}#jp-post-flair{padding-top:.5em}#content div.sharedaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{margin:0 0 1em;display:inline-block;line-height:1.2;font-size:9pt;font-weight:700}div.sharedaddy h3.sd-title:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;margin-bottom:1em}body.highlander-light h3.sd-title:before{border-top:1px solid rgba(0,0,0,.2)}body.highlander-dark h3.sd-title:before{border-top:1px solid rgba(255,255,255,.4)}.sd-content ul{padding:0!important;margin:0 0 .7em!important;list-style:none!important}.sd-content ul li{display:inline-block}.sd-block.sd-gplus{margin:0 0 .5em}.sd-gplus .sd-content{font-size:12px}#sharing_email .sharing_send,.sd-content ul li .option a.share-ustom,.sd-content ul li a.sd-button,.sd-content ul li.advanced a.share-more,.sd-content ul li.preview-item div.option.option-smart-off a,.sd-social-icon .sd-content ul li a.sd-button,.sd-social-icon-text .sd-content ul li a.sd-button,.sd-social-official .sd-content>ul>li .digg_button >a,.sd-social-official .sd-content>ul>li>a.sd-button,.sd-social-text .sd-content ul li a.sd-button{text-decoration:none!important;display:inline-block;margin:0 0 5px 5px;font-size:12px;font-family:"Open Sans",sans-serif;font-weight:400;border-radius:3px;color:#777!important;background:#f8f8f8;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,.08);text-shadow:none;line-height:23px;padding:1px 5px 0 8px}.sd-content ul li .option a.share-ustom span,.sd-content ul li a.sd-button>span,.sd-content ul li.advanced a.share-more span,.sd-content ul li.preview-item div.option.option-smart-off a span,.sd-social-icon-text .sd-content ul li a.sd-button>span,.sd-social-official .sd-content>ul>li .digg_button >a span,.sd-social-official .sd-content>ul>li>a.sd-button span,.sd-social-text .sd-content ul li a.sd-button span{line-height:23px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button,.sd-social-official .sd-content>ul>li .digg_button>a,.sd-social-official .sd-content>ul>li>a.sd-button{line-height:17px;box-shadow:none;vertical-align:top}.sd-social-official .sd-content ul li a.sd-button>span{line-height:17px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,.sd-social-official .sd-content>ul>li .digg_button>a:before,.sd-social-official .sd-content>ul>li>a.sd-button:before{margin-bottom:-1px}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon .sd-content ul li a.sd-button:hover,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:hover,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li .digg_button>a:hover,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-official .sd-content>ul>li>a.sd-button:hover,.sd-social-text .sd-content ul li a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:hover{color:#555;background:#fafafa;border:1px solid #999}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.16)}.sd-content ul li a.sd-button:before{display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font:400 18px/1 social-logos;vertical-align:top;text-align:center}.sd-social-icon-text ul li a.sd-button:before{position:relative;top:2px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-content ul li a.sd-button:before{position:relative;top:2px}}.sd-social-official ul li a.sd-button:before{position:relative;top:-2px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-social-official ul li a.sd-button:before{top:0}}.sd-content ul li{margin:0!important;padding:0}.sd-content ul li.preview-item a.sd-button span,.sd-social-icon-text .sd-content ul li a span,.sd-social-official .sd-content ul li a.sd-button span{margin-right:3px}.sd-content ul li.preview-item.no-icon a.sd-button span{margin-right:0}.sd-content ul li.no-icon a:before,.sd-social-text .sd-content ul li a:before{display:none}body .sd-content ul li.share-custom.no-icon a span,body .sd-social-text .sd-content ul li.share-custom a span{background-image:none;background-position:-500px -500px!important;background-repeat:no-repeat!important;padding-right:0;height:0;line-height:inherit}.sd-social-icon .sd-content ul li a.share-more{position:relative;top:-4px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-social-icon .sd-content ul li a.share-more{top:2px}}@-moz-document url-prefix(){.sd-social-icon .sd-content ul li a.share-more{top:2px}}.sd-social-icon .sd-content ul li a.share-more span{margin-right:3px}.sd-content ul li.share-print div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-print a:before,.sd-social-icon-text .sd-content li.share-print a:before,.sd-social-official .sd-content li.share-print a:before,.sd-social-text .sd-content ul li.share-print a:before{content:'\f469'}.sd-content ul li.share-email div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-email a:before,.sd-social-icon-text .sd-content li.share-email a:before,.sd-social-official .sd-content li.share-email a:before,.sd-social-text .sd-content ul li.share-email a:before{content:'\f410'}.sd-content ul li.share-linkedin div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-linkedin a:before,.sd-social-icon-text .sd-content li.share-linkedin a:before,.sd-social-text .sd-content ul li.share-linkedin a:before{content:'\f207'}.sd-content ul li.share-twitter div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-twitter a:before,.sd-social-icon-text .sd-content li.share-twitter a:before,.sd-social-text .sd-content ul li.share-twitter a:before{content:'\f202'}.sd-content ul li.share-reddit div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-reddit a:before,.sd-social-icon-text .sd-content li.share-reddit a:before,.sd-social-text .sd-content ul li.share-reddit a:before{content:'\f222'}.sd-content ul li.share-tumblr div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-tumblr a:before,.sd-social-icon-text .sd-content li.share-tumblr a:before,.sd-social-text .sd-content ul li.share-tumblr a:before{content:'\f607'}.sd-content ul li.share-pocket div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pocket a:before,.sd-social-icon-text .sd-content li.share-pocket a:before,.sd-social-text .sd-content ul li.share-pocket a:before{content:'\f224'}.sd-content ul li.share-pinterest div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pinterest a:before,.sd-social-icon-text .sd-content li.share-pinterest a:before,.sd-social-text .sd-content ul li.share-pinterest a:before{content:'\f210'}.sd-content ul li.share-google-plus-1 div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-google-plus-1 a:before,.sd-social-icon-text .sd-content li.share-google-plus-1 a:before,.sd-social-text .sd-content ul li.share-google-plus-1 a:before{content:'\f218'}.sd-content ul li.share-facebook div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-facebook a:before,.sd-social-icon-text .sd-content li.share-facebook a:before,.sd-social-text .sd-content ul li.share-facebook a:before{content:'\f203'}.sd-content ul li.share-press-this div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-press-this a:before,.sd-social-icon-text .sd-content li.share-press-this a:before,.sd-social-official .sd-content li.share-press-this a:before,.sd-social-text .sd-content ul li.share-press-this a:before{content:'\f205'}.sd-social-official .sd-content li.share-press-this a:before{color:#2ba1cb}.sd-content ul li.share-telegram div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-telegram a:before,.sd-social-icon-text .sd-content li.share-telegram a:before,.sd-social-official .sd-content li.share-telegram a:before,.sd-social-text .sd-content ul li.share-telegram a:before{content:'\f606'}.sd-social-official .sd-content li.share-telegram a:before{color:#08c}.sd-content ul li.share-skype div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-skype a:before,.sd-social-icon-text .sd-content li.share-skype a:before,.sd-social-text .sd-content ul li.share-skype a:before{content:'\f220'}.sd-content ul li.advanced a.share-more:before,.sd-social-icon .sd-content ul a.share-more:before,.sd-social-icon-text .sd-content a.share-more:before,.sd-social-official .sd-content a.share-more:before,.sd-social-text .sd-content ul a.share-more:before{content:'\f415'}.sd-social-official .sd-content a.share-more:before{color:#2ba1cb}.sd-content ul li.share-jetpack-whatsapp div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-jetpack-whatsapp a:before,.sd-social-icon-text .sd-content li.share-jetpack-whatsapp a:before,.sd-social-official .sd-content li.share-jetpack-whatsapp a:before,.sd-social-text .sd-content ul li.share-jetpack-whatsapp a:before{content:'\f608'}.sd-social-official .sd-content li.share-jetpack-whatsapp a:before{color:#43d854}.sd-social-icon .sd-content ul li[class*=share-].share-jetpack-whatsapp a.sd-button{background:#43d854;color:#fff!important}.sd-social .sd-button .share-count{background:#2ea2cc;color:#fff;border-radius:10px;display:inline-block;text-align:center;font-size:10px;padding:1px 3px;line-height:1}.sd-social-official .sd-content ul,.sd-social-official .sd-content ul li{line-height:25px!important}.sd-social-official .sd-content>ul>li>a.sd-button span{line-height:1}.sd-social-official .sd-content ul:after{content:".";display:block;height:0;clear:both;visibility:hidden}.sd-social-official .sd-content li.share-press-this a{margin:0 0 5px}.sd-social-official .sd-content ul>li{display:block;float:right;margin:0 0 5px 10px!important;height:25px}.sd-social-official .fb-share-button>span{vertical-align:top!important}.sd-social-official .sd-content .pocket_button iframe{width:98px}.googleplus1_button .g-plus{vertical-align:top!important}.reddit_button iframe{margin-top:1px}.googleplus1_button iframe,.linkedin_button>span,.pinterest_button,.pocket_button iframe,.twitter_button{margin:0!important}.sd-social-official .sd-content .share-skype{width:55px}body .sd-social-official li a.share-more,body .sd-social-official li.share-custom a,body .sd-social-official li.share-digg a,body .sd-social-official li.share-email a,body .sd-social-official li.share-press-this a,body .sd-social-official li.share-print{position:relative;top:0}body .sd-social-icon .sd-content li.share-custom>a{padding:2px 3px 0;position:relative;top:4px}body .sd-content ul li.share-custom a.share-icon span,body .sd-social-icon .sd-content li.share-custom a span,body .sd-social-icon-text .sd-content li.share-custom a span,body .sd-social-official .sd-content li.share-custom a span,body .sd-social-text .sd-content li.share-custom a span{background-size:16px 16px;background-repeat:no-repeat;margin-right:0;padding:0 19px 0 0;display:inline-block;height:16px;line-height:16px}body .sd-social-icon .sd-content li.share-custom a span{width:0;padding-right:16px!important}.sharing-hidden .inner{position:absolute;z-index:2;border:1px solid #ccc;padding:10px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);border-radius:2px;margin-top:5px;max-width:400px}.sharing-hidden .inner ul{margin:0!important}.sd-social-official .sd-content .sharing-hidden ul>li.share-end{clear:both;margin:0!important;height:0!important}.sharing-hidden .inner:after,.sharing-hidden .inner:before{position:absolute;z-index:1;top:-8px;right:20px;width:0;height:0;border-right:6px solid transparent;border-left:6px solid transparent;border-bottom:8px solid #ccc;content:"";display:block}.sharing-hidden .inner:after{z-index:2;top:-7px;border-right:6px solid transparent;border-left:6px solid transparent;border-bottom:8px solid #fff}.sharing-hidden ul{margin:0}.sd-social-icon .sd-content ul li[class*=share-] a,.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a{border-radius:50%;-webkit-border-radius:50%;border:0;box-shadow:none;padding:7px;position:relative;top:-2px;line-height:1;width:auto;height:auto;margin-bottom:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button>span,.sd-social-icon .sd-content ul li[class*=share-] div.option a span{line-height:1}.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a:hover{border:none;opacity:.6}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button:before{top:1px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button.share-custom{padding:8px 8px 6px;top:5px}.sd-social-icon .sd-content ul li a.sd-button.share-more{margin-right:10px}.sd-social-icon .sd-content ul li:first-child a.sd-button.share-more{margin-right:0}.sd-social-icon .sd-button span.share-count{position:absolute;bottom:0;left:0;border-radius:0;background:#555;font-size:9px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button{background:#e9e9e9;margin-top:2px;text-indent:0}.sd-social-icon .sd-content ul li[class*=share-].share-tumblr a.sd-button{background:#2c4762;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-facebook a.sd-button{background:#3b5998;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-twitter a.sd-button{background:#00acee;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pinterest a.sd-button{background:#ca1f27;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-digg a.sd-button{color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-press-this a.sd-button{background:#1e8cbe;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-telegram a.sd-button{background:#08c;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-linkedin a.sd-button{background:#0077b5;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-google-plus-1 a.sd-button{background:#dd4b39;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pocket a.sd-button{background:#ee4056;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-reddit a.sd-button{background:#cee3f8;color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-skype a.sd-button{background:#00AFF0;color:#fff!important}.sharing-screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.sharing-screen-reader-text:active,.sharing-screen-reader-text:focus,.sharing-screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-weight:700;height:auto;right:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}#sharing_email{width:342px;position:absolute;z-index:1001;border:1px solid #ccc;padding:15px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);text-align:right}div.sharedaddy.sharedaddy-dark #sharing_email{border-color:#fff}#sharing_email .errors{color:#fff;background-color:#771a09;font-size:12px;padding:5px 8px;line-height:1;margin:10px 0 0}#sharing_email label{font-size:12px;color:#333;font-weight:700;display:block;padding:0 0 4px;text-align:right;text-shadow:none}#sharing_email form{margin:0}#sharing_email input[type=email],#sharing_email input[type=text]{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid #ccc;margin-bottom:1em;background:#fff;font-size:12px;color:#333;max-width:none;padding:1px 3px}#jetpack-source_f_name{display:none!important;position:absolute!important;right:-9000px}#sharing_email .sharing_cancel{padding:0 1em 0 0;font-size:12px;text-shadow:none}#sharing_email .recaptcha{width:312px;height:123px;margin:0 0 1em}.slideshow-window{background-color:#222;border:20px solid #222;border-radius:10px;height:0;margin-bottom:20px;overflow:hidden;padding-top:30px!important;padding-bottom:56.25%!important;position:relative;z-index:1}.slideshow-window.slideshow-white{background-color:#fff;border-color:#fff}.slideshow-window,.slideshow-window *{-moz-box-sizing:content-box;box-sizing:content-box}.slideshow-loading{height:100%;text-align:center;margin:auto}body div.slideshow-window * img{background-color:transparent!important;background-image:none!important;border-width:0!important;display:block;margin:0 auto;max-width:100%;max-height:100%;padding:0!important;position:relative;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);top:50%}.slideshow-loading img{vertical-align:middle}.slideshow-slide{display:none;height:100%!important;right:0;margin:auto;position:absolute;text-align:center;top:0;width:100%!important}.slideshow-slide img{vertical-align:middle}.slideshow-line-height-hack{overflow:hidden;width:0;font-size:0}.slideshow-slide-caption{font-size:13px;font-family:"Helvetica Neue",sans-serif;color:#f7f7f7;text-shadow:#222 -1px 1px 2px;line-height:25px;height:25px;position:absolute;bottom:5px;right:0;z-index:100;width:100%;text-align:center}.slideshow-controls{z-index:1000;position:absolute;bottom:30px;margin:auto;text-align:center;width:100%;-ms-filter:"alpha(Opacity=50)";opacity:.5;direction:rtl;transition:300ms opacity ease-out}.slideshow-window:hover .slideshow-controls{-ms-filter:"alpha(Opacity=100)";opacity:1}body div div.slideshow-controls a,body div div.slideshow-controls a:hover{border:2px solid rgba(255,255,255,.1)!important;background-color:#000!important;background-color:rgba(0,0,0,.6)!important;background-image:url(../modules/shortcodes/img/slideshow-controls.png)!important;background-repeat:no-repeat;background-size:142px 16px!important;background-position:-34px 8px!important;color:#222!important;margin:0 5px!important;padding:0!important;display:inline-block!important;zoom:1;height:32px!important;width:32px!important;line-height:32px!important;text-align:center!important;-khtml-border-radius:10em!important;border-radius:10em!important;transition:300ms border-color ease-out}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body div div.slideshow-controls a,body div div.slideshow-controls a:hover{background-image:url(../modules/shortcodes/img/slideshow-controls-2x.png)!important}}body div div.slideshow-controls a:hover{border-color:rgba(255,255,255,1)!important}body div div.slideshow-controls a:first-child{background-position:-76px 8px!important}body div div.slideshow-controls a:last-child{background-position:-117px 8px!important}body div div.slideshow-controls a.running,body div div.slideshow-controls a:nth-child(2){background-position:-34px 8px!important}body div div.slideshow-controls a.paused{background-position:9px 8px!important}.slideshow-controls a img{border:50px dotted #f0f}body.presentation-wrapper-fullscreen-parent,html.presentation-wrapper-fullscreen-parent{overflow:hidden!important}.presentation-wrapper-fullscreen-parent #wpadminbar{display:none}.presentation-wrapper-fullscreen,.presentation-wrapper-fullscreen-parent{min-width:100%!important;min-height:100%!important;position:absolute!important;top:0!important;left:0!important;bottom:0!important;right:0!important;margin:0!important;padding:0!important;z-index:10000!important}.presentation-wrapper-fullscreen{background-color:gray;border:none!important}.presentation-wrapper-fullscreen .nav-arrow-left,.presentation-wrapper-fullscreen .nav-arrow-right{z-index:20001}.presentation-wrapper-fullscreen .nav-fullscreen-button{z-index:20002}.presentation-wrapper{margin:20px auto;border:1px solid #e5e5e5;overflow:hidden;line-height:normal}.presentation{position:relative;margin:0;overflow:hidden;outline:0}.presentation,.presentation .step{background-repeat:no-repeat;background-position:center;background-size:100% 100%}.presentation .step.fade:not(.active){opacity:0}.presentation .slide-content{padding:30px}.presentation .nav-arrow-left,.presentation .nav-arrow-right,.presentation .nav-fullscreen-button{position:absolute;width:34px;background-repeat:no-repeat;z-index:2;opacity:0;transition:opacity .25s}.presentation .nav-arrow-left,.presentation .nav-arrow-right{height:100%;background-image:url(../modules/shortcodes/images/slide-nav.png);background-size:450% 61px}.presentation .nav-arrow-left{right:0;background-position:4px 50%}.presentation .nav-arrow-right{left:0;background-position:-120px 50%}.presentation .nav-fullscreen-button{width:32px;height:32px;margin:4px;bottom:0;left:0;z-index:3;background-image:url(../modules/shortcodes/images/expand.png);background-size:100% 100%}.presentation:hover .nav-arrow-left,.presentation:hover .nav-arrow-right{opacity:1}.presentation:hover .nav-fullscreen-button{opacity:.8}.presentation-wrapper-fullscreen .nav-fullscreen-button{background-image:url(../modules/shortcodes/images/collapse.png)}.presentation .autoplay-overlay{height:15%;width:80%;margin:30% 10%;position:relative;z-index:100;display:table;border-radius:50px;background-color:#e5e5e5;background-color:rgba(0,0,0,.75);transition:opacity .5s}.presentation .autoplay-overlay .overlay-msg{position:relative;display:table-cell;text-align:center;vertical-align:middle;color:#fff}.presentation .will-fade{opacity:0}.presentation .do-fade{opacity:1;transition:opacity .5s}#subscribe-email input{width:95%}.comment-subscription-form .subscribe-label{display:inline!important}.jetpack-video-wrapper{margin-bottom:1.6em}.jetpack-video-wrapper>.wp-video,.jetpack-video-wrapper>embed,.jetpack-video-wrapper>iframe,.jetpack-video-wrapper>object{margin-bottom:0}.jetpack-social-navigation ul{display:block;margin:0 0 1.5em;padding:0}.jetpack-social-navigation li{display:inline-block;margin:0;line-height:1}.jetpack-social-navigation a{border:0;height:1em;text-decoration:none;width:1em}.jetpack-social-navigation a:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Genericons;font-size:1em;font-style:normal;font-weight:400;height:1em;line-height:1;speak:none;text-decoration:inherit;vertical-align:top;width:1em;content:"\f415"}.jetpack-social-navigation a[href*="codepen.io"]:before{content:"\f216"}.jetpack-social-navigation a[href*="digg.com"]:before{content:"\f221"}.jetpack-social-navigation a[href*="dribbble.com"]:before{content:"\f201"}.jetpack-social-navigation a[href*="dropbox.com"]:before{content:"\f225"}.jetpack-social-navigation a[href*="mailto:"]:before{content:"\f410"}.jetpack-social-navigation a[href*="facebook.com"]:before{content:"\f203"}.jetpack-social-navigation a[href*="flickr.com"]:before{content:"\f211"}.jetpack-social-navigation a[href*="foursquare.com"]:before{content:"\f226"}.jetpack-social-navigation a[href*="github.com"]:before{content:"\f200"}.jetpack-social-navigation a[href*="plus.google.com"]:before{content:"\f206"}.jetpack-social-navigation a[href*="instagram.com"]:before{content:"\f215"}.jetpack-social-navigation a[href*="linkedin.com"]:before{content:"\f208"}.jetpack-social-navigation a[href*="path.com"]:before{content:"\f219"}.jetpack-social-navigation a[href*="pinterest.com"]:before{content:"\f210"}.jetpack-social-navigation a[href*="getpocket.com"]:before{content:"\f224"}.jetpack-social-navigation a[href*="polldaddy.com"]:before{content:"\f217"}.jetpack-social-navigation a[href*="reddit.com"]:before{content:"\f222"}.jetpack-social-navigation a[href$="/feed/"]:before{content:"\f413"}.jetpack-social-navigation a[href*="skype:"]:before{content:"\f220"}.jetpack-social-navigation a[href*="spotify.com"]:before{content:"\f515"}.jetpack-social-navigation a[href*="stumbleupon.com"]:before{content:"\f223"}.jetpack-social-navigation a[href*="tumblr.com"]:before{content:"\f214"}.jetpack-social-navigation a[href*="twitch.tv"]:before{content:"\f516"}.jetpack-social-navigation a[href*="twitter.com"]:before{content:"\f202"}.jetpack-social-navigation a[href*="vimeo.com"]:before{content:"\f212"}.jetpack-social-navigation a[href*="vine.co"]:before{content:"\f517"}.jetpack-social-navigation a[href*="wordpress.com"]:before,.jetpack-social-navigation a[href*="wordpress.org"]:before{content:"\f205"}.jetpack-social-navigation a[href*="youtube.com"]:before{content:"\f213"}.tiled-gallery{clear:both;margin:0 0 20px;overflow:hidden}.tiled-gallery img{margin:2px!important}.tiled-gallery .gallery-group{float:right;position:relative}.tiled-gallery .tiled-gallery-item{float:right;margin:0;position:relative;width:inherit}.tiled-gallery .gallery-row{overflow:hidden}.tiled-gallery .tiled-gallery-item a{background:0 0;border:none;color:inherit;margin:0;padding:0;text-decoration:none;width:auto}.tiled-gallery .tiled-gallery-item img,.tiled-gallery .tiled-gallery-item img:hover{background:0 0;border:none;box-shadow:none;max-width:100%;padding:0;vertical-align:middle}.tiled-gallery-caption{background:#eee;background:rgba(255,255,255,.8);color:#333;font-size:13px;font-weight:400;overflow:hidden;padding:10px 0;position:absolute;bottom:0;text-indent:10px;text-overflow:ellipsis;width:100%;white-space:nowrap}.tiled-gallery .tiled-gallery-item-small .tiled-gallery-caption{font-size:11px}.widget-gallery .tiled-gallery-unresized{visibility:hidden;height:0;overflow:hidden}.tiled-gallery .tiled-gallery-item img.grayscale{position:absolute;right:0;top:0}.tiled-gallery .tiled-gallery-item img.grayscale:hover{opacity:0}.tiled-gallery.type-circle .tiled-gallery-item img{border-radius:50%!important}.tiled-gallery.type-circle .tiled-gallery-caption{display:none;opacity:0}.jetpack-display-remote-posts{margin:5px 0 20px}.jetpack-display-remote-posts h4{font-size:90%;margin:5px 0;padding:0}.jetpack-display-remote-posts h4 a{text-decoration:none}.jetpack-display-remote-posts p{margin:0!important;padding:0;line-height:1.4em!important;font-size:90%}.jetpack-display-remote-posts img{max-width:100%}.widget-grofile h4{margin:1em 0 .5em}.widget-grofile ul.grofile-urls{margin-right:0;overflow:hidden}.widget-grofile ul.grofile-accounts li{list-style:none;display:inline}.widget-grofile ul.grofile-accounts li::before{content:""!important}.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite.png);background-repeat:no-repeat;width:16px;height:16px;float:right;margin-left:8px;margin-bottom:8px}.rtl .widget-grofile .grofile-accounts-logo{margin-right:8px;margin-left:0}.grofile-thumbnail{width:500px;max-width:100%}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite-2x.png);background-size:16px 784px}}div[class^=gr_custom_container]{border:1px solid gray;border-radius:10px;padding:10px 5px;background-color:#FFF;color:#000}div[class^=gr_custom_container] a{color:#000}h2[class^=gr_custom_header]{display:none}div[class^=gr_custom_each_container]{width:100%;clear:both;margin-bottom:10px;overflow:auto;padding-bottom:4px;border-bottom:1px solid #aaa}div[class^=gr_custom_book_container]{float:left;overflow:hidden;height:60px;margin-right:4px;width:39px}div[class^=gr_custom_author]{font-size:10px}div[class^=gr_custom_tags]{font-size:10px;color:gray}div[class^=gr_custom_rating]{display:none}.widget_wpcom_social_media_icons_widget ul{list-style-type:none;margin-right:0}.widget_wpcom_social_media_icons_widget li{border:0;display:inline;margin-left:.5em}.widget_wpcom_social_media_icons_widget li a{border:0;text-decoration:none}.widget_wpcom_social_media_icons_widget .genericon{font-family:Genericons}.widget_wpcom_social_media_icons_widget .screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.widget_wpcom_social_media_icons_widget .screen-reader-text:active,.widget_wpcom_social_media_icons_widget .screen-reader-text:focus,.widget_wpcom_social_media_icons_widget .screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-size:.875rem;font-weight:700;height:auto;right:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.widgets-grid-layout{width:100%}.widgets-grid-layout:after,.widgets-grid-layout:before{content:" ";display:table}.widgets-grid-layout:after{clear:both}.widget-grid-view-image{float:right;max-width:50%}.widget-grid-view-image a{display:block;margin:0 0 4px 2px}.widget-grid-view-image:image:nth-child(even){float:left}.widget-grid-view-image:nth-child(even) a{margin:0 2px 4px 0}.widgets-grid-layout .widget-grid-view-image img{max-width:100%;height:auto}.widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:0 0;clear:none;float:right;margin:0 0 -3px -5px;padding:0 0 6px 8px;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:0 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widgets-list-layout{padding:0;margin:0;list-style-type:none}.widgets-list-layout li:after,.widgets-list-layout li:before{content:"";display:table}.widgets-list-layout li:after{clear:both}.widgets-list-layout li{zoom:1;margin-bottom:1em;list-style-type:none!important}.widgets-list-layout .widgets-list-layout-blavatar{float:right;width:21.276596%;max-width:40px;height:auto}.widgets-list-layout-links{float:left;width:73.404255%}.widgets-list-layout span{opacity:.5}.widgets-list-layout span:hover{opacity:.8}
css/jetpack.css CHANGED
@@ -1,4 +1,4 @@
1
  /*!
2
  * Do not modify this file directly. It is concatenated from individual module CSS files.
3
  */
4
- .jp-carousel-wrap *{line-height:inherit}.jp-carousel-overlay{background:#000}div.jp-carousel-fadeaway{position:fixed;bottom:0;z-index:2147483647;width:100%;height:15px}.jp-carousel-next-button span,.jp-carousel-previous-button span{background:url(../modules/carousel/images/arrows.png) center center/200px 126px no-repeat}.jp-carousel-msg{font-family:"Open Sans",sans-serif;font-style:normal;display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:center;margin:25px 20px 0 2px;background-color:#fff;border-left:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.jp-carousel-next-button span,.jp-carousel-previous-button span{background-image:url(../modules/carousel/images/arrows-2x.png)}}.jp-carousel-wrap{font-family:"Helvetica Neue",sans-serif!important}.jp-carousel-info{position:absolute;bottom:0;text-align:left!important;-webkit-font-smoothing:subpixel-antialiased!important}.jp-carousel-info ::selection{background:#68c9e8;color:#fff}.jp-carousel-info ::-moz-selection{background:#68c9e8;color:#fff}.jp-carousel-photo-info{position:relative;left:25%;width:50%}.jp-carousel-transitions .jp-carousel-photo-info{transition:400ms ease-out}.jp-carousel-info h2{background:none!important;border:none!important;color:#999;display:block!important;font:400 13px/1.25em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;margin:7px 0 0!important;padding:10px 0 0!important;overflow:hidden;text-align:left;text-shadow:none!important;text-transform:none!important;-webkit-font-smoothing:subpixel-antialiased}.jp-carousel-next-button,.jp-carousel-previous-button{text-indent:-9999px;overflow:hidden;cursor:pointer}.jp-carousel-next-button span,.jp-carousel-previous-button span{position:absolute;top:0;bottom:0;width:82px;zoom:1;filter:alpha(opacity=20);opacity:.2}.jp-carousel-transitions .jp-carousel-next-button span,.jp-carousel-transitions .jp-carousel-previous-button span{transition:500ms opacity ease-out}.jp-carousel-next-button:hover span,.jp-carousel-previous-button:hover span{filter:alpha(opacity=60);opacity:.6}.jp-carousel-next-button span{background-position:-110px center;right:0}.jp-carousel-previous-button span{background-position:-10px center;left:0}.jp-carousel-buttons{margin:-18px -20px 15px;padding:8px 10px;border-bottom:1px solid #222;background:#222;text-align:center}div.jp-carousel-buttons a{border:none!important;color:#999;font:400 11px/1.2em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;padding:5px 2px 5px 0;text-decoration:none!important;text-shadow:none!important;vertical-align:middle;-webkit-font-smoothing:subpixel-antialiased}div.jp-carousel-buttons a:hover{color:#68c9e8;border:none!important}.jp-carousel-transitions div.jp-carousel-buttons a:hover{transition:none!important}.jp-carousel-next-button,.jp-carousel-previous-button,.jp-carousel-slide,.jp-carousel-slide img{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.jp-carousel-slide{position:fixed;width:0;bottom:0;background-color:#000;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}.jp-carousel-slide.selected{position:absolute!important;filter:alpha(opacity=100);opacity:1}.jp-carousel-slide{filter:alpha(opacity=25);opacity:.25}.jp-carousel-slide img{display:block;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;background:none!important;border:none!important;padding:0!important;box-shadow:0 2px 8px rgba(0,0,0,.1);zoom:1}.jp-carousel-transitions .jp-carousel-slide{transition:opacity 400ms linear}.jp-carousel-close-hint{color:#999;cursor:default;letter-spacing:0!important;padding:.35em 0 0;position:absolute;text-align:left;width:90%}.jp-carousel-transitions .jp-carousel-close-hint{transition:color 200ms linear}.jp-carousel-close-hint span{cursor:pointer;background-color:#000;background-color:rgba(0,0,0,.8);display:block;height:22px;font:400 24px/1 "Helvetica Neue",sans-serif!important;line-height:22px;margin:0 0 0 .4em;text-align:center;vertical-align:middle;width:22px;border-radius:4px}.jp-carousel-transitions .jp-carousel-close-hint span{transition:border-color 200ms linear}.jp-carousel-close-hint:hover{cursor:default;color:#fff}.jp-carousel-close-hint:hover span{border-color:#fff}a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background:url(../modules/carousel/images/carousel-sprite.png?5) 0 0/16px 200px no-repeat}div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{margin:0 14px 0 0!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#303030;padding-right:8px!important;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;margin:0 2px 0 -12px!important}div.jp-carousel-buttons a.jp-carousel-reblog,div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{background-position:6px -36px;padding-right:auto!important;padding-left:26px!important;color:#999}div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -156px;padding-left:19px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{cursor:default}div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:6px -56px;color:#68c9e8}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background-image:url(../modules/carousel/images/carousel-sprite-2x.png?5)}}div#carousel-reblog-box{background:#222;padding:3px 0 0;display:none;margin:5px auto 0;border-radius:2px;box-shadow:0 0 20px rgba(0,0,0,.9);height:74px;width:565px}#carousel-reblog-box textarea{background:#999;font:13px/1.4 "Helvetica Neue",sans-serif!important;color:#444;padding:3px 6px;width:370px;height:48px;float:left;margin:6px 9px 0;border:1px solid #666;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:2px}#carousel-reblog-box textarea:focus{background:#ccc;color:#222}#carousel-reblog-box label{color:#aaa;font-size:11px;padding-right:2px;padding-left:2px;display:inline;font-weight:400}#carousel-reblog-box select{width:110px;padding:0;font-size:12px;font-family:"Helvetica Neue",sans-serif!important;background:#333;color:#eee;border:1px solid #444;margin-top:5px}#carousel-reblog-box .submit,#wrapper #carousel-reblog-box p.response{float:left;width:154px;padding-top:0;padding-left:1px;overflow:hidden;height:34px;margin:3px 0 0 2px!important}#wrapper #carousel-reblog-box p.response{font-size:13px;clear:none;padding-left:2px;height:34px;color:#aaa}#carousel-reblog-box input#carousel-reblog-submit,#jp-carousel-comment-form-button-submit{font:13px/24px "Helvetica Neue",sans-serif!important;margin-top:8px;padding:0 10px!important;border-radius:1em;height:24px;color:#333;cursor:pointer;font-weight:400;background:#aaa;border:1px solid #444}#carousel-reblog-box input#carousel-reblog-submit:hover,#jp-carousel-comment-form-button-submit:hover{background:#ccc}#carousel-reblog-box .canceltext{color:#aaa;font-size:11px;line-height:24px}#carousel-reblog-box .canceltext a{color:#fff}.jp-carousel-titleanddesc{border-top:1px solid #222;color:#999;font-size:15px;padding-top:24px;margin-bottom:20px;font-weight:400}.jp-carousel-titleanddesc-title{font:300 1.5em/1.1 "Helvetica Neue",sans-serif!important;text-transform:none!important;color:#fff;margin:0 0 15px;padding:0}.jp-carousel-titleanddesc-desc p{color:#999;line-height:1.4;margin-bottom:.75em}.jp-carousel-comments p a,.jp-carousel-info h2 a,.jp-carousel-titleanddesc p a{color:#fff!important;border:none!important;text-decoration:underline!important;font-weight:400!important;font-style:normal!important}.jp-carousel-titleanddesc p b,.jp-carousel-titleanddesc p strong{font-weight:700;color:#999}.jp-carousel-titleanddesc p em,.jp-carousel-titleanddesc p i{font-style:italic;color:#999}.jp-carousel-comments p a:hover,.jp-carousel-info h2 a:hover,.jp-carousel-titleanddesc p a:hover{color:#68c9e8!important}.jp-carousel-titleanddesc p:empty{display:none}.jp-carousel-left-column-wrapper h1:after,.jp-carousel-left-column-wrapper h1:before,.jp-carousel-photo-info h1:after,.jp-carousel-photo-info h1:before{content:none!important}.jp-carousel-image-meta{background:#111;border:1px solid #222;color:#fff;font:12px/1.4 "Helvetica Neue",sans-serif!important;overflow:hidden;padding:18px 20px;width:209px!important}.jp-carousel-image-meta h5,.jp-carousel-image-meta li{font-family:"Helvetica Neue",sans-serif!important;position:inherit!important;top:auto!important;right:auto!important;left:auto!important;bottom:auto!important;background:none!important;border:none!important;font-weight:400!important;line-height:1.3em!important}.jp-carousel-image-meta ul{margin:0!important;padding:0!important;list-style:none!important}.jp-carousel-image-meta li{width:48%!important;float:left!important;margin:0 2% 15px 0!important;color:#fff!important;font-size:13px!important}.jp-carousel-image-meta h5{color:#999!important;text-transform:uppercase!important;font-size:10px!important;margin:0 0 2px!important;letter-spacing:.1em!important}a.jp-carousel-image-download{padding-left:23px;display:inline-block;clear:both;color:#999;line-height:1;font-weight:400;font-size:13px;text-decoration:none;background-position:0 -82px}a.jp-carousel-image-download span.photo-size{font-size:11px;border-radius:1em;margin-left:2px;display:inline-block}a.jp-carousel-image-download span.photo-size-times{padding:0 1px 0 2px}a.jp-carousel-image-download:hover{background-position:0 -122px;color:#68c9e8;border:none!important}.jp-carousel-image-map{position:relative;margin:-20px -20px 20px;border-bottom:1px solid rgba(255,255,255,.17);height:154px}.jp-carousel-image-map img.gmap-main{border-top-left-radius:6px;border-right:1px solid rgba(255,255,255,.17)}.jp-carousel-image-map div.gmap-topright{width:94px;height:154px;position:absolute;top:0;right:0}.jp-carousel-image-map div.imgclip{overflow:hidden;border-top-right-radius:6px}.jp-carousel-image-map div.gmap-topright img{margin-left:-40px}.jp-carousel-image-map img.gmap-bottomright{position:absolute;top:96px;right:0}.jp-carousel-comments{font:15px/1.7 "Helvetica Neue",sans-serif!important;font-weight:400;background:none}.jp-carousel-comments p a:active,.jp-carousel-comments p a:focus,.jp-carousel-comments p a:hover{color:#68c9e8!important}.jp-carousel-comment{background:none;color:#999;margin-bottom:20px;clear:left;overflow:auto;width:100%}.jp-carousel-comment p{color:#999!important}.jp-carousel-comment .comment-author{font-size:13px;font-weight:400;padding:0;width:auto;display:inline;float:none;border:none;margin:0}.jp-carousel-comment .comment-author a{color:#fff}.jp-carousel-comment .comment-gravatar{float:left}.jp-carousel-comment .comment-content{border:none;margin-left:85px;padding:0}.jp-carousel-comment .avatar{margin:0 20px 0 0;border-radius:4px;border:none!important;padding:0!important;background-color:transparent!important}.jp-carousel-comment .comment-date{color:#999;margin-top:4px;font-size:11px;display:inline;float:right}#jp-carousel-comment-form{margin:0 0 10px!important;float:left;width:100%}textarea#jp-carousel-comment-form-comment-field{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:15px/1.4 "Helvetica Neue",sans-serif!important;width:100%;padding:10px 10px 5px;margin:0;float:none;height:147px;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:3px;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box}textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#555}textarea#jp-carousel-comment-form-comment-field:focus{background:#ccc;color:#222}textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#aaa}#jp-carousel-comment-form-spinner{color:#fff;margin:22px 0 0 10px;display:block;width:20px;height:20px;float:left}#jp-carousel-comment-form-submit-and-info-wrapper{display:none;overflow:hidden;width:100%}#jp-carousel-comment-form-commenting-as input{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:13px/1.4 "Helvetica Neue",sans-serif!important;padding:3px 6px;float:left;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:2px;width:285px}#jp-carousel-comment-form-commenting-as input:focus{background:#ccc;color:#222}#jp-carousel-comment-form-commenting-as p{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:22px 0 0;float:left}#jp-carousel-comment-form-commenting-as fieldset{float:left;border:none;margin:20px 0 0;padding:0;clear:both}#jp-carousel-comment-form-commenting-as label{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:0 20px 3px 0;float:left;width:100px}#jp-carousel-comment-form-button-submit{margin-top:20px;float:right}#jp-carousel-comment-form-container,#js-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-post-results{display:none;overflow:auto;width:100%}#jp-carousel-comment-post-results span{display:block;text-align:center;margin-top:20px;width:100%;overflow:auto;padding:1em 0;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(0,0,0,.7);border-radius:2px;font:13px/1.4 "Helvetica Neue",sans-serif!important;border:1px solid rgba(255,255,255,.17);box-shadow:inset 0 0 5px 5px rgba(0,0,0,1)}.jp-carousel-comment-post-error{color:#DF4926}#jp-carousel-comments-closed{display:none;color:#999}#jp-carousel-comments-loading{font:400 15px/1.7 "Helvetica Neue",sans-serif!important;display:none;color:#999;text-align:left;margin-bottom:20px}.jp-carousel-light .jp-carousel-overlay{background:#fff}.jp-carousel-light .jp-carousel-next-button:hover span,.jp-carousel-light .jp-carousel-previous-button:hover span{opacity:.8}.jp-carousel-light .jp-carousel-close-hint:hover,.jp-carousel-light .jp-carousel-titleanddesc div{color:#000!important}.jp-carousel-light .jp-carousel-comment .comment-author a,.jp-carousel-light .jp-carousel-comments p a,.jp-carousel-light .jp-carousel-info h2 a,.jp-carousel-light .jp-carousel-titleanddesc p a{color:#1e8cbe!important}.jp-carousel-light .jp-carousel-comment .comment-author a:hover,.jp-carousel-light .jp-carousel-comments p a:hover,.jp-carousel-light .jp-carousel-info h2 a:hover,.jp-carousel-light .jp-carousel-titleanddesc p a:hover{color:#f1831e!important}.jp-carousel-light .jp-carousel-comment,.jp-carousel-light .jp-carousel-comment p,.jp-carousel-light .jp-carousel-info h2,.jp-carousel-light .jp-carousel-titleanddesc,.jp-carousel-light .jp-carousel-titleanddesc p,.jp-carousel-light .jp-carousel-titleanddesc p b,.jp-carousel-light .jp-carousel-titleanddesc p em,.jp-carousel-light .jp-carousel-titleanddesc p i,.jp-carousel-light .jp-carousel-titleanddesc p strong,.jp-carousel-light div.jp-carousel-buttons a{color:#666}.jp-carousel-light .jp-carousel-buttons{border-bottom-color:#f0f0f0;background:#f5f5f5}.jp-carousel-light div.jp-carousel-buttons a:hover{text-decoration:none;color:#f1831e}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:4px -56px;padding-left:24px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#2ea2cc;color:#fff}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -176px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-position:5px -36px}.jp-carousel-light div#carousel-reblog-box{background:#eee;box-shadow:0 2px 10px rgba(0,0,0,.1);border:1px solid #ddd}.jp-carousel-light #carousel-reblog-box textarea{color:#666;border:1px solid #cfcfcf;background:#fff}.jp-carousel-light #carousel-reblog-box .canceltext{color:#888}.jp-carousel-light #carousel-reblog-box .canceltext a{color:#666}.jp-carousel-light #carousel-reblog-box select{background:#eee;color:#333;border:1px solid #aaa}#jp-carousel-comment-form-button-submit,.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit{color:#333;background:#fff;border:1px solid #aaa}.jp-carousel-light .jp-carousel-image-meta{background:#fafafa;border:1px solid #eee;border-top-color:#f5f5f5;border-left-color:#f5f5f5;color:#333}.jp-carousel-light .jp-carousel-image-meta li{color:#000!important}.jp-carousel-light .jp-carousel-close-hint{color:#ccc}.jp-carousel-light .jp-carousel-close-hint span{background-color:#fff;border-color:#ccc}.jp-carousel-light #jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#aaa}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus{color:#333}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#ddd}.jp-carousel-light a.jp-carousel-image-download{background-position:0 -122px}.jp-carousel-light a.jp-carousel-image-download:hover{background-position:0 -122px;color:#f1831e}.jp-carousel-light textarea#jp-carousel-comment-form-comment-field{background:#fbfbfb;color:#333;border:1px solid #dfdfdf;box-shadow:inset 2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input{background:#fbfbfb;border:1px solid #dfdfdf;color:#333;box-shadow:inset 2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus{background:#fbfbfb;color:#333}.jp-carousel-light #jp-carousel-comment-post-results span{background:#f7f7f7;border:1px solid #dfdfdf;box-shadow:inset 0 0 5px rgba(0,0,0,.05)}.jp-carousel-light .jp-carousel-slide{background-color:#fff}.jp-carousel-light .jp-carousel-titleanddesc{border-top:1px solid #eee}@media only screen and (max-width:760px){.jp-carousel-info{margin:0 10px!important}.jp-carousel-buttons,.jp-carousel-next-button,.jp-carousel-previous-button{display:none!important}.jp-carousel-image-meta{float:none!important;width:100%!important;-moz-box-sizing:border-box;box-sizing:border-box}.jp-carousel-close-hint{font-weight:800!important;font-size:26px!important;position:fixed!important;top:-10px}.jp-carousel-slide img{filter:alpha(opacity=100);opacity:1}.jp-carousel-wrap{background-color:#000}.jp-carousel-fadeaway{display:none}#jp-carousel-comment-form-container{display:none!important}.jp-carousel-titleanddesc{padding-top:0!important;border:none!important}.jp-carousel-titleanddesc-title{font-size:1em!important}.jp-carousel-left-column-wrapper{padding:0;width:100%!important}.jp-carousel-photo-info{left:0!important;width:100%!important}}.contact-form .clear-form{clear:both}.contact-form input[type=email],.contact-form input[type=text]{width:300px;max-width:98%;margin-bottom:13px}.contact-form select{margin-bottom:13px}.contact-form textarea{height:200px;width:80%;float:none;margin-bottom:13px}.contact-form input[type=checkbox],.contact-form input[type=radio]{float:none;margin-bottom:13px}.contact-form label{margin-bottom:3px;float:none;font-weight:700;display:block}.contact-form label.checkbox,.contact-form label.radio{margin-bottom:3px;float:none;font-weight:700;display:inline-block}.contact-form label span{color:#AAA;margin-left:4px;font-weight:400}.contact-form-submission{margin-bottom:4em;padding:1.5em 1em}.contact-form-submission p{margin:0 auto}.form-errors .form-error-message{color:red}.textwidget .contact-form input[type=email],.textwidget .contact-form input[type=text],.textwidget .contact-form textarea{width:250px;max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box}#jetpack-check-feedback-spam{margin:1px 8px 0 0}.jetpack-check-feedback-spam-spinner{display:inline-block;margin-top:7px}.infinite-loader{color:#000;display:block;height:28px;text-indent:-9999px}#infinite-handle span{background:#333;border-radius:1px;color:#eee;cursor:pointer;font-size:13px;padding:6px 16px}#infinite-handle span button,#infinite-handle span button:focus,#infinite-handle span button:hover{display:inline;position:static;padding:0;margin:0;border:none;line-height:inherit;background:0 0;color:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}#infinite-handle span button::-moz-focus-inner{margin:0;padding:0;border:none}@media (max-width:800px){#infinite-handle span:before{display:none}#infinite-handle span{display:block}}#infinite-footer{position:fixed;bottom:-50px;left:0;width:100%}#infinite-footer a{text-decoration:none}#infinite-footer .blog-credits a:hover,#infinite-footer .blog-info a:hover{color:#444;text-decoration:underline}#infinite-footer .container{background:rgba(255,255,255,.8);border-color:#ccc;border-color:rgba(0,0,0,.1);border-style:solid;border-width:1px 0 0;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 auto;overflow:hidden;padding:1px 20px;width:780px}#infinite-footer .blog-credits,#infinite-footer .blog-info{-moz-box-sizing:border-box;box-sizing:border-box;line-height:25px}#infinite-footer .blog-info{float:left;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:40%}#infinite-footer .blog-credits{font-weight:400;float:right;width:60%}#infinite-footer .blog-info a{color:#111;font-size:14px;font-weight:700}#infinite-footer .blog-credits{color:#888;font-size:12px;text-align:right}#infinite-footer .blog-credits a{color:#666}.infinity-end.neverending #infinite-footer{display:none}@media (max-width:640px){#infinite-footer .container{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#infinite-footer .blog-info{width:30%}#infinite-footer .blog-credits{width:70%}#infinite-footer .blog-credits,#infinite-footer .blog-info a{font-size:10px}}@media (max-width:640px){#infinite-footer{position:static}}#wpadminbar li#wp-admin-bar-admin-bar-likes-widget{width:61px;overflow:hidden}#wpadminbar iframe.admin-bar-likes-widget{width:61px;height:28px;min-height:28px;border-width:0;position:absolute;top:0}div.jetpack-likes-widget-wrapper{width:100%;min-height:50px;position:relative}div.jetpack-likes-widget-wrapper .sd-link-color{font-size:12px}div.jetpack-likes-widget-wrapper.slim-likes-widget{width:1px;min-height:0}#likes-other-gravatars{display:none;position:absolute;padding:10px 10px 12px;background-color:#2e4453;border-width:0;box-shadow:0 0 10px #2e4453;box-shadow:0 0 10px rgba(46,68,83,.6);min-width:130px;z-index:1000}#likes-other-gravatars *{line-height:normal}#likes-other-gravatars .likes-text{color:#fff;font-size:12px;padding-bottom:8px}#likes-other-gravatars li,#likes-other-gravatars ul{margin:0;padding:0;text-indent:0;list-style-type:none}#likes-other-gravatars li::before{content:""}#likes-other-gravatars ul.wpl-avatars{overflow:auto;display:block;max-height:190px}#likes-other-gravatars ul.wpl-avatars li{width:32px;height:32px;float:left;margin:0 5px 5px 0}#likes-other-gravatars ul.wpl-avatars li a{margin:0 2px 0 0;border-bottom:none!important;display:block}#likes-other-gravatars ul.wpl-avatars li a img{background:0 0;border:none;margin:0!important;padding:0!important;position:static}div.sd-box{border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.13)}.comment-likes-widget,.entry-content .post-likes-widget,.post-likes-widget{margin:0;border-width:0;display:block}.post-likes-widget-placeholder{margin:0;border-width:0;position:relative}.post-likes-widget-placeholder .button{display:none}.post-likes-widget-placeholder .loading{color:#999;font-size:12px}.slim-likes-widget .post-likes-widget{width:auto;float:none}div.sharedaddy.sd-like-enabled .sd-like h3{display:none}div.sharedaddy.sd-like-enabled .sd-like .post-likes-widget{width:100%;float:none;position:absolute;top:0}.comment-likes-widget{width:100%}.pd-rating{display:block!important}.sd-gplus .sd-title{display:none}#jp-relatedposts{display:none;padding-top:1em;margin:1em 0;position:relative;clear:both}.jp-relatedposts:after{content:'';display:block;clear:both}#jp-relatedposts h3.jp-relatedposts-headline{margin:0 0 1em;display:inline-block;float:left;font-size:9pt;font-weight:700;font-family:inherit}#jp-relatedposts h3.jp-relatedposts-headline em:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}#jp-relatedposts h3.jp-relatedposts-headline em{font-style:normal;font-weight:700}#jp-relatedposts .jp-relatedposts-items{clear:left}#jp-relatedposts .jp-relatedposts-items-visual{margin-right:-20px}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{float:left;width:33%;margin:0 0 1em;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post{padding-right:20px;filter:alpha(opacity=80);-moz-opacity:.8;opacity:.8}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n+4),#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post:nth-child(3n+4){clear:both}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover{filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items p,#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-size:14px;line-height:20px;margin:0}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs{position:relative}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay{position:absolute;top:0;bottom:0;left:0;right:0;display:block}#jp-relatedposts .jp-relatedposts-items p{margin-bottom:0}#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{text-transform:none;margin:0;font-family:inherit;display:block;max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a{font-size:inherit;font-weight:400;text-decoration:none;filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span{display:block;max-width:90%;overflow:hidden;text-overflow:ellipsis}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post span{max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{opacity:.6}#jp-relatedposts .jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt,.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{display:none}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt{overflow:hidden}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs span{margin-bottom:1em}@media only screen and (max-width:640px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:50%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n){clear:left}#jp-relatedposts .jp-relatedposts-items-visual{margin-right:20px}}@media only screen and (max-width:320px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:100%;clear:both;margin:0 0 1em}}#jp-post-flair{padding-top:.5em}#content div.sharedaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{margin:0 0 1em;display:inline-block;line-height:1.2;font-size:9pt;font-weight:700}div.sharedaddy h3.sd-title:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;margin-bottom:1em}body.highlander-light h3.sd-title:before{border-top:1px solid rgba(0,0,0,.2)}body.highlander-dark h3.sd-title:before{border-top:1px solid rgba(255,255,255,.4)}.sd-content ul{padding:0!important;margin:0 0 .7em!important;list-style:none!important}.sd-content ul li{display:inline-block}.sd-block.sd-gplus{margin:0 0 .5em}.sd-gplus .sd-content{font-size:12px}#sharing_email .sharing_send,.sd-content ul li .option a.share-ustom,.sd-content ul li a.sd-button,.sd-content ul li.advanced a.share-more,.sd-content ul li.preview-item div.option.option-smart-off a,.sd-social-icon .sd-content ul li a.sd-button,.sd-social-icon-text .sd-content ul li a.sd-button,.sd-social-official .sd-content>ul>li .digg_button >a,.sd-social-official .sd-content>ul>li>a.sd-button,.sd-social-text .sd-content ul li a.sd-button{text-decoration:none!important;display:inline-block;margin:0 5px 5px 0;font-size:12px;font-family:"Open Sans",sans-serif;font-weight:400;border-radius:3px;color:#777!important;background:#f8f8f8;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,.08);text-shadow:none;line-height:23px;padding:1px 8px 0 5px}.sd-content ul li .option a.share-ustom span,.sd-content ul li a.sd-button>span,.sd-content ul li.advanced a.share-more span,.sd-content ul li.preview-item div.option.option-smart-off a span,.sd-social-icon-text .sd-content ul li a.sd-button>span,.sd-social-official .sd-content>ul>li .digg_button >a span,.sd-social-official .sd-content>ul>li>a.sd-button span,.sd-social-text .sd-content ul li a.sd-button span{line-height:23px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button,.sd-social-official .sd-content>ul>li .digg_button>a,.sd-social-official .sd-content>ul>li>a.sd-button{line-height:17px;box-shadow:none;vertical-align:top}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,.sd-social-official .sd-content>ul>li .digg_button>a:before,.sd-social-official .sd-content>ul>li>a.sd-button:before{margin-bottom:-1px;top:0}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon .sd-content ul li a.sd-button:hover,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:hover,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li .digg_button>a:hover,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-official .sd-content>ul>li>a.sd-button:hover,.sd-social-text .sd-content ul li a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:hover{color:#555;background:#fafafa;border:1px solid #999}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.16)}.sd-content ul li a.sd-button:before{display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font:400 16px/1 Genericons;vertical-align:top;position:relative;top:3px;text-align:center}.sd-content ul li{margin:0!important;padding:0}.sd-content ul li.preview-item a.sd-button span,.sd-social-icon-text .sd-content ul li a span,.sd-social-official .sd-content ul li a.sd-button span{margin-left:3px}.sd-content ul li.preview-item.no-icon a.sd-button span{margin-left:0}.sd-content ul li.no-icon a:before,.sd-social-text .sd-content ul li a:before{display:none}body .sd-content ul li.share-custom.no-icon a span,body .sd-social-text .sd-content ul li.share-custom a span{background-image:none;background-position:-500px -500px!important;background-repeat:no-repeat!important;padding-left:0;height:0;line-height:inherit}.sd-social-icon .sd-content ul li a.share-more{position:relative;top:2px}.sd-social-icon .sd-content ul li a.share-more span{margin-left:3px}.sd-content ul li.share-print div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-print a:before,.sd-social-icon-text .sd-content li.share-print a:before,.sd-social-official .sd-content li.share-print a:before,.sd-social-text .sd-content ul li.share-print a:before{content:'\f469'}.sd-content ul li.share-email div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-email a:before,.sd-social-icon-text .sd-content li.share-email a:before,.sd-social-official .sd-content li.share-email a:before,.sd-social-text .sd-content ul li.share-email a:before{content:'\f410'}.sd-content ul li.share-linkedin div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-linkedin a:before,.sd-social-icon-text .sd-content li.share-linkedin a:before,.sd-social-text .sd-content ul li.share-linkedin a:before{content:'\f207'}.sd-content ul li.share-twitter div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-twitter a:before,.sd-social-icon-text .sd-content li.share-twitter a:before,.sd-social-text .sd-content ul li.share-twitter a:before{content:'\f202'}.sd-content ul li.share-reddit div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-reddit a:before,.sd-social-icon-text .sd-content li.share-reddit a:before,.sd-social-text .sd-content ul li.share-reddit a:before{content:'\f222'}.sd-content ul li.share-tumblr div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-tumblr a:before,.sd-social-icon-text .sd-content li.share-tumblr a:before,.sd-social-text .sd-content ul li.share-tumblr a:before{content:'\f214'}.sd-content ul li.share-pocket div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pocket a:before,.sd-social-icon-text .sd-content li.share-pocket a:before,.sd-social-text .sd-content ul li.share-pocket a:before{content:'\f224'}.sd-content ul li.share-skype div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-skype a:before,.sd-social-icon-text .sd-content li.share-skype a:before,.sd-social-text .sd-content ul li.share-skype a:before{content:'\f220'}.sd-content ul li.share-pinterest div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pinterest a:before,.sd-social-icon-text .sd-content li.share-pinterest a:before,.sd-social-text .sd-content ul li.share-pinterest a:before{content:'\f209'}.sd-content ul li.share-google-plus-1 div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-google-plus-1 a:before,.sd-social-icon-text .sd-content li.share-google-plus-1 a:before,.sd-social-text .sd-content ul li.share-google-plus-1 a:before{content:'\f218'}.sd-content ul li.share-facebook div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-facebook a:before,.sd-social-icon-text .sd-content li.share-facebook a:before,.sd-social-text .sd-content ul li.share-facebook a:before{content:'\f204'}.sd-content ul li.share-press-this div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-press-this a:before,.sd-social-icon-text .sd-content li.share-press-this a:before,.sd-social-official .sd-content li.share-press-this a:before,.sd-social-text .sd-content ul li.share-press-this a:before{content:'\f205'}.sd-social-official .sd-content li.share-press-this a:before{color:#2ba1cb}.sd-content ul li.advanced a.share-more:before,.sd-social-icon .sd-content ul a.share-more:before,.sd-social-icon-text .sd-content a.share-more:before,.sd-social-official .sd-content a.share-more:before,.sd-social-text .sd-content ul a.share-more:before{content:'\f415'}.sd-social-official .sd-content a.share-more:before{color:#2ba1cb}.sd-social .sd-button .share-count{background:#2ea2cc;color:#fff;border-radius:10px;display:inline-block;text-align:center;font-size:10px;padding:1px 3px;line-height:1}.sd-social-official .sd-content ul,.sd-social-official .sd-content ul li{line-height:25px!important}.sd-social-official .sd-content>ul>li>a.sd-button span{line-height:1}.sd-social-official .sd-content ul:after{content:".";display:block;height:0;clear:both;visibility:hidden}.sd-social-official .sd-content li.share-press-this a{margin:0 0 5px}.sd-social-official .sd-content ul>li{display:block;float:left;margin:0 10px 5px 0!important;height:25px}.sd-social-official .fb-share-button>span{vertical-align:top!important}.sd-social-official .sd-content .pocket_button iframe{width:98px}.sd-social-official .sd-content .skypeShare{width:55px}.googleplus1_button .g-plus{vertical-align:top!important}.reddit_button iframe{margin-top:1px}.googleplus1_button iframe,.linkedin_button>span,.pinterest_button,.pocket_button iframe,.twitter_button{margin:0!important}body .sd-social-official li a.share-more,body .sd-social-official li.share-custom a,body .sd-social-official li.share-digg a,body .sd-social-official li.share-email a,body .sd-social-official li.share-press-this a,body .sd-social-official li.share-print{position:relative;top:0}body .sd-social-icon .sd-content li.share-custom>a{padding:2px 3px 0;position:relative;top:4px}body .sd-content ul li.share-custom a.share-icon span,body .sd-social-icon .sd-content li.share-custom a span,body .sd-social-icon-text .sd-content li.share-custom a span,body .sd-social-official .sd-content li.share-custom a span,body .sd-social-text .sd-content li.share-custom a span{background-size:16px 16px;background-repeat:no-repeat;margin-left:0;padding:0 0 0 19px;display:inline-block;height:16px;line-height:16px}body .sd-social-icon .sd-content li.share-custom a span{width:0}body .sd-social-icon .sd-content li.share-custom a span{padding-left:16px!important}.sharing-hidden .inner{position:absolute;z-index:2;border:1px solid #ccc;padding:10px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);border-radius:2px;margin-top:5px;max-width:400px}.sharing-hidden .inner ul{margin:0!important}.sd-social-official .sd-content .sharing-hidden ul>li.share-end{clear:both;margin:0;height:0}.sharing-hidden .inner:after,.sharing-hidden .inner:before{position:absolute;z-index:1;top:-8px;left:20px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:8px solid #ccc;content:"";display:block}.sharing-hidden .inner:after{z-index:2;top:-7px;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:8px solid #fff}.sharing-hidden ul{margin:0}.sd-social-icon .sd-content ul li[class*=share-] a,.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a{border-radius:50%;-webkit-border-radius:50%;border:0;box-shadow:none;padding:8px;position:relative;top:-2px;line-height:1;width:auto;height:auto;margin-bottom:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button>span,.sd-social-icon .sd-content ul li[class*=share-] div.option a span{line-height:1}.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a:hover{border:none;opacity:.6}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button:before{top:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button.share-custom{padding:8px 8px 6px;top:5px}.sd-social-icon .sd-content ul li a.sd-button.share-more{margin-left:10px}.sd-social-icon .sd-content ul li:first-child a.sd-button.share-more{margin-left:0}.sd-social-icon .sd-button span.share-count{position:absolute;bottom:0;right:0;border-radius:0;background:#555;font-size:9px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button{background:#e9e9e9;margin-top:2px;text-indent:0}.sd-social-icon .sd-content ul li[class*=share-].share-tumblr a.sd-button{background:#2c4762;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-facebook a.sd-button{background:#3b5998;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-twitter a.sd-button{background:#00acee;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pinterest a.sd-button{background:#ca1f27;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-digg a.sd-button{color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-press-this a.sd-button{background:#1e8cbe;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-linkedin a.sd-button{background:#0077b5;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-google-plus-1 a.sd-button{background:#dd4b39;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pocket a.sd-button{background:#ee4056;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-skype a.sd-button{background:#00AFF0;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-reddit a.sd-button{background:#cee3f8;color:#555!important}.sharing-screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.sharing-screen-reader-text:active,.sharing-screen-reader-text:focus,.sharing-screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}#sharing_email{width:342px;position:absolute;z-index:1001;border:1px solid #ccc;padding:15px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);text-align:left}div.sharedaddy.sharedaddy-dark #sharing_email{border-color:#fff}#sharing_email .errors{color:#fff;background-color:#771a09;font-size:12px;padding:5px 8px;line-height:1;margin:10px 0 0}#sharing_email label{font-size:12px;color:#333;font-weight:700;display:block;padding:0 0 4px;text-align:left;text-shadow:none}#sharing_email form{margin:0}#sharing_email input[type=email],#sharing_email input[type=text]{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid #ccc;margin-bottom:1em;background:#fff;font-size:12px;color:#333;max-width:none;padding:1px 3px}#jetpack-source_f_name{display:none!important;position:absolute!important;left:-9000px}#sharing_email .sharing_cancel{padding:0 0 0 1em;font-size:12px;text-shadow:none}#sharing_email .recaptcha{width:312px;height:123px;margin:0 0 1em}.slideshow-window{background-color:#222;border:20px solid #222;border-radius:10px;height:0;margin-bottom:20px;overflow:hidden;padding-top:30px!important;padding-bottom:56.25%!important;position:relative;z-index:1}.slideshow-window.slideshow-white{background-color:#fff;border-color:#fff}.slideshow-window,.slideshow-window *{-moz-box-sizing:content-box;box-sizing:content-box}.slideshow-loading{height:100%;text-align:center;margin:auto}body div.slideshow-window * img{background-color:transparent!important;background-image:none!important;border-width:0!important;display:block;margin:0 auto;max-width:100%;max-height:100%;padding:0!important;position:relative;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);top:50%}.slideshow-loading img{vertical-align:middle}.slideshow-slide{display:none;height:100%!important;left:0;margin:auto;position:absolute;text-align:center;top:0;width:100%!important}.slideshow-slide img{vertical-align:middle}.slideshow-line-height-hack{overflow:hidden;width:0;font-size:0}.slideshow-slide-caption{font-size:13px;font-family:"Helvetica Neue",sans-serif;color:#f7f7f7;text-shadow:#222 1px 1px 2px;line-height:25px;height:25px;position:absolute;bottom:5px;left:0;z-index:100;width:100%;text-align:center}.slideshow-controls{z-index:1000;position:absolute;bottom:30px;margin:auto;text-align:center;width:100%;-ms-filter:"alpha(Opacity=50)";opacity:.5;direction:ltr;transition:300ms opacity ease-out}.slideshow-window:hover .slideshow-controls{-ms-filter:"alpha(Opacity=100)";opacity:1}body div div.slideshow-controls a,body div div.slideshow-controls a:hover{border:2px solid rgba(255,255,255,.1)!important;background-color:#000!important;background-color:rgba(0,0,0,.6)!important;background-image:url(../modules/shortcodes/img/slideshow-controls.png)!important;background-repeat:no-repeat;background-size:142px 16px!important;background-position:-34px 8px!important;color:#222!important;margin:0 5px!important;padding:0!important;display:inline-block!important;zoom:1;height:32px!important;width:32px!important;line-height:32px!important;text-align:center!important;-khtml-border-radius:10em!important;border-radius:10em!important;transition:300ms border-color ease-out}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body div div.slideshow-controls a,body div div.slideshow-controls a:hover{background-image:url(../modules/shortcodes/img/slideshow-controls-2x.png)!important}}body div div.slideshow-controls a:hover{border-color:rgba(255,255,255,1)!important}body div div.slideshow-controls a:first-child{background-position:-76px 8px!important}body div div.slideshow-controls a:last-child{background-position:-117px 8px!important}body div div.slideshow-controls a.running,body div div.slideshow-controls a:nth-child(2){background-position:-34px 8px!important}body div div.slideshow-controls a.paused{background-position:9px 8px!important}.slideshow-controls a img{border:50px dotted #f0f}body.presentation-wrapper-fullscreen-parent,html.presentation-wrapper-fullscreen-parent{overflow:hidden!important}.presentation-wrapper-fullscreen-parent #wpadminbar{display:none}.presentation-wrapper-fullscreen,.presentation-wrapper-fullscreen-parent{min-width:100%!important;min-height:100%!important;position:absolute!important;top:0!important;right:0!important;bottom:0!important;left:0!important;margin:0!important;padding:0!important;z-index:10000!important}.presentation-wrapper-fullscreen{background-color:gray;border:none!important}.presentation-wrapper-fullscreen .nav-arrow-left,.presentation-wrapper-fullscreen .nav-arrow-right{z-index:20001}.presentation-wrapper-fullscreen .nav-fullscreen-button{z-index:20002}.presentation-wrapper{margin:20px auto;border:1px solid #e5e5e5;overflow:hidden;line-height:normal}.presentation{position:relative;margin:0;overflow:hidden;outline:0}.presentation,.presentation .step{background-repeat:no-repeat;background-position:center;background-size:100% 100%}.presentation .step.fade:not(.active){opacity:0}.presentation .slide-content{padding:30px}.presentation .nav-arrow-left,.presentation .nav-arrow-right,.presentation .nav-fullscreen-button{position:absolute;width:34px;background-repeat:no-repeat;z-index:2;opacity:0;transition:opacity .25s}.presentation .nav-arrow-left,.presentation .nav-arrow-right{height:100%;background-image:url(../modules/shortcodes/images/slide-nav.png);background-size:450% 61px}.presentation .nav-arrow-left{left:0;background-position:4px 50%}.presentation .nav-arrow-right{right:0;background-position:-120px 50%}.presentation .nav-fullscreen-button{width:32px;height:32px;margin:4px;bottom:0;right:0;z-index:3;background-image:url(../modules/shortcodes/images/expand.png);background-size:100% 100%}.presentation:hover .nav-arrow-left,.presentation:hover .nav-arrow-right{opacity:1}.presentation:hover .nav-fullscreen-button{opacity:.8}.presentation-wrapper-fullscreen .nav-fullscreen-button{background-image:url(../modules/shortcodes/images/collapse.png)}.presentation .autoplay-overlay{height:15%;width:80%;margin:30% 10%;position:relative;z-index:100;display:table;border-radius:50px;background-color:#e5e5e5;background-color:rgba(0,0,0,.75);transition:opacity .5s}.presentation .autoplay-overlay .overlay-msg{position:relative;display:table-cell;text-align:center;vertical-align:middle;color:#fff}.presentation .will-fade{opacity:0}.presentation .do-fade{opacity:1;transition:opacity .5s}#subscribe-email input{width:95%}.comment-subscription-form .subscribe-label{display:inline!important}.jetpack-video-wrapper{margin-bottom:1.6em}.jetpack-video-wrapper>.wp-video,.jetpack-video-wrapper>embed,.jetpack-video-wrapper>iframe,.jetpack-video-wrapper>object{margin-bottom:0}.jetpack-social-navigation ul{display:block;margin:0 0 1.5em;padding:0}.jetpack-social-navigation li{display:inline-block;margin:0;line-height:1}.jetpack-social-navigation a{border:0;height:1em;text-decoration:none;width:1em}.jetpack-social-navigation a:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Genericons;font-size:1em;font-style:normal;font-weight:400;height:1em;line-height:1;speak:none;text-decoration:inherit;vertical-align:top;width:1em;content:"\f415"}.jetpack-social-navigation a[href*="codepen.io"]:before{content:"\f216"}.jetpack-social-navigation a[href*="digg.com"]:before{content:"\f221"}.jetpack-social-navigation a[href*="dribbble.com"]:before{content:"\f201"}.jetpack-social-navigation a[href*="dropbox.com"]:before{content:"\f225"}.jetpack-social-navigation a[href*="mailto:"]:before{content:"\f410"}.jetpack-social-navigation a[href*="facebook.com"]:before{content:"\f203"}.jetpack-social-navigation a[href*="flickr.com"]:before{content:"\f211"}.jetpack-social-navigation a[href*="foursquare.com"]:before{content:"\f226"}.jetpack-social-navigation a[href*="github.com"]:before{content:"\f200"}.jetpack-social-navigation a[href*="plus.google.com"]:before{content:"\f206"}.jetpack-social-navigation a[href*="instagram.com"]:before{content:"\f215"}.jetpack-social-navigation a[href*="linkedin.com"]:before{content:"\f208"}.jetpack-social-navigation a[href*="path.com"]:before{content:"\f219"}.jetpack-social-navigation a[href*="pinterest.com"]:before{content:"\f210"}.jetpack-social-navigation a[href*="getpocket.com"]:before{content:"\f224"}.jetpack-social-navigation a[href*="polldaddy.com"]:before{content:"\f217"}.jetpack-social-navigation a[href*="reddit.com"]:before{content:"\f222"}.jetpack-social-navigation a[href$="/feed/"]:before{content:"\f413"}.jetpack-social-navigation a[href*="skype:"]:before{content:"\f220"}.jetpack-social-navigation a[href*="spotify.com"]:before{content:"\f515"}.jetpack-social-navigation a[href*="stumbleupon.com"]:before{content:"\f223"}.jetpack-social-navigation a[href*="tumblr.com"]:before{content:"\f214"}.jetpack-social-navigation a[href*="twitch.tv"]:before{content:"\f516"}.jetpack-social-navigation a[href*="twitter.com"]:before{content:"\f202"}.jetpack-social-navigation a[href*="vimeo.com"]:before{content:"\f212"}.jetpack-social-navigation a[href*="vine.co"]:before{content:"\f517"}.jetpack-social-navigation a[href*="wordpress.com"]:before,.jetpack-social-navigation a[href*="wordpress.org"]:before{content:"\f205"}.jetpack-social-navigation a[href*="youtube.com"]:before{content:"\f213"}.tiled-gallery{clear:both;margin:0 0 20px;overflow:hidden}.tiled-gallery img{margin:2px!important}.tiled-gallery .gallery-group{float:left;position:relative}.tiled-gallery .tiled-gallery-item{float:left;margin:0;position:relative;width:inherit}.tiled-gallery .gallery-row{overflow:hidden}.tiled-gallery .tiled-gallery-item a{background:0 0;border:none;color:inherit;margin:0;padding:0;text-decoration:none;width:auto}.tiled-gallery .tiled-gallery-item img,.tiled-gallery .tiled-gallery-item img:hover{background:0 0;border:none;box-shadow:none;max-width:100%;padding:0;vertical-align:middle}.tiled-gallery-caption{background:#eee;background:rgba(255,255,255,.8);color:#333;font-size:13px;font-weight:400;overflow:hidden;padding:10px 0;position:absolute;bottom:0;text-indent:10px;text-overflow:ellipsis;width:100%;white-space:nowrap}.tiled-gallery .tiled-gallery-item-small .tiled-gallery-caption{font-size:11px}.widget-gallery .tiled-gallery-unresized{visibility:hidden;height:0;overflow:hidden}.tiled-gallery .tiled-gallery-item img.grayscale{position:absolute;left:0;top:0}.tiled-gallery .tiled-gallery-item img.grayscale:hover{opacity:0}.tiled-gallery.type-circle .tiled-gallery-item img{border-radius:50%!important}.tiled-gallery.type-circle .tiled-gallery-caption{display:none;opacity:0}.jetpack-display-remote-posts{margin:5px 0 20px}.jetpack-display-remote-posts h4{font-size:90%;margin:5px 0;padding:0}.jetpack-display-remote-posts h4 a{text-decoration:none}.jetpack-display-remote-posts p{margin:0!important;padding:0;line-height:1.4em!important;font-size:90%}.jetpack-display-remote-posts img{max-width:100%}.widget-grofile h4{margin:1em 0 .5em}.widget-grofile ul.grofile-urls{margin-left:0;overflow:hidden}.widget-grofile ul.grofile-accounts li{list-style:none;display:inline}.widget-grofile ul.grofile-accounts li::before{content:""!important}.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite.png);background-repeat:no-repeat;width:16px;height:16px;float:left;margin-right:8px;margin-bottom:8px}.rtl .widget-grofile .grofile-accounts-logo{margin-left:8px;margin-right:0}.grofile-thumbnail{width:500px;max-width:100%}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite-2x.png);background-size:16px 784px}}div[class^=gr_custom_container]{border:1px solid gray;border-radius:10px;padding:10px 5px;background-color:#FFF;color:#000}div[class^=gr_custom_container] a{color:#000}h2[class^=gr_custom_header]{display:none}div[class^=gr_custom_each_container]{width:100%;clear:both;margin-bottom:10px;overflow:auto;padding-bottom:4px;border-bottom:1px solid #aaa}div[class^=gr_custom_book_container]{float:right;overflow:hidden;height:60px;margin-left:4px;width:39px}div[class^=gr_custom_author]{font-size:10px}div[class^=gr_custom_tags]{font-size:10px;color:gray}div[class^=gr_custom_rating]{display:none}.widget_wpcom_social_media_icons_widget ul{list-style-type:none;margin-left:0}.widget_wpcom_social_media_icons_widget li{border:0;display:inline;margin-right:.5em}.widget_wpcom_social_media_icons_widget li a{border:0;text-decoration:none}.widget_wpcom_social_media_icons_widget .genericon{font-family:Genericons}.widget_wpcom_social_media_icons_widget .screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.widget_wpcom_social_media_icons_widget .screen-reader-text:active,.widget_wpcom_social_media_icons_widget .screen-reader-text:focus,.widget_wpcom_social_media_icons_widget .screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-size:.875rem;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.widgets-grid-layout{width:100%}.widgets-grid-layout:after,.widgets-grid-layout:before{content:" ";display:table}.widgets-grid-layout:after{clear:both}.widget-grid-view-image{float:left;max-width:50%}.widget-grid-view-image a{display:block;margin:0 2px 4px 0}.widget-grid-view-image:image:nth-child(even){float:right}.widget-grid-view-image:nth-child(even) a{margin:0 0 4px 2px}.widgets-grid-layout .widget-grid-view-image img{max-width:100%;height:auto}.widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:0 0;clear:none;float:left;margin:0 -5px -3px 0;padding:0 8px 6px 0;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:0 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widgets-list-layout{padding:0;margin:0;list-style-type:none}.widgets-list-layout li:after,.widgets-list-layout li:before{content:"";display:table}.widgets-list-layout li:after{clear:both}.widgets-list-layout li{zoom:1;margin-bottom:1em;list-style-type:none!important}.widgets-list-layout .widgets-list-layout-blavatar{float:left;width:21.276596%;max-width:40px;height:auto}.widgets-list-layout-links{float:right;width:73.404255%}.widgets-list-layout span{opacity:.5}.widgets-list-layout span:hover{opacity:.8}
1
  /*!
2
  * Do not modify this file directly. It is concatenated from individual module CSS files.
3
  */
4
+ .jp-carousel-wrap *{line-height:inherit}.jp-carousel-overlay{background:#000}div.jp-carousel-fadeaway{position:fixed;bottom:0;z-index:2147483647;width:100%;height:15px}.jp-carousel-next-button span,.jp-carousel-previous-button span{background:url(../modules/carousel/images/arrows.png) center center/200px 126px no-repeat}.jp-carousel-msg{font-family:"Open Sans",sans-serif;font-style:normal;display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:center;margin:25px 20px 0 2px;background-color:#fff;border-left:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.jp-carousel-next-button span,.jp-carousel-previous-button span{background-image:url(../modules/carousel/images/arrows-2x.png)}}.jp-carousel-wrap{font-family:"Helvetica Neue",sans-serif!important}.jp-carousel-info{position:absolute;bottom:0;text-align:left!important;-webkit-font-smoothing:subpixel-antialiased!important}.jp-carousel-info ::selection{background:#68c9e8;color:#fff}.jp-carousel-info ::-moz-selection{background:#68c9e8;color:#fff}.jp-carousel-photo-info{position:relative;left:25%;width:50%}.jp-carousel-transitions .jp-carousel-photo-info{transition:400ms ease-out}.jp-carousel-info h2{background:none!important;border:none!important;color:#999;display:block!important;font:400 13px/1.25em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;margin:7px 0 0!important;padding:10px 0 0!important;overflow:hidden;text-align:left;text-shadow:none!important;text-transform:none!important;-webkit-font-smoothing:subpixel-antialiased}.jp-carousel-next-button,.jp-carousel-previous-button{text-indent:-9999px;overflow:hidden;cursor:pointer}.jp-carousel-next-button span,.jp-carousel-previous-button span{position:absolute;top:0;bottom:0;width:82px;zoom:1;filter:alpha(opacity=20);opacity:.2}.jp-carousel-transitions .jp-carousel-next-button span,.jp-carousel-transitions .jp-carousel-previous-button span{transition:500ms opacity ease-out}.jp-carousel-next-button:hover span,.jp-carousel-previous-button:hover span{filter:alpha(opacity=60);opacity:.6}.jp-carousel-next-button span{background-position:-110px center;right:0}.jp-carousel-previous-button span{background-position:-10px center;left:0}.jp-carousel-buttons{margin:-18px -20px 15px;padding:8px 10px;border-bottom:1px solid #222;background:#222;text-align:center}div.jp-carousel-buttons a{border:none!important;color:#999;font:400 11px/1.2em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;padding:5px 2px 5px 0;text-decoration:none!important;text-shadow:none!important;vertical-align:middle;-webkit-font-smoothing:subpixel-antialiased}div.jp-carousel-buttons a:hover{color:#68c9e8;border:none!important}.jp-carousel-transitions div.jp-carousel-buttons a:hover{transition:none!important}.jp-carousel-next-button,.jp-carousel-previous-button,.jp-carousel-slide,.jp-carousel-slide img{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.jp-carousel-slide{position:fixed;width:0;bottom:0;background-color:#000;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}.jp-carousel-slide.selected{position:absolute!important;filter:alpha(opacity=100);opacity:1}.jp-carousel-slide{filter:alpha(opacity=25);opacity:.25}.jp-carousel-slide img{display:block;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;background:none!important;border:none!important;padding:0!important;box-shadow:0 2px 8px rgba(0,0,0,.1);zoom:1}.jp-carousel-transitions .jp-carousel-slide{transition:opacity 400ms linear}.jp-carousel-close-hint{color:#999;cursor:default;letter-spacing:0!important;padding:.35em 0 0;position:absolute;text-align:left;width:90%}.jp-carousel-transitions .jp-carousel-close-hint{transition:color 200ms linear}.jp-carousel-close-hint span{cursor:pointer;background-color:#000;background-color:rgba(0,0,0,.8);display:block;height:22px;font:400 24px/1 "Helvetica Neue",sans-serif!important;line-height:22px;margin:0 0 0 .4em;text-align:center;vertical-align:middle;width:22px;border-radius:4px}.jp-carousel-transitions .jp-carousel-close-hint span{transition:border-color 200ms linear}.jp-carousel-close-hint:hover{cursor:default;color:#fff}.jp-carousel-close-hint:hover span{border-color:#fff}a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background:url(../modules/carousel/images/carousel-sprite.png?5) 0 0/16px 200px no-repeat}div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{margin:0 14px 0 0!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#303030;padding-right:8px!important;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;margin:0 2px 0 -12px!important}div.jp-carousel-buttons a.jp-carousel-reblog,div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{background-position:6px -36px;padding-right:auto!important;padding-left:26px!important;color:#999}div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -156px;padding-left:19px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{cursor:default}div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:6px -56px;color:#68c9e8}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background-image:url(../modules/carousel/images/carousel-sprite-2x.png?5)}}div#carousel-reblog-box{background:#222;padding:3px 0 0;display:none;margin:5px auto 0;border-radius:2px;box-shadow:0 0 20px rgba(0,0,0,.9);height:74px;width:565px}#carousel-reblog-box textarea{background:#999;font:13px/1.4 "Helvetica Neue",sans-serif!important;color:#444;padding:3px 6px;width:370px;height:48px;float:left;margin:6px 9px 0;border:1px solid #666;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:2px}#carousel-reblog-box textarea:focus{background:#ccc;color:#222}#carousel-reblog-box label{color:#aaa;font-size:11px;padding-right:2px;padding-left:2px;display:inline;font-weight:400}#carousel-reblog-box select{width:110px;padding:0;font-size:12px;font-family:"Helvetica Neue",sans-serif!important;background:#333;color:#eee;border:1px solid #444;margin-top:5px}#carousel-reblog-box .submit,#wrapper #carousel-reblog-box p.response{float:left;width:154px;padding-top:0;padding-left:1px;overflow:hidden;height:34px;margin:3px 0 0 2px!important}#wrapper #carousel-reblog-box p.response{font-size:13px;clear:none;padding-left:2px;height:34px;color:#aaa}#carousel-reblog-box input#carousel-reblog-submit,#jp-carousel-comment-form-button-submit{font:13px/24px "Helvetica Neue",sans-serif!important;margin-top:8px;padding:0 10px!important;border-radius:1em;height:24px;color:#333;cursor:pointer;font-weight:400;background:#aaa;border:1px solid #444}#carousel-reblog-box input#carousel-reblog-submit:hover,#jp-carousel-comment-form-button-submit:hover{background:#ccc}#carousel-reblog-box .canceltext{color:#aaa;font-size:11px;line-height:24px}#carousel-reblog-box .canceltext a{color:#fff}.jp-carousel-titleanddesc{border-top:1px solid #222;color:#999;font-size:15px;padding-top:24px;margin-bottom:20px;font-weight:400}.jp-carousel-titleanddesc-title{font:300 1.5em/1.1 "Helvetica Neue",sans-serif!important;text-transform:none!important;color:#fff;margin:0 0 15px;padding:0}.jp-carousel-titleanddesc-desc p{color:#999;line-height:1.4;margin-bottom:.75em}.jp-carousel-comments p a,.jp-carousel-info h2 a,.jp-carousel-titleanddesc p a{color:#fff!important;border:none!important;text-decoration:underline!important;font-weight:400!important;font-style:normal!important}.jp-carousel-titleanddesc p b,.jp-carousel-titleanddesc p strong{font-weight:700;color:#999}.jp-carousel-titleanddesc p em,.jp-carousel-titleanddesc p i{font-style:italic;color:#999}.jp-carousel-comments p a:hover,.jp-carousel-info h2 a:hover,.jp-carousel-titleanddesc p a:hover{color:#68c9e8!important}.jp-carousel-titleanddesc p:empty{display:none}.jp-carousel-left-column-wrapper h1:after,.jp-carousel-left-column-wrapper h1:before,.jp-carousel-photo-info h1:after,.jp-carousel-photo-info h1:before{content:none!important}.jp-carousel-image-meta{background:#111;border:1px solid #222;color:#fff;font:12px/1.4 "Helvetica Neue",sans-serif!important;overflow:hidden;padding:18px 20px;width:209px!important}.jp-carousel-image-meta h5,.jp-carousel-image-meta li{font-family:"Helvetica Neue",sans-serif!important;position:inherit!important;top:auto!important;right:auto!important;left:auto!important;bottom:auto!important;background:none!important;border:none!important;font-weight:400!important;line-height:1.3em!important}.jp-carousel-image-meta ul{margin:0!important;padding:0!important;list-style:none!important}.jp-carousel-image-meta li{width:48%!important;float:left!important;margin:0 2% 15px 0!important;color:#fff!important;font-size:13px!important}.jp-carousel-image-meta h5{color:#999!important;text-transform:uppercase!important;font-size:10px!important;margin:0 0 2px!important;letter-spacing:.1em!important}a.jp-carousel-image-download{padding-left:23px;display:inline-block;clear:both;color:#999;line-height:1;font-weight:400;font-size:13px;text-decoration:none;background-position:0 -82px}a.jp-carousel-image-download span.photo-size{font-size:11px;border-radius:1em;margin-left:2px;display:inline-block}a.jp-carousel-image-download span.photo-size-times{padding:0 1px 0 2px}a.jp-carousel-image-download:hover{background-position:0 -122px;color:#68c9e8;border:none!important}.jp-carousel-image-map{position:relative;margin:-20px -20px 20px;border-bottom:1px solid rgba(255,255,255,.17);height:154px}.jp-carousel-image-map img.gmap-main{border-top-left-radius:6px;border-right:1px solid rgba(255,255,255,.17)}.jp-carousel-image-map div.gmap-topright{width:94px;height:154px;position:absolute;top:0;right:0}.jp-carousel-image-map div.imgclip{overflow:hidden;border-top-right-radius:6px}.jp-carousel-image-map div.gmap-topright img{margin-left:-40px}.jp-carousel-image-map img.gmap-bottomright{position:absolute;top:96px;right:0}.jp-carousel-comments{font:15px/1.7 "Helvetica Neue",sans-serif!important;font-weight:400;background:none}.jp-carousel-comments p a:active,.jp-carousel-comments p a:focus,.jp-carousel-comments p a:hover{color:#68c9e8!important}.jp-carousel-comment{background:none;color:#999;margin-bottom:20px;clear:left;overflow:auto;width:100%}.jp-carousel-comment p{color:#999!important}.jp-carousel-comment .comment-author{font-size:13px;font-weight:400;padding:0;width:auto;display:inline;float:none;border:none;margin:0}.jp-carousel-comment .comment-author a{color:#fff}.jp-carousel-comment .comment-gravatar{float:left}.jp-carousel-comment .comment-content{border:none;margin-left:85px;padding:0}.jp-carousel-comment .avatar{margin:0 20px 0 0;border-radius:4px;border:none!important;padding:0!important;background-color:transparent!important}.jp-carousel-comment .comment-date{color:#999;margin-top:4px;font-size:11px;display:inline;float:right}#jp-carousel-comment-form{margin:0 0 10px!important;float:left;width:100%}textarea#jp-carousel-comment-form-comment-field{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:15px/1.4 "Helvetica Neue",sans-serif!important;width:100%;padding:10px 10px 5px;margin:0;float:none;height:147px;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:3px;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box}textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#555}textarea#jp-carousel-comment-form-comment-field:focus{background:#ccc;color:#222}textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#aaa}#jp-carousel-comment-form-spinner{color:#fff;margin:22px 0 0 10px;display:block;width:20px;height:20px;float:left}#jp-carousel-comment-form-submit-and-info-wrapper{display:none;overflow:hidden;width:100%}#jp-carousel-comment-form-commenting-as input{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:13px/1.4 "Helvetica Neue",sans-serif!important;padding:3px 6px;float:left;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:2px;width:285px}#jp-carousel-comment-form-commenting-as input:focus{background:#ccc;color:#222}#jp-carousel-comment-form-commenting-as p{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:22px 0 0;float:left}#jp-carousel-comment-form-commenting-as fieldset{float:left;border:none;margin:20px 0 0;padding:0;clear:both}#jp-carousel-comment-form-commenting-as label{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:0 20px 3px 0;float:left;width:100px}#jp-carousel-comment-form-button-submit{margin-top:20px;float:right}#jp-carousel-comment-form-container,#js-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-post-results{display:none;overflow:auto;width:100%}#jp-carousel-comment-post-results span{display:block;text-align:center;margin-top:20px;width:100%;overflow:auto;padding:1em 0;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(0,0,0,.7);border-radius:2px;font:13px/1.4 "Helvetica Neue",sans-serif!important;border:1px solid rgba(255,255,255,.17);box-shadow:inset 0 0 5px 5px rgba(0,0,0,1)}.jp-carousel-comment-post-error{color:#DF4926}#jp-carousel-comments-closed{display:none;color:#999}#jp-carousel-comments-loading{font:400 15px/1.7 "Helvetica Neue",sans-serif!important;display:none;color:#999;text-align:left;margin-bottom:20px}.jp-carousel-light .jp-carousel-overlay{background:#fff}.jp-carousel-light .jp-carousel-next-button:hover span,.jp-carousel-light .jp-carousel-previous-button:hover span{opacity:.8}.jp-carousel-light .jp-carousel-close-hint:hover,.jp-carousel-light .jp-carousel-titleanddesc div{color:#000!important}.jp-carousel-light .jp-carousel-comment .comment-author a,.jp-carousel-light .jp-carousel-comments p a,.jp-carousel-light .jp-carousel-info h2 a,.jp-carousel-light .jp-carousel-titleanddesc p a{color:#1e8cbe!important}.jp-carousel-light .jp-carousel-comment .comment-author a:hover,.jp-carousel-light .jp-carousel-comments p a:hover,.jp-carousel-light .jp-carousel-info h2 a:hover,.jp-carousel-light .jp-carousel-titleanddesc p a:hover{color:#f1831e!important}.jp-carousel-light .jp-carousel-comment,.jp-carousel-light .jp-carousel-comment p,.jp-carousel-light .jp-carousel-info h2,.jp-carousel-light .jp-carousel-titleanddesc,.jp-carousel-light .jp-carousel-titleanddesc p,.jp-carousel-light .jp-carousel-titleanddesc p b,.jp-carousel-light .jp-carousel-titleanddesc p em,.jp-carousel-light .jp-carousel-titleanddesc p i,.jp-carousel-light .jp-carousel-titleanddesc p strong,.jp-carousel-light div.jp-carousel-buttons a{color:#666}.jp-carousel-light .jp-carousel-buttons{border-bottom-color:#f0f0f0;background:#f5f5f5}.jp-carousel-light div.jp-carousel-buttons a:hover{text-decoration:none;color:#f1831e}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:4px -56px;padding-left:24px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#2ea2cc;color:#fff}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -176px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-position:5px -36px}.jp-carousel-light div#carousel-reblog-box{background:#eee;box-shadow:0 2px 10px rgba(0,0,0,.1);border:1px solid #ddd}.jp-carousel-light #carousel-reblog-box textarea{color:#666;border:1px solid #cfcfcf;background:#fff}.jp-carousel-light #carousel-reblog-box .canceltext{color:#888}.jp-carousel-light #carousel-reblog-box .canceltext a{color:#666}.jp-carousel-light #carousel-reblog-box select{background:#eee;color:#333;border:1px solid #aaa}#jp-carousel-comment-form-button-submit,.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit{color:#333;background:#fff;border:1px solid #aaa}.jp-carousel-light .jp-carousel-image-meta{background:#fafafa;border:1px solid #eee;border-top-color:#f5f5f5;border-left-color:#f5f5f5;color:#333}.jp-carousel-light .jp-carousel-image-meta li{color:#000!important}.jp-carousel-light .jp-carousel-close-hint{color:#ccc}.jp-carousel-light .jp-carousel-close-hint span{background-color:#fff;border-color:#ccc}.jp-carousel-light #jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#aaa}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus{color:#333}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#ddd}.jp-carousel-light a.jp-carousel-image-download{background-position:0 -122px}.jp-carousel-light a.jp-carousel-image-download:hover{background-position:0 -122px;color:#f1831e}.jp-carousel-light textarea#jp-carousel-comment-form-comment-field{background:#fbfbfb;color:#333;border:1px solid #dfdfdf;box-shadow:inset 2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input{background:#fbfbfb;border:1px solid #dfdfdf;color:#333;box-shadow:inset 2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus{background:#fbfbfb;color:#333}.jp-carousel-light #jp-carousel-comment-post-results span{background:#f7f7f7;border:1px solid #dfdfdf;box-shadow:inset 0 0 5px rgba(0,0,0,.05)}.jp-carousel-light .jp-carousel-slide{background-color:#fff}.jp-carousel-light .jp-carousel-titleanddesc{border-top:1px solid #eee}@media only screen and (max-width:760px){.jp-carousel-info{margin:0 10px!important}.jp-carousel-buttons,.jp-carousel-next-button,.jp-carousel-previous-button{display:none!important}.jp-carousel-image-meta{float:none!important;width:100%!important;-moz-box-sizing:border-box;box-sizing:border-box}.jp-carousel-close-hint{font-weight:800!important;font-size:26px!important;position:fixed!important;top:-10px}.jp-carousel-slide img{filter:alpha(opacity=100);opacity:1}.jp-carousel-wrap{background-color:#000}.jp-carousel-fadeaway{display:none}#jp-carousel-comment-form-container{display:none!important}.jp-carousel-titleanddesc{padding-top:0!important;border:none!important}.jp-carousel-titleanddesc-title{font-size:1em!important}.jp-carousel-left-column-wrapper{padding:0;width:100%!important}.jp-carousel-photo-info{left:0!important;width:100%!important}}.contact-form .clear-form{clear:both}.contact-form input[type=email],.contact-form input[type=text]{width:300px;max-width:98%;margin-bottom:13px}.contact-form select{margin-bottom:13px}.contact-form textarea{height:200px;width:80%;float:none;margin-bottom:13px}.contact-form input[type=checkbox],.contact-form input[type=radio]{float:none;margin-bottom:13px}.contact-form label{margin-bottom:3px;float:none;font-weight:700;display:block}.contact-form label.checkbox,.contact-form label.radio{margin-bottom:3px;float:none;font-weight:700;display:inline-block}.contact-form label span{color:#AAA;margin-left:4px;font-weight:400}.contact-form-submission{margin-bottom:4em;padding:1.5em 1em}.contact-form-submission p{margin:0 auto}.form-errors .form-error-message{color:red}.textwidget .contact-form input[type=email],.textwidget .contact-form input[type=text],.textwidget .contact-form textarea{width:250px;max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box}#jetpack-check-feedback-spam{margin:1px 8px 0 0}.jetpack-check-feedback-spam-spinner{display:inline-block;margin-top:7px}.infinite-loader{color:#000;display:block;height:28px;text-indent:-9999px}#infinite-handle span{background:#333;border-radius:1px;color:#eee;cursor:pointer;font-size:13px;padding:6px 16px}#infinite-handle span button,#infinite-handle span button:focus,#infinite-handle span button:hover{display:inline;position:static;padding:0;margin:0;border:none;line-height:inherit;background:0 0;color:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}#infinite-handle span button::-moz-focus-inner{margin:0;padding:0;border:none}@media (max-width:800px){#infinite-handle span:before{display:none}#infinite-handle span{display:block}}#infinite-footer{position:fixed;bottom:-50px;left:0;width:100%}#infinite-footer a{text-decoration:none}#infinite-footer .blog-credits a:hover,#infinite-footer .blog-info a:hover{color:#444;text-decoration:underline}#infinite-footer .container{background:rgba(255,255,255,.8);border-color:#ccc;border-color:rgba(0,0,0,.1);border-style:solid;border-width:1px 0 0;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 auto;overflow:hidden;padding:1px 20px;width:780px}#infinite-footer .blog-credits,#infinite-footer .blog-info{-moz-box-sizing:border-box;box-sizing:border-box;line-height:25px}#infinite-footer .blog-info{float:left;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:40%}#infinite-footer .blog-credits{font-weight:400;float:right;width:60%}#infinite-footer .blog-info a{color:#111;font-size:14px;font-weight:700}#infinite-footer .blog-credits{color:#888;font-size:12px;text-align:right}#infinite-footer .blog-credits a{color:#666}.infinity-end.neverending #infinite-footer{display:none}@media (max-width:640px){#infinite-footer .container{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#infinite-footer .blog-info{width:30%}#infinite-footer .blog-credits{width:70%}#infinite-footer .blog-credits,#infinite-footer .blog-info a{font-size:10px}}@media (max-width:640px){#infinite-footer{position:static}}#wpadminbar li#wp-admin-bar-admin-bar-likes-widget{width:61px;overflow:hidden}#wpadminbar iframe.admin-bar-likes-widget{width:61px;height:28px;min-height:28px;border-width:0;position:absolute;top:0}div.jetpack-likes-widget-wrapper{width:100%;min-height:50px;position:relative}div.jetpack-likes-widget-wrapper .sd-link-color{font-size:12px}div.jetpack-likes-widget-wrapper.slim-likes-widget{width:1px;min-height:0}#likes-other-gravatars{display:none;position:absolute;padding:10px 10px 12px;background-color:#2e4453;border-width:0;box-shadow:0 0 10px #2e4453;box-shadow:0 0 10px rgba(46,68,83,.6);min-width:130px;z-index:1000}#likes-other-gravatars *{line-height:normal}#likes-other-gravatars .likes-text{color:#fff;font-size:12px;padding-bottom:8px}#likes-other-gravatars li,#likes-other-gravatars ul{margin:0;padding:0;text-indent:0;list-style-type:none}#likes-other-gravatars li::before{content:""}#likes-other-gravatars ul.wpl-avatars{overflow:auto;display:block;max-height:190px}#likes-other-gravatars ul.wpl-avatars li{width:32px;height:32px;float:left;margin:0 5px 5px 0}#likes-other-gravatars ul.wpl-avatars li a{margin:0 2px 0 0;border-bottom:none!important;display:block}#likes-other-gravatars ul.wpl-avatars li a img{background:0 0;border:none;margin:0!important;padding:0!important;position:static}div.sd-box{border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.13)}.comment-likes-widget,.entry-content .post-likes-widget,.post-likes-widget{margin:0;border-width:0;display:block}.post-likes-widget-placeholder{margin:0;border-width:0;position:relative}.post-likes-widget-placeholder .button{display:none}.post-likes-widget-placeholder .loading{color:#999;font-size:12px}.slim-likes-widget .post-likes-widget{width:auto;float:none}div.sharedaddy.sd-like-enabled .sd-like h3{display:none}div.sharedaddy.sd-like-enabled .sd-like .post-likes-widget{width:100%;float:none;position:absolute;top:0}.comment-likes-widget{width:100%}.pd-rating{display:block!important}.sd-gplus .sd-title{display:none}#jp-relatedposts{display:none;padding-top:1em;margin:1em 0;position:relative;clear:both}.jp-relatedposts:after{content:'';display:block;clear:both}#jp-relatedposts h3.jp-relatedposts-headline{margin:0 0 1em;display:inline-block;float:left;font-size:9pt;font-weight:700;font-family:inherit}#jp-relatedposts h3.jp-relatedposts-headline em:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}#jp-relatedposts h3.jp-relatedposts-headline em{font-style:normal;font-weight:700}#jp-relatedposts .jp-relatedposts-items{clear:left}#jp-relatedposts .jp-relatedposts-items-visual{margin-right:-20px}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{float:left;width:33%;margin:0 0 1em;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post{padding-right:20px;filter:alpha(opacity=80);-moz-opacity:.8;opacity:.8}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n+4),#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post:nth-child(3n+4){clear:both}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover{filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items p,#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-size:14px;line-height:20px;margin:0}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs{position:relative}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay{position:absolute;top:0;bottom:0;left:0;right:0;display:block;border-bottom:0}#jp-relatedposts .jp-relatedposts-items p{margin-bottom:0}#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{text-transform:none;margin:0;font-family:inherit;display:block;max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a{font-size:inherit;font-weight:400;text-decoration:none;filter:alpha(opacity=100);-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span{display:block;max-width:90%;overflow:hidden;text-overflow:ellipsis}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post span{max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{opacity:.6}#jp-relatedposts .jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt,.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{display:none}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt{overflow:hidden}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs span{margin-bottom:1em}@media only screen and (max-width:640px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:50%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n){clear:left}#jp-relatedposts .jp-relatedposts-items-visual{margin-right:20px}}@media only screen and (max-width:320px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:100%;clear:both;margin:0 0 1em}}#jp-post-flair{padding-top:.5em}#content div.sharedaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{margin:0 0 1em;display:inline-block;line-height:1.2;font-size:9pt;font-weight:700}div.sharedaddy h3.sd-title:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;margin-bottom:1em}body.highlander-light h3.sd-title:before{border-top:1px solid rgba(0,0,0,.2)}body.highlander-dark h3.sd-title:before{border-top:1px solid rgba(255,255,255,.4)}.sd-content ul{padding:0!important;margin:0 0 .7em!important;list-style:none!important}.sd-content ul li{display:inline-block}.sd-block.sd-gplus{margin:0 0 .5em}.sd-gplus .sd-content{font-size:12px}#sharing_email .sharing_send,.sd-content ul li .option a.share-ustom,.sd-content ul li a.sd-button,.sd-content ul li.advanced a.share-more,.sd-content ul li.preview-item div.option.option-smart-off a,.sd-social-icon .sd-content ul li a.sd-button,.sd-social-icon-text .sd-content ul li a.sd-button,.sd-social-official .sd-content>ul>li .digg_button >a,.sd-social-official .sd-content>ul>li>a.sd-button,.sd-social-text .sd-content ul li a.sd-button{text-decoration:none!important;display:inline-block;margin:0 5px 5px 0;font-size:12px;font-family:"Open Sans",sans-serif;font-weight:400;border-radius:3px;color:#777!important;background:#f8f8f8;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,.08);text-shadow:none;line-height:23px;padding:1px 8px 0 5px}.sd-content ul li .option a.share-ustom span,.sd-content ul li a.sd-button>span,.sd-content ul li.advanced a.share-more span,.sd-content ul li.preview-item div.option.option-smart-off a span,.sd-social-icon-text .sd-content ul li a.sd-button>span,.sd-social-official .sd-content>ul>li .digg_button >a span,.sd-social-official .sd-content>ul>li>a.sd-button span,.sd-social-text .sd-content ul li a.sd-button span{line-height:23px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button,.sd-social-official .sd-content>ul>li .digg_button>a,.sd-social-official .sd-content>ul>li>a.sd-button{line-height:17px;box-shadow:none;vertical-align:top}.sd-social-official .sd-content ul li a.sd-button>span{line-height:17px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,.sd-social-official .sd-content>ul>li .digg_button>a:before,.sd-social-official .sd-content>ul>li>a.sd-button:before{margin-bottom:-1px}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon .sd-content ul li a.sd-button:hover,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:hover,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li .digg_button>a:hover,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-official .sd-content>ul>li>a.sd-button:hover,.sd-social-text .sd-content ul li a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:hover{color:#555;background:#fafafa;border:1px solid #999}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.16)}.sd-content ul li a.sd-button:before{display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font:400 18px/1 social-logos;vertical-align:top;text-align:center}.sd-social-icon-text ul li a.sd-button:before{position:relative;top:2px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-content ul li a.sd-button:before{position:relative;top:2px}}.sd-social-official ul li a.sd-button:before{position:relative;top:-2px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-social-official ul li a.sd-button:before{top:0}}.sd-content ul li{margin:0!important;padding:0}.sd-content ul li.preview-item a.sd-button span,.sd-social-icon-text .sd-content ul li a span,.sd-social-official .sd-content ul li a.sd-button span{margin-left:3px}.sd-content ul li.preview-item.no-icon a.sd-button span{margin-left:0}.sd-content ul li.no-icon a:before,.sd-social-text .sd-content ul li a:before{display:none}body .sd-content ul li.share-custom.no-icon a span,body .sd-social-text .sd-content ul li.share-custom a span{background-image:none;background-position:-500px -500px!important;background-repeat:no-repeat!important;padding-left:0;height:0;line-height:inherit}.sd-social-icon .sd-content ul li a.share-more{position:relative;top:-4px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-social-icon .sd-content ul li a.share-more{top:2px}}@-moz-document url-prefix(){.sd-social-icon .sd-content ul li a.share-more{top:2px}}.sd-social-icon .sd-content ul li a.share-more span{margin-left:3px}.sd-content ul li.share-print div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-print a:before,.sd-social-icon-text .sd-content li.share-print a:before,.sd-social-official .sd-content li.share-print a:before,.sd-social-text .sd-content ul li.share-print a:before{content:'\f469'}.sd-content ul li.share-email div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-email a:before,.sd-social-icon-text .sd-content li.share-email a:before,.sd-social-official .sd-content li.share-email a:before,.sd-social-text .sd-content ul li.share-email a:before{content:'\f410'}.sd-content ul li.share-linkedin div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-linkedin a:before,.sd-social-icon-text .sd-content li.share-linkedin a:before,.sd-social-text .sd-content ul li.share-linkedin a:before{content:'\f207'}.sd-content ul li.share-twitter div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-twitter a:before,.sd-social-icon-text .sd-content li.share-twitter a:before,.sd-social-text .sd-content ul li.share-twitter a:before{content:'\f202'}.sd-content ul li.share-reddit div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-reddit a:before,.sd-social-icon-text .sd-content li.share-reddit a:before,.sd-social-text .sd-content ul li.share-reddit a:before{content:'\f222'}.sd-content ul li.share-tumblr div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-tumblr a:before,.sd-social-icon-text .sd-content li.share-tumblr a:before,.sd-social-text .sd-content ul li.share-tumblr a:before{content:'\f607'}.sd-content ul li.share-pocket div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pocket a:before,.sd-social-icon-text .sd-content li.share-pocket a:before,.sd-social-text .sd-content ul li.share-pocket a:before{content:'\f224'}.sd-content ul li.share-pinterest div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pinterest a:before,.sd-social-icon-text .sd-content li.share-pinterest a:before,.sd-social-text .sd-content ul li.share-pinterest a:before{content:'\f210'}.sd-content ul li.share-google-plus-1 div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-google-plus-1 a:before,.sd-social-icon-text .sd-content li.share-google-plus-1 a:before,.sd-social-text .sd-content ul li.share-google-plus-1 a:before{content:'\f218'}.sd-content ul li.share-facebook div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-facebook a:before,.sd-social-icon-text .sd-content li.share-facebook a:before,.sd-social-text .sd-content ul li.share-facebook a:before{content:'\f203'}.sd-content ul li.share-press-this div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-press-this a:before,.sd-social-icon-text .sd-content li.share-press-this a:before,.sd-social-official .sd-content li.share-press-this a:before,.sd-social-text .sd-content ul li.share-press-this a:before{content:'\f205'}.sd-social-official .sd-content li.share-press-this a:before{color:#2ba1cb}.sd-content ul li.share-telegram div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-telegram a:before,.sd-social-icon-text .sd-content li.share-telegram a:before,.sd-social-official .sd-content li.share-telegram a:before,.sd-social-text .sd-content ul li.share-telegram a:before{content:'\f606'}.sd-social-official .sd-content li.share-telegram a:before{color:#08c}.sd-content ul li.share-skype div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-skype a:before,.sd-social-icon-text .sd-content li.share-skype a:before,.sd-social-text .sd-content ul li.share-skype a:before{content:'\f220'}.sd-content ul li.advanced a.share-more:before,.sd-social-icon .sd-content ul a.share-more:before,.sd-social-icon-text .sd-content a.share-more:before,.sd-social-official .sd-content a.share-more:before,.sd-social-text .sd-content ul a.share-more:before{content:'\f415'}.sd-social-official .sd-content a.share-more:before{color:#2ba1cb}.sd-content ul li.share-jetpack-whatsapp div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-jetpack-whatsapp a:before,.sd-social-icon-text .sd-content li.share-jetpack-whatsapp a:before,.sd-social-official .sd-content li.share-jetpack-whatsapp a:before,.sd-social-text .sd-content ul li.share-jetpack-whatsapp a:before{content:'\f608'}.sd-social-official .sd-content li.share-jetpack-whatsapp a:before{color:#43d854}.sd-social-icon .sd-content ul li[class*=share-].share-jetpack-whatsapp a.sd-button{background:#43d854;color:#fff!important}.sd-social .sd-button .share-count{background:#2ea2cc;color:#fff;border-radius:10px;display:inline-block;text-align:center;font-size:10px;padding:1px 3px;line-height:1}.sd-social-official .sd-content ul,.sd-social-official .sd-content ul li{line-height:25px!important}.sd-social-official .sd-content>ul>li>a.sd-button span{line-height:1}.sd-social-official .sd-content ul:after{content:".";display:block;height:0;clear:both;visibility:hidden}.sd-social-official .sd-content li.share-press-this a{margin:0 0 5px}.sd-social-official .sd-content ul>li{display:block;float:left;margin:0 10px 5px 0!important;height:25px}.sd-social-official .fb-share-button>span{vertical-align:top!important}.sd-social-official .sd-content .pocket_button iframe{width:98px}.googleplus1_button .g-plus{vertical-align:top!important}.reddit_button iframe{margin-top:1px}.googleplus1_button iframe,.linkedin_button>span,.pinterest_button,.pocket_button iframe,.twitter_button{margin:0!important}.sd-social-official .sd-content .share-skype{width:55px}body .sd-social-official li a.share-more,body .sd-social-official li.share-custom a,body .sd-social-official li.share-digg a,body .sd-social-official li.share-email a,body .sd-social-official li.share-press-this a,body .sd-social-official li.share-print{position:relative;top:0}body .sd-social-icon .sd-content li.share-custom>a{padding:2px 3px 0;position:relative;top:4px}body .sd-content ul li.share-custom a.share-icon span,body .sd-social-icon .sd-content li.share-custom a span,body .sd-social-icon-text .sd-content li.share-custom a span,body .sd-social-official .sd-content li.share-custom a span,body .sd-social-text .sd-content li.share-custom a span{background-size:16px 16px;background-repeat:no-repeat;margin-left:0;padding:0 0 0 19px;display:inline-block;height:16px;line-height:16px}body .sd-social-icon .sd-content li.share-custom a span{width:0;padding-left:16px!important}.sharing-hidden .inner{position:absolute;z-index:2;border:1px solid #ccc;padding:10px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);border-radius:2px;margin-top:5px;max-width:400px}.sharing-hidden .inner ul{margin:0!important}.sd-social-official .sd-content .sharing-hidden ul>li.share-end{clear:both;margin:0!important;height:0!important}.sharing-hidden .inner:after,.sharing-hidden .inner:before{position:absolute;z-index:1;top:-8px;left:20px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:8px solid #ccc;content:"";display:block}.sharing-hidden .inner:after{z-index:2;top:-7px;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:8px solid #fff}.sharing-hidden ul{margin:0}.sd-social-icon .sd-content ul li[class*=share-] a,.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a{border-radius:50%;-webkit-border-radius:50%;border:0;box-shadow:none;padding:7px;position:relative;top:-2px;line-height:1;width:auto;height:auto;margin-bottom:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button>span,.sd-social-icon .sd-content ul li[class*=share-] div.option a span{line-height:1}.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a:hover{border:none;opacity:.6}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button:before{top:1px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button.share-custom{padding:8px 8px 6px;top:5px}.sd-social-icon .sd-content ul li a.sd-button.share-more{margin-left:10px}.sd-social-icon .sd-content ul li:first-child a.sd-button.share-more{margin-left:0}.sd-social-icon .sd-button span.share-count{position:absolute;bottom:0;right:0;border-radius:0;background:#555;font-size:9px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button{background:#e9e9e9;margin-top:2px;text-indent:0}.sd-social-icon .sd-content ul li[class*=share-].share-tumblr a.sd-button{background:#2c4762;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-facebook a.sd-button{background:#3b5998;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-twitter a.sd-button{background:#00acee;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pinterest a.sd-button{background:#ca1f27;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-digg a.sd-button{color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-press-this a.sd-button{background:#1e8cbe;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-telegram a.sd-button{background:#08c;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-linkedin a.sd-button{background:#0077b5;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-google-plus-1 a.sd-button{background:#dd4b39;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pocket a.sd-button{background:#ee4056;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-reddit a.sd-button{background:#cee3f8;color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-skype a.sd-button{background:#00AFF0;color:#fff!important}.sharing-screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.sharing-screen-reader-text:active,.sharing-screen-reader-text:focus,.sharing-screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}#sharing_email{width:342px;position:absolute;z-index:1001;border:1px solid #ccc;padding:15px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);text-align:left}div.sharedaddy.sharedaddy-dark #sharing_email{border-color:#fff}#sharing_email .errors{color:#fff;background-color:#771a09;font-size:12px;padding:5px 8px;line-height:1;margin:10px 0 0}#sharing_email label{font-size:12px;color:#333;font-weight:700;display:block;padding:0 0 4px;text-align:left;text-shadow:none}#sharing_email form{margin:0}#sharing_email input[type=email],#sharing_email input[type=text]{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid #ccc;margin-bottom:1em;background:#fff;font-size:12px;color:#333;max-width:none;padding:1px 3px}#jetpack-source_f_name{display:none!important;position:absolute!important;left:-9000px}#sharing_email .sharing_cancel{padding:0 0 0 1em;font-size:12px;text-shadow:none}#sharing_email .recaptcha{width:312px;height:123px;margin:0 0 1em}.slideshow-window{background-color:#222;border:20px solid #222;border-radius:10px;height:0;margin-bottom:20px;overflow:hidden;padding-top:30px!important;padding-bottom:56.25%!important;position:relative;z-index:1}.slideshow-window.slideshow-white{background-color:#fff;border-color:#fff}.slideshow-window,.slideshow-window *{-moz-box-sizing:content-box;box-sizing:content-box}.slideshow-loading{height:100%;text-align:center;margin:auto}body div.slideshow-window * img{background-color:transparent!important;background-image:none!important;border-width:0!important;display:block;margin:0 auto;max-width:100%;max-height:100%;padding:0!important;position:relative;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);top:50%}.slideshow-loading img{vertical-align:middle}.slideshow-slide{display:none;height:100%!important;left:0;margin:auto;position:absolute;text-align:center;top:0;width:100%!important}.slideshow-slide img{vertical-align:middle}.slideshow-line-height-hack{overflow:hidden;width:0;font-size:0}.slideshow-slide-caption{font-size:13px;font-family:"Helvetica Neue",sans-serif;color:#f7f7f7;text-shadow:#222 1px 1px 2px;line-height:25px;height:25px;position:absolute;bottom:5px;left:0;z-index:100;width:100%;text-align:center}.slideshow-controls{z-index:1000;position:absolute;bottom:30px;margin:auto;text-align:center;width:100%;-ms-filter:"alpha(Opacity=50)";opacity:.5;direction:ltr;transition:300ms opacity ease-out}.slideshow-window:hover .slideshow-controls{-ms-filter:"alpha(Opacity=100)";opacity:1}body div div.slideshow-controls a,body div div.slideshow-controls a:hover{border:2px solid rgba(255,255,255,.1)!important;background-color:#000!important;background-color:rgba(0,0,0,.6)!important;background-image:url(../modules/shortcodes/img/slideshow-controls.png)!important;background-repeat:no-repeat;background-size:142px 16px!important;background-position:-34px 8px!important;color:#222!important;margin:0 5px!important;padding:0!important;display:inline-block!important;zoom:1;height:32px!important;width:32px!important;line-height:32px!important;text-align:center!important;-khtml-border-radius:10em!important;border-radius:10em!important;transition:300ms border-color ease-out}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body div div.slideshow-controls a,body div div.slideshow-controls a:hover{background-image:url(../modules/shortcodes/img/slideshow-controls-2x.png)!important}}body div div.slideshow-controls a:hover{border-color:rgba(255,255,255,1)!important}body div div.slideshow-controls a:first-child{background-position:-76px 8px!important}body div div.slideshow-controls a:last-child{background-position:-117px 8px!important}body div div.slideshow-controls a.running,body div div.slideshow-controls a:nth-child(2){background-position:-34px 8px!important}body div div.slideshow-controls a.paused{background-position:9px 8px!important}.slideshow-controls a img{border:50px dotted #f0f}body.presentation-wrapper-fullscreen-parent,html.presentation-wrapper-fullscreen-parent{overflow:hidden!important}.presentation-wrapper-fullscreen-parent #wpadminbar{display:none}.presentation-wrapper-fullscreen,.presentation-wrapper-fullscreen-parent{min-width:100%!important;min-height:100%!important;position:absolute!important;top:0!important;right:0!important;bottom:0!important;left:0!important;margin:0!important;padding:0!important;z-index:10000!important}.presentation-wrapper-fullscreen{background-color:gray;border:none!important}.presentation-wrapper-fullscreen .nav-arrow-left,.presentation-wrapper-fullscreen .nav-arrow-right{z-index:20001}.presentation-wrapper-fullscreen .nav-fullscreen-button{z-index:20002}.presentation-wrapper{margin:20px auto;border:1px solid #e5e5e5;overflow:hidden;line-height:normal}.presentation{position:relative;margin:0;overflow:hidden;outline:0}.presentation,.presentation .step{background-repeat:no-repeat;background-position:center;background-size:100% 100%}.presentation .step.fade:not(.active){opacity:0}.presentation .slide-content{padding:30px}.presentation .nav-arrow-left,.presentation .nav-arrow-right,.presentation .nav-fullscreen-button{position:absolute;width:34px;background-repeat:no-repeat;z-index:2;opacity:0;transition:opacity .25s}.presentation .nav-arrow-left,.presentation .nav-arrow-right{height:100%;background-image:url(../modules/shortcodes/images/slide-nav.png);background-size:450% 61px}.presentation .nav-arrow-left{left:0;background-position:4px 50%}.presentation .nav-arrow-right{right:0;background-position:-120px 50%}.presentation .nav-fullscreen-button{width:32px;height:32px;margin:4px;bottom:0;right:0;z-index:3;background-image:url(../modules/shortcodes/images/expand.png);background-size:100% 100%}.presentation:hover .nav-arrow-left,.presentation:hover .nav-arrow-right{opacity:1}.presentation:hover .nav-fullscreen-button{opacity:.8}.presentation-wrapper-fullscreen .nav-fullscreen-button{background-image:url(../modules/shortcodes/images/collapse.png)}.presentation .autoplay-overlay{height:15%;width:80%;margin:30% 10%;position:relative;z-index:100;display:table;border-radius:50px;background-color:#e5e5e5;background-color:rgba(0,0,0,.75);transition:opacity .5s}.presentation .autoplay-overlay .overlay-msg{position:relative;display:table-cell;text-align:center;vertical-align:middle;color:#fff}.presentation .will-fade{opacity:0}.presentation .do-fade{opacity:1;transition:opacity .5s}#subscribe-email input{width:95%}.comment-subscription-form .subscribe-label{display:inline!important}.jetpack-video-wrapper{margin-bottom:1.6em}.jetpack-video-wrapper>.wp-video,.jetpack-video-wrapper>embed,.jetpack-video-wrapper>iframe,.jetpack-video-wrapper>object{margin-bottom:0}.jetpack-social-navigation ul{display:block;margin:0 0 1.5em;padding:0}.jetpack-social-navigation li{display:inline-block;margin:0;line-height:1}.jetpack-social-navigation a{border:0;height:1em;text-decoration:none;width:1em}.jetpack-social-navigation a:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Genericons;font-size:1em;font-style:normal;font-weight:400;height:1em;line-height:1;speak:none;text-decoration:inherit;vertical-align:top;width:1em;content:"\f415"}.jetpack-social-navigation a[href*="codepen.io"]:before{content:"\f216"}.jetpack-social-navigation a[href*="digg.com"]:before{content:"\f221"}.jetpack-social-navigation a[href*="dribbble.com"]:before{content:"\f201"}.jetpack-social-navigation a[href*="dropbox.com"]:before{content:"\f225"}.jetpack-social-navigation a[href*="mailto:"]:before{content:"\f410"}.jetpack-social-navigation a[href*="facebook.com"]:before{content:"\f203"}.jetpack-social-navigation a[href*="flickr.com"]:before{content:"\f211"}.jetpack-social-navigation a[href*="foursquare.com"]:before{content:"\f226"}.jetpack-social-navigation a[href*="github.com"]:before{content:"\f200"}.jetpack-social-navigation a[href*="plus.google.com"]:before{content:"\f206"}.jetpack-social-navigation a[href*="instagram.com"]:before{content:"\f215"}.jetpack-social-navigation a[href*="linkedin.com"]:before{content:"\f208"}.jetpack-social-navigation a[href*="path.com"]:before{content:"\f219"}.jetpack-social-navigation a[href*="pinterest.com"]:before{content:"\f210"}.jetpack-social-navigation a[href*="getpocket.com"]:before{content:"\f224"}.jetpack-social-navigation a[href*="polldaddy.com"]:before{content:"\f217"}.jetpack-social-navigation a[href*="reddit.com"]:before{content:"\f222"}.jetpack-social-navigation a[href$="/feed/"]:before{content:"\f413"}.jetpack-social-navigation a[href*="skype:"]:before{content:"\f220"}.jetpack-social-navigation a[href*="spotify.com"]:before{content:"\f515"}.jetpack-social-navigation a[href*="stumbleupon.com"]:before{content:"\f223"}.jetpack-social-navigation a[href*="tumblr.com"]:before{content:"\f214"}.jetpack-social-navigation a[href*="twitch.tv"]:before{content:"\f516"}.jetpack-social-navigation a[href*="twitter.com"]:before{content:"\f202"}.jetpack-social-navigation a[href*="vimeo.com"]:before{content:"\f212"}.jetpack-social-navigation a[href*="vine.co"]:before{content:"\f517"}.jetpack-social-navigation a[href*="wordpress.com"]:before,.jetpack-social-navigation a[href*="wordpress.org"]:before{content:"\f205"}.jetpack-social-navigation a[href*="youtube.com"]:before{content:"\f213"}.tiled-gallery{clear:both;margin:0 0 20px;overflow:hidden}.tiled-gallery img{margin:2px!important}.tiled-gallery .gallery-group{float:left;position:relative}.tiled-gallery .tiled-gallery-item{float:left;margin:0;position:relative;width:inherit}.tiled-gallery .gallery-row{overflow:hidden}.tiled-gallery .tiled-gallery-item a{background:0 0;border:none;color:inherit;margin:0;padding:0;text-decoration:none;width:auto}.tiled-gallery .tiled-gallery-item img,.tiled-gallery .tiled-gallery-item img:hover{background:0 0;border:none;box-shadow:none;max-width:100%;padding:0;vertical-align:middle}.tiled-gallery-caption{background:#eee;background:rgba(255,255,255,.8);color:#333;font-size:13px;font-weight:400;overflow:hidden;padding:10px 0;position:absolute;bottom:0;text-indent:10px;text-overflow:ellipsis;width:100%;white-space:nowrap}.tiled-gallery .tiled-gallery-item-small .tiled-gallery-caption{font-size:11px}.widget-gallery .tiled-gallery-unresized{visibility:hidden;height:0;overflow:hidden}.tiled-gallery .tiled-gallery-item img.grayscale{position:absolute;left:0;top:0}.tiled-gallery .tiled-gallery-item img.grayscale:hover{opacity:0}.tiled-gallery.type-circle .tiled-gallery-item img{border-radius:50%!important}.tiled-gallery.type-circle .tiled-gallery-caption{display:none;opacity:0}.jetpack-display-remote-posts{margin:5px 0 20px}.jetpack-display-remote-posts h4{font-size:90%;margin:5px 0;padding:0}.jetpack-display-remote-posts h4 a{text-decoration:none}.jetpack-display-remote-posts p{margin:0!important;padding:0;line-height:1.4em!important;font-size:90%}.jetpack-display-remote-posts img{max-width:100%}.widget-grofile h4{margin:1em 0 .5em}.widget-grofile ul.grofile-urls{margin-left:0;overflow:hidden}.widget-grofile ul.grofile-accounts li{list-style:none;display:inline}.widget-grofile ul.grofile-accounts li::before{content:""!important}.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite.png);background-repeat:no-repeat;width:16px;height:16px;float:left;margin-right:8px;margin-bottom:8px}.rtl .widget-grofile .grofile-accounts-logo{margin-left:8px;margin-right:0}.grofile-thumbnail{width:500px;max-width:100%}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.widget-grofile .grofile-accounts-logo{background-image:url(//0.gravatar.com/images/grav-share-sprite-2x.png);background-size:16px 784px}}div[class^=gr_custom_container]{border:1px solid gray;border-radius:10px;padding:10px 5px;background-color:#FFF;color:#000}div[class^=gr_custom_container] a{color:#000}h2[class^=gr_custom_header]{display:none}div[class^=gr_custom_each_container]{width:100%;clear:both;margin-bottom:10px;overflow:auto;padding-bottom:4px;border-bottom:1px solid #aaa}div[class^=gr_custom_book_container]{float:right;overflow:hidden;height:60px;margin-left:4px;width:39px}div[class^=gr_custom_author]{font-size:10px}div[class^=gr_custom_tags]{font-size:10px;color:gray}div[class^=gr_custom_rating]{display:none}.widget_wpcom_social_media_icons_widget ul{list-style-type:none;margin-left:0}.widget_wpcom_social_media_icons_widget li{border:0;display:inline;margin-right:.5em}.widget_wpcom_social_media_icons_widget li a{border:0;text-decoration:none}.widget_wpcom_social_media_icons_widget .genericon{font-family:Genericons}.widget_wpcom_social_media_icons_widget .screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.widget_wpcom_social_media_icons_widget .screen-reader-text:active,.widget_wpcom_social_media_icons_widget .screen-reader-text:focus,.widget_wpcom_social_media_icons_widget .screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-size:.875rem;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.widgets-grid-layout{width:100%}.widgets-grid-layout:after,.widgets-grid-layout:before{content:" ";display:table}.widgets-grid-layout:after{clear:both}.widget-grid-view-image{float:left;max-width:50%}.widget-grid-view-image a{display:block;margin:0 2px 4px 0}.widget-grid-view-image:image:nth-child(even){float:right}.widget-grid-view-image:nth-child(even) a{margin:0 0 4px 2px}.widgets-grid-layout .widget-grid-view-image img{max-width:100%;height:auto}.widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:0 0;clear:none;float:left;margin:0 -5px -3px 0;padding:0 8px 6px 0;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:0 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widgets-list-layout{padding:0;margin:0;list-style-type:none}.widgets-list-layout li:after,.widgets-list-layout li:before{content:"";display:table}.widgets-list-layout li:after{clear:both}.widgets-list-layout li{zoom:1;margin-bottom:1em;list-style-type:none!important}.widgets-list-layout .widgets-list-layout-blavatar{float:left;width:21.276596%;max-width:40px;height:auto}.widgets-list-layout-links{float:right;width:73.404255%}.widgets-list-layout span{opacity:.5}.widgets-list-layout span:hover{opacity:.8}
functions.global.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file is meant to be the home for any generic & reusable functions
4
+ * that can be accessed anywhere within Jetpack.
5
+ *
6
+ * This file is loaded whether or not Jetpack is active.
7
+ *
8
+ * Please namespace with jetpack_
9
+ * Please write docblocks
10
+ */
functions.photon.php CHANGED
@@ -12,6 +12,21 @@
12
  function jetpack_photon_url( $image_url, $args = array(), $scheme = null ) {
13
  $image_url = trim( $image_url );
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  /**
16
  * Allow specific image URls to avoid going through Photon.
17
  *
12
  function jetpack_photon_url( $image_url, $args = array(), $scheme = null ) {
13
  $image_url = trim( $image_url );
14
 
15
+ if ( class_exists( 'Jetpack') ) {
16
+ /**
17
+ * Disables Photon URL processing for local development
18
+ *
19
+ * @module photon
20
+ *
21
+ * @since 4.1.0
22
+ *
23
+ * @param bool false Result of Jetpack::is_development_mode.
24
+ */
25
+ if ( true === apply_filters( 'jetpack_photon_development_mode', Jetpack::is_development_mode() ) ) {
26
+ return $image_url;
27
+ }
28
+ }
29
+
30
  /**
31
  * Allow specific image URls to avoid going through Photon.
32
  *
jetpack.php CHANGED
@@ -5,7 +5,7 @@
5
  * Plugin URI: http://jetpack.com
6
  * 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.
7
  * Author: Automattic
8
- * Version: 4.0.4
9
  * Author URI: http://jetpack.com
10
  * License: GPL2+
11
  * Text Domain: jetpack
@@ -14,7 +14,7 @@
14
 
15
  define( 'JETPACK__MINIMUM_WP_VERSION', '4.4' );
16
 
17
- define( 'JETPACK__VERSION', '4.0.4' );
18
  define( 'JETPACK_MASTER_USER', true );
19
  define( 'JETPACK__API_VERSION', 1 );
20
  define( 'JETPACK__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
@@ -57,6 +57,7 @@ require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-error.php' );
57
  require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-heartbeat.php' );
58
  require_once( JETPACK__PLUGIN_DIR . 'class.photon.php' );
59
  require_once( JETPACK__PLUGIN_DIR . 'functions.photon.php' );
 
60
  require_once( JETPACK__PLUGIN_DIR . 'functions.compat.php' );
61
  require_once( JETPACK__PLUGIN_DIR . 'functions.gallery.php' );
62
  require_once( JETPACK__PLUGIN_DIR . 'require-lib.php' );
5
  * Plugin URI: http://jetpack.com
6
  * 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.
7
  * Author: Automattic
8
+ * Version: 4.1.1
9
  * Author URI: http://jetpack.com
10
  * License: GPL2+
11
  * Text Domain: jetpack
14
 
15
  define( 'JETPACK__MINIMUM_WP_VERSION', '4.4' );
16
 
17
+ define( 'JETPACK__VERSION', '4.1.1' );
18
  define( 'JETPACK_MASTER_USER', true );
19
  define( 'JETPACK__API_VERSION', 1 );
20
  define( 'JETPACK__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
57
  require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-heartbeat.php' );
58
  require_once( JETPACK__PLUGIN_DIR . 'class.photon.php' );
59
  require_once( JETPACK__PLUGIN_DIR . 'functions.photon.php' );
60
+ require_once( JETPACK__PLUGIN_DIR . 'functions.global.php' );
61
  require_once( JETPACK__PLUGIN_DIR . 'functions.compat.php' );
62
  require_once( JETPACK__PLUGIN_DIR . 'functions.gallery.php' );
63
  require_once( JETPACK__PLUGIN_DIR . 'require-lib.php' );
json-endpoints.php CHANGED
@@ -31,17 +31,21 @@ require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-embeds-endpoint.p
31
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-site-endpoint.php' );
32
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-taxonomies-endpoint.php' );
33
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-taxonomy-endpoint.php' );
 
34
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-comments-endpoint.php' );
35
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-media-endpoint.php' );
36
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-post-types-endpoint.php' );
 
37
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-posts-endpoint.php' );
38
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-roles-endpoint.php' );
 
39
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-users-endpoint.php' );
40
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-user-endpoint.php' );
41
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-comment-endpoint.php' );
42
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-media-endpoint.php' );
43
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-post-endpoint.php' );
44
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-taxonomy-endpoint.php' );
 
45
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-user-endpoint.php' );
46
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-upload-media-endpoint.php' );
47
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-settings-endpoint.php' );
@@ -201,6 +205,22 @@ new WPCOM_JSON_API_List_Post_Types_Endpoint( array (
201
  )
202
  ) );
203
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  /*
205
  * Shortcode endpoints
206
  */
@@ -528,7 +548,7 @@ new WPCOM_JSON_API_Update_Post_Endpoint( array(
528
  'description' => 'Create a post.',
529
  'group' => 'posts',
530
  'stat' => 'posts:new',
531
- 'new_version' => '1.1',
532
  'max_version' => '1',
533
  'method' => 'POST',
534
  'path' => '/sites/%s/posts/new',
@@ -595,6 +615,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
595
  'description' => 'Create a post.',
596
  'group' => 'posts',
597
  'stat' => 'posts:new',
 
598
  'min_version' => '1.1',
599
  'max_version' => '1.1',
600
  'method' => 'POST',
@@ -628,6 +649,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
628
  'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
629
  'parent' => "(int) The post ID of the new post's parent.",
630
  'type' => "(string) The post type. Defaults to 'post'. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
 
631
  'categories' => "(array|string) Comma-separated list or array of categories (name or id)",
632
  'tags' => "(array|string) Comma-separated list or array of tags (name or id)",
633
  'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
@@ -698,8 +720,10 @@ new WPCOM_JSON_API_Update_Post_v1_2_Endpoint( array(
698
  'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
699
  'parent' => "(int) The post ID of the new post's parent.",
700
  'type' => "(string) The post type. Defaults to 'post'. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
 
701
  'categories' => "(array|string) Comma-separated list or array of category names",
702
  'tags' => "(array|string) Comma-separated list or array of tag names",
 
703
  'categories_by_id' => "(array|string) Comma-separated list or array of category IDs",
704
  'tags_by_id' => "(array|string) Comma-separated list or array of tag IDs",
705
  'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
@@ -737,7 +761,7 @@ new WPCOM_JSON_API_Update_Post_Endpoint( array(
737
  'description' => 'Edit a post.',
738
  'group' => 'posts',
739
  'stat' => 'posts:1:POST',
740
- 'new_version' => '1.1',
741
  'max_version' => '1',
742
  'method' => 'POST',
743
  'path' => '/sites/%s/posts/%d',
@@ -760,6 +784,7 @@ new WPCOM_JSON_API_Update_Post_Endpoint( array(
760
  'private' => 'Privately publish the post.',
761
  'draft' => 'Save the post as a draft.',
762
  'pending' => 'Mark the post as pending editorial approval.',
 
763
  ),
764
  'sticky' => array(
765
  'false' => 'Post is not marked as sticky.',
@@ -802,6 +827,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
802
  'description' => 'Edit a post.',
803
  'group' => 'posts',
804
  'stat' => 'posts:1:POST',
 
805
  'min_version' => '1.1',
806
  'max_version' => '1.1',
807
  'method' => 'POST',
@@ -826,6 +852,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
826
  'draft' => 'Save the post as a draft.',
827
  'future' => 'Schedule the post (alias for publish; you must also set a future date).',
828
  'pending' => 'Mark the post as pending editorial approval.',
 
829
  ),
830
  'sticky' => array(
831
  'false' => 'Post is not marked as sticky.',
@@ -833,6 +860,7 @@ new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
833
  ),
834
  'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
835
  'parent' => "(int) The post ID of the new post's parent.",
 
836
  'categories' => "(array|string) Comma-separated list or array of categories (name or id)",
837
  'tags' => "(array|string) Comma-separated list or array of tags (name or id)",
838
  'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
@@ -892,6 +920,7 @@ new WPCOM_JSON_API_Update_Post_v1_2_Endpoint( array(
892
  'draft' => 'Save the post as a draft.',
893
  'future' => 'Schedule the post (alias for publish; you must also set a future date).',
894
  'pending' => 'Mark the post as pending editorial approval.',
 
895
  ),
896
  'sticky' => array(
897
  'false' => 'Post is not marked as sticky.',
@@ -899,6 +928,8 @@ new WPCOM_JSON_API_Update_Post_v1_2_Endpoint( array(
899
  ),
900
  'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
901
  'parent' => "(int) The post ID of the new post's parent.",
 
 
902
  'categories' => "(array|string) Comma-separated list or array of category names",
903
  'categories_by_id' => "(array|string) Comma-separated list or array of category IDs",
904
  'tags' => "(array|string) Comma-separated list or array of tag names",
@@ -1909,6 +1940,133 @@ new WPCOM_JSON_API_Update_Taxonomy_Endpoint( array(
1909
  )
1910
  ) );
1911
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1912
  new WPCOM_JSON_API_List_Roles_Endpoint( array(
1913
  'description' => 'List the user roles of a site.',
1914
  'group' => '__do_not_document',
31
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-site-endpoint.php' );
32
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-taxonomies-endpoint.php' );
33
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-taxonomy-endpoint.php' );
34
+ require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-term-endpoint.php' );
35
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-comments-endpoint.php' );
36
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-media-endpoint.php' );
37
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-post-types-endpoint.php' );
38
+ require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-post-type-taxonomies-endpoint.php' );
39
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-posts-endpoint.php' );
40
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-roles-endpoint.php' );
41
+ require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-terms-endpoint.php' );
42
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-users-endpoint.php' );
43
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-user-endpoint.php' );
44
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-comment-endpoint.php' );
45
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-media-endpoint.php' );
46
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-post-endpoint.php' );
47
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-taxonomy-endpoint.php' );
48
+ require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-term-endpoint.php' );
49
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-user-endpoint.php' );
50
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-upload-media-endpoint.php' );
51
  require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-settings-endpoint.php' );
205
  )
206
  ) );
207
 
208
+ new WPCOM_JSON_API_List_Post_Type_Taxonomies_Endpoint( array (
209
+ 'description' => 'Get a list of taxonomies associated with a post type.',
210
+ 'group' => 'taxonomy',
211
+ 'stat' => 'sites:X:post-types:X:taxonomies',
212
+ 'method' => 'GET',
213
+ 'path' => '/sites/%s/post-types/%s/taxonomies',
214
+ 'path_labels' => array(
215
+ '$site' => '(int|string) Site ID or domain',
216
+ '$post_type' => '(string) Post type',
217
+ ),
218
+ 'response_format' => array(
219
+ 'found' => '(int) The number of taxonomies found',
220
+ 'taxonomies' => '(array:taxonomy) A list of available taxonomies',
221
+ )
222
+ ) );
223
+
224
  /*
225
  * Shortcode endpoints
226
  */
548
  'description' => 'Create a post.',
549
  'group' => 'posts',
550
  'stat' => 'posts:new',
551
+ 'new_version' => '1.2',
552
  'max_version' => '1',
553
  'method' => 'POST',
554
  'path' => '/sites/%s/posts/new',
615
  'description' => 'Create a post.',
616
  'group' => 'posts',
617
  'stat' => 'posts:new',
618
+ 'new_version' => '1.2',
619
  'min_version' => '1.1',
620
  'max_version' => '1.1',
621
  'method' => 'POST',
649
  'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
650
  'parent' => "(int) The post ID of the new post's parent.",
651
  'type' => "(string) The post type. Defaults to 'post'. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
652
+ 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of terms (name or id)',
653
  'categories' => "(array|string) Comma-separated list or array of categories (name or id)",
654
  'tags' => "(array|string) Comma-separated list or array of tags (name or id)",
655
  'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
720
  'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
721
  'parent' => "(int) The post ID of the new post's parent.",
722
  'type' => "(string) The post type. Defaults to 'post'. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
723
+ 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of term names',
724
  'categories' => "(array|string) Comma-separated list or array of category names",
725
  'tags' => "(array|string) Comma-separated list or array of tag names",
726
+ 'terms_by_id' => '(object) Mapping of taxonomy to comma-separated list or array of term IDs',
727
  'categories_by_id' => "(array|string) Comma-separated list or array of category IDs",
728
  'tags_by_id' => "(array|string) Comma-separated list or array of tag IDs",
729
  'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
761
  'description' => 'Edit a post.',
762
  'group' => 'posts',
763
  'stat' => 'posts:1:POST',
764
+ 'new_version' => '1.2',
765
  'max_version' => '1',
766
  'method' => 'POST',
767
  'path' => '/sites/%s/posts/%d',
784
  'private' => 'Privately publish the post.',
785
  'draft' => 'Save the post as a draft.',
786
  'pending' => 'Mark the post as pending editorial approval.',
787
+ 'trash' => 'Set the post as trashed.',
788
  ),
789
  'sticky' => array(
790
  'false' => 'Post is not marked as sticky.',
827
  'description' => 'Edit a post.',
828
  'group' => 'posts',
829
  'stat' => 'posts:1:POST',
830
+ 'new_version' => '1.2',
831
  'min_version' => '1.1',
832
  'max_version' => '1.1',
833
  'method' => 'POST',
852
  'draft' => 'Save the post as a draft.',
853
  'future' => 'Schedule the post (alias for publish; you must also set a future date).',
854
  'pending' => 'Mark the post as pending editorial approval.',
855
+ 'trash' => 'Set the post as trashed.',
856
  ),
857
  'sticky' => array(
858
  'false' => 'Post is not marked as sticky.',
860
  ),
861
  'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
862
  'parent' => "(int) The post ID of the new post's parent.",
863
+ 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of terms (name or id)',
864
  'categories' => "(array|string) Comma-separated list or array of categories (name or id)",
865
  'tags' => "(array|string) Comma-separated list or array of tags (name or id)",
866
  'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
920
  'draft' => 'Save the post as a draft.',
921
  'future' => 'Schedule the post (alias for publish; you must also set a future date).',
922
  'pending' => 'Mark the post as pending editorial approval.',
923
+ 'trash' => 'Set the post as trashed.',
924
  ),
925
  'sticky' => array(
926
  'false' => 'Post is not marked as sticky.',
928
  ),
929
  'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
930
  'parent' => "(int) The post ID of the new post's parent.",
931
+ 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of term names',
932
+ 'terms_by_id' => '(object) Mapping of taxonomy to comma-separated list or array of term IDs',
933
  'categories' => "(array|string) Comma-separated list or array of category names",
934
  'categories_by_id' => "(array|string) Comma-separated list or array of category IDs",
935
  'tags' => "(array|string) Comma-separated list or array of tag names",
1940
  )
1941
  ) );
1942
 
1943
+ new WPCOM_JSON_API_List_Terms_Endpoint( array(
1944
+ 'description' => 'Get a list of a site\'s terms by taxonomy.',
1945
+ 'group' => 'taxonomy',
1946
+ 'stat' => 'terms',
1947
+ 'method' => 'GET',
1948
+ 'path' => '/sites/%s/taxonomies/%s/terms',
1949
+ 'path_labels' => array(
1950
+ '$site' => '(int|string) Site ID or domain',
1951
+ '$taxonomy' => '(string) Taxonomy',
1952
+ ),
1953
+ 'query_parameters' => array(
1954
+ 'number' => '(int=100) The number of terms to return. Limit: 1000.',
1955
+ 'offset' => '(int=0) 0-indexed offset.',
1956
+ 'page' => '(int) Return the Nth 1-indexed page of terms. Takes precedence over the <code>offset</code> parameter.',
1957
+ 'search' => '(string) Limit response to include only terms whose names or slugs match the provided search query.',
1958
+ 'order' => array(
1959
+ 'ASC' => 'Return terms in ascending order.',
1960
+ 'DESC' => 'Return terms in descending order.',
1961
+ ),
1962
+ 'order_by' => array(
1963
+ 'name' => 'Order by the name of each tag.',
1964
+ 'count' => 'Order by the number of posts in each tag.',
1965
+ ),
1966
+ ),
1967
+ 'response_format' => array(
1968
+ 'found' => '(int) The number of terms returned.',
1969
+ 'terms' => '(array) Array of tag objects.',
1970
+ ),
1971
+ 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/taxonomies/post_tags/terms?number=5'
1972
+ ) );
1973
+
1974
+ new WPCOM_JSON_API_Get_Term_Endpoint( array(
1975
+ 'description' => 'Get information about a single term.',
1976
+ 'group' => 'taxonomy',
1977
+ 'stat' => 'terms:1',
1978
+ 'method' => 'GET',
1979
+ 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s',
1980
+ 'path_labels' => array(
1981
+ '$site' => '(int|string) Site ID or domain',
1982
+ '$taxonomy' => '(string) Taxonomy',
1983
+ '$slug' => '(string) Term slug',
1984
+ ),
1985
+ 'response_format' => array(
1986
+ 'ID' => '(int) The term ID.',
1987
+ 'name' => '(string) The name of the term.',
1988
+ 'slug' => '(string) The slug of the term.',
1989
+ 'description' => '(string) The description of the term.',
1990
+ 'post_count' => '(int) The number of posts using this term.',
1991
+ 'parent' => '(int) The parent ID for the term, if hierarchical.',
1992
+ ),
1993
+ 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/taxonomies/post_tag/terms/slug:wordpresscom'
1994
+ ) );
1995
+
1996
+ new WPCOM_JSON_API_Update_Term_Endpoint( array(
1997
+ 'description' => 'Create a new term.',
1998
+ 'group' => 'taxonomy',
1999
+ 'stat' => 'terms:new',
2000
+ 'method' => 'POST',
2001
+ 'path' => '/sites/%s/taxonomies/%s/terms/new',
2002
+ 'path_labels' => array(
2003
+ '$site' => '(int|string) Site ID or domain',
2004
+ '$taxonomy' => '(string) Taxonomy',
2005
+ ),
2006
+ 'request_format' => array(
2007
+ 'name' => '(string) Name of the term',
2008
+ 'description' => '(string) A description of the term',
2009
+ ),
2010
+ 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/new',
2011
+ 'example_request_data' => array(
2012
+ 'headers' => array(
2013
+ 'authorization' => 'Bearer YOUR_API_TOKEN'
2014
+ ),
2015
+ 'body' => array(
2016
+ 'name' => 'Ribs & Chicken'
2017
+ )
2018
+ )
2019
+ ) );
2020
+
2021
+ new WPCOM_JSON_API_Update_Term_Endpoint( array(
2022
+ 'description' => 'Edit a term.',
2023
+ 'group' => 'taxonomy',
2024
+ 'stat' => 'terms:1:POST',
2025
+ 'method' => 'POST',
2026
+ 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s',
2027
+ 'path_labels' => array(
2028
+ '$site' => '(int|string) Site ID or domain',
2029
+ '$taxonomy' => '(string) Taxonomy',
2030
+ '$slug' => '(string) The term slug',
2031
+ ),
2032
+ 'request_format' => array(
2033
+ 'name' => '(string) Name of the term',
2034
+ 'description' => '(string) A description of the term',
2035
+ ),
2036
+ 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/slug:testing-term',
2037
+ 'example_request_data' => array(
2038
+ 'headers' => array(
2039
+ 'authorization' => 'Bearer YOUR_API_TOKEN'
2040
+ ),
2041
+ 'body' => array(
2042
+ 'description' => 'The most delicious'
2043
+ )
2044
+ )
2045
+ ) );
2046
+
2047
+ new WPCOM_JSON_API_Update_Term_Endpoint( array(
2048
+ 'description' => 'Delete a term.',
2049
+ 'group' => 'taxonomy',
2050
+ 'stat' => 'terms:1:delete',
2051
+ 'method' => 'POST',
2052
+ 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s/delete',
2053
+ 'path_labels' => array(
2054
+ '$site' => '(int|string) Site ID or domain',
2055
+ '$taxonomy' => '(string) Taxonomy',
2056
+ '$slug' => '(string) The term slug',
2057
+ ),
2058
+ 'response_format' => array(
2059
+ 'slug' => '(string) The slug of the deleted term',
2060
+ 'success' => '(bool) Whether the operation was successful',
2061
+ ),
2062
+ 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/slug:$term/delete',
2063
+ 'example_request_data' => array(
2064
+ 'headers' => array(
2065
+ 'authorization' => 'Bearer YOUR_API_TOKEN'
2066
+ ),
2067
+ )
2068
+ ) );
2069
+
2070
  new WPCOM_JSON_API_List_Roles_Endpoint( array(
2071
  'description' => 'List the user roles of a site.',
2072
  'group' => '__do_not_document',
json-endpoints/class.wpcom-json-api-comment-endpoint.php CHANGED
@@ -121,7 +121,7 @@ abstract class WPCOM_JSON_API_Comment_Endpoint extends WPCOM_JSON_API_Endpoint {
121
  'ID' => (int) $post->ID,
122
  'title' => (string) get_the_title( $post->ID ),
123
  'type' => (string) $post->post_type,
124
- 'link' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
125
  );
126
  break;
127
  case 'author' :
@@ -155,7 +155,7 @@ abstract class WPCOM_JSON_API_Comment_Endpoint extends WPCOM_JSON_API_Endpoint {
155
  $response[$key] = (object) array(
156
  'ID' => (int) $parent->comment_ID,
157
  'type' => (string) ( $parent->comment_type ? $parent->comment_type : 'comment' ),
158
- 'link' => (string) $this->get_comment_link( $blog_id, $parent->comment_ID ),
159
  );
160
  } else {
161
  $response[$key] = false;
@@ -177,14 +177,12 @@ abstract class WPCOM_JSON_API_Comment_Endpoint extends WPCOM_JSON_API_Endpoint {
177
  case 'meta' :
178
  $response[$key] = (object) array(
179
  'links' => (object) array(
180
- 'self' => (string) $this->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID ),
181
- 'help' => (string) $this->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'help' ),
182
- 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
183
- 'post' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $comment->comment_post_ID ),
184
- 'replies' => (string) $this->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'replies/' ),
185
- // 'author' => (string) $this->get_user_link( $comment->user_id ),
186
- // 'via' => (string) $this->get_post_link( $ping_origin_blog_id, $ping_origin_post_id ), // Ping/trackbacks
187
- 'likes' => (string) $this->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'likes/' ),
188
  ),
189
  );
190
  break;
121
  'ID' => (int) $post->ID,
122
  'title' => (string) get_the_title( $post->ID ),
123
  'type' => (string) $post->post_type,
124
+ 'link' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
125
  );
126
  break;
127
  case 'author' :
155
  $response[$key] = (object) array(
156
  'ID' => (int) $parent->comment_ID,
157
  'type' => (string) ( $parent->comment_type ? $parent->comment_type : 'comment' ),
158
+ 'link' => (string) $this->links->get_comment_link( $blog_id, $parent->comment_ID ),
159
  );
160
  } else {
161
  $response[$key] = false;
177
  case 'meta' :
178
  $response[$key] = (object) array(
179
  'links' => (object) array(
180
+ 'self' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID ),
181
+ 'help' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'help' ),
182
+ 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
183
+ 'post' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $comment->comment_post_ID ),
184
+ 'replies' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'replies/' ),
185
+ 'likes' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'likes/' ),
 
 
186
  ),
187
  );
188
  break;
json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php CHANGED
@@ -10,13 +10,19 @@ class WPCOM_JSON_API_Get_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_End
10
 
11
  $args = $this->query_args();
12
 
13
- if ( false === strpos( $path, '/posts/slug:' ) ) {
14
- $get_by = 'ID';
15
- } else {
16
- $get_by = 'name';
 
17
  }
18
 
19
- $return = $this->get_post_by( $get_by, $post_id, $args['context'] );
 
 
 
 
 
20
 
21
  if ( !$return || is_wp_error( $return ) ) {
22
  return $return;
10
 
11
  $args = $this->query_args();
12
 
13
+ if ( false !== strpos( $path, '/posts/slug:' ) ) {
14
+ $post_id = $this->get_platform()->get_site( $blog_id )->get_post_id_by_name( $post_id );
15
+ if ( is_wp_error( $post_id ) ) {
16
+ return $post_id;
17
+ }
18
  }
19
 
20
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM &&
21
+ ! in_array( get_post_type( $post_id ), array( false, 'post', 'page', 'revision' ) ) ) {
22
+ $this->load_theme_functions();
23
+ }
24
+
25
+ $return = $this->get_post_by( 'ID', $post_id, $args['context'] );
26
 
27
  if ( !$return || is_wp_error( $return ) ) {
28
  return $return;
json-endpoints/class.wpcom-json-api-get-site-endpoint.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
4
 
5
  public static $site_format = array(
@@ -28,6 +27,24 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
28
  'meta' => '(object) Meta data',
29
  );
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  protected static $site_options_format = array(
32
  'timezone',
33
  'gmt_offset',
@@ -68,21 +85,26 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
68
  'frame_nonce',
69
  'page_on_front',
70
  'page_for_posts',
 
71
  'ak_vp_bundle_enabled'
72
  );
73
 
74
- protected static $jetpack_response_field_additions = array(
 
 
 
 
75
  'capabilities',
76
  'plan',
77
- 'subscribers_count'
78
  );
79
 
80
- protected static $jetpack_response_option_additions = array(
81
  'publicize_permanently_disabled',
82
  'ak_vp_bundle_enabled'
83
  );
84
 
85
  private $site;
 
86
  // protected $compact = null;
87
  protected $fields_to_include = '_all';
88
  protected $options_to_include = '_all';
@@ -103,6 +125,11 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
103
  return $blog_id;
104
  }
105
 
 
 
 
 
 
106
  $response = $this->build_current_site_response();
107
 
108
  /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
@@ -118,40 +145,36 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
118
  $this->options_to_include = empty( $query_args['options'] ) ? '_all' : array_map( 'trim', explode( ',', $query_args['options'] ) );
119
  }
120
 
121
- protected function include_response_field( $field ) {
122
- if ( is_array( $this->fields_to_include ) ) {
123
- return in_array( $field, $this->fields_to_include );
124
- }
125
- return true;
126
- }
127
-
128
  /**
129
  * Collects the necessary information to return for a site's response.
130
  *
131
  * @return (array)
132
  */
133
  public function build_current_site_response() {
 
134
  $blog_id = (int) $this->api->get_blog_id_for_output();
135
 
136
- $this->site = wpcom_get_sal_site( $blog_id );
137
 
138
- // Allow update in later versions
139
  /**
140
- * Filter the structure of information about the site to return.
141
- *
142
- * @module json-api
143
- *
144
- * @since 3.9.3
145
- *
146
- * @param array $site_format Data structure.
147
- */
148
- $response_format = apply_filters( 'sites_site_format', self::$site_format );
149
  $default_fields = array_keys( apply_filters( 'sites_site_format', self::$site_format ) );
150
 
151
  $response_keys = is_array( $this->fields_to_include ) ?
152
  array_intersect( $default_fields, $this->fields_to_include ) :
153
  $default_fields;
154
 
 
 
 
 
155
  return $this->render_response_keys( $response_keys );
156
  }
157
 
@@ -179,13 +202,13 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
179
  $response[ $key ] = $this->site->blog_id;
180
  break;
181
  case 'name' :
182
- $response[ $key ] = (string) htmlspecialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES );
183
  break;
184
  case 'description' :
185
- $response[ $key ] = (string) htmlspecialchars_decode( get_bloginfo( 'description' ), ENT_QUOTES );
186
  break;
187
  case 'URL' :
188
- $response[ $key ] = (string) home_url();
189
  break;
190
  case 'user_can_manage' :
191
  $response[ $key ] = $this->site->user_can_manage();
@@ -200,7 +223,7 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
200
  break;
201
  case 'post_count' :
202
  if ( $is_user_logged_in ) {
203
- $response[ $key ] = (int) wp_count_posts( 'post' )->publish;
204
  }
205
  break;
206
  case 'icon' :
@@ -217,7 +240,7 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
217
  $response[ $key ] = $this->site->is_following();
218
  break;
219
  case 'options':
220
- // small optimisation - don't recalculate
221
  $all_options = apply_filters( 'sites_site_options_format', self::$site_options_format );
222
 
223
  $options_response_keys = is_array( $this->options_to_include ) ?
@@ -228,7 +251,7 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
228
 
229
  $this->site->after_render_options( $options );
230
 
231
- $response[ $key ] = $options;
232
  break;
233
  case 'meta':
234
  $this->build_meta_response( $response );
@@ -242,16 +265,16 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
242
  case 'jetpack' :
243
  $response[ $key ] = $this->site->is_jetpack();
244
  break;
245
- case 'single_user_site' :
246
  $response[ $key ] = $this->site->is_single_user_site();
247
  break;
248
- case 'is_vip' :
249
  $response[ $key ] = $this->site->is_vip();
250
  break;
251
  case 'is_multisite' :
252
  $response[ $key ] = $this->site->is_multisite();
253
  break;
254
- case 'capabilities' :
255
  $response[ $key ] = $this->site->get_capabilities();
256
  break;
257
  case 'jetpack_modules':
@@ -270,148 +293,141 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
270
 
271
  protected function render_option_keys( &$options_response_keys ) {
272
  if ( ! current_user_can( 'edit_posts' ) ) {
273
- return;
274
  }
275
 
276
- global $wp_version;
277
-
278
  $options = array();
 
279
 
280
- $custom_front_page = ( 'page' === get_option( 'show_on_front' ) );
 
281
 
282
  foreach ( $options_response_keys as $key ) {
283
  switch ( $key ) {
284
  case 'timezone' :
285
- $options[ $key ] = (string) get_option( 'timezone_string' );
286
  break;
287
  case 'gmt_offset' :
288
- $options[ $key ] = (float) get_option( 'gmt_offset' );
289
  break;
290
  case 'videopress_enabled' :
291
- $options[ $key ] = $this->site->has_videopress();
292
  break;
293
  case 'upgraded_filetypes_enabled' :
294
- $options[ $key ] = $this->site->upgraded_filetypes_enabled();
295
  break;
296
  case 'login_url' :
297
- $options[ $key ] = wp_login_url();
298
  break;
299
  case 'admin_url' :
300
- $options[ $key ] = get_admin_url();
301
  break;
302
  case 'is_mapped_domain' :
303
- $options[ $key ] = $this->site->is_mapped_domain();
304
  break;
305
  case 'is_redirect' :
306
- $options[ $key ] = $this->site->is_redirect();
307
  break;
308
  case 'unmapped_url' :
309
- $options[ $key ] = get_site_url( $this->site->blog_id );
310
  break;
311
  case 'featured_images_enabled' :
312
- $options[ $key ] = $this->site->featured_images_enabled();
313
  break;
314
  case 'theme_slug' :
315
- $options[ $key ] = get_option( 'stylesheet' );
316
  break;
317
  case 'header_image' :
318
- $options[ $key ] = get_theme_mod( 'header_image_data' );
319
  break;
320
  case 'background_color' :
321
- $options[ $key ] = get_theme_mod( 'background_color' );
322
  break;
323
  case 'image_default_link_type' :
324
- $options[ $key ] = get_option( 'image_default_link_type' );
325
  break;
326
  case 'image_thumbnail_width' :
327
- $options[ $key ] = (int) get_option( 'thumbnail_size_w' );
328
  break;
329
  case 'image_thumbnail_height' :
330
- $options[ $key ] = (int) get_option( 'thumbnail_size_h' );
331
  break;
332
  case 'image_thumbnail_crop' :
333
- $options[ $key ] = get_option( 'thumbnail_crop' );
334
  break;
335
  case 'image_medium_width' :
336
- $options[ $key ] = (int) get_option( 'medium_size_w' );
337
  break;
338
  case 'image_medium_height' :
339
- $options[ $key ] = (int) get_option( 'medium_size_h' );
340
  break;
341
  case 'image_large_width' :
342
- $options[ $key ] = (int) get_option( 'large_size_w' );
343
  break;
344
  case 'image_large_height' :
345
- $options[ $key ] = (int) get_option( 'large_size_h' );
346
  break;
347
  case 'permalink_structure' :
348
- $options[ $key ] = get_option( 'permalink_structure' );
349
  break;
350
  case 'post_formats' :
351
- $options[ $key ] = $this->site->get_post_formats();
352
  break;
353
  case 'default_post_format' :
354
- $options[ $key ] = get_option( 'default_post_format' );
355
  break;
356
  case 'default_category' :
357
- $options[ $key ] = (int) get_option( 'default_category' );
358
  break;
359
  case 'allowed_file_types' :
360
- $options[ $key ] = $this->site->allowed_file_types();
361
  break;
362
  case 'show_on_front' :
363
- $options[ $key ] = get_option( 'show_on_front' );
364
  break;
365
  /** This filter is documented in modules/likes.php */
366
  case 'default_likes_enabled' :
367
- $options[ $key ] = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
368
  break;
369
  case 'default_sharing_status' :
370
- $default_sharing_status = false;
371
- if ( class_exists( 'Sharing_Service' ) ) {
372
- $ss = new Sharing_Service();
373
- $blog_services = $ss->get_blog_services();
374
- $default_sharing_status = ! empty( $blog_services['visible'] );
375
- }
376
- $options[ $key ] = (bool) $default_sharing_status;
377
  break;
378
  case 'default_comment_status' :
379
- $options[ $key ] = 'closed' !== get_option( 'default_comment_status' );
380
  break;
381
  case 'default_ping_status' :
382
- $options[ $key ] = 'closed' !== get_option( 'default_ping_status' );
383
  break;
384
  case 'software_version' :
385
- $options[ $key ] = $wp_version;
386
  break;
387
  case 'created_at' :
388
- $options[ $key ] = $this->site->get_registered_date();
389
  break;
390
  case 'wordads' :
391
- $options[ $key ] = $this->site->has_wordads();
392
  break;
393
  case 'publicize_permanently_disabled' :
394
- $publicize_permanently_disabled = false;
395
- if ( function_exists( 'is_publicize_permanently_disabled' ) ) {
396
- $publicize_permanently_disabled = is_publicize_permanently_disabled( $this->site->blog_id );
397
- }
398
- $options[ $key ] = $publicize_permanently_disabled;
399
  break;
400
  case 'frame_nonce' :
401
- $options[ $key ] = $this->site->get_frame_nonce();
402
  break;
403
  case 'page_on_front' :
404
  if ( $custom_front_page ) {
405
- $options[ $key ] = (int) get_option( 'page_on_front' );
406
  }
407
  break;
408
  case 'page_for_posts' :
409
  if ( $custom_front_page ) {
410
- $options[ $key ] = (int) get_option( 'page_for_posts' );
411
  }
412
  break;
 
 
 
413
  case 'ak_vp_bundle_enabled' :
414
- $options[ $key ] = $this->site->get_ak_vp_bundle_enabled();
415
  }
416
  }
417
 
@@ -419,22 +435,20 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
419
  }
420
 
421
  protected function build_meta_response( &$response ) {
422
- $xmlrpc_scheme = apply_filters( 'wpcom_json_api_xmlrpc_scheme', parse_url( get_option( 'home' ), PHP_URL_SCHEME ) );
423
- $xmlrpc_url = site_url( 'xmlrpc.php', $xmlrpc_scheme );
424
  $response['meta'] = (object) array(
425
  'links' => (object) array(
426
- 'self' => (string) $this->get_site_link( $this->site->blog_id ),
427
- 'help' => (string) $this->get_site_link( $this->site->blog_id, 'help' ),
428
- 'posts' => (string) $this->get_site_link( $this->site->blog_id, 'posts/' ),
429
- 'comments' => (string) $this->get_site_link( $this->site->blog_id, 'comments/' ),
430
- 'xmlrpc' => (string) $xmlrpc_url,
431
  ),
432
  );
433
  }
434
 
435
  // apply any WPCOM-only response components to a Jetpack site response
436
  public function decorate_jetpack_response( &$response ) {
437
- $this->site = wpcom_get_sal_site( $blog_id );
438
 
439
  // ensure the response is marked as being from Jetpack
440
  $response->jetpack = true;
@@ -445,14 +459,32 @@ class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
445
  $response->{ $key } = $value;
446
  }
447
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
448
  // render additional options
449
  if ( $response->options ) {
450
  $wpcom_options_response = $this->render_option_keys( self::$jetpack_response_option_additions );
451
 
452
- foreach( $wpcom_options_response as $key => $value ) {
453
  $response->options[ $key ] = $value;
454
  }
455
- return (string) get_bloginfo( 'language' );
456
  }
457
 
458
  return $response; // possibly no need since it's modified in place
1
  <?php
 
2
  class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
3
 
4
  public static $site_format = array(
27
  'meta' => '(object) Meta data',
28
  );
29
 
30
+ protected static $no_member_fields = array(
31
+ 'ID',
32
+ 'name',
33
+ 'description',
34
+ 'URL',
35
+ 'jetpack',
36
+ 'post_count',
37
+ 'subscribers_count',
38
+ 'lang',
39
+ 'locale',
40
+ 'icon',
41
+ 'logo',
42
+ 'visible',
43
+ 'is_private',
44
+ 'is_following',
45
+ 'meta',
46
+ );
47
+
48
  protected static $site_options_format = array(
49
  'timezone',
50
  'gmt_offset',
85
  'frame_nonce',
86
  'page_on_front',
87
  'page_for_posts',
88
+ 'headstart',
89
  'ak_vp_bundle_enabled'
90
  );
91
 
92
+ protected static $jetpack_response_field_additions = array(
93
+ 'subscribers_count',
94
+ );
95
+
96
+ protected static $jetpack_response_field_member_additions = array(
97
  'capabilities',
98
  'plan',
 
99
  );
100
 
101
+ protected static $jetpack_response_option_additions = array(
102
  'publicize_permanently_disabled',
103
  'ak_vp_bundle_enabled'
104
  );
105
 
106
  private $site;
107
+
108
  // protected $compact = null;
109
  protected $fields_to_include = '_all';
110
  protected $options_to_include = '_all';
125
  return $blog_id;
126
  }
127
 
128
+ // TODO: enable this when we can do so without being interfered with by
129
+ // other endpoints that might be wrapping this one.
130
+ // Uncomment and see failing test: test_jetpack_site_should_have_true_jetpack_property_via_site_meta
131
+ // $this->filter_fields_and_options();
132
+
133
  $response = $this->build_current_site_response();
134
 
135
  /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
145
  $this->options_to_include = empty( $query_args['options'] ) ? '_all' : array_map( 'trim', explode( ',', $query_args['options'] ) );
146
  }
147
 
 
 
 
 
 
 
 
148
  /**
149
  * Collects the necessary information to return for a site's response.
150
  *
151
  * @return (array)
152
  */
153
  public function build_current_site_response() {
154
+
155
  $blog_id = (int) $this->api->get_blog_id_for_output();
156
 
157
+ $this->site = $this->get_platform()->get_site( $blog_id );
158
 
 
159
  /**
160
+ * Filter the structure of information about the site to return.
161
+ *
162
+ * @module json-api
163
+ *
164
+ * @since 3.9.3
165
+ *
166
+ * @param array $site_format Data structure.
167
+ */
 
168
  $default_fields = array_keys( apply_filters( 'sites_site_format', self::$site_format ) );
169
 
170
  $response_keys = is_array( $this->fields_to_include ) ?
171
  array_intersect( $default_fields, $this->fields_to_include ) :
172
  $default_fields;
173
 
174
+ if ( ! is_user_member_of_blog( get_current_user(), $blog_id ) ) {
175
+ $response_keys = array_intersect( $response_keys, self::$no_member_fields );
176
+ }
177
+
178
  return $this->render_response_keys( $response_keys );
179
  }
180
 
202
  $response[ $key ] = $this->site->blog_id;
203
  break;
204
  case 'name' :
205
+ $response[ $key ] = $this->site->get_name();
206
  break;
207
  case 'description' :
208
+ $response[ $key ] = $this->site->get_description();
209
  break;
210
  case 'URL' :
211
+ $response[ $key ] = $this->site->get_url();
212
  break;
213
  case 'user_can_manage' :
214
  $response[ $key ] = $this->site->user_can_manage();
223
  break;
224
  case 'post_count' :
225
  if ( $is_user_logged_in ) {
226
+ $response[ $key ] = $this->site->get_post_count();
227
  }
228
  break;
229
  case 'icon' :
240
  $response[ $key ] = $this->site->is_following();
241
  break;
242
  case 'options':
243
+ // small optimisation - don't recalculate
244
  $all_options = apply_filters( 'sites_site_options_format', self::$site_options_format );
245
 
246
  $options_response_keys = is_array( $this->options_to_include ) ?
251
 
252
  $this->site->after_render_options( $options );
253
 
254
+ $response[ $key ] = (object) $options;
255
  break;
256
  case 'meta':
257
  $this->build_meta_response( $response );
265
  case 'jetpack' :
266
  $response[ $key ] = $this->site->is_jetpack();
267
  break;
268
+ case 'single_user_site' :
269
  $response[ $key ] = $this->site->is_single_user_site();
270
  break;
271
+ case 'is_vip' :
272
  $response[ $key ] = $this->site->is_vip();
273
  break;
274
  case 'is_multisite' :
275
  $response[ $key ] = $this->site->is_multisite();
276
  break;
277
+ case 'capabilities' :
278
  $response[ $key ] = $this->site->get_capabilities();
279
  break;
280
  case 'jetpack_modules':
293
 
294
  protected function render_option_keys( &$options_response_keys ) {
295
  if ( ! current_user_can( 'edit_posts' ) ) {
296
+ return array();
297
  }
298
 
 
 
299
  $options = array();
300
+ $site = $this->site;
301
 
302
+ $custom_front_page = $site->is_custom_front_page();
303
+
304
 
305
  foreach ( $options_response_keys as $key ) {
306
  switch ( $key ) {
307
  case 'timezone' :
308
+ $options[ $key ] = $site->get_timezone();
309
  break;
310
  case 'gmt_offset' :
311
+ $options[ $key ] = $site->get_gmt_offset();
312
  break;
313
  case 'videopress_enabled' :
314
+ $options[ $key ] = $site->has_videopress();
315
  break;
316
  case 'upgraded_filetypes_enabled' :
317
+ $options[ $key ] = $site->upgraded_filetypes_enabled();
318
  break;
319
  case 'login_url' :
320
+ $options[ $key ] = $site->get_login_url();
321
  break;
322
  case 'admin_url' :
323
+ $options[ $key ] = $site->get_admin_url();
324
  break;
325
  case 'is_mapped_domain' :
326
+ $options[ $key ] = $site->is_mapped_domain();
327
  break;
328
  case 'is_redirect' :
329
+ $options[ $key ] = $site->is_redirect();
330
  break;
331
  case 'unmapped_url' :
332
+ $options[ $key ] = $site->get_unmapped_url();
333
  break;
334
  case 'featured_images_enabled' :
335
+ $options[ $key ] = $site->featured_images_enabled();
336
  break;
337
  case 'theme_slug' :
338
+ $options[ $key ] = $site->get_theme_slug();
339
  break;
340
  case 'header_image' :
341
+ $options[ $key ] = $site->get_header_image();
342
  break;
343
  case 'background_color' :
344
+ $options[ $key ] = $site->get_background_color();
345
  break;
346
  case 'image_default_link_type' :
347
+ $options[ $key ] = $site->get_image_default_link_type();
348
  break;
349
  case 'image_thumbnail_width' :
350
+ $options[ $key ] = $site->get_image_thumbnail_width();
351
  break;
352
  case 'image_thumbnail_height' :
353
+ $options[ $key ] = $site->get_image_thumbnail_height();
354
  break;
355
  case 'image_thumbnail_crop' :
356
+ $options[ $key ] = $site->get_image_thumbnail_crop();
357
  break;
358
  case 'image_medium_width' :
359
+ $options[ $key ] = $site->get_image_medium_width();
360
  break;
361
  case 'image_medium_height' :
362
+ $options[ $key ] = $site->get_image_medium_height();
363
  break;
364
  case 'image_large_width' :
365
+ $options[ $key ] = $site->get_image_large_width();
366
  break;
367
  case 'image_large_height' :
368
+ $options[ $key ] = $site->get_image_large_height();
369
  break;
370
  case 'permalink_structure' :
371
+ $options[ $key ] = $site->get_permalink_structure();
372
  break;
373
  case 'post_formats' :
374
+ $options[ $key ] = $site->get_post_formats();
375
  break;
376
  case 'default_post_format' :
377
+ $options[ $key ] = $site->get_default_post_format();
378
  break;
379
  case 'default_category' :
380
+ $options[ $key ] = $site->get_default_category();
381
  break;
382
  case 'allowed_file_types' :
383
+ $options[ $key ] = $site->allowed_file_types();
384
  break;
385
  case 'show_on_front' :
386
+ $options[ $key ] = $site->get_show_on_front();
387
  break;
388
  /** This filter is documented in modules/likes.php */
389
  case 'default_likes_enabled' :
390
+ $options[ $key ] = $site->get_default_likes_enabled();
391
  break;
392
  case 'default_sharing_status' :
393
+ $options[ $key ] = $site->get_default_sharing_status();
 
 
 
 
 
 
394
  break;
395
  case 'default_comment_status' :
396
+ $options[ $key ] = $site->get_default_comment_status();
397
  break;
398
  case 'default_ping_status' :
399
+ $options[ $key ] = $site->default_ping_status();
400
  break;
401
  case 'software_version' :
402
+ $options[ $key ] = $site->get_wordpress_version();
403
  break;
404
  case 'created_at' :
405
+ $options[ $key ] = $site->get_registered_date();
406
  break;
407
  case 'wordads' :
408
+ $options[ $key ] = $site->has_wordads();
409
  break;
410
  case 'publicize_permanently_disabled' :
411
+ $options[ $key ] = $site->is_publicize_permanently_disabled();
 
 
 
 
412
  break;
413
  case 'frame_nonce' :
414
+ $options[ $key ] = $site->get_frame_nonce();
415
  break;
416
  case 'page_on_front' :
417
  if ( $custom_front_page ) {
418
+ $options[ $key ] = $site->get_page_on_front();
419
  }
420
  break;
421
  case 'page_for_posts' :
422
  if ( $custom_front_page ) {
423
+ $options[ $key ] = $site->get_page_for_posts();
424
  }
425
  break;
426
+ case 'headstart' :
427
+ $options[ $key ] = $site->is_headstart();
428
+ break;
429
  case 'ak_vp_bundle_enabled' :
430
+ $options[ $key ] = $site->get_ak_vp_bundle_enabled();
431
  }
432
  }
433
 
435
  }
436
 
437
  protected function build_meta_response( &$response ) {
 
 
438
  $response['meta'] = (object) array(
439
  'links' => (object) array(
440
+ 'self' => (string) $this->links->get_site_link( $this->site->blog_id ),
441
+ 'help' => (string) $this->links->get_site_link( $this->site->blog_id, 'help' ),
442
+ 'posts' => (string) $this->links->get_site_link( $this->site->blog_id, 'posts/' ),
443
+ 'comments' => (string) $this->links->get_site_link( $this->site->blog_id, 'comments/' ),
444
+ 'xmlrpc' => (string) $this->site->get_xmlrpc_url(),
445
  ),
446
  );
447
  }
448
 
449
  // apply any WPCOM-only response components to a Jetpack site response
450
  public function decorate_jetpack_response( &$response ) {
451
+ $this->site = $this->get_platform()->get_site( $response->ID );
452
 
453
  // ensure the response is marked as being from Jetpack
454
  $response->jetpack = true;
459
  $response->{ $key } = $value;
460
  }
461
 
462
+ if ( is_user_member_of_blog( get_current_user(), $response->ID ) ) {
463
+ $wpcom_member_response = $this->render_response_keys( self::$jetpack_response_field_member_additions );
464
+
465
+ foreach( $wpcom_member_response as $key => $value ) {
466
+ $response->{ $key } = $value;
467
+ }
468
+ } else {
469
+ // ensure private data is not rendered for non members of the site
470
+ unset( $response->options );
471
+ unset( $response->is_vip );
472
+ unset( $response->single_user_site );
473
+ unset( $response->is_private );
474
+ unset( $response->capabilities );
475
+ unset( $response->lang );
476
+ unset( $response->user_can_manage );
477
+ unset( $response->is_multisite );
478
+ unset( $response->plan );
479
+ }
480
+
481
  // render additional options
482
  if ( $response->options ) {
483
  $wpcom_options_response = $this->render_option_keys( self::$jetpack_response_option_additions );
484
 
485
+ foreach ( $wpcom_options_response as $key => $value ) {
486
  $response->options[ $key ] = $value;
487
  }
 
488
  }
489
 
490
  return $response; // possibly no need since it's modified in place
json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php CHANGED
@@ -1,11 +1,4 @@
1
  <?php
2
- /*
3
- * WARNING: This file is distributed verbatim in Jetpack.
4
- * There should be nothing WordPress.com specific in this file.
5
- *
6
- * @hide-in-jetpack
7
- */
8
-
9
  class WPCOM_JSON_API_GET_Site_V1_2_Endpoint extends WPCOM_JSON_API_GET_Site_Endpoint {
10
 
11
  public static $site_format = array(
@@ -13,7 +6,9 @@ class WPCOM_JSON_API_GET_Site_V1_2_Endpoint extends WPCOM_JSON_API_GET_Site_Endp
13
  'name' => '(string) Title of site',
14
  'description' => '(string) Tagline or description of site',
15
  'URL' => '(string) Full URL to the site',
 
16
  'jetpack' => '(bool) Whether the site is a Jetpack site or not',
 
17
  'post_count' => '(int) The number of posts the site has',
18
  'subscribers_count' => '(int) The number of subscribers the site has',
19
  'locale' => '(string) Primary locale code of the site',
@@ -21,31 +16,23 @@ class WPCOM_JSON_API_GET_Site_V1_2_Endpoint extends WPCOM_JSON_API_GET_Site_Endp
21
  'logo' => '(array) The site logo, set in the Customizer',
22
  'visible' => '(bool) If this site is visible in the user\'s site list',
23
  'is_private' => '(bool) If the site is a private site or not',
 
 
24
  'is_following' => '(bool) If the current user is subscribed to this site in the reader',
25
  '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/',
 
26
  'updates' => '(array) An array of available updates for plugins, themes, wordpress, and languages.',
27
  'jetpack_modules' => '(array) A list of active Jetpack modules.',
28
  'meta' => '(object) Meta data',
29
  );
30
 
 
31
  function callback( $path = '', $blog_id = 0 ) {
32
  add_filter( 'sites_site_format', array( $this, 'site_format' ) );
33
 
34
  return parent::callback( $path, $blog_id );
35
  }
36
 
37
- //V1.2 renames lang to locale
38
- protected function process_locale( $key, $is_user_logged_in ) {
39
- if ( $is_user_logged_in && 'locale' == $key ) {
40
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
41
- if ( ! is_jetpack_site() ) {
42
- return (string) get_blog_lang_code();
43
- }
44
- }
45
- }
46
- return false;
47
- }
48
-
49
  public function site_format( $format ) {
50
  return self::$site_format;
51
  }
1
  <?php
 
 
 
 
 
 
 
2
  class WPCOM_JSON_API_GET_Site_V1_2_Endpoint extends WPCOM_JSON_API_GET_Site_Endpoint {
3
 
4
  public static $site_format = array(
6
  'name' => '(string) Title of site',
7
  'description' => '(string) Tagline or description of site',
8
  'URL' => '(string) Full URL to the site',
9
+ 'capabilities' => '(array) Array of capabilities for the current user on this site.',
10
  'jetpack' => '(bool) Whether the site is a Jetpack site or not',
11
+ 'is_multisite' => '(bool) Whether the site is a Multisite site or not. Always true for WP.com sites.',
12
  'post_count' => '(int) The number of posts the site has',
13
  'subscribers_count' => '(int) The number of subscribers the site has',
14
  'locale' => '(string) Primary locale code of the site',
16
  'logo' => '(array) The site logo, set in the Customizer',
17
  'visible' => '(bool) If this site is visible in the user\'s site list',
18
  'is_private' => '(bool) If the site is a private site or not',
19
+ 'single_user_site' => '(bool) Whether the site is single user. Only returned for WP.com sites and for Jetpack sites with version 3.4 or higher.',
20
+ 'is_vip' => '(bool) If the site is a VIP site or not.',
21
  'is_following' => '(bool) If the current user is subscribed to this site in the reader',
22
  '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/',
23
+ 'plan' => '(array) Details of the current plan for this site.',
24
  'updates' => '(array) An array of available updates for plugins, themes, wordpress, and languages.',
25
  'jetpack_modules' => '(array) A list of active Jetpack modules.',
26
  'meta' => '(object) Meta data',
27
  );
28
 
29
+
30
  function callback( $path = '', $blog_id = 0 ) {
31
  add_filter( 'sites_site_format', array( $this, 'site_format' ) );
32
 
33
  return parent::callback( $path, $blog_id );
34
  }
35
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  public function site_format( $format ) {
37
  return self::$site_format;
38
  }
json-endpoints/class.wpcom-json-api-get-term-endpoint.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * WARNING: This file is distributed verbatim in Jetpack.
4
+ * There should be nothing WordPress.com specific in this file.
5
+ *
6
+ * @hide-in-jetpack
7
+ */
8
+
9
+ class WPCOM_JSON_API_Get_Term_Endpoint extends WPCOM_JSON_API_Endpoint {
10
+ // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
11
+ function callback( $path = '', $blog_id = 0, $taxonomy = 'category', $slug = 0 ) {
12
+ $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
13
+ if ( is_wp_error( $blog_id ) ) {
14
+ return $blog_id;
15
+ }
16
+
17
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
18
+ $this->load_theme_functions();
19
+ }
20
+
21
+ $taxonomy_meta = get_taxonomy( $taxonomy );
22
+ if ( false === $taxonomy_meta || ( ! $taxonomy_meta->public &&
23
+ ! current_user_can( $taxonomy_meta->cap->assign_terms ) ) ) {
24
+ return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
25
+ }
26
+
27
+ $args = $this->query_args();
28
+ $term = $this->get_taxonomy( $slug, $taxonomy, $args['context'] );
29
+ if ( ! $term || is_wp_error( $term ) ) {
30
+ return $term;
31
+ }
32
+
33
+ /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
34
+ do_action( 'wpcom_json_api_objects', 'terms' );
35
+
36
+ return $term;
37
+ }
38
+ }
json-endpoints/class.wpcom-json-api-list-comments-endpoint.php CHANGED
@@ -229,7 +229,9 @@ class WPCOM_JSON_API_List_Comments_Endpoint extends WPCOM_JSON_API_Comment_Endpo
229
  if ( $args['hierarchical'] ) {
230
  $walker = new WPCOM_JSON_API_List_Comments_Walker;
231
  $comment_ids = $walker->paged_walk( $comments, get_option( 'thread_comments_depth', -1 ), isset( $args['page'] ) ? $args['page'] : 1 , $args['number'] );
232
- $comments = array_map( 'get_comment', $comment_ids );
 
 
233
  }
234
 
235
  $return = array();
@@ -244,10 +246,12 @@ class WPCOM_JSON_API_List_Comments_Endpoint extends WPCOM_JSON_API_Comment_Endpo
244
  break;
245
  case 'comments' :
246
  $return_comments = array();
247
- foreach ( $comments as $comment ) {
248
- $the_comment = $this->get_comment( $comment->comment_ID, $args['context'] );
249
- if ( $the_comment && !is_wp_error( $the_comment ) ) {
250
- $return_comments[] = $the_comment;
 
 
251
  }
252
  }
253
 
229
  if ( $args['hierarchical'] ) {
230
  $walker = new WPCOM_JSON_API_List_Comments_Walker;
231
  $comment_ids = $walker->paged_walk( $comments, get_option( 'thread_comments_depth', -1 ), isset( $args['page'] ) ? $args['page'] : 1 , $args['number'] );
232
+ if ( ! empty( $comment_ids ) ) {
233
+ $comments = array_map( 'get_comment', $comment_ids );
234
+ }
235
  }
236
 
237
  $return = array();
246
  break;
247
  case 'comments' :
248
  $return_comments = array();
249
+ if ( ! empty( $comments ) ) {
250
+ foreach ( $comments as $comment ) {
251
+ $the_comment = $this->get_comment( $comment->comment_ID, $args['context'] );
252
+ if ( $the_comment && !is_wp_error( $the_comment ) ) {
253
+ $return_comments[] = $the_comment;
254
+ }
255
  }
256
  }
257
 
json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php CHANGED
@@ -36,4 +36,4 @@ class WPCOM_JSON_API_List_Embeds_Endpoint extends WPCOM_JSON_API_Endpoint {
36
 
37
  return $output;
38
  }
39
- }
36
 
37
  return $output;
38
  }
39
+ }
json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php CHANGED
@@ -40,7 +40,6 @@ class WPCOM_JSON_API_List_Media_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint {
40
  'post_type' => 'attachment',
41
  'post_status' => 'inherit',
42
  'post_parent' => isset( $args['post_ID'] ) ? $args['post_ID'] : null,
43
- 'offset' => isset( $args['offset'] ) ? $args['offset'] : null,
44
  'posts_per_page' => $args['number'],
45
  'post_mime_type' => isset( $args['mime_type'] ) ? $args['mime_type'] : null,
46
  'order' => isset( $args['order'] ) ? $args['order'] : 'DESC',
40
  'post_type' => 'attachment',
41
  'post_status' => 'inherit',
42
  'post_parent' => isset( $args['post_ID'] ) ? $args['post_ID'] : null,
 
43
  'posts_per_page' => $args['number'],
44
  'post_mime_type' => isset( $args['mime_type'] ) ? $args['mime_type'] : null,
45
  'order' => isset( $args['order'] ) ? $args['order'] : 'DESC',
json-endpoints/class.wpcom-json-api-list-post-type-taxonomies-endpoint.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * WARNING: This file is distributed verbatim in Jetpack.
4
+ * There should be nothing WordPress.com specific in this file.
5
+ *
6
+ * @hide-in-jetpack
7
+ */
8
+
9
+ class WPCOM_JSON_API_List_Post_Type_Taxonomies_Endpoint extends WPCOM_JSON_API_Endpoint {
10
+ static $taxonomy_keys_to_include = array(
11
+ 'name' => 'name',
12
+ 'label' => 'label',
13
+ 'labels' => 'labels',
14
+ 'description' => 'description',
15
+ 'hierarchical' => 'hierarchical',
16
+ 'public' => 'public',
17
+ 'cap' => 'capabilities',
18
+ );
19
+
20
+ // /sites/%s/post-types/%s/taxonomies -> $blog_id, $post_type
21
+ function callback( $path = '', $blog_id = 0, $post_type = 'post' ) {
22
+ $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
23
+ if ( is_wp_error( $blog_id ) ) {
24
+ return $blog_id;
25
+ }
26
+
27
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
28
+ $this->load_theme_functions();
29
+ }
30
+
31
+ /** This filter is documented in jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php */
32
+ if ( apply_filters( 'rest_api_localize_response', false ) ) {
33
+ // API localization occurs after the initial taxonomies have been
34
+ // registered, so re-register if localizing response
35
+ create_initial_taxonomies();
36
+ }
37
+
38
+ $args = $this->query_args();
39
+
40
+ $post_type_object = get_post_type_object( $post_type );
41
+ if ( ! $post_type_object || ( ! $post_type_object->publicly_queryable && (
42
+ ! current_user_can( $post_type_object->cap->edit_posts ) ) ) ) {
43
+ return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
44
+ }
45
+
46
+ // Get a list of available taxonomies
47
+ $taxonomy_objects = get_object_taxonomies( $post_type, 'objects' );
48
+
49
+ // Construct array of formatted objects
50
+ $formatted_taxonomy_objects = array();
51
+ foreach ( $taxonomy_objects as $taxonomy_object ) {
52
+ // Omit private taxonomies unless user has assign capability
53
+ if ( ! $taxonomy_object->public && ! current_user_can( $taxonomy_object->cap->assign_terms ) ) {
54
+ continue;
55
+ }
56
+
57
+ // Include only the desired keys in the response
58
+ $formatted_taxonomy_object = array();
59
+ foreach ( self::$taxonomy_keys_to_include as $key => $value ) {
60
+ $formatted_taxonomy_object[ $value ] = $taxonomy_object->{ $key };
61
+ }
62
+
63
+ $formatted_taxonomy_objects[] = $formatted_taxonomy_object;
64
+ }
65
+
66
+ return array(
67
+ 'found' => count( $formatted_taxonomy_objects ),
68
+ 'taxonomies' => $formatted_taxonomy_objects,
69
+ );
70
+ }
71
+ }
json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php CHANGED
@@ -8,6 +8,7 @@ class WPCOM_JSON_API_List_Post_Types_Endpoint extends WPCOM_JSON_API_Endpoint {
8
  'description' => 'description',
9
  'map_meta_cap' => 'map_meta_cap',
10
  'cap' => 'capabilities',
 
11
  );
12
 
13
  // /sites/%s/post-types -> $blog_id
@@ -23,9 +24,15 @@ class WPCOM_JSON_API_List_Post_Types_Endpoint extends WPCOM_JSON_API_Endpoint {
23
 
24
  $args = $this->query_args();
25
 
26
- // API localization occurs after the initial post types have been
27
- // registered, so re-register if localizing response
 
 
 
 
28
  if ( apply_filters( 'rest_api_localize_response', false ) ) {
 
 
29
  create_initial_post_types();
30
  }
31
 
8
  'description' => 'description',
9
  'map_meta_cap' => 'map_meta_cap',
10
  'cap' => 'capabilities',
11
+ 'hierarchical' => 'hierarchical',
12
  );
13
 
14
  // /sites/%s/post-types -> $blog_id
24
 
25
  $args = $this->query_args();
26
 
27
+ /**
28
+ * Whether API responses should be returned in a custom locale. False
29
+ * for Jetpack; may be true for WP.com requests.
30
+ *
31
+ * @since 3.9.2
32
+ */
33
  if ( apply_filters( 'rest_api_localize_response', false ) ) {
34
+ // API localization occurs after the initial post types have been
35
+ // registered, so re-register if localizing response
36
  create_initial_post_types();
37
  }
38
 
json-endpoints/class.wpcom-json-api-list-posts-endpoint.php CHANGED
@@ -104,7 +104,7 @@ class WPCOM_JSON_API_List_Posts_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
104
 
105
  if ( isset( $args['meta_key'] ) ) {
106
  $show = false;
107
- if ( $this->is_metadata_public( $args['meta_key'] ) )
108
  $show = true;
109
  if ( current_user_can( 'edit_post_meta', $query['post_type'], $args['meta_key'] ) )
110
  $show = true;
104
 
105
  if ( isset( $args['meta_key'] ) ) {
106
  $show = false;
107
+ if ( WPCOM_JSON_API_Metadata::is_public( $args['meta_key'] ) )
108
  $show = true;
109
  if ( current_user_can( 'edit_post_meta', $query['post_type'], $args['meta_key'] ) )
110
  $show = true;
json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php CHANGED
@@ -115,7 +115,7 @@ class WPCOM_JSON_API_List_Posts_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_E
115
 
116
  if ( isset( $args['meta_key'] ) ) {
117
  $show = false;
118
- if ( $this->is_metadata_public( $args['meta_key'] ) )
119
  $show = true;
120
  if ( current_user_can( 'edit_post_meta', $query['post_type'], $args['meta_key'] ) )
121
  $show = true;
@@ -296,7 +296,7 @@ class WPCOM_JSON_API_List_Posts_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_E
296
  if ( ! is_array( $args['type'] ) ) {
297
  $return[$key] = (object) array(
298
  'links' => (object) array(
299
- 'counts' => (string) $this->get_site_link( $blog_id, 'post-counts/' . $args['type'] ),
300
  )
301
  );
302
  }
115
 
116
  if ( isset( $args['meta_key'] ) ) {
117
  $show = false;
118
+ if ( WPCOM_JSON_API_Metadata::is_public( $args['meta_key'] ) )
119
  $show = true;
120
  if ( current_user_can( 'edit_post_meta', $query['post_type'], $args['meta_key'] ) )
121
  $show = true;
296
  if ( ! is_array( $args['type'] ) ) {
297
  $return[$key] = (object) array(
298
  'links' => (object) array(
299
+ 'counts' => (string) $this->links->get_site_link( $blog_id, 'post-counts/' . $args['type'] ),
300
  )
301
  );
302
  }
json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php CHANGED
@@ -19,9 +19,9 @@ class WPCOM_JSON_API_List_Shortcodes_Endpoint extends WPCOM_JSON_API_Endpoint {
19
  foreach ( $shortcode_tags as $tag => $class ) {
20
  if ( '__return_false' == $class )
21
  continue;
22
- $output['shortcodes'][] = $tag;
23
  }
24
 
25
  return $output;
26
  }
27
- }
19
  foreach ( $shortcode_tags as $tag => $class ) {
20
  if ( '__return_false' == $class )
21
  continue;
22
+ $output['shortcodes'][] = $tag;
23
  }
24
 
25
  return $output;
26
  }
27
+ }
json-endpoints/class.wpcom-json-api-list-terms-endpoint.php ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * WARNING: This file is distributed verbatim in Jetpack.
4
+ * There should be nothing WordPress.com specific in this file.
5
+ *
6
+ * @hide-in-jetpack
7
+ */
8
+
9
+ class WPCOM_JSON_API_List_Terms_Endpoint extends WPCOM_JSON_API_Endpoint {
10
+ // /sites/%s/taxonomies/%s/terms -> $blog_id, $taxonomy
11
+ function callback( $path = '', $blog_id = 0, $taxonomy = 'category' ) {
12
+ $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
13
+ if ( is_wp_error( $blog_id ) ) {
14
+ return $blog_id;
15
+ }
16
+
17
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
18
+ $this->load_theme_functions();
19
+ }
20
+
21
+ $taxonomy_meta = get_taxonomy( $taxonomy );
22
+ if ( false === $taxonomy_meta || ( ! $taxonomy_meta->public &&
23
+ ! current_user_can( $taxonomy_meta->cap->assign_terms ) ) ) {
24
+ return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
25
+ }
26
+
27
+ $args = $this->query_args();
28
+ $args = $this->process_args( $args );
29
+
30
+ $formatted_terms = $this->get_formatted_terms( $taxonomy, $args );
31
+
32
+ if ( ! empty( $formatted_terms ) ) {
33
+ /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
34
+ do_action( 'wpcom_json_api_objects', 'terms', count( $formatted_terms ) );
35
+ }
36
+
37
+ return array(
38
+ 'found' => (int) $this->get_found( $taxonomy, $args ),
39
+ 'terms' => (array) $formatted_terms
40
+ );
41
+ }
42
+
43
+ function process_args( $args ) {
44
+ $args['get'] = 'all';
45
+
46
+ if ( $args['number'] < 1 ) {
47
+ $args['number'] = 100;
48
+ } elseif ( 1000 < $args['number'] ) {
49
+ return new WP_Error( 'invalid_number', 'The number parameter must be less than or equal to 1000.', 400 );
50
+ }
51
+
52
+ if ( isset( $args['page'] ) ) {
53
+ if ( $args['page'] < 1 ) {
54
+ $args['page'] = 1;
55
+ }
56
+
57
+ $args['offset'] = ( $args['page'] - 1 ) * $args['number'];
58
+ unset( $args['page'] );
59
+ }
60
+
61
+ if ( $args['offset'] < 0 ) {
62
+ $args['offset'] = 0;
63
+ }
64
+
65
+ $args['orderby'] = $args['order_by'];
66
+ unset( $args['order_by'] );
67
+
68
+ unset( $args['context'], $args['pretty'], $args['http_envelope'], $args['fields'] );
69
+ return $args;
70
+ }
71
+
72
+ function get_found( $taxonomy, $args ) {
73
+ unset( $args['offset'] );
74
+ return wp_count_terms( $taxonomy, $args );
75
+ }
76
+
77
+ function get_formatted_terms( $taxonomy, $args ) {
78
+ $terms = get_terms( $taxonomy, $args );
79
+
80
+ $formatted_terms = array();
81
+ foreach ( $terms as $term ) {
82
+ $formatted_terms[] = $this->format_taxonomy( $term, $taxonomy, 'display' );
83
+ }
84
+
85
+ return $formatted_terms;
86
+ }
87
+ }
json-endpoints/class.wpcom-json-api-list-users-endpoint.php CHANGED
@@ -19,13 +19,14 @@ class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
19
 
20
  if ( $args['number'] < 1 ) {
21
  $args['number'] = 20;
22
- } elseif ( 100 < $args['number'] ) {
23
- return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 100.', 400 );
24
  }
25
 
26
  if ( $authors_only ) {
27
- if ( empty( $args['type'] ) )
28
  $args['type'] = 'post';
 
29
 
30
  if ( ! $this->is_post_type_allowed( $args['type'] ) ) {
31
  return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
@@ -47,8 +48,9 @@ class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
47
  'fields' => 'ID',
48
  );
49
 
50
- if ( $authors_only )
51
  $query['who'] = 'authors';
 
52
 
53
  if ( ! empty( $args['search'] ) ) {
54
  $query['search'] = $args['search'];
@@ -72,7 +74,7 @@ class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
72
  foreach ( array_keys( $this->response_format ) as $key ) {
73
  switch ( $key ) {
74
  case 'found' :
75
- $return[$key] = (int) $user_query->get_total();
76
  break;
77
  case 'users' :
78
  $users = array();
@@ -89,7 +91,7 @@ class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
89
  }
90
  }
91
 
92
- $return[$key] = $users;
93
  break;
94
  }
95
  }
19
 
20
  if ( $args['number'] < 1 ) {
21
  $args['number'] = 20;
22
+ } elseif ( 1000 < $args['number'] ) {
23
+ return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 1000.', 400 );
24
  }
25
 
26
  if ( $authors_only ) {
27
+ if ( empty( $args['type'] ) ) {
28
  $args['type'] = 'post';
29
+ }
30
 
31
  if ( ! $this->is_post_type_allowed( $args['type'] ) ) {
32
  return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
48
  'fields' => 'ID',
49
  );
50
 
51
+ if ( $authors_only ) {
52
  $query['who'] = 'authors';
53
+ }
54
 
55
  if ( ! empty( $args['search'] ) ) {
56
  $query['search'] = $args['search'];
74
  foreach ( array_keys( $this->response_format ) as $key ) {
75
  switch ( $key ) {
76
  case 'found' :
77
+ $return[ $key ] = (int) $user_query->get_total();
78
  break;
79
  case 'users' :
80
  $users = array();
91
  }
92
  }
93
 
94
+ $return[ $key ] = $users;
95
  break;
96
  }
97
  }
json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php CHANGED
@@ -454,11 +454,14 @@ class WPCOM_JSON_API_Menus_Complexify extends WPCOM_JSON_API_Menus_Translator {
454
  protected function location_name_exists( $location_name ) {
455
  $widget_location_names = wp_list_pluck( WPCOM_JSON_API_Menus_Widgets::get(), 'name' );
456
 
 
 
457
  if ( ! is_array( get_registered_nav_menus() ) ) {
458
  return false;
459
  }
460
 
461
  return array_key_exists( $location_name, get_registered_nav_menus() ) ||
 
462
  in_array( $location_name, $widget_location_names );
463
  }
464
 
454
  protected function location_name_exists( $location_name ) {
455
  $widget_location_names = wp_list_pluck( WPCOM_JSON_API_Menus_Widgets::get(), 'name' );
456
 
457
+ $existing_locations = get_nav_menu_locations();
458
+
459
  if ( ! is_array( get_registered_nav_menus() ) ) {
460
  return false;
461
  }
462
 
463
  return array_key_exists( $location_name, get_registered_nav_menus() ) ||
464
+ array_key_exists( $location_name, $existing_locations ) ||
465
  in_array( $location_name, $widget_location_names );
466
  }
467
 
json-endpoints/class.wpcom-json-api-post-endpoint.php CHANGED
@@ -272,7 +272,7 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
272
  $response[$key] = (object) array(
273
  'ID' => (int) $parent->ID,
274
  'type' => (string) $parent->post_type,
275
- 'link' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $parent->ID ),
276
  'title' => $parent_title,
277
  );
278
  } else {
@@ -443,7 +443,7 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
443
  foreach ( (array) has_meta( $post_id ) as $meta ) {
444
  // Don't expose protected fields.
445
  $show = false;
446
- if ( $this->is_metadata_public( $meta['meta_key'] ) )
447
  $show = true;
448
  if ( current_user_can( 'edit_post_meta', $post_id , $meta['meta_key'] ) )
449
  $show = true;
@@ -467,13 +467,11 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
467
  case 'meta' :
468
  $response[$key] = (object) array(
469
  'links' => (object) array(
470
- 'self' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
471
- 'help' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'help' ),
472
- 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
473
- // 'author' => (string) $this->get_user_link( $post->post_author ),
474
- // 'via' => (string) $this->get_post_link( $reblog_origin_blog_id, $reblog_origin_post_id ),
475
- 'replies' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'replies/' ),
476
- 'likes' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'likes/' ),
477
  ),
478
  );
479
  break;
@@ -665,7 +663,11 @@ abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
665
  return new WP_Error( 'invalid_post', 'Invalid post', 400 );
666
  }
667
 
668
- $posts = get_posts( array( 'name' => $name ) );
 
 
 
 
669
 
670
  if ( ! $posts || ! isset( $posts[0]->ID ) || ! $posts[0]->ID ) {
671
  $page = get_page_by_path( $name );
272
  $response[$key] = (object) array(
273
  'ID' => (int) $parent->ID,
274
  'type' => (string) $parent->post_type,
275
+ 'link' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $parent->ID ),
276
  'title' => $parent_title,
277
  );
278
  } else {
443
  foreach ( (array) has_meta( $post_id ) as $meta ) {
444
  // Don't expose protected fields.
445
  $show = false;
446
+ if ( WPCOM_JSON_API_Metadata::is_public( $meta['meta_key'] ) )
447
  $show = true;
448
  if ( current_user_can( 'edit_post_meta', $post_id , $meta['meta_key'] ) )
449
  $show = true;
467
  case 'meta' :
468
  $response[$key] = (object) array(
469
  'links' => (object) array(
470
+ 'self' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
471
+ 'help' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'help' ),
472
+ 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
473
+ 'replies' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'replies/' ),
474
+ 'likes' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'likes/' ),
 
 
475
  ),
476
  );
477
  break;
663
  return new WP_Error( 'invalid_post', 'Invalid post', 400 );
664
  }
665
 
666
+ $posts = get_posts( array(
667
+ 'name' => $name,
668
+ 'numberposts' => 1,
669
+ 'post_type' => $this->_get_whitelisted_post_types(),
670
+ ) );
671
 
672
  if ( ! $posts || ! isset( $posts[0]->ID ) || ! $posts[0]->ID ) {
673
  $page = get_page_by_path( $name );
json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php CHANGED
@@ -43,6 +43,7 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
43
  'menu_order' => '(int) (Pages Only) The order pages should appear in.',
44
  'page_template' => '(string) (Pages Only) The page template this page is using.',
45
  'publicize_URLs' => '(array:URL) Array of Twitter and Facebook URLs published by this post.',
 
46
  'tags' => '(object:tag) Hash of tags (keyed by tag name) applied to the post.',
47
  'categories' => '(object:category) Hash of categories (keyed by category name) applied to the post.',
48
  'attachments' => '(object:attachment) Hash of post attachments (keyed by attachment ID). Returns the most recent 20 attachments. Use the `/sites/$site/media` endpoint to query the attachments beyond the default of 20 that are returned here.',
@@ -66,31 +67,6 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
66
  parent::__construct( $args );
67
  }
68
 
69
- function is_metadata_public( $key ) {
70
- if ( empty( $key ) )
71
- return false;
72
-
73
- // Default whitelisted meta keys.
74
- $whitelisted_meta = array( '_thumbnail_id' );
75
-
76
- // whitelist of metadata that can be accessed
77
- /** This filter is documented in json-endpoints/class.wpcom-json-api-post-endpoint.php */
78
- if ( in_array( $key, apply_filters( 'rest_api_allowed_public_metadata', $whitelisted_meta ) ) )
79
- return true;
80
-
81
- if ( 0 === strpos( $key, 'geo_' ) )
82
- return true;
83
-
84
- if ( 0 === strpos( $key, '_wpas_' ) )
85
- return true;
86
-
87
- return false;
88
- }
89
-
90
- function the_password_form() {
91
- return __( 'This post is password protected.', 'jetpack' );
92
- }
93
-
94
  /**
95
  * Get a post by a specified field and value
96
  *
@@ -100,15 +76,14 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
100
  * @return array Post
101
  **/
102
  function get_post_by( $field, $field_value, $context = 'display' ) {
103
- global $blog_id;
104
 
105
- /** This filter is documented in class.json-api-endpoints.php */
106
- $is_jetpack = true === apply_filters( 'is_jetpack_site', false, $blog_id );
 
 
107
 
108
- if ( defined( 'GEO_LOCATION__CLASS' ) && class_exists( GEO_LOCATION__CLASS ) ) {
109
- $geo = call_user_func( array( GEO_LOCATION__CLASS, 'init' ) );
110
- } else {
111
- $geo = false;
112
  }
113
 
114
  if ( 'display' === $context ) {
@@ -123,415 +98,178 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
123
  add_shortcode( 'gallery', array( &$this, 'win8_gallery_shortcode' ) );
124
  }
125
 
126
- switch ( $field ) {
127
- case 'name' :
128
- $post_id = $this->get_post_id_by_name( $field_value );
129
- if ( is_wp_error( $post_id ) ) {
130
- return $post_id;
131
- }
132
- break;
133
- default :
134
- $post_id = (int) $field_value;
135
- break;
136
- }
137
 
138
- $post = get_post( $post_id, OBJECT, $context );
 
 
139
 
140
- if ( !$post || is_wp_error( $post ) ) {
141
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
142
- }
143
 
144
- if ( ! $this->is_post_type_allowed( $post->post_type ) && ( ! function_exists( 'is_post_freshly_pressed' ) || ! is_post_freshly_pressed( $post->ID ) ) ) {
145
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
 
146
  }
147
 
148
- // Permissions
149
- $capabilities = $this->get_current_user_capabilities( $post );
150
 
151
- switch ( $context ) {
152
- case 'edit' :
153
- if ( ! $capabilities['edit_post'] ) {
154
- return new WP_Error( 'unauthorized', 'User cannot edit post', 403 );
155
- }
156
- break;
157
- case 'display' :
158
- break;
159
- default :
160
- return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
161
- }
162
 
163
- $can_view = $this->user_can_view_post( $post->ID );
164
- if ( !$can_view || is_wp_error( $can_view ) ) {
165
- return $can_view;
166
- }
167
 
168
- $GLOBALS['post'] = $post;
 
169
 
170
- if ( 'display' === $context ) {
171
- setup_postdata( $post );
172
- }
 
 
173
 
174
- $response = array();
175
- foreach ( array_keys( $this->post_object_format ) as $key ) {
 
 
 
176
  switch ( $key ) {
177
  case 'ID' :
178
  // explicitly cast all output
179
  $response[$key] = (int) $post->ID;
180
  break;
181
  case 'site_ID' :
182
- $response[$key] = (int) $this->api->get_blog_id_for_output();
183
  break;
184
  case 'author' :
185
- $response[$key] = (object) $this->get_author( $post, 'edit' === $context && $capabilities['edit_post'] );
186
  break;
187
  case 'date' :
188
- $response[$key] = (string) $this->format_date( $post->post_date_gmt, $post->post_date );
189
  break;
190
  case 'modified' :
191
- $response[$key] = (string) $this->format_date( $post->post_modified_gmt, $post->post_modified );
192
  break;
193
  case 'title' :
194
- if ( 'display' === $context ) {
195
- $response[$key] = (string) get_the_title( $post->ID );
196
- } else {
197
- $response[$key] = (string) htmlspecialchars_decode( $post->post_title, ENT_QUOTES );
198
- }
199
  break;
200
  case 'URL' :
201
- if ( 'revision' === $post->post_type ) {
202
- $response[$key] = (string) esc_url_raw( get_permalink( $post->post_parent ) );
203
- } else {
204
- $response[$key] = (string) esc_url_raw( get_permalink( $post->ID ) );
205
- }
206
  break;
207
  case 'short_URL' :
208
- $response[$key] = (string) esc_url_raw( wp_get_shortlink( $post->ID ) );
209
  break;
210
  case 'content' :
211
- if ( 'display' === $context ) {
212
- add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
213
- $response[$key] = (string) $this->get_the_post_content_for_display();
214
- remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
215
- } else {
216
- $response[$key] = (string) $post->post_content;
217
- }
218
  break;
219
  case 'excerpt' :
220
- if ( 'display' === $context ) {
221
- add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
222
- ob_start();
223
- the_excerpt();
224
- $response[$key] = (string) ob_get_clean();
225
- remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
226
- } else {
227
- $response[$key] = htmlspecialchars_decode( (string) $post->post_excerpt, ENT_QUOTES );
228
- }
229
  break;
230
  case 'status' :
231
- $response[$key] = (string) get_post_status( $post->ID );
232
  break;
233
  case 'sticky' :
234
- $response[$key] = (bool) is_sticky( $post->ID );
235
  break;
236
  case 'slug' :
237
- $response[$key] = (string) $post->post_name;
238
  break;
239
  case 'guid' :
240
- $response[$key] = (string) $post->guid;
241
  break;
242
  case 'password' :
243
- $response[$key] = (string) $post->post_password;
244
- if ( 'edit' === $context ) {
245
- $response[$key] = htmlspecialchars_decode( (string) $response[$key], ENT_QUOTES );
246
- }
247
  break;
248
  case 'parent' : // (object|false)
249
- if ( $post->post_parent ) {
250
- $parent = get_post( $post->post_parent );
251
- if ( 'display' === $context ) {
252
- $parent_title = (string) get_the_title( $parent->ID );
253
- } else {
254
- $parent_title = (string) htmlspecialchars_decode( $post->post_title, ENT_QUOTES );
255
- }
256
- $response[$key] = (object) array(
257
- 'ID' => (int) $parent->ID,
258
- 'type' => (string) $parent->post_type,
259
- 'link' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $parent->ID ),
260
- 'title' => $parent_title,
261
- );
262
- } else {
263
- $response[$key] = false;
264
- }
265
  break;
266
  case 'type' :
267
- $response[$key] = (string) $post->post_type;
268
  break;
269
  case 'discussion' :
270
- $response[$key] = array(
271
- 'comments_open' => (bool) comments_open( $post->ID ),
272
- 'comment_status' => (string) $post->comment_status,
273
- 'pings_open' => (bool) pings_open( $post->ID ),
274
- 'ping_status' => (string) $post->ping_status,
275
- 'comment_count' => (int) $post->comment_count,
276
- );
277
  break;
278
  case 'likes_enabled' :
279
- /** This filter is documented in modules/likes.php */
280
- $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
281
- $post_likes_switched = (bool) get_post_meta( $post->ID, 'switch_like_status', true );
282
- $post_likes_enabled = $sitewide_likes_enabled;
283
- if ( $post_likes_switched ) {
284
- $post_likes_enabled = ! $post_likes_enabled;
285
- }
286
- $response[$key] = (bool) $post_likes_enabled;
287
  break;
288
  case 'sharing_enabled' :
289
- $show = true;
290
- /** This filter is documented in modules/sharedaddy/sharing-service.php */
291
- $show = apply_filters( 'sharing_show', $show, $post );
292
-
293
- $switched_status = get_post_meta( $post->ID, 'sharing_disabled', false );
294
-
295
- if ( !empty( $switched_status ) )
296
- $show = false;
297
- $response[$key] = (bool) $show;
298
  break;
299
  case 'like_count' :
300
- $response[$key] = (int) $this->api->post_like_count( $blog_id, $post->ID );
301
  break;
302
  case 'i_like' :
303
- $response[$key] = (bool) $this->api->is_liked( $blog_id, $post->ID );
304
  break;
305
  case 'is_reblogged':
306
- $response[$key] = (bool) $this->api->is_reblogged( $blog_id, $post->ID );
307
  break;
308
  case 'is_following':
309
- $response[$key] = (bool) $this->api->is_following( $blog_id );
310
  break;
311
  case 'global_ID':
312
- $response[$key] = (string) $this->api->add_global_ID( $blog_id, $post->ID );
313
  break;
314
  case 'featured_image' :
315
- if ( $is_jetpack && ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
316
- $response[ $key ] = get_post_meta( $post->ID, '_jetpack_featured_image', true );
317
- } else {
318
- $image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full' );
319
- if ( is_array( $image_attributes ) && isset( $image_attributes[0] ) ) {
320
- $response[ $key ] = (string) $image_attributes[0];
321
- } else {
322
- $response[ $key ] = '';
323
- }
324
- }
325
  break;
326
  case 'post_thumbnail' :
327
- $response[$key] = null;
328
-
329
- $thumb_id = get_post_thumbnail_id( $post->ID );
330
- if ( ! empty( $thumb_id ) ) {
331
- $attachment = get_post( $thumb_id );
332
- if ( ! empty( $attachment ) )
333
- $featured_image_object = $this->get_attachment( $attachment );
334
-
335
- if ( ! empty( $featured_image_object ) ) {
336
- $response[$key] = (object) $featured_image_object;
337
- }
338
- }
339
  break;
340
  case 'format' :
341
- $response[$key] = (string) get_post_format( $post->ID );
342
- if ( !$response[$key] ) {
343
- $response[$key] = 'standard';
344
- }
345
  break;
346
  case 'geo' : // (object|false)
347
- if ( !$geo ) {
348
- $response[$key] = false;
349
- } else {
350
- $geo_data = $geo->get_geo( 'post', $post->ID );
351
- $response[$key] = false;
352
- if ( $geo_data ) {
353
- $geo_data = array_intersect_key( $geo_data, array( 'latitude' => true, 'longitude' => true, 'address' => true, 'public' => true ) );
354
- if ( $geo_data ) {
355
- $response[$key] = (object) array(
356
- 'latitude' => isset( $geo_data['latitude'] ) ? (float) $geo_data['latitude'] : 0,
357
- 'longitude' => isset( $geo_data['longitude'] ) ? (float) $geo_data['longitude'] : 0,
358
- 'address' => isset( $geo_data['address'] ) ? (string) $geo_data['address'] : '',
359
- );
360
- } else {
361
- $response[$key] = false;
362
- }
363
- // Private
364
- if ( !isset( $geo_data['public'] ) || !$geo_data['public'] ) {
365
- if ( 'edit' !== $context || ! $capabilities['edit_post'] ) {
366
- // user can't access
367
- $response[$key] = false;
368
- }
369
- }
370
- }
371
- }
372
  break;
373
  case 'menu_order':
374
- $response[$key] = (int) $post->menu_order;
375
  break;
376
  case 'page_template':
377
- $response[$key] = (string) get_post_meta( $post->ID, '_wp_page_template', true );
378
  break;
379
  case 'publicize_URLs' :
380
- $publicize_URLs = array();
381
- $publicize = get_post_meta( $post->ID, 'publicize_results', true );
382
- if ( $publicize ) {
383
- foreach ( $publicize as $service => $data ) {
384
- switch ( $service ) {
385
- case 'twitter' :
386
- foreach ( $data as $datum ) {
387
- $publicize_URLs[] = esc_url_raw( "https://twitter.com/{$datum['user_id']}/status/{$datum['post_id']}" );
388
- }
389
- break;
390
- case 'fb' :
391
- foreach ( $data as $datum ) {
392
- $publicize_URLs[] = esc_url_raw( "https://www.facebook.com/permalink.php?story_fbid={$datum['post_id']}&id={$datum['user_id']}" );
393
- }
394
- break;
395
- }
396
- }
397
- }
398
- $response[$key] = (array) $publicize_URLs;
399
  break;
400
  case 'tags' :
401
- $response[$key] = array();
402
- $terms = wp_get_post_tags( $post->ID );
403
- foreach ( $terms as $term ) {
404
- if ( !empty( $term->name ) ) {
405
- $response[$key][$term->name] = $this->format_taxonomy( $term, 'post_tag', 'display' );
406
- }
407
- }
408
- $response[$key] = (object) $response[$key];
409
  break;
410
  case 'categories':
411
- $response[$key] = array();
412
- $terms = wp_get_object_terms( $post->ID, 'category', array( 'fields' => 'all' ) );
413
- foreach ( $terms as $term ) {
414
- if ( !empty( $term->name ) ) {
415
- $response[$key][$term->name] = $this->format_taxonomy( $term, 'category', 'display' );
416
- }
417
- }
418
- $response[$key] = (object) $response[$key];
419
  break;
420
  case 'attachments':
421
- $response[$key] = array();
422
- $_attachments = new WP_Query( array( 'post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'posts_per_page' => '20' ) );
423
- foreach ( $_attachments->posts as $attachment ) {
424
- $response[$key][$attachment->ID] = $this->get_media_item_v1_1( $attachment->ID );
425
- }
426
- $response['attachment_count'] = $_attachments->found_posts;
427
- $response[$key] = (object) $response[$key];
428
  break;
429
  case 'metadata' : // (array|false)
430
- $metadata = array();
431
- foreach ( (array) has_meta( $post_id ) as $meta ) {
432
- // Don't expose protected fields.
433
- $show = false;
434
- if ( $this->is_metadata_public( $meta['meta_key'] ) )
435
- $show = true;
436
- if ( current_user_can( 'edit_post_meta', $post_id , $meta['meta_key'] ) )
437
- $show = true;
438
-
439
- if ( !$show )
440
- continue;
441
-
442
- $metadata[] = array(
443
- 'id' => $meta['meta_id'],
444
- 'key' => $meta['meta_key'],
445
- 'value' => maybe_unserialize( $meta['meta_value'] ),
446
- );
447
- }
448
-
449
- if ( ! empty( $metadata ) ) {
450
- $response[$key] = $metadata;
451
- } else {
452
- $response[$key] = false;
453
- }
454
  break;
455
  case 'meta' :
456
- $response[$key] = (object) array(
457
- 'links' => (object) array(
458
- 'self' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
459
- 'help' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'help' ),
460
- 'site' => (string) $this->get_site_link( $this->api->get_blog_id_for_output() ),
461
- // 'author' => (string) $this->get_user_link( $post->post_author ),
462
- // 'via' => (string) $this->get_post_link( $reblog_origin_blog_id, $reblog_origin_post_id ),
463
- 'replies' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'replies/' ),
464
- 'likes' => (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'likes/' ),
465
- ),
466
- );
467
-
468
- // add autosave link if a more recent autosave exists
469
- if ( 'edit' === $context ) {
470
- $autosave = wp_get_post_autosave( $post_id );
471
- if ( $autosave && $autosave->post_modified > $post->post_modified )
472
- $response[$key]->links->autosave = (string) $this->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ) . '/autosave';
473
- }
474
-
475
  break;
476
  case 'capabilities' :
477
- $response[$key] = $capabilities;
478
  break;
479
  case 'revisions' :
480
- if ( 'edit' !== $context ) {
481
- continue;
482
- }
483
- $revisions = array();
484
- $post_revisions = wp_get_post_revisions( $post->ID );
485
-
486
- foreach ( $post_revisions as $_post ) {
487
- $revisions[] = $_post->ID;
488
  }
489
-
490
- $response[$key] = $revisions;
491
-
492
  break;
493
  case 'other_URLs' :
494
- $other_urls = array();
495
-
496
- if ( 'publish' !== $post->post_status ) {
497
- $other_urls = $this->get_post_permalink_suggestions( $post->ID, $post->post_title );
498
- }
499
-
500
- $response[$key] = (object) $other_urls;
501
  break;
502
  }
503
  }
504
 
505
- // WPCOM_JSON_API_Post_Endpoint::find_featured_worthy_media( $post );
506
- // $response['featured_media'] = self::find_featured_media( $response );
507
-
508
- unset( $GLOBALS['post'] );
509
  return $response;
510
  }
511
 
512
- // No Blog ID parameter. No Post ID parameter. Depends on globals.
513
- // Expects setup_postdata() to already have been run
514
- function get_the_post_content_for_display() {
515
- global $pages, $page;
516
-
517
- $old_pages = $pages;
518
- $old_page = $page;
519
-
520
- $content = join( "\n\n", $pages );
521
- $content = preg_replace( '/<!--more(.*?)?-->/', '', $content );
522
- $pages = array( $content );
523
- $page = 1;
524
-
525
- ob_start();
526
- the_content();
527
- $return = ob_get_clean();
528
-
529
- $pages = $old_pages;
530
- $page = $old_page;
531
-
532
- return $return;
533
- }
534
-
535
  function get_blog_post( $blog_id, $post_id, $context = 'display' ) {
536
  $blog_id = $this->api->get_blog_id( $blog_id );
537
  if ( !$blog_id || is_wp_error( $blog_id ) ) {
@@ -543,26 +281,6 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
543
  return $post;
544
  }
545
 
546
- /**
547
- * Supporting featured media in post endpoints. Currently on for wpcom blogs
548
- * since it's calling WPCOM_JSON_API_Read_Endpoint methods which presently
549
- * rely on wpcom specific functionality.
550
- *
551
- * @param WP_Post $post
552
- * @return object list of featured media
553
- */
554
- public static function find_featured_media( &$post ) {
555
-
556
- if ( class_exists( 'WPCOM_JSON_API_Read_Endpoint' ) ) {
557
- return WPCOM_JSON_API_Read_Endpoint::find_featured_worthy_media( (array) $post );
558
- } else {
559
- return (object) array();
560
- }
561
-
562
- }
563
-
564
-
565
-
566
  function win8_gallery_shortcode( $attr ) {
567
  global $post;
568
 
@@ -623,90 +341,4 @@ abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint
623
  }
624
  }
625
  }
626
-
627
- /**
628
- * Returns attachment object.
629
- *
630
- * @param $attachment attachment row
631
- *
632
- * @return (object)
633
- */
634
- function get_attachment( $attachment ) {
635
- $metadata = wp_get_attachment_metadata( $attachment->ID );
636
-
637
- $result = array(
638
- 'ID' => (int) $attachment->ID,
639
- 'URL' => (string) wp_get_attachment_url( $attachment->ID ),
640
- 'guid' => (string) $attachment->guid,
641
- 'mime_type' => (string) $attachment->post_mime_type,
642
- 'width' => (int) isset( $metadata['width'] ) ? $metadata['width'] : 0,
643
- 'height' => (int) isset( $metadata['height'] ) ? $metadata['height'] : 0,
644
- );
645
-
646
- if ( isset( $metadata['duration'] ) ) {
647
- $result['duration'] = (int) $metadata['duration'];
648
- }
649
-
650
- /** This filter is documented in class.jetpack-sync.php */
651
- return (object) apply_filters( 'get_attachment', $result );
652
- }
653
-
654
- /**
655
- * Get post-specific user capabilities
656
- * @param WP_Post $post post object
657
- * @return array array of post-level permissions; 'publish_post', 'delete_post', 'edit_post'
658
- */
659
- function get_current_user_capabilities( $post ) {
660
- return array(
661
- 'publish_post' => current_user_can( 'publish_post', $post ),
662
- 'delete_post' => current_user_can( 'delete_post', $post ),
663
- 'edit_post' => current_user_can( 'edit_post', $post )
664
- );
665
- }
666
-
667
- /**
668
- * Get extra post permalink suggestions
669
- * @param int $postID
670
- * @param string $title
671
- * @return array array of permalink suggestions: 'permalink_URL', 'suggested_slug'
672
- */
673
- function get_post_permalink_suggestions( $postID, $title ) {
674
- $suggestions = array();
675
- list( $suggestions['permalink_URL'], $suggestions['suggested_slug'] ) = get_sample_permalink( $postID, $title );
676
- return $suggestions;
677
- }
678
-
679
- /**
680
- * Get post ID by name
681
- *
682
- * Attempts to match name on post title and page path
683
- *
684
- * @param string $name
685
- *
686
- * @return int|object Post ID on success, WP_Error object on failure
687
- **/
688
- protected function get_post_id_by_name( $name ) {
689
- $name = sanitize_title( $name );
690
-
691
- if ( ! $name ) {
692
- return new WP_Error( 'invalid_post', 'Invalid post', 400 );
693
- }
694
-
695
- $posts = get_posts( array( 'name' => $name ) );
696
-
697
- if ( ! $posts || ! isset( $posts[0]->ID ) || ! $posts[0]->ID ) {
698
- $page = get_page_by_path( $name );
699
-
700
- if ( ! $page ) {
701
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
702
- }
703
-
704
- $post_id = $page->ID;
705
- } else {
706
- $post_id = (int) $posts[0]->ID;
707
- }
708
-
709
- return $post_id;
710
- }
711
-
712
  }
43
  'menu_order' => '(int) (Pages Only) The order pages should appear in.',
44
  'page_template' => '(string) (Pages Only) The page template this page is using.',
45
  'publicize_URLs' => '(array:URL) Array of Twitter and Facebook URLs published by this post.',
46
+ 'terms' => '(object) Hash of taxonomy names mapping to a hash of terms keyed by term name.',
47
  'tags' => '(object:tag) Hash of tags (keyed by tag name) applied to the post.',
48
  'categories' => '(object:category) Hash of categories (keyed by category name) applied to the post.',
49
  'attachments' => '(object:attachment) Hash of post attachments (keyed by attachment ID). Returns the most recent 20 attachments. Use the `/sites/$site/media` endpoint to query the attachments beyond the default of 20 that are returned here.',
67
  parent::__construct( $args );
68
  }
69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  /**
71
  * Get a post by a specified field and value
72
  *
76
  * @return array Post
77
  **/
78
  function get_post_by( $field, $field_value, $context = 'display' ) {
 
79
 
80
+ // validate input
81
+ if ( ! in_array( $field, array( 'ID', 'name' ) ) ) {
82
+ return new WP_Error( 'invalid_field', 'Invalid API FIELD', 400 );
83
+ }
84
 
85
+ if ( ! in_array( $context, array( 'display', 'edit' ) ) ) {
86
+ return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
 
 
87
  }
88
 
89
  if ( 'display' === $context ) {
98
  add_shortcode( 'gallery', array( &$this, 'win8_gallery_shortcode' ) );
99
  }
100
 
101
+ // fetch SAL post
102
+ $post = $this->get_sal_post_by( $field, $field_value, $context );
 
 
 
 
 
 
 
 
 
103
 
104
+ if ( is_wp_error( $post ) ) {
105
+ return $post;
106
+ }
107
 
108
+ $GLOBALS['post'] = $post;
 
 
109
 
110
+ // TODO: not sure where this one should go
111
+ if ( 'display' === $context ) {
112
+ setup_postdata( $post );
113
  }
114
 
115
+ $response = $this->render_response_keys( $post, $context, array_keys( $this->post_object_format ) );
 
116
 
117
+ unset( $GLOBALS['post'] );
 
 
 
 
 
 
 
 
 
 
118
 
119
+ return $response;
120
+ }
 
 
121
 
122
+ protected function get_sal_post_by( $field, $field_value, $context ) {
123
+ global $blog_id;
124
 
125
+ $site = $this->get_platform()->get_site( $blog_id );
126
+
127
+ $post = ( $field === 'name' ) ?
128
+ $site->get_post_by_name( $field_value, $context ) :
129
+ $site->get_post_by_id( $field_value, $context );
130
 
131
+ return $post;
132
+ }
133
+
134
+ private function render_response_keys( $post, $context, $keys ) {
135
+ foreach ( $keys as $key ) {
136
  switch ( $key ) {
137
  case 'ID' :
138
  // explicitly cast all output
139
  $response[$key] = (int) $post->ID;
140
  break;
141
  case 'site_ID' :
142
+ $response[$key] = $post->site->get_id();
143
  break;
144
  case 'author' :
145
+ $response[$key] = $post->get_author();
146
  break;
147
  case 'date' :
148
+ $response[$key] = $post->get_date();
149
  break;
150
  case 'modified' :
151
+ $response[$key] = $post->get_modified_date();
152
  break;
153
  case 'title' :
154
+ $response[$key] = $post->get_title();
 
 
 
 
155
  break;
156
  case 'URL' :
157
+ $response[$key] = $post->get_url();
 
 
 
 
158
  break;
159
  case 'short_URL' :
160
+ $response[$key] = $post->get_shortlink();
161
  break;
162
  case 'content' :
163
+ $response[$key] = $post->get_content();
 
 
 
 
 
 
164
  break;
165
  case 'excerpt' :
166
+ $response[$key] = $post->get_excerpt();
 
 
 
 
 
 
 
 
167
  break;
168
  case 'status' :
169
+ $response[$key] = $post->get_status();
170
  break;
171
  case 'sticky' :
172
+ $response[$key] = $post->is_sticky();
173
  break;
174
  case 'slug' :
175
+ $response[$key] = $post->get_slug();
176
  break;
177
  case 'guid' :
178
+ $response[$key] = $post->get_guid();
179
  break;
180
  case 'password' :
181
+ $response[$key] = $post->get_password();
 
 
 
182
  break;
183
  case 'parent' : // (object|false)
184
+ $response[$key] = $post->get_parent();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
  break;
186
  case 'type' :
187
+ $response[$key] = $post->get_type();
188
  break;
189
  case 'discussion' :
190
+ $response[$key] = $post->get_discussion();
 
 
 
 
 
 
191
  break;
192
  case 'likes_enabled' :
193
+ $response[$key] = $post->is_likes_enabled();
 
 
 
 
 
 
 
194
  break;
195
  case 'sharing_enabled' :
196
+ $response[$key] = $post->is_sharing_enabled();
 
 
 
 
 
 
 
 
197
  break;
198
  case 'like_count' :
199
+ $response[$key] = $post->get_like_count();
200
  break;
201
  case 'i_like' :
202
+ $response[$key] = $post->is_liked();
203
  break;
204
  case 'is_reblogged':
205
+ $response[$key] = $post->is_reblogged();
206
  break;
207
  case 'is_following':
208
+ $response[$key] = $post->is_following();
209
  break;
210
  case 'global_ID':
211
+ $response[$key] = $post->get_global_id();
212
  break;
213
  case 'featured_image' :
214
+ $response[$key] = $post->get_featured_image();
 
 
 
 
 
 
 
 
 
215
  break;
216
  case 'post_thumbnail' :
217
+ $response[$key] = $post->get_post_thumbnail();
 
 
 
 
 
 
 
 
 
 
 
218
  break;
219
  case 'format' :
220
+ $response[$key] = $post->get_format();
 
 
 
221
  break;
222
  case 'geo' : // (object|false)
223
+ $response[$key] = $post->get_geo();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
224
  break;
225
  case 'menu_order':
226
+ $response[$key] = $post->get_menu_order();
227
  break;
228
  case 'page_template':
229
+ $response[$key] = $post->get_page_template();
230
  break;
231
  case 'publicize_URLs' :
232
+ $response[$key] = $post->get_publicize_urls();
233
+ break;
234
+ case 'terms':
235
+ $response[$key] = $post->get_terms();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
236
  break;
237
  case 'tags' :
238
+ $response[$key] = $post->get_tags();
 
 
 
 
 
 
 
239
  break;
240
  case 'categories':
241
+ $response[$key] = $post->get_categories();
 
 
 
 
 
 
 
242
  break;
243
  case 'attachments':
244
+ list( $attachments, $attachment_count ) = $post->get_attachments_and_count();
245
+ $response[$key] = $attachments;
246
+ $response['attachment_count'] = $attachment_count;
 
 
 
 
247
  break;
248
  case 'metadata' : // (array|false)
249
+ $response[$key] = $post->get_metadata();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  break;
251
  case 'meta' :
252
+ $response[$key] = $post->get_meta();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  break;
254
  case 'capabilities' :
255
+ $response[$key] = $post->get_current_user_capabilities();
256
  break;
257
  case 'revisions' :
258
+ $revisions = $post->get_revisions();
259
+ if ( $revisions ) {
260
+ $response[$key] = $revisions;
 
 
 
 
 
261
  }
 
 
 
262
  break;
263
  case 'other_URLs' :
264
+ $response[$key] = $post->get_other_urls();
 
 
 
 
 
 
265
  break;
266
  }
267
  }
268
 
 
 
 
 
269
  return $response;
270
  }
271
 
272
+ // TODO: factor this out
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  function get_blog_post( $blog_id, $post_id, $context = 'display' ) {
274
  $blog_id = $this->api->get_blog_id( $blog_id );
275
  if ( !$blog_id || is_wp_error( $blog_id ) ) {
281
  return $post;
282
  }
283
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
  function win8_gallery_shortcode( $attr ) {
285
  global $post;
286
 
341
  }
342
  }
343
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
344
  }
json-endpoints/class.wpcom-json-api-render-embed-endpoint.php CHANGED
@@ -29,13 +29,6 @@ class WPCOM_JSON_API_Render_Embed_Endpoint extends WPCOM_JSON_API_Render_Endpoin
29
  return new WP_Error( 'invalid_embed_url', 'The embed_url parameter must be a valid URL.', 400 );
30
  }
31
 
32
- // in order for oEmbed to fire in the `$wp_embed->shortcode` method, we need to set a post as the current post
33
- $_posts = get_posts( array( 'posts_per_page' => 1, 'suppress_filters' => false ) );
34
- if ( ! empty( $_posts ) ) {
35
- global $post;
36
- $post = array_shift( $_posts );
37
- }
38
-
39
  global $wp_embed;
40
  $render = $this->process_render( array( $this, 'do_embed' ), $embed_url );
41
 
@@ -54,8 +47,4 @@ class WPCOM_JSON_API_Render_Embed_Endpoint extends WPCOM_JSON_API_Render_Endpoin
54
  return $return;
55
  }
56
 
57
- function do_embed( $embed_url ) {
58
- global $wp_embed;
59
- return $wp_embed->shortcode( array(), $embed_url );
60
- }
61
  }
29
  return new WP_Error( 'invalid_embed_url', 'The embed_url parameter must be a valid URL.', 400 );
30
  }
31
 
 
 
 
 
 
 
 
32
  global $wp_embed;
33
  $render = $this->process_render( array( $this, 'do_embed' ), $embed_url );
34
 
47
  return $return;
48
  }
49
 
 
 
 
 
50
  }
json-endpoints/class.wpcom-json-api-render-endpoint.php CHANGED
@@ -8,7 +8,7 @@ abstract class WPCOM_JSON_API_Render_Endpoint extends WPCOM_JSON_API_Endpoint {
8
  * props to o2's o2_Read_API::poll() function for inspiration.
9
  *
10
  * In short we figure out what scripts load for a "normal" page load by executing wp_head and wp_footer
11
- * then we render our shortcode (to both get our result, and to have the shortcode files enqueue their resources)
12
  * then we load wp_head and wp_footer again to see what new resources were added
13
  * finally we find out the url to the source file and any extra info (like media or init js)
14
  */
@@ -96,7 +96,7 @@ abstract class WPCOM_JSON_API_Render_Endpoint extends WPCOM_JSON_API_Endpoint {
96
  $media = esc_attr( $wp_styles->registered[ $handle ]->args );
97
  }
98
 
99
- // add to an aray so we can return all this info
100
  $styles[ $handle ] = array (
101
  'src' => $src,
102
  'media' => $media,
@@ -121,4 +121,25 @@ abstract class WPCOM_JSON_API_Render_Endpoint extends WPCOM_JSON_API_Endpoint {
121
  return $ver;
122
  }
123
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  }
8
  * props to o2's o2_Read_API::poll() function for inspiration.
9
  *
10
  * In short we figure out what scripts load for a "normal" page load by executing wp_head and wp_footer
11
+ * then we render the embed/shortcode (to both get our result, and to have the shortcode files enqueue their resources)
12
  * then we load wp_head and wp_footer again to see what new resources were added
13
  * finally we find out the url to the source file and any extra info (like media or init js)
14
  */
96
  $media = esc_attr( $wp_styles->registered[ $handle ]->args );
97
  }
98
 
99
+ // add to an array so we can return all this info
100
  $styles[ $handle ] = array (
101
  'src' => $src,
102
  'media' => $media,
121
  return $ver;
122
  }
123
 
124
+ /**
125
+ * given a shortcode, process and return the result
126
+ */
127
+ function do_shortcode( $shortcode ) {
128
+ return do_shortcode( $shortcode );
129
+ }
130
+
131
+ /**
132
+ * given a one-line embed URL, process and return the result
133
+ */
134
+ function do_embed( $embed_url ) {
135
+ // in order for oEmbed to fire in the `$wp_embed->shortcode` method, we need to set a post as the current post
136
+ $_posts = get_posts( array( 'posts_per_page' => 1, 'suppress_filters' => false ) );
137
+ if ( ! empty( $_posts ) ) {
138
+ global $post;
139
+ $post = array_shift( $_posts );
140
+ }
141
+
142
+ global $wp_embed;
143
+ return $wp_embed->shortcode( array(), $embed_url );
144
+ }
145
  }
json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php CHANGED
@@ -41,10 +41,4 @@ class WPCOM_JSON_API_Render_Shortcode_Endpoint extends WPCOM_JSON_API_Render_End
41
 
42
  return $return;
43
  }
44
-
45
- function do_shortcode( $shortcode ) {
46
- $result = do_shortcode( $shortcode );
47
- return $result;
48
- }
49
-
50
  }
41
 
42
  return $return;
43
  }
 
 
 
 
 
 
44
  }
json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php CHANGED
@@ -30,10 +30,10 @@ abstract class WPCOM_JSON_API_Sharing_Button_Endpoint extends WPCOM_JSON_API_End
30
  // Status is either "disabled" or the visibility value
31
  $response['visibility'] = $this->get_button_visibility( $button );
32
  }
33
-
34
- if ( ! empty( $button->genericon ) ) {
35
  // Only pre-defined sharing buttons include genericon
36
- $response['genericon'] = $button->genericon;
37
  }
38
 
39
  if ( method_exists( $button, 'get_options' ) ) {
30
  // Status is either "disabled" or the visibility value
31
  $response['visibility'] = $this->get_button_visibility( $button );
32
  }
33
+
34
+ if ( ! empty( $button->icon ) ) {
35
  // Only pre-defined sharing buttons include genericon
36
+ $response['genericon'] = $button->icon;
37
  }
38
 
39
  if ( method_exists( $button, 'get_options' ) ) {
json-endpoints/class.wpcom-json-api-site-settings-endpoint.php CHANGED
@@ -192,7 +192,13 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
192
  'twitter_via' => (string) get_option( 'twitter_via' ),
193
  'jetpack-twitter-cards-site-tag' => (string) get_option( 'jetpack-twitter-cards-site-tag' ),
194
  'eventbrite_api_token' => $eventbrite_api_token,
195
- 'holidaysnow' => $holiday_snow
 
 
 
 
 
 
196
  );
197
 
198
  //allow future versions of this endpoint to support additional settings keys
@@ -346,11 +352,22 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
346
  $business_plugins->activate_plugin( 'wp-google-analytics' );
347
  break;
348
 
 
 
349
  case 'jetpack_comment_likes_enabled':
350
  // settings are stored as 1|0
351
  $coerce_value = (int) $value;
352
  if ( update_option( $key, $coerce_value ) ) {
353
- $updated[ $key ] = $value;
 
 
 
 
 
 
 
 
 
354
  }
355
  break;
356
 
@@ -388,6 +405,24 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
388
  }
389
  break;
390
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
391
 
392
  default:
393
  //allow future versions of this endpoint to support additional settings keys
@@ -410,7 +445,6 @@ class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
410
  if ( update_option( $key, $value ) ) {
411
  $updated[ $key ] = $value;
412
  }
413
-
414
  }
415
  }
416
 
192
  'twitter_via' => (string) get_option( 'twitter_via' ),
193
  'jetpack-twitter-cards-site-tag' => (string) get_option( 'jetpack-twitter-cards-site-tag' ),
194
  'eventbrite_api_token' => $eventbrite_api_token,
195
+ 'holidaysnow' => $holiday_snow,
196
+ 'gmt_offset' => get_option( 'gmt_offset' ),
197
+ 'timezone_string' => get_option( 'timezone_string' ),
198
+ 'jetpack_testimonial' => (bool) get_option( 'jetpack_testimonial', '0' ),
199
+ 'jetpack_testimonial_posts_per_page' => (int) get_option( 'jetpack_testimonial_posts_per_page', '10' ),
200
+ 'jetpack_portfolio' => (bool) get_option( 'jetpack_portfolio', '0' ),
201
+ 'jetpack_portfolio_posts_per_page' => (int) get_option( 'jetpack_portfolio_posts_per_page', '10' ),
202
  );
203
 
204
  //allow future versions of this endpoint to support additional settings keys
352
  $business_plugins->activate_plugin( 'wp-google-analytics' );
353
  break;
354
 
355
+ case 'jetpack_testimonial':
356
+ case 'jetpack_portfolio':
357
  case 'jetpack_comment_likes_enabled':
358
  // settings are stored as 1|0
359
  $coerce_value = (int) $value;
360
  if ( update_option( $key, $coerce_value ) ) {
361
+ $updated[ $key ] = (bool) $value;
362
+ }
363
+ break;
364
+
365
+ case 'jetpack_testimonial_posts_per_page':
366
+ case 'jetpack_portfolio_posts_per_page':
367
+ // settings are stored as numeric
368
+ $coerce_value = (int) $value;
369
+ if ( update_option( $key, $coerce_value ) ) {
370
+ $updated[ $key ] = $coerce_value;
371
  }
372
  break;
373
 
405
  }
406
  break;
407
 
408
+ case 'timezone_string':
409
+ // Map UTC+- timezones to gmt_offsets and set timezone_string to empty
410
+ // https://github.com/WordPress/WordPress/blob/4.4.2/wp-admin/options.php#L175
411
+ if ( ! empty( $value ) && preg_match( '/^UTC[+-]/', $value ) ) {
412
+ $gmt_offset = preg_replace( '/UTC\+?/', '', $value );
413
+ if ( update_option( 'gmt_offset', $gmt_offset ) ) {
414
+ $updated[ 'gmt_offset' ] = $gmt_offset;
415
+ }
416
+
417
+ $value = '';
418
+ }
419
+
420
+ // Always set timezone_string either with the given value or with an
421
+ // empty string
422
+ if ( update_option( $key, $value ) ) {
423
+ $updated[ $key ] = $value;
424
+ }
425
+ break;
426
 
427
  default:
428
  //allow future versions of this endpoint to support additional settings keys
445
  if ( update_option( $key, $value ) ) {
446
  $updated[ $key ] = $value;
447
  }
 
448
  }
449
  }
450
 
json-endpoints/class.wpcom-json-api-site-user-endpoint.php CHANGED
@@ -43,12 +43,9 @@ class WPCOM_JSON_API_Site_User_Endpoint extends WPCOM_JSON_API_Endpoint {
43
  return $this->get_user( $user->ID );
44
  } else if ( 'POST' === $this->api->method ) {
45
  if ( ! current_user_can_for_blog( $blog_id, 'promote_users' ) ) {
46
- return new WP_Error( 'unauthorized', 'User cannot promote users for specified site', 403 );
47
  }
48
- if ( get_current_user_id() == $user_id ) {
49
- return new WP_Error( 'unauthorized', 'You cannot change your own role', 403 );
50
- }
51
- return $this->update_user( $user_id );
52
  } else {
53
  return new WP_Error( 'bad_request', 'An unsupported request method was used.' );
54
  }
@@ -69,15 +66,25 @@ class WPCOM_JSON_API_Site_User_Endpoint extends WPCOM_JSON_API_Endpoint {
69
  *
70
  * @return (array)
71
  */
72
- public function update_user( $user_id ) {
73
  $input = $this->input();
74
  $user['ID'] = $user_id;
75
- if ( ! ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
 
 
 
 
 
 
 
 
 
 
76
  foreach ( $input as $key => $value ) {
77
  if ( ! is_array( $value ) ) {
78
  $value = trim( $value );
79
  }
80
- $value = wp_unslash( $value );
81
  switch ( $key ) {
82
  case 'first_name':
83
  case 'last_name':
43
  return $this->get_user( $user->ID );
44
  } else if ( 'POST' === $this->api->method ) {
45
  if ( ! current_user_can_for_blog( $blog_id, 'promote_users' ) ) {
46
+ return new WP_Error( 'unauthorized_no_promote_cap', 'User cannot promote users for specified site', 403 );
47
  }
48
+ return $this->update_user( $user_id, $blog_id );
 
 
 
49
  } else {
50
  return new WP_Error( 'bad_request', 'An unsupported request method was used.' );
51
  }
66
  *
67
  * @return (array)
68
  */
69
+ public function update_user( $user_id, $blog_id ) {
70
  $input = $this->input();
71
  $user['ID'] = $user_id;
72
+ $is_wpcom = defined( 'IS_WPCOM' ) && IS_WPCOM;
73
+
74
+ if ( get_current_user_id() == $user_id && isset( $input['roles'] ) ) {
75
+ return new WP_Error( 'unauthorized', 'You cannot change your own role', 403 );
76
+ }
77
+
78
+ if ( $is_wpcom && $user_id !== get_current_user_id() && $user_id == wpcom_get_blog_owner( $blog_id ) ) {
79
+ return new WP_Error( 'unauthorized_edit_owner', 'Current user can not edit blog owner', 403 );
80
+ }
81
+
82
+ if ( ! $is_wpcom ) {
83
  foreach ( $input as $key => $value ) {
84
  if ( ! is_array( $value ) ) {
85
  $value = trim( $value );
86
  }
87
+ $value = wp_unslash( $value );
88
  switch ( $key ) {
89
  case 'first_name':
90
  case 'last_name':
json-endpoints/class.wpcom-json-api-update-invites-endpoint.php CHANGED
@@ -36,7 +36,7 @@ class WPCOM_JSON_API_Update_Invites_Endpoint extends WPCOM_JSON_API_Endpoint {
36
  'invite_key' => $invite_id,
37
  'deleted' => $this->delete_invite(),
38
  );
39
- } else {
40
  $returnValue = array(
41
  'result' => $this->is_wpcom ? $this->resend_wpcom_invite() : $this->resend_self_hosted_invite()
42
  );
36
  'invite_key' => $invite_id,
37
  'deleted' => $this->delete_invite(),
38
  );
39
+ } else if ( $this->api->ends_with( $this->path, '/resend' ) ) {
40
  $returnValue = array(
41
  'result' => $this->is_wpcom ? $this->resend_wpcom_invite() : $this->resend_self_hosted_invite()
42
  );
json-endpoints/class.wpcom-json-api-update-post-endpoint.php CHANGED
@@ -89,6 +89,10 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
89
  return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
90
  }
91
 
 
 
 
 
92
  $post = get_post( $post_id );
93
  $_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
94
  $post_type = get_post_type_object( $_post_type );
@@ -559,7 +563,7 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
559
 
560
  if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
561
  continue;
562
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || $this->is_metadata_public( $meta->key ) ) {
563
  add_post_meta( $post_id, $meta->key, $meta->value );
564
  }
565
 
@@ -568,11 +572,11 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
568
 
569
  if ( ! isset( $meta->value ) ) {
570
  continue;
571
- } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
572
  update_metadata_by_mid( 'post', $meta->id, $meta->value );
573
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
574
  update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
575
- } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
576
  update_post_meta( $post_id, $meta->key, $meta->value );
577
  }
578
 
@@ -685,7 +689,7 @@ class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
685
  return $featured_image;
686
  }
687
 
688
- $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id );
689
 
690
  if ( empty( $featured_image_id ) || ! is_int( $featured_image_id ) )
691
  return false;
89
  return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
90
  }
91
 
92
+ if ( isset( $input['status'] ) && 'trash' === $input['status'] && ! current_user_can( 'delete_post', $post_id ) ) {
93
+ return new WP_Error( 'unauthorized', 'User cannot delete post', 403 );
94
+ }
95
+
96
  $post = get_post( $post_id );
97
  $_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
98
  $post_type = get_post_type_object( $_post_type );
563
 
564
  if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
565
  continue;
566
+ } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) {
567
  add_post_meta( $post_id, $meta->key, $meta->value );
568
  }
569
 
572
 
573
  if ( ! isset( $meta->value ) ) {
574
  continue;
575
+ } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
576
  update_metadata_by_mid( 'post', $meta->id, $meta->value );
577
+ } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
578
  update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
579
+ } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
580
  update_post_meta( $post_id, $meta->key, $meta->value );
581
  }
582
 
689
  return $featured_image;
690
  }
691
 
692
+ $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id, 'image' );
693
 
694
  if ( empty( $featured_image_id ) || ! is_int( $featured_image_id ) )
695
  return false;
json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php CHANGED
@@ -36,16 +36,21 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
36
  if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
37
  remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 );
38
  add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) );
39
- }
40
 
41
- // 'future' is an alias for 'publish' for now
42
- if ( 'future' === $input['status'] ) {
43
- $input['status'] = 'publish';
44
  }
45
 
 
46
  if ( $new ) {
47
  $input = $this->input( true );
48
 
 
 
 
 
 
49
  if ( 'revision' === $input['type'] ) {
50
  if ( ! isset( $input['parent'] ) ) {
51
  return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
@@ -94,6 +99,15 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
94
  return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
95
  }
96
 
 
 
 
 
 
 
 
 
 
97
  $post = get_post( $post_id );
98
  $_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
99
  $post_type = get_post_type_object( $_post_type );
@@ -149,26 +163,50 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
149
  unset( $input['parent'] );
150
  }
151
 
152
- $tax_input = array();
153
 
154
- foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $key => $taxonomy ) {
155
- if ( ! isset( $input[ $key ] ) ) {
156
- continue;
 
 
 
 
157
  }
 
158
 
159
- $tax_input[ $taxonomy ] = array();
 
 
 
 
160
 
161
- $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
 
 
162
 
163
- if ( is_array( $input[$key] ) ) {
164
- $terms = $input[$key];
165
- } else {
166
- $terms = explode( ',', $input[$key] );
 
167
  }
168
 
 
 
 
 
 
 
 
 
 
 
 
 
169
  foreach ( $terms as $term ) {
170
  /**
171
- * `curl --data 'category[]=123'` should be interpreted as a category ID,
172
  * not a category whose name is '123'.
173
  *
174
  * Consequence: To add a category/tag whose name is '123', the client must
@@ -190,7 +228,7 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
190
  $tax = get_taxonomy( $taxonomy );
191
 
192
  // see https://core.trac.wordpress.org/ticket/26409
193
- if ( 'category' === $taxonomy && ! current_user_can( $tax->cap->edit_terms ) ) {
194
  continue;
195
  } else if ( ! current_user_can( $tax->cap->assign_terms ) ) {
196
  continue;
@@ -201,10 +239,10 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
201
 
202
  if ( ! is_wp_error( $term_info ) ) {
203
  if ( $is_hierarchical ) {
204
- // Categories must be added by ID
205
  $tax_input[$taxonomy][] = (int) $term_info['term_id'];
206
  } else {
207
- // Tags must be added by name
208
  if ( is_int( $term ) ) {
209
  $term = get_term( $term, $taxonomy );
210
  $tax_input[$taxonomy][] = $term->name;
@@ -216,11 +254,11 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
216
  }
217
  }
218
 
219
- if ( isset( $input['categories'] ) && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
220
  $tax_input['category'][] = get_option( 'default_category' );
221
  }
222
 
223
- unset( $input['tags'], $input['categories'] );
224
 
225
  $insert = array();
226
 
@@ -573,7 +611,7 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
573
 
574
  if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
575
  continue;
576
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || $this->is_metadata_public( $meta->key ) ) {
577
  add_post_meta( $post_id, $meta->key, $meta->value );
578
  }
579
 
@@ -582,11 +620,11 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
582
 
583
  if ( ! isset( $meta->value ) ) {
584
  continue;
585
- } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
586
  update_metadata_by_mid( 'post', $meta->id, $meta->value );
587
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
588
  update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
589
- } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
590
  update_post_meta( $post_id, $meta->key, $meta->value );
591
  }
592
 
@@ -617,7 +655,8 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
617
  $return['media_errors'] = $media_results['errors'];
618
 
619
  if ( 'publish' !== $post->post_status ) {
620
- $return['other_URLs'] = (object) $this->get_post_permalink_suggestions( $post_id, $input['title'] );
 
621
  }
622
 
623
  /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
@@ -696,7 +735,7 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
696
  return $featured_image;
697
  }
698
 
699
- $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id );
700
 
701
  if ( empty( $featured_image_id ) || ! is_int( $featured_image_id ) )
702
  return false;
@@ -724,4 +763,15 @@ class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_
724
 
725
  return $_user->ID;
726
  }
 
 
 
 
 
 
 
 
 
 
 
727
  }
36
  if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
37
  remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 );
38
  add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) );
 
39
 
40
+ if ( $this->should_load_theme_functions( $post_id ) ) {
41
+ $this->load_theme_functions();
42
+ }
43
  }
44
 
45
+
46
  if ( $new ) {
47
  $input = $this->input( true );
48
 
49
+ // 'future' is an alias for 'publish' for now
50
+ if ( 'future' === $input['status'] ) {
51
+ $input['status'] = 'publish';
52
+ }
53
+
54
  if ( 'revision' === $input['type'] ) {
55
  if ( ! isset( $input['parent'] ) ) {
56
  return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
99
  return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
100
  }
101
 
102
+ if ( isset( $input['status'] ) && 'trash' === $input['status'] && ! current_user_can( 'delete_post', $post_id ) ) {
103
+ return new WP_Error( 'unauthorized', 'User cannot delete post', 403 );
104
+ }
105
+
106
+ // 'future' is an alias for 'publish' for now
107
+ if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
108
+ $input['status'] = 'publish';
109
+ }
110
+
111
  $post = get_post( $post_id );
112
  $_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
113
  $post_type = get_post_type_object( $_post_type );
163
  unset( $input['parent'] );
164
  }
165
 
166
+ $input['terms'] = isset( $input['terms'] ) ? (array) $input['terms'] : array();
167
 
168
+ // Convert comma-separated terms to array before attempting to
169
+ // merge with hardcoded taxonomies
170
+ foreach ( $input['terms'] as $taxonomy => $terms ) {
171
+ if ( is_string( $terms ) ) {
172
+ $input['terms'][ $taxonomy ] = explode( ',', $terms );
173
+ } else if ( ! is_array( $terms ) ) {
174
+ $input['terms'][ $taxonomy ] = array();
175
  }
176
+ }
177
 
178
+ // For each hard-coded taxonomy, merge into terms object
179
+ foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $taxonomy_key => $taxonomy ) {
180
+ if ( ! isset( $input[ $taxonomy_key ] ) ) {
181
+ continue;
182
+ }
183
 
184
+ if ( ! isset( $input['terms'][ $taxonomy ] ) ) {
185
+ $input['terms'][ $taxonomy ] = array();
186
+ }
187
 
188
+ $terms = $input[ $taxonomy_key ];
189
+ if ( is_string( $terms ) ) {
190
+ $terms = explode( ',', $terms );
191
+ } else if ( ! is_array( $terms ) ) {
192
+ continue;
193
  }
194
 
195
+ $input['terms'][ $taxonomy ] = array_merge(
196
+ $input['terms'][ $taxonomy ],
197
+ $terms
198
+ );
199
+ }
200
+
201
+ $tax_input = array();
202
+
203
+ foreach ( $input['terms'] as $taxonomy => $terms ) {
204
+ $tax_input[ $taxonomy ] = array();
205
+ $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
206
+
207
  foreach ( $terms as $term ) {
208
  /**
209
+ * `curl --data 'terms[category][]=123'` should be interpreted as a category ID,
210
  * not a category whose name is '123'.
211
  *
212
  * Consequence: To add a category/tag whose name is '123', the client must
228
  $tax = get_taxonomy( $taxonomy );
229
 
230
  // see https://core.trac.wordpress.org/ticket/26409
231
+ if ( $is_hierarchical && ! current_user_can( $tax->cap->edit_terms ) ) {
232
  continue;
233
  } else if ( ! current_user_can( $tax->cap->assign_terms ) ) {
234
  continue;
239
 
240
  if ( ! is_wp_error( $term_info ) ) {
241
  if ( $is_hierarchical ) {
242
+ // Hierarchical terms must be added by ID
243
  $tax_input[$taxonomy][] = (int) $term_info['term_id'];
244
  } else {
245
+ // Non-hierarchical terms must be added by name
246
  if ( is_int( $term ) ) {
247
  $term = get_term( $term, $taxonomy );
248
  $tax_input[$taxonomy][] = $term->name;
254
  }
255
  }
256
 
257
+ if ( isset( $input['terms']['category'] ) && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
258
  $tax_input['category'][] = get_option( 'default_category' );
259
  }
260
 
261
+ unset( $input['terms'], $input['tags'], $input['categories'] );
262
 
263
  $insert = array();
264
 
611
 
612
  if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
613
  continue;
614
+ } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) {
615
  add_post_meta( $post_id, $meta->key, $meta->value );
616
  }
617
 
620
 
621
  if ( ! isset( $meta->value ) ) {
622
  continue;
623
+ } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
624
  update_metadata_by_mid( 'post', $meta->id, $meta->value );
625
+ } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
626
  update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
627
+ } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
628
  update_post_meta( $post_id, $meta->key, $meta->value );
629
  }
630
 
655
  $return['media_errors'] = $media_results['errors'];
656
 
657
  if ( 'publish' !== $post->post_status ) {
658
+ $sal_site = $this->get_sal_post_by( 'ID', $post_id, $args['context'] );
659
+ $return['other_URLs'] = (object) $sal_site->get_permalink_suggestions( $input['title'] );
660
  }
661
 
662
  /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
735
  return $featured_image;
736
  }
737
 
738
+ $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id, 'image' );
739
 
740
  if ( empty( $featured_image_id ) || ! is_int( $featured_image_id ) )
741
  return false;
763
 
764
  return $_user->ID;
765
  }
766
+
767
+ protected function should_load_theme_functions( $post_id = null ) {
768
+ if ( empty( $post_id ) ) {
769
+ $input = $this->input( true );
770
+ $type = $input['type'];
771
+ } else {
772
+ $type = get_post_type( $post_id );
773
+ }
774
+
775
+ return ! empty( $type ) && ! in_array( $type, array( 'post', 'page', 'revision' ) );
776
+ }
777
  }
json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php CHANGED
@@ -11,16 +11,20 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
11
  if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
12
  remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 );
13
  add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) );
14
- }
15
 
16
- // 'future' is an alias for 'publish' for now
17
- if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
18
- $input['status'] = 'publish';
19
  }
20
 
21
  if ( $new ) {
22
  $input = $this->input( true );
23
 
 
 
 
 
 
24
  if ( 'revision' === $input['type'] ) {
25
  if ( ! isset( $input['parent'] ) ) {
26
  return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
@@ -69,6 +73,15 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
69
  return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
70
  }
71
 
 
 
 
 
 
 
 
 
 
72
  $post = get_post( $post_id );
73
  $_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
74
  $post_type = get_post_type_object( $_post_type );
@@ -124,22 +137,54 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
124
  unset( $input['parent'] );
125
  }
126
 
127
- /* add taxonomies by name */
128
- $tax_input = array();
129
- foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $key => $taxonomy ) {
130
- if ( ! isset( $input[ $key ] ) ) {
131
- continue;
 
132
  }
133
 
134
- $tax_input[ $taxonomy ] = array();
 
 
 
 
 
 
 
 
135
 
136
- $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
 
 
 
 
 
137
 
138
- if ( is_array( $input[$key] ) ) {
139
- $terms = $input[$key];
140
- } else {
141
- $terms = explode( ',', $input[$key] );
 
 
 
 
 
 
 
 
 
 
 
142
  }
 
 
 
 
 
 
 
143
 
144
  foreach ( $terms as $term ) {
145
  /**
@@ -154,7 +199,7 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
154
  $tax = get_taxonomy( $taxonomy );
155
 
156
  // see https://core.trac.wordpress.org/ticket/26409
157
- if ( 'category' === $taxonomy && ! current_user_can( $tax->cap->edit_terms ) ) {
158
  continue;
159
  } else if ( ! current_user_can( $tax->cap->assign_terms ) ) {
160
  continue;
@@ -165,22 +210,18 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
165
 
166
  if ( ! is_wp_error( $term_info ) ) {
167
  if ( $is_hierarchical ) {
168
- // Categories must be added by ID
169
  $tax_input[$taxonomy][] = (int) $term_info['term_id'];
170
  } else {
171
- // Tags must be added by name
172
  $tax_input[$taxonomy][] = $term;
173
  }
174
  }
175
  }
176
  }
177
 
178
- /* add taxonomies by ID */
179
- foreach ( array( 'categories_by_id' => 'category', 'tags_by_id' => 'post_tag' ) as $key => $taxonomy ) {
180
- if ( ! isset( $input[ $key ] ) ) {
181
- continue;
182
- }
183
-
184
  // combine with any previous selections
185
  if ( ! isset( $tax_input[ $taxonomy ] ) || ! is_array( $tax_input[ $taxonomy ] ) ) {
186
  $tax_input[ $taxonomy ] = array();
@@ -188,12 +229,6 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
188
 
189
  $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
190
 
191
- if ( is_array( $input[$key] ) ) {
192
- $terms = $input[$key];
193
- } else {
194
- $terms = explode( ',', $input[$key] );
195
- }
196
-
197
  foreach ( $terms as $term ) {
198
  $term = (string) $term; // ctype_digit compat
199
  if ( ! ctype_digit( $term ) ) {
@@ -215,12 +250,12 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
215
  }
216
  }
217
 
218
- if ( ( isset( $input['categories'] ) || isset( $input['categories_by_id'] ) )
219
- && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
220
  $tax_input['category'][] = get_option( 'default_category' );
221
  }
222
 
223
- unset( $input['tags'], $input['categories'], $input['tags_by_id'], $input['categories_by_id'] );
224
 
225
  $insert = array();
226
 
@@ -573,7 +608,7 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
573
 
574
  if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
575
  continue;
576
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || $this->is_metadata_public( $meta->key ) ) {
577
  add_post_meta( $post_id, $meta->key, $meta->value );
578
  }
579
 
@@ -582,11 +617,11 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
582
 
583
  if ( ! isset( $meta->value ) ) {
584
  continue;
585
- } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
586
  update_metadata_by_mid( 'post', $meta->id, $meta->value );
587
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
588
  update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
589
- } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) {
590
  update_post_meta( $post_id, $meta->key, $meta->value );
591
  }
592
 
@@ -616,8 +651,9 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
616
  if ( ! empty( $media_results['errors'] ) )
617
  $return['media_errors'] = $media_results['errors'];
618
 
619
- if ( ! $new && 'publish' !== $post->post_status && isset( $input['title'] ) ) {
620
- $return['other_URLs'] = (object) $this->get_post_permalink_suggestions( $post_id, $input['title'] );
 
621
  }
622
 
623
  /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
@@ -625,4 +661,15 @@ class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Pos
625
 
626
  return $return;
627
  }
 
 
 
 
 
 
 
 
 
 
 
628
  }
11
  if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
12
  remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 );
13
  add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) );
 
14
 
15
+ if ( $this->should_load_theme_functions( $post_id ) ) {
16
+ $this->load_theme_functions();
17
+ }
18
  }
19
 
20
  if ( $new ) {
21
  $input = $this->input( true );
22
 
23
+ // 'future' is an alias for 'publish' for now
24
+ if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
25
+ $input['status'] = 'publish';
26
+ }
27
+
28
  if ( 'revision' === $input['type'] ) {
29
  if ( ! isset( $input['parent'] ) ) {
30
  return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
73
  return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
74
  }
75
 
76
+ if ( isset( $input['status'] ) && 'trash' === $input['status'] && ! current_user_can( 'delete_post', $post_id ) ) {
77
+ return new WP_Error( 'unauthorized', 'User cannot delete post', 403 );
78
+ }
79
+
80
+ // 'future' is an alias for 'publish' for now
81
+ if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
82
+ $input['status'] = 'publish';
83
+ }
84
+
85
  $post = get_post( $post_id );
86
  $_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
87
  $post_type = get_post_type_object( $_post_type );
137
  unset( $input['parent'] );
138
  }
139
 
140
+ foreach ( array( '', '_by_id' ) as $term_key_suffix ) {
141
+ $term_input_key = 'terms' . $term_key_suffix;
142
+ if ( isset( $input[ $term_input_key ] ) ) {
143
+ $input[ $term_input_key ] = (array) $input[ $term_input_key ];
144
+ } else {
145
+ $input[ $term_input_key ] = array();
146
  }
147
 
148
+ // Convert comma-separated terms to array before attempting to
149
+ // merge with hardcoded taxonomies
150
+ foreach ( $input[ $term_input_key ] as $taxonomy => $terms ) {
151
+ if ( is_string( $terms ) ) {
152
+ $input[ $term_input_key ][ $taxonomy ] = explode( ',', $terms );
153
+ } else if ( ! is_array( $terms ) ) {
154
+ $input[ $term_input_key ][ $taxonomy ] = array();
155
+ }
156
+ }
157
 
158
+ // For each hard-coded taxonomy, merge into terms object
159
+ foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $key_prefix => $taxonomy ) {
160
+ $taxonomy_key = $key_prefix . $term_key_suffix;
161
+ if ( ! isset( $input[ $taxonomy_key ] ) ) {
162
+ continue;
163
+ }
164
 
165
+ if ( ! isset( $input[ $term_input_key ][ $taxonomy ] ) ) {
166
+ $input[ $term_input_key ][ $taxonomy ] = array();
167
+ }
168
+
169
+ $terms = $input[ $taxonomy_key ];
170
+ if ( is_string( $terms ) ) {
171
+ $terms = explode( ',', $terms );
172
+ } else if ( ! is_array( $terms ) ) {
173
+ continue;
174
+ }
175
+
176
+ $input[ $term_input_key ][ $taxonomy ] = array_merge(
177
+ $input[ $term_input_key ][ $taxonomy ],
178
+ $terms
179
+ );
180
  }
181
+ }
182
+
183
+ /* add terms by name */
184
+ $tax_input = array();
185
+ foreach ( $input['terms'] as $taxonomy => $terms ) {
186
+ $tax_input[ $taxonomy ] = array();
187
+ $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
188
 
189
  foreach ( $terms as $term ) {
190
  /**
199
  $tax = get_taxonomy( $taxonomy );
200
 
201
  // see https://core.trac.wordpress.org/ticket/26409
202
+ if ( $is_hierarchical && ! current_user_can( $tax->cap->edit_terms ) ) {
203
  continue;
204
  } else if ( ! current_user_can( $tax->cap->assign_terms ) ) {
205
  continue;
210
 
211
  if ( ! is_wp_error( $term_info ) ) {
212
  if ( $is_hierarchical ) {
213
+ // Hierarchical terms must be added by ID
214
  $tax_input[$taxonomy][] = (int) $term_info['term_id'];
215
  } else {
216
+ // Non-hierarchical terms must be added by name
217
  $tax_input[$taxonomy][] = $term;
218
  }
219
  }
220
  }
221
  }
222
 
223
+ /* add terms by ID */
224
+ foreach ( $input['terms_by_id'] as $taxonomy => $terms ) {
 
 
 
 
225
  // combine with any previous selections
226
  if ( ! isset( $tax_input[ $taxonomy ] ) || ! is_array( $tax_input[ $taxonomy ] ) ) {
227
  $tax_input[ $taxonomy ] = array();
229
 
230
  $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
231
 
 
 
 
 
 
 
232
  foreach ( $terms as $term ) {
233
  $term = (string) $term; // ctype_digit compat
234
  if ( ! ctype_digit( $term ) ) {
250
  }
251
  }
252
 
253
+ if ( ( isset( $input['terms']['category'] ) || isset( $input['terms_by_id']['category'] ) )
254
+ && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
255
  $tax_input['category'][] = get_option( 'default_category' );
256
  }
257
 
258
+ unset( $input['terms'], $input['tags'], $input['categories'], $input['terms_by_id'], $input['tags_by_id'], $input['categories_by_id'] );
259
 
260
  $insert = array();
261
 
608
 
609
  if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
610
  continue;
611
+ } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) {
612
  add_post_meta( $post_id, $meta->key, $meta->value );
613
  }
614
 
617
 
618
  if ( ! isset( $meta->value ) ) {
619
  continue;
620
+ } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
621
  update_metadata_by_mid( 'post', $meta->id, $meta->value );
622
+ } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
623
  update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
624
+ } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
625
  update_post_meta( $post_id, $meta->key, $meta->value );
626
  }
627
 
651
  if ( ! empty( $media_results['errors'] ) )
652
  $return['media_errors'] = $media_results['errors'];
653
 
654
+ if ( 'publish' !== $return['status'] && isset( $input['title'] )) {
655
+ $sal_site = $this->get_sal_post_by( 'ID', $post_id, $args['context'] );
656
+ $return['other_URLs'] = (object) $sal_site->get_permalink_suggestions( $input['title'] );
657
  }
658
 
659
  /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
661
 
662
  return $return;
663
  }
664
+
665
+ protected function should_load_theme_functions( $post_id = null ) {
666
+ if ( empty( $post_id ) ) {
667
+ $input = $this->input( true );
668
+ $type = $input['type'];
669
+ } else {
670
+ $type = get_post_type( $post_id );
671
+ }
672
+
673
+ return ! empty( $type ) && ! in_array( $type, array( 'post', 'page', 'revision' ) );
674
+ }
675
  }
json-endpoints/class.wpcom-json-api-update-term-endpoint.php ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * WARNING: This file is distributed verbatim in Jetpack.
4
+ * There should be nothing WordPress.com specific in this file.
5
+ *
6
+ * @hide-in-jetpack
7
+ */
8
+
9
+ class WPCOM_JSON_API_Update_Term_Endpoint extends WPCOM_JSON_API_Taxonomy_Endpoint {
10
+ // /sites/%s/taxonomies/%s/terms/new -> $blog_id, $taxonomy
11
+ // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
12
+ // /sites/%s/taxonomies/%s/terms/slug:%s/delete -> $blog_id, $taxonomy, $slug
13
+ function callback( $path = '', $blog_id = 0, $taxonomy = 'category', $slug = 0 ) {
14
+ $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
15
+ if ( is_wp_error( $blog_id ) ) {
16
+ return $blog_id;
17
+ }
18
+
19
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
20
+ $this->load_theme_functions();
21
+ }
22
+
23
+ $user = wp_get_current_user();
24
+ if ( ! $user || is_wp_error( $user ) || ! $user->ID ) {
25
+ return new WP_Error( 'authorization_required', 'An active access token must be used to manage taxonomies.', 403 );
26
+ }
27
+
28
+ $taxonomy_meta = get_taxonomy( $taxonomy );
29
+ if ( false === $taxonomy_meta || (
30
+ ! $taxonomy_meta->public &&
31
+ ! current_user_can( $taxonomy_meta->cap->manage_terms ) &&
32
+ ! current_user_can( $taxonomy_meta->cap->edit_terms ) &&
33
+ ! current_user_can( $taxonomy_meta->cap->delete_terms ) ) ) {
34
+ return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
35
+ }
36
+
37
+ if ( $this->api->ends_with( $path, '/delete' ) ) {
38
+ return $this->delete_term( $path, $blog_id, $slug, $taxonomy );
39
+ } else if ( $this->api->ends_with( $path, '/new' ) ) {
40
+ return $this->new_term( $path, $blog_id, $taxonomy );
41
+ }
42
+
43
+ return $this->update_term( $path, $blog_id, $slug, $taxonomy );
44
+ }
45
+
46
+ // /sites/%s/taxonomies/%s/terms/new -> $blog_id, $taxonomy
47
+ function new_term( $path, $blog_id, $taxonomy ) {
48
+ $args = $this->query_args();
49
+ $input = $this->input();
50
+ if ( ! is_array( $input ) || ! $input || ! strlen( $input['name'] ) ) {
51
+ return new WP_Error( 'invalid_input', 'Unknown data passed', 400 );
52
+ }
53
+
54
+ $tax = get_taxonomy( $taxonomy );
55
+ if ( ! current_user_can( $tax->cap->manage_terms ) ) {
56
+ return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
57
+ }
58
+
59
+ if ( ! isset( $input['parent'] ) || ! is_taxonomy_hierarchical( $taxonomy ) ) {
60
+ $input['parent'] = 0;
61
+ }
62
+
63
+ if ( $term = get_term_by( 'name', $input['name'], $taxonomy ) ) {
64
+ // get_term_by is not case-sensitive, but a name with different casing is allowed
65
+ // also, the exact same name is allowed as long as the parents are different
66
+ if ( $input['name'] === $term->name && $input['parent'] === $term->parent ) {
67
+ return new WP_Error( 'duplicate', 'A taxonomy with that name already exists', 409 );
68
+ }
69
+ }
70
+
71
+ $data = wp_insert_term( addslashes( $input['name'] ), $taxonomy, array(
72
+ 'description' => addslashes( $input['description'] ),
73
+ 'parent' => $input['parent']
74
+ ) );
75
+
76
+ if ( is_wp_error( $data ) ) {
77
+ return $data;
78
+ }
79
+
80
+ $term = get_term_by( 'id', $data['term_id'], $taxonomy );
81
+
82
+ $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
83
+ if ( ! $return || is_wp_error( $return ) ) {
84
+ return $return;
85
+ }
86
+
87
+ /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
88
+ do_action( 'wpcom_json_api_objects', 'terms' );
89
+ return $return;
90
+ }
91
+
92
+ // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
93
+ function update_term( $path, $blog_id, $slug, $taxonomy ) {
94
+ $tax = get_taxonomy( $taxonomy );
95
+ if ( ! current_user_can( $tax->cap->edit_terms ) ) {
96
+ return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
97
+ }
98
+
99
+ $term = get_term_by( 'slug', $slug, $taxonomy );
100
+ if ( ! $term || is_wp_error( $term ) ) {
101
+ return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
102
+ }
103
+
104
+ $args = $this->query_args();
105
+ $input = $this->input( false );
106
+ if ( ! is_array( $input ) || ! $input ) {
107
+ return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
108
+ }
109
+
110
+ $update = array();
111
+ if ( ! empty( $input['parent'] ) || is_taxonomy_hierarchical( $taxonomy ) ) {
112
+ $update['parent'] = $input['parent'];
113
+ }
114
+
115
+ if ( ! empty( $input['description'] ) ) {
116
+ $update['description'] = addslashes( $input['description'] );
117
+ }
118
+
119
+ if ( ! empty( $input['name'] ) ) {
120
+ $update['name'] = addslashes( $input['name'] );
121
+ }
122
+
123
+ $data = wp_update_term( $term->term_id, $taxonomy, $update );
124
+ $term = get_term_by( 'id', $data['term_id'], $taxonomy );
125
+
126
+ $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
127
+ if ( ! $return || is_wp_error( $return ) ) {
128
+ return $return;
129
+ }
130
+
131
+ /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
132
+ do_action( 'wpcom_json_api_objects', 'terms' );
133
+ return $return;
134
+ }
135
+
136
+ // /sites/%s/taxonomies/%s/terms/slug:%s/delete -> $blog_id, $taxonomy, $slug
137
+ function delete_term( $path, $blog_id, $slug, $taxonomy ) {
138
+ $term = get_term_by( 'slug', $slug, $taxonomy );
139
+ $tax = get_taxonomy( $taxonomy );
140
+ if ( ! current_user_can( $tax->cap->delete_terms ) ) {
141
+ return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
142
+ }
143
+
144
+ if ( ! $term || is_wp_error( $term ) ) {
145
+ return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
146
+ }
147
+
148
+ $args = $this->query_args();
149
+ $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
150
+ if ( ! $return || is_wp_error( $return ) ) {
151
+ return $return;
152
+ }
153
+
154
+ /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
155
+ do_action( 'wpcom_json_api_objects', 'terms' );
156
+
157
+ wp_delete_term( $term->term_id, $taxonomy );
158
+
159
+ return array(
160
+ 'slug' => (string) $term->slug,
161
+ 'success' => true
162
+ );
163
+ }
164
+ }
json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php CHANGED
@@ -148,6 +148,8 @@ class Jetpack_JSON_API_Plugins_Modify_Endpoint extends Jetpack_JSON_API_Plugins_
148
  remove_action( 'upgrader_process_complete', 'wp_version_check' );
149
  remove_action( 'upgrader_process_complete', 'wp_update_themes' );
150
 
 
 
151
  foreach ( $this->plugins as $plugin ) {
152
 
153
  if ( ! in_array( $plugin, $plugin_updates_needed ) ) {
148
  remove_action( 'upgrader_process_complete', 'wp_version_check' );
149
  remove_action( 'upgrader_process_complete', 'wp_update_themes' );
150
 
151
+ $result = false;
152
+
153
  foreach ( $this->plugins as $plugin ) {
154
 
155
  if ( ! in_array( $plugin, $plugin_updates_needed ) ) {
modules/after-the-deadline/atd-nonvis-editor-plugin.js CHANGED
@@ -80,6 +80,7 @@ function AtD_restore_if_proofreading() {
80
  }
81
  }
82
 
 
83
  function AtD_unbind_proofreader_listeners() {
84
  jQuery('#save-post, #post-preview, #publish, #edButtonPreview').unbind('focus', AtD_restore_if_proofreading );
85
  jQuery('#add_poll, #add_image, #add_video, #add_audio, #add_media').unbind('click', AtD_restore_if_proofreading );
@@ -110,7 +111,7 @@ function AtD_check(button) {
110
  AtD_qtbutton = button;
111
  }
112
 
113
- if ( !jQuery('#content').size() ) {
114
  if ( 'undefined' !== typeof callback ) {
115
  callback( 0 );
116
  }
80
  }
81
  }
82
 
83
+ /* exported AtD_unbind_proofreader_listeners */
84
  function AtD_unbind_proofreader_listeners() {
85
  jQuery('#save-post, #post-preview, #publish, #edButtonPreview').unbind('focus', AtD_restore_if_proofreading );
86
  jQuery('#add_poll, #add_image, #add_video, #add_audio, #add_media').unbind('click', AtD_restore_if_proofreading );
111
  AtD_qtbutton = button;
112
  }
113
 
114
+ if ( !jQuery('#content').length ) {
115
  if ( 'undefined' !== typeof callback ) {
116
  callback( 0 );
117
  }
modules/after-the-deadline/atd.core.js CHANGED
@@ -6,7 +6,7 @@
6
  * Contact : raffi@automattic.com
7
  */
8
 
9
- /* jshint sub: true, devel: true, onevar: false, smarttabs: true */
10
  /* exported EXPORTED_SYMBOLS, atd_sprintf */
11
 
12
  /* EXPORTED_SYMBOLS is set so this file can be a JavaScript Module */
6
  * Contact : raffi@automattic.com
7
  */
8
 
9
+ /* jshint sub: true, devel: true, onevar: false, smarttabs: true, loopfunc: true */
10
  /* exported EXPORTED_SYMBOLS, atd_sprintf */
11
 
12
  /* EXPORTED_SYMBOLS is set so this file can be a JavaScript Module */
modules/after-the-deadline/jquery.atd.js CHANGED
@@ -14,7 +14,7 @@
14
  * Contact : willis.rh@gmail.com
15
  */
16
 
17
- /* jshint onevar: false, sub: true, smarttabs: true */
18
  /* global AtDCore, AtD_proofread_click_count, CSSHttpRequest, ActiveXObject */
19
 
20
  var AtD =
14
  * Contact : willis.rh@gmail.com
15
  */
16
 
17
+ /* jshint onevar: false, sub: true, smarttabs: true, loopfunc: true */
18
  /* global AtDCore, AtD_proofread_click_count, CSSHttpRequest, ActiveXObject */
19
 
20
  var AtD =
modules/after-the-deadline/tinymce/editor_plugin.js CHANGED
@@ -15,7 +15,7 @@
15
  * Moxiecode Spell Checker plugin released under the LGPL with TinyMCE
16
  */
17
 
18
- /* jshint onevar: false, sub: true, devel: true */
19
  /* global tinymce, AtDCore, AtD_proofread_click_count */
20
 
21
  (function()
15
  * Moxiecode Spell Checker plugin released under the LGPL with TinyMCE
16
  */
17
 
18
+ /* jshint onevar: false, sub: true, devel: true, loopfunc: true */
19
  /* global tinymce, AtDCore, AtD_proofread_click_count */
20
 
21
  (function()
modules/carousel/jetpack-carousel.js CHANGED
@@ -947,6 +947,10 @@ jQuery(document).ready(function($) {
947
  medium_width = parseInt( medium_size_parts[0], 10 ),
948
  medium_height = parseInt( medium_size_parts[1], 10 );
949
 
 
 
 
 
950
  // Give devices with a higher devicePixelRatio higher-res images (Retina display = 2, Android phones = 1.5, etc)
951
  if ( 'undefined' !== typeof window.devicePixelRatio && window.devicePixelRatio > 1 ) {
952
  args.max_width = args.max_width * window.devicePixelRatio;
@@ -968,6 +972,11 @@ jQuery(document).ready(function($) {
968
  var origPhotonUrl = args.large_file;
969
  if ( -1 !== largeFileIndex ) {
970
  origPhotonUrl = args.large_file.substring( 0, largeFileIndex );
 
 
 
 
 
971
  }
972
  return origPhotonUrl;
973
  }
947
  medium_width = parseInt( medium_size_parts[0], 10 ),
948
  medium_height = parseInt( medium_size_parts[1], 10 );
949
 
950
+ // Assign max width and height.
951
+ args.orig_max_width = args.max_width;
952
+ args.orig_max_height = args.max_height;
953
+
954
  // Give devices with a higher devicePixelRatio higher-res images (Retina display = 2, Android phones = 1.5, etc)
955
  if ( 'undefined' !== typeof window.devicePixelRatio && window.devicePixelRatio > 1 ) {
956
  args.max_width = args.max_width * window.devicePixelRatio;
972
  var origPhotonUrl = args.large_file;
973
  if ( -1 !== largeFileIndex ) {
974
  origPhotonUrl = args.large_file.substring( 0, largeFileIndex );
975
+ // If we have a really large image load a smaller version
976
+ // that is closer to the viewable size
977
+ if ( args.orig_width > args.max_width || args.orig_height > args.max_height ) {
978
+ origPhotonUrl += '?fit=' + args.orig_max_width + '%2C' + args.orig_max_height;
979
+ }
980
  }
981
  return origPhotonUrl;
982
  }
modules/comments/comments.php CHANGED
@@ -152,15 +152,11 @@ class Jetpack_Comments extends Highlander_Comments_Base {
152
  return $avatar;
153
  }
154
 
155
- if ( false === strpos( $comment->comment_author_url, '/www.facebook.com/' ) && false === strpos( $comment->comment_author_url, '/twitter.com/' ) ) {
156
- // It's neither FB nor Twitter - bail
157
- return $avatar;
158
- }
159
-
160
- // It's a FB or Twitter avatar
161
  $foreign_avatar = get_comment_meta( $comment->comment_ID, 'hc_avatar', true );
162
- if ( empty( $foreign_avatar ) ) {
163
- // Can't find the avatar details - bail
 
164
  return $avatar;
165
  }
166
 
152
  return $avatar;
153
  }
154
 
155
+ // Detect whether it's a Facebook or Twitter avatar
 
 
 
 
 
156
  $foreign_avatar = get_comment_meta( $comment->comment_ID, 'hc_avatar', true );
157
+ $foreign_avatar_hostname = parse_url( $foreign_avatar, PHP_URL_HOST );
158
+ if ( ! $foreign_avatar_hostname ||
159
+ ! preg_match( '/\.?(graph\.facebook\.com|twimg\.com)$/', $foreign_avatar_hostname ) ) {
160
  return $avatar;
161
  }
162
 
modules/contact-form/admin.php CHANGED
@@ -1,15 +1,4 @@
1
  <?php
2
-
3
- function grunion_menu_alter() {
4
- if( is_rtl() ){
5
- wp_enqueue_style( 'grunion-menu-alter', plugins_url( 'css/rtl/menu-alter-rtl.css', __FILE__ ) );
6
- } else {
7
- wp_enqueue_style( 'grunion-menu-alter', plugins_url( 'css/menu-alter.css', __FILE__ ) );
8
- }
9
- }
10
-
11
- add_action( 'admin_enqueue_scripts', 'grunion_menu_alter' );
12
-
13
  /**
14
  * Add a contact form button to the post composition screen
15
  */
@@ -85,13 +74,6 @@ function grunion_admin_css() {
85
  color: #D98500;
86
  }
87
 
88
- #icon-edit.icon32-posts-feedback, #icon-post.icon32-posts-feedback { background: url("<?php echo GRUNION_PLUGIN_URL; ?>images/grunion-menu-big.png") no-repeat !important; }
89
- @media only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5) {
90
- #icon-edit.icon32-posts-feedback, #icon-post.icon32-posts-feedback { background: url("<?php echo GRUNION_PLUGIN_URL; ?>images/grunion-menu-big-2x.png") no-repeat !important; background-size: 30px 31px !important; }
91
- }
92
-
93
- #icon-edit.icon32-posts-feedback { background-position: 2px 2px !important; }
94
-
95
  </style>
96
 
97
  <?php
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
2
  /**
3
  * Add a contact form button to the post composition screen
4
  */
74
  color: #D98500;
75
  }
76
 
 
 
 
 
 
 
 
77
  </style>
78
 
79
  <?php
modules/contact-form/css/menu-alter.css DELETED
@@ -1,73 +0,0 @@
1
- #menu-posts-feedback .wp-menu-image img {
2
- display: none;
3
- }
4
-
5
- #adminmenu .menu-icon-feedback div.wp-menu-image {
6
- background: none !important;
7
- }
8
-
9
- #adminmenu .menu-icon-feedback div.wp-menu-image:before {
10
- content: '\f175';
11
- margin-left: -1px;
12
- }
13
-
14
- .jetpack-contact-form-icon:before {
15
- content: '\f175';
16
- color: #888;
17
- vertical-align: text-bottom;
18
- font: normal 18px/1 'dashicons';
19
- speak: none;
20
- -webkit-font-smoothing: antialiased;
21
- -moz-osx-font-smoothing: grayscale;
22
- }
23
-
24
- .pre-mp6 #adminmenu .menu-icon-feedback:hover div.wp-menu-image,
25
- .pre-mp6 #adminmenu .menu-icon-feedback.wp-has-current-submenu div.wp-menu-image,
26
- .pre-mp6 #adminmenu .menu-icon-feedback.current div.wp-menu-image {
27
- background: url(../images/grunion-menu-hover.png) no-repeat 7px 7px !important;
28
- background-size: 15px 16px !important;
29
- }
30
-
31
- .pre-mp6 #adminmenu .menu-icon-feedback div.wp-menu-image {
32
- background: url(../images/grunion-menu.png) no-repeat 7px 7px !important;
33
- background-size: 15px 16px !important;
34
- }
35
-
36
- .pre-mp6 #adminmenu .menu-icon-feedback div.wp-menu-image:before {
37
- display: none;
38
- }
39
-
40
- .pre-mp6 .jetpack-contact-form-icon {
41
- background: url(../images/grunion-form.png) no-repeat;
42
- width: 16px;
43
- height: 16px;
44
- display: inline-block;
45
- vertical-align: middle;
46
- background-size: 13px 12px !important;
47
- }
48
-
49
- .pre-mp6 .jetpack-contact-form-icon:before {
50
- display: none;
51
- }
52
-
53
- @media only screen and (min--moz-device-pixel-ratio: 1.5),
54
- only screen and (-o-min-device-pixel-ratio: 3/2),
55
- only screen and (-webkit-min-device-pixel-ratio: 1.5),
56
- only screen and (min-device-pixel-ratio: 1.5) {
57
-
58
- .pre-mp6 #adminmenu .menu-icon-feedback:hover div.wp-menu-image,
59
- .pre-mp6 #adminmenu .menu-icon-feedback.wp-has-current-submenu div.wp-menu-image,
60
- .pre-mp6 #adminmenu .menu-icon-feedback.current div.wp-menu-image {
61
- background-image: url(../images/grunion-menu-hover-2x.png);
62
- }
63
-
64
- .pre-mp6 #adminmenu .menu-icon-feedback div.wp-menu-image {
65
- background-image: url(../images/grunion-menu-2x.png);
66
- }
67
-
68
- .pre-mp6 .jetpack-contact-form-icon {
69
- background-image: url(../images/grunion-form-2x.png);
70
- vertical-align: bottom;
71
- }
72
-
73
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/contact-form/grunion-contact-form.php CHANGED
@@ -109,6 +109,7 @@ class Grunion_Contact_Form_Plugin {
109
  if ( is_admin() ) {
110
  add_action( 'admin_init', array( $this, 'download_feedback_as_csv' ) );
111
  add_action( 'admin_footer-edit.php', array( $this, 'export_form' ) );
 
112
  }
113
 
114
  // custom post type we'll use to keep copies of the feedback items
@@ -120,7 +121,7 @@ class Grunion_Contact_Form_Plugin {
120
  'not_found' => __( 'No feedback found', 'jetpack' ),
121
  'not_found_in_trash' => __( 'No feedback found', 'jetpack' )
122
  ),
123
- 'menu_icon' => GRUNION_PLUGIN_URL . '/images/grunion-menu.png',
124
  'show_ui' => TRUE,
125
  'show_in_admin_bar' => FALSE,
126
  'public' => FALSE,
@@ -190,6 +191,29 @@ class Grunion_Contact_Form_Plugin {
190
  return $post_types;
191
  }
192
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  /**
194
  * Handles all contact-form POST submissions
195
  *
@@ -1904,6 +1928,17 @@ class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
1904
  'Reply-To: "' . $comment_author . '" <' . $reply_to_addr . ">\r\n" .
1905
  "Content-Type: text/html; charset=\"" . get_option('blog_charset') . "\"";
1906
 
 
 
 
 
 
 
 
 
 
 
 
1907
  /** This filter is already documented in modules/contact-form/admin.php */
1908
  $subject = apply_filters( 'contact_form_subject', $contact_form_subject, $all_values );
1909
  $url = $widget ? home_url( '/' ) : get_permalink( $post->ID );
@@ -1913,8 +1948,6 @@ class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
1913
  $time = date_i18n( $date_time_format, current_time( 'timestamp' ) );
1914
 
1915
  // keep a copy of the feedback as a custom post type
1916
- $feedback_time = current_time( 'mysql' );
1917
- $feedback_title = "{$comment_author} - {$feedback_time}";
1918
  $feedback_status = $is_spam === TRUE ? 'spam' : 'publish';
1919
 
1920
  foreach ( (array) $akismet_values as $av_key => $av_value ) {
@@ -1946,14 +1979,20 @@ class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
1946
  'post_parent' => (int) $post->ID,
1947
  'post_title' => addslashes( wp_kses( $feedback_title, array() ) ),
1948
  'post_content' => addslashes( wp_kses( $comment_content . "\n<!--more-->\n" . "AUTHOR: {$comment_author}\nAUTHOR EMAIL: {$comment_author_email}\nAUTHOR URL: {$comment_author_url}\nSUBJECT: {$subject}\nIP: {$comment_author_IP}\n" . print_r( $all_values, TRUE ), array() ) ), // so that search will pick up this data
1949
- 'post_name' => md5( $feedback_title ),
1950
  ) );
1951
 
1952
  // once insert has finished we don't need this filter any more
1953
- remove_filter( 'wp_insert_post_data', array( $plugin, 'insert_feedback_filter' ), 10, 2 );
1954
 
1955
  update_post_meta( $post_id, '_feedback_extra_fields', $this->addslashes_deep( $extra_values ) );
1956
 
 
 
 
 
 
 
1957
  if ( defined( 'AKISMET_VERSION' ) ) {
1958
  update_post_meta( $post_id, '_feedback_akismet_values', $this->addslashes_deep( $akismet_values ) );
1959
  }
109
  if ( is_admin() ) {
110
  add_action( 'admin_init', array( $this, 'download_feedback_as_csv' ) );
111
  add_action( 'admin_footer-edit.php', array( $this, 'export_form' ) );
112
+ add_action( 'current_screen', array( $this, 'unread_count' ) );
113
  }
114
 
115
  // custom post type we'll use to keep copies of the feedback items
121
  'not_found' => __( 'No feedback found', 'jetpack' ),
122
  'not_found_in_trash' => __( 'No feedback found', 'jetpack' )
123
  ),
124
+ 'menu_icon' => 'dashicons-feedback',
125
  'show_ui' => TRUE,
126
  'show_in_admin_bar' => FALSE,
127
  'public' => FALSE,
191
  return $post_types;
192
  }
193
 
194
+ /**
195
+ * Display the count of new feedback entries received. It's reset when user visits the Feedback screen.
196
+ *
197
+ * @since 4.1.0
198
+ */
199
+ function unread_count( $screen ) {
200
+ if ( isset( $screen->post_type ) && 'feedback' == $screen->post_type ) {
201
+ update_option( 'feedback_unread_count', 0 );
202
+ } else {
203
+ global $menu;
204
+ foreach ( $menu as $index => $menu_item ) {
205
+ if ( 'edit.php?post_type=feedback' == $menu_item[2] ) {
206
+ $unread = get_option( 'feedback_unread_count', 0 );
207
+ if ( $unread > 0 ) {
208
+ $unread_count = current_user_can( 'publish_pages' ) ? " <span class='feedback-unread count-{$unread} awaiting-mod'><span class='feedback-unread-count'>" . number_format_i18n( $unread ) . "</span></span>" : '';
209
+ $menu[ $index ][0] .= $unread_count;
210
+ }
211
+ break;
212
+ }
213
+ }
214
+ }
215
+ }
216
+
217
  /**
218
  * Handles all contact-form POST submissions
219
  *
1928
  'Reply-To: "' . $comment_author . '" <' . $reply_to_addr . ">\r\n" .
1929
  "Content-Type: text/html; charset=\"" . get_option('blog_charset') . "\"";
1930
 
1931
+ // Build feedback reference
1932
+ $feedback_time = current_time( 'mysql' );
1933
+ $feedback_title = "{$comment_author} - {$feedback_time}";
1934
+ $feedback_id = md5( $feedback_title );
1935
+
1936
+ $all_values = array_merge( $all_values, array(
1937
+ 'entry_title' => the_title_attribute( 'echo=0' ),
1938
+ 'entry_permalink' => esc_url( get_permalink( get_the_ID() ) ),
1939
+ 'feedback_id' => $feedback_id,
1940
+ ) );
1941
+
1942
  /** This filter is already documented in modules/contact-form/admin.php */
1943
  $subject = apply_filters( 'contact_form_subject', $contact_form_subject, $all_values );
1944
  $url = $widget ? home_url( '/' ) : get_permalink( $post->ID );
1948
  $time = date_i18n( $date_time_format, current_time( 'timestamp' ) );
1949
 
1950
  // keep a copy of the feedback as a custom post type
 
 
1951
  $feedback_status = $is_spam === TRUE ? 'spam' : 'publish';
1952
 
1953
  foreach ( (array) $akismet_values as $av_key => $av_value ) {
1979
  'post_parent' => (int) $post->ID,
1980
  'post_title' => addslashes( wp_kses( $feedback_title, array() ) ),
1981
  'post_content' => addslashes( wp_kses( $comment_content . "\n<!--more-->\n" . "AUTHOR: {$comment_author}\nAUTHOR EMAIL: {$comment_author_email}\nAUTHOR URL: {$comment_author_url}\nSUBJECT: {$subject}\nIP: {$comment_author_IP}\n" . print_r( $all_values, TRUE ), array() ) ), // so that search will pick up this data
1982
+ 'post_name' => $feedback_id,
1983
  ) );
1984
 
1985
  // once insert has finished we don't need this filter any more
1986
+ remove_filter( 'wp_insert_post_data', array( $plugin, 'insert_feedback_filter' ), 10 );
1987
 
1988
  update_post_meta( $post_id, '_feedback_extra_fields', $this->addslashes_deep( $extra_values ) );
1989
 
1990
+ if ( 'publish' == $feedback_status ) {
1991
+ // Increase count of unread feedback.
1992
+ $unread = get_option( 'feedback_unread_count', 0 ) + 1;
1993
+ update_option( 'feedback_unread_count', $unread );
1994
+ }
1995
+
1996
  if ( defined( 'AKISMET_VERSION' ) ) {
1997
  update_post_meta( $post_id, '_feedback_akismet_values', $this->addslashes_deep( $akismet_values ) );
1998
  }
modules/contact-form/images/grunion-menu-2x.png DELETED
Binary file
modules/contact-form/images/grunion-menu-big-2x.png DELETED
Binary file
modules/contact-form/images/grunion-menu-big.png DELETED
Binary file
modules/contact-form/images/grunion-menu-hover-2x.png DELETED
Binary file
modules/contact-form/images/grunion-menu-hover.png DELETED
Binary file
modules/contact-form/images/grunion-menu.png DELETED
Binary file
modules/custom-css/csstidy/data-wp.inc.php CHANGED
@@ -31,6 +31,10 @@ foreach ( $GLOBALS['csstidy']['all_properties'] as $property => $levels ) {
31
  }
32
  }
33
 
 
 
 
 
34
  foreach ( $GLOBALS['csstidy']['multiple_properties'] as $property ) {
35
  if ( '-' != $property[0] ) {
36
  $GLOBALS['csstidy']['multiple_properties'][] = '-o-' . $property;
31
  }
32
  }
33
 
34
+ // Add `display` to the list of properties that can be used multiple times in a single selector
35
+ $GLOBALS['csstidy']['multiple_properties'][] = 'display';
36
+
37
+ // Allow vendor prefixes for any property that is allowed to be used multiple times inside a single selector
38
  foreach ( $GLOBALS['csstidy']['multiple_properties'] as $property ) {
39
  if ( '-' != $property[0] ) {
40
  $GLOBALS['csstidy']['multiple_properties'][] = '-o-' . $property;
modules/custom-css/custom-css.php CHANGED
@@ -962,7 +962,7 @@ class Jetpack_Custom_CSS {
962
 
963
  $safecss_post = Jetpack_Custom_CSS::get_post();
964
 
965
- if ( ! empty( $safecss_post ) && 0 < $safecss_post['ID'] && wp_get_post_revisions( $safecss_post['ID'] ) )
966
  add_meta_box( 'revisionsdiv', __( 'CSS Revisions', 'jetpack' ), array( __CLASS__, 'revisions_meta_box' ), 'editcss', 'side' );
967
  ?>
968
  <div class="wrap">
962
 
963
  $safecss_post = Jetpack_Custom_CSS::get_post();
964
 
965
+ if ( ! empty( $safecss_post ) && 0 < $safecss_post['ID'] && wp_get_post_revisions( $safecss_post['ID'], array( 'posts_per_page' => 1 ) ) )
966
  add_meta_box( 'revisionsdiv', __( 'CSS Revisions', 'jetpack' ), array( __CLASS__, 'revisions_meta_box' ), 'editcss', 'side' );
967
  ?>
968
  <div class="wrap">
modules/custom-post-types/js/menu-checkboxes.js CHANGED
@@ -32,7 +32,6 @@
32
  },
33
 
34
  checkFirst: function() {
35
- console.log( 'first!' );
36
  NovaCheckBoxes.inputs.first().prop( 'checked', true );
37
  },
38
 
@@ -40,6 +39,9 @@
40
  if ( $( this ).is( ':checked' ) ) {
41
  return NovaCheckBoxes.inputs.not( this ).prop( 'checked', false );
42
  } else {
 
 
 
43
  return NovaCheckBoxes.checkFirst();
44
  }
45
  }
32
  },
33
 
34
  checkFirst: function() {
 
35
  NovaCheckBoxes.inputs.first().prop( 'checked', true );
36
  },
37
 
39
  if ( $( this ).is( ':checked' ) ) {
40
  return NovaCheckBoxes.inputs.not( this ).prop( 'checked', false );
41
  } else {
42
+ if ( $( this ).closest( '#nova_menuchecklist' ).find( ':checked' ).length > 0 ) {
43
+ return $( this ).prop( 'checked', false );
44
+ }
45
  return NovaCheckBoxes.checkFirst();
46
  }
47
  }
modules/custom-post-types/nova.php CHANGED
@@ -526,9 +526,12 @@ class Nova_Restaurant {
526
  ), wp_nonce_url( $url, 'nova_move_item_down_' . $post_id ) );
527
  $menu_item = get_post($post_id);
528
  $this->get_menu_by_post_id( $post_id );
 
 
 
529
  ?>
530
  <input type="hidden" class="menu-order-value" name="nova_order[<?php echo (int) $post_id ?>]" value="<?php echo esc_attr( $menu_item->menu_order ) ?>" />
531
- <input type="hidden" class='nova-menu-term' name="nova_menu_term[<?php echo (int) $post_id ?>]" value="<?php echo esc_attr( $this->get_menu_by_post_id( $post_id )->term_id ); ?>">
532
 
533
  <span class="hide-if-js">
534
  &nbsp; &nbsp; &mdash; <a class="nova-move-item-up" data-post-id="<?php echo (int) $post_id; ?>" href="<?php echo esc_url( $up_url ); ?>">up</a>
@@ -766,16 +769,25 @@ class Nova_Restaurant {
766
 
767
  $term = $this->get_menu_item_menu_leaf( $post->ID );
768
 
769
- if ( false !== $last_term_id && $last_term_id === $term->term_id )
770
- return;
771
 
772
- $last_term_id = $term->term_id;
 
 
773
 
774
- $parent_count = 0;
775
- $current_term = $term;
776
- while ( $current_term->parent ) {
777
- $parent_count++;
778
- $current_term = get_term( $current_term->parent, self::MENU_TAX );
 
 
 
 
 
 
 
 
779
  }
780
 
781
  $non_order_column_count = $wp_list_table->get_column_count() - 1;
@@ -786,22 +798,22 @@ class Nova_Restaurant {
786
 
787
  $up_url = add_query_arg( array(
788
  'action' => 'move-menu-up',
789
- 'term_id' => (int) $term->term_id,
790
- ), wp_nonce_url( $url, 'nova_move_menu_up_' . $term->term_id ) );
791
 
792
  $down_url = add_query_arg( array(
793
  'action' => 'move-menu-down',
794
- 'term_id' => (int) $term->term_id,
795
- ), wp_nonce_url( $url, 'nova_move_menu_down_' . $term->term_id ) );
796
 
797
  ?>
798
- <tr class="no-items menu-label-row" data-term_id="<?php echo esc_attr( $term->term_id ) ?>">
799
  <td class="colspanchange" colspan="<?php echo (int) $non_order_column_count; ?>">
800
  <h3><?php
801
  echo str_repeat( ' &mdash; ', (int) $parent_count );
802
 
803
- if ( ! is_wp_error( $term ) ) {
804
- echo esc_html( sanitize_term_field( 'name', $term->name, $term->term_id, self::MENU_TAX, 'display' ) );
805
  edit_term_link( __( 'edit', 'jetpack' ), '<span class="edit-nova-section"><span class="dashicon dashicon-edit"></span>', '</span>', $term );
806
 
807
  } else {
@@ -810,7 +822,7 @@ class Nova_Restaurant {
810
  ?></h3>
811
  </td>
812
  <td>
813
- <?php if ( ! is_wp_error( $term ) ) { ?>
814
  <a class="nova-move-menu-up" title="<?php esc_attr_e( 'Move menu section up', 'jetpack' ); ?>" href="<?php echo esc_url( $up_url ); ?>"><?php esc_html_e( 'UP', 'jetpack' ); ?></a>
815
  <br />
816
  <a class="nova-move-menu-down" title="<?php esc_attr_e( 'Move menu section down', 'jetpack' ); ?>" href="<?php echo esc_url( $down_url ); ?>"><?php esc_html_e( 'DOWN', 'jetpack' ); ?></a>
526
  ), wp_nonce_url( $url, 'nova_move_item_down_' . $post_id ) );
527
  $menu_item = get_post($post_id);
528
  $this->get_menu_by_post_id( $post_id );
529
+ if ( $term_id = $this->get_menu_by_post_id( $post_id ) ) {
530
+ $term_id = $term_id->term_id;
531
+ }
532
  ?>
533
  <input type="hidden" class="menu-order-value" name="nova_order[<?php echo (int) $post_id ?>]" value="<?php echo esc_attr( $menu_item->menu_order ) ?>" />
534
+ <input type="hidden" class='nova-menu-term' name="nova_menu_term[<?php echo (int) $post_id ?>]" value="<?php echo esc_attr( $term_id ); ?>">
535
 
536
  <span class="hide-if-js">
537
  &nbsp; &nbsp; &mdash; <a class="nova-move-item-up" data-post-id="<?php echo (int) $post_id; ?>" href="<?php echo esc_url( $up_url ); ?>">up</a>
769
 
770
  $term = $this->get_menu_item_menu_leaf( $post->ID );
771
 
772
+ $term_id = $term instanceof WP_Term ? $term->term_id : null;
 
773
 
774
+ if ( false !== $last_term_id && $last_term_id === $term_id ) {
775
+ return;
776
+ }
777
 
778
+ if ( is_null( $term_id ) ) {
779
+ $last_term_id = null;
780
+ $term_name = '';
781
+ $parent_count = 0;
782
+ } else {
783
+ $last_term_id = $term->term_id;
784
+ $term_name = $term->name;
785
+ $parent_count = 0;
786
+ $current_term = $term;
787
+ while ( $current_term->parent ) {
788
+ $parent_count++;
789
+ $current_term = get_term( $current_term->parent, self::MENU_TAX );
790
+ }
791
  }
792
 
793
  $non_order_column_count = $wp_list_table->get_column_count() - 1;
798
 
799
  $up_url = add_query_arg( array(
800
  'action' => 'move-menu-up',
801
+ 'term_id' => (int) $term_id,
802
+ ), wp_nonce_url( $url, 'nova_move_menu_up_' . $term_id ) );
803
 
804
  $down_url = add_query_arg( array(
805
  'action' => 'move-menu-down',
806
+ 'term_id' => (int) $term_id,
807
+ ), wp_nonce_url( $url, 'nova_move_menu_down_' . $term_id ) );
808
 
809
  ?>
810
+ <tr class="no-items menu-label-row" data-term_id="<?php echo esc_attr( $term_id ) ?>">
811
  <td class="colspanchange" colspan="<?php echo (int) $non_order_column_count; ?>">
812
  <h3><?php
813
  echo str_repeat( ' &mdash; ', (int) $parent_count );
814
 
815
+ if ( $term instanceof WP_Term ) {
816
+ echo esc_html( sanitize_term_field( 'name', $term_name, $term_id, self::MENU_TAX, 'display' ) );
817
  edit_term_link( __( 'edit', 'jetpack' ), '<span class="edit-nova-section"><span class="dashicon dashicon-edit"></span>', '</span>', $term );
818
 
819
  } else {
822
  ?></h3>
823
  </td>
824
  <td>
825
+ <?php if ( $term instanceof WP_Term ) { ?>
826
  <a class="nova-move-menu-up" title="<?php esc_attr_e( 'Move menu section up', 'jetpack' ); ?>" href="<?php echo esc_url( $up_url ); ?>"><?php esc_html_e( 'UP', 'jetpack' ); ?></a>
827
  <br />
828
  <a class="nova-move-menu-down" title="<?php esc_attr_e( 'Move menu section down', 'jetpack' ); ?>" href="<?php echo esc_url( $down_url ); ?>"><?php esc_html_e( 'DOWN', 'jetpack' ); ?></a>
modules/custom-post-types/portfolios.php CHANGED
@@ -57,6 +57,7 @@ class Jetpack_Portfolio {
57
  add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
58
  add_filter( sprintf( 'manage_%s_posts_columns', self::CUSTOM_POST_TYPE), array( $this, 'edit_admin_columns' ) );
59
  add_filter( sprintf( 'manage_%s_posts_custom_column', self::CUSTOM_POST_TYPE), array( $this, 'image_column' ), 10, 2 );
 
60
 
61
  add_image_size( 'jetpack-portfolio-admin-thumb', 50, 50, true );
62
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) );
@@ -386,6 +387,68 @@ class Jetpack_Portfolio {
386
  }
387
  }
388
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
389
  /**
390
  * Follow CPT reading setting on CPT archive and taxonomy pages
391
  */
57
  add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
58
  add_filter( sprintf( 'manage_%s_posts_columns', self::CUSTOM_POST_TYPE), array( $this, 'edit_admin_columns' ) );
59
  add_filter( sprintf( 'manage_%s_posts_custom_column', self::CUSTOM_POST_TYPE), array( $this, 'image_column' ), 10, 2 );
60
+ add_action( 'customize_register', array( $this, 'customize_register' ) );
61
 
62
  add_image_size( 'jetpack-portfolio-admin-thumb', 50, 50, true );
63
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) );
387
  }
388
  }
389
 
390
+ /**
391
+ * Adds portfolio section to the Customizer.
392
+ */
393
+ function customize_register( $wp_customize ) {
394
+ $options = get_theme_support( self::CUSTOM_POST_TYPE );
395
+
396
+ if ( ( ! isset( $options[0]['title'] ) || true !== $options[0]['title'] ) && ( ! isset( $options[0]['content'] ) || true !== $options[0]['content'] ) && ( ! isset( $options[0]['featured-image'] ) || true !== $options[0]['featured-image'] ) ) {
397
+ return;
398
+ }
399
+
400
+ $wp_customize->add_section( 'jetpack_portfolio', array(
401
+ 'title' => esc_html__( 'Portfolio', 'jetpack' ),
402
+ 'theme_supports' => self::CUSTOM_POST_TYPE,
403
+ 'priority' => 130,
404
+ ) );
405
+
406
+ if ( isset( $options[0]['title'] ) && true === $options[0]['title'] ) {
407
+ $wp_customize->add_setting( 'jetpack_portfolio_title', array(
408
+ 'default' => esc_html__( 'Projects', 'jetpack' ),
409
+ 'type' => 'option',
410
+ 'sanitize_callback' => 'sanitize_text_field',
411
+ 'sanitize_js_callback' => 'sanitize_text_field',
412
+ ) );
413
+
414
+ $wp_customize->add_control( 'jetpack_portfolio_title', array(
415
+ 'section' => 'jetpack_portfolio',
416
+ 'label' => esc_html__( 'Portfolio Archive Title', 'jetpack' ),
417
+ 'type' => 'text',
418
+ ) );
419
+ }
420
+
421
+ if ( isset( $options[0]['content'] ) && true === $options[0]['content'] ) {
422
+ $wp_customize->add_setting( 'jetpack_portfolio_content', array(
423
+ 'default' => '',
424
+ 'type' => 'option',
425
+ 'sanitize_callback' => 'wp_kses_post',
426
+ 'sanitize_js_callback' => 'wp_kses_post',
427
+ ) );
428
+
429
+ $wp_customize->add_control( 'jetpack_portfolio_content', array(
430
+ 'section' => 'jetpack_portfolio',
431
+ 'label' => esc_html__( 'Portfolio Archive Content', 'jetpack' ),
432
+ 'type' => 'textarea',
433
+ ) );
434
+ }
435
+
436
+ if ( isset( $options[0]['featured-image'] ) && true === $options[0]['featured-image'] ) {
437
+ $wp_customize->add_setting( 'jetpack_portfolio_featured_image', array(
438
+ 'default' => '',
439
+ 'type' => 'option',
440
+ 'sanitize_callback' => 'attachment_url_to_postid',
441
+ 'sanitize_js_callback' => 'attachment_url_to_postid',
442
+ 'theme_supports' => 'post-thumbnails',
443
+ ) );
444
+
445
+ $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'jetpack_portfolio_featured_image', array(
446
+ 'section' => 'jetpack_portfolio',
447
+ 'label' => esc_html__( 'Portfolio Archive Featured Image', 'jetpack' ),
448
+ ) ) );
449
+ }
450
+ }
451
+
452
  /**
453
  * Follow CPT reading setting on CPT archive and taxonomy pages
454
  */
modules/custom-post-types/testimonial.php CHANGED
@@ -470,7 +470,7 @@ class Jetpack_Testimonial {
470
  ) );
471
  $wp_customize->add_control( 'jetpack_testimonials[page-title]', array(
472
  'section' => 'jetpack_testimonials',
473
- 'label' => esc_html__( 'Testimonial Page Title', 'jetpack' ),
474
  'type' => 'text',
475
  ) );
476
 
@@ -482,7 +482,7 @@ class Jetpack_Testimonial {
482
  $wp_customize->add_control( new Jetpack_Testimonial_Textarea_Control( $wp_customize, 'jetpack_testimonials[page-content]', array(
483
  'section' => 'jetpack_testimonials',
484
  'settings' => 'jetpack_testimonials[page-content]',
485
- 'label' => esc_html__( 'Testimonial Page Content', 'jetpack' ),
486
  ) ) );
487
 
488
  $wp_customize->add_setting( 'jetpack_testimonials[featured-image]', array(
@@ -493,7 +493,7 @@ class Jetpack_Testimonial {
493
  ) );
494
  $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'jetpack_testimonials[featured-image]', array(
495
  'section' => 'jetpack_testimonials',
496
- 'label' => esc_html__( 'Testimonial Page Featured Image', 'jetpack' ),
497
  ) ) );
498
 
499
  // The featured image control doesn't display properly in the Customizer unless we coerce
470
  ) );
471
  $wp_customize->add_control( 'jetpack_testimonials[page-title]', array(
472
  'section' => 'jetpack_testimonials',
473
+ 'label' => esc_html__( 'Testimonial Archive Title', 'jetpack' ),
474
  'type' => 'text',
475
  ) );
476
 
482
  $wp_customize->add_control( new Jetpack_Testimonial_Textarea_Control( $wp_customize, 'jetpack_testimonials[page-content]', array(
483
  'section' => 'jetpack_testimonials',
484
  'settings' => 'jetpack_testimonials[page-content]',
485
+ 'label' => esc_html__( 'Testimonial Archive Content', 'jetpack' ),
486
  ) ) );
487
 
488
  $wp_customize->add_setting( 'jetpack_testimonials[featured-image]', array(
493
  ) );
494
  $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'jetpack_testimonials[featured-image]', array(
495
  'section' => 'jetpack_testimonials',
496
+ 'label' => esc_html__( 'Testimonial Archive Featured Image', 'jetpack' ),
497
  ) ) );
498
 
499
  // The featured image control doesn't display properly in the Customizer unless we coerce
modules/gravatar-hovercards.php CHANGED
@@ -81,7 +81,7 @@ jQuery( function($) {
81
  }
82
  } ).parents( 'tr' );
83
  var ftr = tr.parents( 'table' ).find( 'tr:first' );
84
- if ( ftr.size() && !ftr.find( '#gravatar_disable_hovercards' ).size() ) {
85
  ftr.after( tr );
86
  }
87
  } );
81
  }
82
  } ).parents( 'tr' );
83
  var ftr = tr.parents( 'table' ).find( 'tr:first' );
84
+ if ( ftr.length && !ftr.find( '#gravatar_disable_hovercards' ).length ) {
85
  ftr.after( tr );
86
  }
87
  } );
modules/infinite-scroll.php CHANGED
@@ -95,7 +95,8 @@ class Jetpack_Infinite_Scroll_Extras {
95
  * @return html
96
  */
97
  public function setting_google_analytics() {
98
- echo '<label><input name="infinite_scroll_google_analytics" type="checkbox" value="1" ' . checked( true, (bool) get_option( $this->option_name_google_analytics, false ), false ) . ' /> ' . __( 'Track each Infinite Scroll post load as a page view in Google Analytics', 'jetpack' ) . '</br><small>' . __( 'By checking the box above, each new set of posts loaded via Infinite Scroll will be recorded as a page view in Google Analytics.', 'jetpack' ) . '</small>' . '</label>';
 
99
  }
100
 
101
  /**
95
  * @return html
96
  */
97
  public function setting_google_analytics() {
98
+ echo '<label><input name="infinite_scroll_google_analytics" type="checkbox" value="1" ' . checked( true, (bool) get_option( $this->option_name_google_analytics, false ), false ) . ' /> ' . esc_html__( 'Track each Infinite Scroll post load as a page view in Google Analytics', 'jetpack' ) . '</label>';
99
+ echo '<p class="description">' . esc_html__( 'Check the box above to record each new set of posts loaded via Infinite Scroll as a page view in Google Analytics.', 'jetpack' ) . '</p>';
100
  }
101
 
102
  /**
modules/infinite-scroll/infinity.js CHANGED
@@ -628,6 +628,20 @@ Scroller.prototype.updateURL = function( page ) {
628
  }
629
  }
630
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
631
  /**
632
  * Ready, set, go!
633
  */
628
  }
629
  }
630
 
631
+ /**
632
+ * Pause scrolling.
633
+ */
634
+ Scroller.prototype.pause = function() {
635
+ this.disabled = true;
636
+ };
637
+
638
+ /**
639
+ * Resume scrolling.
640
+ */
641
+ Scroller.prototype.resume = function() {
642
+ this.disabled = false;
643
+ };
644
+
645
  /**
646
  * Ready, set, go!
647
  */
modules/infinite-scroll/infinity.php CHANGED
@@ -331,7 +331,7 @@ class The_Neverending_Home_Page {
331
  return;
332
 
333
  // Add the setting field [infinite_scroll] and place it in Settings > Reading
334
- add_settings_field( self::$option_name_enabled, '<span id="infinite-scroll-options">' . __( 'To infinity and beyond', 'jetpack' ) . '</span>', array( $this, 'infinite_setting_html' ), 'reading' );
335
  register_setting( 'reading', self::$option_name_enabled, 'esc_attr' );
336
  }
337
 
@@ -346,7 +346,8 @@ class The_Neverending_Home_Page {
346
  if ( self::get_settings()->footer_widgets || 'click' == self::get_settings()->requested_type ) {
347
  echo '<label>' . $notice . '</label>';
348
  } else {
349
- echo '<label><input name="infinite_scroll" type="checkbox" value="1" ' . checked( 1, '' !== get_option( self::$option_name_enabled ), false ) . ' /> ' . __( 'Scroll Infinitely', 'jetpack' ) . '</br><small>' . sprintf( __( '(Shows %s posts on each load)', 'jetpack' ), number_format_i18n( self::get_settings()->posts_per_page ) ) . '</small>' . '</label>';
 
350
  }
351
  }
352
 
331
  return;
332
 
333
  // Add the setting field [infinite_scroll] and place it in Settings > Reading
334
+ add_settings_field( self::$option_name_enabled, '<span id="infinite-scroll-options">' . esc_html__( 'Infinite Scroll Behavior', 'jetpack' ) . '</span>', array( $this, 'infinite_setting_html' ), 'reading' );
335
  register_setting( 'reading', self::$option_name_enabled, 'esc_attr' );
336
  }
337
 
346
  if ( self::get_settings()->footer_widgets || 'click' == self::get_settings()->requested_type ) {
347
  echo '<label>' . $notice . '</label>';
348
  } else {
349
+ echo '<label><input name="infinite_scroll" type="checkbox" value="1" ' . checked( 1, '' !== get_option( self::$option_name_enabled ), false ) . ' /> ' . esc_html__( 'Check to load posts as you scroll. Uncheck to show clickable button to load posts', 'jetpack' ) . '</label>';
350
+ echo '<p class="description">' . sprintf( esc_html__( 'Shows %s posts on each load.', 'jetpack' ), number_format_i18n( self::get_settings()->posts_per_page ) ) . '</p>';
351
  }
352
  }
353
 
modules/likes.php CHANGED
@@ -19,7 +19,7 @@ Jetpack::dns_prefetch( array(
19
  ) );
20
 
21
  class Jetpack_Likes {
22
- public $version = '20151215';
23
 
24
  public static function init() {
25
  static $instance = NULL;
@@ -320,7 +320,7 @@ class Jetpack_Likes {
320
  header = table.prevAll( 'h3:first' ),
321
  newParent = $( '#moderation_notify' ).parent( 'label' ).parent();
322
 
323
- if ( !table.size() || !header.size() || !newParent.size() ) {
324
  return;
325
  }
326
 
19
  ) );
20
 
21
  class Jetpack_Likes {
22
+ public $version = '20160429';
23
 
24
  public static function init() {
25
  static $instance = NULL;
320
  header = table.prevAll( 'h3:first' ),
321
  newParent = $( '#moderation_notify' ).parent( 'label' ).parent();
322
 
323
+ if ( !table.length || !header.length || !newParent.length ) {
324
  return;
325
  }
326
 
modules/likes/queuehandler.js CHANGED
@@ -1,4 +1,4 @@
1
- /* global pm, wpcom_reblog */
2
 
3
  var jetpackLikesWidgetQueue = [];
4
  var jetpackLikesWidgetBatch = [];
1
+ /* global pm, wpcom_reblog, JSON */
2
 
3
  var jetpackLikesWidgetQueue = [];
4
  var jetpackLikesWidgetBatch = [];
modules/manage.php CHANGED
@@ -7,9 +7,9 @@
7
  * Recommendation Order: 3
8
  * First Introduced: 3.4
9
  * Requires Connection: Yes
10
- * Auto Activate: No
11
  * Module Tags: Centralized Management, Recommended
12
- * Feature: Recommended, Jumpstart
13
  * Additional Search Queries: manage, management, remote
14
  */
15
 
7
  * Recommendation Order: 3
8
  * First Introduced: 3.4
9
  * Requires Connection: Yes
10
+ * Auto Activate: Yes
11
  * Module Tags: Centralized Management, Recommended
12
+ * Feature: Recommended
13
  * Additional Search Queries: manage, management, remote
14
  */
15
 
modules/publicize/ui.php CHANGED
@@ -23,7 +23,17 @@ class Publicize_UI {
23
 
24
  function init() {
25
  // Show only to users with the capability required to manage their Publicize connections.
26
- if ( ! current_user_can( 'publish_posts' ) ) {
 
 
 
 
 
 
 
 
 
 
27
  return;
28
  }
29
 
@@ -312,7 +322,7 @@ class Publicize_UI {
312
  <script type="text/javascript">
313
  jQuery( function($) {
314
  var wpasTitleCounter = $( '#wpas-title-counter' ),
315
- wpasTwitterCheckbox = $( '.wpas-submit-twitter' ).size(),
316
  wpasTitle = $('#wpas-title').keyup( function() {
317
  var length = wpasTitle.val().length;
318
  wpasTitleCounter.text( length );
@@ -338,7 +348,7 @@ jQuery( function($) {
338
  $('#publicize-form').slideDown( 'fast', function() {
339
  wpasTitle.focus();
340
  if ( !wpasTitle.text() ) {
341
- var url = $('#shortlink').size() ? $('#shortlink').val() : '';
342
 
343
  var defaultMessage = $.trim( '<?php printf( $default_prefix, 'url' ); printf( $default_message, '$("#title").val()', 'url' ); printf( $default_suffix, 'url' ); ?>' );
344
 
23
 
24
  function init() {
25
  // Show only to users with the capability required to manage their Publicize connections.
26
+ /**
27
+ * Filter what user capability is required to use the publicize form on the edit post page. Useful if publish post capability has been removed from role.
28
+ *
29
+ * @module publicize
30
+ *
31
+ * @since 4.1.0
32
+ *
33
+ * @param string $capability User capability needed to use publicize
34
+ */
35
+ $capability = apply_filters( 'jetpack_publicize_capability', 'publish_posts' );
36
+ if ( ! current_user_can( $capability ) ) {
37
  return;
38
  }
39
 
322
  <script type="text/javascript">
323
  jQuery( function($) {
324
  var wpasTitleCounter = $( '#wpas-title-counter' ),
325
+ wpasTwitterCheckbox = $( '.wpas-submit-twitter' ).length,
326
  wpasTitle = $('#wpas-title').keyup( function() {
327
  var length = wpasTitle.val().length;
328
  wpasTitleCounter.text( length );
348
  $('#publicize-form').slideDown( 'fast', function() {
349
  wpasTitle.focus();
350
  if ( !wpasTitle.text() ) {
351
+ var url = $('#shortlink').length ? $('#shortlink').val() : '';
352
 
353
  var defaultMessage = $.trim( '<?php printf( $default_prefix, 'url' ); printf( $default_message, '$("#title").val()', 'url' ); printf( $default_suffix, 'url' ); ?>' );
354
 
modules/related-posts/jetpack-related-posts.php CHANGED
@@ -468,10 +468,10 @@ EOT;
468
 
469
  var update_preview = function() {
470
  var html = '';
471
- if ( $( 'input[name="jetpack_relatedposts[show_headline]"]:checked' ).size() ) {
472
  html += '$related_headline';
473
  }
474
- if ( $( 'input[name="jetpack_relatedposts[show_thumbnails]"]:checked' ).size() ) {
475
  html += '$related_with_images';
476
  } else {
477
  html += '$related_without_images';
468
 
469
  var update_preview = function() {
470
  var html = '';
471
+ if ( $( 'input[name="jetpack_relatedposts[show_headline]"]:checked' ).length ) {
472
  html += '$related_headline';
473
  }
474
+ if ( $( 'input[name="jetpack_relatedposts[show_thumbnails]"]:checked' ).length ) {
475
  html += '$related_with_images';
476
  } else {
477
  html += '$related_without_images';
modules/related-posts/related-posts.css CHANGED
@@ -105,6 +105,7 @@
105
  left:0;
106
  right:0;
107
  display:block;
 
108
  }
109
 
110
  #jp-relatedposts .jp-relatedposts-items p {
105
  left:0;
106
  right:0;
107
  display:block;
108
+ border-bottom: 0;
109
  }
110
 
111
  #jp-relatedposts .jp-relatedposts-items p {
modules/sharedaddy/admin-sharing-rtl.css CHANGED
@@ -101,7 +101,7 @@ li.service span:before {
101
  color: #555;
102
  display: inline-block;
103
  -webkit-font-smoothing: antialiased;
104
- font: normal 16px/1 'Noticons', 'Genericons';
105
  vertical-align: top;
106
  position: relative;
107
  top: 1px;
@@ -134,9 +134,6 @@ li.service.share-tumblr span:before {
134
  li.service.share-pocket span:before {
135
  content: '\f224';
136
  }
137
- li.service.share-skype span:before {
138
- content: '\f220';
139
- }
140
  li.service.share-pinterest span:before {
141
  content: '\f209';
142
  }
@@ -144,12 +141,20 @@ li.service.share-google-plus-1 span:before {
144
  content: '\f218';
145
  }
146
  li.service.share-facebook span:before {
147
- content: '\f204';
148
  }
149
  li.service.share-press-this span:before { /* Fixme: remove this button in favor of reblog */
150
  content: '\f205';
151
  }
152
-
 
 
 
 
 
 
 
 
153
 
154
  /**
155
  * Preview section
@@ -311,8 +316,7 @@ body.settings_page_sharing .advanced input[type=submit] {
311
  background: url(images/linkedin-smart.png) no-repeat top center;
312
  background-size: 99px 18px;
313
  width:99px;
314
- height:18px;
315
- margin-top: 1px;
316
  }
317
 
318
  .preview-google-plus-1 .option-smart-on {
@@ -349,7 +353,49 @@ body.settings_page_sharing .advanced input[type=submit] {
349
  width: 60px;
350
  height: 20px;
351
  }
 
 
 
 
 
 
352
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
353
 
354
  /**
355
  * Overflow sharing dialog
101
  color: #555;
102
  display: inline-block;
103
  -webkit-font-smoothing: antialiased;
104
+ font: normal 18px/1 'social-logos';
105
  vertical-align: top;
106
  position: relative;
107
  top: 1px;
134
  li.service.share-pocket span:before {
135
  content: '\f224';
136
  }
 
 
 
137
  li.service.share-pinterest span:before {
138
  content: '\f209';
139
  }
141
  content: '\f218';
142
  }
143
  li.service.share-facebook span:before {
144
+ content: '\f203';
145
  }
146
  li.service.share-press-this span:before { /* Fixme: remove this button in favor of reblog */
147
  content: '\f205';
148
  }
149
+ li.service.share-telegram span:before {
150
+ content: '\f606';
151
+ }
152
+ li.service.share-jetpack-whatsapp span:before {
153
+ content: '\f608';
154
+ }
155
+ li.service.share-skype span:before {
156
+ content: '\f220';
157
+ }
158
 
159
  /**
160
  * Preview section
316
  background: url(images/linkedin-smart.png) no-repeat top center;
317
  background-size: 99px 18px;
318
  width:99px;
319
+ height:20px;
 
320
  }
321
 
322
  .preview-google-plus-1 .option-smart-on {
353
  width: 60px;
354
  height: 20px;
355
  }
356
+ @media
357
+ (-webkit-min-device-pixel-ratio: 1.25),
358
+ (min-resolution: 120dpi) {
359
+ .preview-digg .option-smart-on {
360
+ background-image: url(images/smart-digg@2x.png);
361
+ }
362
 
363
+ .preview-reddit .option-smart-on {
364
+ background-image: url(images/smart-reddit@2x.png);
365
+ }
366
+
367
+ .preview-facebook .option-smart-on {
368
+ background-image: url(images/smart-like@2x.png);
369
+ }
370
+
371
+ .preview-twitter .option-smart-on {
372
+ background-image: url(images/smart-twitter@2x.png?1);
373
+ }
374
+
375
+ .preview-linkedin .option-smart-on {
376
+ background-image: url(images/linkedin-smart@2x.png);
377
+ }
378
+
379
+ .preview-google-plus-1 .option-smart-on {
380
+ background-image: url(images/smart-googleplus1@2x.png);
381
+ }
382
+
383
+ .preview-tumblr .option-smart-on {
384
+ background-image: url(images/smart-tumblr@2x.png);
385
+ }
386
+
387
+ .preview-pinterest .option-smart-on {
388
+ background-image: url(images/smart-pinterest@2x.png);
389
+ }
390
+
391
+ .preview-pocket .option-smart-on {
392
+ background-image: url(images/smart-pocket@2x.png);
393
+ }
394
+
395
+ .preview-skype .option-smart-on {
396
+ background-image: url(images/smart-skype@2x.png);
397
+ }
398
+ }
399
 
400
  /**
401
  * Overflow sharing dialog
modules/sharedaddy/admin-sharing-rtl.min.css CHANGED
@@ -1 +1 @@
1
- #services-config{min-width:700px;width:100%;float:right}#services-config h3{font-weight:400;font-size:15px;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;color:#464646}#available-services,#enabled-services,#live-preview{padding:20px 0 0;width:100%;border-spacing:0}#enabled-services .ui-sortable{min-height:50px}#enabled-services{padding-bottom:20px}#available-services,#enabled-services{border-bottom:2px solid #ccc}#live-preview{border-bottom:1px solid #dfdfdf;padding-bottom:60px}#available-services h3,#enabled-services h3,#live-preview h3{padding:0;margin-top:0;margin-bottom:1em}body.settings_page_sharing .description{width:180px;vertical-align:top}body.settings_page_sharing .description p{font-size:13px;font-style:italic}body.settings_page_sharing .services{padding:0 20px;vertical-align:top}body.settings_page_sharing .services ul li{float:right;cursor:move}body.settings_page_sharing .services ul li.divider{border:none;padding:0;background:0 0;cursor:default}body.settings_page_sharing ul.services-hidden{margin-bottom:0}#available-services .service,#enabled-services .service{margin-left:10px;padding:5px 5px 5px 10px;border-radius:3px;border:1px solid #bbb;background:center center no-repeat #f8f8f8}#available-services .service:hover,#enabled-services .service:hover{background:#fff;border:1px solid #bbb;box-shadow:0 1px 3px rgba(0,0,0,.2)}li.service span:before{color:#555;display:inline-block;-webkit-font-smoothing:antialiased;font:400 16px/1 Noticons,Genericons;vertical-align:top;position:relative;top:1px;margin-left:3px;width:16px;height:16px;text-align:center}li.service.share-print span:before{content:'\f469'}li.service.share-digg span:before{content:'\f221'}li.service.share-email span:before{content:'\f410'}li.service.share-linkedin span:before{content:'\f207'}li.service.share-twitter span:before{content:'\f202'}li.service.share-reddit span:before{content:'\f222'}li.service.share-tumblr span:before{content:'\f214'}li.service.share-pocket span:before{content:'\f224'}li.service.share-skype span:before{content:'\f220'}li.service.share-pinterest span:before{content:'\f209'}li.service.share-google-plus-1 span:before{content:'\f218'}li.service.share-facebook span:before{content:'\f204'}li.service.share-press-this span:before{content:'\f205'}body.settings_page_sharing ul.preview{float:right;margin:0}body.settings_page_sharing ul.preview li.preview-item,body.settings_page_sharing ul.preview li.preview-item a{cursor:default;text-decoration:none}div.sd-social-icon .inner li.preview-item a span,div.sd-social-icon ul.preview li.preview-item a span{display:none}div.sd-social-icon ul.preview li.preview-item.preview-custom a span{display:inline-block}.services .preview li.share-custom a{text-decoration:none}.services ul li.end-fix{clear:both;float:none;visibility:hidden;padding:0;margin:0;height:20px;width:0}#enabled-services h2{font-size:20px;padding-top:0;font-weight:400!important;color:#999}body.settings_page_sharing #live-preview h2{font-size:20px;font-weight:400!important;color:#e3e3e3}body.settings_page_sharing .clearing{clear:both}body.settings_page_sharing .options .options-left{float:right}body.settings_page_sharing .input label{font-size:11px;line-height:16px}body.settings_page_sharing .advanced-form{padding:10px 10px 8px 14px;margin-right:-24px;display:none;border-top:1px #e3e3e3 solid;margin-top:4px}body.settings_page_sharing .utility{float:left;padding-top:10px;padding-left:10px;font-size:10px}body.settings_page_sharing .advanced input[type=submit]{float:right;margin-top:10px;margin-left:10px}.services li.dropzone{border:1px dashed #999;border-radius:3px;background:#e3e3e3;margin-left:10px;padding:5px;height:18px}.advanced-form .form-table th{width:auto!important}.advanced-form .button-secondary{margin-top:0!important}#hidden-drop-target{background:#e1e1e1;border:1px solid #cdcdcd;width:29%;padding:10px;vertical-align:top}#hidden-drop-target p{font-size:13px;font-style:italic;margin:0 0 10px}.preview li.preview-item{background-position:0 5px;cursor:default}.preview .option-smart-on{margin:3px 0 0 5px}.preview-digg .option-smart-on{background:url(images/smart-digg.png) top right/76px 17px no-repeat;width:76px;height:17px;margin-top:2px}.preview-reddit .option-smart-on{background:url(images/smart-reddit.png) top right/104px 21px no-repeat;width:104px;height:21px}.preview-facebook .option-smart-on{background:url(images/smart-like.png) top right/85px 20px no-repeat;width:85px;height:20px}.preview-twitter .option-smart-on{background:url(images/smart-twitter.png?1) top right/60px 20px no-repeat;width:60px;height:20px}.preview-linkedin .option-smart-on{background:url(images/linkedin-smart.png) top center/99px 18px no-repeat;width:99px;height:18px;margin-top:1px}.preview-google-plus-1 .option-smart-on{background:url(images/smart-googleplus1.png) top right/96px 20px no-repeat;width:96px;height:20px}.preview-tumblr .option-smart-on{background:url(images/smart-tumblr.png) top right/62px 20px no-repeat;width:62px;height:20px}.preview-pinterest .option-smart-on{background:url(images/smart-pinterest.png) top right/39px 20px no-repeat;width:39px;height:20px}.preview-pocket .option-smart-on{background:url(images/smart-pocket.png) top right/60px 20px no-repeat;width:60px;height:20px}.preview-skype .option-smart-on{background:url(images/smart-skype.png) top right/60px 20px no-repeat;width:60px;height:20px}.services .sharing-hidden li{background-color:transparent}.sharing-hidden li.share-end{clear:both;height:0;padding:0!important;margin:0!important;width:0;visibility:hidden;float:none}.preview .sharing-label{font-weight:700;border:0;padding:4px 0 0 6px}#services-config a.remove{background:#ddd;color:#fff;padding:0 4px 2px;border-radius:15px;-moz-border-radius:15px;-webkit-border-radius:15px;text-decoration:none;font-weight:700;font-size:10px}#services-config a.remove:hover{background:red}.sd-social-icon .inner a.sd-button span,.sd-social-icon .inner a.share-icon span{display:inline-block;overflow:hidden;width:0;text-indent:100%}
1
+ #services-config{min-width:700px;width:100%;float:right}#services-config h3{font-weight:400;font-size:15px;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;color:#464646}#available-services,#enabled-services,#live-preview{padding:20px 0 0;width:100%;border-spacing:0}#enabled-services .ui-sortable{min-height:50px}#enabled-services{padding-bottom:20px}#available-services,#enabled-services{border-bottom:2px solid #ccc}#live-preview{border-bottom:1px solid #dfdfdf;padding-bottom:60px}#available-services h3,#enabled-services h3,#live-preview h3{padding:0;margin-top:0;margin-bottom:1em}body.settings_page_sharing .description{width:180px;vertical-align:top}body.settings_page_sharing .description p{font-size:13px;font-style:italic}body.settings_page_sharing .services{padding:0 20px;vertical-align:top}body.settings_page_sharing .services ul li{float:right;cursor:move}body.settings_page_sharing .services ul li.divider{border:none;padding:0;background:0 0;cursor:default}body.settings_page_sharing ul.services-hidden{margin-bottom:0}#available-services .service,#enabled-services .service{margin-left:10px;padding:5px 5px 5px 10px;border-radius:3px;border:1px solid #bbb;background:center center no-repeat #f8f8f8}#available-services .service:hover,#enabled-services .service:hover{background:#fff;border:1px solid #bbb;box-shadow:0 1px 3px rgba(0,0,0,.2)}li.service span:before{color:#555;display:inline-block;-webkit-font-smoothing:antialiased;font:400 18px/1 social-logos;vertical-align:top;position:relative;top:1px;margin-left:3px;width:16px;height:16px;text-align:center}li.service.share-print span:before{content:'\f469'}li.service.share-digg span:before{content:'\f221'}li.service.share-email span:before{content:'\f410'}li.service.share-linkedin span:before{content:'\f207'}li.service.share-twitter span:before{content:'\f202'}li.service.share-reddit span:before{content:'\f222'}li.service.share-tumblr span:before{content:'\f214'}li.service.share-pocket span:before{content:'\f224'}li.service.share-pinterest span:before{content:'\f209'}li.service.share-google-plus-1 span:before{content:'\f218'}li.service.share-facebook span:before{content:'\f203'}li.service.share-press-this span:before{content:'\f205'}li.service.share-telegram span:before{content:'\f606'}li.service.share-jetpack-whatsapp span:before{content:'\f608'}li.service.share-skype span:before{content:'\f220'}body.settings_page_sharing ul.preview{float:right;margin:0}body.settings_page_sharing ul.preview li.preview-item,body.settings_page_sharing ul.preview li.preview-item a{cursor:default;text-decoration:none}div.sd-social-icon .inner li.preview-item a span,div.sd-social-icon ul.preview li.preview-item a span{display:none}div.sd-social-icon ul.preview li.preview-item.preview-custom a span{display:inline-block}.services .preview li.share-custom a{text-decoration:none}.services ul li.end-fix{clear:both;float:none;visibility:hidden;padding:0;margin:0;height:20px;width:0}#enabled-services h2{font-size:20px;padding-top:0;font-weight:400!important;color:#999}body.settings_page_sharing #live-preview h2{font-size:20px;font-weight:400!important;color:#e3e3e3}body.settings_page_sharing .clearing{clear:both}body.settings_page_sharing .options .options-left{float:right}body.settings_page_sharing .input label{font-size:11px;line-height:16px}body.settings_page_sharing .advanced-form{padding:10px 10px 8px 14px;margin-right:-24px;display:none;border-top:1px #e3e3e3 solid;margin-top:4px}body.settings_page_sharing .utility{float:left;padding-top:10px;padding-left:10px;font-size:10px}body.settings_page_sharing .advanced input[type=submit]{float:right;margin-top:10px;margin-left:10px}.services li.dropzone{border:1px dashed #999;border-radius:3px;background:#e3e3e3;margin-left:10px;padding:5px;height:18px}.advanced-form .form-table th{width:auto!important}.advanced-form .button-secondary{margin-top:0!important}#hidden-drop-target{background:#e1e1e1;border:1px solid #cdcdcd;width:29%;padding:10px;vertical-align:top}#hidden-drop-target p{font-size:13px;font-style:italic;margin:0 0 10px}.preview li.preview-item{background-position:0 5px;cursor:default}.preview .option-smart-on{margin:3px 0 0 5px}.preview-digg .option-smart-on{background:url(images/smart-digg.png) top right/76px 17px no-repeat;width:76px;height:17px;margin-top:2px}.preview-reddit .option-smart-on{background:url(images/smart-reddit.png) top right/104px 21px no-repeat;width:104px;height:21px}.preview-facebook .option-smart-on{background:url(images/smart-like.png) top right/85px 20px no-repeat;width:85px;height:20px}.preview-twitter .option-smart-on{background:url(images/smart-twitter.png?1) top right/60px 20px no-repeat;width:60px;height:20px}.preview-linkedin .option-smart-on{background:url(images/linkedin-smart.png) top center/99px 18px no-repeat;width:99px;height:20px}.preview-google-plus-1 .option-smart-on{background:url(images/smart-googleplus1.png) top right/96px 20px no-repeat;width:96px;height:20px}.preview-tumblr .option-smart-on{background:url(images/smart-tumblr.png) top right/62px 20px no-repeat;width:62px;height:20px}.preview-pinterest .option-smart-on{background:url(images/smart-pinterest.png) top right/39px 20px no-repeat;width:39px;height:20px}.preview-pocket .option-smart-on{background:url(images/smart-pocket.png) top right/60px 20px no-repeat;width:60px;height:20px}.preview-skype .option-smart-on{background:url(images/smart-skype.png) top right/60px 20px no-repeat;width:60px;height:20px}@media (-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.preview-digg .option-smart-on{background-image:url(images/smart-digg@2x.png)}.preview-reddit .option-smart-on{background-image:url(images/smart-reddit@2x.png)}.preview-facebook .option-smart-on{background-image:url(images/smart-like@2x.png)}.preview-twitter .option-smart-on{background-image:url(images/smart-twitter@2x.png?1)}.preview-linkedin .option-smart-on{background-image:url(images/linkedin-smart@2x.png)}.preview-google-plus-1 .option-smart-on{background-image:url(images/smart-googleplus1@2x.png)}.preview-tumblr .option-smart-on{background-image:url(images/smart-tumblr@2x.png)}.preview-pinterest .option-smart-on{background-image:url(images/smart-pinterest@2x.png)}.preview-pocket .option-smart-on{background-image:url(images/smart-pocket@2x.png)}.preview-skype .option-smart-on{background-image:url(images/smart-skype@2x.png)}}.services .sharing-hidden li{background-color:transparent}.sharing-hidden li.share-end{clear:both;height:0;padding:0!important;margin:0!important;width:0;visibility:hidden;float:none}.preview .sharing-label{font-weight:700;border:0;padding:4px 0 0 6px}#services-config a.remove{background:#ddd;color:#fff;padding:0 4px 2px;border-radius:15px;-moz-border-radius:15px;-webkit-border-radius:15px;text-decoration:none;font-weight:700;font-size:10px}#services-config a.remove:hover{background:red}.sd-social-icon .inner a.sd-button span,.sd-social-icon .inner a.share-icon span{display:inline-block;overflow:hidden;width:0;text-indent:100%}
modules/sharedaddy/admin-sharing.css CHANGED
@@ -101,7 +101,7 @@ li.service span:before {
101
  color: #555;
102
  display: inline-block;
103
  -webkit-font-smoothing: antialiased;
104
- font: normal 16px/1 'Noticons', 'Genericons';
105
  vertical-align: top;
106
  position: relative;
107
  top: 1px;
@@ -134,9 +134,6 @@ li.service.share-tumblr span:before {
134
  li.service.share-pocket span:before {
135
  content: '\f224';
136
  }
137
- li.service.share-skype span:before {
138
- content: '\f220';
139
- }
140
  li.service.share-pinterest span:before {
141
  content: '\f209';
142
  }
@@ -144,12 +141,20 @@ li.service.share-google-plus-1 span:before {
144
  content: '\f218';
145
  }
146
  li.service.share-facebook span:before {
147
- content: '\f204';
148
  }
149
  li.service.share-press-this span:before { /* Fixme: remove this button in favor of reblog */
150
  content: '\f205';
151
  }
152
-
 
 
 
 
 
 
 
 
153
 
154
  /**
155
  * Preview section
@@ -311,8 +316,7 @@ body.settings_page_sharing .advanced input[type=submit] {
311
  background: url(images/linkedin-smart.png) no-repeat top center;
312
  background-size: 99px 18px;
313
  width:99px;
314
- height:18px;
315
- margin-top: 1px;
316
  }
317
 
318
  .preview-google-plus-1 .option-smart-on {
@@ -349,7 +353,49 @@ body.settings_page_sharing .advanced input[type=submit] {
349
  width: 60px;
350
  height: 20px;
351
  }
 
 
 
 
 
 
352
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
353
 
354
  /**
355
  * Overflow sharing dialog
101
  color: #555;
102
  display: inline-block;
103
  -webkit-font-smoothing: antialiased;
104
+ font: normal 18px/1 'social-logos';
105
  vertical-align: top;
106
  position: relative;
107
  top: 1px;
134
  li.service.share-pocket span:before {
135
  content: '\f224';
136
  }
 
 
 
137
  li.service.share-pinterest span:before {
138
  content: '\f209';
139
  }
141
  content: '\f218';
142
  }
143
  li.service.share-facebook span:before {
144
+ content: '\f203';
145
  }
146
  li.service.share-press-this span:before { /* Fixme: remove this button in favor of reblog */
147
  content: '\f205';
148
  }
149
+ li.service.share-telegram span:before {
150
+ content: '\f606';
151
+ }
152
+ li.service.share-jetpack-whatsapp span:before {
153
+ content: '\f608';
154
+ }
155
+ li.service.share-skype span:before {
156
+ content: '\f220';
157
+ }
158
 
159
  /**
160
  * Preview section
316
  background: url(images/linkedin-smart.png) no-repeat top center;
317
  background-size: 99px 18px;
318
  width:99px;
319
+ height:20px;
 
320
  }
321
 
322
  .preview-google-plus-1 .option-smart-on {
353
  width: 60px;
354
  height: 20px;
355
  }
356
+ @media
357
+ (-webkit-min-device-pixel-ratio: 1.25),
358
+ (min-resolution: 120dpi) {
359
+ .preview-digg .option-smart-on {
360
+ background-image: url(images/smart-digg@2x.png);
361
+ }
362
 
363
+ .preview-reddit .option-smart-on {
364
+ background-image: url(images/smart-reddit@2x.png);
365
+ }
366
+
367
+ .preview-facebook .option-smart-on {
368
+ background-image: url(images/smart-like@2x.png);
369
+ }
370
+
371
+ .preview-twitter .option-smart-on {
372
+ background-image: url(images/smart-twitter@2x.png?1);
373
+ }
374
+
375
+ .preview-linkedin .option-smart-on {
376
+ background-image: url(images/linkedin-smart@2x.png);
377
+ }
378
+
379
+ .preview-google-plus-1 .option-smart-on {
380
+ background-image: url(images/smart-googleplus1@2x.png);
381
+ }
382
+
383
+ .preview-tumblr .option-smart-on {
384
+ background-image: url(images/smart-tumblr@2x.png);
385
+ }
386
+
387
+ .preview-pinterest .option-smart-on {
388
+ background-image: url(images/smart-pinterest@2x.png);
389
+ }
390
+
391
+ .preview-pocket .option-smart-on {
392
+ background-image: url(images/smart-pocket@2x.png);
393
+ }
394
+
395
+ .preview-skype .option-smart-on {
396
+ background-image: url(images/smart-skype@2x.png);
397
+ }
398
+ }
399
 
400
  /**
401
  * Overflow sharing dialog
modules/sharedaddy/admin-sharing.js CHANGED
@@ -123,7 +123,12 @@
123
  $( '#live-preview div.sharedaddy' ).addClass( 'sd-social-icon' );
124
  } else if ( 'official' === button_style ) {
125
  $( '#live-preview ul.preview .advanced, .sharing-hidden .inner ul .advanced' ).each( function( /*i*/ ) {
126
- if ( !$( this ).hasClass( 'preview-press-this' ) && !$( this ).hasClass( 'preview-email' ) && !$( this ).hasClass( 'preview-print' ) && !$( this ).hasClass( 'share-custom' ) ) {
 
 
 
 
 
127
  $( this ).find( '.option a span' ).html( '' ).parent().removeClass( 'sd-button' ).parent().attr( 'class', 'option option-smart-on' );
128
  }
129
  } );
@@ -287,15 +292,15 @@
287
  $( '.service' ).on( 'keydown', function ( e ) {
288
 
289
  // Reposition if one of the directional keys is pressed
290
- switch ( e.keyCode ) {
291
- case 13: keyboardDragDrop( $( this ) ); break; // Enter
292
- case 32: keyboardDragDrop( $( this ) ); break; // Space
293
- case 37: keyboardChangeOrder( $( this ), 'left' ); break; // Left
294
- case 39: keyboardChangeOrder( $( this ), 'right' ); break; // Right
295
- default: return true; // Exit and bubble
296
- }
297
-
298
- e.preventDefault();
299
  });
300
 
301
  function keyboardChangeOrder( $this, dir ) {
@@ -346,7 +351,7 @@
346
  // Add focus
347
  nextSibling.next().focus();
348
  }
349
-
350
  //Save changes
351
  save_services();
352
  }
@@ -370,7 +375,7 @@
370
 
371
  // Move it to the appropriate area and add focus back to service
372
  $( '.' + dropzone ).prepend( thisService ).find( 'li:first-child' ).focus();
373
-
374
  //Save changes
375
  save_services();
376
  }
123
  $( '#live-preview div.sharedaddy' ).addClass( 'sd-social-icon' );
124
  } else if ( 'official' === button_style ) {
125
  $( '#live-preview ul.preview .advanced, .sharing-hidden .inner ul .advanced' ).each( function( /*i*/ ) {
126
+ if ( !$( this ).hasClass( 'preview-press-this' ) &&
127
+ !$( this ).hasClass( 'preview-email' ) &&
128
+ !$( this ).hasClass( 'preview-print' ) &&
129
+ !$( this ).hasClass( 'preview-telegram' ) &&
130
+ !$( this ).hasClass( 'preview-jetpack-whatsapp' ) &&
131
+ !$( this ).hasClass( 'share-custom' ) ) {
132
  $( this ).find( '.option a span' ).html( '' ).parent().removeClass( 'sd-button' ).parent().attr( 'class', 'option option-smart-on' );
133
  }
134
  } );
292
  $( '.service' ).on( 'keydown', function ( e ) {
293
 
294
  // Reposition if one of the directional keys is pressed
295
+ switch ( e.keyCode ) {
296
+ case 13: keyboardDragDrop( $( this ) ); break; // Enter
297
+ case 32: keyboardDragDrop( $( this ) ); break; // Space
298
+ case 37: keyboardChangeOrder( $( this ), 'left' ); break; // Left
299
+ case 39: keyboardChangeOrder( $( this ), 'right' ); break; // Right
300
+ default: return true; // Exit and bubble
301
+ }
302
+
303
+ e.preventDefault();
304
  });
305
 
306
  function keyboardChangeOrder( $this, dir ) {
351
  // Add focus
352
  nextSibling.next().focus();
353
  }
354
+
355
  //Save changes
356
  save_services();
357
  }
375
 
376
  // Move it to the appropriate area and add focus back to service
377
  $( '.' + dropzone ).prepend( thisService ).find( 'li:first-child' ).focus();
378
+
379
  //Save changes
380
  save_services();
381
  }
modules/sharedaddy/admin-sharing.min.css CHANGED
@@ -1 +1 @@
1
- #services-config{min-width:700px;width:100%;float:left}#services-config h3{font-weight:400;font-size:15px;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;color:#464646}#available-services,#enabled-services,#live-preview{padding:20px 0 0;width:100%;border-spacing:0}#enabled-services .ui-sortable{min-height:50px}#enabled-services{padding-bottom:20px}#available-services,#enabled-services{border-bottom:2px solid #ccc}#live-preview{border-bottom:1px solid #dfdfdf;padding-bottom:60px}#available-services h3,#enabled-services h3,#live-preview h3{padding:0;margin-top:0;margin-bottom:1em}body.settings_page_sharing .description{width:180px;vertical-align:top}body.settings_page_sharing .description p{font-size:13px;font-style:italic}body.settings_page_sharing .services{padding:0 20px;vertical-align:top}body.settings_page_sharing .services ul li{float:left;cursor:move}body.settings_page_sharing .services ul li.divider{border:none;padding:0;background:0 0;cursor:default}body.settings_page_sharing ul.services-hidden{margin-bottom:0}#available-services .service,#enabled-services .service{margin-right:10px;padding:5px 10px 5px 5px;border-radius:3px;border:1px solid #bbb;background:center center no-repeat #f8f8f8}#available-services .service:hover,#enabled-services .service:hover{background:#fff;border:1px solid #bbb;box-shadow:0 1px 3px rgba(0,0,0,.2)}li.service span:before{color:#555;display:inline-block;-webkit-font-smoothing:antialiased;font:400 16px/1 Noticons,Genericons;vertical-align:top;position:relative;top:1px;margin-right:3px;width:16px;height:16px;text-align:center}li.service.share-print span:before{content:'\f469'}li.service.share-digg span:before{content:'\f221'}li.service.share-email span:before{content:'\f410'}li.service.share-linkedin span:before{content:'\f207'}li.service.share-twitter span:before{content:'\f202'}li.service.share-reddit span:before{content:'\f222'}li.service.share-tumblr span:before{content:'\f214'}li.service.share-pocket span:before{content:'\f224'}li.service.share-skype span:before{content:'\f220'}li.service.share-pinterest span:before{content:'\f209'}li.service.share-google-plus-1 span:before{content:'\f218'}li.service.share-facebook span:before{content:'\f204'}li.service.share-press-this span:before{content:'\f205'}body.settings_page_sharing ul.preview{float:left;margin:0}body.settings_page_sharing ul.preview li.preview-item,body.settings_page_sharing ul.preview li.preview-item a{cursor:default;text-decoration:none}div.sd-social-icon .inner li.preview-item a span,div.sd-social-icon ul.preview li.preview-item a span{display:none}div.sd-social-icon ul.preview li.preview-item.preview-custom a span{display:inline-block}.services .preview li.share-custom a{text-decoration:none}.services ul li.end-fix{clear:both;float:none;visibility:hidden;padding:0;margin:0;height:20px;width:0}#enabled-services h2{font-size:20px;padding-top:0;font-weight:400!important;color:#999}body.settings_page_sharing #live-preview h2{font-size:20px;font-weight:400!important;color:#e3e3e3}body.settings_page_sharing .clearing{clear:both}body.settings_page_sharing .options .options-left{float:left}body.settings_page_sharing .input label{font-size:11px;line-height:16px}body.settings_page_sharing .advanced-form{padding:10px 14px 8px 10px;margin-left:-24px;display:none;border-top:1px #e3e3e3 solid;margin-top:4px}body.settings_page_sharing .utility{float:right;padding-top:10px;padding-right:10px;font-size:10px}body.settings_page_sharing .advanced input[type=submit]{float:left;margin-top:10px;margin-right:10px}.services li.dropzone{border:1px dashed #999;border-radius:3px;background:#e3e3e3;margin-right:10px;padding:5px;height:18px}.advanced-form .form-table th{width:auto!important}.advanced-form .button-secondary{margin-top:0!important}#hidden-drop-target{background:#e1e1e1;border:1px solid #cdcdcd;width:29%;padding:10px;vertical-align:top}#hidden-drop-target p{font-size:13px;font-style:italic;margin:0 0 10px}.preview li.preview-item{background-position:0 5px;cursor:default}.preview .option-smart-on{margin:3px 5px 0 0}.preview-digg .option-smart-on{background:url(images/smart-digg.png) top left/76px 17px no-repeat;width:76px;height:17px;margin-top:2px}.preview-reddit .option-smart-on{background:url(images/smart-reddit.png) top left/104px 21px no-repeat;width:104px;height:21px}.preview-facebook .option-smart-on{background:url(images/smart-like.png) top left/85px 20px no-repeat;width:85px;height:20px}.preview-twitter .option-smart-on{background:url(images/smart-twitter.png?1) top left/60px 20px no-repeat;width:60px;height:20px}.preview-linkedin .option-smart-on{background:url(images/linkedin-smart.png) top center/99px 18px no-repeat;width:99px;height:18px;margin-top:1px}.preview-google-plus-1 .option-smart-on{background:url(images/smart-googleplus1.png) top left/96px 20px no-repeat;width:96px;height:20px}.preview-tumblr .option-smart-on{background:url(images/smart-tumblr.png) top left/62px 20px no-repeat;width:62px;height:20px}.preview-pinterest .option-smart-on{background:url(images/smart-pinterest.png) top left/39px 20px no-repeat;width:39px;height:20px}.preview-pocket .option-smart-on{background:url(images/smart-pocket.png) top left/60px 20px no-repeat;width:60px;height:20px}.preview-skype .option-smart-on{background:url(images/smart-skype.png) top left/60px 20px no-repeat;width:60px;height:20px}.services .sharing-hidden li{background-color:transparent}.sharing-hidden li.share-end{clear:both;height:0;padding:0!important;margin:0!important;width:0;visibility:hidden;float:none}.preview .sharing-label{font-weight:700;border:0;padding:4px 6px 0 0}#services-config a.remove{background:#ddd;color:#fff;padding:0 4px 2px;border-radius:15px;-moz-border-radius:15px;-webkit-border-radius:15px;text-decoration:none;font-weight:700;font-size:10px}#services-config a.remove:hover{background:red}.sd-social-icon .inner a.sd-button span,.sd-social-icon .inner a.share-icon span{display:inline-block;overflow:hidden;width:0;text-indent:100%}
1
+ #services-config{min-width:700px;width:100%;float:left}#services-config h3{font-weight:400;font-size:15px;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;color:#464646}#available-services,#enabled-services,#live-preview{padding:20px 0 0;width:100%;border-spacing:0}#enabled-services .ui-sortable{min-height:50px}#enabled-services{padding-bottom:20px}#available-services,#enabled-services{border-bottom:2px solid #ccc}#live-preview{border-bottom:1px solid #dfdfdf;padding-bottom:60px}#available-services h3,#enabled-services h3,#live-preview h3{padding:0;margin-top:0;margin-bottom:1em}body.settings_page_sharing .description{width:180px;vertical-align:top}body.settings_page_sharing .description p{font-size:13px;font-style:italic}body.settings_page_sharing .services{padding:0 20px;vertical-align:top}body.settings_page_sharing .services ul li{float:left;cursor:move}body.settings_page_sharing .services ul li.divider{border:none;padding:0;background:0 0;cursor:default}body.settings_page_sharing ul.services-hidden{margin-bottom:0}#available-services .service,#enabled-services .service{margin-right:10px;padding:5px 10px 5px 5px;border-radius:3px;border:1px solid #bbb;background:center center no-repeat #f8f8f8}#available-services .service:hover,#enabled-services .service:hover{background:#fff;border:1px solid #bbb;box-shadow:0 1px 3px rgba(0,0,0,.2)}li.service span:before{color:#555;display:inline-block;-webkit-font-smoothing:antialiased;font:400 18px/1 social-logos;vertical-align:top;position:relative;top:1px;margin-right:3px;width:16px;height:16px;text-align:center}li.service.share-print span:before{content:'\f469'}li.service.share-digg span:before{content:'\f221'}li.service.share-email span:before{content:'\f410'}li.service.share-linkedin span:before{content:'\f207'}li.service.share-twitter span:before{content:'\f202'}li.service.share-reddit span:before{content:'\f222'}li.service.share-tumblr span:before{content:'\f214'}li.service.share-pocket span:before{content:'\f224'}li.service.share-pinterest span:before{content:'\f209'}li.service.share-google-plus-1 span:before{content:'\f218'}li.service.share-facebook span:before{content:'\f203'}li.service.share-press-this span:before{content:'\f205'}li.service.share-telegram span:before{content:'\f606'}li.service.share-jetpack-whatsapp span:before{content:'\f608'}li.service.share-skype span:before{content:'\f220'}body.settings_page_sharing ul.preview{float:left;margin:0}body.settings_page_sharing ul.preview li.preview-item,body.settings_page_sharing ul.preview li.preview-item a{cursor:default;text-decoration:none}div.sd-social-icon .inner li.preview-item a span,div.sd-social-icon ul.preview li.preview-item a span{display:none}div.sd-social-icon ul.preview li.preview-item.preview-custom a span{display:inline-block}.services .preview li.share-custom a{text-decoration:none}.services ul li.end-fix{clear:both;float:none;visibility:hidden;padding:0;margin:0;height:20px;width:0}#enabled-services h2{font-size:20px;padding-top:0;font-weight:400!important;color:#999}body.settings_page_sharing #live-preview h2{font-size:20px;font-weight:400!important;color:#e3e3e3}body.settings_page_sharing .clearing{clear:both}body.settings_page_sharing .options .options-left{float:left}body.settings_page_sharing .input label{font-size:11px;line-height:16px}body.settings_page_sharing .advanced-form{padding:10px 14px 8px 10px;margin-left:-24px;display:none;border-top:1px #e3e3e3 solid;margin-top:4px}body.settings_page_sharing .utility{float:right;padding-top:10px;padding-right:10px;font-size:10px}body.settings_page_sharing .advanced input[type=submit]{float:left;margin-top:10px;margin-right:10px}.services li.dropzone{border:1px dashed #999;border-radius:3px;background:#e3e3e3;margin-right:10px;padding:5px;height:18px}.advanced-form .form-table th{width:auto!important}.advanced-form .button-secondary{margin-top:0!important}#hidden-drop-target{background:#e1e1e1;border:1px solid #cdcdcd;width:29%;padding:10px;vertical-align:top}#hidden-drop-target p{font-size:13px;font-style:italic;margin:0 0 10px}.preview li.preview-item{background-position:0 5px;cursor:default}.preview .option-smart-on{margin:3px 5px 0 0}.preview-digg .option-smart-on{background:url(images/smart-digg.png) top left/76px 17px no-repeat;width:76px;height:17px;margin-top:2px}.preview-reddit .option-smart-on{background:url(images/smart-reddit.png) top left/104px 21px no-repeat;width:104px;height:21px}.preview-facebook .option-smart-on{background:url(images/smart-like.png) top left/85px 20px no-repeat;width:85px;height:20px}.preview-twitter .option-smart-on{background:url(images/smart-twitter.png?1) top left/60px 20px no-repeat;width:60px;height:20px}.preview-linkedin .option-smart-on{background:url(images/linkedin-smart.png) top center/99px 18px no-repeat;width:99px;height:20px}.preview-google-plus-1 .option-smart-on{background:url(images/smart-googleplus1.png) top left/96px 20px no-repeat;width:96px;height:20px}.preview-tumblr .option-smart-on{background:url(images/smart-tumblr.png) top left/62px 20px no-repeat;width:62px;height:20px}.preview-pinterest .option-smart-on{background:url(images/smart-pinterest.png) top left/39px 20px no-repeat;width:39px;height:20px}.preview-pocket .option-smart-on{background:url(images/smart-pocket.png) top left/60px 20px no-repeat;width:60px;height:20px}.preview-skype .option-smart-on{background:url(images/smart-skype.png) top left/60px 20px no-repeat;width:60px;height:20px}@media (-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.preview-digg .option-smart-on{background-image:url(images/smart-digg@2x.png)}.preview-reddit .option-smart-on{background-image:url(images/smart-reddit@2x.png)}.preview-facebook .option-smart-on{background-image:url(images/smart-like@2x.png)}.preview-twitter .option-smart-on{background-image:url(images/smart-twitter@2x.png?1)}.preview-linkedin .option-smart-on{background-image:url(images/linkedin-smart@2x.png)}.preview-google-plus-1 .option-smart-on{background-image:url(images/smart-googleplus1@2x.png)}.preview-tumblr .option-smart-on{background-image:url(images/smart-tumblr@2x.png)}.preview-pinterest .option-smart-on{background-image:url(images/smart-pinterest@2x.png)}.preview-pocket .option-smart-on{background-image:url(images/smart-pocket@2x.png)}.preview-skype .option-smart-on{background-image:url(images/smart-skype@2x.png)}}.services .sharing-hidden li{background-color:transparent}.sharing-hidden li.share-end{clear:both;height:0;padding:0!important;margin:0!important;width:0;visibility:hidden;float:none}.preview .sharing-label{font-weight:700;border:0;padding:4px 6px 0 0}#services-config a.remove{background:#ddd;color:#fff;padding:0 4px 2px;border-radius:15px;-moz-border-radius:15px;-webkit-border-radius:15px;text-decoration:none;font-weight:700;font-size:10px}#services-config a.remove:hover{background:red}.sd-social-icon .inner a.sd-button span,.sd-social-icon .inner a.share-icon span{display:inline-block;overflow:hidden;width:0;text-indent:100%}
modules/sharedaddy/sharing-service.php CHANGED
@@ -44,18 +44,20 @@ class Sharing_Service {
44
  // if you update this list, please update the REST API tests
45
  // in bin/tests/api/suites/SharingTest.php
46
  $services = array(
47
- 'email' => 'Share_Email',
48
- 'print' => 'Share_Print',
49
- 'facebook' => 'Share_Facebook',
50
- 'linkedin' => 'Share_LinkedIn',
51
- 'reddit' => 'Share_Reddit',
52
- 'twitter' => 'Share_Twitter',
53
- 'press-this' => 'Share_PressThis',
54
- 'google-plus-1' => 'Share_GooglePlus1',
55
- 'tumblr' => 'Share_Tumblr',
56
- 'pinterest' => 'Share_Pinterest',
57
- 'pocket' => 'Share_Pocket',
58
- 'skype' => 'Share_Skype',
 
 
59
  );
60
 
61
  if ( $include_custom ) {
@@ -557,7 +559,7 @@ function sharing_add_header() {
557
 
558
  if ( count( $enabled['all'] ) > 0 && sharing_maybe_enqueue_scripts() ) {
559
  wp_enqueue_style( 'sharedaddy', plugin_dir_url( __FILE__ ) .'sharing.css', array(), JETPACK__VERSION );
560
- wp_enqueue_style( 'genericons' );
561
  }
562
 
563
  }
44
  // if you update this list, please update the REST API tests
45
  // in bin/tests/api/suites/SharingTest.php
46
  $services = array(
47
+ 'email' => 'Share_Email',
48
+ 'print' => 'Share_Print',
49
+ 'facebook' => 'Share_Facebook',
50
+ 'linkedin' => 'Share_LinkedIn',
51
+ 'reddit' => 'Share_Reddit',
52
+ 'twitter' => 'Share_Twitter',
53
+ 'press-this' => 'Share_PressThis',
54
+ 'google-plus-1' => 'Share_GooglePlus1',
55
+ 'tumblr' => 'Share_Tumblr',
56
+ 'pinterest' => 'Share_Pinterest',
57
+ 'pocket' => 'Share_Pocket',
58
+ 'telegram' => 'Share_Telegram',
59
+ 'jetpack-whatsapp' => 'Jetpack_Share_WhatsApp',
60
+ 'skype' => 'Share_Skype',
61
  );
62
 
63
  if ( $include_custom ) {
559
 
560
  if ( count( $enabled['all'] ) > 0 && sharing_maybe_enqueue_scripts() ) {
561
  wp_enqueue_style( 'sharedaddy', plugin_dir_url( __FILE__ ) .'sharing.css', array(), JETPACK__VERSION );
562
+ wp_enqueue_style( 'social-logos' );
563
  }
564
 
565
  }
modules/sharedaddy/sharing-sources.php CHANGED
@@ -512,7 +512,7 @@ class Share_Email extends Sharing_Source {
512
  ?>
513
 
514
  <img style="float: right; display: none" class="loading" src="<?php
515
- /** This filter is documented in modules/shortcodes/audio.php */
516
  echo apply_filters( 'jetpack_static_url', plugin_dir_url( __FILE__ ) . 'images/loading.gif' ); ?>" alt="loading" width="16" height="16" />
517
  <input type="submit" value="<?php esc_attr_e( 'Send Email', 'jetpack' ); ?>" class="sharing_send" />
518
  <a rel="nofollow" href="#cancel" class="sharing_cancel"><?php _e( 'Cancel', 'jetpack' ); ?></a>
@@ -1602,6 +1602,49 @@ class Share_Pocket extends Sharing_Source {
1602
 
1603
  }
1604
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1605
  class Share_Skype extends Sharing_Source {
1606
  public $shortname = 'skype';
1607
  public $genericon = '\f220';
512
  ?>
513
 
514
  <img style="float: right; display: none" class="loading" src="<?php
515
+ /** This filter is documented in modules/stats.php */
516
  echo apply_filters( 'jetpack_static_url', plugin_dir_url( __FILE__ ) . 'images/loading.gif' ); ?>" alt="loading" width="16" height="16" />
517
  <input type="submit" value="<?php esc_attr_e( 'Send Email', 'jetpack' ); ?>" class="sharing_send" />
518
  <a rel="nofollow" href="#cancel" class="sharing_cancel"><?php _e( 'Cancel', 'jetpack' ); ?></a>
1602
 
1603
  }
1604
 
1605
+ class Share_Telegram extends Sharing_Source {
1606
+ public $shortname = 'telegram';
1607
+
1608
+ public function __construct( $id, array $settings ) {
1609
+ parent::__construct( $id, $settings );
1610
+ }
1611
+
1612
+ public function get_name() {
1613
+ return __( 'Telegram', 'jetpack' );
1614
+ }
1615
+ public function process_request( $post, array $post_data ) {
1616
+ // Record stats
1617
+ parent::process_request( $post, $post_data );
1618
+ $telegram_url = esc_url_raw( 'https://telegram.me/share/url?url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&text=' . rawurlencode( $this->get_share_title( $post->ID ) ) );
1619
+ wp_redirect( $telegram_url );
1620
+ exit;
1621
+ }
1622
+
1623
+ public function get_display( $post ) {
1624
+ return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Telegram', 'share to', 'jetpack' ), __( 'Click to share on Telegram', 'jetpack' ), 'share=telegram' );
1625
+ }
1626
+
1627
+ function display_footer() {
1628
+ $this->js_dialog( $this->shortname, array( 'width' => 450, 'height' => 450 ) );
1629
+ }
1630
+ }
1631
+
1632
+ class Jetpack_Share_WhatsApp extends Sharing_Source {
1633
+ public $shortname = 'jetpack-whatsapp';
1634
+
1635
+ public function __construct( $id, array $settings ) {
1636
+ parent::__construct( $id, $settings );
1637
+ }
1638
+
1639
+ public function get_name() {
1640
+ return __( 'WhatsApp', 'jetpack' );
1641
+ }
1642
+
1643
+ public function get_display( $post ) {
1644
+ return $this->get_link( 'whatsapp://send?text=' . rawurlencode( $this->get_share_title( $post->ID ) ) . ' ' . rawurlencode( get_permalink( $post->ID ) ), _x( 'WhatsApp', 'share to', 'jetpack' ), __( 'Click to share on WhatsApp', 'jetpack' ) );
1645
+ }
1646
+ }
1647
+
1648
  class Share_Skype extends Sharing_Source {
1649
  public $shortname = 'skype';
1650
  public $genericon = '\f220';
modules/sharedaddy/sharing.css CHANGED
@@ -114,12 +114,14 @@ body.highlander-dark h3.sd-title:before {
114
  vertical-align: top;
115
  }
116
 
 
 
 
117
  .sd-social-official .sd-content>ul>li>a.sd-button:before,
118
  .sd-social-official .sd-content>ul>li .digg_button>a:before,
119
  .sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,
120
  .sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before {
121
  margin-bottom: -1px;
122
- top: 0;
123
  }
124
 
125
  .sd-social-icon .sd-content ul li a.sd-button:hover,
@@ -145,18 +147,39 @@ body.highlander-dark h3.sd-title:before {
145
  box-shadow: inset 0 1px 0 rgba(0,0,0,.16);
146
  }
147
 
148
-
149
  /* All icons */
150
  .sd-content ul li a.sd-button:before {
151
  display: inline-block;
152
  -webkit-font-smoothing: antialiased;
153
  -moz-osx-font-smoothing: grayscale;
154
- font: normal 16px/1 'Genericons';
155
  vertical-align: top;
156
- position: relative;
157
- top: 3px;
158
  text-align: center;
159
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
 
161
  .sd-content ul li {
162
  margin: 0 !important;
@@ -190,8 +213,20 @@ body .sd-content ul li.share-custom.no-icon a span {
190
 
191
  .sd-social-icon .sd-content ul li a.share-more {
192
  position: relative;
193
- top: 2px;
194
  }
 
 
 
 
 
 
 
 
 
 
 
 
195
  .sd-social-icon .sd-content ul li a.share-more span {
196
  margin-left: 3px;
197
  }
@@ -235,25 +270,20 @@ body .sd-content ul li.share-custom.no-icon a span {
235
  .sd-social-text .sd-content ul li.share-tumblr a:before,
236
  .sd-content ul li.share-tumblr div.option.option-smart-off a:before,
237
  .sd-social-icon-text .sd-content li.share-tumblr a:before {
238
- content: '\f214';
239
  }
 
240
  .sd-social-icon .sd-content ul li.share-pocket a:before,
241
  .sd-social-text .sd-content ul li.share-pocket a:before,
242
  .sd-content ul li.share-pocket div.option.option-smart-off a:before,
243
  .sd-social-icon-text .sd-content li.share-pocket a:before {
244
  content: '\f224';
245
  }
246
- .sd-social-icon .sd-content ul li.share-skype a:before,
247
- .sd-social-text .sd-content ul li.share-skype a:before,
248
- .sd-content ul li.share-skype div.option.option-smart-off a:before,
249
- .sd-social-icon-text .sd-content li.share-skype a:before {
250
- content: '\f220';
251
- }
252
  .sd-social-icon .sd-content ul li.share-pinterest a:before,
253
  .sd-social-text .sd-content ul li.share-pinterest a:before,
254
  .sd-content ul li.share-pinterest div.option.option-smart-off a:before,
255
  .sd-social-icon-text .sd-content li.share-pinterest a:before {
256
- content: '\f209';
257
  }
258
  .sd-social-icon .sd-content ul li.share-google-plus-1 a:before,
259
  .sd-social-text .sd-content ul li.share-google-plus-1 a:before,
@@ -265,7 +295,7 @@ body .sd-content ul li.share-custom.no-icon a span {
265
  .sd-social-text .sd-content ul li.share-facebook a:before,
266
  .sd-content ul li.share-facebook div.option.option-smart-off a:before,
267
  .sd-social-icon-text .sd-content li.share-facebook a:before {
268
- content: '\f204';
269
  }
270
  .sd-social-icon .sd-content ul li.share-press-this a:before,
271
  .sd-social-text .sd-content ul li.share-press-this a:before,
@@ -277,6 +307,22 @@ body .sd-content ul li.share-custom.no-icon a span {
277
  .sd-social-official .sd-content li.share-press-this a:before {
278
  color: #2ba1cb;
279
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
  .sd-social-icon .sd-content ul a.share-more:before,
281
  .sd-social-text .sd-content ul a.share-more:before,
282
  .sd-content ul li.advanced a.share-more:before,
@@ -288,6 +334,20 @@ body .sd-content ul li.share-custom.no-icon a span {
288
  color: #2ba1cb;
289
  }
290
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
291
 
292
  /* Share count */
293
  .sd-social .sd-button .share-count {
@@ -339,9 +399,6 @@ body .sd-content ul li.share-custom.no-icon a span {
339
  width: 98px;
340
  }
341
 
342
- .sd-social-official .sd-content .skypeShare {
343
- width: 55px;
344
- }
345
 
346
  /* Individual official buttons */
347
  .googleplus1_button .g-plus {
@@ -356,6 +413,10 @@ body .sd-content ul li.share-custom.no-icon a span {
356
  margin: 0 !important;
357
  }
358
 
 
 
 
 
359
  body .sd-social-official li.share-print ,
360
  body .sd-social-official li.share-email a,
361
  body .sd-social-official li.share-custom a,
@@ -394,9 +455,6 @@ body .sd-social-icon .sd-content li.share-custom a span {
394
  width: 0;
395
  }
396
 
397
- body .sd-content li.share-custom a:hover span {
398
- }
399
-
400
  body .sd-social-icon .sd-content li.share-custom a span {
401
  padding-left: 16px !important;
402
  }
@@ -423,8 +481,8 @@ body .sd-social-icon .sd-content li.share-custom a span {
423
 
424
  .sd-social-official .sd-content .sharing-hidden ul>li.share-end {
425
  clear: both;
426
- margin: 0;
427
- height: 0;
428
  }
429
 
430
  .sharing-hidden .inner:before, .sharing-hidden .inner:after {
@@ -465,7 +523,7 @@ body .sd-social-icon .sd-content li.share-custom a span {
465
  -webkit-border-radius: 50%;
466
  border: 0;
467
  box-shadow: none;
468
- padding: 8px;
469
  position: relative;
470
  top: -2px;
471
  line-height: 1;
@@ -485,8 +543,11 @@ body .sd-social-icon .sd-content li.share-custom a span {
485
  opacity: .6;
486
  }
487
 
 
 
488
  .sd-social-icon .sd-content ul li[class*='share-'] a.sd-button:before {
489
- top: 0;
 
490
  }
491
 
492
  .sd-social-icon .sd-content ul li[class*='share-'] a.sd-button.share-custom {
@@ -548,6 +609,11 @@ body .sd-social-icon .sd-content li.share-custom a span {
548
  color: #fff !important;
549
  }
550
 
 
 
 
 
 
551
  .sd-social-icon .sd-content ul li[class*='share-'].share-linkedin a.sd-button {
552
  background: #0077b5;
553
  color: #fff !important;
@@ -563,16 +629,15 @@ body .sd-social-icon .sd-content li.share-custom a span {
563
  color: #fff !important;
564
  }
565
 
566
- .sd-social-icon .sd-content ul li[class*='share-'].share-skype a.sd-button {
567
- background: #00AFF0;
568
- color: #fff !important;
569
- }
570
-
571
  .sd-social-icon .sd-content ul li[class*='share-'].share-reddit a.sd-button {
572
  background: #cee3f8;
573
  color: #555555 !important;
574
  }
575
 
 
 
 
 
576
 
577
  /**
578
  * Screen Reader Text for "Icon Only" option
@@ -680,3 +745,4 @@ div.sharedaddy.sharedaddy-dark #sharing_email {
680
  height: 123px;
681
  margin: 0 0 1em 0;
682
  }
 
114
  vertical-align: top;
115
  }
116
 
117
+ .sd-social-official .sd-content ul li a.sd-button>span {
118
+ line-height: 17px;
119
+ }
120
  .sd-social-official .sd-content>ul>li>a.sd-button:before,
121
  .sd-social-official .sd-content>ul>li .digg_button>a:before,
122
  .sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,
123
  .sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before {
124
  margin-bottom: -1px;
 
125
  }
126
 
127
  .sd-social-icon .sd-content ul li a.sd-button:hover,
147
  box-shadow: inset 0 1px 0 rgba(0,0,0,.16);
148
  }
149
 
 
150
  /* All icons */
151
  .sd-content ul li a.sd-button:before {
152
  display: inline-block;
153
  -webkit-font-smoothing: antialiased;
154
  -moz-osx-font-smoothing: grayscale;
155
+ font: normal 18px/1 'social-logos';
156
  vertical-align: top;
 
 
157
  text-align: center;
158
  }
159
+ /* text + icon styles should have relative and top position */
160
+ .sd-social-icon-text ul li a.sd-button:before {
161
+ position: relative;
162
+ top: 2px;
163
+ }
164
+
165
+ /* Make it look great in Chrome and Safari */
166
+ @media screen and (-webkit-min-device-pixel-ratio:0) {
167
+ .sd-content ul li a.sd-button:before {
168
+ position: relative;
169
+ top: 2px;
170
+ }
171
+ }
172
+
173
+ .sd-social-official ul li a.sd-button:before {
174
+ position: relative;
175
+ top: -2px;
176
+ }
177
+ /* Make it look great in Chrome and Safari */
178
+ @media screen and (-webkit-min-device-pixel-ratio:0) {
179
+ .sd-social-official ul li a.sd-button:before {
180
+ top: 0px;
181
+ }
182
+ }
183
 
184
  .sd-content ul li {
185
  margin: 0 !important;
213
 
214
  .sd-social-icon .sd-content ul li a.share-more {
215
  position: relative;
216
+ top: -4px;
217
  }
218
+ @media screen and (-webkit-min-device-pixel-ratio:0) {
219
+ .sd-social-icon .sd-content ul li a.share-more {
220
+ top: 2px;
221
+ }
222
+ }
223
+ /* Firefox specific hack to make the share more button look better on Firefox. */
224
+ @-moz-document url-prefix() {
225
+ .sd-social-icon .sd-content ul li a.share-more {
226
+ top: 2px;
227
+ }
228
+ }
229
+
230
  .sd-social-icon .sd-content ul li a.share-more span {
231
  margin-left: 3px;
232
  }
270
  .sd-social-text .sd-content ul li.share-tumblr a:before,
271
  .sd-content ul li.share-tumblr div.option.option-smart-off a:before,
272
  .sd-social-icon-text .sd-content li.share-tumblr a:before {
273
+ content: '\f607';
274
  }
275
+
276
  .sd-social-icon .sd-content ul li.share-pocket a:before,
277
  .sd-social-text .sd-content ul li.share-pocket a:before,
278
  .sd-content ul li.share-pocket div.option.option-smart-off a:before,
279
  .sd-social-icon-text .sd-content li.share-pocket a:before {
280
  content: '\f224';
281
  }
 
 
 
 
 
 
282
  .sd-social-icon .sd-content ul li.share-pinterest a:before,
283
  .sd-social-text .sd-content ul li.share-pinterest a:before,
284
  .sd-content ul li.share-pinterest div.option.option-smart-off a:before,
285
  .sd-social-icon-text .sd-content li.share-pinterest a:before {
286
+ content: '\f210';
287
  }
288
  .sd-social-icon .sd-content ul li.share-google-plus-1 a:before,
289
  .sd-social-text .sd-content ul li.share-google-plus-1 a:before,
295
  .sd-social-text .sd-content ul li.share-facebook a:before,
296
  .sd-content ul li.share-facebook div.option.option-smart-off a:before,
297
  .sd-social-icon-text .sd-content li.share-facebook a:before {
298
+ content: '\f203';
299
  }
300
  .sd-social-icon .sd-content ul li.share-press-this a:before,
301
  .sd-social-text .sd-content ul li.share-press-this a:before,
307
  .sd-social-official .sd-content li.share-press-this a:before {
308
  color: #2ba1cb;
309
  }
310
+ .sd-social-icon .sd-content ul li.share-telegram a:before,
311
+ .sd-social-text .sd-content ul li.share-telegram a:before,
312
+ .sd-content ul li.share-telegram div.option.option-smart-off a:before,
313
+ .sd-social-icon-text .sd-content li.share-telegram a:before,
314
+ .sd-social-official .sd-content li.share-telegram a:before {
315
+ content: '\f606';
316
+ }
317
+ .sd-social-official .sd-content li.share-telegram a:before {
318
+ color: #0088cc;
319
+ }
320
+ .sd-social-icon .sd-content ul li.share-skype a:before,
321
+ .sd-social-text .sd-content ul li.share-skype a:before,
322
+ .sd-content ul li.share-skype div.option.option-smart-off a:before,
323
+ .sd-social-icon-text .sd-content li.share-skype a:before {
324
+ content: '\f220';
325
+ }
326
  .sd-social-icon .sd-content ul a.share-more:before,
327
  .sd-social-text .sd-content ul a.share-more:before,
328
  .sd-content ul li.advanced a.share-more:before,
334
  color: #2ba1cb;
335
  }
336
 
337
+ .sd-social-icon .sd-content ul li.share-jetpack-whatsapp a:before,
338
+ .sd-social-text .sd-content ul li.share-jetpack-whatsapp a:before,
339
+ .sd-content ul li.share-jetpack-whatsapp div.option.option-smart-off a:before,
340
+ .sd-social-icon-text .sd-content li.share-jetpack-whatsapp a:before,
341
+ .sd-social-official .sd-content li.share-jetpack-whatsapp a:before {
342
+ content: '\f608';
343
+ }
344
+ .sd-social-official .sd-content li.share-jetpack-whatsapp a:before {
345
+ color: #43d854;
346
+ }
347
+ .sd-social-icon .sd-content ul li[class*='share-'].share-jetpack-whatsapp a.sd-button {
348
+ background: #43d854;
349
+ color: #fff !important;
350
+ }
351
 
352
  /* Share count */
353
  .sd-social .sd-button .share-count {
399
  width: 98px;
400
  }
401
 
 
 
 
402
 
403
  /* Individual official buttons */
404
  .googleplus1_button .g-plus {
413
  margin: 0 !important;
414
  }
415
 
416
+ .sd-social-official .sd-content .share-skype {
417
+ width: 55px;
418
+ }
419
+
420
  body .sd-social-official li.share-print ,
421
  body .sd-social-official li.share-email a,
422
  body .sd-social-official li.share-custom a,
455
  width: 0;
456
  }
457
 
 
 
 
458
  body .sd-social-icon .sd-content li.share-custom a span {
459
  padding-left: 16px !important;
460
  }
481
 
482
  .sd-social-official .sd-content .sharing-hidden ul>li.share-end {
483
  clear: both;
484
+ margin: 0 !important;
485
+ height: 0 !important;
486
  }
487
 
488
  .sharing-hidden .inner:before, .sharing-hidden .inner:after {
523
  -webkit-border-radius: 50%;
524
  border: 0;
525
  box-shadow: none;
526
+ padding: 7px;
527
  position: relative;
528
  top: -2px;
529
  line-height: 1;
543
  opacity: .6;
544
  }
545
 
546
+
547
+
548
  .sd-social-icon .sd-content ul li[class*='share-'] a.sd-button:before {
549
+ top: 1px;
550
+ top: 0px\9; /* IE8 and below */
551
  }
552
 
553
  .sd-social-icon .sd-content ul li[class*='share-'] a.sd-button.share-custom {
609
  color: #fff !important;
610
  }
611
 
612
+ .sd-social-icon .sd-content ul li[class*='share-'].share-telegram a.sd-button {
613
+ background: #0088cc;
614
+ color: #fff !important;
615
+ }
616
+
617
  .sd-social-icon .sd-content ul li[class*='share-'].share-linkedin a.sd-button {
618
  background: #0077b5;
619
  color: #fff !important;
629
  color: #fff !important;
630
  }
631
 
 
 
 
 
 
632
  .sd-social-icon .sd-content ul li[class*='share-'].share-reddit a.sd-button {
633
  background: #cee3f8;
634
  color: #555555 !important;
635
  }
636
 
637
+ .sd-social-icon .sd-content ul li[class*='share-'].share-skype a.sd-button {
638
+ background: #00AFF0;
639
+ color: #fff !important;
640
+ }
641
 
642
  /**
643
  * Screen Reader Text for "Icon Only" option
745
  height: 123px;
746
  margin: 0 0 1em 0;
747
  }
748
+
modules/sharedaddy/sharing.js CHANGED
@@ -204,7 +204,7 @@ var updateLinkedInCount = function( data ) {
204
  $more_sharing_pane.data( 'justSlid', false );
205
  }, 300 );
206
 
207
- if ( $more_sharing_pane.find( '.share-google-plus-1' ).size() ) {
208
  // The pane needs to stay open for the Google+ Button
209
  return;
210
  }
204
  $more_sharing_pane.data( 'justSlid', false );
205
  }, 300 );
206
 
207
+ if ( $more_sharing_pane.find( '.share-google-plus-1' ).length ) {
208
  // The pane needs to stay open for the Google+ Button
209
  return;
210
  }
modules/sharedaddy/sharing.php CHANGED
@@ -23,10 +23,16 @@ class Sharing_Admin {
23
  }
24
 
25
  public function sharing_head() {
26
- wp_enqueue_script( 'sharing-js', WP_SHARING_PLUGIN_URL.'admin-sharing.js', array( 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable', 'jquery-form' ), 2 );
27
- wp_enqueue_style( 'sharing-admin', WP_SHARING_PLUGIN_URL.'admin-sharing.css', false, JETPACK__VERSION );
28
- wp_enqueue_style( 'sharing', WP_SHARING_PLUGIN_URL.'sharing.css', false, JETPACK__VERSION );
29
- wp_enqueue_style( 'genericons' );
 
 
 
 
 
 
30
  wp_enqueue_script( 'sharing-js-fe', WP_SHARING_PLUGIN_URL . 'sharing.js', array( ), 4 );
31
 
32
  add_thickbox();
23
  }
24
 
25
  public function sharing_head() {
26
+ wp_enqueue_script( 'sharing-js', WP_SHARING_PLUGIN_URL . 'admin-sharing.js', array( 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable', 'jquery-form' ), 2 );
27
+ $postfix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
28
+ if ( is_rtl() ) {
29
+ wp_enqueue_style( 'sharing-admin', WP_SHARING_PLUGIN_URL . 'admin-sharing-rtl' . $postfix . '.css', false, JETPACK__VERSION );
30
+ } else {
31
+ wp_enqueue_style( 'sharing-admin', WP_SHARING_PLUGIN_URL . 'admin-sharing' . $postfix . '.css', false, JETPACK__VERSION );
32
+ }
33
+ wp_enqueue_style( 'sharing', WP_SHARING_PLUGIN_URL . 'sharing.css', false, JETPACK__VERSION );
34
+
35
+ wp_enqueue_style( 'social-logos' );
36
  wp_enqueue_script( 'sharing-js-fe', WP_SHARING_PLUGIN_URL . 'sharing.js', array( ), 4 );
37
 
38
  add_thickbox();
modules/shortcodes.php CHANGED
@@ -9,7 +9,7 @@
9
  * Requires Connection: No
10
  * Auto Activate: Yes
11
  * Module Tags: Photos and Videos, Social, Writing, Appearance
12
- * Additional Search Queries: shortcodes, shortcode, embeds, media, bandcamp, blip.tv, dailymotion, digg, facebook, flickr, google calendars, google maps, google+, polldaddy, recipe, recipes, scribd, slideshare, slideshow, slideshows, soundcloud, ted, twitter, vimeo, vine, youtube
13
  */
14
 
15
  /**
@@ -59,16 +59,12 @@ function jetpack_load_shortcodes() {
59
  $shortcode_includes = apply_filters( 'jetpack_shortcodes_to_include', $shortcode_includes );
60
 
61
  foreach ( $shortcode_includes as $include ) {
62
- if ( version_compare( $wp_version, '3.6-z', '>=' ) && stristr( $include, 'audio.php' ) ) {
63
- continue;
64
- }
65
-
66
  include $include;
67
  }
68
  }
69
 
70
  /**
71
- * Runs preg_replace so that replacements don't happen within open tags.
72
  * Parameters are the same as preg_replace, with an added optional search param for improved performance
73
  *
74
  * @param String $pattern
@@ -85,7 +81,7 @@ function jetpack_preg_replace_outside_tags( $pattern, $replacement, $content, $s
85
  if ( $search && false === strpos( $content, $search ) ) {
86
  return $content;
87
  }
88
-
89
  $textarr = wp_html_split( $content );
90
  unset( $content );
91
  foreach( $textarr as &$element ) {
@@ -93,12 +89,12 @@ function jetpack_preg_replace_outside_tags( $pattern, $replacement, $content, $s
93
  continue;
94
  $element = preg_replace( $pattern, $replacement, $element );
95
  }
96
-
97
  return join( $textarr );
98
  }
99
 
100
  /**
101
- * Runs preg_replace_callback so that replacements don't happen within open tags.
102
  * Parameters are the same as preg_replace, with an added optional search param for improved performance
103
  *
104
  * @param String $pattern
@@ -115,7 +111,7 @@ function jetpack_preg_replace_callback_outside_tags( $pattern, $callback, $conte
115
  if ( $search && false === strpos( $content, $search ) ) {
116
  return $content;
117
  }
118
-
119
  $textarr = wp_html_split( $content );
120
  unset( $content );
121
  foreach( $textarr as &$element ) {
@@ -123,28 +119,8 @@ function jetpack_preg_replace_callback_outside_tags( $pattern, $callback, $conte
123
  continue;
124
  $element = preg_replace_callback( $pattern, $callback, $element );
125
  }
126
-
127
- return join( $textarr );
128
- }
129
-
130
- global $wp_version;
131
-
132
- if ( version_compare( $wp_version, '3.6-z', '>=' ) ) {
133
- add_filter( 'shortcode_atts_audio', 'jetpack_audio_atts_handler', 10, 3 );
134
-
135
- function jetpack_audio_atts_handler( $out, $pairs, $atts ) {
136
- if( isset( $atts[0] ) )
137
- $out['src'] = $atts[0];
138
-
139
- return $out;
140
- }
141
 
142
- function jetpack_shortcode_get_audio_id( $atts ) {
143
- if ( isset( $atts[ 0 ] ) )
144
- return $atts[ 0 ];
145
- else
146
- return 0;
147
- }
148
  }
149
 
150
  if ( ! function_exists( 'jetpack_shortcode_get_wpvideo_id' ) ) {
9
  * Requires Connection: No
10
  * Auto Activate: Yes
11
  * Module Tags: Photos and Videos, Social, Writing, Appearance
12
+ * Additional Search Queries: shortcodes, shortcode, embeds, media, bandcamp, blip.tv, dailymotion, facebook, flickr, google calendars, google maps, google+, polldaddy, recipe, recipes, scribd, slideshare, slideshow, slideshows, soundcloud, ted, twitter, vimeo, vine, youtube
13
  */
14
 
15
  /**
59
  $shortcode_includes = apply_filters( 'jetpack_shortcodes_to_include', $shortcode_includes );
60
 
61
  foreach ( $shortcode_includes as $include ) {
 
 
 
 
62
  include $include;
63
  }
64
  }
65
 
66
  /**
67
+ * Runs preg_replace so that replacements don't happen within open tags.
68
  * Parameters are the same as preg_replace, with an added optional search param for improved performance
69
  *
70
  * @param String $pattern
81
  if ( $search && false === strpos( $content, $search ) ) {
82
  return $content;
83
  }
84
+
85
  $textarr = wp_html_split( $content );
86
  unset( $content );
87
  foreach( $textarr as &$element ) {
89
  continue;
90
  $element = preg_replace( $pattern, $replacement, $element );
91
  }
92
+
93
  return join( $textarr );
94
  }
95
 
96
  /**
97
+ * Runs preg_replace_callback so that replacements don't happen within open tags.
98
  * Parameters are the same as preg_replace, with an added optional search param for improved performance
99
  *
100
  * @param String $pattern
111
  if ( $search && false === strpos( $content, $search ) ) {
112
  return $content;
113
  }
114
+
115
  $textarr = wp_html_split( $content );
116
  unset( $content );
117
  foreach( $textarr as &$element ) {
119
  continue;
120
  $element = preg_replace_callback( $pattern, $callback, $element );
121
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
 
123
+ return join( $textarr );
 
 
 
 
 
124
  }
125
 
126
  if ( ! function_exists( 'jetpack_shortcode_get_wpvideo_id' ) ) {
modules/shortcodes/audio.php CHANGED
@@ -1,435 +1,6 @@
1
  <?php
2
-
3
  /**
4
- * Class wrapper for audio shortcode
5
- */
6
- class AudioShortcode {
7
-
8
- static $add_script = false;
9
-
10
- /**
11
- * Add all the actions & resgister the shortcode
12
- */
13
- function __construct() {
14
- add_shortcode( 'audio', array( $this, 'audio_shortcode' ) );
15
- add_action( 'wp_enqueue_scripts', array( $this, 'check_infinite' ) );
16
- add_action( 'infinite_scroll_render', array( $this, 'audio_shortcode_infinite' ), 11 );
17
- }
18
-
19
- /**
20
- * Return the $url of the audio
21
- */
22
- static function get_audio_id( $atts ) {
23
- if ( isset( $atts[0] ) )
24
- return $atts[0];
25
- else
26
- return 0;
27
- }
28
-
29
- /**
30
- * Shortcode for audio
31
- * [audio http://wpcom.files.wordpress.com/2007/01/mattmullenweg-interview.mp3|width=180|titles=1|artists=2]
32
- *
33
- * The important question here is whether the shortcode applies to widget_text:
34
- * add_filter('widget_text', 'do_shortcode');
35
- * */
36
- function audio_shortcode( $atts ) {
37
- global $ap_playerID;
38
- global $post;
39
-
40
- if ( ! is_array( $atts ) ) {
41
- return '<!-- Audio shortcode passed invalid attributes -->';
42
- }
43
-
44
- if ( ! isset( $atts[0] ) ) {
45
- if ( isset( $atts['src'] ) ) {
46
- $atts[0] = $atts['src'];
47
- unset( $atts['src'] );
48
- } else {
49
- return '<!-- Audio shortcode source not set -->';
50
- }
51
- }
52
-
53
- $post_id = 0;
54
- if ( isset( $post ) ) {
55
- $post_id = $post->ID;
56
- }
57
-
58
- // add the special .js
59
- wp_enqueue_script(
60
- 'audio-shortcode',
61
- plugins_url( 'js/audio-shortcode.js', __FILE__ ),
62
- array( 'jquery' ),
63
- '1.1',
64
- true);
65
-
66
- // alert the infinite scroll renderer that it should try to load the script
67
- self::$add_script = true;
68
- $atts[0] = strip_tags( join( ' ', $atts ) );
69
- $src = ltrim( $atts[0], '=' );
70
-
71
- /**
72
- * Set the audio player default colors.
73
- *
74
- * @module shortcodes
75
- *
76
- * @since 1.4.0
77
- *
78
- * @param array $ap_options {
79
- * The default colors for the audio player in hexidecimal format (e.g. 0x#F8F8F8).
80
- *
81
- * @type string $bg Background color.
82
- * @type string $leftbg Left background color.
83
- * @type string $lefticon Left icon color.
84
- * @type string $rightbg Right background color.
85
- * @type string $rightbghover Right background hover color.
86
- * @type string $righticon Right icon color.
87
- * @type string $righticonhover Right icon hover color.
88
- * @type string $text Text color.
89
- * @type string $slider Slider color.
90
- * @type string $track Track color.
91
- * @type string $border Border color.
92
- * @type string $loader Loader color.
93
- */
94
- $ap_options = apply_filters(
95
- 'audio_player_default_colors',
96
- array(
97
- "bg" => "0xF8F8F8",
98
- "leftbg" => "0xEEEEEE",
99
- "lefticon" => "0x666666",
100
- "rightbg" => "0xCCCCCC",
101
- "rightbghover" => "0x999999",
102
- "righticon" => "0x666666",
103
- "righticonhover" => "0xFFFFFF",
104
- "text" => "0x666666",
105
- "slider" => "0x666666",
106
- "track" => "0xFFFFFF",
107
- "border" => "0x666666",
108
- "loader" => "0x9FFFB8"
109
- ) );
110
-
111
- if ( ! isset( $ap_playerID ) ) {
112
- $ap_playerID = 1;
113
- } else {
114
- $ap_playerID++;
115
- }
116
-
117
- if ( ! isset( $load_audio_script ) ) {
118
- $load_audio_script = true;
119
- }
120
-
121
- // prep the audio files
122
- $src = trim( $src, ' "' );
123
- $options = array();
124
- $data = preg_split( "/\|/", $src );
125
- $sound_file = $data[0];
126
- $sound_files = explode( ',', $sound_file );
127
-
128
- if ( is_ssl() ) {
129
- for ( $i = 0; $i < count( $sound_files ); $i++ ) {
130
- $sound_files[ $i ] = preg_replace( '#^http://([^.]+).files.wordpress.com/#', 'https://$1.files.wordpress.com/', $sound_files[ $i ] );
131
- }
132
- }
133
-
134
- $sound_files = array_map( 'trim', $sound_files );
135
- $sound_files = array_map( array( $this, 'rawurlencode_spaces' ), $sound_files );
136
- $sound_files = array_map( 'esc_url_raw', $sound_files ); // Ensure each is a valid URL
137
- $num_files = count( $sound_files );
138
- $sound_types = array(
139
- 'mp3' => 'mpeg',
140
- 'wav' => 'wav',
141
- 'ogg' => 'ogg',
142
- 'oga' => 'ogg',
143
- 'm4a' => 'mp4',
144
- 'aac' => 'mp4',
145
- 'webm' => 'webm'
146
- );
147
-
148
- for ( $i = 1; $i < count( $data ); $i++ ) {
149
- $pair = explode( "=", $data[$i] );
150
- if ( strtolower( $pair[0] ) != 'autostart' ) {
151
- $options[$pair[0]] = $pair[1];
152
- }
153
- }
154
-
155
- // Merge runtime options to default colour options
156
- // (runtime options overwrite default options)
157
- foreach ( $ap_options as $key => $default ) {
158
- if ( isset( $options[$key] ) ) {
159
- if ( preg_match( '/^(0x)?[a-f0-9]{6}$/i', $default ) && !preg_match( '/^(0x)?[a-f0-9]{6}$/i', $options[$key] ) ) {
160
- // Default is a hex color, but input is not
161
- $options[$key] = $default;
162
- }
163
- } else {
164
- $options[$key] = $default;
165
- }
166
- }
167
- $options['soundFile'] = join( ',', $sound_files ); // Rebuild the option with our now sanitized data
168
- $flash_vars = array();
169
- foreach ( $options as $key => $value ) {
170
- $flash_vars[] = rawurlencode( $key ) . '=' . rawurlencode( $value );
171
- }
172
- $flash_vars = implode( '&amp;', $flash_vars );
173
- $flash_vars = esc_attr( $flash_vars );
174
-
175
- // extract some of the options to insert into the markup
176
- if ( isset( $options['bgcolor'] ) && preg_match( '/^(0x)?[a-f0-9]{6}$/i', $options['bgcolor'] ) ) {
177
- $bgcolor = preg_replace( '/^(0x)?/', '#', $options['bgcolor'] );
178
- $bgcolor = esc_attr( $bgcolor );
179
- } else {
180
- $bgcolor = '#FFFFFF';
181
- }
182
-
183
- if ( isset( $options['width'] ) ) {
184
- $width = intval( $options['width'] );
185
- } else {
186
- $width = 290;
187
- }
188
-
189
- $loop = '';
190
- $script_loop = 'false';
191
- if ( isset( $options['loop'] ) && 'yes' == $options['loop'] ) {
192
- $script_loop = 'true';
193
- if ( 1 == $num_files ) {
194
- $loop = 'loop';
195
- }
196
- }
197
-
198
- $volume = 0.6;
199
- if ( isset( $options['initialvolume'] ) &&
200
- 0.0 < floatval( $options['initialvolume'] ) &&
201
- 100.0 >= floatval( $options['initialvolume'] ) ) {
202
-
203
- $volume = floatval( $options['initialvolume'] )/100.0;
204
- }
205
-
206
- $file_artists = array_pad( array(), $num_files, '' );
207
- if ( isset( $options['artists'] ) ) {
208
- $artists = preg_split( '/,/', $options['artists'] );
209
- foreach ( $artists as $i => $artist ) {
210
- $file_artists[$i] = esc_html( $artist ) . ' - ';
211
- }
212
- }
213
-
214
- // generate default titles
215
- $file_titles = array();
216
- for ( $i = 0; $i < $num_files; $i++ ) {
217
- $file_titles[] = 'Track #' . ($i+1);
218
- }
219
-
220
- // replace with real titles if they exist
221
- if ( isset( $options['titles'] ) ) {
222
- $titles = preg_split( '/,/', $options['titles'] );
223
- foreach ( $titles as $i => $title ) {
224
- $file_titles[$i] = esc_html( $title );
225
- }
226
- }
227
-
228
- // fallback for the fallback, just a download link
229
- $not_supported = '';
230
- foreach ( $sound_files as $sfile ) {
231
- $not_supported .= sprintf(
232
- __( 'Download: <a href="%s">%s</a><br />', 'jetpack' ),
233
- esc_url( $sfile ),
234
- esc_html( basename( $sfile ) ) );
235
- }
236
-
237
- // HTML5 audio tag
238
- $html5_audio = '';
239
- $all_mp3 = true;
240
- $add_audio = true;
241
- $num_good = 0;
242
- $to_remove = array();
243
- foreach ( $sound_files as $i => $sfile ) {
244
- $file_extension = pathinfo( $sfile, PATHINFO_EXTENSION );
245
- if ( ! preg_match( '/^(mp3|wav|ogg|oga|m4a|aac|webm)$/i', $file_extension ) ) {
246
- $html5_audio .= '<!-- Audio shortcode unsupported audio format -->';
247
- if ( 1 == $num_files ) {
248
- $html5_audio .= $not_supported;
249
- }
250
-
251
- $to_remove[] = $i; // make a note of the bad files
252
- $all_mp3 = false;
253
- continue;
254
- } elseif ( ! preg_match( '/^mp3$/i', $file_extension ) ) {
255
- $all_mp3 = false;
256
- }
257
-
258
- if ( 0 == $i ) { // only need one player
259
- $html5_audio .= <<<AUDIO
260
- <span id="wp-as-{$post_id}_{$ap_playerID}-container">
261
- <audio id='wp-as-{$post_id}_{$ap_playerID}' controls preload='none' $loop style='background-color:$bgcolor;width:{$width}px;'>
262
- <span id="wp-as-{$post_id}_{$ap_playerID}-nope">$not_supported</span>
263
- </audio>
264
- </span>
265
- <br />
266
- AUDIO;
267
- }
268
- $num_good++;
269
- }
270
-
271
- // player controls, if needed
272
- if ( 1 < $num_files ) {
273
- $html5_audio .= <<<CONTROLS
274
- <span id='wp-as-{$post_id}_{$ap_playerID}-controls' style='display:none;'>
275
- <a id='wp-as-{$post_id}_{$ap_playerID}-prev'
276
- href='javascript:audioshortcode.prev_track( "{$post_id}_{$ap_playerID}" );'
277
- style='font-size:1.5em;'>&laquo;</a>
278
- |
279
- <a id='wp-as-{$post_id}_{$ap_playerID}-next'
280
- href='javascript:audioshortcode.next_track( "{$post_id}_{$ap_playerID}", true, $script_loop );'
281
- style='font-size:1.5em;'>&raquo;</a>
282
- </span>
283
- CONTROLS;
284
- }
285
- $html5_audio .= "<span id='wp-as-{$post_id}_{$ap_playerID}-playing'></span>";
286
-
287
- /**
288
- * Sets external resource URL.
289
- *
290
- * @module shortcodes
291
- *
292
- * @since 1.4.0
293
- *
294
- * @param string $args URL of external resource.
295
- *
296
- */
297
- $swfurl = apply_filters(
298
- 'jetpack_static_url',
299
- set_url_scheme( "http://en.wordpress.com/wp-content/plugins/audio-player/player.swf" )
300
- );
301
-
302
- // all the fancy javascript is causing Google Reader to break, just include flash in GReader
303
- // override html5 audio code w/ just not supported code
304
- if ( is_feed() ) {
305
- $html5_audio = $not_supported;
306
- }
307
-
308
- if ( $all_mp3 ) {
309
- // process regular flash player, inserting HTML5 tags into object as fallback
310
- $audio_tags = <<<FLASH
311
- <object id='wp-as-{$post_id}_{$ap_playerID}-flash' type='application/x-shockwave-flash' data='$swfurl' width='$width' height='24'>
312
- <param name='movie' value='$swfurl' />
313
- <param name='FlashVars' value='{$flash_vars}' />
314
- <param name='quality' value='high' />
315
- <param name='menu' value='false' />
316
- <param name='bgcolor' value='$bgcolor' />
317
- <param name='wmode' value='opaque' />
318
- $html5_audio
319
- </object>
320
- FLASH;
321
- } else { // just HTML5 for non-mp3 versions
322
- $audio_tags = $html5_audio;
323
- }
324
-
325
- // strip out all the bad files before it reaches .js
326
- foreach ( $to_remove as $i ) {
327
- array_splice( $sound_files, $i, 1 );
328
- array_splice( $file_artists, $i, 1 );
329
- array_splice( $file_titles, $i, 1 );
330
- }
331
-
332
- // mashup the artist/titles for the script
333
- $script_titles = array();
334
- for ( $i = 0; $i < $num_files; $i++ ) {
335
- if ( isset( $file_artists[ $i ] ) && isset( $file_titles[ $i ] ) ) {
336
- $script_titles[] = $file_artists[ $i ] . $file_titles[ $i ];
337
- }
338
- }
339
-
340
- // javacript to control audio
341
- $script_files = json_encode( $sound_files );
342
- $script_titles = json_encode( $script_titles );
343
- $script = <<<SCRIPT
344
- <script type='text/javascript'>
345
- //<![CDATA[
346
- (function() {
347
- var prep = function() {
348
- if ( 'undefined' === typeof window.audioshortcode ) { return; }
349
- audioshortcode.prep(
350
- '{$post_id}_{$ap_playerID}',
351
- $script_files,
352
- $script_titles,
353
- $volume,
354
- $script_loop
355
- );
356
- };
357
- if ( 'undefined' === typeof jQuery ) {
358
- if ( document.addEventListener ) {
359
- window.addEventListener( 'load', prep, false );
360
- } else if ( document.attachEvent ) {
361
- window.attachEvent( 'onload', prep );
362
- }
363
- } else {
364
- jQuery(document).on( 'ready as-script-load', prep );
365
- }
366
- })();
367
- //]]>
368
- </script>
369
- SCRIPT;
370
-
371
- // add the special javascript, if needed
372
- if ( 0 < $num_good && ! is_feed() ) {
373
- $audio_tags .= $script;
374
- }
375
-
376
- return "<span style='text-align:left;display:block;'><p>$audio_tags</p></span>";
377
- }
378
-
379
- /**
380
- * If the theme uses infinite scroll, include jquery at the start
381
- */
382
- function check_infinite() {
383
- if ( current_theme_supports( 'infinite-scroll' ) && class_exists( 'The_Neverending_Home_Page' ) && The_Neverending_Home_Page::archive_supports_infinity() )
384
- wp_enqueue_script( 'jquery' );
385
- }
386
-
387
-
388
- /**
389
- * Dynamically load the .js, if needed
390
- *
391
- * This hooks in late (priority 11) to infinite_scroll_render to determine
392
- * a posteriori if a shortcode has been called.
393
- */
394
- function audio_shortcode_infinite() {
395
- // only try to load if a shortcode has been called
396
- if( self::$add_script ) {
397
- $script_url = json_encode( esc_url_raw( plugins_url( 'js/audio-shortcode.js', __FILE__ ) ) );
398
-
399
- // if the script hasn't been loaded, load it
400
- // if the script loads successfully, fire an 'as-script-load' event
401
- echo <<<SCRIPT
402
- <script type='text/javascript'>
403
- //<![CDATA[
404
- if ( typeof window.audioshortcode === 'undefined' ) {
405
- var wp_as_js = document.createElement( 'script' );
406
- wp_as_js.type = 'text/javascript';
407
- wp_as_js.src = $script_url;
408
- wp_as_js.async = true;
409
- wp_as_js.onload = function() {
410
- jQuery( document.body ).trigger( 'as-script-load' );
411
- };
412
- document.getElementsByTagName( 'head' )[0].appendChild( wp_as_js );
413
- } else {
414
- jQuery( document.body ).trigger( 'as-script-load' );
415
- }
416
- //]]>
417
- </script>
418
- SCRIPT;
419
- }
420
- }
421
-
422
- /**
423
- * Fixes URLs that have been pasted with spaces:
424
- * [audio http://example.com/Some Cool Music.mp3]
425
- *
426
- * @param string $url
427
- * @return string
428
- */
429
- function rawurlencode_spaces( $url ) {
430
- return str_replace( ' ', rawurlencode( ' ' ), $url );
431
- }
432
- }
433
-
434
- // kick it all off
435
- new AudioShortcode();
1
  <?php
 
2
  /**
3
+ * Deprecated. No longer needed.
4
+ *
5
+ * @package Jetpack
6
+ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/shortcodes/css/recipes-print.css CHANGED
@@ -1,3 +1,36 @@
1
  .jetpack-recipe-meta li.jetpack-recipe-print {
2
  display: none;
3
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  .jetpack-recipe-meta li.jetpack-recipe-print {
2
  display: none;
3
  }
4
+
5
+ .jetpack-recipe-title {
6
+ font-size: 16pt;
7
+ }
8
+
9
+ .jetpack-recipe-content img {
10
+ display: inline-block !important;
11
+ max-width: 100%;
12
+ }
13
+
14
+ .jetpack-recipe-image {
15
+ display: none !important;
16
+ }
17
+
18
+ .jetpack-recipe-content .aligncenter {
19
+ display: block !important;
20
+ margin: 0 auto 1em !important;
21
+ text-align: center !important;
22
+ }
23
+
24
+ .jetpack-recipe-content .alignright {
25
+ float: right !important;
26
+ margin: 0 0 .5em 1em !important;
27
+ }
28
+
29
+ .jetpack-recipe-content .alignleft {
30
+ float: left !important;
31
+ margin: 0 1em .5em 0 !important;
32
+ }
33
+
34
+ .jetpack-recipe-content .alignnone {
35
+ display: inline-block;
36
+ }
modules/shortcodes/css/recipes.css CHANGED
@@ -31,3 +31,6 @@
31
  padding-right: 0;
32
  text-align: right;
33
  }
 
 
 
31
  padding-right: 0;
32
  text-align: right;
33
  }
34
+ .jetpack-recipe-notes {
35
+ font-style: italic;
36
+ }
modules/shortcodes/css/rtl/recipes-rtl.css CHANGED
@@ -1,4 +1,4 @@
1
- /* This file was automatically generated on Feb 24 2014 16:44:25 */
2
 
3
  .jetpack-recipe {
4
  border: 1px solid #f2f2f2;
@@ -33,3 +33,6 @@
33
  padding-left: 0;
34
  text-align: left;
35
  }
 
 
 
1
+ /* This file was automatically generated on Apr 19 2016 09:36:47 */
2
 
3
  .jetpack-recipe {
4
  border: 1px solid #f2f2f2;
33
  padding-left: 0;
34
  text-align: left;
35
  }
36
+ .jetpack-recipe-notes {
37
+ font-style: italic;
38
+ }
modules/shortcodes/js/audio-shortcode.js DELETED
@@ -1,159 +0,0 @@
1
- /* jshint onevar:false */
2
- /* global audioshortcode */
3
-
4
- // Note: This file no longer exists on wpcom.
5
-
6
- (function($) {
7
-
8
- window.audioshortcode = {
9
-
10
- /**
11
- * Prep the audio player once the page is ready, add listeners, etc
12
- */
13
- prep: function( player_id, files, titles, volume, loop ) {
14
- // check if the player has already been prepped, no-op if it has
15
- var container = $( '#wp-as-' + player_id + '-container' );
16
- if ( container.hasClass( 'wp-as-prepped' ) ) {
17
- return;
18
- }
19
- container.addClass( 'wp-as-prepped' );
20
-
21
- // browser doesn't support HTML5 audio, no-op
22
- if ( ! document.createElement('audio').canPlayType ) {
23
- return;
24
- }
25
-
26
- // if the browser removed the script, no-op
27
- var player = $( '#wp-as-' + player_id ).get(0);
28
- if ( typeof player === 'undefined' ) {
29
- return;
30
- }
31
-
32
- this[player_id] = [];
33
- this[player_id].i = 0;
34
- this[player_id].files = files;
35
- this[player_id].titles = titles;
36
- player.volume = volume;
37
-
38
- var type_map = {
39
- 'mp3': 'mpeg',
40
- 'wav': 'wav',
41
- 'ogg': 'ogg',
42
- 'oga': 'ogg',
43
- 'm4a': 'mp4',
44
- 'aac': 'mp4',
45
- 'webm': 'webm'
46
- };
47
-
48
- // strip out all the files that can't be played
49
- for ( var i = this[player_id].files.length-1; i >= 0; i-- ) {
50
- var extension = this[player_id].files[i].split( '.' ).pop();
51
- var type = 'audio/' + type_map[extension];
52
- if ( ! player.canPlayType( type ) ) {
53
- this.remove_track( player_id, i );
54
- }
55
- }
56
-
57
- // bail if there are no more good files
58
- if ( 0 === this[player_id].files.length ) {
59
- return;
60
- }
61
- player.src = this[player_id].files[0];
62
-
63
- // show the controls if there are still 2+ files remaining
64
- if ( 1 < this[player_id].files.length ) {
65
- $( '#wp-as-' + player_id + '-controls' ).show();
66
- }
67
-
68
- player.addEventListener( 'error', function() {
69
- audioshortcode.remove_track( player_id, audioshortcode[player_id].i );
70
- if ( 0 < audioshortcode[player_id].files.length ) {
71
- audioshortcode[player_id].i--;
72
- audioshortcode.next_track( player_id, false, loop );
73
- }
74
- }, false );
75
-
76
- player.addEventListener( 'ended', function() {
77
- audioshortcode.next_track( player_id, false, loop );
78
- }, false );
79
-
80
- player.addEventListener( 'play', function() {
81
- var i = audioshortcode[player_id].i;
82
- var titles = audioshortcode[player_id].titles;
83
- $( '#wp-as-' + player_id + '-playing' ).text( ' ' + titles[i] );
84
- }, false );
85
-
86
- player.addEventListener( 'pause', function() {
87
- $( '#wp-as-' + player_id + '-playing' ).text( '' );
88
- }, false );
89
- },
90
-
91
- /**
92
- * Remove the track and update the player/controls if needed
93
- */
94
- remove_track: function( player_id, index ) {
95
- this[player_id].files.splice( index, 1 );
96
- this[player_id].titles.splice( index, 1 );
97
-
98
- // get rid of player/controls if they can't be played
99
- if ( 0 === this[player_id].files.length ) {
100
- $( '#wp-as-' + player_id + '-container' ).html( $( '#wp-as-' + player_id + '-nope' ).html() );
101
- $( '#wp-as-' + player_id + '-controls' ).html( '' );
102
- } else if ( 1 === this[player_id].files.length ) {
103
- $( '#wp-as-' + player_id + '-controls' ).html( '' );
104
- }
105
- },
106
-
107
- /**
108
- * Change the src of the player, load the file, then play it
109
- */
110
- start_track: function( player_id, file ) {
111
- var player = $( '#wp-as-' + player_id ).get(0);
112
- player.src = file;
113
- player.load();
114
- player.play();
115
- },
116
-
117
- /**
118
- * Play the previous track
119
- */
120
- prev_track: function( player_id ) {
121
- var player = $( '#wp-as-' + player_id ).get(0);
122
- var files = this[player_id].files;
123
- if ( player.paused || 0 === this[player_id].i ) {
124
- return;
125
- }
126
-
127
- player.pause();
128
- if ( 0 < this[player_id].i ) {
129
- this[player_id].i--;
130
- this.start_track( player_id, files[this[player_id].i] );
131
- }
132
- },
133
-
134
- /**
135
- * Play the next track
136
- */
137
- next_track: function( player_id, fromClick, loop ) {
138
- var player = $( '#wp-as-' + player_id ).get(0);
139
- var files = this[player_id].files;
140
- if ( fromClick && ( player.paused || files.length-1 === this[player_id].i ) ) {
141
- return;
142
- }
143
-
144
- player.pause();
145
- if ( files.length-1 > this[player_id].i ) {
146
- this[player_id].i++;
147
- this.start_track( player_id, files[this[player_id].i] );
148
- } else if ( loop ) {
149
- this[player_id].i = 0;
150
- this.start_track( player_id, 0 );
151
- } else {
152
- this[player_id].i = 0;
153
- player.src = files[0];
154
- $( '#wp-as-' + player_id + '-playing' ).text( '' );
155
- }
156
- }
157
- };
158
-
159
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/shortcodes/recipe.php CHANGED
@@ -1,23 +1,41 @@
1
  <?php
 
2
  /**
3
  * Embed recipe 'cards' in post, with basic styling and print functionality
4
  *
 
 
 
 
 
5
  */
6
-
7
  class Jetpack_Recipes {
8
 
9
  private $scripts_and_style_included = false;
10
 
11
  function __construct() {
12
  add_action( 'init', array( $this, 'action_init' ) );
 
 
 
 
 
 
 
 
 
 
13
  }
14
 
15
  function action_init() {
16
  // Enqueue styles if [recipe] exists
17
  add_action( 'wp_head', array( $this, 'add_scripts' ), 1 );
18
 
19
- // Render [recipe]
20
  add_shortcode( 'recipe', array( $this, 'recipe_shortcode' ) );
 
 
 
21
  }
22
 
23
  /**
@@ -39,39 +57,41 @@ class Jetpack_Recipes {
39
  return;
40
  }
41
 
42
- if( is_rtl() ) {
43
- wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/rtl/recipes-rtl.css', __FILE__ ), array(), '20130919' );
44
  } else {
45
- wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/recipes.css', __FILE__ ), array(), '20130919' );
46
  }
47
 
 
48
 
49
  wp_enqueue_script( 'jetpack-recipes-printthis', plugins_url( '/js/recipes-printthis.js', __FILE__ ), array( 'jquery' ), '20131230' );
50
- wp_enqueue_script( 'jetpack-recipes-js', plugins_url( '/js/recipes.js', __FILE__ ), array( 'jquery', 'jetpack-recipes-printthis' ), '20131230' );
51
 
52
- $title_var = wp_title( '|', false, 'right' );
53
  $print_css_var = plugins_url( '/css/recipes-print.css', __FILE__ );
54
 
55
- wp_localize_script( 'jetpack-recipes-js', 'jetpack_recipes_vars', array(
56
- 'pageTitle' => $title_var,
57
- 'loadCSS' => $print_css_var
58
- ) );
59
  }
60
 
61
  /**
62
  * Our [recipe] shortcode.
63
  * Prints recipe data styled to look good on *any* theme.
64
  *
65
- * @return resume_shortcode_html
66
  */
67
  static function recipe_shortcode( $atts, $content = '' ) {
68
- $atts = shortcode_atts( array(
69
- 'title' => '', //string
70
- 'servings' => '', //intval
71
- 'time' => '', //string
72
- 'difficulty' => '', //string
73
- 'print' => '', //string
74
- ), $atts, 'recipe' );
 
 
 
 
75
 
76
  return self::recipe_shortcode_html( $atts, $content );
77
  }
@@ -79,52 +99,74 @@ class Jetpack_Recipes {
79
  /**
80
  * The recipe output
81
  *
82
- * @return Html
83
  */
84
  static function recipe_shortcode_html( $atts, $content = '' ) {
85
- $html = false;
 
 
86
 
87
  $html = '<div class="hrecipe jetpack-recipe" itemscope itemtype="http://schema.org/Recipe">';
88
 
89
  // Print the recipe title if exists
90
- if ( '' != $atts['title'] ) {
91
  $html .= '<h3 class="jetpack-recipe-title" itemprop="name">' . esc_html( $atts['title'] ) . '</h3>';
92
  }
93
 
94
  // Print the recipe meta if exists
95
- if ( '' != $atts['servings'] || '' != $atts['time'] || '' != $atts['difficulty'] || '' != $atts['print'] ) {
96
  $html .= '<ul class="jetpack-recipe-meta">';
97
 
98
- if ( '' != $atts['servings'] ) {
99
- $html .= sprintf( '<li class="jetpack-recipe-servings" itemprop="recipeYield"><strong>%1$s: </strong>%2$s</li>',
100
- __( 'Servings', 'jetpack' ),
 
101
  esc_html( $atts['servings'] )
102
  );
103
  }
104
 
105
- if ( '' != $atts['time'] ) {
106
- $html .= sprintf( '<li class="jetpack-recipe-time" itemprop="totalTime"><strong>%1$s: </strong>%2$s</li>',
107
- __( 'Time', 'jetpack' ),
 
108
  esc_html( $atts['time'] )
109
  );
110
  }
111
 
112
- if ( '' != $atts['difficulty'] ) {
113
- $html .= sprintf( '<li class="jetpack-recipe-difficulty"><strong>%1$s: </strong>%2$s</li>',
114
- __( 'Difficulty', 'jetpack' ),
 
115
  esc_html( $atts['difficulty'] )
116
  );
117
  }
118
 
119
- if ( 'false' != $atts['print'] ) {
120
- $html .= sprintf( '<li class="jetpack-recipe-print"><a href="#">%s</a></li>',
121
- __( 'Print', 'jetpack' )
 
122
  );
123
  }
124
 
125
  $html .= '</ul>';
126
  }
127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  // Print content between codes
129
  $html .= '<div class="jetpack-recipe-content">' . do_shortcode( $content ) . '</div>';
130
 
@@ -142,6 +184,196 @@ class Jetpack_Recipes {
142
  // Return the HTML block
143
  return $html;
144
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  }
146
 
147
  new Jetpack_Recipes();
1
  <?php
2
+
3
  /**
4
  * Embed recipe 'cards' in post, with basic styling and print functionality
5
  *
6
+ * To Do
7
+ * - defaults settings
8
+ * - basic styles/themecolor styles
9
+ * - validation/sanitization
10
+ * - print styles
11
  */
 
12
  class Jetpack_Recipes {
13
 
14
  private $scripts_and_style_included = false;
15
 
16
  function __construct() {
17
  add_action( 'init', array( $this, 'action_init' ) );
18
+
19
+ // Add itemprop to allowed tags for wp_kses_post, so we can use it for better Schema compliance.
20
+ global $allowedposttags;
21
+ $tags = array( 'li', 'ol', 'img' );
22
+ foreach ( $tags as $tag ) {
23
+ if ( ! is_array( $allowedposttags[ $tag ] ) ) {
24
+ $allowedposttags[ $tag ] = array();
25
+ }
26
+ $allowedposttags[ $tag ]['itemprop'] = array();
27
+ }
28
  }
29
 
30
  function action_init() {
31
  // Enqueue styles if [recipe] exists
32
  add_action( 'wp_head', array( $this, 'add_scripts' ), 1 );
33
 
34
+ // Render [recipe], along with other shortcodes that can be nested within.
35
  add_shortcode( 'recipe', array( $this, 'recipe_shortcode' ) );
36
+ add_shortcode( 'recipe-notes', array( $this, 'recipe_notes_shortcode' ) );
37
+ add_shortcode( 'recipe-ingredients', array( $this, 'recipe_ingredients_shortcode' ) );
38
+ add_shortcode( 'recipe-directions', array( $this, 'recipe_directions_shortcode' ) );
39
  }
40
 
41
  /**
57
  return;
58
  }
59
 
60
+ if ( is_rtl() ) {
61
+ wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/rtl/recipes-rtl.css', __FILE__ ), array(), '20130919' );
62
  } else {
63
+ wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/recipes.css', __FILE__ ), array(), '20130919' );
64
  }
65
 
66
+ wp_add_inline_style( 'jetpack-recipes-style', self::themecolor_styles() ); // add $themecolors-defined styles
67
 
68
  wp_enqueue_script( 'jetpack-recipes-printthis', plugins_url( '/js/recipes-printthis.js', __FILE__ ), array( 'jquery' ), '20131230' );
69
+ wp_enqueue_script( 'jetpack-recipes-js', plugins_url( '/js/recipes.js', __FILE__ ), array( 'jquery', 'jetpack-recipes-printthis' ), '20131230' );
70
 
71
+ $title_var = wp_title( '|', false, 'right' );
72
  $print_css_var = plugins_url( '/css/recipes-print.css', __FILE__ );
73
 
74
+ wp_localize_script( 'jetpack-recipes-js', 'jetpack_recipes_vars', array( 'pageTitle' => $title_var, 'loadCSS' => $print_css_var ) );
 
 
 
75
  }
76
 
77
  /**
78
  * Our [recipe] shortcode.
79
  * Prints recipe data styled to look good on *any* theme.
80
  *
81
+ * @return string HTML for recipe shortcode.
82
  */
83
  static function recipe_shortcode( $atts, $content = '' ) {
84
+ $atts = shortcode_atts(
85
+ array(
86
+ 'title' => '', //string
87
+ 'servings' => '', //intval
88
+ 'time' => '', //string
89
+ 'difficulty' => '', //string
90
+ 'print' => '', //string
91
+ 'image' => '', //string
92
+ 'description' => '', //string
93
+ ), $atts, 'recipe'
94
+ );
95
 
96
  return self::recipe_shortcode_html( $atts, $content );
97
  }
99
  /**
100
  * The recipe output
101
  *
102
+ * @return string HTML output
103
  */
104
  static function recipe_shortcode_html( $atts, $content = '' ) {
105
+ // Add itemprop to allowed tags for wp_kses_post, so we can use it for better Schema compliance.
106
+ global $allowedtags;
107
+ $allowedtags['li'] = array( 'itemprop' => array () );
108
 
109
  $html = '<div class="hrecipe jetpack-recipe" itemscope itemtype="http://schema.org/Recipe">';
110
 
111
  // Print the recipe title if exists
112
+ if ( '' !== $atts['title'] ) {
113
  $html .= '<h3 class="jetpack-recipe-title" itemprop="name">' . esc_html( $atts['title'] ) . '</h3>';
114
  }
115
 
116
  // Print the recipe meta if exists
117
+ if ( '' !== $atts['servings'] || '' != $atts['time'] || '' != $atts['difficulty'] || '' != $atts['print'] ) {
118
  $html .= '<ul class="jetpack-recipe-meta">';
119
 
120
+ if ( '' !== $atts['servings'] ) {
121
+ $html .= sprintf(
122
+ '<li class="jetpack-recipe-servings" itemprop="recipeYield"><strong>%1$s: </strong>%2$s</li>',
123
+ esc_html_x( 'Servings', 'recipe', 'jetpack' ),
124
  esc_html( $atts['servings'] )
125
  );
126
  }
127
 
128
+ if ( '' !== $atts['time'] ) {
129
+ $html .= sprintf(
130
+ '<li class="jetpack-recipe-time" itemprop="totalTime"><strong>%1$s: </strong>%2$s</li>',
131
+ esc_html_x( 'Time', 'recipe', 'jetpack' ),
132
  esc_html( $atts['time'] )
133
  );
134
  }
135
 
136
+ if ( '' !== $atts['difficulty'] ) {
137
+ $html .= sprintf(
138
+ '<li class="jetpack-recipe-difficulty"><strong>%1$s: </strong>%2$s</li>',
139
+ esc_html_x( 'Difficulty', 'recipe', 'jetpack' ),
140
  esc_html( $atts['difficulty'] )
141
  );
142
  }
143
 
144
+ if ( 'false' !== $atts['print'] ) {
145
+ $html .= sprintf(
146
+ '<li class="jetpack-recipe-print"><a href="#">%1$s</a></li>',
147
+ esc_html_x( 'Print', 'recipe', 'jetpack' )
148
  );
149
  }
150
 
151
  $html .= '</ul>';
152
  }
153
 
154
+ // Output the image, if we have one.
155
+ if ( '' !== $atts['image'] ) {
156
+ $html .= sprintf(
157
+ '<img class="jetpack-recipe-image" itemprop="thumbnailUrl" src="%1$s" />',
158
+ esc_url( $atts['image'] )
159
+ );
160
+ }
161
+
162
+ // Output the description, if we have one.
163
+ if ( '' !== $atts['description'] ) {
164
+ $html .= sprintf(
165
+ '<p class="jetpack-recipe-description">%1$s</p>',
166
+ esc_html( $atts['description'] )
167
+ );
168
+ }
169
+
170
  // Print content between codes
171
  $html .= '<div class="jetpack-recipe-content">' . do_shortcode( $content ) . '</div>';
172
 
184
  // Return the HTML block
185
  return $html;
186
  }
187
+
188
+ /**
189
+ * Our [recipe-notes] shortcode.
190
+ * Outputs notes, styled in a div.
191
+ *
192
+ * @return string HTML for recipe notes shortcode.
193
+ */
194
+ static function recipe_notes_shortcode( $atts, $content = '' ) {
195
+ $atts = shortcode_atts( array(
196
+ 'title' => '', //string
197
+ ), $atts, 'recipe-notes' );
198
+
199
+ $html ='';
200
+
201
+ // Print a title if one exists.
202
+ if ( '' !== $atts['title'] ) {
203
+ $html .= '<h4 class="jetpack-recipe-notes-title">' . esc_html( $atts['title'] ) . '</h4>';
204
+ }
205
+
206
+ $html .= '<div class="jetpack-recipe-notes">';
207
+
208
+ // Format content using list functionality, if desired.
209
+ $html .= self::output_list_content( $content, 'notes' );
210
+
211
+ $html .= '</div>';
212
+
213
+ // Sanitize html.
214
+ $html = wp_kses_post( $html );
215
+
216
+ // Return the HTML block.
217
+ return $html;
218
+ }
219
+
220
+ /**
221
+ * Our [recipe-ingredients] shortcode.
222
+ * Outputs notes, styled in a div.
223
+ *
224
+ * @return string HTML for recipe ingredients shortcode.
225
+ */
226
+ static function recipe_ingredients_shortcode( $atts, $content = '' ) {
227
+ $atts = shortcode_atts( array(
228
+ 'title' => esc_html_x( 'Ingredients', 'recipe', 'jetpack' ), //string
229
+ ), $atts, 'recipe-ingredients' );
230
+
231
+ $html = '<div class="jetpack-recipe-ingredients">';
232
+
233
+ // Print a title unless the user has opted to exclude it.
234
+ if ( 'false' !== $atts['title'] ) {
235
+ $html .= '<h4 class="jetpack-recipe-ingredients-title">' . esc_html( $atts['title'] ) . '</h4>';
236
+ }
237
+
238
+ // Format content using list functionality.
239
+ $html .= self::output_list_content( $content, 'ingredients' );
240
+
241
+ $html .= '</div>';
242
+
243
+ // Sanitize html.
244
+ $html = wp_kses_post( $html );
245
+
246
+ // Return the HTML block.
247
+ return $html;
248
+ }
249
+
250
+ /**
251
+ * Reusable function to check for shortened formatting.
252
+ * Basically, users can create lists with the following shorthand:
253
+ * - item one
254
+ * - item two
255
+ * - item three
256
+ * And we'll magically convert it to a list. This has the added benefit
257
+ * of including itemprops for the recipe schema.
258
+ *
259
+ * @return string content formatted as a list item
260
+ */
261
+ static function output_list_content( $content, $type ) {
262
+ $html ='';
263
+
264
+ switch ( $type ) {
265
+ case 'directions' :
266
+ $list_item_replacement = '<li class="jetpack-recipe-directions">${1}</li>';
267
+ $itemprop = ' itemprop="recipeInstructions"';
268
+ $listtype = 'ol';
269
+ break;
270
+ case 'ingredients' :
271
+ $list_item_replacement = '<li class="jetpack-recipe-ingredient">${1}</li>';
272
+ $itemprop = ' itemprop="recipeIngredient"';
273
+ $listtype = 'ul';
274
+ break;
275
+ default:
276
+ $list_item_replacement = '<li class="jetpack-recipe-notes">${1}</li>';
277
+ $itemprop = '';
278
+ $listtype = 'ul';
279
+ }
280
+
281
+ // Check to see if the user is trying to use shortened formatting.
282
+ if (
283
+ strpos( $content, '&#8211;' ) !== false ||
284
+ strpos( $content, '&#8212;' ) !== false ||
285
+ strpos( $content, '-' ) !== false ||
286
+ strpos( $content, '*' ) !== false ||
287
+ strpos( $content, '#' ) !== false ||
288
+ strpos( $content, '–' ) !== false || // ndash
289
+ strpos( $content, '—' ) !== false || // mdash
290
+ preg_match( '/\d+\.\s/', $content )
291
+ ) {
292
+ // Remove breaks and extra whitespace
293
+ $content = str_replace( "<br />\n", "\n", $content );
294
+ $content = trim( $content );
295
+
296
+ $ul_pattern = '/(?:^|\n|\<p\>)+(?:[\-–—]+|\&#8211;|\&#8212;|\*)+\h+(.*)/mi';
297
+ $ol_pattern = '/(?:^|\n|\<p\>)+(?:\d+\.|#+)+\h+(.*)/mi';
298
+
299
+ preg_match_all( $ul_pattern, $content, $ul_matches );
300
+ preg_match_all( $ol_pattern, $content, $ol_matches );
301
+
302
+ if ( 0 !== count( $ul_matches[0] ) || 0 !== count( $ol_matches[0] ) ) {
303
+
304
+ if ( 0 !== count( $ol_matches[0] ) ) {
305
+ $listtype = 'ol';
306
+ $list_item_pattern = $ol_pattern;
307
+ } else {
308
+ $listtype = 'ul';
309
+ $list_item_pattern = $ul_pattern;
310
+ }
311
+ $html .= '<' . $listtype . $itemprop . '>';
312
+ $html .= preg_replace( $list_item_pattern, $list_item_replacement, $content );
313
+ $html .= '</' . $listtype . '>';
314
+
315
+ // Strip out any empty <p> tags and stray </p> tags, because those are just silly.
316
+ $empty_p_pattern = '/(<p>)*\s*<\/p>/mi';
317
+ $html = preg_replace( $empty_p_pattern, '', $html );
318
+ } else {
319
+ $html .= do_shortcode( $content );
320
+ }
321
+ } else {
322
+ $html .= do_shortcode( $content );
323
+ }
324
+
325
+ // Return our formatted content.
326
+ return $html;
327
+ }
328
+
329
+ /**
330
+ * Our [recipe-directions] shortcode.
331
+ * Outputs notes, styled in a div.
332
+ *
333
+ * @return string HTML for recipe notes shortcode.
334
+ */
335
+ static function recipe_directions_shortcode( $atts, $content = '' ) {
336
+ $atts = shortcode_atts( array(
337
+ 'title' => esc_html_x( 'Directions', 'recipe', 'jetpack' ), //string
338
+ ), $atts, 'recipe-directions' );
339
+
340
+ $html = '<div class="jetpack-recipe-directions">';
341
+
342
+ // Print a title unless the user has specified to exclude it.
343
+ if ( 'false' !== $atts['title'] ) {
344
+ $html .= '<h4 class="jetpack-recipe-directions-title">' . esc_html( $atts['title'] ) . '</h4>';
345
+ }
346
+
347
+ // Format content using list functionality.
348
+ $html .= self::output_list_content( $content, 'directions' );
349
+
350
+ $html .= '</div>';
351
+
352
+ // Sanitize html.
353
+ $html = wp_kses_post( $html );
354
+
355
+ // Return the HTML block.
356
+ return $html;
357
+ }
358
+
359
+ /**
360
+ * Use $themecolors array to style the Recipes shortcode
361
+ *
362
+ * @print style block
363
+ * @return string $style
364
+ */
365
+ function themecolor_styles() {
366
+ global $themecolors;
367
+ $style = '';
368
+
369
+ if ( isset( $themecolors ) ) {
370
+ $style .= '.jetpack-recipe { border-color: #' . esc_attr( $themecolors['border'] ) . '; }';
371
+ $style .= '.jetpack-recipe-title { border-bottom-color: #' . esc_attr( $themecolors['link'] ) . '; }';
372
+ }
373
+
374
+ return $style;
375
+ }
376
+
377
  }
378
 
379
  new Jetpack_Recipes();
modules/shortcodes/twitter-timeline.php CHANGED
@@ -1,29 +1,42 @@
1
  <?php
2
  add_shortcode( 'twitter-timeline', 'twitter_timeline_shortcode' );
3
 
4
- function twitter_timeline_shortcode( $attr ) {
5
-
6
  $default_atts = array(
7
  'username' => '',
8
  'id' => '',
9
- 'height' => '282',
10
  'width' => '450',
 
11
  );
12
 
13
- $attr = shortcode_atts( $default_atts, $attr, 'twitter-timeline' );
14
 
15
- $attr['username'] = preg_replace( '/[^A-Za-z0-9_]+/', '', $attr['username'] );
16
 
17
- if ( empty( $attr['username'] ) ) {
18
- return '<!-- ' . __( 'Invalid Twitter Timeline username', 'jetpack' ) . ' -->';
19
  }
20
 
21
- if ( ! is_numeric( $attr['id'] ) ) {
22
- return '<!-- ' . __( 'Invalid Twitter Timeline id', 'jetpack' ) . ' -->';
 
 
 
 
 
23
  }
 
 
 
 
 
 
 
 
 
 
24
 
25
- $tweets_by = sprintf( __( 'Tweets by @%s', 'jetpack' ), $attr['username'] );
26
- $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>';
27
 
28
  wp_enqueue_script( 'jetpack-twitter-timeline' );
29
 
1
  <?php
2
  add_shortcode( 'twitter-timeline', 'twitter_timeline_shortcode' );
3
 
4
+ function twitter_timeline_shortcode( $atts ) {
 
5
  $default_atts = array(
6
  'username' => '',
7
  'id' => '',
 
8
  'width' => '450',
9
+ 'height' => '282',
10
  );
11
 
12
+ $atts = shortcode_atts( $default_atts, $atts, 'twitter-timeline' );
13
 
14
+ $atts['username'] = preg_replace( '/[^A-Za-z0-9_]+/', '', $atts['username'] );
15
 
16
+ if ( empty( $atts['username'] ) && ! is_numeric( $atts['id'] ) ) {
17
+ return '<!-- ' . __( 'Must specify Twitter Timeline id or username.', 'jetpack' ) . ' -->';
18
  }
19
 
20
+ $output = '<a class="twitter-timeline"';
21
+
22
+ if ( is_numeric( $atts['width'] ) ) {
23
+ $output .= ' data-width="' . esc_attr( $atts['width'] ) . '"';
24
+ }
25
+ if ( is_numeric( $atts['height'] ) ) {
26
+ $output .= ' data-height="' . esc_attr( $atts['height'] ) . '"';
27
  }
28
+ if ( is_numeric( $atts['id'] ) ) {
29
+ $output .= ' data-widget-id="' . esc_attr( $atts['id'] ) . '"';
30
+ }
31
+ if ( ! empty( $atts['username'] ) ) {
32
+ $output .= ' href="' . esc_url( 'https://twitter.com/' . $atts['username'] ) . '"';
33
+ }
34
+
35
+ $output .= '>';
36
+
37
+ $output .= sprintf( __( 'Tweets by @%s', 'jetpack' ), $atts['username'] );
38
 
39
+ $output .= '</a>';
 
40
 
41
  wp_enqueue_script( 'jetpack-twitter-timeline' );
42
 
modules/shortcodes/untappd-menu.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Untappd Shortcodes
4
+ * @author kraftbj
5
+ *
6
+ * [untappd-menu location="123" theme="123"]
7
+ * @since 4.1.0
8
+ * @param location int Location ID for the Untappd venue. Required.
9
+ * @param theme int Theme ID for the Untappd menu. Required.
10
+ */
11
+
12
+ class Jetpack_Untappd {
13
+
14
+ function __construct() {
15
+ add_action( 'init', array( $this, 'action_init' ) );
16
+ }
17
+
18
+ function action_init() {
19
+ add_shortcode( 'untappd-menu', array( $this, 'menu_shortcode' ) );
20
+ }
21
+
22
+ /**
23
+ * [untappd-menu] shortcode.
24
+ *
25
+ */
26
+ static function menu_shortcode( $atts, $content = '' ) {
27
+ // Let's bail if we don't have location or theme.
28
+ if ( ! isset( $atts['location'] ) || ! isset( $atts['theme'] ) ) {
29
+ if ( current_user_can( 'edit_posts') ){
30
+ return __( 'No location or theme ID provided in the untappd-menu shortcode.', 'jetpack' );
31
+ }
32
+ return;
33
+ }
34
+
35
+ // Let's apply some defaults.
36
+ $atts = shortcode_atts( array(
37
+ 'location' => '',
38
+ 'theme' => '',
39
+ ), $atts, 'untappd-menu' );
40
+
41
+ // We're going to clean the user input.
42
+ $atts = array_map( 'absint', $atts );
43
+
44
+ if ( $atts['location'] < 1 || $atts['theme'] < 1 ){
45
+ return;
46
+ }
47
+
48
+ static $untappd_menu = 1;
49
+
50
+ $html = '<div id="menu-container-untappd-' . $untappd_menu . '" class="untappd-menu"></div>';
51
+ $html .= '<script type="text/javascript">' . PHP_EOL;
52
+ $html .= '!function(e,n){var t=document.createElement("script"),a=document.getElementsByTagName("script")[0];' . PHP_EOL;
53
+ $html .= 't.async=1,a.parentNode.insertBefore(t,a),t.onload=t.onreadystatechange=function(e,a){' . PHP_EOL;
54
+ $html .= '(a||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t=void 0,a||n&&n())},' . PHP_EOL;
55
+ $html .= 't.src=e}("https://embed-menu-preloader.untappdapi.com/embed-menu-preloader.min.js",function(){' . PHP_EOL;
56
+ $html .= 'PreloadEmbedMenu( "menu-container-untappd-' . $untappd_menu . '",' . $atts["location"] . ',' . $atts["theme"] . ' )});' . PHP_EOL;
57
+ $html .= '</script>';
58
+
59
+ $untappd_menu++;
60
+
61
+ return $html;
62
+ }
63
+ }
64
+
65
+ new Jetpack_Untappd();
modules/shortcodes/videopress.php CHANGED
@@ -12,11 +12,6 @@ if ( ! Jetpack::is_module_active( 'videopress' ) ) {
12
  '//v0.wordpress.com',
13
  ) );
14
 
15
- /**
16
- * We won't have any videos less than sixty pixels wide. That would be silly.
17
- */
18
- define( 'VIDEOPRESS_MIN_WIDTH', 60 );
19
-
20
  include_once JETPACK__PLUGIN_DIR . 'modules/videopress/utility-functions.php';
21
  include_once JETPACK__PLUGIN_DIR . 'modules/videopress/shortcode.php';
22
 
12
  '//v0.wordpress.com',
13
  ) );
14
 
 
 
 
 
 
15
  include_once JETPACK__PLUGIN_DIR . 'modules/videopress/utility-functions.php';
16
  include_once JETPACK__PLUGIN_DIR . 'modules/videopress/shortcode.php';
17
 
modules/sitemaps/sitemaps.php CHANGED
@@ -169,8 +169,15 @@ function jetpack_sitemap_namespaces() {
169
  * @return string
170
  */
171
  function jetpack_sitemap_initstr( $charset ) {
 
172
  // URL to XSLT
173
- $xsl = get_option( 'permalink_structure' ) ? home_url( '/sitemap.xsl' ) : home_url( '/?jetpack-sitemap-xsl=true' );
 
 
 
 
 
 
174
 
175
  $initstr = '<?xml version="1.0" encoding="' . $charset . '"?>' . "\n";
176
  $initstr .= '<?xml-stylesheet type="text/xsl" href="' . esc_url( $xsl ) . '"?>' . "\n";
@@ -241,7 +248,7 @@ function jetpack_print_news_sitemap_xsl() {
241
  * @link http://sitemaps.org/protocol.php Sitemaps.org protocol.
242
  */
243
  function jetpack_print_sitemap() {
244
- global $wpdb;
245
 
246
  $xml = get_transient( 'jetpack_sitemap' );
247
 
@@ -291,6 +298,7 @@ function jetpack_print_sitemap() {
291
  unset( $initstr );
292
  $latest_mod = '';
293
  foreach ( $posts as $post ) {
 
294
 
295
  /**
296
  * Filter condition to allow skipping specific posts in sitemap.
@@ -397,6 +405,7 @@ function jetpack_print_sitemap() {
397
  jetpack_sitemap_array_to_simplexml( array( 'url' => $url_node ), $tree );
398
  unset( $url );
399
  }
 
400
  $blog_home = array(
401
  'loc' => esc_url( get_option( 'home' ) ),
402
  'changefreq' => 'daily',
@@ -459,7 +468,7 @@ function jetpack_print_news_sitemap() {
459
  die();
460
  }
461
 
462
- global $wpdb;
463
 
464
  /**
465
  * Filter post types to be included in news sitemap.
@@ -532,6 +541,7 @@ function jetpack_print_news_sitemap() {
532
  <?php
533
  $posts = $wpdb->get_results( $query );
534
  foreach ( $posts as $post ):
 
535
 
536
  /**
537
  * Filter condition to allow skipping specific posts in news sitemap.
@@ -584,6 +594,7 @@ function jetpack_print_news_sitemap() {
584
 
585
  jetpack_print_sitemap_item( $url );
586
  endforeach;
 
587
  ?>
588
  </urlset>
589
  <?php
@@ -605,11 +616,16 @@ function jetpack_print_news_sitemap() {
605
  * @return string Sitemap URL.
606
  */
607
  function jetpack_sitemap_uri() {
608
- if ( get_option( 'permalink_structure' ) ) {
 
 
 
 
609
  $sitemap_url = home_url( '/sitemap.xml' );
610
  } else {
611
  $sitemap_url = home_url( '/?jetpack-sitemap=true' );
612
  }
 
613
  /**
614
  * Filter sitemap URL relative to home URL.
615
  *
@@ -628,11 +644,16 @@ function jetpack_sitemap_uri() {
628
  * @module sitemaps
629
  */
630
  function jetpack_news_sitemap_uri() {
631
- if ( get_option( 'permalink_structure' ) ) {
 
 
 
 
632
  $news_sitemap_url = home_url( '/news-sitemap.xml' );
633
  } else {
634
  $news_sitemap_url = home_url( '/?jetpack-news-sitemap=true' );
635
  }
 
636
  /**
637
  * Filter news sitemap URL relative to home URL.
638
  *
@@ -758,4 +779,4 @@ function jetpack_sitemap_initialize() {
758
  }
759
 
760
  // Initialize sitemaps once themes can filter the initialization.
761
- add_action( 'after_setup_theme', 'jetpack_sitemap_initialize' );
169
  * @return string
170
  */
171
  function jetpack_sitemap_initstr( $charset ) {
172
+ global $wp_rewrite;
173
  // URL to XSLT
174
+ if ( $wp_rewrite->using_index_permalinks() ) {
175
+ $xsl = home_url( '/index.php/sitemap.xsl' );
176
+ } else if ( $wp_rewrite->using_permalinks() ) {
177
+ $xsl = home_url( '/sitemap.xsl' );
178
+ } else {
179
+ $xsl = home_url( '/?jetpack-sitemap-xsl=true' );
180
+ }
181
 
182
  $initstr = '<?xml version="1.0" encoding="' . $charset . '"?>' . "\n";
183
  $initstr .= '<?xml-stylesheet type="text/xsl" href="' . esc_url( $xsl ) . '"?>' . "\n";
248
  * @link http://sitemaps.org/protocol.php Sitemaps.org protocol.
249
  */
250
  function jetpack_print_sitemap() {
251
+ global $wpdb, $post;
252
 
253
  $xml = get_transient( 'jetpack_sitemap' );
254
 
298
  unset( $initstr );
299
  $latest_mod = '';
300
  foreach ( $posts as $post ) {
301
+ setup_postdata( $post );
302
 
303
  /**
304
  * Filter condition to allow skipping specific posts in sitemap.
405
  jetpack_sitemap_array_to_simplexml( array( 'url' => $url_node ), $tree );
406
  unset( $url );
407
  }
408
+ wp_reset_postdata();
409
  $blog_home = array(
410
  'loc' => esc_url( get_option( 'home' ) ),
411
  'changefreq' => 'daily',
468
  die();
469
  }
470
 
471
+ global $wpdb, $post;
472
 
473
  /**
474
  * Filter post types to be included in news sitemap.
541
  <?php
542
  $posts = $wpdb->get_results( $query );
543
  foreach ( $posts as $post ):
544
+ setup_postdata( $post );
545
 
546
  /**
547
  * Filter condition to allow skipping specific posts in news sitemap.
594
 
595
  jetpack_print_sitemap_item( $url );
596
  endforeach;
597
+ wp_reset_postdata();
598
  ?>
599
  </urlset>
600
  <?php
616
  * @return string Sitemap URL.
617
  */
618
  function jetpack_sitemap_uri() {
619
+ global $wp_rewrite;
620
+
621
+ if ( $wp_rewrite->using_index_permalinks() ) {
622
+ $sitemap_url = home_url( '/index.php/sitemap.xml' );
623
+ } else if ( $wp_rewrite->using_permalinks() ) {
624
  $sitemap_url = home_url( '/sitemap.xml' );
625
  } else {
626
  $sitemap_url = home_url( '/?jetpack-sitemap=true' );
627
  }
628
+
629
  /**
630
  * Filter sitemap URL relative to home URL.
631
  *
644
  * @module sitemaps
645
  */
646
  function jetpack_news_sitemap_uri() {
647
+ global $wp_rewrite;
648
+
649
+ if ( $wp_rewrite->using_index_permalinks() ) {
650
+ $news_sitemap_url = home_url( '/index.php/news-sitemap.xml' );
651
+ } else if ( $wp_rewrite->using_permalinks() ) {
652
  $news_sitemap_url = home_url( '/news-sitemap.xml' );
653
  } else {
654
  $news_sitemap_url = home_url( '/?jetpack-news-sitemap=true' );
655
  }
656
+
657
  /**
658
  * Filter news sitemap URL relative to home URL.
659
  *
779
  }
780
 
781
  // Initialize sitemaps once themes can filter the initialization.
782
+ add_action( 'after_setup_theme', 'jetpack_sitemap_initialize' );
modules/sso.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
 
3
  /**
4
  * Module Name: Single Sign On
@@ -21,32 +22,20 @@ class Jetpack_SSO {
21
 
22
  self::$instance = $this;
23
 
24
- add_action( 'admin_init', array( $this, 'admin_init' ) );
25
- add_action( 'admin_init', array( $this, 'register_settings' ) );
26
- add_action( 'login_init', array( $this, 'login_init' ) );
27
- add_action( 'delete_user', array( $this, 'delete_connection_for_user' ) );
28
  add_filter( 'jetpack_xmlrpc_methods', array( $this, 'xmlrpc_methods' ) );
29
- add_action( 'init', array( $this, 'maybe_logout_user' ), 5 );
30
  add_action( 'jetpack_modules_loaded', array( $this, 'module_configure_button' ) );
 
 
 
 
31
 
32
  // Adding this action so that on login_init, the action won't be sanitized out of the $action global.
33
  add_action( 'login_form_jetpack-sso', '__return_true' );
34
-
35
- if (
36
- $this->should_hide_login_form() &&
37
- /**
38
- * Filter the display of the disclaimer message appearing when default WordPress login form is disabled.
39
- *
40
- * @module sso
41
- *
42
- * @since 2.8.0
43
- *
44
- * @param bool true Should the disclaimer be displayed. Default to true.
45
- */
46
- apply_filters( 'jetpack_sso_display_disclaimer', true )
47
- ) {
48
- add_action( 'login_message', array( $this, 'msg_login_by_jetpack' ) );
49
- }
50
  }
51
 
52
  /**
@@ -56,8 +45,9 @@ class Jetpack_SSO {
56
  * @return Jetpack_SSO
57
  **/
58
  public static function get_instance() {
59
- if( !is_null( self::$instance ) )
60
  return self::$instance;
 
61
 
62
  return self::$instance = new Jetpack_SSO;
63
  }
@@ -72,10 +62,7 @@ class Jetpack_SSO {
72
  Jetpack::module_configuration_screen( __FILE__, array( __CLASS__, 'module_configuration_screen' ) );
73
  }
74
 
75
- public static function module_configuration_load() {
76
- // wp_safe_redirect( admin_url( 'options-general.php#configure-sso' ) );
77
- // exit;
78
- }
79
 
80
  public static function module_configuration_head() {}
81
 
@@ -89,6 +76,28 @@ class Jetpack_SSO {
89
  <?php
90
  }
91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  /**
93
  * If jetpack_force_logout == 1 in current user meta the user will be forced
94
  * to logout and reauthenticate with the site.
@@ -96,11 +105,12 @@ class Jetpack_SSO {
96
  public function maybe_logout_user() {
97
  global $current_user;
98
 
99
- if( 1 == $current_user->jetpack_force_logout ) {
100
  delete_user_meta( $current_user->ID, 'jetpack_force_logout' );
101
  self::delete_connection_for_user( $current_user->ID );
102
  wp_logout();
103
  wp_safe_redirect( wp_login_url() );
 
104
  }
105
  }
106
 
@@ -124,14 +134,13 @@ class Jetpack_SSO {
124
  $user_query = new WP_User_Query(
125
  array(
126
  'meta_key' => 'wpcom_user_id',
127
- 'meta_value' => $user_id
128
  )
129
  );
130
  $user = $user_query->get_results();
131
  $user = $user[0];
132
 
133
-
134
- if( $user instanceof WP_User ) {
135
  $user = wp_set_current_user( $user->ID );
136
  update_user_meta( $user->ID, 'jetpack_force_logout', '1' );
137
  self::delete_connection_for_user( $user->ID );
@@ -140,6 +149,70 @@ class Jetpack_SSO {
140
  return false;
141
  }
142
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  /**
144
  * Adds settings fields to Settings > General > Single Sign On that allows users to
145
  * turn off the login form on wp-login.php
@@ -155,26 +228,6 @@ class Jetpack_SSO {
155
  'jetpack-sso'
156
  );
157
 
158
- /*
159
- * Settings > General > Single Sign On
160
- * Checkbox for Remove default login form
161
- */
162
- /* Hide in 2.9
163
- register_setting(
164
- 'general',
165
- 'jetpack_sso_remove_login_form',
166
- array( $this, 'validate_settings_remove_login_form_checkbox' )
167
- );
168
-
169
- add_settings_field(
170
- 'jetpack_sso_remove_login_form',
171
- __( 'Remove default login form?' , 'jetpack' ),
172
- array( $this, 'render_remove_login_form_checkbox' ),
173
- 'general',
174
- 'jetpack_sso_settings'
175
- );
176
- */
177
-
178
  /*
179
  * Settings > General > Single Sign On
180
  * Require two step authentication
@@ -193,7 +246,6 @@ class Jetpack_SSO {
193
  'jetpack_sso_settings'
194
  );
195
 
196
-
197
  /*
198
  * Settings > General > Single Sign On
199
  */
@@ -219,13 +271,17 @@ class Jetpack_SSO {
219
  * @since 2.7
220
  **/
221
  public function render_require_two_step() {
222
- /** This filter is documented in modules/sso.php */
223
- $require_two_step = 1 == apply_filters( 'jetpack_sso_require_two_step', get_option( 'jetpack_sso_require_two_step' ) );
224
- $disabled = $require_two_step ? ' disabled="disabled"' : '';
225
- echo '<label>';
226
- echo '<input type="checkbox" name="jetpack_sso_require_two_step" ' . checked( $require_two_step, true, false ) . "$disabled>";
227
- esc_html_e( 'Require Two-Step Authentication' , 'jetpack' );
228
- echo '</label>';
 
 
 
 
229
  }
230
 
231
  /**
@@ -245,12 +301,17 @@ class Jetpack_SSO {
245
  * @since 2.9
246
  **/
247
  public function render_match_by_email() {
248
- $match_by_email = 1 == $this->match_by_email();
249
- $disabled = $match_by_email ? ' disabled="disabled"' : '';
250
- echo '<label>';
251
- echo '<input type="checkbox" name="jetpack_sso_match_by_email"' . checked( $match_by_email, true, false ) . "$disabled>";
252
- esc_html_e( 'Match by Email', 'jetpack' );
253
- echo '</label>';
 
 
 
 
 
254
  }
255
 
256
  /**
@@ -263,46 +324,6 @@ class Jetpack_SSO {
263
  return ( ! empty( $input ) ) ? 1 : 0;
264
  }
265
 
266
- /**
267
- * Builds the display for the checkbox allowing users to remove the default
268
- * WordPress login form from wp-login.php. Displays in Settings > General
269
- *
270
- * @since 2.7
271
- **/
272
- public function render_remove_login_form_checkbox() {
273
- if( $this->is_user_connected( get_current_user_id() ) ) {
274
- echo '<a name="configure-sso"></a>';
275
- echo '<input type="checkbox" name="jetpack_sso_remove_login_form[remove_login_form]" ' . checked( 1 == get_option( 'jetpack_sso_remove_login_form' ), true, false ) . '>';
276
- echo '<p class="description">Removes default login form and disallows login via POST</p>';
277
- } else {
278
- echo 'Your account must be connected to WordPress.com before disabling the login form.';
279
- echo '<br/>' . $this->button();
280
- }
281
- }
282
-
283
- /**
284
- * Validate settings input from Settings > General
285
- *
286
- * @since 2.7
287
- * @return boolean
288
- **/
289
- public function validate_settings_remove_login_form_checkbox( $input ) {
290
- return ( isset( $input['remove_login_form'] ) )? 1: 0;
291
- }
292
-
293
- /**
294
- * Removes 'Lost your password?' text from the login form if user
295
- * does not want to show the login form
296
- *
297
- * @since 2.7
298
- * @return string
299
- **/
300
- public function remove_lost_password_text( $text ) {
301
- if( 'Lost your password?' == $text )
302
- $text = '';
303
- return $text;
304
- }
305
-
306
  /**
307
  * Checks to determine if the user wants to login on wp-login
308
  *
@@ -318,42 +339,51 @@ class Jetpack_SSO {
318
  $wants_to_login = false;
319
 
320
  // Cover default WordPress behavior
321
- $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
322
 
323
  // And now the exceptions
324
  $action = isset( $_GET['loggedout'] ) ? 'loggedout' : $action;
325
 
326
- if( 'login' == $action ) {
327
  $wants_to_login = true;
328
  }
329
 
330
  return $wants_to_login;
331
  }
332
 
333
- private function bypass_login_forward_wpcom() {
334
- /**
335
- * Redirect the site's log in form to WordPress.com's log in form.
336
- *
337
- * @module sso
338
- *
339
- * @since 3.1.0
340
- *
341
- * @param bool false Should the site's log in form be automatically forwarded to WordPress.com's log in form.
342
- */
343
- return apply_filters( 'jetpack_sso_bypass_login_forward_wpcom', false );
344
- }
345
-
346
  function login_init() {
347
  global $action;
348
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
  /**
350
- * If the user is attempting to logout AND the auto-forward to WordPress.com
351
- * login is set then we need to ensure we do not auto-forward the user and get
352
- * them stuck in an infinite logout loop.
353
- */
354
- if( isset( $_GET['loggedout'] ) && $this->bypass_login_forward_wpcom() ) {
355
- add_filter( 'jetpack_remove_login_form', '__return_true' );
356
- add_filter( 'gettext', array( $this, 'remove_lost_password_text' ) );
357
  }
358
 
359
  /**
@@ -363,48 +393,58 @@ class Jetpack_SSO {
363
  */
364
  if (
365
  $this->wants_to_login()
366
- && $this->bypass_login_forward_wpcom()
367
  ) {
368
  add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
369
  $this->maybe_save_cookie_redirect();
370
- wp_safe_redirect( $this->build_sso_url() );
 
 
 
 
371
  }
372
 
373
  if ( 'login' === $action ) {
374
- wp_enqueue_script( 'jquery' );
375
- wp_enqueue_style( 'genericons' );
376
- add_action( 'login_footer', array( $this, 'login_form' ) );
377
- add_action( 'login_footer', array( $this, 'login_footer' ) );
378
- /*
379
- if ( get_option( 'jetpack_sso_remove_login_form' ) ) {
380
- // Check to see if the user is attempting to login via the default login form.
381
- // If so we need to deny it and forward elsewhere.
382
- if( isset( $_REQUEST['wp-submit'] ) && 'Log In' == $_REQUEST['wp-submit'] ) {
383
- wp_die( 'Login not permitted by this method. ');
384
- }
385
- add_filter( 'gettext', array( $this, 'remove_lost_password_text' ) );
386
- }
387
- */
388
  } elseif ( 'jetpack-sso' === $action ) {
389
  if ( isset( $_GET['result'], $_GET['user_id'], $_GET['sso_nonce'] ) && 'success' == $_GET['result'] ) {
390
  $this->handle_login();
391
- wp_enqueue_script( 'jquery' );
392
- wp_enqueue_style( 'genericons' );
393
- add_action( 'login_footer', array( $this, 'login_form' ) );
394
- add_action( 'login_footer', array( $this, 'login_footer' ) );
395
  } else {
396
  if ( Jetpack::check_identity_crisis() ) {
 
 
 
397
  wp_die( __( "Error: This site's Jetpack connection is currently experiencing problems.", 'jetpack' ) );
398
  } else {
399
  $this->maybe_save_cookie_redirect();
400
  // Is it wiser to just use wp_redirect than do this runaround to wp_safe_redirect?
401
  add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
402
- wp_safe_redirect( $this->build_sso_url() );
 
 
 
 
403
  }
404
  }
405
  }
406
  }
407
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
408
  /**
409
  * Conditionally save the redirect_to url as a cookie.
410
  */
@@ -413,13 +453,13 @@ class Jetpack_SSO {
413
  return new WP_Error( 'headers_sent', __( 'Cannot deal with cookie redirects, as headers are already sent.', 'jetpack' ) );
414
  }
415
 
416
- // If we have something to redirect to
417
  if ( ! empty( $_GET['redirect_to'] ) ) {
 
418
  $url = esc_url_raw( $_GET['redirect_to'] );
419
  setcookie( 'jetpack_sso_redirect_to', $url, time() + HOUR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, false, true );
420
- // Otherwise, if it's already set
421
  } elseif ( ! empty( $_COOKIE['jetpack_sso_redirect_to'] ) ) {
422
- // Purge it.
423
  setcookie( 'jetpack_sso_redirect_to', ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
424
  }
425
 
@@ -431,95 +471,107 @@ class Jetpack_SSO {
431
  }
432
 
433
  /**
434
- * Determine if the login form should be hidden or not
435
- *
436
- * Method is private only because it is only used in this class so far.
437
- * Feel free to change it later
438
- *
439
- * @return bool
440
- **/
441
- private function should_hide_login_form() {
442
- /**
443
- * Remove the default log in form, only leave the WordPress.com log in button.
444
- *
445
- * @module sso
446
- *
447
- * @since 3.1.0
448
- *
449
- * @param bool get_option( 'jetpack_sso_remove_login_form', false ) Should the default log in form be removed. Default to false.
450
- */
451
- return apply_filters( 'jetpack_remove_login_form', get_option( 'jetpack_sso_remove_login_form', false ) );
452
- }
453
-
454
  function login_form() {
455
- $classes = '';
456
-
457
- if( $this->should_hide_login_form() ) {
458
- $classes .= ' forced-sso';
459
  }
460
- echo '<div class="jetpack-sso-wrap' . $classes . '">' . $this->button() . '</div>';
461
- }
462
 
463
- function login_footer() {
464
- $hide_login_form = $this->should_hide_login_form();
 
 
 
 
 
465
  ?>
466
- <style>
467
- #loginform {
468
- overflow: hidden;
469
- padding-bottom: 26px;
470
- }
471
- .jetpack-sso-wrap {
472
- <?php if ( $hide_login_form ) : ?>
473
- text-align: center;
474
- <?php else : ?>
475
- float: right;
476
- <?php endif; ?>
477
- margin: 1em 0 0;
478
- clear: right;
479
- display: block;
480
- }
481
 
482
- <?php if ( $hide_login_form ) : ?>
483
- .forced-sso .jetpack-sso.button {
484
- font-size: 16px;
485
- line-height: 27px;
486
- height: 37px;
487
- padding: 5px 12px 6px 47px;
488
- }
489
- .forced-sso .jetpack-sso.button:before {
490
- font-size: 28px !important;
491
- height: 37px;
492
- padding: 5px 5px 4px;
493
- width: 37px;
494
- }
495
- <?php endif; ?>
496
- </style>
497
- <script>
498
- jQuery(document).ready(function($){
499
- <?php if ( $hide_login_form ) : ?>
500
- $( '#loginform' ).empty();
501
  <?php endif; ?>
502
- $( '#loginform' ).append( $( '.jetpack-sso-wrap' ) );
503
 
504
- var $rememberme = $( '#rememberme' ),
505
- $ssoButton = $( 'a.jetpack-sso.button' );
506
 
507
- $rememberme.on( 'change', function() {
508
- var url = $ssoButton.prop( 'href' ),
509
- isChecked = $rememberme.prop( 'checked' ) ? 1 : 0;
510
 
511
- if ( url.match( /&rememberme=\d/ ) ) {
512
- url = url.replace( /&rememberme=\d/, '&rememberme=' + isChecked );
513
- } else {
514
- url += '&rememberme=' + isChecked;
515
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
516
 
517
- $ssoButton.prop( 'href', url );
518
- } ).change();
 
 
 
 
 
 
 
 
 
 
 
 
519
 
520
- });
521
- </script>
522
- <?php
 
 
 
 
 
 
523
  }
524
 
525
  static function delete_connection_for_user( $user_id ) {
@@ -528,7 +580,7 @@ class Jetpack_SSO {
528
  }
529
  Jetpack::load_xml_rpc_client();
530
  $xml = new Jetpack_IXR_Client( array(
531
- 'user_id' => $user_id
532
  ) );
533
  $xml->query( 'jetpack.sso.removeUser', $wpcom_user_id );
534
 
@@ -536,18 +588,23 @@ class Jetpack_SSO {
536
  return false;
537
  }
538
 
 
 
 
 
 
539
  return $xml->getResponse();
540
  }
541
 
542
  static function request_initial_nonce() {
543
  Jetpack::load_xml_rpc_client();
544
  $xml = new Jetpack_IXR_Client( array(
545
- 'user_id' => get_current_user_id()
546
  ) );
547
  $xml->query( 'jetpack.sso.requestNonce' );
548
 
549
  if ( $xml->isError() ) {
550
- wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
551
  }
552
 
553
  return $xml->getResponse();
@@ -559,21 +616,29 @@ class Jetpack_SSO {
559
  function handle_login() {
560
  $wpcom_nonce = sanitize_key( $_GET['sso_nonce'] );
561
  $wpcom_user_id = (int) $_GET['user_id'];
562
- $result = sanitize_key( $_GET['result'] );
563
 
564
  Jetpack::load_xml_rpc_client();
565
  $xml = new Jetpack_IXR_Client( array(
566
- 'user_id' => get_current_user_id()
567
  ) );
568
  $xml->query( 'jetpack.sso.validateResult', $wpcom_nonce, $wpcom_user_id );
569
 
570
  if ( $xml->isError() ) {
571
- wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
 
 
 
 
 
 
572
  }
573
 
574
  $user_data = $xml->getResponse();
575
 
576
  if ( empty( $user_data ) ) {
 
 
 
577
  wp_die( __( 'Error, invalid response data.', 'jetpack' ) );
578
  }
579
 
@@ -587,46 +652,35 @@ class Jetpack_SSO {
587
  *
588
  * @since 2.6.0
589
  *
590
- * @param object $user_data User login information.
591
  */
592
  do_action( 'jetpack_sso_pre_handle_login', $user_data );
593
 
594
- /**
595
- * Is it required to have 2-step authentication enabled on WordPress.com to use SSO?
596
- *
597
- * @module sso
598
- *
599
- * @since 2.8.0
600
- *
601
- * @param bool get_option( 'jetpack_sso_require_two_step' ) Does SSO require 2-step authentication?
602
- */
603
- $require_two_step = apply_filters( 'jetpack_sso_require_two_step', get_option( 'jetpack_sso_require_two_step' ) );
604
- if( $require_two_step && 0 == (int) $user_data->two_step_enabled ) {
605
  $this->user_data = $user_data;
 
 
 
 
 
606
  /** This filter is documented in core/src/wp-includes/pluggable.php */
607
  do_action( 'wp_login_failed', $user_data->login );
608
- add_action( 'login_message', array( $this, 'error_msg_enable_two_step' ) );
609
  return;
610
  }
611
 
612
- if ( isset( $_GET['state'] ) && ( 0 < strpos( $_GET['state'], '|' ) ) ) {
613
- list( $state, $nonce ) = explode( '|', $_GET['state'] );
614
-
615
- if ( wp_verify_nonce( $nonce, $state ) ) {
616
- if ( 'sso-link-user' == $state ) {
617
- $user = wp_get_current_user();
618
- update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
619
- add_filter( 'login_redirect', array( __CLASS__, 'profile_page_url' ) );
620
- }
621
- } else wp_nonce_ays();
622
- }
623
-
624
- if ( empty( $user ) ) {
625
- $user = $this->get_user_by_wpcom_id( $user_data->ID );
626
  }
627
 
628
  // If we don't have one by wpcom_user_id, try by the email?
629
- if ( empty( $user ) && self::match_by_email() ) {
 
630
  $user = get_user_by( 'email', $user_data->email );
631
  if ( $user ) {
632
  update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
@@ -634,7 +688,7 @@ class Jetpack_SSO {
634
  }
635
 
636
  // If we've still got nothing, create the user.
637
- if ( empty( $user ) && ( get_option( 'users_can_register' ) || self::new_user_override() ) ) {
638
  // If not matching by email we still need to verify the email does not exist
639
  // or this blows up
640
  /**
@@ -642,7 +696,7 @@ class Jetpack_SSO {
642
  * been found in the first pass. If get_user_by( 'email' ) doesn't find the
643
  * user, then we know that email is unused, so it's safe to add.
644
  */
645
- if ( self::match_by_email() || ! get_user_by( 'email', $user_data->email ) ) {
646
  $username = $user_data->login;
647
 
648
  if ( username_exists( $username ) ) {
@@ -653,10 +707,17 @@ class Jetpack_SSO {
653
  while ( username_exists( $username ) ) {
654
  $username = $user_data->login . '_' . $user_data->ID . '_' . mt_rand();
655
  if ( $tries++ >= 5 ) {
 
 
 
656
  wp_die( __( "Error: Couldn't create suitable username.", 'jetpack' ) );
657
  }
658
  }
659
 
 
 
 
 
660
  $password = wp_generate_password( 20 );
661
  $user_id = wp_create_user( $username, $password, $user_data->email );
662
  $user = get_userdata( $user_id );
@@ -670,8 +731,11 @@ class Jetpack_SSO {
670
 
671
  update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
672
  } else {
 
 
 
 
673
  $this->user_data = $user_data;
674
- // do_action( 'wp_login_failed', $user_data->login );
675
  add_action( 'login_message', array( $this, 'error_msg_email_already_exists' ) );
676
  return;
677
  }
@@ -684,13 +748,13 @@ class Jetpack_SSO {
684
  *
685
  * @since 2.6.0
686
  *
687
- * @param array $user WordPress.com User information.
688
- * @param object $user_data User Login information.
689
  */
690
  do_action( 'jetpack_sso_handle_login', $user, $user_data );
691
 
692
  if ( $user ) {
693
- // Cache the user's details, so we can present it back to them on their user screen.
694
  update_user_meta( $user->ID, 'wpcom_user_data', $user_data );
695
 
696
  $remember = false;
@@ -714,7 +778,9 @@ class Jetpack_SSO {
714
  /** This filter is documented in core/src/wp-includes/user.php */
715
  do_action( 'wp_login', $user->user_login, $user );
716
 
717
- $_request_redirect_to = isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
 
 
718
  $redirect_to = user_can( $user, 'edit_posts' ) ? admin_url() : self::profile_page_url();
719
 
720
  // If we have a saved redirect to request in a cookie
@@ -725,6 +791,32 @@ class Jetpack_SSO {
725
  setcookie( 'jetpack_sso_redirect_to', ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
726
  }
727
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
728
  wp_safe_redirect(
729
  /** This filter is documented in core/src/wp-login.php */
730
  apply_filters( 'login_redirect', $redirect_to, $_request_redirect_to, $user )
@@ -732,57 +824,61 @@ class Jetpack_SSO {
732
  exit;
733
  }
734
 
 
 
 
 
 
 
735
  $this->user_data = $user_data;
736
  /** This filter is documented in core/src/wp-includes/pluggable.php */
737
  do_action( 'wp_login_failed', $user_data->login );
738
- add_action( 'login_message', array( $this, 'cant_find_user' ) );
739
  }
740
 
741
  static function profile_page_url() {
742
  return admin_url( 'profile.php' );
743
  }
744
 
745
- static function match_by_email() {
746
- $match_by_email = ( 1 == get_option( 'jetpack_sso_match_by_email', true ) ) ? true: false;
747
- $match_by_email = defined( 'WPCC_MATCH_BY_EMAIL' ) ? WPCC_MATCH_BY_EMAIL : $match_by_email;
748
-
749
- /**
750
- * Link the local account to an account on WordPress.com using the same email address.
751
- *
752
- * @module sso
753
- *
754
- * @since 2.6.0
755
- *
756
- * @param bool $match_by_email Should we link the local account to an account on WordPress.com using the same email address. Default to false.
757
- */
758
- return apply_filters( 'jetpack_sso_match_by_email', $match_by_email );
759
- }
760
-
761
- static function new_user_override() {
762
- $new_user_override = defined( 'WPCC_NEW_USER_OVERRIDE' ) ? WPCC_NEW_USER_OVERRIDE : false;
763
-
764
- /**
765
- * Allow users to register on your site with a WordPress.com account, even though you disallow normal registrations.
766
- *
767
- * @module sso
768
- *
769
- * @since 2.6.0
770
- *
771
- * @param bool $new_user_override Allow users to register on your site with a WordPress.com account. Default to false.
772
- */
773
- return apply_filters( 'jetpack_sso_new_user_override', $new_user_override );
774
- }
775
-
776
  function allowed_redirect_hosts( $hosts ) {
777
  if ( empty( $hosts ) ) {
778
  $hosts = array();
779
  }
780
  $hosts[] = 'wordpress.com';
 
781
 
782
  return array_unique( $hosts );
783
  }
784
 
785
- function button( $args = array() ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
786
  $defaults = array(
787
  'action' => 'jetpack-sso',
788
  );
@@ -790,84 +886,107 @@ class Jetpack_SSO {
790
  $args = wp_parse_args( $args, $defaults );
791
 
792
  if ( ! empty( $_GET['redirect_to'] ) ) {
793
- $args['redirect_to'] = esc_url_raw( $_GET['redirect_to'] );
794
  }
795
 
796
- $url = add_query_arg( $args, wp_login_url() );
 
797
 
798
- $css = "<style>
799
- .jetpack-sso.button {
800
- position: relative;
801
- padding-left: 37px;
802
- }
803
- .jetpack-sso.button:before {
804
- display: block;
805
- box-sizing: border-box;
806
- padding: 7px 0 0;
807
- text-align: center;
808
- position: absolute;
809
- top: -1px;
810
- left: -1px;
811
- border-radius: 2px 0 0 2px;
812
- content: '\\f205';
813
- background: #0074a2;
814
- color: #fff;
815
- -webkit-font-smoothing: antialiased;
816
- width: 30px;
817
- height: 107%;
818
- height: calc( 100% + 2px );
819
- font: normal 22px/1 Genericons !important;
820
- text-shadow: none;
821
- }
822
- @media screen and (min-width: 783px) {
823
- .jetpack-sso.button:before {
824
- padding-top: 3px;
825
- }
826
- }
827
- .jetpack-sso.button:hover {
828
- border: 1px solid #aaa;
829
- }";
830
-
831
- if ( version_compare( $GLOBALS['wp_version'], '3.8-alpha', '<' ) ) {
832
- $css .= "
833
- .jetpack-sso.button:before {
834
- width: 25px;
835
- font-size: 18px !important;
836
- }
837
- ";
838
  }
839
 
840
- $css .= "</style>";
 
 
 
 
 
 
 
 
 
841
 
842
- $button = sprintf( '<a href="%1$s" class="jetpack-sso button">%2$s</a>', esc_url( $url ), esc_html__( 'Log in with WordPress.com', 'jetpack' ) );
843
- return $button . $css;
844
  }
845
 
 
 
 
 
 
 
846
  function build_sso_url( $args = array() ) {
 
847
  $defaults = array(
848
- 'action' => 'jetpack-sso',
849
- 'site_id' => Jetpack_Options::get_option( 'id' ),
850
- 'sso_nonce' => self::request_initial_nonce(),
 
851
  );
852
 
853
- if ( isset( $_GET['state'] ) && check_admin_referer( $_GET['state'] ) ) {
854
- $defaults['state'] = rawurlencode( $_GET['state'] . '|' . $_GET['_wpnonce'] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
855
  }
856
 
 
 
 
 
 
 
 
 
 
857
  $args = wp_parse_args( $args, $defaults );
858
- $url = add_query_arg( $args, 'https://wordpress.com/wp-login.php' );
859
 
860
- return $url;
 
 
 
 
861
  }
862
 
863
  /**
864
- * Determines local user associated with a given WordPress.com user ID.
865
- *
866
- * @since 2.6.0
867
- *
868
- * @param int $wpcom_user_id User ID from WordPress.com
869
- * @return object Local user object if found, null if not.
870
- */
871
  static function get_user_by_wpcom_id( $wpcom_user_id ) {
872
  $user_query = new WP_User_Query( array(
873
  'meta_key' => 'wpcom_user_id',
@@ -888,9 +1007,19 @@ class Jetpack_SSO {
888
  * @return string
889
  **/
890
  public function error_msg_enable_two_step( $message ) {
891
- $err = __( sprintf( 'This site requires two step authentication be enabled for your user account on WordPress.com. Please visit the <a href="%1$s" target="_blank"> Security Settings</a> page to enable two step', 'https://wordpress.com/me/security/two-step' ) , 'jetpack' );
 
 
 
 
 
 
 
 
 
 
892
 
893
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $err );
894
 
895
  return $message;
896
  }
@@ -904,24 +1033,30 @@ class Jetpack_SSO {
904
  * @return string
905
  */
906
  public function error_msg_email_already_exists( $message ) {
907
- $err = __( sprintf( 'You already have an account on this site. Please visit your <a href="%1$s">profile page</a> page to link your account to WordPress.com!', admin_url( 'profile.php' ) ) , 'jetpack' );
 
 
 
 
 
 
 
 
 
908
 
909
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $err );
910
 
911
  return $message;
912
  }
913
 
914
  /**
915
- * Message displayed when the site admin has disabled the default WordPress
916
- * login form in Settings > General > Single Sign On
917
  *
918
- * @since 2.7
919
- * @param string $message
920
  * @return string
921
- **/
922
- public function msg_login_by_jetpack( $message ) {
923
-
924
- $msg = __( sprintf( 'Jetpack authenticates through WordPress.com — to log in, enter your WordPress.com username and password, or <a href="%1$s" target="_blank">visit WordPress.com</a> to create a free account now.', 'http://wordpress.com/signup' ) , 'jetpack' );
925
 
926
  /**
927
  * Filter the message displayed when the default WordPress login form is disabled.
@@ -932,54 +1067,112 @@ class Jetpack_SSO {
932
  *
933
  * @param string $msg Disclaimer when default WordPress login form is disabled.
934
  */
935
- $msg = apply_filters( 'jetpack_sso_disclaimer_message', $msg );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
936
 
937
  $message .= sprintf( '<p class="message">%s</p>', $msg );
938
  return $message;
939
  }
940
 
941
  /**
942
- * Error message displayed on the login form when the user attempts
943
- * to post to the login form and it is disabled.
944
  *
945
- * @since 2.8
946
  * @param string $message
947
- * @param string
948
- **/
949
- public function error_msg_login_method_not_allowed( $message ) {
950
- $err = __( 'Login method not allowed' , 'jetpack' );
951
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $err );
 
 
 
952
 
953
  return $message;
954
  }
955
- function cant_find_user( $message ) {
956
- if ( self::match_by_email() ) {
957
- $err_format = __( 'We couldn\'t find an account with the email <strong><code>%1$s</code></strong> to log you in with. If you already have an account on <strong>%2$s</strong>, please make sure that <strong><code>%1$s</code></strong> is configured as the email address, or that you have connected to WordPress.com on your profile page.', 'jetpack' );
958
- } else {
959
- $err_format = __( 'We couldn\'t find any account on <strong>%2$s</strong> that is linked to your WordPress.com account to log you in with. If you already have an account on <strong>%2$s</strong>, please make sure that you have connected to WordPress.com on your profile page.', 'jetpack' );
 
 
 
 
 
 
960
  }
961
- $err = sprintf( $err_format, $this->user_data->email, get_bloginfo( 'name' ) );
962
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $err );
963
- return $message;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
964
  }
965
 
966
  /**
967
- * Deal with user connections...
 
968
  */
969
- function admin_init() {
970
- add_action( 'show_user_profile', array( $this, 'edit_profile_fields' ) ); // For their own profile
971
- add_action( 'edit_user_profile', array( $this, 'edit_profile_fields' ) ); // For folks editing others profiles
 
972
 
973
- if ( isset( $_GET['jetpack_sso'] ) && 'purge' == $_GET['jetpack_sso'] && check_admin_referer( 'jetpack_sso_purge' ) ) {
974
- $user = wp_get_current_user();
975
- // Remove the connection on the wpcom end.
976
- self::delete_connection_for_user( $user->ID );
977
- // Clear it locally.
978
- delete_user_meta( $user->ID, 'wpcom_user_id' );
979
- delete_user_meta( $user->ID, 'wpcom_user_data' );
980
- // Forward back to the profile page.
981
- wp_safe_redirect( remove_query_arg( array( 'jetpack_sso', '_wpnonce' ) ) );
982
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
983
  }
984
 
985
  /**
@@ -990,7 +1183,7 @@ class Jetpack_SSO {
990
  * @return boolean
991
  **/
992
  public function is_user_connected( $user_id ) {
993
- return $this->get_user_data( $user_id ) ;
994
  }
995
 
996
  /**
@@ -1003,95 +1196,6 @@ class Jetpack_SSO {
1003
  public function get_user_data( $user_id ) {
1004
  return get_user_meta( $user_id, 'wpcom_user_data', true );
1005
  }
1006
-
1007
- function edit_profile_fields( $user ) {
1008
- wp_enqueue_style( 'genericons' );
1009
- ?>
1010
-
1011
- <h3 id="single-sign-on"><?php _e( 'Single Sign On', 'jetpack' ); ?></h3>
1012
- <p><?php _e( 'Connecting with Single Sign On enables you to log in via your WordPress.com account.', 'jetpack' ); ?></p>
1013
-
1014
- <?php if ( $this->is_user_connected( $user->ID ) ) : /* If the user is currently connected... */ ?>
1015
- <?php $user_data = $this->get_user_data( $user->ID ); ?>
1016
- <table class="form-table jetpack-sso-form-table">
1017
- <tbody>
1018
- <tr>
1019
- <td>
1020
- <div class="profile-card">
1021
- <?php echo get_avatar( $user_data->email ); ?>
1022
- <p class="connected"><strong><?php _e( 'Connected', 'jetpack' ); ?></strong></p>
1023
- <p><?php echo esc_html( $user_data->login ); ?></p>
1024
- <span class="two_step">
1025
- <?php
1026
- if( $user_data->two_step_enabled ) {
1027
- ?> <p class="enabled"><a href="https://wordpress.com/me/security/two-step" target="_blank"><?php _e( 'Two-Step Authentication Enabled', 'jetpack' ); ?></a></p> <?php
1028
- } else {
1029
- ?> <p class="disabled"><a href="https://wordpress.com/me/security/two-step" target="_blank"><?php _e( 'Two-Step Authentication Disabled', 'jetpack' ); ?></a></p> <?php
1030
- }
1031
- ?>
1032
- </span>
1033
-
1034
- </div>
1035
- <p><a class="button button-secondary" href="<?php echo esc_url( wp_nonce_url( add_query_arg( 'jetpack_sso', 'purge' ), 'jetpack_sso_purge' ) ); ?>"><?php _e( 'Unlink This Account', 'jetpack' ); ?></a></p>
1036
- </td>
1037
- </tr>
1038
- </tbody>
1039
- </table>
1040
-
1041
- <style>
1042
- .jetpack-sso-form-table td {
1043
- padding-left: 0;
1044
- }
1045
-
1046
- .jetpack-sso-form-table .profile-card {
1047
- padding: 10px;
1048
- background: #fff;
1049
- overflow: hidden;
1050
- max-width: 400px;
1051
- box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.1 );
1052
- margin-bottom: 1em;
1053
- }
1054
-
1055
- .jetpack-sso-form-table .profile-card img {
1056
- float: left;
1057
- margin-right: 1em;
1058
- width: 48px;
1059
- height: 48px;
1060
- }
1061
-
1062
- .jetpack-sso-form-table .profile-card .connected {
1063
- float: right;
1064
- margin-right: 0.5em;
1065
- color: #0a0;
1066
- }
1067
-
1068
- .jetpack-sso-form-table .profile-card p {
1069
- margin-top: 0.7em;
1070
- font-size: 1.2em;
1071
- }
1072
-
1073
- .jetpack-sso-form-table .profile-card .two_step .enabled a {
1074
- float: right;
1075
- color: #0a0;
1076
- }
1077
-
1078
- .jetpack-sso-form-table .profile-card .two_step .disabled a {
1079
- float: right;
1080
- color: red;
1081
- }
1082
- </style>
1083
-
1084
- <?php elseif ( get_current_user_id() == $user->ID && Jetpack::is_user_connected( $user->ID ) ) : ?>
1085
-
1086
- <?php echo $this->button( 'state=sso-link-user&_wpnonce=' . wp_create_nonce('sso-link-user') ); // update ?>
1087
-
1088
- <?php else : ?>
1089
-
1090
- <p><?php esc_html_e( wptexturize( __( "If you don't have a WordPress.com account yet, you can sign up for free in just a few seconds.", 'jetpack' ) ) ); ?></p>
1091
- <a href="<?php echo Jetpack::init()->build_connect_url( false, get_edit_profile_url( get_current_user_id() ) . '#single-sign-on' ); ?>" class="button button-connector" id="wpcom-connect"><?php esc_html_e( 'Link account with WordPress.com', 'jetpack' ); ?></a>
1092
-
1093
- <?php endif;
1094
- }
1095
  }
1096
 
1097
  Jetpack_SSO::get_instance();
1
  <?php
2
+ require_once( JETPACK__PLUGIN_DIR . 'modules/sso/class.jetpack-sso-helpers.php' );
3
 
4
  /**
5
  * Module Name: Single Sign On
22
 
23
  self::$instance = $this;
24
 
25
+ add_action( 'admin_init', array( $this, 'maybe_authorize_user_after_sso' ), 1 );
26
+ add_action( 'admin_init', array( $this, 'register_settings' ) );
27
+ add_action( 'login_init', array( $this, 'login_init' ) );
28
+ add_action( 'delete_user', array( $this, 'delete_connection_for_user' ) );
29
  add_filter( 'jetpack_xmlrpc_methods', array( $this, 'xmlrpc_methods' ) );
30
+ add_action( 'init', array( $this, 'maybe_logout_user' ), 5 );
31
  add_action( 'jetpack_modules_loaded', array( $this, 'module_configure_button' ) );
32
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
33
+ add_action( 'login_form_logout', array( $this, 'store_wpcom_profile_cookies_on_logout' ) );
34
+ add_action( 'wp_login', array( 'Jetpack_SSO', 'clear_wpcom_profile_cookies' ) );
35
+ add_action( 'jetpack_unlinked_user', array( $this, 'delete_connection_for_user') );
36
 
37
  // Adding this action so that on login_init, the action won't be sanitized out of the $action global.
38
  add_action( 'login_form_jetpack-sso', '__return_true' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  }
40
 
41
  /**
45
  * @return Jetpack_SSO
46
  **/
47
  public static function get_instance() {
48
+ if ( ! is_null( self::$instance ) ) {
49
  return self::$instance;
50
+ }
51
 
52
  return self::$instance = new Jetpack_SSO;
53
  }
62
  Jetpack::module_configuration_screen( __FILE__, array( __CLASS__, 'module_configuration_screen' ) );
63
  }
64
 
65
+ public static function module_configuration_load() {}
 
 
 
66
 
67
  public static function module_configuration_head() {}
68
 
76
  <?php
77
  }
78
 
79
+
80
+ /**
81
+ * When the default login form is hidden, this method is called on the 'authenticate' filter with a priority of 30.
82
+ * This method disables the ability to submit the default login form.
83
+ *
84
+ * @param $user
85
+ *
86
+ * @return WP_Error
87
+ */
88
+ public function disable_default_login_form( $user ) {
89
+ if ( is_wp_error( $user ) ) {
90
+ return $user;
91
+ }
92
+
93
+ /**
94
+ * Since we're returning an error that will be shown as a red notice, let's remove the
95
+ * informational "blue" notice.
96
+ */
97
+ remove_filter( 'login_message', array( $this, 'msg_login_by_jetpack' ) );
98
+ return new WP_Error( 'jetpack_sso_required', $this->get_sso_required_message() );
99
+ }
100
+
101
  /**
102
  * If jetpack_force_logout == 1 in current user meta the user will be forced
103
  * to logout and reauthenticate with the site.
105
  public function maybe_logout_user() {
106
  global $current_user;
107
 
108
+ if ( 1 == $current_user->jetpack_force_logout ) {
109
  delete_user_meta( $current_user->ID, 'jetpack_force_logout' );
110
  self::delete_connection_for_user( $current_user->ID );
111
  wp_logout();
112
  wp_safe_redirect( wp_login_url() );
113
+ exit;
114
  }
115
  }
116
 
134
  $user_query = new WP_User_Query(
135
  array(
136
  'meta_key' => 'wpcom_user_id',
137
+ 'meta_value' => $user_id,
138
  )
139
  );
140
  $user = $user_query->get_results();
141
  $user = $user[0];
142
 
143
+ if ( $user instanceof WP_User ) {
 
144
  $user = wp_set_current_user( $user->ID );
145
  update_user_meta( $user->ID, 'jetpack_force_logout', '1' );
146
  self::delete_connection_for_user( $user->ID );
149
  return false;
150
  }
151
 
152
+ /**
153
+ * Enqueues scripts and styles necessary for SSO login.
154
+ */
155
+ public function login_enqueue_scripts() {
156
+ global $action;
157
+
158
+ if ( ! in_array( $action, array( 'jetpack-sso', 'login' ) ) ) {
159
+ return;
160
+ }
161
+
162
+ if ( is_rtl() ) {
163
+ wp_enqueue_style( 'jetpack-sso-login', plugins_url( 'modules/sso/jetpack-sso-login-rtl.css', JETPACK__PLUGIN_FILE ), array( 'login', 'genericons' ), JETPACK__VERSION );
164
+ } else {
165
+ wp_enqueue_style( 'jetpack-sso-login', plugins_url( 'modules/sso/jetpack-sso-login.css', JETPACK__PLUGIN_FILE ), array( 'login', 'genericons' ), JETPACK__VERSION );
166
+ }
167
+
168
+ wp_enqueue_script( 'jetpack-sso-login', plugins_url( 'modules/sso/jetpack-sso-login.js', JETPACK__PLUGIN_FILE ), array( 'jquery' ), JETPACK__VERSION );
169
+ }
170
+
171
+ /**
172
+ * Enqueue styles neceessary for Jetpack SSO on users' profiles
173
+ */
174
+ public function admin_enqueue_scripts() {
175
+ $screen = get_current_screen();
176
+
177
+ if ( empty( $screen ) || ! in_array( $screen->base, array( 'edit-user', 'profile' ) ) ) {
178
+ return;
179
+ }
180
+
181
+ wp_enqueue_style( 'jetpack-sso-profile', plugins_url( 'modules/sso/jetpack-sso-profile.css', JETPACK__PLUGIN_FILE ), array( 'genericons' ), JETPACK__VERSION );
182
+ }
183
+
184
+ /**
185
+ * Adds Jetpack SSO classes to login body
186
+ *
187
+ * @param array $classes Array of classes to add to body tag
188
+ * @return array Array of classes to add to body tag
189
+ */
190
+ public function login_body_class( $classes ) {
191
+ global $action;
192
+
193
+ if ( ! in_array( $action, array( 'jetpack-sso', 'login' ) ) ) {
194
+ return $classes;
195
+ }
196
+
197
+ // Always add the jetpack-sso class so that we can add SSO specific styling even when the SSO form isn't being displayed.
198
+ $classes[] = 'jetpack-sso';
199
+
200
+ /**
201
+ * Should we show the SSO login form?
202
+ *
203
+ * $_GET['jetpack-sso-default-form'] is used to provide a fallback in case JavaScript is not enabled.
204
+ *
205
+ * The default_to_sso_login() method allows us to dynamically decide whether we show the SSO login form or not.
206
+ * The SSO module uses the method to display the default login form if we can not find a user to log in via SSO.
207
+ * But, the method could be filtered by a site admin to always show the default login form if that is preferred.
208
+ */
209
+ if ( empty( $_GET['jetpack-sso-show-default-form'] ) && Jetpack_SSO_Helpers::show_sso_login() ) {
210
+ $classes[] = 'jetpack-sso-form-display';
211
+ }
212
+
213
+ return $classes;
214
+ }
215
+
216
  /**
217
  * Adds settings fields to Settings > General > Single Sign On that allows users to
218
  * turn off the login form on wp-login.php
228
  'jetpack-sso'
229
  );
230
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  /*
232
  * Settings > General > Single Sign On
233
  * Require two step authentication
246
  'jetpack_sso_settings'
247
  );
248
 
 
249
  /*
250
  * Settings > General > Single Sign On
251
  */
271
  * @since 2.7
272
  **/
273
  public function render_require_two_step() {
274
+ ?>
275
+ <label>
276
+ <input
277
+ type="checkbox"
278
+ name="jetpack_sso_require_two_step"
279
+ <?php checked( Jetpack_SSO_Helpers::is_two_step_required() ); ?>
280
+ <?php disabled( Jetpack_SSO_Helpers::is_require_two_step_checkbox_disabled() ); ?>
281
+ >
282
+ <?php esc_html_e( 'Require Two-Step Authentication' , 'jetpack' ); ?>
283
+ </label>
284
+ <?php
285
  }
286
 
287
  /**
301
  * @since 2.9
302
  **/
303
  public function render_match_by_email() {
304
+ ?>
305
+ <label>
306
+ <input
307
+ type="checkbox"
308
+ name="jetpack_sso_match_by_email"
309
+ <?php checked( Jetpack_SSO_Helpers::match_by_email() ); ?>
310
+ <?php disabled( Jetpack_SSO_Helpers::is_match_by_email_checkbox_disabled() ); ?>
311
+ >
312
+ <?php esc_html_e( 'Match by Email', 'jetpack' ); ?>
313
+ </label>
314
+ <?php
315
  }
316
 
317
  /**
324
  return ( ! empty( $input ) ) ? 1 : 0;
325
  }
326
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
327
  /**
328
  * Checks to determine if the user wants to login on wp-login
329
  *
339
  $wants_to_login = false;
340
 
341
  // Cover default WordPress behavior
342
+ $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'login';
343
 
344
  // And now the exceptions
345
  $action = isset( $_GET['loggedout'] ) ? 'loggedout' : $action;
346
 
347
+ if ( 'login' == $action ) {
348
  $wants_to_login = true;
349
  }
350
 
351
  return $wants_to_login;
352
  }
353
 
 
 
 
 
 
 
 
 
 
 
 
 
 
354
  function login_init() {
355
  global $action;
356
 
357
+ if ( Jetpack_SSO_Helpers::should_hide_login_form() ) {
358
+ /**
359
+ * Since the default authenticate filters fire at priority 20 for checking username and password,
360
+ * let's fire at priority 30. wp_authenticate_spam_check is fired at priority 99, but since we return a
361
+ * WP_Error in disable_default_login_form, then we won't trigger spam processing logic.
362
+ */
363
+ add_filter( 'authenticate', array( $this, 'disable_default_login_form' ), 30 );
364
+
365
+ /**
366
+ * Filter the display of the disclaimer message appearing when default WordPress login form is disabled.
367
+ *
368
+ * @module sso
369
+ *
370
+ * @since 2.8.0
371
+ *
372
+ * @param bool true Should the disclaimer be displayed. Default to true.
373
+ */
374
+ $display_sso_disclaimer = apply_filters( 'jetpack_sso_display_disclaimer', true );
375
+ if ( $display_sso_disclaimer ) {
376
+ add_filter( 'login_message', array( $this, 'msg_login_by_jetpack' ) );
377
+ }
378
+ }
379
+
380
  /**
381
+ * If the user is attempting to logout AND the auto-forward to WordPress.com
382
+ * login is set then we need to ensure we do not auto-forward the user and get
383
+ * them stuck in an infinite logout loop.
384
+ */
385
+ if ( isset( $_GET['loggedout'] ) && Jetpack_SSO_Helpers::bypass_login_forward_wpcom() ) {
386
+ add_filter( 'jetpack_remove_login_form', '__return_true' );
 
387
  }
388
 
389
  /**
393
  */
394
  if (
395
  $this->wants_to_login()
396
+ && Jetpack_SSO_Helpers::bypass_login_forward_wpcom()
397
  ) {
398
  add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
399
  $this->maybe_save_cookie_redirect();
400
+ $reauth = ! empty( $_GET['force_reauth'] );
401
+ $sso_url = $this->get_sso_url_or_die( $reauth );
402
+ JetpackTracking::record_user_event( 'sso_login_redirect_bypass_success' );
403
+ wp_safe_redirect( $sso_url );
404
+ exit;
405
  }
406
 
407
  if ( 'login' === $action ) {
408
+ $this->display_sso_login_form();
 
 
 
 
 
 
 
 
 
 
 
 
 
409
  } elseif ( 'jetpack-sso' === $action ) {
410
  if ( isset( $_GET['result'], $_GET['user_id'], $_GET['sso_nonce'] ) && 'success' == $_GET['result'] ) {
411
  $this->handle_login();
412
+ $this->display_sso_login_form();
 
 
 
413
  } else {
414
  if ( Jetpack::check_identity_crisis() ) {
415
+ JetpackTracking::record_user_event( 'sso_login_redirect_failed', array(
416
+ 'error_message' => 'identity_crisis'
417
+ ) );
418
  wp_die( __( "Error: This site's Jetpack connection is currently experiencing problems.", 'jetpack' ) );
419
  } else {
420
  $this->maybe_save_cookie_redirect();
421
  // Is it wiser to just use wp_redirect than do this runaround to wp_safe_redirect?
422
  add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
423
+ $reauth = ! empty( $_GET['force_reauth'] );
424
+ $sso_url = $this->get_sso_url_or_die( $reauth );
425
+ JetpackTracking::record_user_event( 'sso_login_redirect_success' );
426
+ wp_safe_redirect( $sso_url );
427
+ exit;
428
  }
429
  }
430
  }
431
  }
432
 
433
+ /**
434
+ * Ensures that we can get a nonce from WordPress.com via XML-RPC before setting
435
+ * up the hooks required to display the SSO form.
436
+ */
437
+ public function display_sso_login_form() {
438
+ $sso_nonce = self::request_initial_nonce();
439
+ if ( is_wp_error( $sso_nonce ) ) {
440
+ return;
441
+ }
442
+
443
+ add_action( 'login_form', array( $this, 'login_form' ) );
444
+ add_filter( 'login_body_class', array( $this, 'login_body_class' ) );
445
+ add_action( 'login_enqueue_scripts', array( $this, 'login_enqueue_scripts' ) );
446
+ }
447
+
448
  /**
449
  * Conditionally save the redirect_to url as a cookie.
450
  */
453
  return new WP_Error( 'headers_sent', __( 'Cannot deal with cookie redirects, as headers are already sent.', 'jetpack' ) );
454
  }
455
 
 
456
  if ( ! empty( $_GET['redirect_to'] ) ) {
457
+ // If we have something to redirect to
458
  $url = esc_url_raw( $_GET['redirect_to'] );
459
  setcookie( 'jetpack_sso_redirect_to', $url, time() + HOUR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, false, true );
460
+
461
  } elseif ( ! empty( $_COOKIE['jetpack_sso_redirect_to'] ) ) {
462
+ // Otherwise, if it's already set, purge it.
463
  setcookie( 'jetpack_sso_redirect_to', ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
464
  }
465
 
471
  }
472
 
473
  /**
474
+ * Outputs the Jetpack SSO button and description as well as the toggle link
475
+ * for switching between Jetpack SSO and default login.
476
+ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
477
  function login_form() {
478
+ $site_name = get_bloginfo( 'name' );
479
+ if ( ! $site_name ) {
480
+ $site_name = get_bloginfo( 'url' );
 
481
  }
 
 
482
 
483
+ $display_name = ! empty( $_COOKIE[ 'jetpack_sso_wpcom_name_' . COOKIEHASH ] )
484
+ ? $_COOKIE[ 'jetpack_sso_wpcom_name_' . COOKIEHASH ]
485
+ : false;
486
+ $gravatar = ! empty( $_COOKIE[ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH ] )
487
+ ? $_COOKIE[ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH ]
488
+ : false;
489
+
490
  ?>
491
+ <div id="jetpack-sso-wrap">
492
+ <?php if ( $display_name && $gravatar ) : ?>
493
+ <div id="jetpack-sso-wrap__user">
494
+ <img width="72" height="72" src="<?php echo esc_html( $gravatar ); ?>" />
495
+
496
+ <h2>
497
+ <?php
498
+ echo wp_kses(
499
+ sprintf( __( 'Log in as <span>%s</span>', 'jetpack' ), esc_html( $display_name ) ),
500
+ array( 'span' => true )
501
+ );
502
+ ?>
503
+ </h2>
504
+ </div>
 
505
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
506
  <?php endif; ?>
 
507
 
 
 
508
 
509
+ <div id="jetpack-sso-wrap__action">
510
+ <?php echo $this->build_sso_button( array(), 'is_primary' ); ?>
 
511
 
512
+ <?php if ( $display_name && $gravatar ) : ?>
513
+ <a rel="nofollow" class="jetpack-sso-wrap__reauth" href="<?php echo esc_url( $this->build_sso_button_url( array( 'force_reauth' => '1' ) ) ); ?>">
514
+ <?php esc_html_e( 'Log in as a different WordPress.com user', 'jetpack' ); ?>
515
+ </a>
516
+ <?php else : ?>
517
+ <p>
518
+ <?php
519
+ echo esc_html(
520
+ sprintf(
521
+ __( 'You can now save time spent logging in by connecting your WordPress.com account to %s.', 'jetpack' ),
522
+ esc_html( $site_name )
523
+ )
524
+ );
525
+ ?>
526
+ </p>
527
+ <?php endif; ?>
528
+ </div>
529
+
530
+ <?php if ( ! Jetpack_SSO_Helpers::should_hide_login_form() ) : ?>
531
+ <div class="jetpack-sso-or">
532
+ <span><?php esc_html_e( 'Or', 'jetpack' ); ?></span>
533
+ </div>
534
+
535
+ <a href="<?php echo add_query_arg( 'jetpack-sso-show-default-form', '1' ); ?>" class="jetpack-sso-toggle wpcom">
536
+ <?php
537
+ esc_html_e( 'Log in with username and password', 'jetpack' )
538
+ ?>
539
+ </a>
540
+
541
+ <a href="<?php echo add_query_arg( 'jetpack-sso-show-default-form', '0' ); ?>" class="jetpack-sso-toggle default">
542
+ <?php
543
+ esc_html_e( 'Log in with WordPress.com', 'jetpack' )
544
+ ?>
545
+ </a>
546
+ <?php endif; ?>
547
+ </div>
548
+ <?php
549
+ }
550
 
551
+ /**
552
+ * Clear the cookies that store the profile information for the last
553
+ * WPCOM user to connect.
554
+ */
555
+ static function clear_wpcom_profile_cookies() {
556
+ if ( isset( $_COOKIE[ 'jetpack_sso_wpcom_name_' . COOKIEHASH ] ) ) {
557
+ setcookie(
558
+ 'jetpack_sso_wpcom_name_' . COOKIEHASH,
559
+ ' ',
560
+ time() - YEAR_IN_SECONDS,
561
+ COOKIEPATH,
562
+ COOKIE_DOMAIN
563
+ );
564
+ }
565
 
566
+ if ( isset( $_COOKIE[ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH ] ) ) {
567
+ setcookie(
568
+ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH,
569
+ ' ',
570
+ time() - YEAR_IN_SECONDS,
571
+ COOKIEPATH,
572
+ COOKIE_DOMAIN
573
+ );
574
+ }
575
  }
576
 
577
  static function delete_connection_for_user( $user_id ) {
580
  }
581
  Jetpack::load_xml_rpc_client();
582
  $xml = new Jetpack_IXR_Client( array(
583
+ 'wpcom_user_id' => $user_id,
584
  ) );
585
  $xml->query( 'jetpack.sso.removeUser', $wpcom_user_id );
586
 
588
  return false;
589
  }
590
 
591
+ // Clean up local data stored for SSO
592
+ delete_user_meta( $user_id, 'wpcom_user_id' );
593
+ delete_user_meta( $user_id, 'wpcom_user_data' );
594
+ self::clear_wpcom_profile_cookies();
595
+
596
  return $xml->getResponse();
597
  }
598
 
599
  static function request_initial_nonce() {
600
  Jetpack::load_xml_rpc_client();
601
  $xml = new Jetpack_IXR_Client( array(
602
+ 'user_id' => get_current_user_id(),
603
  ) );
604
  $xml->query( 'jetpack.sso.requestNonce' );
605
 
606
  if ( $xml->isError() ) {
607
+ return new WP_Error( $xml->getErrorCode(), $xml->getErrorMessage() );
608
  }
609
 
610
  return $xml->getResponse();
616
  function handle_login() {
617
  $wpcom_nonce = sanitize_key( $_GET['sso_nonce'] );
618
  $wpcom_user_id = (int) $_GET['user_id'];
 
619
 
620
  Jetpack::load_xml_rpc_client();
621
  $xml = new Jetpack_IXR_Client( array(
622
+ 'user_id' => get_current_user_id(),
623
  ) );
624
  $xml->query( 'jetpack.sso.validateResult', $wpcom_nonce, $wpcom_user_id );
625
 
626
  if ( $xml->isError() ) {
627
+ $error_message = sanitize_text_field(
628
+ sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() )
629
+ );
630
+ JetpackTracking::record_user_event( 'sso_login_failed', array(
631
+ 'error_message' => $error_message
632
+ ) );
633
+ wp_die( $error_message );
634
  }
635
 
636
  $user_data = $xml->getResponse();
637
 
638
  if ( empty( $user_data ) ) {
639
+ JetpackTracking::record_user_event( 'sso_login_failed', array(
640
+ 'error_message' => 'invalid_response_data'
641
+ ) );
642
  wp_die( __( 'Error, invalid response data.', 'jetpack' ) );
643
  }
644
 
652
  *
653
  * @since 2.6.0
654
  *
655
+ * @param object $user_data WordPress.com User information.
656
  */
657
  do_action( 'jetpack_sso_pre_handle_login', $user_data );
658
 
659
+ if ( Jetpack_SSO_Helpers::is_two_step_required() && 0 === (int) $user_data->two_step_enabled ) {
 
 
 
 
 
 
 
 
 
 
660
  $this->user_data = $user_data;
661
+
662
+ JetpackTracking::record_user_event( 'sso_login_failed', array(
663
+ 'error_message' => 'error_msg_enable_two_step'
664
+ ) );
665
+
666
  /** This filter is documented in core/src/wp-includes/pluggable.php */
667
  do_action( 'wp_login_failed', $user_data->login );
668
+ add_filter( 'login_message', array( $this, 'error_msg_enable_two_step' ) );
669
  return;
670
  }
671
 
672
+ $user_found_with = '';
673
+ if ( empty( $user ) && isset( $user_data->external_user_id ) ) {
674
+ $user_found_with = 'external_user_id';
675
+ $user = get_user_by( 'id', intval( $user_data->external_user_id ) );
676
+ if ( $user ) {
677
+ update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
678
+ }
 
 
 
 
 
 
 
679
  }
680
 
681
  // If we don't have one by wpcom_user_id, try by the email?
682
+ if ( empty( $user ) && Jetpack_SSO_Helpers::match_by_email() ) {
683
+ $user_found_with = 'match_by_email';
684
  $user = get_user_by( 'email', $user_data->email );
685
  if ( $user ) {
686
  update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
688
  }
689
 
690
  // If we've still got nothing, create the user.
691
+ if ( empty( $user ) && ( get_option( 'users_can_register' ) || Jetpack_SSO_Helpers::new_user_override() ) ) {
692
  // If not matching by email we still need to verify the email does not exist
693
  // or this blows up
694
  /**
696
  * been found in the first pass. If get_user_by( 'email' ) doesn't find the
697
  * user, then we know that email is unused, so it's safe to add.
698
  */
699
+ if ( Jetpack_SSO_Helpers::match_by_email() || ! get_user_by( 'email', $user_data->email ) ) {
700
  $username = $user_data->login;
701
 
702
  if ( username_exists( $username ) ) {
707
  while ( username_exists( $username ) ) {
708
  $username = $user_data->login . '_' . $user_data->ID . '_' . mt_rand();
709
  if ( $tries++ >= 5 ) {
710
+ JetpackTracking::record_user_event( 'sso_login_failed', array(
711
+ 'error_message' => 'could_not_create_username'
712
+ ) );
713
  wp_die( __( "Error: Couldn't create suitable username.", 'jetpack' ) );
714
  }
715
  }
716
 
717
+ $user_found_with = Jetpack_SSO_Helpers::new_user_override()
718
+ ? 'user_created_new_user_override'
719
+ : 'user_created_users_can_register';
720
+
721
  $password = wp_generate_password( 20 );
722
  $user_id = wp_create_user( $username, $password, $user_data->email );
723
  $user = get_userdata( $user_id );
731
 
732
  update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
733
  } else {
734
+ JetpackTracking::record_user_event( 'sso_login_failed', array(
735
+ 'error_message' => 'error_msg_email_already_exists'
736
+ ) );
737
+
738
  $this->user_data = $user_data;
 
739
  add_action( 'login_message', array( $this, 'error_msg_email_already_exists' ) );
740
  return;
741
  }
748
  *
749
  * @since 2.6.0
750
  *
751
+ * @param array $user Local User information.
752
+ * @param object $user_data WordPress.com User Login information.
753
  */
754
  do_action( 'jetpack_sso_handle_login', $user, $user_data );
755
 
756
  if ( $user ) {
757
+ // Cache the user's details, so we can present it back to them on their user screen
758
  update_user_meta( $user->ID, 'wpcom_user_data', $user_data );
759
 
760
  $remember = false;
778
  /** This filter is documented in core/src/wp-includes/user.php */
779
  do_action( 'wp_login', $user->user_login, $user );
780
 
781
+ wp_set_current_user( $user->ID );
782
+
783
+ $_request_redirect_to = isset( $_REQUEST['redirect_to'] ) ? esc_url_raw( $_REQUEST['redirect_to'] ) : '';
784
  $redirect_to = user_can( $user, 'edit_posts' ) ? admin_url() : self::profile_page_url();
785
 
786
  // If we have a saved redirect to request in a cookie
791
  setcookie( 'jetpack_sso_redirect_to', ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
792
  }
793
 
794
+ $is_user_connected = Jetpack::is_user_connected( $user->ID );
795
+ JetpackTracking::record_user_event( 'sso_user_logged_in', array(
796
+ 'user_found_with' => $user_found_with,
797
+ 'user_connected' => (bool) $is_user_connected,
798
+ 'user_role' => Jetpack::init()->translate_current_user_to_role()
799
+ ) );
800
+
801
+ if ( ! $is_user_connected ) {
802
+ $calypso_env = ! empty( $_GET['calypso_env'] )
803
+ ? sanitize_key( $_GET['calypso_env'] )
804
+ : '';
805
+
806
+ wp_safe_redirect(
807
+ add_query_arg(
808
+ array(
809
+ 'redirect_to' => $redirect_to,
810
+ 'request_redirect_to' => $_request_redirect_to,
811
+ 'calypso_env' => $calypso_env,
812
+ 'jetpack-sso-auth-redirect' => '1',
813
+ ),
814
+ admin_url()
815
+ )
816
+ );
817
+ exit;
818
+ }
819
+
820
  wp_safe_redirect(
821
  /** This filter is documented in core/src/wp-login.php */
822
  apply_filters( 'login_redirect', $redirect_to, $_request_redirect_to, $user )
824
  exit;
825
  }
826
 
827
+ add_filter( 'jetpack_sso_default_to_sso_login', '__return_false' );
828
+
829
+ JetpackTracking::record_user_event( 'sso_login_failed', array(
830
+ 'error_message' => 'cant_find_user'
831
+ ) );
832
+
833
  $this->user_data = $user_data;
834
  /** This filter is documented in core/src/wp-includes/pluggable.php */
835
  do_action( 'wp_login_failed', $user_data->login );
836
+ add_filter( 'login_message', array( $this, 'cant_find_user' ) );
837
  }
838
 
839
  static function profile_page_url() {
840
  return admin_url( 'profile.php' );
841
  }
842
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
843
  function allowed_redirect_hosts( $hosts ) {
844
  if ( empty( $hosts ) ) {
845
  $hosts = array();
846
  }
847
  $hosts[] = 'wordpress.com';
848
+ $hosts[] = 'jetpack.wordpress.com';
849
 
850
  return array_unique( $hosts );
851
  }
852
 
853
+ /**
854
+ * Builds the "Login to WordPress.com" button that is displayed on the login page as well as user profile page.
855
+ *
856
+ * @param array $args An array of arguments to add to the SSO URL.
857
+ * @param boolean $is_primary Should the button have the `button-primary` class?
858
+ * @return string Returns the HTML markup for the button.
859
+ */
860
+ function build_sso_button( $args = array(), $is_primary = false ) {
861
+ $url = $this->build_sso_button_url( $args );
862
+ $classes = $is_primary
863
+ ? 'jetpack-sso button button-primary'
864
+ : 'jetpack-sso button';
865
+
866
+ return sprintf(
867
+ '<a rel="nofollow" href="%1$s" class="%2$s"><span>%3$s %4$s</span></a>',
868
+ esc_url( $url ),
869
+ $classes,
870
+ '<span class="genericon genericon-wordpress"></span>',
871
+ esc_html__( 'Log in with WordPress.com', 'jetpack' )
872
+ );
873
+ }
874
+
875
+ /**
876
+ * Builds a URL with `jetpack-sso` action and option args which is used to setup SSO.
877
+ *
878
+ * @param array $args An array of arguments to add to the SSO URL.
879
+ * @return string The URL used for SSO.
880
+ */
881
+ function build_sso_button_url( $args = array() ) {
882
  $defaults = array(
883
  'action' => 'jetpack-sso',
884
  );
886
  $args = wp_parse_args( $args, $defaults );
887
 
888
  if ( ! empty( $_GET['redirect_to'] ) ) {
889
+ $args['redirect_to'] = urlencode( esc_url_raw( $_GET['redirect_to'] ) );
890
  }
891
 
892
+ return add_query_arg( $args, wp_login_url() );
893
+ }
894
 
895
+ /**
896
+ * Retrieves a WordPress.com SSO URL with appropriate query parameters or dies.
897
+ *
898
+ * @param boolean $reauth Should the user be forced to reauthenticate on WordPress.com?
899
+ * @param array $args Optional query parameters.
900
+ * @return string The WordPress.com SSO URL.
901
+ */
902
+ function get_sso_url_or_die( $reauth = false, $args = array() ) {
903
+ if ( empty( $reauth ) ) {
904
+ $sso_redirect = $this->build_sso_url( $args );
905
+ } else {
906
+ self::clear_wpcom_profile_cookies();
907
+ $sso_redirect = $this->build_reauth_and_sso_url( $args );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
908
  }
909
 
910
+ // If there was an error retrieving the SSO URL, then error.
911
+ if ( is_wp_error( $sso_redirect ) ) {
912
+ $error_message = sanitize_text_field(
913
+ sprintf( '%s: %s', $sso_redirect->get_error_code(), $sso_redirect->get_error_message() )
914
+ );
915
+ JetpackTracking::record_user_event( 'sso_login_redirect_failed', array(
916
+ 'error_message' => $error_message
917
+ ) );
918
+ wp_die( $error_message );
919
+ }
920
 
921
+ return $sso_redirect;
 
922
  }
923
 
924
+ /**
925
+ * Build WordPress.com SSO URL with appropriate query parameters.
926
+ *
927
+ * @param array $args Optional query parameters.
928
+ * @return string WordPress.com SSO URL
929
+ */
930
  function build_sso_url( $args = array() ) {
931
+ $sso_nonce = ! empty( $args['sso_nonce'] ) ? $args['sso_nonce'] : self::request_initial_nonce();
932
  $defaults = array(
933
+ 'action' => 'jetpack-sso',
934
+ 'site_id' => Jetpack_Options::get_option( 'id' ),
935
+ 'sso_nonce' => $sso_nonce,
936
+ 'calypso_auth' => '1',
937
  );
938
 
939
+ $args = wp_parse_args( $args, $defaults );
940
+
941
+ if ( is_wp_error( $args['sso_nonce'] ) ) {
942
+ return $args['sso_nonce'];
943
+ }
944
+
945
+ return add_query_arg( $args, 'https://wordpress.com/wp-login.php' );
946
+ }
947
+
948
+ /**
949
+ * Build WordPress.com SSO URL with appropriate query parameters,
950
+ * including the parameters necessary to force the user to reauthenticate
951
+ * on WordPress.com.
952
+ *
953
+ * @param array $args Optional query parameters.
954
+ * @return string WordPress.com SSO URL
955
+ */
956
+ function build_reauth_and_sso_url( $args = array() ) {
957
+ $sso_nonce = ! empty( $args['sso_nonce'] ) ? $args['sso_nonce'] : self::request_initial_nonce();
958
+ $redirect = $this->build_sso_url( array( 'force_auth' => '1', 'sso_nonce' => $sso_nonce ) );
959
+
960
+ if ( is_wp_error( $redirect ) ) {
961
+ return $redirect;
962
  }
963
 
964
+ $defaults = array(
965
+ 'action' => 'jetpack-sso',
966
+ 'site_id' => Jetpack_Options::get_option( 'id' ),
967
+ 'sso_nonce' => $sso_nonce,
968
+ 'reauth' => '1',
969
+ 'redirect_to' => urlencode( $redirect ),
970
+ 'calypso_auth' => '1',
971
+ );
972
+
973
  $args = wp_parse_args( $args, $defaults );
 
974
 
975
+ if ( is_wp_error( $args['sso_nonce'] ) ) {
976
+ return $args['sso_nonce'];
977
+ }
978
+
979
+ return add_query_arg( $args, 'https://wordpress.com/wp-login.php' );
980
  }
981
 
982
  /**
983
+ * Determines local user associated with a given WordPress.com user ID.
984
+ *
985
+ * @since 2.6.0
986
+ *
987
+ * @param int $wpcom_user_id User ID from WordPress.com
988
+ * @return object Local user object if found, null if not.
989
+ */
990
  static function get_user_by_wpcom_id( $wpcom_user_id ) {
991
  $user_query = new WP_User_Query( array(
992
  'meta_key' => 'wpcom_user_id',
1007
  * @return string
1008
  **/
1009
  public function error_msg_enable_two_step( $message ) {
1010
+ $error = sprintf(
1011
+ wp_kses(
1012
+ __(
1013
+ 'Two-Step Authentication is required to access this site. Please visit your <a href="%1$s" target="_blank">Security Settings</a> to configure <a href="%2$S" target="_blank">Two-step Authentication</a> for your account.',
1014
+ 'jetpack'
1015
+ ),
1016
+ array( 'a' => array( 'href' => array() ) )
1017
+ ),
1018
+ 'https://wordpress.com/me/security/two-step',
1019
+ 'https://support.wordpress.com/security/two-step-authentication/'
1020
+ );
1021
 
1022
+ $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
1023
 
1024
  return $message;
1025
  }
1033
  * @return string
1034
  */
1035
  public function error_msg_email_already_exists( $message ) {
1036
+ $error = sprintf(
1037
+ wp_kses(
1038
+ __(
1039
+ 'You already have an account on this site. Please <a href="%1$s">sign in</a> with your username and password and then connect to WordPress.com.',
1040
+ 'jetpack'
1041
+ ),
1042
+ array( 'a' => array( 'href' => array() ) )
1043
+ ),
1044
+ esc_url_raw( add_query_arg( 'jetpack-sso-show-default-form', '1', wp_login_url() ) )
1045
+ );
1046
 
1047
+ $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
1048
 
1049
  return $message;
1050
  }
1051
 
1052
  /**
1053
+ * Builds the translation ready string that is to be used when the site hides the default login form.
 
1054
  *
1055
+ * @since 4.1.0
 
1056
  * @return string
1057
+ */
1058
+ public function get_sso_required_message() {
1059
+ $msg = esc_html__( 'A WordPress.com account is required to access this site. Click the button below to sign in or create a free WordPress.com account.', 'jetpack' );
 
1060
 
1061
  /**
1062
  * Filter the message displayed when the default WordPress login form is disabled.
1067
  *
1068
  * @param string $msg Disclaimer when default WordPress login form is disabled.
1069
  */
1070
+ return apply_filters( 'jetpack_sso_disclaimer_message', $msg );
1071
+ }
1072
+
1073
+ /**
1074
+ * Message displayed when the site admin has disabled the default WordPress
1075
+ * login form in Settings > General > Single Sign On
1076
+ *
1077
+ * @since 2.7
1078
+ * @param string $message
1079
+ *
1080
+ * @return string
1081
+ **/
1082
+ public function msg_login_by_jetpack( $message ) {
1083
+ $msg = $this->get_sso_required_message();
1084
+
1085
+ if ( empty( $msg ) ) {
1086
+ return $message;
1087
+ }
1088
 
1089
  $message .= sprintf( '<p class="message">%s</p>', $msg );
1090
  return $message;
1091
  }
1092
 
1093
  /**
1094
+ * Message displayed when the user can not be found after approving the SSO process on WordPress.com
 
1095
  *
 
1096
  * @param string $message
1097
+ * @return string
1098
+ */
1099
+ function cant_find_user( $message ) {
1100
+ $error = esc_html__(
1101
+ "We couldn't find your account. If you already have an account, make sure you have connected to WordPress.com.",
1102
+ 'jetpack'
1103
+ );
1104
+ $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
1105
 
1106
  return $message;
1107
  }
1108
+
1109
+ /**
1110
+ * When jetpack-sso-auth-redirect query parameter is set, will redirect user to
1111
+ * WordPress.com authorization flow.
1112
+ *
1113
+ * We redirect here instead of in handle_login() because Jetpack::init()->build_connect_url
1114
+ * calls menu_page_url() which doesn't work properly until admin menus are registered.
1115
+ */
1116
+ function maybe_authorize_user_after_sso() {
1117
+ if ( empty( $_GET['jetpack-sso-auth-redirect'] ) ) {
1118
+ return;
1119
  }
1120
+
1121
+ $redirect_to = ! empty( $_GET['redirect_to'] ) ? esc_url_raw( $_GET['redirect_to'] ) : admin_url();
1122
+ $request_redirect_to = ! empty( $_GET['request_redirect_to'] ) ? esc_url_raw( $_GET['request_redirect_to'] ) : $redirect_to;
1123
+
1124
+ /** This filter is documented in core/src/wp-login.php */
1125
+ $redirect_after_auth = apply_filters( 'login_redirect', $redirect_to, $request_redirect_to, wp_get_current_user() );
1126
+
1127
+ /**
1128
+ * Since we are passing this redirect to WordPress.com and therefore can not use wp_safe_redirect(),
1129
+ * let's sanitize it here to make sure it's safe. If the redirect is not safe, then use admin_url().
1130
+ */
1131
+ $redirect_after_auth = wp_sanitize_redirect( $redirect_after_auth );
1132
+ $redirect_after_auth = wp_validate_redirect( $redirect_after_auth, admin_url() );
1133
+
1134
+ /**
1135
+ * Return the raw connect URL with our redirect and attribute connection to SSO.
1136
+ */
1137
+ $connect_url = Jetpack::init()->build_connect_url( true, $redirect_after_auth, 'sso' );
1138
+
1139
+ add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
1140
+ wp_safe_redirect( $connect_url );
1141
+ exit;
1142
  }
1143
 
1144
  /**
1145
+ * Cache user's display name and Gravatar so it can be displayed on the login screen. These cookies are
1146
+ * stored when the user logs out, and then deleted when the user logs in.
1147
  */
1148
+ function store_wpcom_profile_cookies_on_logout() {
1149
+ if ( ! Jetpack::is_user_connected( get_current_user_id() ) ) {
1150
+ return;
1151
+ }
1152
 
1153
+ $user_data = $this->get_user_data( get_current_user_id() );
1154
+ if ( ! $user_data ) {
1155
+ return;
 
 
 
 
 
 
1156
  }
1157
+
1158
+ setcookie(
1159
+ 'jetpack_sso_wpcom_name_' . COOKIEHASH,
1160
+ $user_data->display_name,
1161
+ time() + WEEK_IN_SECONDS,
1162
+ COOKIEPATH,
1163
+ COOKIE_DOMAIN
1164
+ );
1165
+
1166
+ setcookie(
1167
+ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH,
1168
+ get_avatar_url(
1169
+ $user_data->email,
1170
+ array( 'size' => 144, 'default' => 'mystery' )
1171
+ ),
1172
+ time() + WEEK_IN_SECONDS,
1173
+ COOKIEPATH,
1174
+ COOKIE_DOMAIN
1175
+ );
1176
  }
1177
 
1178
  /**
1183
  * @return boolean
1184
  **/
1185
  public function is_user_connected( $user_id ) {
1186
+ return $this->get_user_data( $user_id );
1187
  }
1188
 
1189
  /**
1196
  public function get_user_data( $user_id ) {
1197
  return get_user_meta( $user_id, 'wpcom_user_data', true );
1198
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1199
  }
1200
 
1201
  Jetpack_SSO::get_instance();
modules/sso/class.jetpack-sso-helpers.php ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! class_exists( 'Jetpack_SSO_Helpers' ) ) :
4
+
5
+ /**
6
+ * A collection of helper functions used in the SSO module.
7
+ *
8
+ * @since 4.1.0
9
+ */
10
+ class Jetpack_SSO_Helpers {
11
+ /**
12
+ * Determine if the login form should be hidden or not
13
+ *
14
+ * @return bool
15
+ **/
16
+ static function should_hide_login_form() {
17
+ /**
18
+ * Remove the default log in form, only leave the WordPress.com log in button.
19
+ *
20
+ * @module sso
21
+ *
22
+ * @since 3.1.0
23
+ *
24
+ * @param bool get_option( 'jetpack_sso_remove_login_form', false ) Should the default log in form be removed. Default to false.
25
+ */
26
+ return (bool) apply_filters( 'jetpack_remove_login_form', get_option( 'jetpack_sso_remove_login_form', false ) );
27
+ }
28
+
29
+ /**
30
+ * Returns a boolean value for whether logging in by matching the WordPress.com user email to a
31
+ * Jetpack site user's email is allowed.
32
+ *
33
+ * @return bool
34
+ */
35
+ static function match_by_email() {
36
+ $match_by_email = ( 1 == get_option( 'jetpack_sso_match_by_email', true ) ) ? true: false;
37
+ $match_by_email = defined( 'WPCC_MATCH_BY_EMAIL' ) ? WPCC_MATCH_BY_EMAIL : $match_by_email;
38
+
39
+ /**
40
+ * Link the local account to an account on WordPress.com using the same email address.
41
+ *
42
+ * @module sso
43
+ *
44
+ * @since 2.6.0
45
+ *
46
+ * @param bool $match_by_email Should we link the local account to an account on WordPress.com using the same email address. Default to false.
47
+ */
48
+ return (bool) apply_filters( 'jetpack_sso_match_by_email', $match_by_email );
49
+ }
50
+
51
+ /**
52
+ * Returns a boolean for whether users are allowed to register on the Jetpack site with SSO,
53
+ * even though the site disallows normal registrations.
54
+ *
55
+ * @return bool
56
+ */
57
+ static function new_user_override() {
58
+ $new_user_override = defined( 'WPCC_NEW_USER_OVERRIDE' ) ? WPCC_NEW_USER_OVERRIDE : false;
59
+
60
+ /**
61
+ * Allow users to register on your site with a WordPress.com account, even though you disallow normal registrations.
62
+ *
63
+ * @module sso
64
+ *
65
+ * @since 2.6.0
66
+ *
67
+ * @param bool $new_user_override Allow users to register on your site with a WordPress.com account. Default to false.
68
+ */
69
+ return (bool) apply_filters( 'jetpack_sso_new_user_override', $new_user_override );
70
+ }
71
+
72
+ /**
73
+ * Returns a boolean value for whether two-step authentication is required for SSO.
74
+ *
75
+ * @since 4.1.0
76
+ *
77
+ * @return bool
78
+ */
79
+ static function is_two_step_required() {
80
+ /**
81
+ * Is it required to have 2-step authentication enabled on WordPress.com to use SSO?
82
+ *
83
+ * @module sso
84
+ *
85
+ * @since 2.8.0
86
+ *
87
+ * @param bool get_option( 'jetpack_sso_require_two_step' ) Does SSO require 2-step authentication?
88
+ */
89
+ return (bool) apply_filters( 'jetpack_sso_require_two_step', get_option( 'jetpack_sso_require_two_step', false ) );
90
+ }
91
+
92
+ /**
93
+ * Returns a boolean for whether a user that is attempting to log in will be automatically
94
+ * redirected to WordPress.com to begin the SSO flow.
95
+ *
96
+ * @return bool
97
+ */
98
+ static function bypass_login_forward_wpcom() {
99
+ /**
100
+ * Redirect the site's log in form to WordPress.com's log in form.
101
+ *
102
+ * @module sso
103
+ *
104
+ * @since 3.1.0
105
+ *
106
+ * @param bool false Should the site's log in form be automatically forwarded to WordPress.com's log in form.
107
+ */
108
+ return (bool) apply_filters( 'jetpack_sso_bypass_login_forward_wpcom', false );
109
+ }
110
+
111
+ /**
112
+ * Returns a boolean for whether the SSO login form should be displayed as the default
113
+ * when both the default and SSO login form allowed.
114
+ *
115
+ * @since 4.1.0
116
+ *
117
+ * @return bool
118
+ */
119
+ static function show_sso_login() {
120
+ if ( self::should_hide_login_form() ) {
121
+ return true;
122
+ }
123
+
124
+ /**
125
+ * Display the SSO login form as the default when both the default and SSO login forms are enabled.
126
+ *
127
+ * @module sso
128
+ *
129
+ * @since 4.1.0
130
+ *
131
+ * @param bool true Should the SSO login form be displayed by default when the default login form is also enabled?
132
+ */
133
+ return (bool) apply_filters( 'jetpack_sso_default_to_sso_login', true );
134
+ }
135
+
136
+ /**
137
+ * Returns a boolean for whether the two step required checkbox, displayed on the Jetpack admin page, should be disabled.
138
+ *
139
+ * @since 4.1.0
140
+ *
141
+ * @return bool
142
+ */
143
+ static function is_require_two_step_checkbox_disabled() {
144
+ return (bool) has_filter( 'jetpack_sso_require_two_step' );
145
+ }
146
+
147
+ /**
148
+ * Returns a boolean for whether the match by email checkbox, displayed on the Jetpack admin page, should be disabled.
149
+ *
150
+ * @since 4.1.0
151
+ *
152
+ * @return bool
153
+ */
154
+ static function is_match_by_email_checkbox_disabled() {
155
+ return defined( 'WPCC_MATCH_BY_EMAIL' ) || has_filter( 'jetpack_sso_match_by_email' );
156
+ }
157
+ }
158
+
159
+ endif;
modules/sso/jetpack-sso-login-rtl.css ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #loginform {
2
+ /* We set !important because sometimes static is added inline */
3
+ position: relative !important;
4
+ padding-bottom: 92px;
5
+ }
6
+
7
+ .jetpack-sso .message {
8
+ margin-top: 20px;
9
+ }
10
+
11
+ .jetpack-sso #login .message:first-child,
12
+ .jetpack-sso #login h1 + .message {
13
+ margin-top: 0;
14
+ }
15
+
16
+ .jetpack-sso-repositioned #loginform {
17
+ padding-bottom: 26px;
18
+ }
19
+
20
+ #loginform #jetpack-sso-wrap,
21
+ #loginform #jetpack-sso-wrap * {
22
+ box-sizing: border-box;
23
+ }
24
+
25
+
26
+ #jetpack-sso-wrap__action,
27
+ #jetpack-sso-wrap__user{
28
+ display: none;
29
+ }
30
+
31
+ .jetpack-sso-form-display #jetpack-sso-wrap__action,
32
+ .jetpack-sso-form-display #jetpack-sso-wrap__user {
33
+ display: block;
34
+ }
35
+
36
+ #jetpack-sso-wrap {
37
+ position: absolute;
38
+ bottom: 20px;
39
+ padding: 0 24px;
40
+ margin-right: -24px;
41
+ margin-left: -24px;
42
+ width: 100%;
43
+ }
44
+
45
+ .jetpack-sso-repositioned #jetpack-sso-wrap {
46
+ position: relative;
47
+ bottom: auto;
48
+ padding: 0;
49
+ margin-top: 16px;
50
+ margin-right: 0;
51
+ margin-left: 0;
52
+ }
53
+
54
+ .jetpack-sso-form-display #jetpack-sso-wrap {
55
+ position: relative;
56
+ bottom: auto;
57
+ padding: 0;
58
+ margin-top: 0;
59
+ margin-right: 0;
60
+ margin-left: 0;
61
+ }
62
+
63
+ #loginform #jetpack-sso-wrap p {
64
+ color: #777777;
65
+ margin-bottom: 16px;
66
+ }
67
+
68
+ #jetpack-sso-wrap a {
69
+ display: block;
70
+ width: 100%;
71
+ text-align: center;
72
+ text-decoration: none;
73
+ }
74
+
75
+ #jetpack-sso-wrap .jetpack-sso-toggle.wpcom {
76
+ display: none;
77
+ }
78
+
79
+ .jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom {
80
+ display: block;
81
+ }
82
+
83
+
84
+ .jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default {
85
+ display: none;
86
+ }
87
+
88
+
89
+ .jetpack-sso-form-display #loginform > p,
90
+ .jetpack-sso-form-display #loginform > div {
91
+ display: none;
92
+ }
93
+
94
+ .jetpack-sso-form-display #loginform #jetpack-sso-wrap {
95
+ display: block;
96
+ }
97
+
98
+ .jetpack-sso-form-display #loginform {
99
+ padding: 26px 24px;
100
+ }
101
+
102
+ .jetpack-sso-or {
103
+ margin-bottom: 16px;
104
+ position: relative;
105
+ text-align: center;
106
+ }
107
+
108
+ .jetpack-sso-or:before {
109
+ background: #E5E5E5;
110
+ content: '';
111
+ height: 1px;
112
+ position: absolute;
113
+ right: 0;
114
+ top: 50%;
115
+ width: 100%;
116
+ }
117
+ .jetpack-sso-or span {
118
+ background: #fff;
119
+ color: #777;
120
+ position: relative;
121
+ padding: 0 8px;
122
+ text-transform: uppercase
123
+ }
124
+
125
+ .jetpack-sso.button {
126
+ height: 36px;
127
+ line-height: 34px;
128
+ float: none;
129
+ margin-bottom: 16px;
130
+ position: relative;
131
+ width: 100%;
132
+ }
133
+
134
+ .jetpack-sso.button > span {
135
+ position: relative;
136
+ padding-right: 30px;
137
+ }
138
+
139
+ .jetpack-sso.button .genericon-wordpress {
140
+ position: absolute;
141
+ right: 0;
142
+ top: -3px;
143
+ font-size: 24px;
144
+ }
145
+
146
+ @media screen and ( max-width: 782px ) {
147
+ .jetpack-sso.button {
148
+ line-height: 22px;
149
+ }
150
+ }
151
+
152
+ #jetpack-sso-wrap__user img {
153
+ border-radius: 50%;
154
+ display: block;
155
+ margin: 0 auto 16px;
156
+ }
157
+
158
+ #jetpack-sso-wrap__user h2 {
159
+ font-size: 21px;
160
+ font-weight: 300;
161
+ margin-bottom: 16px;
162
+ text-align: center;
163
+ }
164
+
165
+ #jetpack-sso-wrap__user h2 span {
166
+ font-weight: bold;
167
+ }
168
+
169
+ .jetpack-sso-wrap__reauth {
170
+ margin-bottom: 16px;
171
+ }
172
+
173
+ .jetpack-sso-form-display #nav {
174
+ display: none;
175
+ }
176
+
177
+ .jetpack-sso-form-display #backtoblog {
178
+ margin: 24px 0 0;
179
+ }
modules/sso/jetpack-sso-login-rtl.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #loginform{position:relative!important;padding-bottom:92px}.jetpack-sso .message{margin-top:20px}.jetpack-sso #login .message:first-child,.jetpack-sso #login h1+.message{margin-top:0}.jetpack-sso-repositioned #loginform{padding-bottom:26px}#loginform #jetpack-sso-wrap,#loginform #jetpack-sso-wrap *{box-sizing:border-box}#jetpack-sso-wrap__action,#jetpack-sso-wrap__user{display:none}.jetpack-sso-form-display #jetpack-sso-wrap__action,.jetpack-sso-form-display #jetpack-sso-wrap__user{display:block}#jetpack-sso-wrap{position:absolute;bottom:20px;padding:0 24px;margin-right:-24px;margin-left:-24px;width:100%}.jetpack-sso-repositioned #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:16px;margin-right:0;margin-left:0}.jetpack-sso-form-display #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:0;margin-right:0;margin-left:0}#loginform #jetpack-sso-wrap p{color:#777;margin-bottom:16px}#jetpack-sso-wrap a{display:block;width:100%;text-align:center;text-decoration:none}#jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:none}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:block}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default,.jetpack-sso-form-display #loginform>div,.jetpack-sso-form-display #loginform>p{display:none}.jetpack-sso-form-display #loginform #jetpack-sso-wrap{display:block}.jetpack-sso-form-display #loginform{padding:26px 24px}.jetpack-sso-or{margin-bottom:16px;position:relative;text-align:center}.jetpack-sso-or:before{background:#E5E5E5;content:'';height:1px;position:absolute;right:0;top:50%;width:100%}.jetpack-sso-or span{background:#fff;color:#777;position:relative;padding:0 8px;text-transform:uppercase}.jetpack-sso.button{height:36px;line-height:34px;float:none;margin-bottom:16px;position:relative;width:100%}.jetpack-sso.button>span{position:relative;padding-right:30px}.jetpack-sso.button .genericon-wordpress{position:absolute;right:0;top:-3px;font-size:24px}@media screen and (max-width:782px){.jetpack-sso.button{line-height:22px}}#jetpack-sso-wrap__user img{border-radius:50%;display:block;margin:0 auto 16px}#jetpack-sso-wrap__user h2{font-size:21px;font-weight:300;margin-bottom:16px;text-align:center}#jetpack-sso-wrap__user h2 span{font-weight:700}.jetpack-sso-wrap__reauth{margin-bottom:16px}.jetpack-sso-form-display #nav{display:none}.jetpack-sso-form-display #backtoblog{margin:24px 0 0}
modules/sso/jetpack-sso-login.css ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #loginform {
2
+ /* We set !important because sometimes static is added inline */
3
+ position: relative !important;
4
+ padding-bottom: 92px;
5
+ }
6
+
7
+ .jetpack-sso .message {
8
+ margin-top: 20px;
9
+ }
10
+
11
+ .jetpack-sso #login .message:first-child,
12
+ .jetpack-sso #login h1 + .message {
13
+ margin-top: 0;
14
+ }
15
+
16
+ .jetpack-sso-repositioned #loginform {
17
+ padding-bottom: 26px;
18
+ }
19
+
20
+ #loginform #jetpack-sso-wrap,
21
+ #loginform #jetpack-sso-wrap * {
22
+ box-sizing: border-box;
23
+ }
24
+
25
+
26
+ #jetpack-sso-wrap__action,
27
+ #jetpack-sso-wrap__user{
28
+ display: none;
29
+ }
30
+
31
+ .jetpack-sso-form-display #jetpack-sso-wrap__action,
32
+ .jetpack-sso-form-display #jetpack-sso-wrap__user {
33
+ display: block;
34
+ }
35
+
36
+ #jetpack-sso-wrap {
37
+ position: absolute;
38
+ bottom: 20px;
39
+ padding: 0 24px;
40
+ margin-left: -24px;
41
+ margin-right: -24px;
42
+ width: 100%;
43
+ }
44
+
45
+ .jetpack-sso-repositioned #jetpack-sso-wrap {
46
+ position: relative;
47
+ bottom: auto;
48
+ padding: 0;
49
+ margin-top: 16px;
50
+ margin-left: 0;
51
+ margin-right: 0;
52
+ }
53
+
54
+ .jetpack-sso-form-display #jetpack-sso-wrap {
55
+ position: relative;
56
+ bottom: auto;
57
+ padding: 0;
58
+ margin-top: 0;
59
+ margin-left: 0;
60
+ margin-right: 0;
61
+ }
62
+
63
+ #loginform #jetpack-sso-wrap p {
64
+ color: #777777;
65
+ margin-bottom: 16px;
66
+ }
67
+
68
+ #jetpack-sso-wrap a {
69
+ display: block;
70
+ width: 100%;
71
+ text-align: center;
72
+ text-decoration: none;
73
+ }
74
+
75
+ #jetpack-sso-wrap .jetpack-sso-toggle.wpcom {
76
+ display: none;
77
+ }
78
+
79
+ .jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom {
80
+ display: block;
81
+ }
82
+
83
+
84
+ .jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default {
85
+ display: none;
86
+ }
87
+
88
+
89
+ .jetpack-sso-form-display #loginform > p,
90
+ .jetpack-sso-form-display #loginform > div {
91
+ display: none;
92
+ }
93
+
94
+ .jetpack-sso-form-display #loginform #jetpack-sso-wrap {
95
+ display: block;
96
+ }
97
+
98
+ .jetpack-sso-form-display #loginform {
99
+ padding: 26px 24px;
100
+ }
101
+
102
+ .jetpack-sso-or {
103
+ margin-bottom: 16px;
104
+ position: relative;
105
+ text-align: center;
106
+ }
107
+
108
+ .jetpack-sso-or:before {
109
+ background: #E5E5E5;
110
+ content: '';
111
+ height: 1px;
112
+ position: absolute;
113
+ left: 0;
114
+ top: 50%;
115
+ width: 100%;
116
+ }
117
+ .jetpack-sso-or span {
118
+ background: #fff;
119
+ color: #777;
120
+ position: relative;
121
+ padding: 0 8px;
122
+ text-transform: uppercase
123
+ }
124
+
125
+ .jetpack-sso.button {
126
+ height: 36px;
127
+ line-height: 34px;
128
+ float: none;
129
+ margin-bottom: 16px;
130
+ position: relative;
131
+ width: 100%;
132
+ }
133
+
134
+ .jetpack-sso.button > span {
135
+ position: relative;
136
+ padding-left: 30px;
137
+ }
138
+
139
+ .jetpack-sso.button .genericon-wordpress {
140
+ position: absolute;
141
+ left: 0;
142
+ top: -3px;
143
+ font-size: 24px;
144
+ }
145
+
146
+ @media screen and ( max-width: 782px ) {
147
+ .jetpack-sso.button {
148
+ line-height: 22px;
149
+ }
150
+ }
151
+
152
+ #jetpack-sso-wrap__user img {
153
+ border-radius: 50%;
154
+ display: block;
155
+ margin: 0 auto 16px;
156
+ }
157
+
158
+ #jetpack-sso-wrap__user h2 {
159
+ font-size: 21px;
160
+ font-weight: 300;
161
+ margin-bottom: 16px;
162
+ text-align: center;
163
+ }
164
+
165
+ #jetpack-sso-wrap__user h2 span {
166
+ font-weight: bold;
167
+ }
168
+
169
+ .jetpack-sso-wrap__reauth {
170
+ margin-bottom: 16px;
171
+ }
172
+
173
+ .jetpack-sso-form-display #nav {
174
+ display: none;
175
+ }
176
+
177
+ .jetpack-sso-form-display #backtoblog {
178
+ margin: 24px 0 0;
179
+ }
modules/sso/jetpack-sso-login.js ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery( document ).ready( function( $ ) {
2
+ var body = $( 'body' ),
3
+ rememberMe = $( '#rememberme' ),
4
+ ssoButton = $( 'a.jetpack-sso.button' ),
5
+ toggleSSO = $( '.jetpack-sso-toggle' ),
6
+ userLogin = $( '#user_login' ),
7
+ ssoWrap = $( '#jetpack-sso-wrap' ),
8
+ loginForm = $( '#loginform' ),
9
+ overflow = $( '<div style="overflow: auto;"></div>' );
10
+
11
+ // The overflow div is a poor man's clearfloat. We reposition the remember me
12
+ // checkbox and the submit button within that to clear the float on the
13
+ // remember me checkbox. This is important since we're positioning the SSO
14
+ // UI under the submit button.
15
+ //
16
+ // @TODO: Remove this approach once core ticket 28528 is in and we have more actions in wp-login.php.
17
+ // See - https://core.trac.wordpress.org/ticket/28528
18
+ loginForm.append( overflow );
19
+ overflow.append( $( 'p.forgetmenot' ), $( 'p.submit' ) );
20
+
21
+ // We reposition the SSO UI at the bottom of the login form which
22
+ // fixes a tab order issue. Then we override any styles for absolute
23
+ // positioning of the SSO UI.
24
+ loginForm.append( ssoWrap );
25
+ body.addClass( 'jetpack-sso-repositioned' );
26
+
27
+ rememberMe.on( 'change', function() {
28
+ var url = ssoButton.prop( 'href' ),
29
+ isChecked = rememberMe.prop( 'checked' ) ? 1 : 0;
30
+
31
+ if ( url.match( /&rememberme=\d/ ) ) {
32
+ url = url.replace( /&rememberme=\d/, '&rememberme=' + isChecked );
33
+ } else {
34
+ url += '&rememberme=' + isChecked;
35
+ }
36
+
37
+ ssoButton.prop( 'href', url );
38
+ } ).change();
39
+
40
+ toggleSSO.on( 'click', function( e ) {
41
+ e.preventDefault();
42
+ body.toggleClass( 'jetpack-sso-form-display' );
43
+ if ( ! body.hasClass( 'jetpack-sso-form-display' ) ) {
44
+ userLogin.focus();
45
+ }
46
+ } );
47
+ } );
modules/sso/jetpack-sso-login.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #loginform{position:relative!important;padding-bottom:92px}.jetpack-sso .message{margin-top:20px}.jetpack-sso #login .message:first-child,.jetpack-sso #login h1+.message{margin-top:0}.jetpack-sso-repositioned #loginform{padding-bottom:26px}#loginform #jetpack-sso-wrap,#loginform #jetpack-sso-wrap *{box-sizing:border-box}#jetpack-sso-wrap__action,#jetpack-sso-wrap__user{display:none}.jetpack-sso-form-display #jetpack-sso-wrap__action,.jetpack-sso-form-display #jetpack-sso-wrap__user{display:block}#jetpack-sso-wrap{position:absolute;bottom:20px;padding:0 24px;margin-left:-24px;margin-right:-24px;width:100%}.jetpack-sso-repositioned #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:16px;margin-left:0;margin-right:0}.jetpack-sso-form-display #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:0;margin-left:0;margin-right:0}#loginform #jetpack-sso-wrap p{color:#777;margin-bottom:16px}#jetpack-sso-wrap a{display:block;width:100%;text-align:center;text-decoration:none}#jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:none}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:block}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default,.jetpack-sso-form-display #loginform>div,.jetpack-sso-form-display #loginform>p{display:none}.jetpack-sso-form-display #loginform #jetpack-sso-wrap{display:block}.jetpack-sso-form-display #loginform{padding:26px 24px}.jetpack-sso-or{margin-bottom:16px;position:relative;text-align:center}.jetpack-sso-or:before{background:#E5E5E5;content:'';height:1px;position:absolute;left:0;top:50%;width:100%}.jetpack-sso-or span{background:#fff;color:#777;position:relative;padding:0 8px;text-transform:uppercase}.jetpack-sso.button{height:36px;line-height:34px;float:none;margin-bottom:16px;position:relative;width:100%}.jetpack-sso.button>span{position:relative;padding-left:30px}.jetpack-sso.button .genericon-wordpress{position:absolute;left:0;top:-3px;font-size:24px}@media screen and (max-width:782px){.jetpack-sso.button{line-height:22px}}#jetpack-sso-wrap__user img{border-radius:50%;display:block;margin:0 auto 16px}#jetpack-sso-wrap__user h2{font-size:21px;font-weight:300;margin-bottom:16px;text-align:center}#jetpack-sso-wrap__user h2 span{font-weight:700}.jetpack-sso-wrap__reauth{margin-bottom:16px}.jetpack-sso-form-display #nav{display:none}.jetpack-sso-form-display #backtoblog{margin:24px 0 0}
modules/sso/jetpack-sso-profile.css ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .jetpack-sso.button {
2
+ position: relative;
3
+ padding-left: 37px;
4
+ }
5
+ .jetpack-sso.button:before {
6
+ display: block;
7
+ box-sizing: border-box;
8
+ padding: 7px 0 0;
9
+ text-align: center;
10
+ position: absolute;
11
+ top: -1px;
12
+ left: -1px;
13
+ border-radius: 2px 0 0 2px;
14
+ content: '\f205';
15
+ background: #0074a2;
16
+ color: #fff;
17
+ -webkit-font-smoothing: antialiased;
18
+ width: 30px;
19
+ height: 107%;
20
+ height: calc( 100% + 2px );
21
+ font: normal 22px/1 Genericons !important;
22
+ text-shadow: none;
23
+ }
24
+ @media screen and (min-width: 783px) {
25
+ .jetpack-sso.button:before {
26
+ padding-top: 3px;
27
+ }
28
+ }
29
+ .jetpack-sso.button:hover {
30
+ border: 1px solid #aaa;
31
+ }
32
+
33
+ .jetpack-sso-form-table td {
34
+ padding-left: 0;
35
+ }
36
+
37
+ .jetpack-sso-form-table .profile-card {
38
+ padding: 10px;
39
+ background: #fff;
40
+ overflow: hidden;
41
+ max-width: 400px;
42
+ box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.1 );
43
+ margin-bottom: 1em;
44
+ }
45
+
46
+ .jetpack-sso-form-table .profile-card img {
47
+ float: left;
48
+ margin-right: 1em;
49
+ width: 48px;
50
+ height: 48px;
51
+ }
52
+
53
+ .jetpack-sso-form-table .profile-card .connected {
54
+ float: right;
55
+ margin-right: 0.5em;
56
+ color: #0a0;
57
+ }
58
+
59
+ .jetpack-sso-form-table .profile-card p {
60
+ margin-top: 0.7em;
61
+ font-size: 1.2em;
62
+ }
63
+
64
+ .jetpack-sso-form-table .profile-card .two_step .enabled a {
65
+ float: right;
66
+ color: #0a0;
67
+ }
68
+
69
+ .jetpack-sso-form-table .profile-card .two_step .disabled a {
70
+ float: right;
71
+ color: red;
72
+ }
modules/stats.php CHANGED
@@ -391,8 +391,18 @@ function stats_reports_page( $main_chart_only = false ) {
391
  </div>
392
  <div id="stats-loading-wrap" class="wrap">
393
  <p class="hide-if-no-js"><img width="32" height="32" alt="<?php esc_attr_e( 'Loading&hellip;', 'jetpack' ); ?>" src="<?php
394
- /** This filter is documented in modules/shortcodes/audio.php */
395
- echo esc_url( apply_filters( 'jetpack_static_url', "{$http}://en.wordpress.com/i/loading/loading-64.gif" ) ); ?>" /></p>
 
 
 
 
 
 
 
 
 
 
396
  <p style="font-size: 11pt; margin: 0;"><a href="https://wordpress.com/stats/<?php echo $domain; ?>" target="_blank"><?php esc_html_e( 'View stats on WordPress.com right now', 'jetpack' ); ?></a></p>
397
  <p class="hide-if-js"><?php esc_html_e( 'Your Site Stats work better with JavaScript enabled.', 'jetpack' ); ?><br />
398
  <a href="<?php echo esc_url( $nojs_url ); ?>"><?php esc_html_e( 'View Site Stats without JavaScript', 'jetpack' ); ?></a>.</p>
391
  </div>
392
  <div id="stats-loading-wrap" class="wrap">
393
  <p class="hide-if-no-js"><img width="32" height="32" alt="<?php esc_attr_e( 'Loading&hellip;', 'jetpack' ); ?>" src="<?php
394
+ echo esc_url(
395
+ /**
396
+ * Sets external resource URL.
397
+ *
398
+ * @module stats
399
+ *
400
+ * @since 1.4.0
401
+ *
402
+ * @param string $args URL of external resource.
403
+ */
404
+ apply_filters( 'jetpack_static_url', "{$http}://en.wordpress.com/i/loading/loading-64.gif" )
405
+ ); ?>" /></p>
406
  <p style="font-size: 11pt; margin: 0;"><a href="https://wordpress.com/stats/<?php echo $domain; ?>" target="_blank"><?php esc_html_e( 'View stats on WordPress.com right now', 'jetpack' ); ?></a></p>
407
  <p class="hide-if-js"><?php esc_html_e( 'Your Site Stats work better with JavaScript enabled.', 'jetpack' ); ?><br />
408
  <a href="<?php echo esc_url( $nojs_url ); ?>"><?php esc_html_e( 'View Site Stats without JavaScript', 'jetpack' ); ?></a>.</p>
modules/theme-tools/compat/twentysixteen-rtl.css CHANGED
@@ -474,6 +474,7 @@ iframe[src^="http://api.mixcloud.com/"] {
474
  opacity: 0.2;
475
  position: absolute;
476
  top: 0;
 
477
  width: 100%;
478
  }
479
 
474
  opacity: 0.2;
475
  position: absolute;
476
  top: 0;
477
+ right: 0;
478
  width: 100%;
479
  }
480
 
modules/theme-tools/compat/twentysixteen.css CHANGED
@@ -474,6 +474,7 @@ iframe[src^="http://api.mixcloud.com/"] {
474
  opacity: 0.2;
475
  position: absolute;
476
  top: 0;
 
477
  width: 100%;
478
  }
479
 
474
  opacity: 0.2;
475
  position: absolute;
476
  top: 0;
477
+ left: 0;
478
  width: 100%;
479
  }
480
 
modules/tiled-gallery/tiled-gallery.php CHANGED
@@ -42,8 +42,10 @@ class Jetpack_Tiled_Gallery {
42
  $this->float = is_rtl() ? 'right' : 'left';
43
 
44
  // Default to rectangular is tiled galleries are checked
45
- if ( $this->tiles_enabled() && ( ! $this->atts['type'] || 'default' == $this->atts['type'] ) )
46
- $this->atts['type'] = 'rectangular';
 
 
47
 
48
  if ( !$this->atts['orderby'] ) {
49
  $this->atts['orderby'] = sanitize_sql_orderby( $this->atts['orderby'] );
42
  $this->float = is_rtl() ? 'right' : 'left';
43
 
44
  // Default to rectangular is tiled galleries are checked
45
+ if ( $this->tiles_enabled() && ( ! $this->atts['type'] || 'default' == $this->atts['type'] ) ) {
46
+ /** This filter is already documented in functions.gallery.php */
47
+ $this->atts['type'] = apply_filters( 'jetpack_default_gallery_type', 'rectangular' );
48
+ }
49
 
50
  if ( !$this->atts['orderby'] ) {
51
  $this->atts['orderby'] = sanitize_sql_orderby( $this->atts['orderby'] );
modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php CHANGED
@@ -21,8 +21,7 @@ abstract class Jetpack_Tiled_Gallery_Item {
21
  $this->orig_file = wp_get_attachment_url( $this->image->ID );
22
  $this->link = $needs_attachment_link ? get_attachment_link( $this->image->ID ) : $this->orig_file;
23
 
24
- $this->img_src = add_query_arg( array( 'w' => $this->image->width, 'h' => $this->image->height, 'crop' => true ), $this->orig_file );
25
-
26
  }
27
 
28
  public function fuzzy_image_meta() {
21
  $this->orig_file = wp_get_attachment_url( $this->image->ID );
22
  $this->link = $needs_attachment_link ? get_attachment_link( $this->image->ID ) : $this->orig_file;
23
 
24
+ $this->img_src = jetpack_photon_url( $this->orig_file, array( 'resize' => sprintf( '%d,%d', $this->image->width, $this->image->height ) ) );
 
25
  }
26
 
27
  public function fuzzy_image_meta() {
modules/tiled-gallery/tiled-gallery/tiled-gallery.js CHANGED
@@ -160,7 +160,7 @@
160
  attachPlainResize( tiledGalleries );
161
  }
162
 
163
- if ( wp && wp.customize && wp.customizerHasPartialWidgetRefresh() ) {
164
  wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
165
  if ( wp.isJetpackWidgetPlaced( placement, 'gallery' ) ) {
166
  tiledGalleries.findAndSetupNewGalleries();
160
  attachPlainResize( tiledGalleries );
161
  }
162
 
163
+ if ( 'undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh ) {
164
  wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
165
  if ( wp.isJetpackWidgetPlaced( placement, 'gallery' ) ) {
166
  tiledGalleries.findAndSetupNewGalleries();
modules/videopress.php CHANGED
@@ -10,15 +10,10 @@
10
  * Additional Search Queries: video, videos, videopress
11
  */
12
 
13
- Jetpack::dns_prefetch( array(
14
- '//v0.wordpress.com',
15
- ) );
16
-
17
- /**
18
- * We won't have any videos less than sixty pixels wide. That would be silly.
19
- */
20
- define( 'VIDEOPRESS_MIN_WIDTH', 60 );
21
-
22
  include_once dirname( __FILE__ ) . '/videopress/utility-functions.php';
23
  include_once dirname( __FILE__ ) . '/videopress/shortcode.php';
24
  include_once dirname( __FILE__ ) . '/videopress/videopress.php';
 
 
 
 
10
  * Additional Search Queries: video, videos, videopress
11
  */
12
 
 
 
 
 
 
 
 
 
 
13
  include_once dirname( __FILE__ ) . '/videopress/utility-functions.php';
14
  include_once dirname( __FILE__ ) . '/videopress/shortcode.php';
15
  include_once dirname( __FILE__ ) . '/videopress/videopress.php';
16
+
17
+ if ( is_admin() ) {
18
+ include_once dirname(__FILE__) . '/videopress/editor-media-view.php';
19
+ }
modules/videopress/class.videopress-player.php CHANGED
@@ -143,14 +143,17 @@ class VideoPress_Player {
143
  * @return string HTML string or empty string if error
144
  */
145
  public function asXML() {
146
- if ( empty( $this->video ) || is_wp_error( $this->video ) )
147
  return '';
 
148
 
149
- if ( isset( $this->options['freedom'] ) && $this->options['freedom'] === true )
150
- $content = $this->html5_static();
151
- else
152
  $content = $this->flash_embed();
153
 
 
 
 
 
154
  return $this->html_wrapper( $content );
155
  }
156
 
@@ -162,20 +165,29 @@ class VideoPress_Player {
162
  public function asHTML() {
163
  if ( empty( $this->video ) ) {
164
  $content = '';
 
165
  } elseif ( is_wp_error( $this->video ) ) {
166
  $content = $this->error_message( $this->video );
167
- } elseif ( isset( $this->options['force_flash'] ) && $this->options['force_flash'] === true ) {
 
168
  $content = $this->flash_object();
169
- } elseif ( isset( $this->video->restricted_embed ) && $this->video->restricted_embed === true ) {
170
- if( $this->options['forcestatic'] )
 
 
171
  $content = $this->flash_object();
172
- else
 
173
  $content = $this->html5_dynamic();
174
- } elseif ( isset( $this->options['freedom'] ) && $this->options['freedom'] === true ) {
 
 
175
  $content = $this->html5_static();
 
176
  } else {
177
  $content = $this->html5_dynamic();
178
  }
 
179
  return $this->html_wrapper( $content );
180
  }
181
 
143
  * @return string HTML string or empty string if error
144
  */
145
  public function asXML() {
146
+ if ( empty( $this->video ) || is_wp_error( $this->video ) ) {
147
  return '';
148
+ }
149
 
150
+ if ( isset( $this->options['force_flash'] ) && true === $this->options['force_flash'] ) {
 
 
151
  $content = $this->flash_embed();
152
 
153
+ } else {
154
+ $content = $this->html5_static();
155
+ }
156
+
157
  return $this->html_wrapper( $content );
158
  }
159
 
165
  public function asHTML() {
166
  if ( empty( $this->video ) ) {
167
  $content = '';
168
+
169
  } elseif ( is_wp_error( $this->video ) ) {
170
  $content = $this->error_message( $this->video );
171
+
172
+ } elseif ( isset( $this->options['force_flash'] ) && true === $this->options['force_flash'] ) {
173
  $content = $this->flash_object();
174
+
175
+ } elseif ( isset( $this->video->restricted_embed ) && true === $this->video->restricted_embed ) {
176
+
177
+ if ( $this->options['forcestatic'] ) {
178
  $content = $this->flash_object();
179
+
180
+ } else {
181
  $content = $this->html5_dynamic();
182
+ }
183
+
184
+ } elseif ( isset( $this->options['freedom'] ) && true === $this->options['freedom'] ) {
185
  $content = $this->html5_static();
186
+
187
  } else {
188
  $content = $this->html5_dynamic();
189
  }
190
+
191
  return $this->html_wrapper( $content );
192
  }
193
 
modules/videopress/css/editor.css ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* VideoPress Settings Modal style overrides */
2
+ .mce-videopress-field-guid,
3
+ .mce-videopress-field-freedom,
4
+ .mce-videopress-field-flashonly {
5
+ display: none;
6
+ }
7
+
8
+ .mce-videopress-checkbox .mce-checkbox {
9
+ left: 120px !important;
10
+ width: 100% !important; /* assigning a full width so the label area is clickable */
11
+ }
12
+
13
+ .mce-videopress-checkbox .mce-label {
14
+ left: 150px !important;
15
+ }
16
+
17
+ .mce-videopress-checkbox .mce-label-unit {
18
+ position: absolute;
19
+ left: 210px;
20
+ top: 5px;
21
+ }
22
+
23
+ .mce-videopress-checkbox i.mce-i-checkbox {
24
+ background-color: #fff;
25
+ color: #1e8cbe;
26
+ }
27
+
28
+ .mce-videopress-checkbox .mce-i-checkbox:before {
29
+ display: inline-block;
30
+ vertical-align: middle;
31
+ width: 16px;
32
+ font: 400 21px/1 dashicons;
33
+ speak: none;
34
+ -webkit-font-smoothing: antialiased;
35
+ -moz-osx-font-smoothing: grayscale;
36
+ margin: -3px 0 0 -3px;
37
+ content: "\f147";
38
+ }
39
+
40
+ .mce-videopress-checkbox .mce-i-checkbox.mce-checked:before {
41
+ content: "\f147";
42
+ }
43
+
44
+ div[class*=mce-videopress-field] input[type=number] {
45
+ width: 70px !important;
46
+ left: 120px !important;
47
+ }
48
+
49
+ .mce-videopress-field-w .mce-label,
50
+ .mce-videopress-field-at .mce-label {
51
+ width: 115px !important;
52
+ text-align: right;
53
+ }
54
+
55
+ .mce-videopress-field-unit {
56
+ position: absolute;
57
+ left: 210px;
58
+ top: 5px;
59
+ }
modules/videopress/{videopress-editor-style.css → css/videopress-editor-style.css} RENAMED
File without changes
modules/videopress/editor-media-view.php ADDED
@@ -0,0 +1,213 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * WordPress Shortcode Editor View JS Code
5
+ */
6
+ function videopress_handle_editor_view_js() {
7
+ global $content_width;
8
+ $current_screen = get_current_screen();
9
+ if ( ! isset( $current_screen->id ) || $current_screen->base !== 'post' ) {
10
+ return;
11
+ }
12
+
13
+ add_action( 'admin_print_footer_scripts', 'videopress_editor_view_js_templates' );
14
+
15
+ wp_enqueue_style( 'videopress-editor-ui', plugins_url( 'css/editor.css', __FILE__ ) );
16
+ wp_enqueue_script( 'videopress-editor-view', plugins_url( 'js/editor-view.js', __FILE__ ), array( 'wp-util', 'jquery' ), false, true );
17
+ wp_localize_script( 'videopress-editor-view', 'vpEditorView', array(
18
+ 'home_url_host' => parse_url( home_url(), PHP_URL_HOST ),
19
+ 'min_content_width' => VIDEOPRESS_MIN_WIDTH,
20
+ 'content_width' => $content_width,
21
+ 'modal_labels' => array(
22
+ 'title' => esc_html__( 'VideoPress Shortcode', 'jetpack' ),
23
+ 'guid' => esc_html__( 'Video ID', 'jetpack' ),
24
+ 'w' => esc_html__( 'Video Width', 'jetpack' ),
25
+ 'w_unit' => esc_html__( 'pixels', 'jetpack' ),
26
+ /* Translators: example of usage of this is "Start Video After 10 seconds" */
27
+ 'at' => esc_html__( 'Start Video After', 'jetpack' ),
28
+ 'at_unit' => esc_html__( 'seconds', 'jetpack' ),
29
+ 'hd' => esc_html__( 'High definition on by default', 'jetpack' ),
30
+ 'permalink' => esc_html__( 'Link the video title to its URL on VideoPress.com', 'jetpack' ),
31
+ 'autoplay' => esc_html__( 'Autoplay video on page load', 'jetpack' ),
32
+ 'loop' => esc_html__( 'Loop video playback', 'jetpack' ),
33
+ 'freedom' => esc_html__( 'Use only Open Source codecs (may degrade performance)', 'jetpack' ),
34
+ 'flashonly' => esc_html__( 'Use legacy Flash Player (not recommended)', 'jetpack' ),
35
+ )
36
+ ) );
37
+
38
+ add_editor_style( plugins_url( 'css/videopress-editor-style.css', __FILE__ ) );
39
+ }
40
+ add_action( 'admin_notices', 'videopress_handle_editor_view_js' );
41
+
42
+ /**
43
+ * WordPress Editor Views
44
+ */
45
+ function videopress_editor_view_js_templates() {
46
+ /**
47
+ * This template uses the following parameters, and displays the video as an iframe:
48
+ * - data.guid // The guid of the video.
49
+ * - data.width // The width of the iframe.
50
+ * - data.height // The height of the iframe.
51
+ * - data.urlargs // Arguments serialized into a get string.
52
+ *
53
+ * In addition, the calling script will need to ensure that the following
54
+ * JS file is added to the header of the editor iframe:
55
+ * - https://s0.wp.com/wp-content/plugins/video/assets/js/next/videopress-iframe.js
56
+ */
57
+ ?>
58
+ <script type="text/html" id="tmpl-videopress_iframe_vnext">
59
+ <div class="tmpl-videopress_iframe_next" style="max-height:{{ data.height }}px;">
60
+ <div class="videopress-editor-wrapper" style="padding-top:{{ data.ratio }}%;">
61
+ <iframe style="display: block;" width="{{ data.width }}" height="{{ data.height }}" src="https://videopress.com/embed/{{ data.guid }}?{{ data.urlargs }}" frameborder='0' allowfullscreen></iframe>
62
+ </div>
63
+ </div>
64
+ </script>
65
+ <?php
66
+ }
67
+
68
+ /*************************************************\
69
+ | This is the chunk that handles overriding core |
70
+ | media stuff so VideoPress can display natively. |
71
+ \*************************************************/
72
+
73
+ /**
74
+ * Media Grid:
75
+ * Filter out any videopress video posters that we've downloaded,
76
+ * so that they don't seem to display twice.
77
+ */
78
+ add_filter( 'ajax_query_attachments_args', 'videopress_ajax_query_attachments_args' );
79
+ function videopress_ajax_query_attachments_args( $args ) {
80
+ $meta_query = array(
81
+ array(
82
+ 'key' => 'videopress_poster_image',
83
+ 'compare' => 'NOT EXISTS',
84
+ ),
85
+ );
86
+
87
+ // If there was already a meta query, let's AND it via
88
+ // nesting it with our new one. No need to specify the
89
+ // relation, as it defaults to AND.
90
+ if ( ! empty( $args['meta_query'] ) ) {
91
+ $meta_query[] = $args['meta_query'];
92
+ }
93
+ $args['meta_query'] = $meta_query;
94
+
95
+ return $args;
96
+ }
97
+
98
+ /**
99
+ * Media List:
100
+ * Do the same as ^^ but for the list view.
101
+ */
102
+ add_action( 'pre_get_posts', 'videopress_media_list_table_query' );
103
+ function videopress_media_list_table_query( $query ) {
104
+ if ( is_admin() && $query->is_main_query() && ( 'upload' === get_current_screen()->id ) ) {
105
+ $meta_query = array(
106
+ array(
107
+ 'key' => 'videopress_poster_image',
108
+ 'compare' => 'NOT EXISTS',
109
+ ),
110
+ );
111
+
112
+ if ( $old_meta_query = $query->get( 'meta_query' ) ) {
113
+ $meta_query[] = $old_meta_query;
114
+ }
115
+
116
+ $query->set( 'meta_query', $meta_query );
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Make sure that any Video that has a VideoPress GUID passes that data back.
122
+ */
123
+ add_filter( 'wp_prepare_attachment_for_js', 'videopress_prepare_attachment_for_js' );
124
+ function videopress_prepare_attachment_for_js( $post ) {
125
+ if ( 'video' === $post['type'] ) {
126
+ $guid = get_post_meta( $post['id'], 'videopress_guid' );
127
+ if ( $guid ) {
128
+ $post['videopress_guid'] = $guid;
129
+ }
130
+ }
131
+ return $post;
132
+ }
133
+
134
+ /**
135
+ * Wherever the Media Modal is deployed, also deploy our overrides.
136
+ */
137
+ add_action( 'wp_enqueue_media', 'add_videopress_media_overrides' );
138
+ function add_videopress_media_overrides() {
139
+ add_action( 'admin_print_footer_scripts', 'videopress_override_media_templates', 11 );
140
+ }
141
+
142
+ /**
143
+ * Our video overrides!
144
+ *
145
+ * We have a template for the iframe to get injected.
146
+ */
147
+ function videopress_override_media_templates(){
148
+ ?>
149
+ <script type="text/html" id="tmpl-videopress_iframe_vnext">
150
+ <iframe style="display: block; max-width: 100%;" width="{{ data.width }}" height="{{ data.height }}" src="https://videopress.com/embed/{{ data.guid }}?{{ data.urlargs }}" frameborder='0' allowfullscreen></iframe>
151
+ </script>
152
+ <script>
153
+ (function( media ){
154
+ // This handles the media library modal attachment details display.
155
+ if ( 'undefined' !== typeof media.view.Attachment.Details.TwoColumn ) {
156
+ var TwoColumn = media.view.Attachment.Details.TwoColumn,
157
+ old_render = TwoColumn.prototype.render,
158
+ vp_template = wp.template('videopress_iframe_vnext');
159
+
160
+ TwoColumn.prototype.render = function() {
161
+ // Have the original renderer run first.
162
+ old_render.apply( this, arguments );
163
+
164
+ // Now our stuff!
165
+ if ( 'video' === this.model.get('type') ) {
166
+ if ( this.model.get('videopress_guid') ) {
167
+ this.$('.attachment-media-view .thumbnail-video').html( vp_template( {
168
+ guid : this.model.get('videopress_guid'),
169
+ width : this.model.get('width'),
170
+ height : this.model.get('height')
171
+ }));
172
+ }
173
+ }
174
+ };
175
+ } else { /* console.log( 'media.view.Attachment.Details.TwoColumn undefined' ); */ }
176
+
177
+ // This handles the recreating of the core video shortcode when editing the mce embed.
178
+ if ( 'undefined' !== typeof media.video ) {
179
+ media.video.defaults.videopress_guid = '';
180
+
181
+ // For some reason, even though we're not currently changing anything, the following proxy
182
+ // function is necessary to include the above default `videopress_guid` param. ¯\_(ツ)_/¯
183
+ var old_video_shortcode = media.video.shortcode;
184
+ media.video.shortcode = function( model ) {
185
+ // model.videopress_guid = 'FOOBAR';
186
+ return old_video_shortcode( model );
187
+ };
188
+ } else { /* console.log( 'media.video undefined' ); */ }
189
+
190
+ })( wp.media );
191
+ </script>
192
+ <?php
193
+ }
194
+
195
+ /**
196
+ * Properly inject VideoPress data into Core shortcodes, and
197
+ * generate videopress shortcodes for purely remote videos.
198
+ */
199
+ add_filter( 'media_send_to_editor', 'videopress_media_send_to_editor', 10, 3 );
200
+ function videopress_media_send_to_editor( $html, $id, $attachment ) {
201
+ $videopress_guid = get_post_meta( $id, 'videopress_guid', true );
202
+ if ( $videopress_guid && videopress_is_valid_guid( $videopress_guid ) ) {
203
+ if ( '[video ' === substr( $html, 0, 7 ) ) {
204
+ $replace = sprintf( ' videopress_guid="%1$s"][/video]', esc_attr( $videopress_guid ) );
205
+ $html = str_replace( '][/video]', $replace, $html );
206
+ } elseif ( '<a href=' === substr( $html, 0, 8 ) ) {
207
+ // We got here because `wp_attachment_is()` returned false for
208
+ // video, because there isn't a local copy of the file.
209
+ $html = sprintf( '[videopress %1$s]', esc_attr( $videopress_guid ) );
210
+ }
211
+ }
212
+ return $html;
213
+ }
modules/videopress/js/videopress-admin.js CHANGED
@@ -1,5 +1,5 @@
1
  /* jshint onevar: false, smarttabs: true, devel: true */
2
- /* global VideoPressAdminSettings, setUserSetting */
3
 
4
  /**
5
  * VideoPress Admin
1
  /* jshint onevar: false, smarttabs: true, devel: true */
2
+ /* global VideoPressAdminSettings, setUserSetting, JSON */
3
 
4
  /**
5
  * VideoPress Admin
modules/videopress/shortcode.php CHANGED
@@ -139,117 +139,52 @@ function videopress_add_oembed_for_parameter( $oembed_provider ) {
139
  add_filter( 'oembed_fetch_url', 'videopress_add_oembed_for_parameter' );
140
 
141
  /**
142
- * WordPress Shortcode Editor View JS Code
143
- */
144
- function videopress_handle_editor_view_js() {
145
- global $content_width;
146
- $current_screen = get_current_screen();
147
- if ( ! isset( $current_screen->id ) || $current_screen->base !== 'post' ) {
148
- return;
 
 
 
 
 
 
 
 
149
  }
150
 
151
- add_action( 'admin_print_footer_scripts', 'videopress_editor_view_js_templates' );
152
-
153
- wp_enqueue_script( 'videopress-editor-view', plugins_url( 'js/editor-view.js', __FILE__ ), array( 'wp-util', 'jquery' ), false, true );
154
- wp_localize_script( 'videopress-editor-view', 'vpEditorView', array(
155
- 'home_url_host' => parse_url( home_url(), PHP_URL_HOST ),
156
- 'min_content_width' => VIDEOPRESS_MIN_WIDTH,
157
- 'content_width' => $content_width,
158
- 'modal_labels' => array(
159
- 'title' => esc_html__( 'VideoPress Shortcode', 'jetpack' ),
160
- 'guid' => esc_html__( 'Video ID', 'jetpack' ),
161
- 'w' => esc_html__( 'Video Width', 'jetpack' ),
162
- 'w_unit' => esc_html__( 'pixels', 'jetpack' ),
163
- /* Translators: example of usage of this is "Start Video After 10 seconds" */
164
- 'at' => esc_html__( 'Start Video After', 'jetpack' ),
165
- 'at_unit' => esc_html__( 'seconds', 'jetpack' ),
166
- 'hd' => esc_html__( 'High definition on by default', 'jetpack' ),
167
- 'permalink' => esc_html__( 'Link the video title to its URL on VideoPress.com', 'jetpack' ),
168
- 'autoplay' => esc_html__( 'Autoplay video on page load', 'jetpack' ),
169
- 'loop' => esc_html__( 'Loop video playback', 'jetpack' ),
170
- 'freedom' => esc_html__( 'Use only Open Source codecs (may degrade performance)', 'jetpack' ),
171
- 'flashonly' => esc_html__( 'Use legacy Flash Player (not recommended)', 'jetpack' ),
172
- )
173
- ) );
174
-
175
- add_editor_style( plugins_url( 'videopress-editor-style.css', __FILE__ ) );
176
- }
177
- add_action( 'admin_notices', 'videopress_handle_editor_view_js' );
178
-
179
- /**
180
- * WordPress Editor Views
181
- */
182
- function videopress_editor_view_js_templates() {
183
- /**
184
- * This template uses the following parameters, and displays the video as an iframe:
185
- * - data.guid // The guid of the video.
186
- * - data.width // The width of the iframe.
187
- * - data.height // The height of the iframe.
188
- * - data.urlargs // Arguments serialized into a get string.
189
- *
190
- * In addition, the calling script will need to ensure that the following
191
- * JS file is added to the header of the editor iframe:
192
- * - https://s0.wp.com/wp-content/plugins/video/assets/js/next/videopress-iframe.js
193
- */
194
- ?>
195
- <script type="text/html" id="tmpl-videopress_iframe_vnext">
196
- <div class="tmpl-videopress_iframe_next" style="max-height:{{ data.height }}px;">
197
- <div class="videopress-editor-wrapper" style="padding-top:{{ data.ratio }}%;">
198
- <iframe style="display: block;" width="{{ data.width }}" height="{{ data.height }}" src="https://videopress.com/embed/{{ data.guid }}?{{ data.urlargs }}" frameborder='0' allowfullscreen></iframe>
199
- </div>
200
- </div>
201
- </script>
202
-
203
- <!-- VideoPress Settings Modal style overrides -->
204
- <style type="text/css">
205
- .mce-videopress-field-guid, .mce-videopress-field-freedom, .mce-videopress-field-flashonly {
206
- display: none;
207
- }
208
- .mce-videopress-checkbox .mce-checkbox {
209
- left: 120px !important;
210
- width: 100% !important; /* assigning a full width so the label area is clickable */
211
- }
212
 
213
- .mce-videopress-checkbox .mce-label {
214
- left: 150px !important;
215
- }
216
- .mce-videopress-checkbox .mce-label-unit {
217
- position: absolute;
218
- left: 210px;
219
- top: 5px;
220
- }
221
- .mce-videopress-checkbox i.mce-i-checkbox {
222
- background-color: #fff;
223
- color: #1e8cbe;
224
  }
225
- .mce-videopress-checkbox .mce-i-checkbox:before {
226
- display: inline-block;
227
- vertical-align: middle;
228
- width: 16px;
229
- font: 400 21px/1 dashicons;
230
- speak: none;
231
- -webkit-font-smoothing: antialiased;
232
- -moz-osx-font-smoothing: grayscale;
233
- margin: -3px 0 0 -3px;
234
- content: "\f147";
235
  }
236
- .mce-videopress-checkbox .mce-i-checkbox.mce-checked:before {
237
- content: "\f147";
238
  }
239
- div[class*=mce-videopress-field] input[type=number] {
240
- width: 70px !important;
241
- left: 120px !important;
242
- }
243
- .mce-videopress-field-w .mce-label,
244
- .mce-videopress-field-at .mce-label {
245
- width: 115px !important;
246
- text-align: right;
247
- }
248
- .mce-videopress-field-unit {
249
- position: absolute;
250
- left: 210px;
251
- top: 5px;
252
- }
253
- </style>
254
- <?php
255
  }
 
 
 
 
 
 
139
  add_filter( 'oembed_fetch_url', 'videopress_add_oembed_for_parameter' );
140
 
141
  /**
142
+ * An intermediary shortcode parser for the Core `[video]` shortcode.
143
+ *
144
+ * This lets us convert legacy video embeds over to VideoPress embeds,
145
+ * if the video files have been uploaded and transcoded.
146
+ *
147
+ * @param $attr
148
+ *
149
+ * @return string|void
150
+ * /
151
+ function videopress_shortcode_override_for_core_shortcode( $raw_attr, $contents, $tag ) {
152
+ $attr = $raw_attr;
153
+ $videopress_guid = false;
154
+
155
+ if ( isset( $attr['videopress_guid'] ) ) {
156
+ $videopress_guid = $attr['videopress_guid'];
157
  }
158
 
159
+ // If we can find a local media item from the provided url…
160
+ $media_id = videopress_get_attachment_id_by_url( $attr['src'] );
161
+ if ( $media_id ) {
162
+ // And that local media item has a VideoPress GUID attached to it…
163
+ $videopress_guid = get_post_meta( $media_id, 'videopress_guid', true );
164
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
165
 
166
+ if ( $videopress_guid ) {
167
+ $videopress_attr = array( $videopress_guid );
168
+ if ( $attr['width'] ) {
169
+ $videopress_attr['w'] = (int) $attr['width'];
 
 
 
 
 
 
 
170
  }
171
+ if ( $attr['autoplay'] ) {
172
+ $videopress_attr['autoplay'] = $attr['autoplay'];
 
 
 
 
 
 
 
 
173
  }
174
+ if ( $attr['loop'] ) {
175
+ $videopress_attr['loop'] = $attr['loop'];
176
  }
177
+
178
+ // Then display the VideoPress version of the stored GUID!
179
+ return videopress_shortcode_callback( $videopress_attr );
180
+ }
181
+
182
+ // Nothing else caught, so fall back to the core shortcode.
183
+ return call_user_func( $GLOBALS['vp_original_video_shortcode_callback'], $raw_attr, $contents, $tag );
 
 
 
 
 
 
 
 
 
184
  }
185
+ // The callback should nearly always be `wp_video_shortcode` unless some other plugin
186
+ // has overridden it similarly to what we're doing here.
187
+ $GLOBALS['vp_original_video_shortcode_callback'] = $GLOBALS['shortcode_tags']['video'];
188
+ remove_shortcode( 'video' );
189
+ add_shortcode( 'video', 'videopress_shortcode_override_for_core_shortcode' );
190
+ /**/
modules/videopress/utility-functions.php CHANGED
@@ -1,4 +1,8 @@
1
  <?php
 
 
 
 
2
 
3
  /**
4
  * Validate user-supplied guid values against expected inputs
@@ -97,3 +101,104 @@ function videopress_get_attachment_id_by_url( $url ) {
97
  }
98
  return false;
99
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * We won't have any videos less than sixty pixels wide. That would be silly.
4
+ */
5
+ defined( 'VIDEOPRESS_MIN_WIDTH' ) or define( 'VIDEOPRESS_MIN_WIDTH', 60 );
6
 
7
  /**
8
  * Validate user-supplied guid values against expected inputs
101
  }
102
  return false;
103
  }
104
+
105
+ /**
106
+ * Similar to `media_sideload_image` -- but returns an ID.
107
+ *
108
+ * @param $url
109
+ * @param $attachment_id
110
+ *
111
+ * @return int|mixed|object|WP_Error
112
+ */
113
+ function videopress_download_poster_image( $url, $attachment_id ) {
114
+ // Set variables for storage, fix file filename for query strings.
115
+ preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $url, $matches );
116
+ if ( ! $matches ) {
117
+ return new WP_Error( 'image_sideload_failed', __( 'Invalid image URL' ) );
118
+ }
119
+
120
+ $file_array = array();
121
+ $file_array['name'] = basename( $matches[0] );
122
+ $file_array['tmp_name'] = download_url( $url );
123
+
124
+ // If error storing temporarily, return the error.
125
+ if ( is_wp_error( $file_array['tmp_name'] ) ) {
126
+ return $file_array['tmp_name'];
127
+ }
128
+
129
+ // Do the validation and storage stuff.
130
+ $thumbnail_id = media_handle_sideload( $file_array, $attachment_id, null );
131
+
132
+ // Flag it as poster image, so we can exclude it from display.
133
+ update_post_meta( $thumbnail_id, 'videopress_poster_image', 1 );
134
+
135
+ return $thumbnail_id;
136
+ }
137
+
138
+ /**
139
+ * Creates a local media library item of a remote VideoPress video.
140
+ *
141
+ * @param $guid
142
+ * @param int $parent_id
143
+ *
144
+ * @return int|object
145
+ */
146
+ function create_local_media_library_for_videopress_guid( $guid, $parent_id = 0 ) {
147
+ $vp_data = videopress_get_video_details( $guid );
148
+ if ( ! $vp_data || is_wp_error( $vp_data ) ) {
149
+ return $vp_data;
150
+ }
151
+
152
+ $args = array(
153
+ 'post_date' => $vp_data->upload_date,
154
+ 'post_title' => wp_kses( $vp_data->title, array() ),
155
+ 'post_content' => wp_kses( $vp_data->description, array() ),
156
+ 'post_mime_type' => 'video/videopress',
157
+ 'guid' => sprintf( 'https://videopress.com/v/%s', $guid ),
158
+ );
159
+
160
+ $attachment_id = wp_insert_attachment( $args, null, $parent_id );
161
+
162
+ if ( ! is_wp_error( $attachment_id ) ) {
163
+ update_post_meta( $attachment_id, 'videopress_guid', $guid );
164
+ wp_update_attachment_metadata( $attachment_id, array(
165
+ 'width' => $vp_data->width,
166
+ 'height' => $vp_data->height,
167
+ ) );
168
+
169
+ $thumbnail_id = videopress_download_poster_image( $vp_data->poster, $attachment_id );
170
+ update_post_meta( $attachment_id, '_thumbnail_id', $thumbnail_id );
171
+ }
172
+
173
+ return $attachment_id;
174
+ }
175
+
176
+ if ( defined( 'WP_CLI' ) && WP_CLI ) {
177
+ /**
178
+ * Manage and import VideoPress videos.
179
+ */
180
+ class VideoPress_CLI extends WP_CLI_Command {
181
+ /**
182
+ * Import a VideoPress Video
183
+ *
184
+ * ## OPTIONS
185
+ *
186
+ * <guid>: Import the video with the specified guid
187
+ *
188
+ * ## EXAMPLES
189
+ *
190
+ * wp videopress import kUJmAcSf
191
+ *
192
+ */
193
+ public function import( $args ) {
194
+ $guid = $args[0];
195
+ $attachment_id = create_local_media_library_for_videopress_guid( $guid );
196
+ if ( $attachment_id && ! is_wp_error( $attachment_id ) ) {
197
+ WP_CLI::success( sprintf( __( 'The video has been imported as Attachment ID %d', 'jetpack' ), $attachment_id ) );
198
+ } else {
199
+ WP_CLI::error( __( 'An error has been encountered.', 'jetpack' ) );
200
+ }
201
+ }
202
+ }
203
+ WP_CLI::add_command( 'videopress', 'VideoPress_CLI' );
204
+ }
modules/videopress/videopress.php CHANGED
@@ -59,6 +59,7 @@ class Jetpack_VideoPress {
59
  }
60
 
61
  add_filter( 'videopress_shortcode_options', array( $this, 'videopress_shortcode_options' ) );
 
62
  }
63
 
64
  function wp_ajax_videopress_get_upload_token() {
@@ -731,6 +732,114 @@ class Jetpack_VideoPress {
731
  return $options;
732
  }
733
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
734
  }
735
 
736
  // Initialize the module.
59
  }
60
 
61
  add_filter( 'videopress_shortcode_options', array( $this, 'videopress_shortcode_options' ) );
62
+ add_filter( 'jetpack_xmlrpc_methods', array( $this, 'xmlrpc_methods' ) );
63
  }
64
 
65
  function wp_ajax_videopress_get_upload_token() {
732
  return $options;
733
  }
734
 
735
+ /**
736
+ * Adds additional methods the WordPress xmlrpc API for handling VideoPress specific features
737
+ *
738
+ * @param array $methods
739
+ * @return array
740
+ */
741
+ public function xmlrpc_methods( $methods ) {
742
+
743
+ $methods['jetpack.createMediaItem'] = array( $this, 'xmlrpc_create_media_item' );
744
+ $methods['jetpack.updateVideoPressInfo'] = array( $this, 'xmlrpc_update_videopress_info' );
745
+
746
+ return $methods;
747
+ }
748
+
749
+ /**
750
+ * Endpoint to allow the transcoding session to send updated information about the VideoPress video when it completes a stage of transcoding.
751
+ *
752
+ * @param array $vp_info
753
+ *
754
+ * @return array|bool
755
+ */
756
+ public function xmlrpc_update_videopress_info( $vp_info ) {
757
+
758
+ $errors = null;
759
+ foreach ( $vp_info as $vp_item ) {
760
+ $id = $vp_item['post_id'];
761
+ $guid = $vp_item['guid'];
762
+
763
+ $post = get_post( $id );
764
+
765
+ if ( ! $post ) {
766
+ $errors[] = array(
767
+ 'id' => $id,
768
+ 'error' => 'Post not found',
769
+ );
770
+
771
+ continue;
772
+ }
773
+
774
+ $post->guid = $vp_item['original'];
775
+ $post->file = $vp_item['original'];
776
+
777
+ wp_update_post( $post );
778
+
779
+ // Update the vp guid and set it to a dirrect meta property.
780
+ update_post_meta( $id, 'videopress_guid', $guid );
781
+
782
+ $meta = wp_get_attachment_metadata( $post->ID );
783
+ $meta['width'] = $vp_item['width'];
784
+ $meta['height'] = $vp_item['height'];
785
+ $meta['original']['url'] = $vp_item['original'];
786
+ $meta['videopress'] = $vp_item;
787
+ $meta['videopress']['url'] = 'https://videopress.com/v/' . $guid;
788
+
789
+ // TODO: Add poster updating.
790
+
791
+ wp_update_attachment_metadata( $post->ID, $meta );
792
+ }
793
+
794
+ if ( count( $errors ) > 0 ) {
795
+ return array( 'errors' => $errors );
796
+
797
+ } else {
798
+ return true;
799
+ }
800
+ }
801
+
802
+ /**
803
+ * This is used by the WPCOM VideoPress uploader in order to create a media item with
804
+ * specific meta data about an uploaded file. After this, the transcoding session will
805
+ * update the meta information via the xmlrpc_update_videopress_info() method.
806
+ *
807
+ * Note: This method technically handles the creation of multiple media objects, though
808
+ * in practice this is never done.
809
+ *
810
+ * @param array $media
811
+ *
812
+ * @return array
813
+ */
814
+ public function xmlrpc_create_media_item( $media ) {
815
+ $created_items = array();
816
+
817
+ foreach ( $media as $media_item ) {
818
+ $post = array(
819
+ 'post_type' => 'attachment',
820
+ 'post_mime_type' => 'video/videopress',
821
+ 'post_title' => sanitize_title( basename( $media_item['url'] ) ),
822
+ 'post_content' => '',
823
+ );
824
+
825
+ $media_id = wp_insert_post( $post );
826
+
827
+ wp_update_attachment_metadata( $media_id, array(
828
+ 'original' => array(
829
+ 'url' => $media_item['url'],
830
+ 'file' => $media_item['file'],
831
+ 'mime_type' => $media_item['type'],
832
+ ),
833
+ ) );
834
+
835
+ $created_items[] = array(
836
+ 'id' => $media_id,
837
+ 'post' => get_post( $media_id ),
838
+ );
839
+ }
840
+
841
+ return array( 'media' => $created_items );
842
+ }
843
  }
844
 
845
  // Initialize the module.
modules/widgets/contact-info.php CHANGED
@@ -18,9 +18,7 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
18
 
19
  /**
20
  * Constructor
21
- *
22
- * @return void
23
- **/
24
  function __construct() {
25
  $widget_ops = array(
26
  'classname' => 'widget_contact_info',
@@ -44,8 +42,22 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
44
  * Enqueue scripts and styles.
45
  */
46
  public function enqueue_scripts() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  wp_enqueue_script( 'jquery' );
48
- wp_enqueue_script( 'google-maps', 'https://maps.googleapis.com/maps/api/js?sensor=false' );
49
  wp_enqueue_script( 'contact-info-map-js', plugins_url( 'contact-info/contact-info-map.js', __FILE__ ), array( 'jquery', 'google-maps' ), 20150127 );
50
  wp_enqueue_style( 'contact-info-map-css', plugins_url( 'contact-info/contact-info-map.css', __FILE__ ), null, 20150127 );
51
  }
@@ -68,22 +80,23 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
68
  'lon' => null
69
  );
70
  }
 
71
  /**
72
  * Outputs the HTML for this widget.
73
  *
74
- * @param array An array of standard parameters for widgets in this theme
75
- * @param array An array of settings for this widget instance
 
76
  * @return void Echoes it's output
77
  **/
78
  function widget( $args, $instance ) {
79
  $instance = wp_parse_args( $instance, $this->defaults() );
80
 
81
- extract( $args, EXTR_SKIP );
82
 
83
- echo $before_widget;
84
-
85
- if ( $instance['title'] != '' )
86
- echo $before_title . $instance['title'] . $after_title;
87
 
88
  /**
89
  * Fires at the beginning of the Contact Info widget, after the title.
@@ -94,10 +107,7 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
94
  */
95
  do_action( 'jetpack_contact_info_widget_start' );
96
 
97
- $map_link = 0;
98
-
99
-
100
- if ( $instance['address'] != '' ) {
101
 
102
  $showmap = $instance['showmap'];
103
 
@@ -112,27 +122,21 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
112
  $map_link = $this->build_map_link( $instance['address'] );
113
 
114
  echo '<div class="confit-address"><a href="' . esc_url( $map_link ) . '" target="_blank">' . str_replace( "\n", "<br/>", esc_html( $instance['address'] ) ) . "</a></div>";
115
-
116
-
117
  }
118
 
119
-
120
- if ( $instance['phone'] != '' ) {
121
-
122
- if( wp_is_mobile() ) {
123
- echo '<div class="confit-phone"><a href="'. esc_url( 'tel:'. $instance['phone'] ) . '">' . esc_html( $instance['phone'] ) . "</a></div>";
124
- } else {
125
  echo '<div class="confit-phone">' . esc_html( $instance['phone'] ) . '</div>';
126
  }
127
-
128
  }
129
 
130
-
131
- if ( $instance['hours'] != '' ) {
132
  echo '<div class="confit-hours">' . str_replace( "\n", "<br/>", esc_html( $instance['hours'] ) ) . "</div>";
133
  }
134
 
135
-
136
  /**
137
  * Fires at the end of Contact Info widget.
138
  *
@@ -142,29 +146,35 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
142
  */
143
  do_action( 'jetpack_contact_info_widget_end' );
144
 
145
-
146
- echo $after_widget;
147
-
148
  }
149
 
150
 
151
  /**
152
  * Deals with the settings when they are saved by the admin. Here is
153
  * where any validation should be dealt with.
154
- **/
 
 
 
 
 
155
  function update( $new_instance, $old_instance ) {
156
  $update_lat_lon = false;
157
- if ( $this->urlencode_address( $old_instance['address'] ) != $this->urlencode_address( $new_instance['address'] ) ) {
 
 
 
158
  $update_lat_lon = true;
159
  }
160
 
161
- $instance = array();
162
- $instance['title'] = wp_kses( $new_instance['title'], array() );
163
  $instance['address'] = wp_kses( $new_instance['address'], array() );
164
- $instance['phone'] = wp_kses( $new_instance['phone'], array() );
165
- $instance['hours'] = wp_kses( $new_instance['hours'], array() );
166
- $instance['lat'] = isset( $old_instance['lat'] ) ? floatval( $old_instance['lat'] ) : 0;
167
- $instance['lon'] = isset( $old_instance['lon'] ) ? floatval( $old_instance['lon'] ) : 0;
168
 
169
  if ( ! $instance['lat'] || ! $instance['lon'] ) {
170
  $update_lat_lon = true;
@@ -174,8 +184,14 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
174
 
175
  // Get the lat/lon of the user specified address.
176
  $address = $this->urlencode_address( $instance['address'] );
177
- $path = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=" . $address;
178
- $json = wp_remote_retrieve_body( wp_remote_get( $path ) );
 
 
 
 
 
 
179
 
180
  if ( ! $json ) {
181
  // The read failed :(
@@ -185,12 +201,13 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
185
 
186
  $json_obj = json_decode( $json );
187
 
188
- if ( $err = $json_obj->status == "ZERO_RESULTS" ) {
189
  // The address supplied does not have a matching lat / lon.
190
  // No map is available.
191
  $instance['lat'] = "0";
192
  $instance['lon'] = "0";
193
- } else {
 
194
 
195
  $loc = $json_obj->results[0]->geometry->location;
196
 
@@ -204,7 +221,8 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
204
 
205
  if ( ! isset( $new_instance['showmap'] ) ) {
206
  $instance['showmap'] = 0;
207
- } else {
 
208
  $instance['showmap'] = intval( $new_instance['showmap'] );
209
  }
210
 
@@ -214,55 +232,77 @@ if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
214
 
215
  /**
216
  * Displays the form for this widget on the Widgets page of the WP Admin area.
217
- **/
 
 
 
 
218
  function form( $instance ) {
219
  $instance = wp_parse_args( $instance, $this->defaults() );
220
- extract( $instance );
221
-
222
- $disabled = !$this->has_good_map( $instance );
223
- ?>
224
- <p><label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
225
-
226
- <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /></p>
227
-
228
- <p><label for="<?php echo esc_attr( $this->get_field_id( 'address' ) ); ?>"><?php esc_html_e( 'Address:', 'jetpack' ); ?></label>
229
- <textarea class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'address' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'address' ) ); ?>"><?php echo esc_textarea( $address ); ?></textarea>
230
- <?php
231
- if ( $this->has_good_map( $instance ) ) {
232
- ?>
233
- <input class="" id="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'showmap' ) ); ?>" value="1" type="checkbox" <?php checked( $showmap , 1); ?> />
234
- <label for="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>"><?php esc_html_e( 'Show map', 'jetpack' ); ?></label></p>
235
- <?php
236
- } else {
237
- ?>
238
- <span class="error-message"><?php _e( 'Sorry. We can not plot this address. A map will not be displayed. Is the address formatted correctly?', 'jetpack' ); ?></span></p>
239
- <input id="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'showmap' ) ); ?>" value="<?php echo( intval( $instance['showmap'] ) ); ?>" type="hidden" />
240
- <?php
241
- }
242
- ?>
243
-
244
- <p><label for="<?php echo esc_attr( $this->get_field_id( 'phone' ) ); ?>"><?php esc_html_e( 'Phone:', 'jetpack' ); ?></label>
245
- <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'phone' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'phone' ) ); ?>" type="text" value="<?php echo esc_attr( $phone ); ?>" /></p>
246
-
247
- <p><label for="<?php echo esc_attr( $this->get_field_id( 'hours' ) ); ?>"><?php esc_html_e( 'Hours:', 'jetpack' ); ?></label>
248
-
249
- <textarea class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'hours' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'hours' ) ); ?>"><?php echo esc_textarea( $hours ); ?></textarea></p>
250
-
251
- <?php
 
 
 
252
  }
253
 
254
 
 
 
 
 
 
 
 
255
  function build_map_link( $address ) {
256
  // Google map urls have lots of available params but zoom (z) and query (q) are enough.
257
  return "http://maps.google.com/maps?z=16&q=" . $this->urlencode_address( $address );
258
  }
259
 
260
 
 
 
 
 
 
 
 
 
261
  function build_map( $lat, $lon ) {
262
  $this->enqueue_scripts();
263
 
264
- $lat = esc_attr( $lat );
265
- $lon = esc_attr( $lon );
266
  $html = <<<EOT
267
  <div class="contact-map">
268
  <input type="hidden" class="contact-info-map-lat" value="$lat" />
@@ -273,7 +313,13 @@ EOT;
273
  return $html;
274
  }
275
 
276
-
 
 
 
 
 
 
277
  function urlencode_address( $address ) {
278
 
279
  $address = strtolower( $address );
@@ -284,10 +330,16 @@ EOT;
284
  return $address;
285
  }
286
 
287
-
 
 
 
 
 
 
288
  function has_good_map( $instance ) {
289
  // The lat and lon of an address that could not be plotted will have values of 0 and 0.
290
- return ! ( $instance['lat'] == "0" && $instance['lon'] == "0" );
291
  }
292
 
293
  }
18
 
19
  /**
20
  * Constructor
21
+ */
 
 
22
  function __construct() {
23
  $widget_ops = array(
24
  'classname' => 'widget_contact_info',
42
  * Enqueue scripts and styles.
43
  */
44
  public function enqueue_scripts() {
45
+ $google_url = 'https://maps.googleapis.com/maps/api/js';
46
+ /**
47
+ * Set a Google Maps API Key.
48
+ *
49
+ * @since 4.1.0
50
+ *
51
+ * @param string $key Google Maps API Key
52
+ */
53
+ $key = apply_filters( 'jetpack_google_maps_api_key', null );
54
+
55
+ if ( ! empty( $key ) ) {
56
+ $google_url = add_query_arg( 'key', $key, $google_url );
57
+ }
58
+
59
  wp_enqueue_script( 'jquery' );
60
+ wp_enqueue_script( 'google-maps', esc_url( $google_url, null, null ) );
61
  wp_enqueue_script( 'contact-info-map-js', plugins_url( 'contact-info/contact-info-map.js', __FILE__ ), array( 'jquery', 'google-maps' ), 20150127 );
62
  wp_enqueue_style( 'contact-info-map-css', plugins_url( 'contact-info/contact-info-map.css', __FILE__ ), null, 20150127 );
63
  }
80
  'lon' => null
81
  );
82
  }
83
+
84
  /**
85
  * Outputs the HTML for this widget.
86
  *
87
+ * @param array $args An array of standard parameters for widgets in this theme
88
+ * @param array $instance An array of settings for this widget instance
89
+ *
90
  * @return void Echoes it's output
91
  **/
92
  function widget( $args, $instance ) {
93
  $instance = wp_parse_args( $instance, $this->defaults() );
94
 
95
+ echo $args['before_widget'];
96
 
97
+ if ( '' != $instance['title'] ) {
98
+ echo $args['before_title'] . $instance['title'] . $args['after_title'];
99
+ }
 
100
 
101
  /**
102
  * Fires at the beginning of the Contact Info widget, after the title.
107
  */
108
  do_action( 'jetpack_contact_info_widget_start' );
109
 
110
+ if ( '' != $instance['address'] ) {
 
 
 
111
 
112
  $showmap = $instance['showmap'];
113
 
122
  $map_link = $this->build_map_link( $instance['address'] );
123
 
124
  echo '<div class="confit-address"><a href="' . esc_url( $map_link ) . '" target="_blank">' . str_replace( "\n", "<br/>", esc_html( $instance['address'] ) ) . "</a></div>";
 
 
125
  }
126
 
127
+ if ( '' != $instance['phone'] ) {
128
+ if ( wp_is_mobile() ) {
129
+ echo '<div class="confit-phone"><a href="' . esc_url( 'tel:' . $instance['phone'] ) . '">' . esc_html( $instance['phone'] ) . "</a></div>";
130
+ }
131
+ else {
 
132
  echo '<div class="confit-phone">' . esc_html( $instance['phone'] ) . '</div>';
133
  }
 
134
  }
135
 
136
+ if ( '' != $instance['hours'] ) {
 
137
  echo '<div class="confit-hours">' . str_replace( "\n", "<br/>", esc_html( $instance['hours'] ) ) . "</div>";
138
  }
139
 
 
140
  /**
141
  * Fires at the end of Contact Info widget.
142
  *
146
  */
147
  do_action( 'jetpack_contact_info_widget_end' );
148
 
149
+ echo $args['after_widget'];
 
 
150
  }
151
 
152
 
153
  /**
154
  * Deals with the settings when they are saved by the admin. Here is
155
  * where any validation should be dealt with.
156
+ *
157
+ * @param array $new_instance New configuration values
158
+ * @param array $old_instance Old configuration values
159
+ *
160
+ * @return array
161
+ */
162
  function update( $new_instance, $old_instance ) {
163
  $update_lat_lon = false;
164
+ if (
165
+ ! isset( $old_instance['address'] ) ||
166
+ $this->urlencode_address( $old_instance['address'] ) != $this->urlencode_address( $new_instance['address'] )
167
+ ) {
168
  $update_lat_lon = true;
169
  }
170
 
171
+ $instance = array();
172
+ $instance['title'] = wp_kses( $new_instance['title'], array() );
173
  $instance['address'] = wp_kses( $new_instance['address'], array() );
174
+ $instance['phone'] = wp_kses( $new_instance['phone'], array() );
175
+ $instance['hours'] = wp_kses( $new_instance['hours'], array() );
176
+ $instance['lat'] = isset( $old_instance['lat'] ) ? floatval( $old_instance['lat'] ) : 0;
177
+ $instance['lon'] = isset( $old_instance['lon'] ) ? floatval( $old_instance['lon'] ) : 0;
178
 
179
  if ( ! $instance['lat'] || ! $instance['lon'] ) {
180
  $update_lat_lon = true;
184
 
185
  // Get the lat/lon of the user specified address.
186
  $address = $this->urlencode_address( $instance['address'] );
187
+ $path = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=" . $address;
188
+ /** This action is documented in modules/widgets/contact-info.php */
189
+ $key = apply_filters( 'jetpack_google_maps_api_key', null );
190
+
191
+ if ( ! empty( $key ) ) {
192
+ $path = add_query_arg( 'key', $key, $path );
193
+ }
194
+ $json = wp_remote_retrieve_body( wp_remote_get( esc_url( $path, null, null ) ) );
195
 
196
  if ( ! $json ) {
197
  // The read failed :(
201
 
202
  $json_obj = json_decode( $json );
203
 
204
+ if ( "ZERO_RESULTS" == $json_obj->status ) {
205
  // The address supplied does not have a matching lat / lon.
206
  // No map is available.
207
  $instance['lat'] = "0";
208
  $instance['lon'] = "0";
209
+ }
210
+ else {
211
 
212
  $loc = $json_obj->results[0]->geometry->location;
213
 
221
 
222
  if ( ! isset( $new_instance['showmap'] ) ) {
223
  $instance['showmap'] = 0;
224
+ }
225
+ else {
226
  $instance['showmap'] = intval( $new_instance['showmap'] );
227
  }
228
 
232
 
233
  /**
234
  * Displays the form for this widget on the Widgets page of the WP Admin area.
235
+ *
236
+ * @param array $instance Instance configuration.
237
+ *
238
+ * @return void
239
+ */
240
  function form( $instance ) {
241
  $instance = wp_parse_args( $instance, $this->defaults() );
242
+ ?>
243
+ <p>
244
+ <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
245
+ <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
246
+ </p>
247
+
248
+ <p>
249
+ <label for="<?php echo esc_attr( $this->get_field_id( 'address' ) ); ?>"><?php esc_html_e( 'Address:', 'jetpack' ); ?></label>
250
+ <textarea class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'address' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'address' ) ); ?>"><?php echo esc_textarea( $instance['address'] ); ?></textarea>
251
+ <?php
252
+ if ( $this->has_good_map( $instance ) ) {
253
+ ?>
254
+ <input class="" id="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'showmap' ) ); ?>" value="1" type="checkbox" <?php checked( $instance['showmap'], 1 ); ?> />
255
+ <label for="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>"><?php esc_html_e( 'Show map', 'jetpack' ); ?></label>
256
+ <?php
257
+ }
258
+ else {
259
+ ?>
260
+ <span class="error-message"><?php _e( 'Sorry. We can not plot this address. A map will not be displayed. Is the address formatted correctly?', 'jetpack' ); ?></span>
261
+ <input id="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'showmap' ) ); ?>" value="<?php echo( intval( $instance['showmap'] ) ); ?>" type="hidden" />
262
+ <?php
263
+ }
264
+ ?>
265
+ </p>
266
+ <p>
267
+ <label for="<?php echo esc_attr( $this->get_field_id( 'phone' ) ); ?>"><?php esc_html_e( 'Phone:', 'jetpack' ); ?></label>
268
+ <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'phone' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'phone' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['phone'] ); ?>" />
269
+ </p>
270
+
271
+ <p>
272
+ <label for="<?php echo esc_attr( $this->get_field_id( 'hours' ) ); ?>"><?php esc_html_e( 'Hours:', 'jetpack' ); ?></label>
273
+ <textarea class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'hours' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'hours' ) ); ?>"><?php echo esc_textarea( $instance['hours'] ); ?></textarea>
274
+ </p>
275
+
276
+ <?php
277
  }
278
 
279
 
280
+ /**
281
+ * Generate a Google Maps link for the supplied address.
282
+ *
283
+ * @param string $address Address to link to.
284
+ *
285
+ * @return string
286
+ */
287
  function build_map_link( $address ) {
288
  // Google map urls have lots of available params but zoom (z) and query (q) are enough.
289
  return "http://maps.google.com/maps?z=16&q=" . $this->urlencode_address( $address );
290
  }
291
 
292
 
293
+ /**
294
+ * Builds map display HTML code from the supplied latitude and longitude.
295
+ *
296
+ * @param float $lat Map Latitude
297
+ * @param float $lon Map Longitude
298
+ *
299
+ * @return string HTML of the map
300
+ */
301
  function build_map( $lat, $lon ) {
302
  $this->enqueue_scripts();
303
 
304
+ $lat = esc_attr( $lat );
305
+ $lon = esc_attr( $lon );
306
  $html = <<<EOT
307
  <div class="contact-map">
308
  <input type="hidden" class="contact-info-map-lat" value="$lat" />
313
  return $html;
314
  }
315
 
316
+ /**
317
+ * Encode an URL
318
+ *
319
+ * @param string $address The URL to encode
320
+ *
321
+ * @return string The encoded URL
322
+ */
323
  function urlencode_address( $address ) {
324
 
325
  $address = strtolower( $address );
330
  return $address;
331
  }
332
 
333
+ /**
334
+ * Check if the instance has a valid Map location.
335
+ *
336
+ * @param array $instance Widget instance configuration.
337
+ *
338
+ * @return bool Whether or not there is a valid map.
339
+ */
340
  function has_good_map( $instance ) {
341
  // The lat and lon of an address that could not be plotted will have values of 0 and 0.
342
+ return ! ( "0" == $instance['lat'] && "0" == $instance['lon'] );
343
  }
344
 
345
  }
modules/widgets/contact-info/contact-info-map.js CHANGED
@@ -31,7 +31,7 @@ jQuery( function( $ ) {
31
 
32
  setupContactMaps();
33
 
34
- if ( wp && wp.customize && wp.customizerHasPartialWidgetRefresh() ) {
35
  wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
36
  if ( wp.isJetpackWidgetPlaced( placement, 'widget_contact_info' ) ) {
37
  setupContactMaps( placement.container );
31
 
32
  setupContactMaps();
33
 
34
+ if ( 'undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh ) {
35
  wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
36
  if ( wp.isJetpackWidgetPlaced( placement, 'widget_contact_info' ) ) {
37
  setupContactMaps( placement.container );
modules/widgets/gallery.php CHANGED
@@ -253,7 +253,7 @@ class Jetpack_Gallery_Widget extends WP_Widget {
253
 
254
  foreach ( $instance['attachments'] as $attachment ) {
255
  $attachment_image_src = wp_get_attachment_image_src( $attachment->ID, 'full' );
256
- $attachment_image_src = $attachment_image_src[0]; // [url, width, height]
257
 
258
  $caption = wptexturize( strip_tags( $attachment->post_excerpt ) );
259
 
253
 
254
  foreach ( $instance['attachments'] as $attachment ) {
255
  $attachment_image_src = wp_get_attachment_image_src( $attachment->ID, 'full' );
256
+ $attachment_image_src = jetpack_photon_url( $attachment_image_src[0], array( 'w' => $this->_instance_width ) ); // [url, width, height]
257
 
258
  $caption = wptexturize( strip_tags( $attachment->post_excerpt ) );
259
 
modules/widgets/image-widget.php CHANGED
@@ -140,11 +140,34 @@ class Jetpack_Image_Widget extends WP_Widget {
140
  $instance['img_title'] = strip_tags( $new_instance['img_title'] );
141
  $instance['caption'] = wp_kses( stripslashes($new_instance['caption'] ), $allowed_caption_html );
142
  $instance['align'] = $new_instance['align'];
143
- $instance['img_width'] = absint( $new_instance['img_width'] );
144
- $instance['img_height'] = absint( $new_instance['img_height'] );
145
  $instance['link'] = esc_url( $new_instance['link'], null, 'display' );
146
  $instance['link_target_blank'] = isset( $new_instance['link_target_blank'] ) ? (bool) $new_instance['link_target_blank'] : false;
147
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  return $instance;
149
  }
150
 
@@ -169,30 +192,6 @@ class Jetpack_Image_Widget extends WP_Widget {
169
  $img_height = esc_attr( $instance['img_height'] );
170
  $link_target_blank = checked( $instance['link_target_blank'], true, false );
171
 
172
- if ( !empty( $instance['img_url'] ) ) {
173
- // Download the url to a local temp file and then process it with getimagesize so we can optimize browser layout
174
- $tmp_file = download_url( $instance['img_url'], 10 );
175
- if ( ! is_wp_error( $tmp_file ) ) {
176
- $size = getimagesize( $tmp_file );
177
-
178
- if ( '' == $instance['img_width'] ) {
179
- $width = $size[0];
180
- $img_width = $width;
181
- } else {
182
- $img_width = absint( $instance['img_width'] );
183
- }
184
-
185
- if ( '' == $instance['img_height'] ) {
186
- $height = $size[1];
187
- $img_height = $height;
188
- } else {
189
- $img_height = absint( $instance['img_height'] );
190
- }
191
-
192
- unlink( $tmp_file );
193
- }
194
- }
195
-
196
  $link = esc_url( $instance['link'], null, 'display' );
197
 
198
  echo '<p><label for="' . $this->get_field_id( 'title' ) . '">' . esc_html__( 'Widget title:', 'jetpack' ) . '
140
  $instance['img_title'] = strip_tags( $new_instance['img_title'] );
141
  $instance['caption'] = wp_kses( stripslashes($new_instance['caption'] ), $allowed_caption_html );
142
  $instance['align'] = $new_instance['align'];
 
 
143
  $instance['link'] = esc_url( $new_instance['link'], null, 'display' );
144
  $instance['link_target_blank'] = isset( $new_instance['link_target_blank'] ) ? (bool) $new_instance['link_target_blank'] : false;
145
 
146
+ $new_img_width = absint( $new_instance['img_width'] );
147
+ $new_img_height = absint( $new_instance['img_height'] );
148
+
149
+ if ( ! empty( $instance['img_url'] ) && '' == $new_img_width && '' == $new_img_height ) {
150
+ // Download the url to a local temp file and then process it with getimagesize so we can optimize browser layout
151
+ $tmp_file = download_url( $instance['img_url'], 10 );
152
+ if ( ! is_wp_error( $tmp_file ) ) {
153
+ $size = getimagesize( $tmp_file );
154
+
155
+ $width = $size[0];
156
+ $instance['img_width'] = absint( $width );
157
+
158
+ $height = $size[1];
159
+ $instance['img_height'] = absint( $height );
160
+
161
+ unlink( $tmp_file );
162
+ } else {
163
+ $instance['img_width'] = $new_img_width;
164
+ $instance['img_height'] = $new_img_height;
165
+ }
166
+ } else {
167
+ $instance['img_width'] = $new_img_width;
168
+ $instance['img_height'] = $new_img_height;
169
+ }
170
+
171
  return $instance;
172
  }
173
 
192
  $img_height = esc_attr( $instance['img_height'] );
193
  $link_target_blank = checked( $instance['link_target_blank'], true, false );
194
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
  $link = esc_url( $instance['link'], null, 'display' );
196
 
197
  echo '<p><label for="' . $this->get_field_id( 'title' ) . '">' . esc_html__( 'Widget title:', 'jetpack' ) . '
modules/widgets/rsslinks-widget.php CHANGED
@@ -108,7 +108,7 @@ class Jetpack_RSS_Links_Widget extends WP_Widget {
108
  'image' => __( 'Image Link', 'jetpack' ),
109
  'text-image' => __( 'Text & Image Links', 'jetpack' )
110
  );
111
- echo '<p><label for="' . $this->get_field_id( 'format' ) . '">' . __( 'Format:', 'jetpack' ) . '
112
  <select class="widefat" id="' . $this->get_field_id( 'format' ) . '" name="' . $this->get_field_name( 'format' ) . '" onchange="if ( this.value == \'text\' ) jQuery( \'#' . $this->get_field_id( 'image-settings' ) . '\' ).fadeOut(); else jQuery( \'#' . $this->get_field_id( 'image-settings' ) . '\' ).fadeIn();">';
113
  foreach ( $formats as $format_option => $label ) {
114
  echo '<option value="' . esc_attr( $format_option ) . '"';
108
  'image' => __( 'Image Link', 'jetpack' ),
109
  'text-image' => __( 'Text & Image Links', 'jetpack' )
110
  );
111
+ echo '<p><label for="' . $this->get_field_id( 'format' ) . '">' . _x( 'Format:', 'Noun', 'jetpack' ) . '
112
  <select class="widefat" id="' . $this->get_field_id( 'format' ) . '" name="' . $this->get_field_name( 'format' ) . '" onchange="if ( this.value == \'text\' ) jQuery( \'#' . $this->get_field_id( 'image-settings' ) . '\' ).fadeOut(); else jQuery( \'#' . $this->get_field_id( 'image-settings' ) . '\' ).fadeIn();">';
113
  foreach ( $formats as $format_option => $label ) {
114
  echo '<option value="' . esc_attr( $format_option ) . '"';
modules/widgets/top-posts.php CHANGED
@@ -245,7 +245,7 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
245
  if ( 'text' != $display ) {
246
  $get_image_options = array(
247
  'fallback_to_avatars' => true,
248
- /** This filter is documented in modules/shortcodes/audio.php */
249
  'gravatar_default' => apply_filters( 'jetpack_static_url', set_url_scheme( 'http://en.wordpress.com/i/logo/white-gray-80.png' ) ),
250
  );
251
  if ( 'grid' == $display ) {
@@ -450,6 +450,9 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
450
 
451
  /**
452
  * Filter the number of days used to calculate Top Posts for the Top Posts widget.
 
 
 
453
  *
454
  * @module widgets
455
  *
@@ -460,14 +463,11 @@ class Jetpack_Top_Posts_Widget extends WP_Widget {
460
  */
461
  $days = (int) apply_filters( 'jetpack_top_posts_days', 2, $args );
462
 
463
- if ( $days < 1 ) {
 
464
  $days = 2;
465
  }
466
 
467
- if ( $days > 10 ) {
468
- $days = 10;
469
- }
470
-
471
  $post_view_posts = stats_get_csv( 'postviews', array( 'days' => absint( $days ), 'limit' => 11 ) );
472
  if ( ! $post_view_posts ) {
473
  return array();
245
  if ( 'text' != $display ) {
246
  $get_image_options = array(
247
  'fallback_to_avatars' => true,
248
+ /** This filter is documented in modules/stats.php */
249
  'gravatar_default' => apply_filters( 'jetpack_static_url', set_url_scheme( 'http://en.wordpress.com/i/logo/white-gray-80.png' ) ),
250
  );
251
  if ( 'grid' == $display ) {
450
 
451
  /**
452
  * Filter the number of days used to calculate Top Posts for the Top Posts widget.
453
+ * We do not recommend accessing more than 10 days of results at one.
454
+ * When more than 10 days of results are accessed at once, results should be cached via the WordPress transients API.
455
+ * Querying for -1 days will give results for an infinite number of days.
456
  *
457
  * @module widgets
458
  *
463
  */
464
  $days = (int) apply_filters( 'jetpack_top_posts_days', 2, $args );
465
 
466
+ /** Handling situations where the number of days makes no sense - allows for unlimited days where $days = -1 */
467
+ if ( 0 == $days || false == $days ) {
468
  $days = 2;
469
  }
470
 
 
 
 
 
471
  $post_view_posts = stats_get_csv( 'postviews', array( 'days' => absint( $days ), 'limit' => 11 ) );
472
  if ( ! $post_view_posts ) {
473
  return array();
modules/widgets/twitter-timeline-admin.js ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery( function( $ ) {
2
+ function twitterWidgetTypeChanged( widgetTypeSelector ) {
3
+ var selectedType = $( widgetTypeSelector ).val();
4
+ $( widgetTypeSelector )
5
+ .closest( '.jetpack-twitter-timeline-widget-type-container' )
6
+ .next( '.jetpack-twitter-timeline-widget-id-container' )
7
+ .find( 'label' )
8
+ .css( 'display', function() {
9
+ var labelType = $( this ).data( 'widget-type' );
10
+ if ( selectedType === labelType ) {
11
+ return '';
12
+ } else {
13
+ return 'none';
14
+ }
15
+ } );
16
+ }
17
+
18
+ // We could either be in wp-admin/widgets.php or the Customizer.
19
+ var $container = $( '#customize-controls' );
20
+ if ( ! $container.length ) {
21
+ $container = $( '#wpbody' );
22
+ }
23
+
24
+ // Observe widget settings for 'change' events of the 'type' property for
25
+ // current and future Twitter timeline widgets.
26
+ $container.on( 'change', '.jetpack-twitter-timeline-widget-type', function() {
27
+ twitterWidgetTypeChanged( this );
28
+ } );
29
+
30
+ // Set the labels for currently existing widgets (including the "template"
31
+ // version that is copied when a new widget is added).
32
+ $container.find( '.jetpack-twitter-timeline-widget-type' ).each( function() {
33
+ twitterWidgetTypeChanged( this );
34
+ } );
35
+ } );
modules/widgets/twitter-timeline.php CHANGED
@@ -1,8 +1,11 @@
1
  <?php
2
 
3
  /*
4
- * Based on Evolution Twitter Timeline (http://wordpress.org/extend/plugins/evolution-twitter-timeline/)
5
- * See: https://twitter.com/settings/widgets and https://dev.twitter.com/docs/embedded-timelines for details on Twitter Timelines
 
 
 
6
  */
7
 
8
  /**
@@ -16,8 +19,8 @@ function jetpack_twitter_timeline_widget_init() {
16
 
17
  class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
18
  /**
19
- * Register widget with WordPress.
20
- */
21
  public function __construct() {
22
  parent::__construct(
23
  'twitter_timeline',
@@ -33,6 +36,8 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
33
  if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
34
  add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
35
  }
 
 
36
  }
37
 
38
  /**
@@ -52,6 +57,16 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
52
  wp_print_scripts( array( 'jetpack-twitter-timeline' ) );
53
  }
54
 
 
 
 
 
 
 
 
 
 
 
55
  /**
56
  * Front-end display of widget.
57
  *
@@ -61,38 +76,52 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
61
  * @param array $instance Saved values from database.
62
  */
63
  public function widget( $args, $instance ) {
64
- $instance['lang'] = substr( strtoupper( get_locale() ), 0, 2 );
65
 
66
  echo $args['before_widget'];
67
 
68
- if ( $instance['title'] ) {
69
  /** This filter is documented in core/src/wp-includes/default-widgets.php */
70
  echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
71
  }
72
 
73
- $data_attribs = array( 'widget-id', 'theme', 'link-color', 'border-color', 'chrome', 'tweet-limit' );
74
- $attribs = array( 'width', 'height', 'lang' );
75
-
76
  // Start tag output
 
 
77
  echo '<a class="twitter-timeline"';
78
 
 
 
 
 
 
 
 
 
 
79
  foreach ( $data_attribs as $att ) {
80
- if ( !empty( $instance[$att] ) ) {
81
- if ( 'tweet-limit' == $att && 0 === $instance[$att] )
82
- continue;
83
-
84
- if ( is_array( $instance[$att] ) )
85
- echo ' data-' . esc_attr( $att ) . '="' . esc_attr( join( ' ', $instance['chrome'] ) ) . '"';
86
- else
87
- echo ' data-' . esc_attr( $att ) . '="' . esc_attr( $instance[$att] ) . '"';
88
  }
89
  }
90
 
91
- foreach ( $attribs as $att ) {
92
- if ( !empty( $instance[$att] ) )
93
- echo ' ' . esc_attr( $att ) . '="' . esc_attr( $instance[$att] ) . '"';
94
  }
95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  echo '>';
97
 
98
  $timeline_placeholder = __( 'My Tweets', 'jetpack' );
@@ -130,41 +159,71 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
130
  * @return array Updated safe values to be saved.
131
  */
132
  public function update( $new_instance, $old_instance ) {
133
- $hex_regex = '/#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/';
134
- $instance = array();
135
- $instance['title'] = sanitize_text_field( $new_instance['title'] );
136
- $instance['width'] = (int) $new_instance['width'];
137
- $instance['height'] = (int) $new_instance['height'];
138
- $instance['width'] = ( 0 !== (int) $new_instance['width'] ) ? (int) $new_instance['width'] : '';
139
- $instance['height'] = ( 0 !== (int) $new_instance['height'] ) ? (int) $new_instance['height'] : '';
140
- $instance['tweet-limit'] = ( 0 !== (int) $new_instance['tweet-limit'] ) ? (int) $new_instance['tweet-limit'] : null;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
 
142
  // If they entered something that might be a full URL, try to parse it out
143
  if ( is_string( $new_instance['widget-id'] ) ) {
144
- if ( preg_match( '#https?://twitter\.com/settings/widgets/(\d+)#s', $new_instance['widget-id'], $matches ) ) {
 
 
 
 
145
  $new_instance['widget-id'] = $matches[1];
146
  }
147
  }
148
 
149
  $instance['widget-id'] = sanitize_text_field( $new_instance['widget-id'] );
150
- $instance['widget-id'] = is_numeric( $instance['widget-id'] ) ? $instance['widget-id'] : '';
151
 
 
152
  foreach ( array( 'link-color', 'border-color' ) as $color ) {
153
- $new_color = sanitize_text_field( $new_instance[$color] );
154
  if ( preg_match( $hex_regex, $new_color ) ) {
155
- $instance[$color] = $new_color;
156
  }
157
 
158
  }
159
 
 
 
 
 
 
160
  $instance['theme'] = 'light';
161
- if ( in_array( $new_instance['theme'], array( 'light', 'dark' ) ) )
162
  $instance['theme'] = $new_instance['theme'];
 
163
 
164
  $instance['chrome'] = array();
 
 
 
 
 
 
165
  if ( isset( $new_instance['chrome'] ) ) {
166
  foreach ( $new_instance['chrome'] as $chrome ) {
167
- if ( in_array( $chrome, array( 'noheader', 'nofooter', 'noborders', 'noscrollbar', 'transparent' ) ) ) {
168
  $instance['chrome'][] = $chrome;
169
  }
170
  }
@@ -173,6 +232,18 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
173
  return $instance;
174
  }
175
 
 
 
 
 
 
 
 
 
 
 
 
 
176
 
177
  /**
178
  * Back-end widget form.
@@ -195,68 +266,203 @@ class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
195
  );
196
 
197
  $instance = wp_parse_args( (array) $instance, $defaults );
 
 
 
 
 
 
 
 
 
 
 
198
  ?>
199
 
200
  <p>
201
- <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
202
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
 
 
 
 
 
 
 
 
203
  </p>
204
 
205
  <p>
206
- <label for="<?php echo $this->get_field_id( 'width' ); ?>"><?php esc_html_e( 'Maximum Width (px):', 'jetpack' ); ?></label>
207
- <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'] ); ?>" />
 
 
 
 
 
 
 
 
208
  </p>
209
 
210
- <p>
211
- <label for="<?php echo $this->get_field_id( 'height' ); ?>"><?php esc_html_e( 'Height (px):', 'jetpack' ); ?></label>
212
- <input class="widefat" id="<?php echo $this->get_field_id( 'height' ); ?>" name="<?php echo $this->get_field_name( 'height' ); ?>" type="text" value="<?php echo esc_attr( $instance['height'] ); ?>" />
 
 
 
 
 
 
 
 
213
  </p>
214
 
215
  <p>
216
- <label for="<?php echo $this->get_field_id( 'tweet-limit' ); ?>"><?php esc_html_e( '# of Tweets Shown:', 'jetpack' ); ?></label>
217
- <input class="widefat" id="<?php echo $this->get_field_id( 'tweet-limit' ); ?>" name="<?php echo $this->get_field_name( 'tweet-limit' ); ?>" type="number" min="1" max="20" value="<?php echo esc_attr( $instance['tweet-limit'] ); ?>" />
 
 
 
 
 
 
 
 
218
  </p>
219
 
220
- <p><small>
221
- <?php
222
- echo wp_kses_post(
223
- sprintf(
224
- __( 'You need to <a href="%1$s" target="_blank">create a widget at Twitter.com</a>, and then enter your widget id (the long number found in the URL of your widget\'s config page) in the field below. <a href="%2$s" target="_blank">Read more</a>.', 'jetpack' ),
225
- 'https://twitter.com/settings/widgets/new/user',
226
- 'http://support.wordpress.com/widgets/twitter-timeline-widget/'
227
- )
228
- );
229
- ?>
230
- </small></p>
231
- <p>
232
- <label for="<?php echo $this->get_field_id( 'widget-id' ); ?>"><?php esc_html_e( 'Widget ID:', 'jetpack' ); ?> <a href="http://support.wordpress.com/widgets/twitter-timeline-widget/#widget-id" target="_blank">( ? )</a></label>
233
- <input class="widefat" id="<?php echo $this->get_field_id( 'widget-id' ); ?>" name="<?php echo $this->get_field_name( 'widget-id' ); ?>" type="text" value="<?php echo esc_attr( $instance['widget-id'] ); ?>" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
  </p>
235
 
236
  <p>
237
- <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>"><?php esc_html_e( 'Layout Options:', 'jetpack' ); ?></label><br />
238
- <input type="checkbox"<?php checked( in_array( 'noheader', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="noheader" /> <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>"><?php esc_html_e( 'No Header', 'jetpack' ); ?></label><br />
239
- <input type="checkbox"<?php checked( in_array( 'nofooter', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-nofooter' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="nofooter" /> <label for="<?php echo $this->get_field_id( 'chrome-nofooter' ); ?>"><?php esc_html_e( 'No Footer', 'jetpack' ); ?></label><br />
240
- <input type="checkbox"<?php checked( in_array( 'noborders', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-noborders' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="noborders" /> <label for="<?php echo $this->get_field_id( 'chrome-noborders' ); ?>"><?php esc_html_e( 'No Borders', 'jetpack' ); ?></label><br />
241
- <input type="checkbox"<?php checked( in_array( 'noscrollbar', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-noscrollbar' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="noscrollbar" /> <label for="<?php echo $this->get_field_id( 'chrome-noscrollbar' ); ?>"><?php esc_html_e( 'No Scrollbar', 'jetpack' ); ?></label><br />
242
- <input type="checkbox"<?php checked( in_array( 'transparent', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-transparent' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="transparent" /> <label for="<?php echo $this->get_field_id( 'chrome-transparent' ); ?>"><?php esc_html_e( 'Transparent Background', 'jetpack' ); ?></label>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
  </p>
244
 
245
  <p>
246
- <label for="<?php echo $this->get_field_id( 'link-color' ); ?>"><?php _e( 'Link Color (hex):', 'jetpack' ); ?></label>
247
- <input class="widefat" id="<?php echo $this->get_field_id( 'link-color' ); ?>" name="<?php echo $this->get_field_name( 'link-color' ); ?>" type="text" value="<?php echo esc_attr( $instance['link-color'] ); ?>" />
 
 
 
 
 
 
 
 
248
  </p>
249
 
250
  <p>
251
- <label for="<?php echo $this->get_field_id( 'border-color' ); ?>"><?php _e( 'Border Color (hex):', 'jetpack' ); ?></label>
252
- <input class="widefat" id="<?php echo $this->get_field_id( 'border-color' ); ?>" name="<?php echo $this->get_field_name( 'border-color' ); ?>" type="text" value="<?php echo esc_attr( $instance['border-color'] ); ?>" />
 
 
 
 
 
 
 
 
253
  </p>
254
 
255
  <p>
256
- <label for="<?php echo $this->get_field_id( 'theme' ); ?>"><?php _e( 'Timeline Theme:', 'jetpack' ); ?></label>
257
- <select name="<?php echo $this->get_field_name( 'theme' ); ?>" id="<?php echo $this->get_field_id( 'theme' ); ?>" class="widefat">
258
- <option value="light"<?php selected( $instance['theme'], 'light' ); ?>><?php esc_html_e( 'Light', 'jetpack' ); ?></option>
259
- <option value="dark"<?php selected( $instance['theme'], 'dark' ); ?>><?php esc_html_e( 'Dark', 'jetpack' ); ?></option>
 
 
 
 
 
 
 
 
 
 
260
  </select>
261
  </p>
262
  <?php
1
  <?php
2
 
3
  /*
4
+ * Based on Evolution Twitter Timeline
5
+ * (http://wordpress.org/extend/plugins/evolution-twitter-timeline/)
6
+ * For details on Twitter Timelines see:
7
+ * - https://twitter.com/settings/widgets
8
+ * - https://dev.twitter.com/docs/embedded-timelines
9
  */
10
 
11
  /**
19
 
20
  class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
21
  /**
22
+ * Register widget with WordPress.
23
+ */
24
  public function __construct() {
25
  parent::__construct(
26
  'twitter_timeline',
36
  if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
37
  add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
38
  }
39
+
40
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
41
  }
42
 
43
  /**
57
  wp_print_scripts( array( 'jetpack-twitter-timeline' ) );
58
  }
59
 
60
+ /**
61
+ * Enqueue script to improve admin UI
62
+ */
63
+ public function admin_scripts( $hook ) {
64
+ // This is still 'widgets.php' when managing widgets via the Customizer.
65
+ if ( 'widgets.php' === $hook ) {
66
+ wp_enqueue_script( 'twitter-timeline-admin', plugins_url( 'twitter-timeline-admin.js', __FILE__ ) );
67
+ }
68
+ }
69
+
70
  /**
71
  * Front-end display of widget.
72
  *
76
  * @param array $instance Saved values from database.
77
  */
78
  public function widget( $args, $instance ) {
79
+ $instance['lang'] = substr( strtoupper( get_locale() ), 0, 2 );
80
 
81
  echo $args['before_widget'];
82
 
83
+ if ( isset( $instance['title'] ) ) {
84
  /** This filter is documented in core/src/wp-includes/default-widgets.php */
85
  echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
86
  }
87
 
 
 
 
88
  // Start tag output
89
+ // This tag is transformed into the widget markup by Twitter's
90
+ // widgets.js code
91
  echo '<a class="twitter-timeline"';
92
 
93
+ $data_attribs = array(
94
+ 'width',
95
+ 'height',
96
+ 'theme',
97
+ 'link-color',
98
+ 'border-color',
99
+ 'tweet-limit',
100
+ 'lang'
101
+ );
102
  foreach ( $data_attribs as $att ) {
103
+ if ( ! empty( $instance[ $att ] ) && ! is_array( $instance[ $att ] ) ) {
104
+ echo ' data-' . esc_attr( $att ) . '="' . esc_attr( $instance[ $att ] ) . '"';
 
 
 
 
 
 
105
  }
106
  }
107
 
108
+ if ( ! empty( $instance['chrome'] ) && is_array( $instance['chrome'] ) ) {
109
+ echo ' data-chrome="' . esc_attr( join( ' ', $instance['chrome'] ) ) . '"';
 
110
  }
111
 
112
+ $type = ( isset( $instance['type'] ) ? $instance['type'] : '' );
113
+ $widget_id = ( isset( $instance['widget-id'] ) ? $instance['widget-id'] : '' );
114
+ switch ( $type ) {
115
+ case 'profile':
116
+ echo ' href="https://twitter.com/' . esc_attr( $widget_id ) . '"';
117
+ break;
118
+ case 'widget-id':
119
+ default:
120
+ echo ' data-widget-id="' . esc_attr( $widget_id ) . '"';
121
+ break;
122
+ }
123
+
124
+ // End tag output
125
  echo '>';
126
 
127
  $timeline_placeholder = __( 'My Tweets', 'jetpack' );
159
  * @return array Updated safe values to be saved.
160
  */
161
  public function update( $new_instance, $old_instance ) {
162
+ $instance = array();
163
+
164
+ $instance['title'] = sanitize_text_field( $new_instance['title'] );
165
+
166
+ $width = (int) $new_instance['width'];
167
+ if ( $width ) {
168
+ // From publish.twitter.com: 220 <= width <= 1200
169
+ $instance['width'] = min( max( $width, 220 ), 1200 );
170
+ } else {
171
+ $instance['width'] = '';
172
+ }
173
+
174
+ $height = (int) $new_instance['height'];
175
+ if ( $height ) {
176
+ // From publish.twitter.com: height >= 200
177
+ $instance['height'] = max( $height, 200 );
178
+ } else {
179
+ $instance['height'] = '';
180
+ }
181
+
182
+ $tweet_limit = (int) $new_instance['tweet-limit'];
183
+ $instance['tweet-limit'] = ( $tweet_limit ? $tweet_limit : null );
184
 
185
  // If they entered something that might be a full URL, try to parse it out
186
  if ( is_string( $new_instance['widget-id'] ) ) {
187
+ if ( preg_match(
188
+ '#https?://twitter\.com/settings/widgets/(\d+)#s',
189
+ $new_instance['widget-id'],
190
+ $matches
191
+ ) ) {
192
  $new_instance['widget-id'] = $matches[1];
193
  }
194
  }
195
 
196
  $instance['widget-id'] = sanitize_text_field( $new_instance['widget-id'] );
 
197
 
198
+ $hex_regex = '/#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/';
199
  foreach ( array( 'link-color', 'border-color' ) as $color ) {
200
+ $new_color = sanitize_text_field( $new_instance[ $color ] );
201
  if ( preg_match( $hex_regex, $new_color ) ) {
202
+ $instance[ $color ] = $new_color;
203
  }
204
 
205
  }
206
 
207
+ $instance['type'] = 'widget-id';
208
+ if ( in_array( $new_instance['type'], array( 'widget-id', 'profile' ) ) ) {
209
+ $instance['type'] = $new_instance['type'];
210
+ }
211
+
212
  $instance['theme'] = 'light';
213
+ if ( in_array( $new_instance['theme'], array( 'light', 'dark' ) ) ) {
214
  $instance['theme'] = $new_instance['theme'];
215
+ }
216
 
217
  $instance['chrome'] = array();
218
+ $chrome_settings = array(
219
+ 'noheader',
220
+ 'nofooter',
221
+ 'noborders',
222
+ 'transparent'
223
+ );
224
  if ( isset( $new_instance['chrome'] ) ) {
225
  foreach ( $new_instance['chrome'] as $chrome ) {
226
+ if ( in_array( $chrome, $chrome_settings ) ) {
227
  $instance['chrome'][] = $chrome;
228
  }
229
  }
232
  return $instance;
233
  }
234
 
235
+ /**
236
+ * Returns a link to the documentation for a feature of this widget on
237
+ * Jetpack or WordPress.com.
238
+ */
239
+ public function get_docs_link( $hash = '' ) {
240
+ if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
241
+ $base_url = 'https://support.wordpress.com/widgets/twitter-timeline-widget/';
242
+ } else {
243
+ $base_url = 'https://jetpack.com/support/extra-sidebar-widgets/twitter-timeline-widget/';
244
+ }
245
+ return '<a href="' . $base_url . $hash . '" target="_blank">( ? )</a>';
246
+ }
247
 
248
  /**
249
  * Back-end widget form.
266
  );
267
 
268
  $instance = wp_parse_args( (array) $instance, $defaults );
269
+
270
+ if ( empty( $instance['type'] ) ) {
271
+ // Decide the correct widget type. If this is a pre-existing
272
+ // widget with a numeric widget ID, then the type should be
273
+ // 'widget-id', otherwise it should be 'profile'.
274
+ if ( ! empty( $instance['widget-id'] ) && is_numeric( $instance['widget-id'] ) ) {
275
+ $instance['type'] = 'widget-id';
276
+ } else {
277
+ $instance['type'] = 'profile';
278
+ }
279
+ }
280
  ?>
281
 
282
  <p>
283
+ <label for="<?php echo $this->get_field_id( 'title' ); ?>">
284
+ <?php esc_html_e( 'Title:', 'jetpack' ); ?>
285
+ </label>
286
+ <input
287
+ class="widefat"
288
+ id="<?php echo $this->get_field_id( 'title' ); ?>"
289
+ name="<?php echo $this->get_field_name( 'title' ); ?>"
290
+ type="text"
291
+ value="<?php echo esc_attr( $instance['title'] ); ?>"
292
+ />
293
  </p>
294
 
295
  <p>
296
+ <label for="<?php echo $this->get_field_id( 'width' ); ?>">
297
+ <?php esc_html_e( 'Maximum Width (px; 220 to 1200):', 'jetpack' ); ?>
298
+ </label>
299
+ <input
300
+ class="widefat"
301
+ id="<?php echo $this->get_field_id( 'width' ); ?>"
302
+ name="<?php echo $this->get_field_name( 'width' ); ?>"
303
+ type="number" min="220" max="1200"
304
+ value="<?php echo esc_attr( $instance['width'] ); ?>"
305
+ />
306
  </p>
307
 
308
+ <p>
309
+ <label for="<?php echo $this->get_field_id( 'height' ); ?>">
310
+ <?php esc_html_e( 'Height (px; at least 200):', 'jetpack' ); ?>
311
+ </label>
312
+ <input
313
+ class="widefat"
314
+ id="<?php echo $this->get_field_id( 'height' ); ?>"
315
+ name="<?php echo $this->get_field_name( 'height' ); ?>"
316
+ type="number" min="200"
317
+ value="<?php echo esc_attr( $instance['height'] ); ?>"
318
+ />
319
  </p>
320
 
321
  <p>
322
+ <label for="<?php echo $this->get_field_id( 'tweet-limit' ); ?>">
323
+ <?php esc_html_e( '# of Tweets Shown:', 'jetpack' ); ?>
324
+ </label>
325
+ <input
326
+ class="widefat"
327
+ id="<?php echo $this->get_field_id( 'tweet-limit' ); ?>"
328
+ name="<?php echo $this->get_field_name( 'tweet-limit' ); ?>"
329
+ type="number" min="1" max="20"
330
+ value="<?php echo esc_attr( $instance['tweet-limit'] ); ?>"
331
+ />
332
  </p>
333
 
334
+ <p class="jetpack-twitter-timeline-widget-type-container">
335
+ <label for="<?php echo $this->get_field_id( 'type' ); ?>">
336
+ <?php esc_html_e( 'Widget Type:', 'jetpack' ); ?>
337
+ <?php echo $this->get_docs_link( '#widget-type' ); ?>
338
+ </label>
339
+ <select
340
+ name="<?php echo $this->get_field_name( 'type' ); ?>"
341
+ id="<?php echo $this->get_field_id( 'type' ); ?>"
342
+ class="jetpack-twitter-timeline-widget-type widefat"
343
+ >
344
+ <option value="profile"<?php selected( $instance['type'], 'profile' ); ?>>
345
+ <?php esc_html_e( 'Profile', 'jetpack' ); ?>
346
+ </option>
347
+ <option value="widget-id"<?php selected( $instance['type'], 'widget-id' ); ?>>
348
+ <?php esc_html_e( 'Widget ID', 'jetpack' ); ?>
349
+ </option>
350
+ </select>
351
+ </p>
352
+
353
+ <p class="jetpack-twitter-timeline-widget-id-container">
354
+ <label
355
+ for="<?php echo $this->get_field_id( 'widget-id' ); ?>"
356
+ data-widget-type="widget-id"
357
+ <?php echo ( 'widget-id' === $instance['type'] ? '' : 'style="display: none;"' ); ?>
358
+ >
359
+ <?php esc_html_e( 'Widget ID:', 'jetpack' ); ?>
360
+ <?php echo $this->get_docs_link( '#widget-id' ); ?>
361
+ </label>
362
+ <label
363
+ for="<?php echo $this->get_field_id( 'widget-id' ); ?>"
364
+ data-widget-type="profile"
365
+ <?php echo ( 'profile' === $instance['type'] ? '' : 'style="display: none;"' ); ?>
366
+ >
367
+ <?php esc_html_e( 'Twitter Username:', 'jetpack' ); ?>
368
+ <?php echo $this->get_docs_link( '#twitter-username' ); ?>
369
+ </label>
370
+ <input
371
+ class="widefat"
372
+ id="<?php echo $this->get_field_id( 'widget-id' ); ?>"
373
+ name="<?php echo $this->get_field_name( 'widget-id' ); ?>"
374
+ type="text"
375
+ value="<?php echo esc_attr( $instance['widget-id'] ); ?>"
376
+ />
377
  </p>
378
 
379
  <p>
380
+ <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>">
381
+ <?php esc_html_e( 'Layout Options:', 'jetpack' ); ?>
382
+ </label>
383
+ <br />
384
+ <input
385
+ type="checkbox"<?php checked( in_array( 'noheader', $instance['chrome'] ) ); ?>
386
+ id="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>"
387
+ name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
388
+ value="noheader"
389
+ />
390
+ <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>">
391
+ <?php esc_html_e( 'No Header', 'jetpack' ); ?>
392
+ </label>
393
+ <br />
394
+ <input
395
+ type="checkbox"<?php checked( in_array( 'nofooter', $instance['chrome'] ) ); ?>
396
+ id="<?php echo $this->get_field_id( 'chrome-nofooter' ); ?>"
397
+ name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
398
+ value="nofooter"
399
+ />
400
+ <label for="<?php echo $this->get_field_id( 'chrome-nofooter' ); ?>">
401
+ <?php esc_html_e( 'No Footer', 'jetpack' ); ?>
402
+ </label>
403
+ <br />
404
+ <input
405
+ type="checkbox"<?php checked( in_array( 'noborders', $instance['chrome'] ) ); ?>
406
+ id="<?php echo $this->get_field_id( 'chrome-noborders' ); ?>"
407
+ name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
408
+ value="noborders"
409
+ />
410
+ <label for="<?php echo $this->get_field_id( 'chrome-noborders' ); ?>">
411
+ <?php esc_html_e( 'No Borders', 'jetpack' ); ?>
412
+ </label>
413
+ <br />
414
+ <input
415
+ type="checkbox"<?php checked( in_array( 'transparent', $instance['chrome'] ) ); ?>
416
+ id="<?php echo $this->get_field_id( 'chrome-transparent' ); ?>"
417
+ name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
418
+ value="transparent"
419
+ />
420
+ <label for="<?php echo $this->get_field_id( 'chrome-transparent' ); ?>">
421
+ <?php esc_html_e( 'Transparent Background', 'jetpack' ); ?>
422
+ </label>
423
  </p>
424
 
425
  <p>
426
+ <label for="<?php echo $this->get_field_id( 'link-color' ); ?>">
427
+ <?php _e( 'Link Color (hex):', 'jetpack' ); ?>
428
+ </label>
429
+ <input
430
+ class="widefat"
431
+ id="<?php echo $this->get_field_id( 'link-color' ); ?>"
432
+ name="<?php echo $this->get_field_name( 'link-color' ); ?>"
433
+ type="text"
434
+ value="<?php echo esc_attr( $instance['link-color'] ); ?>"
435
+ />
436
  </p>
437
 
438
  <p>
439
+ <label for="<?php echo $this->get_field_id( 'border-color' ); ?>">
440
+ <?php _e( 'Border Color (hex):', 'jetpack' ); ?>
441
+ </label>
442
+ <input
443
+ class="widefat"
444
+ id="<?php echo $this->get_field_id( 'border-color' ); ?>"
445
+ name="<?php echo $this->get_field_name( 'border-color' ); ?>"
446
+ type="text"
447
+ value="<?php echo esc_attr( $instance['border-color'] ); ?>"
448
+ />
449
  </p>
450
 
451
  <p>
452
+ <label for="<?php echo $this->get_field_id( 'theme' ); ?>">
453
+ <?php _e( 'Timeline Theme:', 'jetpack' ); ?>
454
+ </label>
455
+ <select
456
+ name="<?php echo $this->get_field_name( 'theme' ); ?>"
457
+ id="<?php echo $this->get_field_id( 'theme' ); ?>"
458
+ class="widefat"
459
+ >
460
+ <option value="light"<?php selected( $instance['theme'], 'light' ); ?>>
461
+ <?php esc_html_e( 'Light', 'jetpack' ); ?>
462
+ </option>
463
+ <option value="dark"<?php selected( $instance['theme'], 'dark' ); ?>>
464
+ <?php esc_html_e( 'Dark', 'jetpack' ); ?>
465
+ </option>
466
  </select>
467
  </p>
468
  <?php
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === Jetpack by WordPress.com ===
2
- Contributors: automattic, adamkheckler, aduth, akirk, allendav, alternatekev, andy, apeatling, azaozz, batmoo, barry, beaulebens, blobaugh, cainm, cfinke, chaselivingston, chellycat, csonnek, danielbachhuber, davoraltman, daniloercoli, designsimply, dllh, drawmyface, dsmart, dzver, ebinnion, eliorivero, enej, eoigal, ethitter, gcorne, georgestephanis, gibrown, goldsounds, hew, hugobaeta, hypertextranch, iammattthomas, iandunn, jacobshere, jblz, jeherve, jenhooks, jenia, jkudish, jmdodd, Joen, johnjamesjacoby, jshreve, koke, kraftbj, lamdayap, lancewillett, lschuyler, macmanx, martinremy, matt, matveb, mattwiebe, maverick3x6, mcsf, mdawaffe, michael-arestad, migueluy, mikeyarce, mkaz, nancythanki, nickmomrik, obenland, pento, professor44, ryancowles, richardmuscat, richardmtl, roccotripaldi, samhotchkiss, sdquirk, stephdau, tmoorewp, Viper007Bond, westi, yoavf, zinigor
3
  Tags: WordPress.com, jet pack, comments, contact, gallery, performance, sharing, security, shortcodes, stats, subscriptions, widgets
4
- Stable tag: 4.0.4
5
  Requires at least: 4.4
6
- Tested up to: 4.5.2
7
 
8
  Increase your traffic, view your stats, speed up your site, and protect yourself from hackers with Jetpack.
9
 
@@ -75,6 +75,80 @@ There are opportunities for developers at all levels to contribute. [Learn more
75
 
76
  == Changelog ==
77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  = 4.0.4 =
79
  Release date: June 20th, 2016
80
  Release Post: http://wp.me/p1moTy-3eT
1
  === Jetpack by WordPress.com ===
2
+ Contributors: automattic, adamkheckler, aduth, akirk, allendav, alternatekev, andy, annezazu, apeatling, azaozz, batmoo, barry, beaulebens, blobaugh, cainm, cena, cfinke, chaselivingston, chellycat, csonnek, danielbachhuber, davoraltman, daniloercoli, designsimply, dllh, drawmyface, dsmart, dzver, ebinnion, eliorivero, enej, eoigal, ethitter, gcorne, georgestephanis, gibrown, goldsounds, hew, hugobaeta, hypertextranch, iammattthomas, iandunn, jacobshere, jblz, jeherve, jenhooks, jenia, jgs, jkudish, jmdodd, Joen, johnjamesjacoby, jshreve, koke, kraftbj, lamdayap, lancewillett, lschuyler, macmanx, martinremy, matt, matveb, mattwiebe, maverick3x6, mcsf, mdawaffe, michael-arestad, migueluy, mikeyarce, mkaz, nancythanki, nickmomrik, obenland, pento, professor44, rachelsquirrel, rdcoll, ryancowles, richardmuscat, richardmtl, roccotripaldi, samhotchkiss, scarstocea, sdquirk, stefmattana, stephdau, tmoorewp, Viper007Bond, westi, yoavf, zinigor
3
  Tags: WordPress.com, jet pack, comments, contact, gallery, performance, sharing, security, shortcodes, stats, subscriptions, widgets
4
+ Stable tag: 4.1.1
5
  Requires at least: 4.4
6
+ Tested up to: 4.5.3
7
 
8
  Increase your traffic, view your stats, speed up your site, and protect yourself from hackers with Jetpack.
9
 
75
 
76
  == Changelog ==
77
 
78
+ = 4.1.1 =
79
+
80
+ * Release date: July 7th, 2016
81
+
82
+ **Bug Fixes:**
83
+
84
+ * SSO: Use high-resolution Gravatar images on the log-in form on Retina devices.
85
+ * Publicize: improve reliability of Publicize when publishing new posts.
86
+
87
+ = 4.1 =
88
+
89
+ * Release date: July 6th, 2016
90
+ * Release Post: http://wp.me/p1moTy-3jd
91
+
92
+ **Performance Enhancements:**
93
+
94
+ * Carousel no longer loads full-size images in the previous and next previews, increasing the speed and performance of slideshows.
95
+ * We’ve improved Jetpack’s performance by making calls to the database more efficient; essentially, Jetpack is doing less on each page load, making things faster.
96
+ * We’ve improved Photon dev mode, eliminating unnecessary attempts to sync images.
97
+
98
+ **Exciting Feature and UI Improvements:**
99
+
100
+ * A new look: SSO, redesigned and refactored, provides a new and improved experience.
101
+ * Tracking made simple: quickly view the number of unread feedback submissions in your sidebar.
102
+ * Getting support just got easier! Access improved self-help tools in the Jetpack Debug menu.
103
+ * Greater control over Infinite Scroll: pause and resume Infinite Scroll with two new JavaScript methods.
104
+ * Improved Sharing: we’ve swapped image icons for icon fonts and added Telegram and WhatsApp buttons.
105
+ * Untappd shortcode: now you can sip and share your favorite craft brews. Cheers!
106
+ * Recipes, revamped: we’ve added new recipe shortcodes and options to create more detailed recipes.
107
+ * Improved Gallery Widgets now use Photon to resize and serve images.
108
+
109
+ **Security:**
110
+
111
+ * We’re continuing our efforts to harden Jetpack security by implementing the `hash_equals()` function in an effort to avoid timing attacks when comparing strings.
112
+ * We’ve made it easier to use SSL connections on ports `80` and `443`, improving our ability to communicate with an increased number of secure websites.
113
+ * You will now receive a warning for any failed attempts when connecting your website via SSL.
114
+
115
+ **Slightly Less Exciting Feature Improvements:**
116
+
117
+ * Updated the Infinite Scroll settings verbiage, which was a bit confusing.
118
+ * Removed Jetpack Audio Shortcode, which is no longer in use.
119
+ * Redesigned Jetpack banner notices to match core notification styles.
120
+ * Added an icon on a connected Jetpack user’s profile page, next to their name.
121
+ * Added the ability to edit Portfolio custom-post-type options in the Customizer.
122
+ * Added a new filter called `jetpack_publicize_capability` which allows you to override user role restrictions for Publicize.
123
+ * Improved the connection process between Jetpack and WordPress.com making it easier to start using Manage.
124
+ * Updated the Top Posts Widget so you can use and display posts that are older than 10 days.
125
+ * Updated the Twitter Timeline Widget to support updates made by Twitter.
126
+ * Improved the VideoPress Shortcode modal.
127
+ * Updated VideoPress, which now defaults to HTML5 videos when the `freedom` shortcode parameter is in use.
128
+ * Improved how Jetpack syncs by removing mock options.
129
+ * Updated the naming convention for feedback posts.
130
+ * Updated several JSON API endpoints to match WordPress.com endpoints, added support for custom taxonomies, and enabled trash as a valid status for the post update endpoint.
131
+
132
+ **Improved Compatibility:**
133
+
134
+ * A community member found and fixed a compatibility issue with our Open Graph Meta Tags and Bitly’s older plugin -- we now check to make sure we don’t create conflicts.
135
+ * We’ve fixed a rare scenario where an error would occur when other plugins or sites were using the `JETPACK__GLOTPRESS_LOCALES_PATH` constant.
136
+
137
+ **Bug Fixes:**
138
+
139
+ * Comment avatars are now retrieved in a manner more consistent with the login avatar, improving consistency and eliminating the possibility of a future bug.
140
+ * We eliminated PHP notices that were appearing when Custom Content Types were defined without labels or sections.
141
+ * PHP memory limits were reached in rare cases when a website had thousands of revisions of their Custom CSS. The issue is fixed -- happy editing!
142
+ * jQuery deprecated the `size()` function -- as a result, we’ve stopped using it as well.
143
+ * A PHP notice popped up when plugins were updated from the WordPress.com plugin management interface -- these notices will no longer appear.
144
+ * We fixed a bug where Photon wasn’t providing the original size for images that were being used outside of the post content.
145
+ * We eliminated the PHP notices that displayed when posts with slideshows were added to a sitemap.
146
+ * We fixed an error that was showing up in Sitemaps when a website permalink structure used `index.php`.
147
+ * We eliminated JavaScript errors that displayed when tiled galleries were viewed.
148
+ * We fixed an issue where image dimensions weren’t properly saved when added to a new widget.
149
+ * Since Google Maps API keys are now required to use maps, we’ve updated the Contact Info Widget to allow site owners to set up their keys.
150
+ * We fixed a bug where multiple `display` properties weren’t able to be saved in Custom CSS.
151
+
152
  = 4.0.4 =
153
  Release date: June 20th, 2016
154
  Release Post: http://wp.me/p1moTy-3eT
sal/class.json-api-date.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class WPCOM_JSON_API_Date {
4
+ /**
5
+ * Returns ISO 8601 formatted datetime: 2011-12-08T01:15:36-08:00
6
+ *
7
+ * @param $date_gmt (string) GMT datetime string.
8
+ * @param $date (string) Optional. Used to calculate the offset from GMT.
9
+ *
10
+ * @return string
11
+ */
12
+ static function format_date( $date_gmt, $date = null ) {
13
+ $timestamp_gmt = strtotime( "$date_gmt+0000" );
14
+
15
+ if ( null === $date ) {
16
+ $timestamp = $timestamp_gmt;
17
+ $hours = $minutes = $west = 0;
18
+ } else {
19
+ $date_time = date_create( "$date+0000" );
20
+ if ( $date_time ) {
21
+ $timestamp = date_format( $date_time, 'U' );
22
+ } else {
23
+ $timestamp = 0;
24
+ }
25
+
26
+ // "0000-00-00 00:00:00" == -62169984000
27
+ if ( - 62169984000 == $timestamp_gmt ) {
28
+ // WordPress sets post_date=now, post_date_gmt="0000-00-00 00:00:00" for all drafts
29
+ // WordPress sets post_modified=now, post_modified_gmt="0000-00-00 00:00:00" for new drafts
30
+
31
+ // Try to guess the correct offset from the blog's options.
32
+ $timezone_string = get_option( 'timezone_string' );
33
+
34
+ if ( $timezone_string && $date_time ) {
35
+ $timezone = timezone_open( $timezone_string );
36
+ if ( $timezone ) {
37
+ $offset = $timezone->getOffset( $date_time );
38
+ }
39
+ } else {
40
+ $offset = 3600 * get_option( 'gmt_offset' );
41
+ }
42
+ } else {
43
+ $offset = $timestamp - $timestamp_gmt;
44
+ }
45
+
46
+ $west = $offset < 0;
47
+ $offset = abs( $offset );
48
+ $hours = (int) floor( $offset / 3600 );
49
+ $offset -= $hours * 3600;
50
+ $minutes = (int) floor( $offset / 60 );
51
+ }
52
+
53
+ return (string) gmdate( 'Y-m-d\\TH:i:s', $timestamp ) . sprintf( '%s%02d:%02d', $west ? '-' : '+', $hours, $minutes );
54
+ }
55
+ }
sal/class.json-api-links.php ADDED
@@ -0,0 +1,269 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once dirname( __FILE__ ) . '/../class.json-api.php';
4
+
5
+ class WPCOM_JSON_API_Links {
6
+ private $api;
7
+ private static $instance;
8
+
9
+ public static function getInstance() {
10
+ if (null === static::$instance) {
11
+ static::$instance = new static();
12
+ }
13
+
14
+ return static::$instance;
15
+ }
16
+
17
+ // protect these methods for singleton
18
+ protected function __construct() {
19
+ $this->api = WPCOM_JSON_API::init();
20
+ }
21
+ private function __clone() { }
22
+ private function __wakeup() { }
23
+
24
+ /**
25
+ * Generate a URL to an endpoint
26
+ *
27
+ * Used to construct meta links in API responses
28
+ *
29
+ * @param mixed $args Optional arguments to be appended to URL
30
+ * @return string Endpoint URL
31
+ **/
32
+ function get_link() {
33
+ $args = func_get_args();
34
+ $format = array_shift( $args );
35
+ $base = WPCOM_JSON_API__BASE;
36
+
37
+ $path = array_pop( $args );
38
+
39
+ if ( $path ) {
40
+ $path = '/' . ltrim( $path, '/' );
41
+ }
42
+
43
+ $args[] = $path;
44
+
45
+ // Escape any % in args before using sprintf
46
+ $escaped_args = array();
47
+ foreach ( $args as $arg_key => $arg_value ) {
48
+ $escaped_args[ $arg_key ] = str_replace( '%', '%%', $arg_value );
49
+ }
50
+
51
+ $relative_path = vsprintf( "$format%s", $escaped_args );
52
+
53
+ if ( ! wp_startswith( $relative_path, '.' ) ) {
54
+ // Generic version. Match the requested version as best we can
55
+ $api_version = $this->get_closest_version_of_endpoint( $format, $relative_path );
56
+ $base = substr( $base, 0, - 1 ) . $api_version;
57
+ }
58
+
59
+ // escape any % in the relative path before running it through sprintf again
60
+ $relative_path = str_replace( '%', '%%', $relative_path );
61
+ // http, WPCOM_JSON_API__BASE, ... , path
62
+ // %s , %s , $format, %s
63
+ return esc_url_raw( sprintf( "https://%s$relative_path", $base ) );
64
+ }
65
+
66
+ function get_me_link( $path = '' ) {
67
+ return $this->get_link( '/me', $path );
68
+ }
69
+
70
+ function get_taxonomy_link( $blog_id, $taxonomy_id, $taxonomy_type, $path = '' ) {
71
+ switch ( $taxonomy_type ) {
72
+ case 'category':
73
+ return $this->get_link( '/sites/%d/categories/slug:%s', $blog_id, $taxonomy_id, $path );
74
+
75
+ case 'post_tag':
76
+ return $this->get_link( '/sites/%d/tags/slug:%s', $blog_id, $taxonomy_id, $path );
77
+
78
+ default:
79
+ return $this->get_link( '/sites/%d/taxonomies/%s/terms/slug:%s', $blog_id, $taxonomy_type, $taxonomy_id, $path );
80
+ }
81
+ }
82
+
83
+ function get_media_link( $blog_id, $media_id, $path = '' ) {
84
+ return $this->get_link( '/sites/%d/media/%d', $blog_id, $media_id, $path );
85
+ }
86
+
87
+ function get_site_link( $blog_id, $path = '' ) {
88
+ return $this->get_link( '/sites/%d', $blog_id, $path );
89
+ }
90
+
91
+ function get_post_link( $blog_id, $post_id, $path = '' ) {
92
+ return $this->get_link( '/sites/%d/posts/%d', $blog_id, $post_id, $path );
93
+ }
94
+
95
+ function get_comment_link( $blog_id, $comment_id, $path = '' ) {
96
+ return $this->get_link( '/sites/%d/comments/%d', $blog_id, $comment_id, $path );
97
+ }
98
+
99
+ function get_publicize_connection_link( $blog_id, $publicize_connection_id, $path = '' ) {
100
+ return $this->get_link( '.1/sites/%d/publicize-connections/%d', $blog_id, $publicize_connection_id, $path );
101
+ }
102
+
103
+ function get_publicize_connections_link( $keyring_token_id, $path = '' ) {
104
+ return $this->get_link( '.1/me/publicize-connections/?keyring_connection_ID=%d', $keyring_token_id, $path );
105
+ }
106
+
107
+ function get_keyring_connection_link( $keyring_token_id, $path = '' ) {
108
+ return $this->get_link( '.1/me/keyring-connections/%d', $keyring_token_id, $path );
109
+ }
110
+
111
+ function get_external_service_link( $external_service, $path = '' ) {
112
+ return $this->get_link( '.1/meta/external-services/%s', $external_service, $path );
113
+ }
114
+
115
+ /**
116
+ * Try to find the closest supported version of an endpoint to the current endpoint
117
+ *
118
+ * For example, if we were looking at the path /animals/panda:
119
+ * - if the current endpoint is v1.3 and there is a v1.3 of /animals/%s available, we return 1.3
120
+ * - if the current endpoint is v1.3 and there is no v1.3 of /animals/%s known, we fall back to the
121
+ * maximum available version of /animals/%s, e.g. 1.1
122
+ *
123
+ * This method is used in get_link() to construct meta links for API responses.
124
+ *
125
+ * @param $template_path The generic endpoint path, e.g. /sites/%s
126
+ * @param $path string The current endpoint path, relative to the version, e.g. /sites/12345
127
+ * @param $method string Request method used to access the endpoint path
128
+ * @return string The current version, or otherwise the maximum version available
129
+ */
130
+ function get_closest_version_of_endpoint( $template_path, $path, $request_method = 'GET' ) {
131
+ static $closest_endpoint_cache;
132
+
133
+ if ( ! $closest_endpoint_cache ) {
134
+ $closest_endpoint_cache = array();
135
+ }
136
+
137
+ if ( ! isset( $closest_endpoint_cache[ $template_path ] ) ) {
138
+ $closest_endpoint_cache[ $template_path ] = array();
139
+ } elseif ( isset( $closest_endpoint_cache[ $template_path ][ $request_method ] ) ) {
140
+ return $closest_endpoint_cache[ $template_path ][ $request_method ];
141
+ }
142
+
143
+ $path = untrailingslashit( $path );
144
+
145
+ // /help is a special case - always use the current request version
146
+ if ( wp_endswith( $path, '/help' ) ) {
147
+ return $closest_endpoint_cache[ $template_path ][ $request_method ] = $this->api->version;
148
+ }
149
+
150
+ static $matches;
151
+ if ( empty( $matches ) ) {
152
+ $matches = array();
153
+ } else {
154
+ // try to match out of saved matches
155
+ foreach( $matches as $match ) {
156
+ $regex = $match->regex;
157
+ if ( preg_match( "#^$regex\$#", $path ) ) {
158
+ return $closest_endpoint_cache[ $template_path ][ $request_method ] = $match->version;
159
+ }
160
+ }
161
+ }
162
+
163
+ $endpoint_path_versions = $this->get_endpoint_path_versions();
164
+ $last_path_segment = $this->get_last_segment_of_relative_path( $path );
165
+ $max_version_found = null;
166
+
167
+ foreach ( $endpoint_path_versions as $endpoint_last_path_segment => $endpoints ) {
168
+
169
+ // Does the last part of the path match the path key? (e.g. 'posts')
170
+ // If the last part contains a placeholder (e.g. %s), we want to carry on
171
+ if ( $last_path_segment != $endpoint_last_path_segment && ! strstr( $endpoint_last_path_segment, '%' ) ) {
172
+ continue;
173
+ }
174
+
175
+ foreach ( $endpoints as $endpoint ) {
176
+ // Does the request method match?
177
+ if ( ! in_array( $request_method, $endpoint['request_methods'] ) ) {
178
+ continue;
179
+ }
180
+
181
+ $endpoint_path = untrailingslashit( $endpoint['path'] );
182
+ $endpoint_path_regex = str_replace( array( '%s', '%d' ), array( '([^/?&]+)', '(\d+)' ), $endpoint_path );
183
+
184
+ if ( ! preg_match( "#^$endpoint_path_regex\$#", $path ) ) {
185
+ continue;
186
+ }
187
+
188
+ // Make sure the endpoint exists at the same version
189
+ if ( version_compare( $this->api->version, $endpoint['min_version'], '>=') &&
190
+ version_compare( $this->api->version, $endpoint['max_version'], '<=') ) {
191
+ array_push( $matches, (object) array( 'version' => $this->api->version, 'regex' => $endpoint_path_regex ) );
192
+ return $closest_endpoint_cache[ $template_path ][ $request_method ] = $this->api->version;
193
+ }
194
+
195
+ // If the endpoint doesn't exist at the same version, record the max version we found
196
+ if ( empty( $max_version_found ) || version_compare( $max_version_found['version'], $endpoint['max_version'], '<' ) ) {
197
+ $max_version_found = array( 'version' => $endpoint['max_version'], 'regex' => $endpoint_path_regex );
198
+ }
199
+ }
200
+ }
201
+
202
+ // If the endpoint version is less than the requested endpoint version, return the max version found
203
+ if ( ! empty( $max_version_found ) ) {
204
+ array_push( $matches, (object) $max_version_found );
205
+ return $max_version_found['version'];
206
+ }
207
+
208
+ // Otherwise, use the API version of the current request
209
+ return $this->api->version;
210
+ }
211
+
212
+ /**
213
+ * Get an array of endpoint paths with their associated versions
214
+ *
215
+ * The result is cached for 30 minutes.
216
+ *
217
+ * @return array Array of endpoint paths, min_versions and max_versions, keyed by last segment of path
218
+ **/
219
+ protected function get_endpoint_path_versions() {
220
+
221
+ static $cache_result;
222
+
223
+ if ( ! empty ( $cache_result ) ) {
224
+ return $cache_result;
225
+ }
226
+
227
+ /*
228
+ * Create a map of endpoints and their min/max versions keyed by the last segment of the path (e.g. 'posts')
229
+ * This reduces the search space when finding endpoint matches in get_closest_version_of_endpoint()
230
+ */
231
+ $endpoint_path_versions = array();
232
+
233
+ foreach ( $this->api->endpoints as $key => $endpoint_objects ) {
234
+
235
+ // The key contains a serialized path, min_version and max_version
236
+ list( $path, $min_version, $max_version ) = unserialize( $key );
237
+
238
+ // Grab the last component of the relative path to use as the top-level key
239
+ $last_path_segment = $this->get_last_segment_of_relative_path( $path );
240
+
241
+ $endpoint_path_versions[ $last_path_segment ][] = array(
242
+ 'path' => $path,
243
+ 'min_version' => $min_version,
244
+ 'max_version' => $max_version,
245
+ 'request_methods' => array_keys( $endpoint_objects )
246
+ );
247
+ }
248
+
249
+ $cache_result = $endpoint_path_versions;
250
+
251
+ return $endpoint_path_versions;
252
+ }
253
+
254
+ /**
255
+ * Grab the last segment of a relative path
256
+ *
257
+ * @param string $path Path
258
+ * @return string Last path segment
259
+ */
260
+ protected function get_last_segment_of_relative_path( $path) {
261
+ $path_parts = array_filter( explode( '/', $path ) );
262
+
263
+ if ( empty( $path_parts ) ) {
264
+ return null;
265
+ }
266
+
267
+ return end( $path_parts );
268
+ }
269
+ }
sal/class.json-api-metadata.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Utility classes that don't necessarily have a home yet
5
+ */
6
+
7
+ class WPCOM_JSON_API_Metadata {
8
+ public static function is_public( $key ) {
9
+ if ( empty( $key ) )
10
+ return false;
11
+
12
+ // Default whitelisted meta keys.
13
+ $whitelisted_meta = array( '_thumbnail_id' );
14
+
15
+ // whitelist of metadata that can be accessed
16
+ /** This filter is documented in json-endpoints/class.wpcom-json-api-post-endpoint.php */
17
+ if ( in_array( $key, apply_filters( 'rest_api_allowed_public_metadata', $whitelisted_meta ) ) )
18
+ return true;
19
+
20
+ if ( 0 === strpos( $key, 'geo_' ) )
21
+ return true;
22
+
23
+ if ( 0 === strpos( $key, '_wpas_' ) )
24
+ return true;
25
+
26
+ return false;
27
+ }
28
+
29
+ public static function is_internal_only( $key ) {
30
+
31
+ if ( 0 === strpos( $key, '_jetpack_') )
32
+ return true;
33
+
34
+ if ( 0 === strpos( $key, '_elasticsearch_') )
35
+ return true;
36
+
37
+ return false;
38
+ }
39
+ }
sal/class.json-api-platform-jetpack.php CHANGED
@@ -1,12 +1,14 @@
1
  <?php
2
 
3
- class WPORG_Platform {
4
- static function get_site( $blog_id ) {
 
 
5
  require_once dirname( __FILE__ ) . '/class.json-api-site-jetpack.php';
6
- return new Jetpack_Site( $blog_id );
7
  }
8
  }
9
 
10
- function wpcom_get_sal_site( $blog_id ) {
11
- return WPORG_Platform::get_site( $blog_id );
12
  }
1
  <?php
2
 
3
+ require_once dirname( __FILE__ ) . '/class.json-api-platform.php';
4
+
5
+ class WPORG_Platform extends SAL_Platform {
6
+ public function get_site( $blog_id ) {
7
  require_once dirname( __FILE__ ) . '/class.json-api-site-jetpack.php';
8
+ return new Jetpack_Site( $blog_id, $this );
9
  }
10
  }
11
 
12
+ function wpcom_get_sal_platform( $token ) {
13
+ return new WPORG_Platform( $token );
14
  }
sal/class.json-api-platform.php CHANGED
@@ -1,5 +1,23 @@
1
  <?php
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
4
  require_once dirname( __FILE__ ) . '/class.json-api-platform-wpcom.php';
5
  } else {
1
  <?php
2
 
3
+ require_once dirname( __FILE__ ) . '/class.json-api-token.php';
4
+
5
+ abstract class SAL_Platform {
6
+ public $token;
7
+
8
+ function __construct( $token ) {
9
+ if ( is_array( $token ) ) {
10
+ $token = SAL_Token::from_rest_token( $token );
11
+ } else {
12
+ $token = SAL_Token::for_anonymous_user();
13
+ }
14
+
15
+ $this->token = $token;
16
+ }
17
+
18
+ abstract public function get_site( $blog_id );
19
+ }
20
+
21
  if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
22
  require_once dirname( __FILE__ ) . '/class.json-api-platform-wpcom.php';
23
  } else {
sal/class.json-api-post-base.php ADDED
@@ -0,0 +1,667 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This class wraps a WP_Post and proxies any undefined attributes
4
+ * and methods to the wrapped class. We need to do this because at present
5
+ * the WP_Post class is marked as final (in 4.5 this will change, though it's
6
+ * not clear if there will be a mechanism to retrieve from the DB into the over-
7
+ * ridden class dynamically).
8
+ **/
9
+
10
+ require_once dirname( __FILE__ ) . '/class.json-api-metadata.php';
11
+ require_once dirname( __FILE__ ) . '/class.json-api-date.php';
12
+ require_once ( ABSPATH . "wp-includes/post.php" );
13
+
14
+ abstract class SAL_Post {
15
+ public $post;
16
+ public $context;
17
+ public $site;
18
+
19
+ function __construct( $site, $post, $context ) {
20
+ $this->post = $post;
21
+ $this->context = $context;
22
+ $this->site = $site;
23
+ }
24
+
25
+ public function __set( $key, $value ) {
26
+ $this->post->{ $key } = $value;
27
+ }
28
+
29
+ public function __get( $key ) {
30
+ if ( $key === 'links' ) {
31
+ require_once dirname( __FILE__ ) . '/class.json-api-links.php';
32
+ return WPCOM_JSON_API_Links::getInstance();
33
+ }
34
+ return $this->post->{ $key };
35
+ }
36
+
37
+ public function __call( $name, $arguments ) {
38
+ if ( is_callable( array( $this->post, $name ) ) ) {
39
+ return call_user_func_array( array( $this->post, $name ), $arguments );
40
+ } else {
41
+ trigger_error("Call to undefined method '{$name}'");
42
+ }
43
+ }
44
+
45
+ public function __isset ( $name ) {
46
+ return isset( $this->post->{ $name } );
47
+ }
48
+
49
+ abstract public function get_like_count();
50
+ abstract public function is_liked();
51
+ abstract public function is_reblogged();
52
+ abstract public function is_following();
53
+ abstract public function get_global_id();
54
+ abstract public function get_geo();
55
+
56
+ public function get_menu_order() {
57
+ return (int) $this->post->menu_order;
58
+ }
59
+
60
+ public function get_guid() {
61
+ return (string) $this->post->guid;
62
+ }
63
+
64
+ public function get_type() {
65
+ return (string) $this->post->post_type;
66
+ }
67
+
68
+ public function get_terms() {
69
+ $taxonomies = get_object_taxonomies( $this->post, 'objects' );
70
+ $terms = array();
71
+ foreach ( $taxonomies as $taxonomy ) {
72
+ if ( ! $taxonomy->public && ! current_user_can( $taxonomy->cap->assign_terms ) ) {
73
+ continue;
74
+ }
75
+
76
+ $terms[ $taxonomy->name ] = array();
77
+
78
+ $taxonomy_terms = wp_get_object_terms( $this->post->ID, $taxonomy->name, array( 'fields' => 'all' ) );
79
+ foreach ( $taxonomy_terms as $term ) {
80
+ $formatted_term = $this->format_taxonomy( $term, $taxonomy->name, 'display' );
81
+ $terms[ $taxonomy->name ][ $term->name ] = $formatted_term;
82
+ }
83
+
84
+ $terms[ $taxonomy->name ] = (object) $terms[ $taxonomy->name ];
85
+ }
86
+
87
+ return (object) $terms;
88
+ }
89
+
90
+ public function get_tags() {
91
+ $tags = array();
92
+ $terms = wp_get_post_tags( $this->post->ID );
93
+ foreach ( $terms as $term ) {
94
+ if ( !empty( $term->name ) ) {
95
+ $tags[$term->name] = $this->format_taxonomy( $term, 'post_tag', 'display' );
96
+ }
97
+ }
98
+ return (object) $tags;
99
+ }
100
+
101
+ public function get_categories() {
102
+ $categories = array();
103
+ $terms = wp_get_object_terms( $this->post->ID, 'category', array( 'fields' => 'all' ) );
104
+ foreach ( $terms as $term ) {
105
+ if ( !empty( $term->name ) ) {
106
+ $categories[$term->name] = $this->format_taxonomy( $term, 'category', 'display' );
107
+ }
108
+ }
109
+ return (object) $categories;
110
+ }
111
+
112
+ public function get_attachments_and_count() {
113
+ $attachments = array();
114
+ $_attachments = new WP_Query( array( 'post_parent' => $this->post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'posts_per_page' => '20' ) );
115
+ foreach ( $_attachments->posts as $attachment ) {
116
+ $attachments[$attachment->ID] = $this->get_media_item_v1_1( $attachment->ID );
117
+ }
118
+ return array( (object) $attachments, (int) $_attachments->found_posts );
119
+ }
120
+
121
+ public function get_metadata() {
122
+ $metadata = array();
123
+ foreach ( (array) has_meta( $this->post->ID ) as $meta ) {
124
+ // Don't expose protected fields.
125
+ $meta_key = $meta['meta_key'];
126
+
127
+ $show = !( WPCOM_JSON_API_Metadata::is_internal_only( $meta_key ) )
128
+ &&
129
+ (
130
+ WPCOM_JSON_API_Metadata::is_public( $meta_key )
131
+ ||
132
+ current_user_can( 'edit_post_meta', $this->post->ID , $meta_key )
133
+ );
134
+
135
+ if ( $show ) {
136
+ $metadata[] = array(
137
+ 'id' => $meta['meta_id'],
138
+ 'key' => $meta['meta_key'],
139
+ 'value' => maybe_unserialize( $meta['meta_value'] ),
140
+ );
141
+ }
142
+ }
143
+
144
+ if ( ! empty( $metadata ) ) {
145
+ return $metadata;
146
+ } else {
147
+ return false;
148
+ }
149
+ }
150
+
151
+ public function get_meta() {
152
+ $meta = (object) array(
153
+ 'links' => (object) array(
154
+ 'self' => (string) $this->get_post_link(),
155
+ 'help' => (string) $this->get_post_link( 'help' ),
156
+ 'site' => (string) $this->get_site_link(),
157
+ 'replies' => (string) $this->get_post_link( 'replies/' ),
158
+ 'likes' => (string) $this->get_post_link( 'likes/' ),
159
+ ),
160
+ );
161
+
162
+ // add autosave link if a more recent autosave exists
163
+ if ( 'edit' === $this->context ) {
164
+ $autosave = wp_get_post_autosave( $this->post->ID );
165
+ if ( $autosave && $autosave->post_modified > $this->post->post_modified )
166
+ $meta->links->autosave = (string) $this->get_post_link() . '/autosave';
167
+ }
168
+
169
+ return $meta;
170
+ }
171
+
172
+ public function get_current_user_capabilities() {
173
+ return array(
174
+ 'publish_post' => current_user_can( 'publish_post', $this->post ),
175
+ 'delete_post' => current_user_can( 'delete_post', $this->post ),
176
+ 'edit_post' => current_user_can( 'edit_post', $this->post )
177
+ );
178
+ }
179
+
180
+ public function get_revisions() {
181
+ if ( 'edit' !== $this->context ) {
182
+ return false;
183
+ }
184
+
185
+ $revisions = array();
186
+ $post_revisions = wp_get_post_revisions( $this->post->ID );
187
+
188
+ foreach ( $post_revisions as $_post ) {
189
+ $revisions[] = $_post->ID;
190
+ }
191
+
192
+ return $revisions;
193
+ }
194
+
195
+ public function get_other_urls() {
196
+ $other_urls = array();
197
+
198
+ if ( 'publish' !== $this->post->post_status ) {
199
+ $other_urls = $this->get_permalink_suggestions( $this->post->post_title );
200
+ }
201
+
202
+ return (object) $other_urls;
203
+ }
204
+
205
+ protected function get_site_link() {
206
+ return $this->links->get_site_link( $this->site->get_id() );
207
+ }
208
+
209
+ protected function get_post_link( $path = null ) {
210
+ return $this->links->get_post_link( $this->site->get_id(), $this->post->ID, $path );
211
+ }
212
+
213
+ public function get_publicize_urls() {
214
+ $publicize_URLs = array();
215
+ $publicize = get_post_meta( $this->post->ID, 'publicize_results', true );
216
+ if ( $publicize ) {
217
+ foreach ( $publicize as $service => $data ) {
218
+ switch ( $service ) {
219
+ case 'twitter' :
220
+ foreach ( $data as $datum ) {
221
+ $publicize_URLs[] = esc_url_raw( "https://twitter.com/{$datum['user_id']}/status/{$datum['post_id']}" );
222
+ }
223
+ break;
224
+ case 'fb' :
225
+ foreach ( $data as $datum ) {
226
+ $publicize_URLs[] = esc_url_raw( "https://www.facebook.com/permalink.php?story_fbid={$datum['post_id']}&id={$datum['user_id']}" );
227
+ }
228
+ break;
229
+ }
230
+ }
231
+ }
232
+ return (array) $publicize_URLs;
233
+ }
234
+
235
+ public function get_page_template() {
236
+ return (string) get_post_meta( $this->post->ID, '_wp_page_template', true );
237
+ }
238
+
239
+ // note this is overridden in jetpack-shadow
240
+ public function get_featured_image() {
241
+ $image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $this->post->ID ), 'full' );
242
+ if ( is_array( $image_attributes ) && isset( $image_attributes[0] ) ) {
243
+ return (string) $image_attributes[0];
244
+ } else {
245
+ return '';
246
+ }
247
+ }
248
+
249
+ public function get_post_thumbnail() {
250
+ $thumb = null;
251
+
252
+ $thumb_id = get_post_thumbnail_id( $this->post->ID );
253
+
254
+ if ( ! empty( $thumb_id ) ) {
255
+ $attachment = get_post( $thumb_id );
256
+ if ( ! empty( $attachment ) )
257
+ $featured_image_object = $this->get_attachment( $attachment );
258
+
259
+ if ( ! empty( $featured_image_object ) ) {
260
+ $thumb = (object) $featured_image_object;
261
+ }
262
+ }
263
+
264
+ return $thumb;
265
+ }
266
+
267
+ public function get_format() {
268
+ $format = (string) get_post_format( $this->post->ID );
269
+ if ( !$format ) {
270
+ $format = 'standard';
271
+ }
272
+
273
+ return $format;
274
+ }
275
+
276
+ private function get_attachment( $attachment ) {
277
+ $metadata = wp_get_attachment_metadata( $attachment->ID );
278
+
279
+ $result = array(
280
+ 'ID' => (int) $attachment->ID,
281
+ 'URL' => (string) wp_get_attachment_url( $attachment->ID ),
282
+ 'guid' => (string) $attachment->guid,
283
+ 'mime_type' => (string) $attachment->post_mime_type,
284
+ 'width' => (int) isset( $metadata['width'] ) ? $metadata['width'] : 0,
285
+ 'height' => (int) isset( $metadata['height'] ) ? $metadata['height'] : 0,
286
+ );
287
+
288
+ if ( isset( $metadata['duration'] ) ) {
289
+ $result['duration'] = (int) $metadata['duration'];
290
+ }
291
+
292
+ /** This filter is documented in class.jetpack-sync.php */
293
+ return (object) apply_filters( 'get_attachment', $result );
294
+ }
295
+
296
+ public function get_date() {
297
+ return (string) WPCOM_JSON_API_Date::format_date( $this->post->post_date_gmt, $this->post->post_date );
298
+ }
299
+
300
+ public function get_modified_date() {
301
+ return (string) WPCOM_JSON_API_Date::format_date( $this->post->post_modified_gmt, $this->post->post_modified );
302
+ }
303
+
304
+ public function get_title() {
305
+ if ( 'display' === $this->context ) {
306
+ return (string) get_the_title( $this->post->ID );
307
+ } else {
308
+ return (string) htmlspecialchars_decode( $this->post->post_title, ENT_QUOTES );
309
+ }
310
+ }
311
+
312
+ public function get_url() {
313
+ if ( 'revision' === $this->post->post_type ) {
314
+ return (string) esc_url_raw( get_permalink( $this->post->post_parent ) );
315
+ } else {
316
+ return (string) esc_url_raw( get_permalink( $this->post->ID ) );
317
+ }
318
+ }
319
+
320
+ public function get_shortlink() {
321
+ return (string) esc_url_raw( wp_get_shortlink( $this->post->ID ) );
322
+ }
323
+
324
+ public function get_content() {
325
+ if ( 'display' === $this->context ) {
326
+ // TODO: move this WPCOM-specific hack
327
+ add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
328
+ $content = (string) $this->get_the_post_content_for_display();
329
+ remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
330
+ return $content;
331
+ } else {
332
+ return (string) $this->post->post_content;
333
+ }
334
+ }
335
+
336
+ public function get_excerpt() {
337
+ if ( 'display' === $this->context ) {
338
+ add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
339
+ ob_start();
340
+ the_excerpt();
341
+ $response = (string) ob_get_clean();
342
+ remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
343
+ } else {
344
+ $response = htmlspecialchars_decode( (string) $this->post->post_excerpt, ENT_QUOTES );
345
+ }
346
+ return $response;
347
+ }
348
+
349
+ public function get_status() {
350
+ return (string) get_post_status( $this->post->ID );
351
+ }
352
+
353
+ public function is_sticky() {
354
+ return (bool) is_sticky( $this->post->ID );
355
+ }
356
+
357
+ public function get_slug() {
358
+ return (string) $this->post->post_name;
359
+ }
360
+
361
+ public function get_password() {
362
+ $password = (string) $this->post->post_password;
363
+ if ( 'edit' === $this->context ) {
364
+ $password = htmlspecialchars_decode( (string) $password, ENT_QUOTES );
365
+ }
366
+ return $password;
367
+ }
368
+
369
+ public function get_parent() {
370
+ if ( $this->post->post_parent ) {
371
+ $parent = get_post( $this->post->post_parent );
372
+ if ( 'display' === $this->context ) {
373
+ $parent_title = (string) get_the_title( $parent->ID );
374
+ } else {
375
+ $parent_title = (string) htmlspecialchars_decode( $this->post->post_title, ENT_QUOTES );
376
+ }
377
+ return (object) array(
378
+ 'ID' => (int) $parent->ID,
379
+ 'type' => (string) $parent->post_type,
380
+ 'link' => (string) $this->links->get_post_link( $this->site->get_id(), $parent->ID ),
381
+ 'title' => $parent_title,
382
+ );
383
+ } else {
384
+ return false;
385
+ }
386
+ }
387
+
388
+ function the_password_form() {
389
+ return __( 'This post is password protected.', 'jetpack' );
390
+ }
391
+
392
+ public function get_discussion() {
393
+ return array(
394
+ 'comments_open' => (bool) comments_open( $this->post->ID ),
395
+ 'comment_status' => (string) $this->post->comment_status,
396
+ 'pings_open' => (bool) pings_open( $this->post->ID ),
397
+ 'ping_status' => (string) $this->post->ping_status,
398
+ 'comment_count' => (int) $this->post->comment_count,
399
+ );
400
+ }
401
+
402
+ public function is_likes_enabled() {
403
+ /** This filter is documented in modules/likes.php */
404
+ $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
405
+ $post_likes_switched = (bool) get_post_meta( $this->post->ID, 'switch_like_status', true );
406
+ $post_likes_enabled = $sitewide_likes_enabled;
407
+ if ( $post_likes_switched ) {
408
+ $post_likes_enabled = ! $post_likes_enabled;
409
+ }
410
+ return (bool) $post_likes_enabled;
411
+ }
412
+
413
+ public function is_sharing_enabled() {
414
+ $show = true;
415
+ /** This filter is documented in modules/sharedaddy/sharing-service.php */
416
+ $show = apply_filters( 'sharing_show', $show, $this->post );
417
+
418
+ $switched_status = get_post_meta( $this->post->ID, 'sharing_disabled', false );
419
+
420
+ if