summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYury German <blueknight@gentoo.org>2019-05-22 01:01:36 -0400
committerYury German <blueknight@gentoo.org>2019-05-22 01:01:36 -0400
commit0914c92da22824025992c368c745546e41fbeb84 (patch)
tree965f6adf3b725e56d559fe4a93eff02281499dcc /plugins/jetpack/modules/theme-tools
parentDeleting plugins for update (diff)
downloadblogs-gentoo-0914c92da22824025992c368c745546e41fbeb84.tar.gz
blogs-gentoo-0914c92da22824025992c368c745546e41fbeb84.tar.bz2
blogs-gentoo-0914c92da22824025992c368c745546e41fbeb84.zip
Adding Plugins
Updating the following akismet.4.1.2, google-authenticator.0.52, jetpack.7.3.1 Signed-off-by: Yury German <blueknight@gentoo.org>
Diffstat (limited to 'plugins/jetpack/modules/theme-tools')
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfifteen-rtl.css744
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfifteen.css769
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php35
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfourteen-rtl.css370
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfourteen.css365
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfourteen.php73
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentynineteen-rtl.css1
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentynineteen.css374
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentynineteen.php126
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyseventeen.php13
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css832
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentysixteen.css827
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentysixteen.php68
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options.php137
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/author-bio.php60
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/blog-display.php240
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/customizer.js217
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/customizer.php482
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/featured-images-fallback.php161
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/featured-images.php84
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/post-details.php150
-rw-r--r--plugins/jetpack/modules/theme-tools/featured-content.php722
-rw-r--r--plugins/jetpack/modules/theme-tools/infinite-scroll.php50
-rw-r--r--plugins/jetpack/modules/theme-tools/js/suggest.js7
-rw-r--r--plugins/jetpack/modules/theme-tools/random-redirect.php83
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos.php152
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.css10
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js63
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.min.js1
-rw-r--r--plugins/jetpack/modules/theme-tools/site-breadcrumbs.php79
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo.php46
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.css12
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.css49
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.min.css1
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo-control.php109
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php377
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/inc/compat.php44
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php176
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js160
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.min.js1
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.js24
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.min.js1
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.js46
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.min.js1
-rw-r--r--plugins/jetpack/modules/theme-tools/social-links.php252
-rw-r--r--plugins/jetpack/modules/theme-tools/social-menu.php113
-rw-r--r--plugins/jetpack/modules/theme-tools/social-menu/icon-functions.php177
-rw-r--r--plugins/jetpack/modules/theme-tools/social-menu/social-menu.css197
-rw-r--r--plugins/jetpack/modules/theme-tools/social-menu/social-menu.svg137
50 files changed, 9219 insertions, 0 deletions
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfifteen-rtl.css b/plugins/jetpack/modules/theme-tools/compat/twentyfifteen-rtl.css
new file mode 100644
index 00000000..7557cfd5
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentyfifteen-rtl.css
@@ -0,0 +1,744 @@
+/**
+ * Jetpack Portfolio Shortcode
+ */
+
+.site .portfolio-entry {
+ margin-bottom: 1.6em;
+}
+
+.site .portfolio-entry-title,
+.site .portfolio-entry-meta,
+.site .portfolio-entry-content {
+ font-size: 1.2rem;
+ font-size: 12px;
+ line-height: 1.5;
+}
+
+.site .portfolio-featured-image + .portfolio-entry-title {
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+}
+
+.site .portfolio-entry-meta {
+ font-family: "Noto Sans", sans-serif;
+}
+
+.site .portfolio-entry-content .more-link:after {
+ font-size: 16px;
+ top: 1px;
+}
+
+/**
+ * Jetpack Widgets
+ */
+
+/* Blog Subscriptions Widget */
+.jetpack_subscription_widget #subscribe-email input {
+ padding: 0.375em;
+ width: 100%;
+}
+
+.jetpack_subscription_widget form > :last-child {
+ margin-bottom: 0;
+}
+
+/* Display WordPress Posts Widget */
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts {
+ margin: 0;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
+ font-size: inherit;
+ margin: 0 0 1.6em;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
+ margin: 0 0 1.6em;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ font-size: inherit;
+ line-height: 1.6 !important;
+ margin: 0 0 1.6em !important;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts > :last-child {
+ margin-bottom: 0 !important;
+}
+
+/* Gallery Widget */
+.widget-gallery .slideshow-window {
+ border-radius: 0;
+}
+
+/* Gravatar Profile Widget */
+.widget-area .widget-grofile .grofile-thumbnail {
+ border-radius: 50%;
+ max-width: 200px;
+}
+
+.widget-area .widget-grofile h4 {
+ margin: 1.6em 0 0;
+}
+
+.widget-area .widget-grofile .grofile-accounts {
+ margin-top: 0.8em;
+}
+
+/* Image Widget */
+.widget_image .wp-caption {
+ margin-bottom: 0;
+}
+
+.widget_image .wp-caption-text {
+ padding-bottom: 0;
+}
+
+/* RSS Links Widget */
+.widget_rss_links img {
+ position: relative;
+ top: -2px;
+}
+
+
+/* List type widgets */
+.widget_rss_links ul,
+.widget_top-posts ul ,
+.widget_upcoming_events_widget ul {
+ list-style: none;
+ margin: 0;
+}
+
+.widget_rss_links li,
+.widget_top-posts li,
+.widget_upcoming_events_widget li {
+ border-top: 1px solid #eaeaea;
+ border-top: 1px solid rgba(51, 51, 51, 0.1);
+ padding: 0.7667em 0;
+}
+
+.widget_rss_links li:first-child,
+.widget_top-posts li:first-child,
+.widget_upcoming_events_widget li:first-child {
+ border-top: 0;
+ padding-top: 0;
+}
+
+.widget_rss_links li:last-child,
+.widget_top-posts li:last-child,
+.widget_upcoming_events_widget li:last-child {
+ padding-bottom: 0;
+}
+
+
+/**
+ * Shortcodes Embeds
+ */
+
+/* Facebook */
+.fb_iframe_widget {
+ margin-bottom: 1.6em;
+ max-width: 100%;
+}
+
+.fb_iframe_widget span {
+ max-width: 100%;
+}
+
+/* Gist */
+.gist table {
+ table-layout: auto;
+}
+
+.site .gist .gist-file {
+ margin-bottom: 1.5em;
+}
+
+/* Googlemaps */
+.googlemaps {
+ margin-bottom: 1.6em;
+}
+
+.googlemaps iframe {
+ margin-bottom: 0;
+}
+
+/* Crowdsignal */
+.PDS_Poll,
+.CSS_Poll {
+ display: block !important;
+ margin-bottom: 1.6em;
+}
+
+.PDS_Poll .pds-box,
+.CSS_Poll .css-box {
+ max-width: 100%;
+ width: auto;
+}
+
+/* Presentation */
+.site .presentation-wrapper {
+ margin: 0 auto 1.6em;
+}
+
+/* Recipes */
+.site .jetpack-recipe {
+ border: 0;
+ margin: 0 0 1.6em;
+ padding: 0;
+}
+
+.site .jetpack-recipe-title {
+ border: 0;
+ margin-top: 0;
+ padding: 0;
+}
+
+.site .jetpack-recipe .jetpack-recipe-meta {
+ font-size: inherit;
+ margin: 0;
+}
+
+/* Slideshow */
+.site .slideshow-window {
+ border-radius: 0;
+ margin-bottom: 1.6em;
+}
+
+/* Twitter-timeline */
+iframe[id*="twitter-widget-"] {
+ display: block;
+}
+
+/* Vine */
+.vine-embed {
+ display: block;
+}
+
+/* VideoPress */
+.site .video-player {
+ margin-bottom: 1.6em;
+ padding: 0;
+}
+
+.video-player object {
+ margin-bottom: 0;
+}
+
+
+/**
+ * Tiled gallery
+ */
+
+.site .tiled-gallery {
+ margin-bottom: 1.6em;
+}
+
+
+/**
+ * Jetpack Comments
+ */
+
+.comment-form iframe {
+ margin: 0;
+}
+
+.comment-form .subscribe-label {
+ font-weight: 400;
+ text-transform: none;
+}
+
+.comment-subscription-form {
+ font-size: 12px;
+ font-size: 1.2rem;
+ line-height: 1.5em;
+ margin: 2em 0 0;
+}
+
+.comment-subscription-form + .comment-subscription-form {
+ margin-top: 1em;
+}
+
+
+/**
+ * Sharing
+ */
+
+.hentry div.sharedaddy h3.sd-title,
+.hentry h3.sd-title {
+ font-family: "Noto Sans", sans-serif;
+ font-size: 12px;
+ font-size: 1.2rem;
+ line-height: 1;
+ margin: 0 0 1em 0;
+ opacity: 0.7;
+ text-transform: uppercase;
+}
+
+
+/**
+ * Related Posts
+ */
+
+.hentry #jp-relatedposts {
+ margin: 0;
+ padding-top: 0;
+}
+
+.hentry .jp-relatedposts-post-title a {
+ border-bottom: 0;
+}
+
+.hentry .jp-relatedposts-headline em:before {
+ opacity: 0.7;
+}
+
+.hentry div#jp-relatedposts h3.jp-relatedposts-headline {
+ font-family: "Noto Sans", sans-serif;
+ font-size: 12px;
+ font-size: 1.2rem;
+ opacity: 0.7;
+ text-transform: uppercase;
+}
+
+.hentry div#jp-relatedposts div.jp-relatedposts-items-visual {
+ margin-left: 0;
+}
+
+.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post {
+ margin-bottom: 1.6em;
+ opacity: 1;
+}
+
+.hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+.hentry div#jp-relatedposts div.jp-relatedposts-items p {
+ font-size: 1.2rem;
+ font-size: 12px;
+ line-height: 1.5;
+}
+
+.hentry .jp-relatedposts-post-title {
+ font-weight: 700;
+}
+
+.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
+ font-weight: inherit;
+}
+
+.hentry div#jp-relatedposts div.jp-relatedposts-items div.jp-relatedposts-post:hover .jp-relatedposts-post-title a,
+.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
+ text-decoration: none;
+}
+
+.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,
+.hentry div#jp-relatedposts div.jp-relatedposts-items-visual div.jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt {
+ opacity: 0.7;
+}
+
+.hentry .jp-relatedposts-post-img {
+ margin-bottom: 0.6em;
+}
+
+
+/**
+ * Stats
+ */
+
+#wpstats {
+ display: none;
+}
+
+
+/**
+ * Media Queries
+ */
+
+@media screen and (min-width: 46.25em) {
+ .site .portfolio-entry {
+ margin-bottom: 1.6471em;
+ }
+
+ .site .portfolio-entry-title,
+ .site .portfolio-entry-meta,
+ .site .portfolio-entry-content {
+ font-size: 1.4rem;
+ font-size: 14px;
+ }
+
+ .site .portfolio-entry-content .more-link:after {
+ top: 3px;
+ }
+
+ .site .hentry .gist .gist-file {
+ margin-bottom: 1.75em;
+ }
+
+ .site .widget .gist .gist-file {
+ margin-bottom: 1.3125em;
+ }
+
+ .hentry .fb_iframe_widget,
+ .hentry .googlemaps,
+ .hentry .PDS_Poll,
+ .hentry .CSS_Poll,
+ .site .hentry .presentation-wrapper,
+ .site .hentry .jetpack-recipe,
+ .site .hentry .slideshow-window,
+ .site .hentry .video-player {
+ margin-bottom: 1.6471em;
+ }
+
+ .widget .fb_iframe_widget,
+ .widget .googlemaps,
+ .widget .PDS_Poll,
+ .widget .CSS_Poll,
+ .site .widget .presentation-wrapper,
+ .site .widget .jetpack-recipe,
+ .site .widget .slideshow-window,
+ .site .widget .video-player {
+ margin-bottom: 1.5em;
+ }
+
+ .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
+ .widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
+ margin: 0 0 1.5em;
+ }
+
+ .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ line-height: 1.5 !important;
+ margin: 0 0 1.5em !important;
+ }
+
+ .widget-area .widget-grofile h4 {
+ margin: 1.5em 0 0;
+ }
+
+ .widget-area .widget-grofile .grofile-accounts {
+ margin-top: 0.75em;
+ }
+
+ .jetpack_subscription_widget #subscribe-email input {
+ padding: 0.5625em;
+ }
+
+ .widget_rss_links li,
+ .widget_top-posts li,
+ .widget_upcoming_events_widget li {
+ padding: 0.9643em 0;
+ }
+
+ .site .tiled-gallery {
+ margin-bottom: 1.6471em;
+ }
+
+ .jetpack-video-wrapper {
+ margin-bottom: 1.6471em;
+ }
+
+ .comment-subscription-form {
+ font-size: 14px;
+ font-size: 1.4rem;
+ }
+
+ .hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post {
+ margin-bottom: 0;
+ }
+
+ .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+ .hentry div#jp-relatedposts div.jp-relatedposts-items p {
+ font-size: 1.4rem;
+ font-size: 14px;
+ }
+
+ .jp-relatedposts-post-img {
+ margin-bottom: 0.6176em;
+ }
+}
+
+@media screen and (min-width: 55em) {
+ .site .portfolio-entry {
+ margin-bottom: 1.6842em
+ }
+
+ .site .portfolio-entry-title,
+ .site .portfolio-entry-meta,
+ .site .portfolio-entry-content {
+ font-size: 1.6rem;
+ font-size: 16px;
+ }
+
+ .site .portfolio-entry-content .more-link:after {
+ font-size: 24px;
+ top: 0;
+ }
+
+ .site .hentry .gist .gist-file {
+ margin-bottom: 2em;
+ }
+
+ .site .widget .gist .gist-file {
+ margin-bottom: 1.5em;
+ }
+
+ .hentry .fb_iframe_widget,
+ .hentry .googlemaps,
+ .hentry .PDS_Poll,
+ .hentry .CSS_Poll,
+ .site .hentry .presentation-wrapper,
+ .site .hentry .jetpack-recipe,
+ .site .hentry .slideshow-window,
+ .site .hentry .video-player {
+ margin-bottom: 1.6842em;
+ }
+
+ .site .tiled-gallery {
+ margin-bottom: 1.6842em;
+ }
+
+ .jetpack_subscription_widget #subscribe-email input {
+ padding: 0.75em;
+ }
+
+ .widget_rss_links li,
+ .widget_top-posts li,
+ .widget_upcoming_events_widget li {
+ padding: 0.7188em 0;
+ }
+
+ .jetpack-video-wrapper {
+ margin-bottom: 1.6842em;
+ }
+
+ .comment-subscription-form {
+ font-size: 16px;
+ font-size: 1.6rem;
+ }
+
+ .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+ .hentry div#jp-relatedposts div.jp-relatedposts-items p {
+ font-size: 1.6rem;
+ font-size: 16px;
+ line-height: 1.5em;
+ }
+
+ .jp-relatedposts-post-img {
+ margin-bottom: 0.6315em;
+ }
+}
+
+@media screen and (min-width: 59.6875em) {
+ .site .portfolio-entry {
+ margin-bottom: 1.6em
+ }
+
+ .site .portfolio-entry-title,
+ .site .portfolio-entry-meta,
+ .site .portfolio-entry-content {
+ font-size: 1.2rem;
+ font-size: 12px;
+ }
+
+ .site .portfolio-entry-content .more-link:after {
+ font-size: 16px;
+ top: 1px;
+ }
+
+ .site .hentry .gist .gist-file {
+ margin-bottom: 1.5em;
+ }
+
+ .site .widget .gist .gist-file {
+ margin-bottom: 1.125em;
+ }
+
+ .hentry .fb_iframe_widget,
+ .hentry .googlemaps,
+ .hentry .PDS_Poll,
+ .hentry .CSS_Poll,
+ .site .hentry .presentation-wrapper,
+ .site .hentry .jetpack-recipe,
+ .site .hentry .slideshow-window,
+ .site .hentry .video-player {
+ margin-bottom: 1.6em;
+ }
+
+ .site .tiled-gallery {
+ margin-bottom: 1.6em;
+ }
+
+ .jetpack_subscription_widget #subscribe-email input {
+ padding: 0.4583em;
+ }
+
+ .jetpack-video-wrapper {
+ margin-bottom: 1.6em;
+ }
+
+ .widget-area .widget-grofile .grofile-thumbnail {
+ max-width: 100%;
+ }
+
+ .widget_rss_links li,
+ .widget_top-posts li,
+ .widget_upcoming_events_widget li {
+ padding: 0.4583em 0;
+ }
+
+ .comment-subscription-form {
+ font-size: 12px;
+ font-size: 1.2rem;
+ }
+
+ .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+ .hentry div#jp-relatedposts div.jp-relatedposts-items p {
+ font-size: 1.2rem;
+ font-size: 12px;
+ line-height: 1.5;
+ }
+
+ .jp-relatedposts-post-img {
+ margin-bottom: 0.6em;
+ }
+}
+
+@media screen and (min-width: 68.75em) {
+ .site .portfolio-entry {
+ margin-bottom: 1.6471em
+ }
+
+ .site .portfolio-entry-title,
+ .site .portfolio-entry-meta,
+ .site .portfolio-entry-content {
+ font-size: 1.4rem;
+ font-size: 14px;
+ }
+
+ .site .portfolio-entry-content .more-link:after {
+ top: 3px;
+ }
+
+ .site .hentry .gist .gist-file {
+ margin-bottom: 1.75em;
+ }
+
+ .site .widget .gist .gist-file {
+ margin-bottom: 1.3125em;
+ }
+
+ .hentry .fb_iframe_widget,
+ .hentry .googlemaps,
+ .hentry .PDS_Poll,
+ .hentry .CSS_Poll,
+ .site .hentry .presentation-wrapper,
+ .site .hentry .jetpack-recipe,
+ .site .hentry .slideshow-window,
+ .site .hentry .video-player {
+ margin-bottom: 1.6471em;
+ }
+
+ .site .tiled-gallery {
+ margin-bottom: 1.6471em;
+ }
+
+ .jetpack_subscription_widget #subscribe-email input {
+ padding: 0.5em;
+ }
+
+ .widget_rss_links li,
+ .widget_top-posts li,
+ .widget_upcoming_events_widget li {
+ padding: 0.4643em 0;
+ }
+
+ .jetpack-video-wrapper {
+ margin-bottom: 1.6471em;
+ }
+
+ .comment-subscription-form {
+ font-size: 14px;
+ font-size: 1.4rem;
+ }
+
+ .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+ .hentry div#jp-relatedposts div.jp-relatedposts-items p {
+ font-size: 14px;
+ font-size: 1.4rem;
+ }
+
+ .jp-relatedposts-post-img {
+ margin-bottom: 0.6176em;
+ }
+}
+
+@media screen and (min-width: 77.5em) {
+ .site .portfolio-entry {
+ margin-bottom: 1.6842em
+ }
+
+ .site .portfolio-entry-title,
+ .site .portfolio-entry-meta,
+ .site .portfolio-entry-content {
+ font-size: 1.6rem;
+ font-size: 16px;
+ }
+
+ .site .portfolio-entry-content .more-link:after {
+ font-size: 24px;
+ top: 0;
+ }
+
+ .site .hentry .gist .gist-file {
+ margin-bottom: 2em;
+ }
+
+ .site .widget .gist .gist-file {
+ margin-bottom: 1.5em;
+ }
+
+ .hentry .fb_iframe_widget,
+ .hentry .googlemaps,
+ .hentry .PDS_Poll,
+ .hentry .CSS_Poll,
+ .site .hentry .presentation-wrapper,
+ .site .hentry .jetpack-recipe,
+ .site .hentry .slideshow-window,
+ .site .hentry .video-player {
+ margin-bottom: 1.6842em;
+ }
+
+ .widget_rss_links li,
+ .widget_top-posts li,
+ .widget_upcoming_events_widget li {
+ padding: 0.4688em 0;
+ }
+
+ .site .tiled-gallery {
+ margin-bottom: 1.6842em;
+ }
+
+ .jetpack-video-wrapper {
+ margin-bottom: 1.6842em;
+ }
+
+ .hentry div.sharedaddy h3.sd-title,
+ .hentry div#jp-relatedposts h3.jp-relatedposts-headline {
+ font-size: 13px;
+ font-size: 1.3rem;
+ }
+
+ .comment-subscription-form {
+ font-size: 16px;
+ font-size: 1.6rem;
+ }
+
+ .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+ .hentry div#jp-relatedposts div.jp-relatedposts-items p {
+ font-size: 16px;
+ font-size: 1.6rem;
+ line-height: 1.5em;
+ }
+
+ .jp-relatedposts-post-img {
+ margin-bottom: 0.6315em;
+ }
+}
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.css b/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.css
new file mode 100644
index 00000000..cd343681
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.css
@@ -0,0 +1,769 @@
+/**
+ * Jetpack Portfolio Shortcode
+ */
+
+.site .portfolio-entry {
+ margin-bottom: 1.6em;
+}
+
+.site .portfolio-entry-title,
+.site .portfolio-entry-meta,
+.site .portfolio-entry-content {
+ font-size: 1.2rem;
+ font-size: 12px;
+ line-height: 1.5;
+}
+
+.site .portfolio-featured-image + .portfolio-entry-title {
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+}
+
+.site .portfolio-entry-meta {
+ font-family: "Noto Sans", sans-serif;
+}
+
+.site .portfolio-entry-content .more-link:after {
+ font-size: 16px;
+ top: 1px;
+}
+
+/**
+ * Jetpack Widgets
+ */
+
+/* Blog Subscriptions Widget */
+.jetpack_subscription_widget #subscribe-email input {
+ padding: 0.375em;
+ width: 100%;
+}
+
+.jetpack_subscription_widget form > :last-child {
+ margin-bottom: 0;
+}
+
+/* Display WordPress Posts Widget */
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts {
+ margin: 0;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
+ font-size: inherit;
+ margin: 0 0 1.6em;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
+ margin: 0 0 1.6em;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ font-size: inherit;
+ line-height: 1.6 !important;
+ margin: 0 0 1.6em !important;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts > :last-child {
+ margin-bottom: 0 !important;
+}
+
+/* Gallery Widget */
+.widget-gallery .slideshow-window {
+ border-radius: 0;
+}
+
+/* Gravatar Profile Widget */
+.widget-area .widget-grofile .grofile-thumbnail {
+ border-radius: 50%;
+ max-width: 200px;
+}
+
+.widget-area .widget-grofile h4 {
+ margin: 1.6em 0 0;
+}
+
+.widget-area .widget-grofile .grofile-accounts {
+ margin-top: 0.8em;
+}
+
+/* Image Widget */
+.widget_image .wp-caption {
+ margin-bottom: 0;
+}
+
+.widget_image .wp-caption-text {
+ padding-bottom: 0;
+}
+
+/* RSS Links Widget */
+.widget_rss_links img {
+ position: relative;
+ top: -2px;
+}
+
+
+/* List type widgets */
+.widget_rss_links ul,
+.widget_top-posts ul ,
+.widget_upcoming_events_widget ul {
+ list-style: none;
+ margin: 0;
+}
+
+.widget_rss_links li,
+.widget_top-posts li,
+.widget_upcoming_events_widget li {
+ border-top: 1px solid #eaeaea;
+ border-top: 1px solid rgba(51, 51, 51, 0.1);
+ padding: 0.7667em 0;
+}
+
+.widget_rss_links li:first-child,
+.widget_top-posts li:first-child,
+.widget_upcoming_events_widget li:first-child {
+ border-top: 0;
+ padding-top: 0;
+}
+
+.widget_rss_links li:last-child,
+.widget_top-posts li:last-child,
+.widget_upcoming_events_widget li:last-child {
+ padding-bottom: 0;
+}
+
+/* Authors Widget */
+.widget_authors > ul > li > a {
+ margin-bottom: 1em;
+ display: inline-block;
+}
+
+.widget_authors ul {
+ list-style: none;
+ margin: 0;
+}
+
+.widget_authors li {
+ border-top: 1px solid #eaeaea;
+ border-top: 1px solid rgba(51, 51, 51, 0.1);
+ padding: 0.7667em 0;
+}
+
+.widget_authors li:first-child {
+ border-top: 0;
+ padding-top: 0;
+}
+
+.widget_authors li:last-child {
+ padding-bottom: 0;
+}
+
+/**
+ * Shortcodes Embeds
+ */
+
+/* Facebook */
+.fb_iframe_widget {
+ margin-bottom: 1.6em;
+ max-width: 100%;
+}
+
+.fb_iframe_widget span {
+ max-width: 100%;
+}
+
+/* Gist */
+.gist table {
+ table-layout: auto;
+}
+
+.site .gist .gist-file {
+ margin-bottom: 1.5em;
+}
+
+/* Googlemaps */
+.googlemaps {
+ margin-bottom: 1.6em;
+}
+
+.googlemaps iframe {
+ margin-bottom: 0;
+}
+
+/* Crowdsignal */
+.PDS_Poll,
+.CSS_Poll {
+ display: block !important;
+ margin-bottom: 1.6em;
+}
+
+.PDS_Poll .pds-box,
+.CSS_Poll .css-box {
+ max-width: 100%;
+ width: auto;
+}
+
+/* Presentation */
+.site .presentation-wrapper {
+ margin: 0 auto 1.6em;
+}
+
+/* Recipes */
+.site .jetpack-recipe {
+ border: 0;
+ margin: 0 0 1.6em;
+ padding: 0;
+}
+
+.site .jetpack-recipe-title {
+ border: 0;
+ margin-top: 0;
+ padding: 0;
+}
+
+.site .jetpack-recipe .jetpack-recipe-meta {
+ font-size: inherit;
+ margin: 0;
+}
+
+/* Slideshow */
+.site .slideshow-window {
+ border-radius: 0;
+ margin-bottom: 1.6em;
+}
+
+/* Twitter-timeline */
+iframe[id*="twitter-widget-"] {
+ display: block;
+}
+
+/* Vine */
+.vine-embed {
+ display: block;
+}
+
+/* VideoPress */
+.site .video-player {
+ margin-bottom: 1.6em;
+ padding: 0;
+}
+
+.video-player object {
+ margin-bottom: 0;
+}
+
+
+/**
+ * Tiled gallery
+ */
+
+.site .tiled-gallery {
+ margin-bottom: 1.6em;
+}
+
+
+/**
+ * Jetpack Comments
+ */
+
+.comment-form iframe {
+ margin: 0;
+}
+
+.comment-form .subscribe-label {
+ font-weight: 400;
+ text-transform: none;
+}
+
+.comment-subscription-form {
+ font-size: 12px;
+ font-size: 1.2rem;
+ line-height: 1.5em;
+ margin: 2em 0 0;
+}
+
+.comment-subscription-form + .comment-subscription-form {
+ margin-top: 1em;
+}
+
+
+/**
+ * Sharing
+ */
+
+.hentry div.sharedaddy h3.sd-title,
+.hentry h3.sd-title {
+ font-family: "Noto Sans", sans-serif;
+ font-size: 12px;
+ font-size: 1.2rem;
+ line-height: 1;
+ margin: 0 0 1em 0;
+ opacity: 0.7;
+ text-transform: uppercase;
+}
+
+
+/**
+ * Related Posts
+ */
+
+.hentry #jp-relatedposts {
+ margin: 0;
+ padding-top: 0;
+}
+
+.hentry .jp-relatedposts-post-title a {
+ border-bottom: 0;
+}
+
+.hentry .jp-relatedposts-headline em:before {
+ opacity: 0.7;
+}
+
+.hentry div#jp-relatedposts h3.jp-relatedposts-headline {
+ font-family: "Noto Sans", sans-serif;
+ font-size: 12px;
+ font-size: 1.2rem;
+ opacity: 0.7;
+ text-transform: uppercase;
+}
+
+.hentry div#jp-relatedposts div.jp-relatedposts-items-visual {
+ margin-right: 0;
+}
+
+.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post {
+ margin-bottom: 1.6em;
+ opacity: 1;
+}
+
+.hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+.hentry div#jp-relatedposts div.jp-relatedposts-items p {
+ font-size: 1.2rem;
+ font-size: 12px;
+ line-height: 1.5;
+}
+
+.hentry .jp-relatedposts-post-title {
+ font-weight: 700;
+}
+
+.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
+ font-weight: inherit;
+}
+
+.hentry div#jp-relatedposts div.jp-relatedposts-items div.jp-relatedposts-post:hover .jp-relatedposts-post-title a,
+.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
+ text-decoration: none;
+}
+
+.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,
+.hentry div#jp-relatedposts div.jp-relatedposts-items-visual div.jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt {
+ opacity: 0.7;
+}
+
+.hentry .jp-relatedposts-post-img {
+ margin-bottom: 0.6em;
+}
+
+
+/**
+ * Stats
+ */
+
+#wpstats {
+ display: none;
+}
+
+
+/**
+ * Media Queries
+ */
+
+@media screen and (min-width: 46.25em) {
+ .site .portfolio-entry {
+ margin-bottom: 1.6471em;
+ }
+
+ .site .portfolio-entry-title,
+ .site .portfolio-entry-meta,
+ .site .portfolio-entry-content {
+ font-size: 1.4rem;
+ font-size: 14px;
+ }
+
+ .site .portfolio-entry-content .more-link:after {
+ top: 3px;
+ }
+
+ .site .hentry .gist .gist-file {
+ margin-bottom: 1.75em;
+ }
+
+ .site .widget .gist .gist-file {
+ margin-bottom: 1.3125em;
+ }
+
+ .hentry .fb_iframe_widget,
+ .hentry .googlemaps,
+ .hentry .PDS_Poll,
+ .hentry .CSS_Poll,
+ .site .hentry .presentation-wrapper,
+ .site .hentry .jetpack-recipe,
+ .site .hentry .slideshow-window,
+ .site .hentry .video-player {
+ margin-bottom: 1.6471em;
+ }
+
+ .widget .fb_iframe_widget,
+ .widget .googlemaps,
+ .widget .PDS_Poll,
+ .widget .CSS_Poll,
+ .site .widget .presentation-wrapper,
+ .site .widget .jetpack-recipe,
+ .site .widget .slideshow-window,
+ .site .widget .video-player {
+ margin-bottom: 1.5em;
+ }
+
+ .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
+ .widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
+ margin: 0 0 1.5em;
+ }
+
+ .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ line-height: 1.5 !important;
+ margin: 0 0 1.5em !important;
+ }
+
+ .widget-area .widget-grofile h4 {
+ margin: 1.5em 0 0;
+ }
+
+ .widget-area .widget-grofile .grofile-accounts {
+ margin-top: 0.75em;
+ }
+
+ .jetpack_subscription_widget #subscribe-email input {
+ padding: 0.5625em;
+ }
+
+ .widget_rss_links li,
+ .widget_top-posts li,
+ .widget_upcoming_events_widget li {
+ padding: 0.9643em 0;
+ }
+
+ .site .tiled-gallery {
+ margin-bottom: 1.6471em;
+ }
+
+ .jetpack-video-wrapper {
+ margin-bottom: 1.6471em;
+ }
+
+ .comment-subscription-form {
+ font-size: 14px;
+ font-size: 1.4rem;
+ }
+
+ .hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post {
+ margin-bottom: 0;
+ }
+
+ .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+ .hentry div#jp-relatedposts div.jp-relatedposts-items p {
+ font-size: 1.4rem;
+ font-size: 14px;
+ }
+
+ .jp-relatedposts-post-img {
+ margin-bottom: 0.6176em;
+ }
+}
+
+@media screen and (min-width: 55em) {
+ .site .portfolio-entry {
+ margin-bottom: 1.6842em
+ }
+
+ .site .portfolio-entry-title,
+ .site .portfolio-entry-meta,
+ .site .portfolio-entry-content {
+ font-size: 1.6rem;
+ font-size: 16px;
+ }
+
+ .site .portfolio-entry-content .more-link:after {
+ font-size: 24px;
+ top: 0;
+ }
+
+ .site .hentry .gist .gist-file {
+ margin-bottom: 2em;
+ }
+
+ .site .widget .gist .gist-file {
+ margin-bottom: 1.5em;
+ }
+
+ .hentry .fb_iframe_widget,
+ .hentry .googlemaps,
+ .hentry .PDS_Poll,
+ .hentry .CSS_Poll,
+ .site .hentry .presentation-wrapper,
+ .site .hentry .jetpack-recipe,
+ .site .hentry .slideshow-window,
+ .site .hentry .video-player {
+ margin-bottom: 1.6842em;
+ }
+
+ .site .tiled-gallery {
+ margin-bottom: 1.6842em;
+ }
+
+ .jetpack_subscription_widget #subscribe-email input {
+ padding: 0.75em;
+ }
+
+ .widget_rss_links li,
+ .widget_top-posts li,
+ .widget_upcoming_events_widget li {
+ padding: 0.7188em 0;
+ }
+
+ .jetpack-video-wrapper {
+ margin-bottom: 1.6842em;
+ }
+
+ .comment-subscription-form {
+ font-size: 16px;
+ font-size: 1.6rem;
+ }
+
+ .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+ .hentry div#jp-relatedposts div.jp-relatedposts-items p {
+ font-size: 1.6rem;
+ font-size: 16px;
+ line-height: 1.5em;
+ }
+
+ .jp-relatedposts-post-img {
+ margin-bottom: 0.6315em;
+ }
+}
+
+@media screen and (min-width: 59.6875em) {
+ .site .portfolio-entry {
+ margin-bottom: 1.6em
+ }
+
+ .site .portfolio-entry-title,
+ .site .portfolio-entry-meta,
+ .site .portfolio-entry-content {
+ font-size: 1.2rem;
+ font-size: 12px;
+ }
+
+ .site .portfolio-entry-content .more-link:after {
+ font-size: 16px;
+ top: 1px;
+ }
+
+ .site .hentry .gist .gist-file {
+ margin-bottom: 1.5em;
+ }
+
+ .site .widget .gist .gist-file {
+ margin-bottom: 1.125em;
+ }
+
+ .hentry .fb_iframe_widget,
+ .hentry .googlemaps,
+ .hentry .PDS_Poll,
+ .hentry .CSS_Poll,
+ .site .hentry .presentation-wrapper,
+ .site .hentry .jetpack-recipe,
+ .site .hentry .slideshow-window,
+ .site .hentry .video-player {
+ margin-bottom: 1.6em;
+ }
+
+ .site .tiled-gallery {
+ margin-bottom: 1.6em;
+ }
+
+ .jetpack_subscription_widget #subscribe-email input {
+ padding: 0.4583em;
+ }
+
+ .jetpack-video-wrapper {
+ margin-bottom: 1.6em;
+ }
+
+ .widget-area .widget-grofile .grofile-thumbnail {
+ max-width: 100%;
+ }
+
+ .widget_rss_links li,
+ .widget_top-posts li,
+ .widget_upcoming_events_widget li {
+ padding: 0.4583em 0;
+ }
+
+ .comment-subscription-form {
+ font-size: 12px;
+ font-size: 1.2rem;
+ }
+
+ .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+ .hentry div#jp-relatedposts div.jp-relatedposts-items p {
+ font-size: 1.2rem;
+ font-size: 12px;
+ line-height: 1.5;
+ }
+
+ .jp-relatedposts-post-img {
+ margin-bottom: 0.6em;
+ }
+}
+
+@media screen and (min-width: 68.75em) {
+ .site .portfolio-entry {
+ margin-bottom: 1.6471em
+ }
+
+ .site .portfolio-entry-title,
+ .site .portfolio-entry-meta,
+ .site .portfolio-entry-content {
+ font-size: 1.4rem;
+ font-size: 14px;
+ }
+
+ .site .portfolio-entry-content .more-link:after {
+ top: 3px;
+ }
+
+ .site .hentry .gist .gist-file {
+ margin-bottom: 1.75em;
+ }
+
+ .site .widget .gist .gist-file {
+ margin-bottom: 1.3125em;
+ }
+
+ .hentry .fb_iframe_widget,
+ .hentry .googlemaps,
+ .hentry .PDS_Poll,
+ .hentry .CSS_Poll,
+ .site .hentry .presentation-wrapper,
+ .site .hentry .jetpack-recipe,
+ .site .hentry .slideshow-window,
+ .site .hentry .video-player {
+ margin-bottom: 1.6471em;
+ }
+
+ .site .tiled-gallery {
+ margin-bottom: 1.6471em;
+ }
+
+ .jetpack_subscription_widget #subscribe-email input {
+ padding: 0.5em;
+ }
+
+ .widget_rss_links li,
+ .widget_top-posts li,
+ .widget_upcoming_events_widget li {
+ padding: 0.4643em 0;
+ }
+
+ .jetpack-video-wrapper {
+ margin-bottom: 1.6471em;
+ }
+
+ .comment-subscription-form {
+ font-size: 14px;
+ font-size: 1.4rem;
+ }
+
+ .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+ .hentry div#jp-relatedposts div.jp-relatedposts-items p {
+ font-size: 14px;
+ font-size: 1.4rem;
+ }
+
+ .jp-relatedposts-post-img {
+ margin-bottom: 0.6176em;
+ }
+}
+
+@media screen and (min-width: 77.5em) {
+ .site .portfolio-entry {
+ margin-bottom: 1.6842em
+ }
+
+ .site .portfolio-entry-title,
+ .site .portfolio-entry-meta,
+ .site .portfolio-entry-content {
+ font-size: 1.6rem;
+ font-size: 16px;
+ }
+
+ .site .portfolio-entry-content .more-link:after {
+ font-size: 24px;
+ top: 0;
+ }
+
+ .site .hentry .gist .gist-file {
+ margin-bottom: 2em;
+ }
+
+ .site .widget .gist .gist-file {
+ margin-bottom: 1.5em;
+ }
+
+ .hentry .fb_iframe_widget,
+ .hentry .googlemaps,
+ .hentry .PDS_Poll,
+ .hentry .CSS_Poll,
+ .site .hentry .presentation-wrapper,
+ .site .hentry .jetpack-recipe,
+ .site .hentry .slideshow-window,
+ .site .hentry .video-player {
+ margin-bottom: 1.6842em;
+ }
+
+ .widget_rss_links li,
+ .widget_top-posts li,
+ .widget_upcoming_events_widget li {
+ padding: 0.4688em 0;
+ }
+
+ .site .tiled-gallery {
+ margin-bottom: 1.6842em;
+ }
+
+ .jetpack-video-wrapper {
+ margin-bottom: 1.6842em;
+ }
+
+ .hentry div.sharedaddy h3.sd-title,
+ .hentry div#jp-relatedposts h3.jp-relatedposts-headline {
+ font-size: 13px;
+ font-size: 1.3rem;
+ }
+
+ .comment-subscription-form {
+ font-size: 16px;
+ font-size: 1.6rem;
+ }
+
+ .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+ .hentry div#jp-relatedposts div.jp-relatedposts-items p {
+ font-size: 16px;
+ font-size: 1.6rem;
+ line-height: 1.5em;
+ }
+
+ .jp-relatedposts-post-img {
+ margin-bottom: 0.6315em;
+ }
+}
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php b/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php
new file mode 100644
index 00000000..adaa42b7
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Jetpack Compatibility File
+ * See: http://jetpack.com/
+ */
+
+function twentyfifteen_jetpack_setup() {
+ /**
+ * Add theme support for Responsive Videos.
+ */
+ add_theme_support( 'jetpack-responsive-videos' );
+
+ /**
+ * Add theme support for geo-location.
+ */
+ add_theme_support( 'jetpack-geo-location' );
+}
+add_action( 'after_setup_theme', 'twentyfifteen_jetpack_setup' );
+
+function twentyfifteen_init_jetpack() {
+ /**
+ * Add our compat CSS file for custom widget stylings and such.
+ * Set the version equal to filemtime for development builds, and the JETPACK__VERSION for production
+ * or skip it entirely for wpcom.
+ */
+ if ( ! is_admin() ) {
+ $version = false;
+ if ( method_exists( 'Jetpack', 'is_development_version' ) ) {
+ $version = Jetpack::is_development_version() ? filemtime( plugin_dir_path( __FILE__ ) . 'twentyfifteen.css' ) : JETPACK__VERSION;
+ }
+ wp_enqueue_style( 'twentyfifteen-jetpack', plugins_url( 'twentyfifteen.css', __FILE__ ), array(), $version );
+ wp_style_add_data( 'twentyfifteen-jetpack', 'rtl', 'replace' );
+ }
+}
+add_action( 'init', 'twentyfifteen_init_jetpack' );
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfourteen-rtl.css b/plugins/jetpack/modules/theme-tools/compat/twentyfourteen-rtl.css
new file mode 100644
index 00000000..66e74dbd
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentyfourteen-rtl.css
@@ -0,0 +1,370 @@
+/**
+ * Jetpack compat stylesheet for Twenty Fourteen.
+ */
+
+#jp-post-flair:empty {
+ display: none;
+}
+
+.site-content #jp-post-flair {
+ margin: 24px 0;
+}
+
+.widget #jp-post-flair {
+ padding-top: 0;
+}
+
+.entry-content div.jp-relatedposts {
+ margin: 0;
+}
+
+div.jp-relatedposts .jp-relatedposts-headline em:after {
+ content: ":";
+}
+
+#page .entry-content div.sharedaddy h3,
+#page .entry-summary div.sharedaddy h3,
+#page .entry-content h3.sd-title,
+#page .entry-summary h3.sd-title,
+#primary div.sharedaddy .jp-relatedposts-headline em,
+.pd-rating,
+.cs-rating {
+ color: #767676;
+ font-size: 11px;
+ text-transform: uppercase;
+}
+
+.pd-rating,
+.cs-rating {
+ min-height: 23px;
+ margin-bottom: 5px;
+}
+
+.wp-multiplayer,
+.PDS_Poll,
+.CSS_Poll,
+.entry-content .slideshow-window {
+ margin-bottom: 24px;
+}
+
+.entry-content .gist table {
+ margin-bottom: 0;
+}
+
+.entry-content .slideshow-window {
+ border-radius: 0;
+}
+
+.entry-content .video-player {
+ padding: 0 0 24px;
+}
+
+.highlander-enabled #respond {
+ margin: 0;
+ padding: 0;
+}
+
+.highlander-enabled #respond h3 {
+ margin: 0 0 24px;
+}
+
+.highlander-enabled #respond h3 small a {
+ width: 24px;
+}
+
+.wpcnt {
+ margin-bottom: 15px; /* 24-9 */
+}
+
+#wpstats {
+ display: none;
+}
+
+img[id*="botd"] {
+ position: absolute;
+}
+
+
+/**
+ * Widgets
+ * -----------------------------------------------------------------------------
+ */
+
+/* About.me Widget*/
+
+.aboutme_widget #am_thumbnail {
+ margin-bottom: 18px;
+}
+
+.aboutme_widget #am_thumbnail img {
+ border: 0;
+ max-width: 100%;
+}
+
+.aboutme_widget #am_name {
+ font-weight: 900;
+ margin: 0;
+}
+
+.aboutme_widget #am_headline {
+ font-size: 14px;
+ line-height: 1.2857142857;
+ margin: 0;
+}
+
+.aboutme_widget #am_bio {
+ margin: 18px 0;
+}
+
+.aboutme_widget #am_bio p {
+ margin-bottom: 6px;
+}
+
+.aboutme_widget #am_bio:empty {
+ margin: 0;
+}
+
+.aboutme_widget #am_services {
+ margin-top: 18px;
+}
+
+/* Akismet Widget */
+
+.widget_akismet_widget a,
+.content-sidebar .widget_akismet_widget a {
+ color: rgba(255,255,255,0.5) !important;
+}
+
+.widget_akismet_widget a:hover,
+.content-sidebar .widget_akismet_widget a:hover {
+ color: rgba(255,255,255,0.7) !important;
+}
+
+/* Authors Widget */
+
+.widget_authors li {
+ margin-bottom: 9px;
+}
+
+.widget_authors li:last-child {
+ margin-bottom: 0;
+}
+
+.widget_authors img {
+ margin-left: 5px;
+}
+
+/* Contact Info Widget */
+
+.widget_contact_info > div {
+ margin-bottom: 18px;
+}
+
+.widget_contact_info > div:last-child {
+ margin-bottom: 0;
+}
+
+/* Display WordPress Posts Widget */
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
+ font-size: 14px;
+ line-height: 1.2857142857;
+ margin: 0 0 9px;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ font-size: 14px;
+ line-height: 1.2857142857 !important;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ margin: 9px 0 18px !important;
+}
+
+/* Follow Button Widget */
+
+.widget_follow_button_widget iframe {
+ margin-bottom: 0;
+}
+
+/* Gravatar & Gravatar Profile Widget */
+
+.widget_gravatar img.avatar,
+.widget-grofile .grofile-thumbnail {
+ height: auto;
+ max-width: 100% !important;
+}
+
+.widget-area .widget-grofile h4 {
+ font-size: 12px;
+ line-height: 1.2857142857;
+ margin: 18px 0 9px;
+ text-transform: uppercase;
+}
+
+.widget-area .widget-grofile .grofile-meta h4 {
+ font-size: 18px;
+ line-height: 1;
+ text-transform: none;
+}
+
+/* Image Widget */
+
+.widget_image .wp-caption,
+.widget_image .wp-caption-text {
+ margin-bottom: 0;
+}
+
+.widget_image img {
+ height: auto;
+}
+
+/* Posts I Like Widget */
+
+.widget_jetpack_posts_i_like .widgets-list-layout li {
+ margin: 0;
+}
+
+/* Recent Comments Widget */
+
+.widget_recent_comments table,
+.widget_recent_comments td {
+ border: 0;
+}
+
+.widget_recent_comments td.recentcommentsavatartop,
+.widget_recent_comments td.recentcommentsavatarend {
+ padding: 5px 0 5px 5px;
+}
+
+.widget_recent_comments td.recentcommentstexttop,
+.widget_recent_comments td.recentcommentstextend {
+ padding: 5px 5px 5px 0;
+ vertical-align: top;
+}
+
+/* Recent Images Widget */
+
+.widget_recent_images img {
+ height: auto;
+}
+
+/* Top Posts & Pages Widget */
+
+.widget_top-posts .widgets-list-layout li {
+ margin-bottom: 0;
+}
+
+/* Twitter(old) Widget */
+
+.widget_twitter li {
+ margin-bottom: 18px;
+}
+
+.widget_twitter li:last-child {
+ margin-bottom: 0;
+}
+
+.widget_twitter iframe {
+ margin: 18px 0 0;
+}
+
+/* List type Widgets */
+
+.widget_jp_blogs_i_follow li,
+.widget_delicious li,
+.widgets-list-layout li,
+.widget_top-clicks li,
+.widget_top-posts li,
+.top_rated li,
+.widget_upcoming_events_widget .upcoming-events li {
+ border-top: 1px solid rgba(255, 255, 255, 0.2);
+ padding: 8px 0 9px;
+}
+
+.widget_jp_blogs_i_follow li:first-child,
+.widgets-list-layout li:first-child,
+.widget_top-clicks li:first-child,
+.widget_top-posts li:first-child,
+.top_rated li:first-child,
+.widget_upcoming_events_widget .upcoming-events li:first-child {
+ border-top: 0;
+}
+
+.content-sidebar .widget_jp_blogs_i_follow li,
+.content-sidebar .widgets-list-layout li,
+.content-sidebar .widget_top-clicks li,
+.content-sidebar .widget_top-posts li,
+.content-sidebar .top_rated li,
+.content-sidebar .widget_upcoming_events_widget .upcoming-events li {
+ border-color: rgba(0, 0, 0, 0.1);
+}
+
+.content-sidebar widget-area .widget-grofile h4 {
+ font-weight: 900;
+}
+
+
+/**
+ * Media Queries
+ * -----------------------------------------------------------------------------
+ */
+
+@media screen and (min-width: 1008px) {
+ .footer-sidebar .widget_jp_blogs_i_follow li,
+ .footer-sidebar .widget_jp_blogs_i_follow li,
+ .footer-sidebar .widget_top-clicks li,
+ .footer-sidebar .widget_top-posts li,
+ .footer-sidebar .top_rated li,
+ .footer-sidebar .widget_upcoming_events_widget .upcoming-events li,
+ .primary-sidebar .widget_jp_blogs_i_follow li,
+ .primary-sidebar .widget_jp_blogs_i_follow li,
+ .primary-sidebar .widget_top-clicks li,
+ .primary-sidebar .widget_top-posts li,
+ .primary-sidebar .top_rated li {
+ border-top: 0;
+ padding: 0 0 6px;
+ }
+
+ .footer-sidebar .widget_jp_blogs_i_follow li:last-child,
+ .footer-sidebar .widget_jp_blogs_i_follow li:last-child,
+ .footer-sidebar .widget_top-clicks li:last-child,
+ .footer-sidebar .widget_top-posts li:last-child,
+ .footer-sidebar .top_rated li:last-child,
+ .footer-sidebar .widget_upcoming_events_widget .upcoming-events li:last-child,
+ .primary-sidebar .widget_jp_blogs_i_follow li:last-child,
+ .primary-sidebar .widget_jp_blogs_i_follow li:last-child,
+ .primary-sidebar .widget_top-clicks li:last-child,
+ .primary-sidebar .widget_top-posts li:last-child,
+ .primary-sidebar .top_rated li:last-child {
+ padding: 0;
+ }
+
+ .primary-sidebar .widget_blog_subscription input[type="text"],
+ .footer-sidebar .widget_blog_subscription input[type="text"] {
+ padding: 3px 2px !important;
+ }
+
+ .footer-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
+ .primary-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
+ .footer-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p,
+ .primary-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p,
+ .footer-sidebar .widget-grofile .grofile-meta h4,
+ .primary-sidebar .widget-grofile .grofile-meta h4 {
+ font-size: 12px;
+ line-height: 1.5;
+ }
+
+ .footer-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p,
+ .primary-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ line-height: 1.5 !important;
+ }
+
+ .footer-sidebar .widget-grofile h4,
+ .primary-sidebar .widget-grofile h4,
+ .footer-sidebar .top_rated div > p:first-of-type,
+ .primary-sidebar .top_rated div > p:first-of-type {
+ font-size: 11px;
+ line-height: 1.6363636363;
+ }
+} \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfourteen.css b/plugins/jetpack/modules/theme-tools/compat/twentyfourteen.css
new file mode 100644
index 00000000..903bc3de
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentyfourteen.css
@@ -0,0 +1,365 @@
+/**
+ * Jetpack compat stylesheet for Twenty Fourteen.
+ */
+
+#jp-post-flair:empty {
+ display: none;
+}
+
+.site-content #jp-post-flair {
+ margin: 24px 0;
+}
+
+.widget #jp-post-flair {
+ padding-top: 0;
+}
+
+.entry-content div.jp-relatedposts {
+ margin: 0;
+}
+
+#page .entry-content div.sharedaddy h3,
+#page .entry-summary div.sharedaddy h3,
+#page .entry-content h3.sd-title,
+#page .entry-summary h3.sd-title,
+#primary div.sharedaddy .jp-relatedposts-headline em,
+.pd-rating,
+.cs-rating {
+ color: #767676;
+ font-size: 11px;
+ text-transform: uppercase;
+}
+
+.pd-rating,
+.cs-rating {
+ min-height: 23px;
+ margin-bottom: 5px;
+}
+
+.wp-multiplayer,
+.PDS_Poll,
+.CSS_Poll,
+.entry-content .slideshow-window {
+ margin-bottom: 24px;
+}
+
+.entry-content .gist table {
+ margin-bottom: 0;
+}
+
+.entry-content .slideshow-window {
+ border-radius: 0;
+}
+
+.entry-content .video-player {
+ padding: 0 0 24px;
+}
+
+.highlander-enabled #respond {
+ margin: 0;
+ padding: 0;
+}
+
+.highlander-enabled #respond h3 {
+ margin: 0 0 24px;
+}
+
+.highlander-enabled #respond h3 small a {
+ width: 24px;
+}
+
+.wpcnt {
+ margin-bottom: 15px; /* 24-9 */
+}
+
+#wpstats {
+ display: none;
+}
+
+img[id*="botd"] {
+ position: absolute;
+}
+
+
+/**
+ * Widgets
+ * -----------------------------------------------------------------------------
+ */
+
+/* About.me Widget*/
+
+.aboutme_widget #am_thumbnail {
+ margin-bottom: 18px;
+}
+
+.aboutme_widget #am_thumbnail img {
+ border: 0;
+ max-width: 100%;
+}
+
+.aboutme_widget #am_name {
+ font-weight: 900;
+ margin: 0;
+}
+
+.aboutme_widget #am_headline {
+ font-size: 14px;
+ line-height: 1.2857142857;
+ margin: 0;
+}
+
+.aboutme_widget #am_bio {
+ margin: 18px 0;
+}
+
+.aboutme_widget #am_bio p {
+ margin-bottom: 6px;
+}
+
+.aboutme_widget #am_bio:empty {
+ margin: 0;
+}
+
+.aboutme_widget #am_services {
+ margin-top: 18px;
+}
+
+/* Akismet Widget */
+
+.widget_akismet_widget a,
+.content-sidebar .widget_akismet_widget a {
+ color: rgba(255,255,255,0.5) !important;
+}
+
+.widget_akismet_widget a:hover,
+.content-sidebar .widget_akismet_widget a:hover {
+ color: rgba(255,255,255,0.7) !important;
+}
+
+/* Authors Widget */
+.widget.widget_authors li > ul {
+ margin-left: 0;
+}
+
+.widget_authors li {
+ margin-bottom: 9px;
+}
+
+.widget_authors li:last-child {
+ margin-bottom: 0;
+}
+
+/* Contact Info Widget */
+
+.widget_contact_info > div {
+ margin-bottom: 18px;
+}
+
+.widget_contact_info > div:last-child {
+ margin-bottom: 0;
+}
+
+/* Display WordPress Posts Widget */
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
+ font-size: 14px;
+ line-height: 1.2857142857;
+ margin: 0 0 9px;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ font-size: 14px;
+ line-height: 1.2857142857 !important;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ margin: 9px 0 18px !important;
+}
+
+/* Follow Button Widget */
+
+.widget_follow_button_widget iframe {
+ margin-bottom: 0;
+}
+
+/* Gravatar & Gravatar Profile Widget */
+
+.widget_gravatar img.avatar,
+.widget-grofile .grofile-thumbnail {
+ height: auto;
+ max-width: 100% !important;
+}
+
+.widget-area .widget-grofile h4 {
+ font-size: 12px;
+ line-height: 1.2857142857;
+ margin: 18px 0 9px;
+ text-transform: uppercase;
+}
+
+.widget-area .widget-grofile .grofile-meta h4 {
+ font-size: 18px;
+ line-height: 1;
+ text-transform: none;
+}
+
+/* Image Widget */
+
+.widget_image .wp-caption,
+.widget_image .wp-caption-text {
+ margin-bottom: 0;
+}
+
+.widget_image img {
+ height: auto;
+}
+
+/* Posts I Like Widget */
+
+.widget_jetpack_posts_i_like .widgets-list-layout li {
+ margin: 0;
+}
+
+/* Recent Comments Widget */
+
+.widget_recent_comments table,
+.widget_recent_comments td {
+ border: 0;
+}
+
+.widget_recent_comments td.recentcommentsavatartop,
+.widget_recent_comments td.recentcommentsavatarend {
+ padding: 5px 5px 5px 0;
+}
+
+.widget_recent_comments td.recentcommentstexttop,
+.widget_recent_comments td.recentcommentstextend {
+ padding: 5px 0 5px 5px;
+ vertical-align: top;
+}
+
+/* Recent Images Widget */
+
+.widget_recent_images img {
+ height: auto;
+}
+
+/* Top Posts & Pages Widget */
+
+.widget_top-posts .widgets-list-layout li {
+ margin-bottom: 0;
+}
+
+/* Twitter(old) Widget */
+
+.widget_twitter li {
+ margin-bottom: 18px;
+}
+
+.widget_twitter li:last-child {
+ margin-bottom: 0;
+}
+
+.widget_twitter iframe {
+ margin: 18px 0 0;
+}
+
+/* List type Widgets */
+
+.widget_jp_blogs_i_follow li,
+.widget_delicious li,
+.widgets-list-layout li,
+.widget_top-clicks li,
+.widget_top-posts li,
+.top_rated li,
+.widget_upcoming_events_widget .upcoming-events li {
+ border-top: 1px solid rgba(255, 255, 255, 0.2);
+ padding: 8px 0 9px;
+}
+
+.widget_jp_blogs_i_follow li:first-child,
+.widgets-list-layout li:first-child,
+.widget_top-clicks li:first-child,
+.widget_top-posts li:first-child,
+.top_rated li:first-child,
+.widget_upcoming_events_widget .upcoming-events li:first-child {
+ border-top: 0;
+}
+
+.content-sidebar .widget_jp_blogs_i_follow li,
+.content-sidebar .widgets-list-layout li,
+.content-sidebar .widget_top-clicks li,
+.content-sidebar .widget_top-posts li,
+.content-sidebar .top_rated li,
+.content-sidebar .widget_upcoming_events_widget .upcoming-events li {
+ border-color: rgba(0, 0, 0, 0.1);
+}
+
+.content-sidebar widget-area .widget-grofile h4 {
+ font-weight: 900;
+}
+
+
+/**
+ * Media Queries
+ * -----------------------------------------------------------------------------
+ */
+
+@media screen and (min-width: 1008px) {
+ .footer-sidebar .widget_jp_blogs_i_follow li,
+ .footer-sidebar .widget_jp_blogs_i_follow li,
+ .footer-sidebar .widget_top-clicks li,
+ .footer-sidebar .widget_top-posts li,
+ .footer-sidebar .top_rated li,
+ .footer-sidebar .widget_upcoming_events_widget .upcoming-events li,
+ .primary-sidebar .widget_jp_blogs_i_follow li,
+ .primary-sidebar .widget_jp_blogs_i_follow li,
+ .primary-sidebar .widget_top-clicks li,
+ .primary-sidebar .widget_top-posts li,
+ .primary-sidebar .top_rated li {
+ border-top: 0;
+ padding: 0 0 6px;
+ }
+
+ .footer-sidebar .widget_jp_blogs_i_follow li:last-child,
+ .footer-sidebar .widget_jp_blogs_i_follow li:last-child,
+ .footer-sidebar .widget_top-clicks li:last-child,
+ .footer-sidebar .widget_top-posts li:last-child,
+ .footer-sidebar .top_rated li:last-child,
+ .footer-sidebar .widget_upcoming_events_widget .upcoming-events li:last-child,
+ .primary-sidebar .widget_jp_blogs_i_follow li:last-child,
+ .primary-sidebar .widget_jp_blogs_i_follow li:last-child,
+ .primary-sidebar .widget_top-clicks li:last-child,
+ .primary-sidebar .widget_top-posts li:last-child,
+ .primary-sidebar .top_rated li:last-child {
+ padding: 0;
+ }
+
+ .primary-sidebar .widget_blog_subscription input[type="text"],
+ .footer-sidebar .widget_blog_subscription input[type="text"] {
+ padding: 3px 2px !important;
+ }
+
+ .footer-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
+ .primary-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
+ .footer-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p,
+ .primary-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p,
+ .footer-sidebar .widget-grofile .grofile-meta h4,
+ .primary-sidebar .widget-grofile .grofile-meta h4 {
+ font-size: 12px;
+ line-height: 1.5;
+ }
+
+ .footer-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p,
+ .primary-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ line-height: 1.5 !important;
+ }
+
+ .footer-sidebar .widget-grofile h4,
+ .primary-sidebar .widget-grofile h4,
+ .footer-sidebar .top_rated div > p:first-of-type,
+ .primary-sidebar .top_rated div > p:first-of-type {
+ font-size: 11px;
+ line-height: 1.6363636363;
+ }
+} \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfourteen.php b/plugins/jetpack/modules/theme-tools/compat/twentyfourteen.php
new file mode 100644
index 00000000..202dfbf3
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentyfourteen.php
@@ -0,0 +1,73 @@
+<?php
+
+/**
+ * A last try to show posts, in case the Featured Content plugin returns no IDs.
+ *
+ * @param array $featured_ids
+ * @return array
+ */
+function twentyfourteen_featured_content_post_ids( $featured_ids ) {
+ if ( empty( $featured_ids ) ) {
+ $featured_ids = array_slice( get_option( 'sticky_posts', array() ), 0, 6 );
+ }
+
+ return $featured_ids;
+}
+add_action( 'featured_content_post_ids', 'twentyfourteen_featured_content_post_ids' );
+
+/**
+ * Set the default tag name for Featured Content.
+ *
+ * @param WP_Customize_Manager $wp_customize Theme Customizer object.
+ * @return void
+ */
+function twentyfourteen_customizer_default( $wp_customize ) {
+ $wp_customize->get_setting( 'featured-content[tag-name]' )->default = 'featured';
+}
+add_action( 'customize_register', 'twentyfourteen_customizer_default' );
+
+/**
+ * Sets a default tag of 'featured' for Featured Content.
+ *
+ * @param array $settings
+ * @return array
+ */
+function twentyfourteen_featured_content_default_settings( $settings ) {
+ $settings['tag-name'] = 'featured';
+
+ return $settings;
+}
+add_action( 'featured_content_default_settings', 'twentyfourteen_featured_content_default_settings' );
+
+/**
+ * Removes sharing markup from post content if we're not in the loop and it's a
+ * formatted post.
+ *
+ * @param bool $show Whether to show sharing options.
+ * @param WP_Post $post The post to share.
+ * @return bool
+ */
+function twentyfourteen_mute_content_filters( $show, $post ) {
+ $formats = get_theme_support( 'post-formats' );
+ if ( ! in_the_loop() && has_post_format( $formats[0], $post ) ) {
+ $show = false;
+ }
+ return $show;
+}
+add_filter( 'sharing_show', 'twentyfourteen_mute_content_filters', 10, 2 );
+
+function twentyfourteen_init_jetpack() {
+ /**
+ * Add our compat CSS file for custom widget stylings and such.
+ * Set the version equal to filemtime for development builds, and the JETPACK__VERSION for production.
+ */
+ if ( ! is_admin() ) {
+ $version = false;
+ if ( method_exists( 'Jetpack', 'is_development_version' ) ) {
+ $version = Jetpack::is_development_version() ? filemtime( plugin_dir_path( __FILE__ ) . 'twentyfourteen.css' ) : JETPACK__VERSION;
+ }
+ wp_enqueue_style( 'twentyfourteen-jetpack', plugins_url( 'twentyfourteen.css', __FILE__ ), array(), $version );
+ wp_style_add_data( 'twentyfourteen-jetpack', 'rtl', 'replace' );
+ }
+}
+add_action( 'init', 'twentyfourteen_init_jetpack' );
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentynineteen-rtl.css b/plugins/jetpack/modules/theme-tools/compat/twentynineteen-rtl.css
new file mode 100644
index 00000000..2cf7d0bb
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentynineteen-rtl.css
@@ -0,0 +1 @@
+.infinite-scroll .pagination,.infinite-scroll .posts-navigation,.infinite-scroll.neverending .site-footer{display:none}.infinity-end.neverending .site-footer{display:block}.infinite-loader{margin:calc(3 * 1rem) auto}.infinite-loader .spinner{margin:0 auto;right:inherit!important}.site-main #infinite-handle{margin:calc(2 * 1rem) auto}.site-main #infinite-handle span{background:100% 0;display:block;font-size:.8888888889em;text-align:center}.site-main #infinite-handle span button,.site-main #infinite-handle span button:focus,.site-main #infinite-handle span button:hover{transition:background 150ms ease-in-out;background:#0073aa;border:none;border-radius:5px;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:.8888888889em;font-weight:600;line-height:1.2;outline:0;padding:.66rem 1rem}.site-main #infinite-handle span button:hover{cursor:pointer}.site-main #infinite-handle span button:focus,.site-main #infinite-handle span button:hover{background:#111}.site-main #infinite-handle span button:focus{outline:thin dotted;outline-offset:-4px}.site-main .infinite-wrap .entry:first-of-type{margin-top:calc(6 * 1rem)}.entry .jetpack-video-wrapper{margin-bottom:1.75em}.sd-block{line-height:1}.entry div.sharedaddy h3.sd-title,.entry h3.sd-title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:1.125em;font-weight:700;letter-spacing:-.02em;line-height:1.2;margin-bottom:.5em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.entry div.sharedaddy h3.sd-title:before,.entry h3.sd-title:before{background:#767676;border-top:none;content:"\020";display:block;height:2px;margin:1rem 0;width:1em;min-width:inherit}.sd-social-icon-text .sd-content ul,.sd-social-text .sd-content ul{margin-bottom:-.3125em!important}.sd-social-icon .sd-content ul,.sd-social-official .sd-content ul{margin-bottom:0!important}.entry #sharing_email .sharing_send,.entry .sd-content ul li .option a.share-ustom,.entry .sd-content ul li a.sd-button,.entry .sd-content ul li.advanced a.share-more,.entry .sd-content ul li.preview-item div.option.option-smart-off a,.entry .sd-social-icon .sd-content ul li a.sd-button,.entry .sd-social-icon-text .sd-content ul li a.sd-button,.entry .sd-social-official .sd-content>ul>li .digg_button>a,.entry .sd-social-official .sd-content>ul>li>a.sd-button,.entry .sd-social-text .sd-content ul li a.sd-button{box-shadow:none}.entry #jp-relatedposts{padding-top:0;margin-top:32px;margin-bottom:32px}.entry #jp-relatedposts h3.jp-relatedposts-headline{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:1.125em;font-weight:700;letter-spacing:-.02em;line-height:1.2;margin-bottom:.5em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.entry #jp-relatedposts h3.jp-relatedposts-headline:before{background:#767676;border-top:none;content:"\020";display:block;height:2px;margin:1rem 0;width:1em;min-width:inherit}.entry #jp-relatedposts h3.jp-relatedposts-headline em:before{display:none}.entry #jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post{opacity:1}.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post,.entry #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:1em;letter-spacing:-.02em;line-height:1.2;margin-bottom:.5em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span a,.entry #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title a{font-weight:700}.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-excerpt,.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title{margin-top:.5em;margin-bottom:.5em}.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:13px;font-weight:500}.entry #jp-relatedposts .jp-relatedposts-items p,.entry #jp-relatedposts .jp-relatedposts-items-visual .entry h4.jp-relatedposts-post-title{letter-spacing:normal}#wpstats{display:none}.comments-area .comments-title-wrap+.comment-respond .comment-reply-title{display:none}.widget_author_grid ul,.widget_authors ul,.widget_jp_blogs_i_follow ul,.widget_links ul,.widget_rss_links ul{list-style:none;padding-right:0;padding-left:0}.widget_jp_blogs_i_follow li,.widget_links li,.widget_rss_links li{color:#767676;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:calc(22px * 1.125);font-weight:700;line-height:1.2;margin-top:.5rem;margin-bottom:.5rem}.widget.widget_authors ul li>ul{list-style-type:disc;padding-right:4.25rem}.rtl .widget.widget_authors ul li>ul{padding-right:0;padding-left:1rem}.widget_authors>ul>li>a{display:block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;position:relative}.widget.widget_authors li a strong{line-height:1.2;position:absolute;top:0}.widget.widget_authors .avatar{float:right;margin-left:1em}.widget_authors li>ul{clear:both}.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4{font-size:100%;margin:1rem 0}.widget_goodreads div[class^=gr_custom_container]{border:none}.widget_goodreads div[class^=gr_custom_each_container]{border-bottom:none;margin-bottom:1rem;padding-bottom:0}.widget_goodreads div[class^=gr_custom_author],.widget_goodreads h2[class^=gr_custom_header]{font-size:inherit;line-height:1.15}.widget_eu_cookie_law_widget #eu-cookie-law{border-color:#ccc;color:#767676;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:.68182em;padding:.5rem 1rem}.widget_eu_cookie_law_widget #eu-cookie-law .accept{font-size:1em;padding:10px 12px}.widget_rss li a.rsswidget{display:block;margin:1rem 0 .5rem}.widget_rss .rssSummary{font-family:NonBreakingSpaceOverride,"Hoefler Text","Baskerville Old Face",Garamond,"Times New Roman",serif;font-weight:400;font-size:22px}.widget_rss .rss-date,.widget_rss cite{color:#9c9c9c;display:block;font-size:.71111em;font-weight:500;margin:.5rem 0}.widget_rss cite{font-style:normal}.widget_rss cite:before{content:"\2014\00a0"}.widget_top-posts .widgets-list-layout-links{float:inherit;margin-right:calc(40px + 1rem);width:inherit}@media only screen and (min-width:600px){.widget.widget_search .search-field{max-width:calc(50vw - 20%)}}.twentynineteen-customizer .entry .entry-footer>span,.twentynineteen-customizer .entry .entry-meta>span{display:inline} \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentynineteen.css b/plugins/jetpack/modules/theme-tools/compat/twentynineteen.css
new file mode 100644
index 00000000..4ba953f0
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentynineteen.css
@@ -0,0 +1,374 @@
+/* Infinite scroll */
+
+/* Globally hidden elements when Infinite Scroll is supported and in use. */
+.infinite-scroll .pagination,
+.infinite-scroll .posts-navigation,
+.infinite-scroll.neverending .site-footer {
+ /* Theme Footer (when set to scrolling) */
+ display: none;
+}
+
+ /* When Infinite Scroll has reached its end we need to re-display elements that were hidden (via .neverending) before. */
+.infinity-end.neverending .site-footer {
+ display: block;
+}
+
+.infinite-loader {
+ margin: calc(3 * 1rem) auto;
+}
+
+.infinite-loader .spinner {
+ margin: 0 auto;
+ left: inherit !important;
+}
+
+.site-main #infinite-handle {
+ margin: calc(2 * 1rem) auto;
+}
+
+.site-main #infinite-handle span {
+ background: transparent;
+ display: block;
+ font-size: 0.8888888889em;
+ text-align: center;
+}
+
+.site-main #infinite-handle span button,
+.site-main #infinite-handle span button:hover,
+.site-main #infinite-handle span button:focus {
+ transition: background 150ms ease-in-out;
+ background: #0073aa;
+ border: none;
+ border-radius: 5px;
+ box-sizing: border-box;
+ color: white;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ font-size: 0.8888888889em;
+ font-weight: 600;
+ line-height: 1.2;
+ outline: none;
+ padding: 0.66rem 1rem;
+}
+
+.site-main #infinite-handle span button:hover {
+ cursor: pointer;
+}
+
+.site-main #infinite-handle span button:hover,
+.site-main #infinite-handle span button:focus {
+ background: #111;
+}
+
+.site-main #infinite-handle span button:focus {
+ outline: thin dotted;
+ outline-offset: -4px;
+}
+
+.site-main .infinite-wrap .entry:first-of-type {
+ margin-top: calc(6 * 1rem);
+}
+
+/**
+ * Responsive Videos
+ */
+.entry .jetpack-video-wrapper {
+ margin-bottom: 1.75em;
+}
+
+/**
+ * Sharing
+ */
+
+.sd-block {
+ line-height: 1;
+}
+
+.entry div.sharedaddy h3.sd-title,
+.entry h3.sd-title {
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ font-size: 1.125em;
+ font-weight: 700;
+ letter-spacing: -0.02em;
+ line-height: 1.2;
+ margin-bottom: 0.5em;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.entry div.sharedaddy h3.sd-title:before,
+.entry h3.sd-title:before {
+ background: #767676;
+ border-top: none;
+ content: "\020";
+ display: block;
+ height: 2px;
+ margin: 1rem 0;
+ width: 1em;
+ min-width: inherit;
+}
+
+.sd-social-icon-text .sd-content ul,
+.sd-social-text .sd-content ul {
+ margin-bottom: -0.3125em !important;
+}
+
+.sd-social-icon .sd-content ul,
+.sd-social-official .sd-content ul {
+ margin-bottom: 0 !important;
+}
+
+.entry #sharing_email .sharing_send,
+.entry .sd-content ul li .option a.share-ustom,
+.entry .sd-content ul li a.sd-button,
+.entry .sd-content ul li.advanced a.share-more,
+.entry .sd-content ul li.preview-item div.option.option-smart-off a,
+.entry .sd-social-icon .sd-content ul li a.sd-button,
+.entry .sd-social-icon-text .sd-content ul li a.sd-button,
+.entry .sd-social-official .sd-content > ul > li .digg_button > a,
+.entry .sd-social-official .sd-content > ul > li > a.sd-button,
+.entry .sd-social-text .sd-content ul li a.sd-button {
+ box-shadow: none;
+}
+
+
+/**
+ * Related Posts
+ */
+
+.entry #jp-relatedposts {
+ padding-top: 0;
+ margin-top: 32px;
+ margin-bottom: 32px;
+}
+
+.entry #jp-relatedposts h3.jp-relatedposts-headline {
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ font-size: 1.125em;
+ font-weight: 700;
+ letter-spacing: -0.02em;
+ line-height: 1.2;
+ margin-bottom: 0.5em;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.entry #jp-relatedposts h3.jp-relatedposts-headline:before {
+ background: #767676;
+ border-top: none;
+ content: "\020";
+ display: block;
+ height: 2px;
+ margin: 1rem 0;
+ width: 1em;
+ min-width: inherit;
+}
+
+.entry #jp-relatedposts h3.jp-relatedposts-headline em:before {
+ display: none;
+}
+
+.entry #jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post {
+ opacity: 1;
+}
+
+.entry #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
+.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ font-size: 1em;
+ letter-spacing: -0.02em;
+ line-height: 1.2;
+ margin-bottom: 0.5em;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.entry #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title a,
+.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span a {
+ font-weight: 700;
+}
+
+.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title,
+.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-excerpt {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,
+.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date {
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ font-size: 13px;
+ font-weight: 500;
+}
+
+.entry #jp-relatedposts .jp-relatedposts-items p,
+.entry #jp-relatedposts .jp-relatedposts-items-visual
+.entry h4.jp-relatedposts-post-title {
+ letter-spacing: normal;
+}
+
+
+/**
+ * Stats
+ */
+
+#wpstats {
+ display: none;
+}
+
+
+/**
+ * Comments
+ */
+
+.comments-area .comments-title-wrap + .comment-respond .comment-reply-title {
+ display: none;
+}
+
+
+/**
+ * Widgets
+ */
+
+/* Widget List Resets */
+.widget_authors ul,
+.widget_author_grid ul,
+.widget_jp_blogs_i_follow ul,
+.widget_links ul,
+.widget_rss_links ul {
+ list-style: none;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.widget_links li,
+.widget_jp_blogs_i_follow li,
+.widget_rss_links li {
+ color: #767676;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ font-size: calc(22px * 1.125);
+ font-weight: 700;
+ line-height: 1.2;
+ margin-top: 0.5rem;
+ margin-bottom: 0.5rem;
+}
+
+
+/* Authors Widget */
+.widget.widget_authors ul li > ul {
+ list-style-type: disc;
+ padding-left: 4.25rem;
+}
+
+.rtl .widget.widget_authors ul li > ul {
+ padding-left: 0;
+ padding-right: 1rem;
+}
+
+.widget_authors > ul > li > a {
+ display: block;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ position: relative;
+}
+
+.widget.widget_authors li a strong {
+ line-height: 1.2;
+ position: absolute;
+ top: 0;
+}
+
+.widget.widget_authors .avatar {
+ float: left;
+ margin-right: 1em;
+}
+
+.widget_authors li > ul {
+ clear: both;
+}
+
+/* Display WordPress Posts */
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
+ font-size: 100%;
+ margin: 1rem 0;
+}
+
+/* GoodReads */
+.widget_goodreads div[class^="gr_custom_container"] {
+ border: none;
+}
+
+.widget_goodreads div[class^="gr_custom_each_container"] {
+ border-bottom: none;
+ margin-bottom: 1rem;
+ padding-bottom: 0;
+}
+
+.widget_goodreads h2[class^="gr_custom_header"],
+.widget_goodreads div[class^="gr_custom_author"] {
+ font-size: inherit;
+ line-height: 1.15;
+}
+
+/* EU cookie law */
+.widget_eu_cookie_law_widget #eu-cookie-law {
+ border-color: #ccc;
+ color: #767676;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ font-size: 0.68182em;
+ padding: 0.5rem 1rem;
+}
+
+.widget_eu_cookie_law_widget #eu-cookie-law .accept {
+ font-size: 1em;
+ padding: 10px 12px;
+}
+
+/* RSS Feed Widget */
+.widget_rss li a.rsswidget {
+ display: block;
+ margin: 1rem 0 0.5rem;
+}
+
+.widget_rss .rssSummary {
+ font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif;
+ font-weight: 400;
+ font-size: 22px;
+}
+
+.widget_rss cite,
+.widget_rss .rss-date {
+ color: #9c9c9c;
+ display: block;
+ font-size: 0.71111em;
+ font-weight: 500;
+ margin: 0.5rem 0;
+}
+
+.widget_rss cite {
+ font-style: normal;
+}
+
+.widget_rss cite:before {
+ content: "\2014\00a0";
+}
+
+/* Top Posts & Pages Widget */
+.widget_top-posts .widgets-list-layout-links {
+ float: inherit;
+ margin-left: calc(40px + 1rem);
+ width: inherit;
+}
+
+/* Search widget override */
+@media only screen and (min-width: 600px) {
+ .widget.widget_search .search-field {
+ max-width: calc( 50vw - 20% );
+ }
+}
+
+/**
+ * Content Options
+ */
+.twentynineteen-customizer .entry .entry-meta > span,
+.twentynineteen-customizer .entry .entry-footer > span {
+ display: inline;
+}
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentynineteen.php b/plugins/jetpack/modules/theme-tools/compat/twentynineteen.php
new file mode 100644
index 00000000..fcc8b8c1
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentynineteen.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Jetpack Compatibility File
+ * See: http://jetpack.com/
+ */
+
+function twentynineteen_jetpack_setup() {
+
+ /**
+ * Add theme support for Infinite Scroll.
+ */
+ add_theme_support( 'infinite-scroll', array(
+ 'type' => 'click',
+ 'container' => 'main',
+ 'render' => 'twentynineteen_infinite_scroll_render',
+ 'footer' => 'page',
+ ) );
+
+ /**
+ * Add theme support for Responsive Videos.
+ */
+ add_theme_support( 'jetpack-responsive-videos' );
+
+ /**
+ * Add theme support for geo-location.
+ */
+ add_theme_support( 'jetpack-geo-location' );
+
+ /**
+ * Add theme support for Content Options.
+ */
+ add_theme_support( 'jetpack-content-options', array(
+ 'blog-display' => array( 'content', 'excerpt' ),
+ 'post-details' => array(
+ 'stylesheet' => 'twentynineteen-style',
+ 'date' => '.posted-on',
+ 'categories' => '.cat-links',
+ 'tags' => '.tags-links',
+ 'author' => '.byline',
+ 'comment' => '.comments-link',
+ ),
+ 'featured-images' => array(
+ 'archive' => true,
+ 'post' => true,
+ 'page' => true,
+ ),
+ ) );
+}
+add_action( 'after_setup_theme', 'twentynineteen_jetpack_setup' );
+
+/**
+ * Custom render function for Infinite Scroll.
+ */
+function twentynineteen_infinite_scroll_render() {
+ while ( have_posts() ) {
+ the_post();
+ get_template_part( 'template-parts/content/content' );
+ }
+}
+
+function twentynineteen_init_jetpack() {
+ /**
+ * Add our compat CSS file for Infinite Scroll and custom widget stylings and such.
+ * Set the version equal to filemtime for development builds, and the JETPACK__VERSION for production
+ * or skip it entirely for wpcom.
+ */
+ if ( ! is_admin() ) {
+ $version = false;
+ if ( method_exists( 'Jetpack', 'is_development_version' ) ) {
+ $version = Jetpack::is_development_version() ? filemtime( plugin_dir_path( __FILE__ ) . 'twentynineteen.css' ) : JETPACK__VERSION;
+ }
+ wp_enqueue_style( 'twentynineteen-jetpack', plugins_url( 'twentynineteen.css', __FILE__ ), array(), $version );
+ wp_style_add_data( 'twentynineteen-jetpack', 'rtl', 'replace' );
+ }
+}
+add_action( 'init', 'twentynineteen_init_jetpack' );
+
+/**
+ * Alter gallery widget default width.
+ */
+function twentynineteen_gallery_widget_content_width( $width ) {
+ return 390;
+}
+add_filter( 'gallery_widget_content_width', 'twentynineteen_gallery_widget_content_width' );
+
+/**
+ * Alter featured-image default visibility for content-options.
+ */
+function twentynineteen_override_post_thumbnail( $width ) {
+ $options = get_theme_support( 'jetpack-content-options' );
+ $featured_images = ( ! empty( $options[0]['featured-images'] ) ) ? $options[0]['featured-images'] : null;
+
+ $settings = array(
+ 'post-default' => ( isset( $featured_images['post-default'] ) && false === $featured_images['post-default'] ) ? '' : 1,
+ 'page-default' => ( isset( $featured_images['page-default'] ) && false === $featured_images['page-default'] ) ? '' : 1,
+ );
+
+ $settings = array_merge( $settings, array(
+ 'post-option' => get_option( 'jetpack_content_featured_images_post', $settings['post-default'] ),
+ 'page-option' => get_option( 'jetpack_content_featured_images_page', $settings['page-default'] ),
+ ) );
+
+ if ( ( ! $settings['post-option'] && is_single() )
+ || ( ! $settings['page-option'] && is_singular() && is_page() ) ) {
+ return false;
+ } else {
+ return ! post_password_required() && ! is_attachment() && has_post_thumbnail();
+ }
+}
+add_filter( 'twentynineteen_can_show_post_thumbnail', 'twentynineteen_override_post_thumbnail', 10, 2 );
+
+/**
+ * Adds custom classes to the array of body classes.
+ *
+ * @param array $classes Classes for the body element.
+ * @return array
+ */
+function twentynineteen_jetpack_body_classes( $classes ) {
+ // Adds a class if we're in the Customizer
+ if ( is_customize_preview() ) :
+ $classes[] = 'twentynineteen-customizer';
+ endif;
+
+ return $classes;
+}
+add_filter( 'body_class', 'twentynineteen_jetpack_body_classes' );
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyseventeen.php b/plugins/jetpack/modules/theme-tools/compat/twentyseventeen.php
new file mode 100644
index 00000000..4a60e504
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentyseventeen.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Jetpack Compatibility File
+ * See: http://jetpack.com/
+ */
+
+function twentyseventeen_jetpack_setup() {
+ /**
+ * Add theme support for geo-location.
+ */
+ add_theme_support( 'jetpack-geo-location' );
+}
+add_action( 'after_setup_theme', 'twentyseventeen_jetpack_setup' );
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css b/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css
new file mode 100644
index 00000000..d60c31a4
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css
@@ -0,0 +1,832 @@
+/**
+ * Jetpack Comments
+ */
+
+.comment-form iframe {
+ margin: 0;
+}
+
+.comment-form .subscribe-label {
+ font-weight: 400;
+ letter-spacing: 0;
+ text-transform: none;
+}
+
+.comment-subscription-form {
+ margin: 1.75em 0 0;
+}
+
+.comment-subscription-form + .comment-subscription-form {
+ margin-top: 0;
+}
+
+
+/**
+ * Extra Widgets
+ */
+
+ /* Blog Subscriptions Widget */
+.jetpack_subscription_widget #subscribe-email input {
+ padding: 0.625em 0.4375em;
+ width: 100%;
+}
+
+.jetpack_subscription_widget form > :last-child {
+ margin-bottom: 0;
+}
+
+ /* Contact Info Widget */
+.widget_contact_info .contact-map {
+ margin-bottom: 1.75em;
+}
+
+/* Display WordPress Posts Widget */
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts {
+ margin: 0;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
+ font-size: inherit;
+ margin: 0 0 0.875em;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
+ margin-bottom: 0.875em;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ font-size: inherit;
+ line-height: 1.75 !important;
+ margin: 0 0 1.75em !important;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts > :last-child {
+ margin-bottom: 0 !important;
+}
+
+/* Gallery Widget */
+.widget-gallery .slideshow-window {
+ border-radius: 0;
+}
+
+/* Goodreads Widget */
+.widget_goodreads div[class^="gr_custom_container"] {
+ background-color: transparent;
+ border: 0;
+ border-radius: 0;
+ color: inherit;
+ padding: 0;
+}
+
+.widget_goodreads div[class^="gr_custom_container"] a {
+ color: inherit;
+}
+
+.widget_goodreads div[class^="gr_custom_each_container"] {
+ border: 0;
+ margin-bottom: 1.75em;
+ padding-bottom: 0;
+}
+
+.widget_goodreads h2[class^="gr_custom_header"],
+.widget_goodreads div[class^="gr_custom_author"] {
+ font-size: inherit;
+}
+
+/* Gravatar Profile Widget */
+.widget-grofile .grofile-thumbnail {
+ width: 300px;
+}
+
+.widget-area .widget-grofile h4 {
+ font-size: inherit;
+ font-weight: 900;
+ margin: 1.75em 0 0;
+}
+
+.widget-area .widget-grofile .grofile-accounts {
+ margin-top: 0.4375em;
+}
+
+/* Image Widget */
+.widget_image .wp-caption {
+ margin-bottom: 0;
+}
+
+/* RSS Links Widget */
+.widget_rss_links img {
+ position: relative;
+ top: -1px;
+}
+
+/* Social Media Icon Widget */
+.widget.widget_wpcom_social_media_icons_widget ul {
+ margin: 0 0 -0.4375em;
+}
+
+.widget.widget_wpcom_social_media_icons_widget ul:before,
+.widget.widget_wpcom_social_media_icons_widget ul:after {
+ content: "";
+ display: table;
+}
+
+.widget.widget_wpcom_social_media_icons_widget ul:after {
+ clear: both;
+}
+
+.widget.widget_wpcom_social_media_icons_widget li {
+ float: right;
+ margin: 0 0 0.4375em 0.4375em;
+}
+
+.widget.widget_wpcom_social_media_icons_widget li a {
+ border: 1px solid currentColor;
+ border-radius: 50%;
+ color: inherit;
+ display: block;
+ height: 35px;
+ position: relative;
+ width: 35px;
+}
+
+.widget.widget_wpcom_social_media_icons_widget li a:before {
+ height: 33px;
+ line-height: 33px;
+ text-align: center;
+ width: 33px;
+}
+
+.widget.widget_wpcom_social_media_icons_widget li a:hover:before,
+.widget.widget_wpcom_social_media_icons_widget li a:focus:before {
+ opacity: 0.8;
+}
+
+/* Social Icons Widget */
+.widget.jetpack_widget_social_icons ul {
+ margin: 0 0 -0.4375em;
+}
+
+.widget.jetpack_widget_social_icons ul:before,
+.widget.jetpack_widget_social_icons ul:after {
+ content: "";
+ display: table;
+}
+
+.widget.jetpack_widget_social_icons ul:after {
+ clear: both;
+}
+
+.widget.jetpack_widget_social_icons li {
+ float: right;
+ margin: 0 0 0.4375em 0.4375em;
+}
+
+.widget.jetpack_widget_social_icons li a {
+ border: 1px solid currentColor;
+ border-radius: 50%;
+ color: inherit;
+ display: block;
+ position: relative;
+}
+
+.widget.jetpack_widget_social_icons li a:hover,
+.widget.jetpack_widget_social_icons li a:focus {
+ opacity: 0.8;
+}
+
+.widget.jetpack_widget_social_icons ul.size-small a {
+ height: 38px;
+ padding: 6px;
+ width: 38px;
+}
+
+.widget.jetpack_widget_social_icons ul.size-small svg {
+ height: 24px;
+ width: 24px;
+}
+
+.widget.jetpack_widget_social_icons ul.size-medium a {
+ height: 50px;
+ padding: 8px;
+ width: 50px;
+}
+
+.widget.jetpack_widget_social_icons ul.size-medium svg {
+ height: 32px;
+ width: 32px;
+}
+
+.widget.jetpack_widget_social_icons ul.size-large a {
+ height: 70px;
+ padding: 10px;
+ width: 70px;
+}
+
+.widget.jetpack_widget_social_icons ul.size-large svg {
+ height: 48px;
+ width: 48px;
+}
+
+/* Top Posts & Pages Widget */
+.widget_top-posts .widgets-list-layout .widgets-list-layout-blavatar {
+ margin-top: 0.25em;
+}
+
+.widget_top-posts .widgets-list-layout-links {
+ width: -webkit-calc(100% - 3.375em);
+ width: calc(100% - 3.375em);
+}
+
+.widget_top-posts .widgets-list-layout li {
+ margin-bottom: 0.875em;
+}
+
+.widget_top-posts .widgets-list-layout li:last-child {
+ margin-bottom: 0;
+}
+
+.widget-grid-view-image:nth-child(odd) {
+ clear: both;
+}
+
+/* Upcoming Events Widget */
+.widget_upcoming_events_widget .upcoming-events li {
+ margin-bottom: 0.875em
+}
+
+
+/**
+ * Shortcodes
+ */
+
+/* Contact Form */
+.entry-content .contact-form label {
+ color: inherit;
+ display: block;
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
+ font-size: 13px;
+ font-size: 0.8125rem;
+ font-weight: 400;
+ letter-spacing: 0.076923077em;
+ line-height: 1.6153846154;
+ margin-bottom: 0.5384615385em;
+ text-transform: uppercase;
+}
+
+.entry-content .contact-form label span {
+ color: inherit;
+ letter-spacing: 0;
+ opacity: 0.7;
+ text-transform: capitalize;
+}
+
+.entry-content .contact-form input[type="text"],
+.entry-content .contact-form input[type="email"],
+.entry-content .contact-form textarea {
+ margin-bottom: 1.75em;
+ max-width: 100%;
+ width: 100%;
+}
+
+.entry-content .contact-form label.checkbox,
+.entry-content .contact-form label.radio {
+ font-family: inherit;
+ font-size: inherit;
+ letter-spacing: 0;
+ margin-bottom: 0;
+ text-transform: none;
+}
+
+.entry-content .contact-form label.checkbox:nth-last-child(2),
+.entry-content .contact-form label.radio:nth-last-child(2) {
+ margin-bottom: 0.875em;
+}
+
+.entry-content .contact-form input[type="radio"],
+.entry-content .contact-form input[type="checkbox"] {
+ margin-bottom: 0.875em;
+}
+
+.entry-content .contact-form select {
+ margin-bottom: 1.75em;
+}
+
+/* Facebook */
+.fb_iframe_widget {
+ margin-bottom: 1.75em;
+ max-width: 100%;
+}
+
+.fb_iframe_widget span {
+ max-width: 100%;
+}
+
+/* Gist */
+.gist table {
+ table-layout: auto;
+}
+
+.entry-content .gist .gist-file {
+ margin-bottom: 1.75em;
+}
+
+/* Instagram */
+.instagram-media {
+ margin-bottom: 1.75em !important;
+}
+
+/* Mixclound */
+iframe[src^="http://api.mixcloud.com/"] {
+ margin-right: -8px;
+ max-width: -webkit-calc(100% + 8px);
+ max-width: calc(100% + 8px);
+}
+
+/* Crowdsignal */
+.PDS_Poll,
+.CSS_Poll {
+ display: block !important;
+ margin-bottom: 1.75em;
+}
+
+.PDS_Poll .pds-box,
+.CSS_Poll .css-box {
+ max-width: 100%;
+ width: auto;
+}
+
+/* Portfolio */
+.entry-content .portfolio-entry {
+ margin-bottom: 1.75em;
+}
+
+.entry-content .portfolio-entry-title,
+.entry-content .portfolio-entry-meta {
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
+}
+
+.entry-content .portfolio-entry-title a,
+.entry-content .portfolio-entry-meta a {
+ box-shadow: none;
+}
+
+.entry-content .portfolio-entry-title a:hover,
+.entry-content .portfolio-entry-meta a:hover {
+ box-shadow: 0 1px 0 0 currentColor;
+}
+
+.entry-content .portfolio-entry-meta span,
+.entry-content .portfolio-entry-meta a {
+ font-size: 1em;
+}
+
+.entry-content .portfolio-entry-title {
+ font-size: inherit;
+ line-height: 1.3125;
+}
+
+.entry-content .portfolio-featured-image + .portfolio-entry-title {
+ margin-top: 0.875em;
+ margin-bottom: 0.4375em;
+}
+
+.entry-content .portfolio-entry-meta,
+.entry-content .portfolio-entry-content p {
+ font-size: 13px;
+ font-size: 0.8125em;
+ line-height: 1.615384615;
+}
+
+.entry-content .portfolio-entry-content p:last-child {
+ margin-bottom: 0;
+}
+
+.entry-content .portfolio-entry-title + .portfolio-entry-meta {
+ margin-top: 0.538461538em;
+}
+
+.entry-content .portfolio-entry-content {
+ margin-top: 0.875em;
+}
+
+.entry-content .portfolio-entry-content p {
+ margin-bottom: 1.615384615em;
+}
+
+/* Presentation */
+.entry-content .presentation-wrapper {
+ margin: 0 0 1.75em;
+ max-width: 100%;
+}
+
+.presentation {
+ max-width: 100%;
+}
+
+/* Recipes */
+.entry-content .jetpack-recipe {
+ border: 0;
+ margin: 0 0 1.75em;
+ padding: 0;
+}
+
+.entry-content .jetpack-recipe-title {
+ border: 0;
+ margin-top: 0;
+ padding: 0;
+}
+
+.entry-content .jetpack-recipe .jetpack-recipe-meta {
+ font-size: inherit;
+ margin: 0;
+}
+
+/* Scribd */
+.scribd_iframe_embed + div {
+ margin-bottom: 28px;
+}
+
+/* Slideshow */
+.entry-content .slideshow-window {
+ border-radius: 0;
+ margin-bottom: 1.75em;
+}
+
+/* Subscription Form */
+.entry-content .jetpack_subscription_widget {
+ border-top: 0;
+ font-size: inherit;
+ margin-bottom: 1.75em;
+ padding: 0;
+}
+
+.entry-content #subscribe-email input {
+ font-size: inherit;
+ line-height: normal;
+ padding: 0.625em 0.4375em;
+ width: 100%;
+}
+
+.entry-content .jetpack_subscription_widget input[type="submit"] {
+ font-size: inherit;
+ padding: 0.84375em 0.875em 0.78125em;
+}
+
+/* Testimonial */
+.entry-content .testimonial-entry {
+ margin-bottom: 1.75em;
+}
+
+.entry-content .testimonial-entry-content {
+ margin: 0;
+}
+
+.entry-content .testimonial-entry-title,
+.entry-content .testimonial-entry-content p {
+ font-size: 13px;
+ font-size: 0.8125em;
+ line-height: 1.615384615;
+ margin: 0;
+}
+
+.entry-content .testimonial-entry-content p {
+ margin-bottom: 1.615384615em;
+}
+
+.entry-content .testimonial-entry-title {
+ float: right;
+}
+
+.entry-content .testimonial-entry-title a {
+ box-shadow: none;
+}
+
+.entry-content .testimonial-entry-title a:hover {
+ box-shadow: 0 1px 0 0 currentColor;
+}
+
+.entry-content .testimonial-featured-image img {
+ float: left;
+ max-width: 42px;
+}
+
+/* Twitter-timeline */
+.twitter-timeline {
+ margin-bottom: 1.75em !important;
+}
+
+
+/**
+ * Responsive Videos
+ */
+.hentry .jetpack-video-wrapper {
+ margin-bottom: 1.75em;
+}
+
+
+/**
+ * Related Posts
+ */
+
+.entry-content #jp-relatedposts {
+ margin: 0;
+ padding: 1.75em 0;
+ position: relative;
+}
+
+.jp-relatedposts:before,
+.jp-relatedposts:last-child:after {
+ background-color: currentColor;
+ content: "";
+ height: 1px;
+ opacity: 0.2;
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 100%;
+}
+
+.jp-relatedposts:last-child:after {
+ bottom: 0;
+ top: auto;
+}
+
+.entry-content #jp-relatedposts h3.jp-relatedposts-headline {
+ color: inherit;
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
+ font-size: 13px;
+ font-size: 0.8125rem;
+ font-weight: 400;
+ line-height: 1;
+ margin-bottom: 1.076923077em;
+}
+
+.entry-content #jp-relatedposts h3.jp-relatedposts-headline em:before {
+ display: none;
+}
+
+.entry-content #jp-relatedposts h3.jp-relatedposts-headline em {
+ font-weight: 400;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-headline em:after {
+ content: ":";
+}
+
+.jp-relatedposts-items:before,
+.jp-relatedposts-items:after {
+ content: "";
+ display: table;
+}
+
+.jp-relatedposts-items:after {
+ clear: both;
+}
+
+.entry-content .jp-relatedposts-post-aoverlay,
+.entry-content .jp-relatedposts-post-a {
+ box-shadow: none;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
+ margin-bottom: 1.75em;
+ width: 100%;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:last-child {
+ margin-bottom: 0;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span {
+ max-width: 100%;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items p,
+.entry-content #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title {
+ font-size: 13px;
+ font-size: 0.8125rem;
+ letter-spacing: 0;
+ line-height: 1.615384615;
+}
+
+.jp-relatedposts-post-date,
+.jp-relatedposts-post-context {
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
+}
+
+.jp-relatedposts-post-title,
+#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post-excerpt,
+.entry-content #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title {
+ margin-bottom: 1.076923077em;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
+ font-weight: 700;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover,
+.entry-content .jp-relatedposts-post-aoverlay:hover + .jp-relatedposts-post-title .jp-relatedposts-post-a {
+ box-shadow: 0 1px 0 0 currentColor;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover,
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a {
+ text-decoration: none;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date,
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,
+.entry-content #jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post {
+ opacity: 1;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post {
+ padding-left: 0;
+}
+
+.entry-content .jp-relatedposts-post-a:hover img.jp-relatedposts-post-img,
+.entry-content .jp-relatedposts-post-a:focus img.jp-relatedposts-post-img {
+ opacity: 0.85;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img {
+ margin-bottom: 0.875em;
+ max-width: 100%;
+}
+
+
+/**
+ * Sharing
+ */
+
+.sharedaddy {
+ padding: 1.75em 0;
+ position: relative;
+}
+
+.sharedaddy:before,
+.sharedaddy:last-child:after {
+ background-color: currentColor;
+ content: "";
+ height: 1px;
+ opacity: 0.2;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+
+.sharedaddy:last-child:after {
+ bottom: 0;
+ top: auto;
+}
+
+.sd-block {
+ line-height: 1;
+}
+
+.sd-like {
+ padding-bottom: 1.125em;
+}
+
+.hentry div.sharedaddy h3.sd-title,
+.hentry h3.sd-title {
+ color: inherit;
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
+ font-size: 13px;
+ font-size: 0.8125rem;
+ font-weight: 400;
+ line-height: 1;
+ margin-bottom: 1.076923077em;
+}
+
+.hentry div.sharedaddy h3.sd-title:before {
+ display: none;
+}
+
+.sd-social-icon-text .sd-content ul,
+.sd-social-text .sd-content ul {
+ margin-bottom: -0.3125em !important;
+}
+
+.sd-social-icon .sd-content ul {
+ margin-bottom: 0 !important;
+}
+
+.sd-social-official .sd-content ul {
+ margin-bottom: -0.625em !important;
+}
+
+.hentry #sharing_email .sharing_send,
+.hentry .sd-content ul li .option a.share-ustom,
+.hentry .sd-content ul li a.sd-button,
+.hentry .sd-content ul li.advanced a.share-more,
+.hentry .sd-content ul li.preview-item div.option.option-smart-off a,
+.hentry .sd-social-icon .sd-content ul li a.sd-button,
+.hentry .sd-social-icon-text .sd-content ul li a.sd-button,
+.hentry .sd-social-official .sd-content > ul > li .digg_button > a,
+.hentry .sd-social-official .sd-content > ul > li > a.sd-button,
+.hentry .sd-social-text .sd-content ul li a.sd-button {
+ box-shadow: none;
+}
+
+
+/**
+ * Stats
+ */
+
+#wpstats {
+ display: none;
+}
+
+
+/**
+ * Tiled gallery
+ */
+
+.entry-content .tiled-gallery {
+ margin-bottom: 1.75em;
+}
+
+
+/**
+ * Media Queries
+ */
+
+@media screen and (min-width: 56.875em) {
+ .widget-area .jetpack_subscription_widget #subscribe-email input {
+ padding: 0.4615384615em 0.5384615385em;
+ }
+
+ .widget_contact_info .contact-map {
+ margin-bottom: 1.615384615em;
+ }
+
+ .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
+ .widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
+ margin-bottom: 1.076923077em;
+ }
+
+ .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ line-height: 1.615384615em !important;
+ margin: 0 0 1.615384615em !important;
+ }
+
+ .widget_goodreads div[class^="gr_custom_each_container"] {
+ margin-bottom: 1.615384615em;
+ }
+
+ .widget-area .widget-grofile h4 {
+ margin: 1.615384615em 0 0;
+ }
+
+ .widget-area .widget-grofile .grofile-accounts {
+ margin-top: 0.538461538em;
+ }
+
+ .widget.widget_wpcom_social_media_icons_widget ul {
+ margin: 0 0 -0.538461538em;
+ }
+
+ .widget.widget_wpcom_social_media_icons_widget li {
+ margin: 0 0 0.538461538em 0.538461538em;
+ }
+
+ .widget_top-posts .widgets-list-layout .widgets-list-layout-blavatar {
+ margin-top: 0.153846154em;
+ }
+
+ .widget_top-posts .widgets-list-layout-links {
+ width: -webkit-calc(100% - 4.153846154em);
+ width: calc(100% - 4.153846154em);
+ }
+
+ .widget_top-posts .widgets-list-layout li {
+ margin-bottom: 1.076923077em;
+ }
+
+ .widget_upcoming_events_widget .upcoming-events li {
+ margin-bottom: 1.076923077em
+ }
+
+ .entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
+ margin-bottom: 0;
+ padding-left: 0.875em;
+ width: 33%;
+ }
+}
+
+@media screen and (min-width: 61.5625em) {
+ body:not(.search-results) article:not(.type-page) .sharedaddy:last-child,
+ body:not(.search-results) article:not(.type-page) .jp-relatedposts:last-child {
+ padding-bottom: 0;
+ }
+
+ body:not(.search-results) article:not(.type-page) .sharedaddy:last-child:after,
+ body:not(.search-results) article:not(.type-page) .jp-relatedposts:last-child:after {
+ display: none;
+ }
+
+ body:not(.search-results) article:not(.type-page) img.below-entry-meta {
+ width: auto;
+ }
+}
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css b/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css
new file mode 100644
index 00000000..acc056cf
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css
@@ -0,0 +1,827 @@
+/**
+ * Jetpack Comments
+ */
+
+.comment-form iframe {
+ margin: 0;
+}
+
+.comment-form .subscribe-label {
+ font-weight: 400;
+ letter-spacing: 0;
+ text-transform: none;
+}
+
+.comment-subscription-form {
+ margin: 1.75em 0 0;
+}
+
+.comment-subscription-form + .comment-subscription-form {
+ margin-top: 0;
+}
+
+
+/**
+ * Extra Widgets
+ */
+
+ /* Blog Subscriptions Widget */
+.jetpack_subscription_widget #subscribe-email input {
+ padding: 0.625em 0.4375em;
+ width: 100%;
+}
+
+.jetpack_subscription_widget form > :last-child {
+ margin-bottom: 0;
+}
+
+ /* Contact Info Widget */
+.widget_contact_info .contact-map {
+ margin-bottom: 1.75em;
+}
+
+/* Display WordPress Posts Widget */
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts {
+ margin: 0;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
+ font-size: inherit;
+ margin: 0 0 0.875em;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
+ margin-bottom: 0.875em;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ font-size: inherit;
+ line-height: 1.75 !important;
+ margin: 0 0 1.75em !important;
+}
+
+.widget_jetpack_display_posts_widget .jetpack-display-remote-posts > :last-child {
+ margin-bottom: 0 !important;
+}
+
+/* Gallery Widget */
+.widget-gallery .slideshow-window {
+ border-radius: 0;
+}
+
+/* Goodreads Widget */
+.widget_goodreads div[class^="gr_custom_container"] {
+ background-color: transparent;
+ border: 0;
+ border-radius: 0;
+ color: inherit;
+ padding: 0;
+}
+
+.widget_goodreads div[class^="gr_custom_container"] a {
+ color: inherit;
+}
+
+.widget_goodreads div[class^="gr_custom_each_container"] {
+ border: 0;
+ margin-bottom: 1.75em;
+ padding-bottom: 0;
+}
+
+.widget_goodreads h2[class^="gr_custom_header"],
+.widget_goodreads div[class^="gr_custom_author"] {
+ font-size: inherit;
+}
+
+/* Gravatar Profile Widget */
+.widget-grofile .grofile-thumbnail {
+ width: 300px;
+}
+
+.widget-area .widget-grofile h4 {
+ font-size: inherit;
+ font-weight: 900;
+ margin: 1.75em 0 0;
+}
+
+.widget-area .widget-grofile .grofile-accounts {
+ margin-top: 0.4375em;
+}
+
+/* Image Widget */
+.widget_image .wp-caption {
+ margin-bottom: 0;
+}
+
+/* RSS Links Widget */
+.widget_rss_links img {
+ position: relative;
+ top: -1px;
+}
+
+/* Social Media Icon Widget */
+.widget.widget_wpcom_social_media_icons_widget ul {
+ margin: 0 0 -0.4375em;
+}
+
+.widget.widget_wpcom_social_media_icons_widget ul:before,
+.widget.widget_wpcom_social_media_icons_widget ul:after {
+ content: "";
+ display: table;
+}
+
+.widget.widget_wpcom_social_media_icons_widget ul:after {
+ clear: both;
+}
+
+.widget.widget_wpcom_social_media_icons_widget li {
+ float: left;
+ margin: 0 0.4375em 0.4375em 0;
+}
+
+.widget.widget_wpcom_social_media_icons_widget li a {
+ border: 1px solid currentColor;
+ border-radius: 50%;
+ color: inherit;
+ display: block;
+ height: 35px;
+ position: relative;
+ width: 35px;
+}
+
+.widget.widget_wpcom_social_media_icons_widget li a:before {
+ height: 33px;
+ line-height: 33px;
+ text-align: center;
+ width: 33px;
+}
+
+.widget.widget_wpcom_social_media_icons_widget li a:hover:before,
+.widget.widget_wpcom_social_media_icons_widget li a:focus:before {
+ opacity: 0.8;
+}
+
+/* Social Icons Widget */
+.widget.jetpack_widget_social_icons ul {
+ margin: 0 0 -0.4375em;
+}
+
+.widget.jetpack_widget_social_icons ul:before,
+.widget.jetpack_widget_social_icons ul:after {
+ content: "";
+ display: table;
+}
+
+.widget.jetpack_widget_social_icons ul:after {
+ clear: both;
+}
+
+.widget.jetpack_widget_social_icons li {
+ float: left;
+ margin: 0 0.4375em 0.4375em 0;
+}
+
+.widget.jetpack_widget_social_icons li a {
+ border: 1px solid currentColor;
+ border-radius: 50%;
+ color: inherit;
+ display: block;
+ position: relative;
+}
+
+.widget.jetpack_widget_social_icons li a:hover,
+.widget.jetpack_widget_social_icons li a:focus {
+ opacity: 0.8;
+}
+
+.widget.jetpack_widget_social_icons ul.size-small a {
+ height: 38px;
+ padding: 6px;
+ width: 38px;
+}
+
+.widget.jetpack_widget_social_icons ul.size-small svg {
+ height: 24px;
+ width: 24px;
+}
+
+.widget.jetpack_widget_social_icons ul.size-medium a {
+ height: 50px;
+ padding: 8px;
+ width: 50px;
+}
+
+.widget.jetpack_widget_social_icons ul.size-medium svg {
+ height: 32px;
+ width: 32px;
+}
+
+.widget.jetpack_widget_social_icons ul.size-large a {
+ height: 70px;
+ padding: 10px;
+ width: 70px;
+}
+
+.widget.jetpack_widget_social_icons ul.size-large svg {
+ height: 48px;
+ width: 48px;
+}
+
+/* Top Posts & Pages Widget */
+.widget_top-posts .widgets-list-layout .widgets-list-layout-blavatar {
+ margin-top: 0.25em;
+}
+
+.widget_top-posts .widgets-list-layout-links {
+ width: -webkit-calc(100% - 3.375em);
+ width: calc(100% - 3.375em);
+}
+
+.widget_top-posts .widgets-list-layout li {
+ margin-bottom: 0.875em;
+}
+
+.widget_top-posts .widgets-list-layout li:last-child {
+ margin-bottom: 0;
+}
+
+.widget-grid-view-image:nth-child(odd) {
+ clear: both;
+}
+
+/* Upcoming Events Widget */
+.widget_upcoming_events_widget .upcoming-events li {
+ margin-bottom: 0.875em
+}
+
+/**
+ * Shortcodes
+ */
+
+/* Contact Form */
+.entry-content .contact-form label {
+ color: inherit;
+ display: block;
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
+ font-size: 13px;
+ font-size: 0.8125rem;
+ font-weight: 400;
+ letter-spacing: 0.076923077em;
+ line-height: 1.6153846154;
+ margin-bottom: 0.5384615385em;
+ text-transform: uppercase;
+}
+
+.entry-content .contact-form label span {
+ color: inherit;
+ letter-spacing: 0;
+ opacity: 0.7;
+ text-transform: capitalize;
+}
+
+.entry-content .contact-form input[type="text"],
+.entry-content .contact-form input[type="email"],
+.entry-content .contact-form textarea {
+ margin-bottom: 1.75em;
+ max-width: 100%;
+ width: 100%;
+}
+
+.entry-content .contact-form label.checkbox,
+.entry-content .contact-form label.radio {
+ font-family: inherit;
+ font-size: inherit;
+ letter-spacing: 0;
+ margin-bottom: 0;
+ text-transform: none;
+}
+
+.entry-content .contact-form label.checkbox:nth-last-child(2),
+.entry-content .contact-form label.radio:nth-last-child(2) {
+ margin-bottom: 0.875em;
+}
+
+.entry-content .contact-form input[type="radio"],
+.entry-content .contact-form input[type="checkbox"] {
+ margin-bottom: 0.875em;
+}
+
+.entry-content .contact-form select {
+ margin-bottom: 1.75em;
+}
+
+/* Facebook */
+.fb_iframe_widget {
+ margin-bottom: 1.75em;
+ max-width: 100%;
+}
+
+.fb_iframe_widget span {
+ max-width: 100%;
+}
+
+/* Gist */
+.gist table {
+ table-layout: auto;
+}
+
+.entry-content .gist .gist-file {
+ margin-bottom: 1.75em;
+}
+
+/* Instagram */
+.instagram-media {
+ margin-bottom: 1.75em !important;
+}
+
+/* Mixclound */
+iframe[src^="http://api.mixcloud.com/"] {
+ margin-left: -8px;
+ max-width: -webkit-calc(100% + 8px);
+ max-width: calc(100% + 8px);
+}
+
+/* Crowdsignal */
+.PDS_Poll,
+.CSS_Poll {
+ display: block !important;
+ margin-bottom: 1.75em;
+}
+
+.PDS_Poll .pds-box,
+.CSS_Poll .css-box {
+ max-width: 100%;
+ width: auto;
+}
+
+/* Portfolio */
+.entry-content .portfolio-entry {
+ margin-bottom: 1.75em;
+}
+
+.entry-content .portfolio-entry-title,
+.entry-content .portfolio-entry-meta {
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
+}
+
+.entry-content .portfolio-entry-title a,
+.entry-content .portfolio-entry-meta a {
+ box-shadow: none;
+}
+
+.entry-content .portfolio-entry-title a:hover,
+.entry-content .portfolio-entry-meta a:hover {
+ box-shadow: 0 1px 0 0 currentColor;
+}
+
+.entry-content .portfolio-entry-meta span,
+.entry-content .portfolio-entry-meta a {
+ font-size: 1em;
+}
+
+.entry-content .portfolio-entry-title {
+ font-size: inherit;
+ line-height: 1.3125;
+}
+
+.entry-content .portfolio-featured-image + .portfolio-entry-title {
+ margin-top: 0.875em;
+ margin-bottom: 0.4375em;
+}
+
+.entry-content .portfolio-entry-meta,
+.entry-content .portfolio-entry-content p {
+ font-size: 13px;
+ font-size: 0.8125em;
+ line-height: 1.615384615;
+}
+
+.entry-content .portfolio-entry-content p:last-child {
+ margin-bottom: 0;
+}
+
+.entry-content .portfolio-entry-title + .portfolio-entry-meta {
+ margin-top: 0.538461538em;
+}
+
+.entry-content .portfolio-entry-content {
+ margin-top: 0.875em;
+}
+
+.entry-content .portfolio-entry-content p {
+ margin-bottom: 1.615384615em;
+}
+
+/* Presentation */
+.entry-content .presentation-wrapper {
+ margin: 0 0 1.75em;
+ max-width: 100%;
+}
+
+.presentation {
+ max-width: 100%;
+}
+
+/* Recipes */
+.entry-content .jetpack-recipe {
+ border: 0;
+ margin: 0 0 1.75em;
+ padding: 0;
+}
+
+.entry-content .jetpack-recipe-title {
+ border: 0;
+ margin-top: 0;
+ padding: 0;
+}
+
+.entry-content .jetpack-recipe .jetpack-recipe-meta {
+ font-size: inherit;
+ margin: 0;
+}
+
+/* Scribd */
+.scribd_iframe_embed + div {
+ margin-bottom: 28px;
+}
+
+/* Slideshow */
+.entry-content .slideshow-window {
+ border-radius: 0;
+ margin-bottom: 1.75em;
+}
+
+/* Subscription Form */
+.entry-content .jetpack_subscription_widget {
+ border-top: 0;
+ font-size: inherit;
+ margin-bottom: 1.75em;
+ padding: 0;
+}
+
+.entry-content #subscribe-email input {
+ font-size: inherit;
+ line-height: normal;
+ padding: 0.625em 0.4375em;
+ width: 100%;
+}
+
+.entry-content .jetpack_subscription_widget input[type="submit"] {
+ font-size: inherit;
+ padding: 0.84375em 0.875em 0.78125em;
+}
+
+/* Testimonial */
+.entry-content .testimonial-entry {
+ margin-bottom: 1.75em;
+}
+
+.entry-content .testimonial-entry-content {
+ margin: 0;
+}
+
+.entry-content .testimonial-entry-title,
+.entry-content .testimonial-entry-content p {
+ font-size: 13px;
+ font-size: 0.8125em;
+ line-height: 1.615384615;
+ margin: 0;
+}
+
+.entry-content .testimonial-entry-content p {
+ margin-bottom: 1.615384615em;
+}
+
+.entry-content .testimonial-entry-title {
+ float: left;
+}
+
+.entry-content .testimonial-entry-title a {
+ box-shadow: none;
+}
+
+.entry-content .testimonial-entry-title a:hover {
+ box-shadow: 0 1px 0 0 currentColor;
+}
+
+.entry-content .testimonial-featured-image img {
+ float: right;
+ max-width: 42px;
+}
+
+/* Twitter-timeline */
+.twitter-timeline {
+ margin-bottom: 1.75em !important;
+}
+
+
+/**
+ * Responsive Videos
+ */
+.hentry .jetpack-video-wrapper {
+ margin-bottom: 1.75em;
+}
+
+
+/**
+ * Related Posts
+ */
+
+.entry-content #jp-relatedposts {
+ margin: 0;
+ padding: 1.75em 0;
+ position: relative;
+}
+
+.jp-relatedposts:before,
+.jp-relatedposts:last-child:after {
+ background-color: currentColor;
+ content: "";
+ height: 1px;
+ opacity: 0.2;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+}
+
+.jp-relatedposts:last-child:after {
+ bottom: 0;
+ top: auto;
+}
+
+.entry-content #jp-relatedposts h3.jp-relatedposts-headline {
+ color: inherit;
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
+ font-size: 13px;
+ font-size: 0.8125rem;
+ font-weight: 400;
+ line-height: 1;
+ margin-bottom: 1.076923077em;
+}
+
+.entry-content #jp-relatedposts h3.jp-relatedposts-headline em:before {
+ display: none;
+}
+
+.entry-content #jp-relatedposts h3.jp-relatedposts-headline em {
+ font-weight: 400;
+}
+
+.jp-relatedposts-items:before,
+.jp-relatedposts-items:after {
+ content: "";
+ display: table;
+}
+
+.jp-relatedposts-items:after {
+ clear: both;
+}
+
+.entry-content .jp-relatedposts-post-aoverlay,
+.entry-content .jp-relatedposts-post-a {
+ box-shadow: none;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
+ margin-bottom: 1.75em;
+ width: 100%;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:last-child {
+ margin-bottom: 0;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span {
+ max-width: 100%;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items p,
+.entry-content #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title {
+ font-size: 13px;
+ font-size: 0.8125rem;
+ letter-spacing: 0;
+ line-height: 1.615384615;
+}
+
+.jp-relatedposts-post-date,
+.jp-relatedposts-post-context {
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
+}
+
+.jp-relatedposts-post-title,
+#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post-excerpt,
+.entry-content #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title {
+ margin-bottom: 1.076923077em;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
+ font-weight: 700;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover,
+.entry-content .jp-relatedposts-post-aoverlay:hover + .jp-relatedposts-post-title .jp-relatedposts-post-a {
+ box-shadow: 0 1px 0 0 currentColor;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover,
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a {
+ text-decoration: none;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date,
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,
+.entry-content #jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post {
+ opacity: 1;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post {
+ padding-right: 0;
+}
+
+.entry-content .jp-relatedposts-post-a:hover img.jp-relatedposts-post-img,
+.entry-content .jp-relatedposts-post-a:focus img.jp-relatedposts-post-img {
+ opacity: 0.85;
+}
+
+.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img {
+ margin-bottom: 0.875em;
+ max-width: 100%;
+}
+
+
+/**
+ * Sharing
+ */
+
+.sharedaddy {
+ padding: 1.75em 0;
+ position: relative;
+}
+
+.sharedaddy:before,
+.sharedaddy:last-child:after {
+ background-color: currentColor;
+ content: "";
+ height: 1px;
+ opacity: 0.2;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+
+.sharedaddy:last-child:after {
+ bottom: 0;
+ top: auto;
+}
+
+.sd-block {
+ line-height: 1;
+}
+
+.sd-like {
+ padding-bottom: 1.125em;
+}
+
+.hentry div.sharedaddy h3.sd-title,
+.hentry h3.sd-title {
+ color: inherit;
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
+ font-size: 13px;
+ font-size: 0.8125rem;
+ font-weight: 400;
+ line-height: 1;
+ margin-bottom: 1.076923077em;
+}
+
+.hentry div.sharedaddy h3.sd-title:before {
+ display: none;
+}
+
+.sd-social-icon-text .sd-content ul,
+.sd-social-text .sd-content ul {
+ margin-bottom: -0.3125em !important;
+}
+
+.sd-social-icon .sd-content ul {
+ margin-bottom: 0 !important;
+}
+
+.sd-social-official .sd-content ul {
+ margin-bottom: -0.625em !important;
+}
+
+.hentry #sharing_email .sharing_send,
+.hentry .sd-content ul li .option a.share-ustom,
+.hentry .sd-content ul li a.sd-button,
+.hentry .sd-content ul li.advanced a.share-more,
+.hentry .sd-content ul li.preview-item div.option.option-smart-off a,
+.hentry .sd-social-icon .sd-content ul li a.sd-button,
+.hentry .sd-social-icon-text .sd-content ul li a.sd-button,
+.hentry .sd-social-official .sd-content > ul > li .digg_button > a,
+.hentry .sd-social-official .sd-content > ul > li > a.sd-button,
+.hentry .sd-social-text .sd-content ul li a.sd-button {
+ box-shadow: none;
+}
+
+
+/**
+ * Stats
+ */
+
+#wpstats {
+ display: none;
+}
+
+
+/**
+ * Tiled gallery
+ */
+
+.entry-content .tiled-gallery {
+ margin-bottom: 1.75em;
+}
+
+
+/**
+ * Media Queries
+ */
+
+@media screen and (min-width: 56.875em) {
+ .widget-area .jetpack_subscription_widget #subscribe-email input {
+ padding: 0.4615384615em 0.5384615385em;
+ }
+
+ .widget_contact_info .contact-map {
+ margin-bottom: 1.615384615em;
+ }
+
+ .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
+ .widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
+ margin-bottom: 1.076923077em;
+ }
+
+ .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
+ line-height: 1.615384615em !important;
+ margin: 0 0 1.615384615em !important;
+ }
+
+ .widget_goodreads div[class^="gr_custom_each_container"] {
+ margin-bottom: 1.615384615em;
+ }
+
+ .widget-area .widget-grofile h4 {
+ margin: 1.615384615em 0 0;
+ }
+
+ .widget-area .widget-grofile .grofile-accounts {
+ margin-top: 0.538461538em;
+ }
+
+ .widget.widget_wpcom_social_media_icons_widget ul {
+ margin: 0 0 -0.538461538em;
+ }
+
+ .widget.widget_wpcom_social_media_icons_widget li {
+ margin: 0 0.538461538em 0.538461538em 0;
+ }
+
+ .widget_top-posts .widgets-list-layout .widgets-list-layout-blavatar {
+ margin-top: 0.153846154em;
+ }
+
+ .widget_top-posts .widgets-list-layout-links {
+ width: -webkit-calc(100% - 4.153846154em);
+ width: calc(100% - 4.153846154em);
+ }
+
+ .widget_top-posts .widgets-list-layout li {
+ margin-bottom: 1.076923077em;
+ }
+
+ .widget_upcoming_events_widget .upcoming-events li {
+ margin-bottom: 1.076923077em
+ }
+
+ .entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
+ margin-bottom: 0;
+ padding-right: 0.875em;
+ width: 33%;
+ }
+}
+
+@media screen and (min-width: 61.5625em) {
+ body:not(.search-results) article:not(.type-page) .sharedaddy:last-child,
+ body:not(.search-results) article:not(.type-page) .jp-relatedposts:last-child {
+ padding-bottom: 0;
+ }
+
+ body:not(.search-results) article:not(.type-page) .sharedaddy:last-child:after,
+ body:not(.search-results) article:not(.type-page) .jp-relatedposts:last-child:after {
+ display: none;
+ }
+
+ body:not(.search-results) article:not(.type-page) img.below-entry-meta {
+ width: auto;
+ }
+}
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php b/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php
new file mode 100644
index 00000000..816a74b5
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Jetpack Compatibility File
+ * See: http://jetpack.com/
+ */
+
+function twentysixteen_jetpack_setup() {
+ /**
+ * Add theme support for Responsive Videos.
+ */
+ add_theme_support( 'jetpack-responsive-videos' );
+
+ /**
+ * Add theme support for geo-location.
+ */
+ add_theme_support( 'jetpack-geo-location' );
+}
+add_action( 'after_setup_theme', 'twentysixteen_jetpack_setup' );
+
+function twentysixteen_init_jetpack() {
+ /**
+ * Add our compat CSS file for custom widget stylings and such.
+ * Set the version equal to filemtime for development builds, and the JETPACK__VERSION for production
+ * or skip it entirely for wpcom.
+ */
+ if ( ! is_admin() ) {
+ $version = false;
+ if ( method_exists( 'Jetpack', 'is_development_version' ) ) {
+ $version = Jetpack::is_development_version() ? filemtime( plugin_dir_path( __FILE__ ) . 'twentysixteen.css' ) : JETPACK__VERSION;
+ }
+ wp_enqueue_style( 'twentysixteen-jetpack', plugins_url( 'twentysixteen.css', __FILE__ ), array(), $version );
+ wp_style_add_data( 'twentysixteen-jetpack', 'rtl', 'replace' );
+ }
+}
+add_action( 'init', 'twentysixteen_init_jetpack' );
+
+/**
+ * Alter gallery widget default width.
+ */
+function twentysixteen_gallery_widget_content_width( $width ) {
+ return 390;
+}
+add_filter( 'gallery_widget_content_width', 'twentysixteen_gallery_widget_content_width' );
+
+/**
+ * Remove ratings from excerpts that are used as intro on blog index, single, and archive pages.
+ */
+function twentysixteen_remove_share() {
+ if ( is_single() || is_archive() || is_home() ) {
+ remove_filter( 'the_excerpt', 'sharing_display', 19 );
+ if ( class_exists( 'Jetpack_Likes' ) ) {
+ remove_filter( 'the_excerpt', array( Jetpack_Likes::init(), 'post_likes' ), 30, 1 );
+ }
+ }
+}
+add_action( 'loop_start', 'twentysixteen_remove_share' );
+
+function twentysixteen_jetpack_lazy_images_compat() {
+ // Since TwentySixteen outdents when window is resized, let's trigger a window resize
+ // every time we lazy load an image on the TwentySixteen theme.
+ wp_add_inline_script(
+ 'jetpack-lazy-images',
+ "jQuery( document.body ).on( 'jetpack-lazy-loaded-image', function () { jQuery( window ).trigger( 'resize' ); } );"
+ );
+}
+
+// Priority needs to be 11 here so that we have already enqueued jetpack-lazy-images.
+add_action( 'wp_enqueue_scripts', 'twentysixteen_jetpack_lazy_images_compat', 11 );
diff --git a/plugins/jetpack/modules/theme-tools/content-options.php b/plugins/jetpack/modules/theme-tools/content-options.php
new file mode 100644
index 00000000..118e31db
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/content-options.php
@@ -0,0 +1,137 @@
+<?php
+/**
+ * Content Options.
+ *
+ * This feature will only be activated for themes that declare their support.
+ * This can be done by adding code similar to the following during the
+ * 'after_setup_theme' action:
+ *
+ add_theme_support( 'jetpack-content-options', array(
+ 'blog-display' => 'content', // the default setting of the theme: 'content', 'excerpt' or array( 'content', 'excerpt' ) for themes mixing both display.
+ 'author-bio' => true, // display or not the author bio: true or false.
+ 'author-bio-default' => false, // the default setting of the author bio, if it's being displayed or not: true or false (only required if false).
+ 'masonry' => '.site-main', // a CSS selector matching the elements that triggers a masonry refresh if the theme is using a masonry layout.
+ 'post-details' => array(
+ 'stylesheet' => 'themeslug-style', // name of the theme's stylesheet.
+ 'date' => '.posted-on', // a CSS selector matching the elements that display the post date.
+ 'categories' => '.cat-links', // a CSS selector matching the elements that display the post categories.
+ 'tags' => '.tags-links', // a CSS selector matching the elements that display the post tags.
+ 'author' => '.byline', // a CSS selector matching the elements that display the post author.
+ 'comment' => '.comments-link', // a CSS selector matching the elements that display the comment link.
+ ),
+ 'featured-images' => array(
+ 'archive' => true, // enable or not the featured image check for archive pages: true or false.
+ 'archive-default' => false, // the default setting of the featured image on archive pages, if it's being displayed or not: true or false (only required if false).
+ 'post' => true, // enable or not the featured image check for single posts: true or false.
+ 'post-default' => false, // the default setting of the featured image on single posts, if it's being displayed or not: true or false (only required if false).
+ 'page' => true, // enable or not the featured image check for single pages: true or false.
+ 'page-default' => false, // the default setting of the featured image on single pages, if it's being displayed or not: true or false (only required if false).
+ 'portfolio' => true, // enable or not the featured image check for single projects: true or false.
+ 'portfolio-default' => false, // the default setting of the featured image on single projects, if it's being displayed or not: true or false (only required if false).
+ 'fallback' => true, // enable or not the featured image fallback: true or false.
+ 'fallback-default' => true, // the default setting for featured image fallbacks: true or false (only required if false)
+ ),
+ ) );
+ */
+
+/**
+ * Activate the Content Options plugin.
+ *
+ * @uses current_theme_supports()
+ */
+function jetpack_content_options_init() {
+ // If the theme doesn't support 'jetpack-content-options', don't continue.
+ if ( ! current_theme_supports( 'jetpack-content-options' ) ) {
+ return;
+ }
+
+ // Load the Customizer options.
+ require dirname( __FILE__ ) . '/content-options/customizer.php';
+
+ // Load Blog Display function.
+ require dirname( __FILE__ ) . '/content-options/blog-display.php';
+
+ // Load Author Bio function.
+ require dirname( __FILE__ ) . '/content-options/author-bio.php';
+
+ // Load Post Details function.
+ require dirname( __FILE__ ) . '/content-options/post-details.php';
+
+ // Load Featured Images function.
+ if ( jetpack_featured_images_should_load() ) {
+ require dirname( __FILE__ ) . '/content-options/featured-images.php';
+ }
+
+ // Load Featured Images Fallback function.
+ if ( jetpack_featured_images_fallback_should_load() ) {
+ require dirname( __FILE__ ) . '/content-options/featured-images-fallback.php';
+ }
+}
+add_action( 'init', 'jetpack_content_options_init' );
+
+function jetpack_featured_images_get_settings() {
+ $options = get_theme_support( 'jetpack-content-options' );
+
+ $featured_images = ( ! empty( $options[0]['featured-images'] ) ) ? $options[0]['featured-images'] : null;
+
+ $settings = array(
+ 'archive' => ( ! empty( $featured_images['archive'] ) ) ? $featured_images['archive'] : null,
+ 'post' => ( ! empty( $featured_images['post'] ) ) ? $featured_images['post'] : null,
+ 'page' => ( ! empty( $featured_images['page'] ) ) ? $featured_images['page'] : null,
+ 'portfolio' => ( ! empty( $featured_images['portfolio'] ) ) ? $featured_images['portfolio'] : null,
+ 'archive-default' => ( isset( $featured_images['archive-default'] ) && false === $featured_images['archive-default'] ) ? '' : 1,
+ 'post-default' => ( isset( $featured_images['post-default'] ) && false === $featured_images['post-default'] ) ? '' : 1,
+ 'page-default' => ( isset( $featured_images['page-default'] ) && false === $featured_images['page-default'] ) ? '' : 1,
+ 'portfolio-default' => ( isset( $featured_images['portfolio-default'] ) && false === $featured_images['portfolio-default'] ) ? '' : 1,
+ 'fallback' => ( ! empty( $featured_images['fallback'] ) ) ? $featured_images['fallback'] : null,
+ 'fallback-default' => ( isset( $featured_images['fallback-default'] ) && false === $featured_images['fallback-default'] ) ? '' : 1,
+ );
+
+ $settings = array_merge(
+ $settings,
+ array(
+ 'archive-option' => get_option( 'jetpack_content_featured_images_archive', $settings['archive-default'] ),
+ 'post-option' => get_option( 'jetpack_content_featured_images_post', $settings['post-default'] ),
+ 'page-option' => get_option( 'jetpack_content_featured_images_page', $settings['page-default'] ),
+ 'portfolio-option' => get_option( 'jetpack_content_featured_images_portfolio', $settings['portfolio-default'] ),
+ 'fallback-option' => get_option( 'jetpack_content_featured_images_fallback', $settings['fallback-default'] ),
+ )
+ );
+
+ return $settings;
+}
+
+function jetpack_featured_images_should_load() {
+ // If the theme doesn't support post thumbnails, don't continue.
+ if ( ! current_theme_supports( 'post-thumbnails' ) ) {
+ return false;
+ }
+
+ $opts = jetpack_featured_images_get_settings();
+
+ // If the theme doesn't support archive, post and page or if all the options are ticked and we aren't in the customizer, don't continue.
+ if (
+ ( true !== $opts['archive'] && true !== $opts['post'] && true !== $opts['page'] )
+ || ( 1 === $opts['archive-option'] && 1 === $opts['post-option'] && 1 === $opts['page-option'] && ! is_customize_preview() )
+ ) {
+ return false;
+ }
+
+ return true;
+}
+
+function jetpack_featured_images_fallback_should_load() {
+ // If the theme doesn't support post thumbnails, don't continue.
+ if ( ! current_theme_supports( 'post-thumbnails' ) ) {
+ return false;
+ }
+
+ $opts = jetpack_featured_images_get_settings();
+
+ // If the theme doesn't support fallback, don't continue.
+ if ( true !== $opts['fallback'] ) {
+ return false;
+ }
+
+ return true;
+}
diff --git a/plugins/jetpack/modules/theme-tools/content-options/author-bio.php b/plugins/jetpack/modules/theme-tools/content-options/author-bio.php
new file mode 100644
index 00000000..89d4603c
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/content-options/author-bio.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * The function to display Author Bio in a theme.
+ */
+function jetpack_author_bio() {
+ // If the theme doesn't support 'jetpack-content-options', don't continue.
+ if ( ! current_theme_supports( 'jetpack-content-options' ) ) {
+ return;
+ }
+
+ $options = get_theme_support( 'jetpack-content-options' );
+ $author_bio = ( ! empty( $options[0]['author-bio'] ) ) ? $options[0]['author-bio'] : null;
+ $author_bio_default = ( isset( $options[0]['author-bio-default'] ) && false === $options[0]['author-bio-default'] ) ? '' : 1;
+
+ // If the theme doesn't support 'jetpack-content-options[ 'author-bio' ]', don't continue.
+ if ( true !== $author_bio ) {
+ return;
+ }
+
+ // If 'jetpack_content_author_bio' is false, don't continue.
+ if ( ! get_option( 'jetpack_content_author_bio', $author_bio_default ) ) {
+ return;
+ }
+
+ // If we aren't on a single post, don't continue.
+ if ( ! is_single() ) {
+ return;
+ }
+ ?>
+ <div class="entry-author">
+ <div class="author-avatar">
+ <?php
+ /**
+ * Filter the author bio avatar size.
+ *
+ * @param int $size The avatar height and width size in pixels.
+ *
+ * @module theme-tools
+ *
+ * @since 4.5.0
+ */
+ $author_bio_avatar_size = apply_filters( 'jetpack_author_bio_avatar_size', 48 );
+
+ echo get_avatar( get_the_author_meta( 'user_email' ), $author_bio_avatar_size );
+ ?>
+ </div><!-- .author-avatar -->
+
+ <div class="author-heading">
+ <h2 class="author-title"><?php printf( esc_html__( 'Published by %s', 'jetpack' ), '<span class="author-name">' . get_the_author() . '</span>' ); ?></h2>
+ </div><!-- .author-heading -->
+
+ <p class="author-bio">
+ <?php the_author_meta( 'description' ); ?>
+ <a class="author-link" href="<?php echo esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ); ?>" rel="author">
+ <?php printf( esc_html__( 'View all posts by %s', 'jetpack' ), get_the_author() ); ?>
+ </a>
+ </p><!-- .author-bio -->
+ </div><!-- .entry-auhtor -->
+ <?php
+}
diff --git a/plugins/jetpack/modules/theme-tools/content-options/blog-display.php b/plugins/jetpack/modules/theme-tools/content-options/blog-display.php
new file mode 100644
index 00000000..a3f74d0b
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/content-options/blog-display.php
@@ -0,0 +1,240 @@
+<?php
+/**
+ * The functions to display Content or Excerpt in a theme.
+ */
+
+/**
+ * If the theme doesn't support 'jetpack-content-options', don't continue.
+ */
+if ( ! current_theme_supports( 'jetpack-content-options' ) ) {
+ return;
+}
+
+/**
+ * Get the Blog Display setting.
+ * If theme is using both 'Content' and 'Excerpt' then this setting will be called 'Mixed'.
+ */
+$options = get_theme_support( 'jetpack-content-options' );
+$blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
+$blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
+sort( $blog_display );
+$blog_display = implode( ', ', $blog_display );
+$blog_display = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
+
+/**
+ * If the theme doesn't support 'jetpack-content-options[ 'blog-display' ]', don't continue.
+ */
+if ( ! in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ) ) ) {
+ return;
+}
+
+/**
+ * Apply Content filters.
+ */
+function jetpack_blog_display_custom_excerpt( $content ) {
+ $post = get_post();
+ if ( empty( $post->post_excerpt ) ) {
+ $text = strip_shortcodes( $post->post_content );
+ $text = str_replace( ']]>', ']]&gt;', $text );
+ $text = strip_tags( $text );
+ /** This filter is documented in wp-includes/formatting.php */
+ $excerpt_length = apply_filters( 'excerpt_length', 55 );
+ /** This filter is documented in wp-includes/formatting.php */
+ $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[...]' );
+
+ /*
+ * translators: If your word count is based on single characters (e.g. East Asian characters),
+ * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
+ * Do not translate into your own language.
+ */
+ if ( strpos( _x( 'words', 'Word count type. Do not translate!' ), 'characters' ) === 0 && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) ) {
+ $text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' );
+ preg_match_all( '/./u', $text, $words );
+ $words = array_slice( $words[0], 0, $excerpt_length + 1 );
+ $sep = '';
+ } else {
+ $words = preg_split( "/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY );
+ $sep = ' ';
+ }
+
+ if ( count( $words ) > $excerpt_length ) {
+ array_pop( $words );
+ $text = implode( $sep, $words );
+ $text = $text . $excerpt_more;
+ } else {
+ $text = implode( $sep, $words );
+ }
+ } else {
+ $text = wp_kses_post( $post->post_excerpt );
+ }
+ return sprintf( '<p>%s</p>', $text );
+}
+
+/**
+ * Display Excerpt instead of Content.
+ */
+function jetpack_the_content_to_the_excerpt( $content ) {
+ if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
+ if ( post_password_required() ) {
+ $content = sprintf( '<p>%s</p>', esc_html__( 'There is no excerpt because this is a protected post.', 'jetpack' ) );
+ } else {
+ $content = jetpack_blog_display_custom_excerpt( $content );
+ }
+ }
+ return $content;
+}
+
+/**
+ * Display Content instead of Excerpt.
+ */
+function jetpack_the_excerpt_to_the_content( $content ) {
+ if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
+ ob_start();
+ the_content(
+ sprintf(
+ wp_kses(
+ /* translators: %s: Name of current post. Only visible to screen readers */
+ __( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'jetpack' ),
+ array(
+ 'span' => array(
+ 'class' => array(),
+ ),
+ )
+ ),
+ get_the_title()
+ )
+ );
+ $content = ob_get_clean();
+ }
+ return $content;
+}
+
+/**
+ * Display both Content and Excerpt instead of Content in the Customizer so live preview can switch between them.
+ */
+function jetpack_the_content_customizer( $content ) {
+ $class = jetpack_the_content_customizer_class();
+ if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
+ if ( post_password_required() ) {
+ $excerpt = sprintf( '<p>%s</p>', esc_html__( 'There is no excerpt because this is a protected post.', 'jetpack' ) );
+ } else {
+ $excerpt = jetpack_blog_display_custom_excerpt( $content );
+ }
+ }
+ if ( empty( $excerpt ) ) {
+ return $content;
+ } else {
+ return sprintf( '<div class="jetpack-blog-display %s jetpack-the-content">%s</div><div class="jetpack-blog-display %s jetpack-the-excerpt">%s</div>', $class, $content, $class, $excerpt );
+ }
+}
+
+/**
+ * Display both Content and Excerpt instead of Excerpt in the Customizer so live preview can switch between them.
+ */
+function jetpack_the_excerpt_customizer( $excerpt ) {
+ if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
+ ob_start();
+ the_content(
+ sprintf(
+ wp_kses(
+ /* translators: %s: Name of current post. Only visible to screen readers */
+ __( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'jetpack' ),
+ array(
+ 'span' => array(
+ 'class' => array(),
+ ),
+ )
+ ),
+ get_the_title()
+ )
+ );
+ $content = ob_get_clean();
+ }
+ if ( empty( $content ) ) {
+ return $excerpt;
+ } else {
+ return sprintf( '<div class="jetpack-blog-display jetpack-the-content">%s</div><div class="jetpack-blog-display jetpack-the-excerpt">%s</div>', $content, $excerpt );
+ }
+}
+
+/**
+ * Display Content instead of Excerpt in the Customizer when theme uses a 'Mixed' display.
+ */
+function jetpack_the_excerpt_mixed_customizer( $content ) {
+ if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
+ jetpack_the_content_customizer_class( 'output-the-excerpt' );
+ ob_start();
+ the_content();
+ $content = ob_get_clean();
+ }
+ return $content;
+}
+
+/**
+ * Returns a class value, `output-the-content` by default.
+ * Used for themes with a 'Mixed' Blog Display so we can tell which output is by default.
+ */
+function jetpack_the_content_customizer_class( $new_class = null ) {
+ static $class;
+ if ( isset( $new_class ) ) {
+ // Assign a new class and return.
+ $class = $new_class;
+ } elseif ( isset( $class ) ) {
+ // Reset the class after getting value.
+ $prev_class = $class;
+ $class = null;
+ return $prev_class;
+ } else {
+ // Return default class value.
+ return 'output-the-content';
+ }
+}
+
+if ( is_customize_preview() ) {
+ /*
+ * Display Content and Excerpt if the default Blog Display is 'Content'
+ * and we are in the Customizer.
+ */
+ if ( 'content' === $blog_display ) {
+ add_filter( 'the_content', 'jetpack_the_content_customizer' );
+ }
+
+ /*
+ * Display Content and Excerpt if the default Blog Display is 'Excerpt'
+ * and we are in the Customizer.
+ */
+ if ( 'excerpt' === $blog_display ) {
+ add_filter( 'the_excerpt', 'jetpack_the_excerpt_customizer' );
+ }
+
+ /*
+ * Display Content and Excerpt if the default Blog Display is 'Mixed'
+ * and we are in the Customizer.
+ */
+ if ( 'mixed' === $blog_display ) {
+ add_filter( 'the_content', 'jetpack_the_content_customizer' );
+ add_filter( 'the_excerpt', 'jetpack_the_excerpt_mixed_customizer' );
+ }
+} else {
+ $display_option = get_option( 'jetpack_content_blog_display', $blog_display );
+
+ /*
+ * Display Excerpt if the default Blog Display is 'Content'
+ * or default Blog Display is 'Mixed'
+ * and the Option picked is 'Post Excerpt'
+ * and we aren't in the Customizer.
+ */
+ if ( ( 'content' === $blog_display || 'mixed' === $blog_display ) && 'excerpt' === $display_option ) {
+ add_filter( 'the_content', 'jetpack_the_content_to_the_excerpt' );
+ }
+
+ /*
+ * Display Content if the default Blog Display is 'Excerpt'
+ * or default Blog Display is 'Mixed'
+ * and the Option picked is 'Full Post'
+ * and we aren't in the Customizer.
+ */
+ if ( ( 'excerpt' === $blog_display || 'mixed' === $blog_display ) && 'content' === $display_option ) {
+ add_filter( 'the_excerpt', 'jetpack_the_excerpt_to_the_content' );
+ }
+}
diff --git a/plugins/jetpack/modules/theme-tools/content-options/customizer.js b/plugins/jetpack/modules/theme-tools/content-options/customizer.js
new file mode 100644
index 00000000..afe7b492
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/content-options/customizer.js
@@ -0,0 +1,217 @@
+/* global blogDisplay, postDetails */
+
+/**
+ * customizer.js
+ *
+ * Theme Customizer enhancements for a better user experience.
+ *
+ * Contains handlers to make Theme Customizer preview reload changes asynchronously.
+ */
+
+( function( $ ) {
+ // Blog Display
+ wp.customize( 'jetpack_content_blog_display', function( value ) {
+ if ( 'content' === blogDisplay.display ) {
+ $( '.jetpack-blog-display.jetpack-the-excerpt' ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ position: 'absolute',
+ } );
+ $( '.jetpack-blog-display.jetpack-the-content' ).css( {
+ clip: 'auto',
+ position: 'relative',
+ } );
+ } else if ( 'excerpt' === blogDisplay.display ) {
+ $( '.jetpack-blog-display.jetpack-the-content' ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ position: 'absolute',
+ } );
+ $( '.jetpack-blog-display.jetpack-the-excerpt' ).css( {
+ clip: 'auto',
+ position: 'relative',
+ } );
+ } else if ( 'mixed' === blogDisplay.display ) {
+ $( '.jetpack-blog-display.jetpack-the-content.output-the-content' ).css( {
+ clip: 'auto',
+ position: 'relative',
+ } );
+ $( '.jetpack-blog-display.jetpack-the-excerpt.output-the-content' ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ position: 'absolute',
+ } );
+ $( '.jetpack-blog-display.jetpack-the-content.output-the-excerpt' ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ position: 'absolute',
+ } );
+ $( '.jetpack-blog-display.jetpack-the-excerpt.output-the-excerpt' ).css( {
+ clip: 'auto',
+ position: 'relative',
+ } );
+ }
+ value.bind( function( to ) {
+ if ( 'content' === to ) {
+ $( '.jetpack-blog-display.jetpack-the-excerpt' ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ position: 'absolute',
+ } );
+ $( '.jetpack-blog-display.jetpack-the-content' ).css( {
+ clip: 'auto',
+ position: 'relative',
+ } );
+ } else if ( 'excerpt' === to ) {
+ $( '.jetpack-blog-display.jetpack-the-content' ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ position: 'absolute',
+ } );
+ $( '.jetpack-blog-display.jetpack-the-excerpt' ).css( {
+ clip: 'auto',
+ position: 'relative',
+ } );
+ } else if ( 'mixed' === to ) {
+ $( '.jetpack-blog-display.jetpack-the-content.output-the-content' ).css( {
+ clip: 'auto',
+ position: 'relative',
+ } );
+ $( '.jetpack-blog-display.jetpack-the-excerpt.output-the-content' ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ position: 'absolute',
+ } );
+ $( '.jetpack-blog-display.jetpack-the-content.output-the-excerpt' ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ position: 'absolute',
+ } );
+ $( '.jetpack-blog-display.jetpack-the-excerpt.output-the-excerpt' ).css( {
+ clip: 'auto',
+ position: 'relative',
+ } );
+ }
+ if ( blogDisplay.masonry ) {
+ $( blogDisplay.masonry ).masonry();
+ }
+ } );
+ } );
+
+ // Post Details: Date.
+ wp.customize( 'jetpack_content_post_details_date', function( value ) {
+ value.bind( function( to ) {
+ if ( false === to ) {
+ $( postDetails.date ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ height: '1px',
+ overflow: 'hidden',
+ position: 'absolute',
+ width: '1px',
+ } );
+ $( 'body' ).addClass( 'date-hidden' );
+ } else {
+ $( postDetails.date ).css( {
+ clip: 'auto',
+ height: 'auto',
+ overflow: 'auto',
+ position: 'relative',
+ width: 'auto',
+ } );
+ $( 'body' ).removeClass( 'date-hidden' );
+ }
+ } );
+ } );
+
+ // Post Details: Categories.
+ wp.customize( 'jetpack_content_post_details_categories', function( value ) {
+ value.bind( function( to ) {
+ if ( false === to ) {
+ $( postDetails.categories ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ height: '1px',
+ overflow: 'hidden',
+ position: 'absolute',
+ width: '1px',
+ } );
+ $( 'body' ).addClass( 'categories-hidden' );
+ } else {
+ $( postDetails.categories ).css( {
+ clip: 'auto',
+ height: 'auto',
+ overflow: 'auto',
+ position: 'relative',
+ width: 'auto',
+ } );
+ $( 'body' ).removeClass( 'categories-hidden' );
+ }
+ } );
+ } );
+
+ // Post Details: Tags.
+ wp.customize( 'jetpack_content_post_details_tags', function( value ) {
+ value.bind( function( to ) {
+ if ( false === to ) {
+ $( postDetails.tags ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ height: '1px',
+ overflow: 'hidden',
+ position: 'absolute',
+ width: '1px',
+ } );
+ $( 'body' ).addClass( 'tags-hidden' );
+ } else {
+ $( postDetails.tags ).css( {
+ clip: 'auto',
+ height: 'auto',
+ overflow: 'auto',
+ position: 'relative',
+ width: 'auto',
+ } );
+ $( 'body' ).removeClass( 'tags-hidden' );
+ }
+ } );
+ } );
+
+ // Post Details: Author.
+ wp.customize( 'jetpack_content_post_details_author', function( value ) {
+ value.bind( function( to ) {
+ if ( false === to ) {
+ $( postDetails.author ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ height: '1px',
+ overflow: 'hidden',
+ position: 'absolute',
+ width: '1px',
+ } );
+ $( 'body' ).addClass( 'author-hidden' );
+ } else {
+ $( postDetails.author ).css( {
+ clip: 'auto',
+ height: 'auto',
+ overflow: 'auto',
+ position: 'relative',
+ width: 'auto',
+ } );
+ $( 'body' ).removeClass( 'author-hidden' );
+ }
+ } );
+ } );
+
+ // Post Details: Comment link.
+ wp.customize( 'jetpack_content_post_details_comment', function( value ) {
+ value.bind( function( to ) {
+ if ( false === to ) {
+ $( postDetails.comment ).css( {
+ clip: 'rect(1px, 1px, 1px, 1px)',
+ height: '1px',
+ overflow: 'hidden',
+ position: 'absolute',
+ width: '1px',
+ } );
+ $( 'body' ).addClass( 'comment-hidden' );
+ } else {
+ $( postDetails.comment ).css( {
+ clip: 'auto',
+ height: 'auto',
+ overflow: 'auto',
+ position: 'relative',
+ width: 'auto',
+ } );
+ $( 'body' ).removeClass( 'comment-hidden' );
+ }
+ } );
+ } );
+} )( jQuery );
diff --git a/plugins/jetpack/modules/theme-tools/content-options/customizer.php b/plugins/jetpack/modules/theme-tools/content-options/customizer.php
new file mode 100644
index 00000000..844e5074
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/content-options/customizer.php
@@ -0,0 +1,482 @@
+<?php
+/**
+ * Add Content section to the Theme Customizer.
+ *
+ * @param WP_Customize_Manager $wp_customize Theme Customizer object.
+ */
+function jetpack_content_options_customize_register( $wp_customize ) {
+ $options = get_theme_support( 'jetpack-content-options' );
+ $blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
+ $blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
+ sort( $blog_display );
+ $blog_display = implode( ', ', $blog_display );
+ $blog_display = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
+ $author_bio = ( ! empty( $options[0]['author-bio'] ) ) ? $options[0]['author-bio'] : null;
+ $author_bio_default = ( isset( $options[0]['author-bio-default'] ) && false === $options[0]['author-bio-default'] ) ? '' : 1;
+ $post_details = ( ! empty( $options[0]['post-details'] ) ) ? $options[0]['post-details'] : null;
+ $date = ( ! empty( $post_details['date'] ) ) ? $post_details['date'] : null;
+ $categories = ( ! empty( $post_details['categories'] ) ) ? $post_details['categories'] : null;
+ $tags = ( ! empty( $post_details['tags'] ) ) ? $post_details['tags'] : null;
+ $author = ( ! empty( $post_details['author'] ) ) ? $post_details['author'] : null;
+ $comment = ( ! empty( $post_details['comment'] ) ) ? $post_details['comment'] : null;
+ $featured_images = ( ! empty( $options[0]['featured-images'] ) ) ? $options[0]['featured-images'] : null;
+ $fi_archive = ( ! empty( $featured_images['archive'] ) ) ? $featured_images['archive'] : null;
+ $fi_post = ( ! empty( $featured_images['post'] ) ) ? $featured_images['post'] : null;
+ $fi_page = ( ! empty( $featured_images['page'] ) ) ? $featured_images['page'] : null;
+ $fi_portfolio = ( ! empty( $featured_images['portfolio'] ) ) ? $featured_images['portfolio'] : null;
+ $fi_fallback = ( ! empty( $featured_images['fallback'] ) ) ? $featured_images['fallback'] : null;
+ $fi_archive_default = ( isset( $featured_images['archive-default'] ) && false === $featured_images['archive-default'] ) ? '' : 1;
+ $fi_post_default = ( isset( $featured_images['post-default'] ) && false === $featured_images['post-default'] ) ? '' : 1;
+ $fi_page_default = ( isset( $featured_images['page-default'] ) && false === $featured_images['page-default'] ) ? '' : 1;
+ $fi_portfolio_default = ( isset( $featured_images['portfolio-default'] ) && false === $featured_images['portfolio-default'] ) ? '' : 1;
+ $fi_fallback_default = ( isset( $featured_images['fallback-default'] ) && false === $featured_images['fallback-default'] ) ? '' : 1;
+
+ // If the theme doesn't support 'jetpack-content-options[ 'blog-display' ]', 'jetpack-content-options[ 'author-bio' ]', 'jetpack-content-options[ 'post-details' ]' and 'jetpack-content-options[ 'featured-images' ]', don't continue.
+ if ( ( ! in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ) ) )
+ && ( true !== $author_bio )
+ && ( ( empty( $post_details['stylesheet'] ) )
+ && ( empty( $date )
+ || empty( $categories )
+ || empty( $tags )
+ || empty( $author )
+ || empty( $comment ) ) )
+ && ( true !== $fi_archive && true !== $fi_post && true !== $fi_page && true !== $fi_portfolio && true !== $fi_fallback ) ) {
+ return;
+ }
+
+ // New control type: Title.
+ class Jetpack_Customize_Control_Title extends WP_Customize_Control {
+ public $type = 'title';
+
+ public function render_content() {
+ ?>
+ <span class="customize-control-title"><?php echo wp_kses_post( $this->label ); ?></span>
+ <?php
+ }
+ }
+
+ // Add Content section.
+ $wp_customize->add_section(
+ 'jetpack_content_options',
+ array(
+ 'title' => esc_html__( 'Content Options', 'jetpack' ),
+ 'theme_supports' => 'jetpack-content-options',
+ 'priority' => 100,
+ )
+ );
+
+ // Add Blog Display option.
+ if ( in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ) ) ) {
+ if ( 'mixed' === $blog_display ) {
+ $blog_display_choices = array(
+ 'content' => esc_html__( 'Full post', 'jetpack' ),
+ 'excerpt' => esc_html__( 'Post excerpt', 'jetpack' ),
+ 'mixed' => esc_html__( 'Default', 'jetpack' ),
+ );
+
+ $blog_display_description = esc_html__( 'Choose between a full post or an excerpt for the blog and archive pages, or opt for the theme\'s default combination of excerpt and full post.', 'jetpack' );
+ } else {
+ $blog_display_choices = array(
+ 'content' => esc_html__( 'Full post', 'jetpack' ),
+ 'excerpt' => esc_html__( 'Post excerpt', 'jetpack' ),
+ );
+
+ $blog_display_description = esc_html__( 'Choose between a full post or an excerpt for the blog and archive pages.', 'jetpack' );
+
+ if ( 'mixed' === get_option( 'jetpack_content_blog_display' ) ) {
+ update_option( 'jetpack_content_blog_display', $blog_display );
+ }
+ }
+
+ $wp_customize->add_setting(
+ 'jetpack_content_blog_display',
+ array(
+ 'default' => $blog_display,
+ 'type' => 'option',
+ 'transport' => 'postMessage',
+ 'sanitize_callback' => 'jetpack_content_options_sanitize_blog_display',
+ )
+ );
+
+ $wp_customize->add_control(
+ 'jetpack_content_blog_display',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Blog Display', 'jetpack' ),
+ 'description' => $blog_display_description,
+ 'type' => 'radio',
+ 'choices' => $blog_display_choices,
+ )
+ );
+ }
+
+ // Add Author Bio option.
+ if ( true === $author_bio ) {
+ $wp_customize->add_setting( 'jetpack_content_author_bio_title' );
+
+ $wp_customize->add_control(
+ new Jetpack_Customize_Control_Title(
+ $wp_customize,
+ 'jetpack_content_author_bio_title',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Author Bio', 'jetpack' ),
+ 'type' => 'title',
+ )
+ )
+ );
+
+ $wp_customize->add_setting(
+ 'jetpack_content_author_bio',
+ array(
+ 'default' => $author_bio_default,
+ 'type' => 'option',
+ 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
+ )
+ );
+
+ $wp_customize->add_control(
+ 'jetpack_content_author_bio',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Display on single posts', 'jetpack' ),
+ 'type' => 'checkbox',
+ )
+ );
+ }
+
+ // Add Post Details options.
+ if ( ( ! empty( $post_details ) )
+ && ( ! empty( $post_details['stylesheet'] ) )
+ && ( ! empty( $date )
+ || ! empty( $categories )
+ || ! empty( $tags )
+ || ! empty( $author )
+ || ! empty( $comment ) ) ) {
+ $wp_customize->add_setting( 'jetpack_content_post_details_title' );
+
+ $wp_customize->add_control(
+ new Jetpack_Customize_Control_Title(
+ $wp_customize,
+ 'jetpack_content_post_details_title',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Post Details', 'jetpack' ),
+ 'type' => 'title',
+ )
+ )
+ );
+
+ // Post Details: Date
+ if ( ! empty( $date ) ) {
+ $wp_customize->add_setting(
+ 'jetpack_content_post_details_date',
+ array(
+ 'default' => 1,
+ 'type' => 'option',
+ 'transport' => 'postMessage',
+ 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
+ )
+ );
+
+ $wp_customize->add_control(
+ 'jetpack_content_post_details_date',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Display date', 'jetpack' ),
+ 'type' => 'checkbox',
+ )
+ );
+ }
+
+ // Post Details: Categories
+ if ( ! empty( $categories ) ) {
+ $wp_customize->add_setting(
+ 'jetpack_content_post_details_categories',
+ array(
+ 'default' => 1,
+ 'type' => 'option',
+ 'transport' => 'postMessage',
+ 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
+ )
+ );
+
+ $wp_customize->add_control(
+ 'jetpack_content_post_details_categories',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Display categories', 'jetpack' ),
+ 'type' => 'checkbox',
+ )
+ );
+ }
+
+ // Post Details: Tags
+ if ( ! empty( $tags ) ) {
+ $wp_customize->add_setting(
+ 'jetpack_content_post_details_tags',
+ array(
+ 'default' => 1,
+ 'type' => 'option',
+ 'transport' => 'postMessage',
+ 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
+ )
+ );
+
+ $wp_customize->add_control(
+ 'jetpack_content_post_details_tags',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Display tags', 'jetpack' ),
+ 'type' => 'checkbox',
+ )
+ );
+ }
+
+ // Post Details: Author
+ if ( ! empty( $author ) ) {
+ $wp_customize->add_setting(
+ 'jetpack_content_post_details_author',
+ array(
+ 'default' => 1,
+ 'type' => 'option',
+ 'transport' => 'postMessage',
+ 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
+ )
+ );
+
+ $wp_customize->add_control(
+ 'jetpack_content_post_details_author',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Display author', 'jetpack' ),
+ 'type' => 'checkbox',
+ )
+ );
+ }
+
+ // Post Details: Comment link
+ if ( ! empty( $comment ) ) {
+ $wp_customize->add_setting(
+ 'jetpack_content_post_details_comment',
+ array(
+ 'default' => 1,
+ 'type' => 'option',
+ 'transport' => 'postMessage',
+ 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
+ )
+ );
+
+ $wp_customize->add_control(
+ 'jetpack_content_post_details_comment',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Display comment link', 'jetpack' ),
+ 'type' => 'checkbox',
+ )
+ );
+ }
+ }
+
+ // Add Featured Images options.
+ if ( true === $fi_archive || true === $fi_post || true === $fi_page || true === $fi_portfolio || true === $fi_fallback ) {
+ $wp_customize->add_setting( 'jetpack_content_featured_images_title' );
+
+ $wp_customize->add_control(
+ new Jetpack_Customize_Control_Title(
+ $wp_customize,
+ 'jetpack_content_featured_images_title',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Featured Images', 'jetpack' ) . sprintf( '<a href="https://en.support.wordpress.com/featured-images/" class="customize-help-toggle dashicons dashicons-editor-help" title="%1$s" rel="noopener noreferrer" target="_blank"><span class="screen-reader-text">%1$s</span></a>', esc_html__( 'Learn more about Featured Images', 'jetpack' ) ),
+ 'type' => 'title',
+ 'active_callback' => 'jetpack_post_thumbnail_supports',
+ )
+ )
+ );
+
+ // Featured Images: Archive
+ if ( true === $fi_archive ) {
+ $wp_customize->add_setting(
+ 'jetpack_content_featured_images_archive',
+ array(
+ 'default' => $fi_archive_default,
+ 'type' => 'option',
+ 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
+ )
+ );
+
+ $wp_customize->add_control(
+ 'jetpack_content_featured_images_archive',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Display on blog and archives', 'jetpack' ),
+ 'type' => 'checkbox',
+ 'active_callback' => 'jetpack_post_thumbnail_supports',
+ )
+ );
+ }
+
+ // Featured Images: Post
+ if ( true === $fi_post ) {
+ $wp_customize->add_setting(
+ 'jetpack_content_featured_images_post',
+ array(
+ 'default' => $fi_post_default,
+ 'type' => 'option',
+ 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
+ )
+ );
+
+ $wp_customize->add_control(
+ 'jetpack_content_featured_images_post',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Display on single posts', 'jetpack' ),
+ 'type' => 'checkbox',
+ 'active_callback' => 'jetpack_post_thumbnail_supports',
+ )
+ );
+ }
+
+ // Featured Images: Page
+ if ( true === $fi_page ) {
+ $wp_customize->add_setting(
+ 'jetpack_content_featured_images_page',
+ array(
+ 'default' => $fi_page_default,
+ 'type' => 'option',
+ 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
+ )
+ );
+
+ $wp_customize->add_control(
+ 'jetpack_content_featured_images_page',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Display on pages', 'jetpack' ),
+ 'type' => 'checkbox',
+ 'active_callback' => 'jetpack_post_thumbnail_supports',
+ )
+ );
+ }
+
+ // Featured Images: Portfolio
+ if ( true === $fi_portfolio && post_type_exists( 'jetpack-portfolio' ) ) {
+ $wp_customize->add_setting(
+ 'jetpack_content_featured_images_portfolio',
+ array(
+ 'default' => $fi_portfolio_default,
+ 'type' => 'option',
+ 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
+ )
+ );
+
+ $wp_customize->add_control(
+ 'jetpack_content_featured_images_portfolio',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Display on single projects', 'jetpack' ),
+ 'type' => 'checkbox',
+ 'active_callback' => 'jetpack_post_thumbnail_supports',
+ )
+ );
+ }
+
+ // Featured Images: Fallback
+ if ( true === $fi_fallback ) {
+ $wp_customize->add_setting(
+ 'jetpack_content_featured_images_fallback',
+ array(
+ 'default' => $fi_fallback_default,
+ 'type' => 'option',
+ 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
+ )
+ );
+
+ $wp_customize->add_control(
+ 'jetpack_content_featured_images_fallback',
+ array(
+ 'section' => 'jetpack_content_options',
+ 'label' => esc_html__( 'Automatically use first image in post', 'jetpack' ),
+ 'type' => 'checkbox',
+ 'active_callback' => 'jetpack_post_thumbnail_supports',
+ )
+ );
+ }
+ }
+}
+add_action( 'customize_register', 'jetpack_content_options_customize_register' );
+
+/**
+ * Return whether the theme supports Post Thumbnails.
+ */
+function jetpack_post_thumbnail_supports() {
+ return ( current_theme_supports( 'post-thumbnails' ) );
+}
+
+/**
+ * Sanitize the checkbox.
+ *
+ * @param int $input.
+ * @return boolean|string
+ */
+function jetpack_content_options_sanitize_checkbox( $input ) {
+ return ( 1 == $input ) ? 1 : '';
+}
+
+/**
+ * Sanitize the Display value.
+ *
+ * @param string $display.
+ * @return string.
+ */
+function jetpack_content_options_sanitize_blog_display( $display ) {
+ if ( ! in_array( $display, array( 'content', 'excerpt', 'mixed' ) ) ) {
+ $display = 'content';
+ }
+ return $display;
+}
+
+/**
+ * Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
+ */
+function jetpack_content_options_customize_preview_js() {
+ $options = get_theme_support( 'jetpack-content-options' );
+ $blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
+ $blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
+ sort( $blog_display );
+ $blog_display = implode( ', ', $blog_display );
+ $blog_display = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
+ $masonry = ( ! empty( $options[0]['masonry'] ) ) ? $options[0]['masonry'] : null;
+ $post_details = ( ! empty( $options[0]['post-details'] ) ) ? $options[0]['post-details'] : null;
+ $date = ( ! empty( $post_details['date'] ) ) ? $post_details['date'] : null;
+ $categories = ( ! empty( $post_details['categories'] ) ) ? $post_details['categories'] : null;
+ $tags = ( ! empty( $post_details['tags'] ) ) ? $post_details['tags'] : null;
+ $author = ( ! empty( $post_details['author'] ) ) ? $post_details['author'] : null;
+ $comment = ( ! empty( $post_details['comment'] ) ) ? $post_details['comment'] : null;
+
+ wp_enqueue_script( 'jetpack-content-options-customizer', plugins_url( 'customizer.js', __FILE__ ), array( 'customize-preview' ), '1.0', true );
+
+ wp_localize_script(
+ 'jetpack-content-options-customizer',
+ 'blogDisplay',
+ array(
+ 'display' => get_option( 'jetpack_content_blog_display', $blog_display ),
+ 'masonry' => $masonry,
+ )
+ );
+
+ wp_localize_script(
+ 'jetpack-content-options-customizer',
+ 'postDetails',
+ array(
+ 'date' => $date,
+ 'categories' => $categories,
+ 'tags' => $tags,
+ 'author' => $author,
+ 'comment' => $comment,
+ )
+ );
+}
+add_action( 'customize_preview_init', 'jetpack_content_options_customize_preview_js' );
diff --git a/plugins/jetpack/modules/theme-tools/content-options/featured-images-fallback.php b/plugins/jetpack/modules/theme-tools/content-options/featured-images-fallback.php
new file mode 100644
index 00000000..dc8d92d6
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/content-options/featured-images-fallback.php
@@ -0,0 +1,161 @@
+<?php
+/**
+ * Get one image from a specified post in the following order:
+ * Featured Image then first image from the_content HTML
+ * and filter the post_thumbnail_html
+ *
+ * @param string $html The HTML for the image markup.
+ * @param int $post_id The post ID to check.
+ * @param int $post_thumbnail_id The ID of the featured image.
+ * @param string $size The image size to return, defaults to 'post-thumbnail'.
+ * @param string|array $attr Optional. Query string or array of attributes.
+ *
+ * @return string $html Thumbnail image with markup.
+ */
+function jetpack_featured_images_fallback_get_image( $html, $post_id, $post_thumbnail_id, $size, $attr ) {
+ $opts = jetpack_featured_images_get_settings();
+
+ if ( ! empty( $html ) || (bool) 1 !== (bool) $opts['fallback-option'] ) {
+ return trim( $html );
+ }
+
+ if ( jetpack_featured_images_should_load() ) {
+ if (
+ ( true === $opts['archive'] && ( is_home() || is_archive() || is_search() ) && ! $opts['archive-option'] )
+ || ( true === $opts['post'] && is_single() && ! $opts['post-option'] )
+ || ! $opts['fallback-option']
+ ) {
+ return trim( $html );
+ }
+ }
+
+ if ( class_exists( 'Jetpack_PostImages' ) ) {
+ global $_wp_additional_image_sizes;
+
+ $args = array(
+ 'from_thumbnail' => false,
+ 'from_slideshow' => true,
+ 'from_gallery' => true,
+ 'from_attachment' => false,
+ );
+
+ $image = Jetpack_PostImages::get_image( $post_id, $args );
+
+ if ( ! empty( $image ) ) {
+ $image['width'] = '';
+ $image['height'] = '';
+ $image['crop'] = '';
+
+ if ( array_key_exists( $size, $_wp_additional_image_sizes ) ) {
+ $image['width'] = $_wp_additional_image_sizes[ $size ]['width'];
+ $image['height'] = $_wp_additional_image_sizes[ $size ]['height'];
+ $image['crop'] = $_wp_additional_image_sizes[ $size ]['crop'];
+ }
+
+ $image_src = Jetpack_PostImages::fit_image_url( $image['src'], $image['width'], $image['height'] );
+
+ // Use the theme's crop setting rather than forcing to true
+ $image_src = add_query_arg( 'crop', $image['crop'], $image_src );
+
+ $html = '<img src="' . esc_url( $image_src ) . '" title="' . esc_attr( strip_tags( get_the_title() ) ) . '" class="attachment-' . esc_attr( $size ) . ' wp-post-image" />';
+
+ return trim( $html );
+ }
+ }
+
+ return trim( $html );
+}
+add_filter( 'post_thumbnail_html', 'jetpack_featured_images_fallback_get_image', 10, 5 );
+
+/**
+ * Get URL of one image from a specified post in the following order:
+ * Featured Image then first image from the_content HTML
+ *
+ * @param int $post_id The post ID to check.
+ * @param int $post_thumbnail_id The ID of the featured image.
+ * @param string $size The image size to return, defaults to 'post-thumbnail'.
+ *
+ * @return string|null $image_src The URL of the thumbnail image.
+ */
+function jetpack_featured_images_fallback_get_image_src( $post_id, $post_thumbnail_id, $size ) {
+ $image_src = wp_get_attachment_image_src( $post_thumbnail_id, $size );
+ $image_src = ( ! empty( $image_src[0] ) ) ? $image_src[0] : null;
+ $opts = jetpack_featured_images_get_settings();
+
+ if ( ! empty( $image_src ) || (bool) 1 !== (bool) $opts['fallback-option'] ) {
+ return esc_url( $image_src );
+ }
+
+ if ( jetpack_featured_images_should_load() ) {
+ if ( ( true === $opts['archive'] && ( is_home() || is_archive() || is_search() ) && ! $opts['archive-option'] )
+ || ( true === $opts['post'] && is_single() && ! $opts['post-option'] ) ) {
+ return esc_url( $image_src );
+ }
+ }
+
+ if ( class_exists( 'Jetpack_PostImages' ) ) {
+ global $_wp_additional_image_sizes;
+
+ $args = array(
+ 'from_thumbnail' => false,
+ 'from_slideshow' => true,
+ 'from_gallery' => true,
+ 'from_attachment' => false,
+ );
+
+ $image = Jetpack_PostImages::get_image( $post_id, $args );
+
+ if ( ! empty( $image ) ) {
+ $image['width'] = '';
+ $image['height'] = '';
+ $image['crop'] = '';
+
+ if ( array_key_exists( $size, $_wp_additional_image_sizes ) ) {
+ $image['width'] = $_wp_additional_image_sizes[ $size ]['width'];
+ $image['height'] = $_wp_additional_image_sizes[ $size ]['height'];
+ $image['crop'] = $_wp_additional_image_sizes[ $size ]['crop'];
+ }
+
+ $image_src = Jetpack_PostImages::fit_image_url( $image['src'], $image['width'], $image['height'] );
+
+ // Use the theme's crop setting rather than forcing to true
+ $image_src = add_query_arg( 'crop', $image['crop'], $image_src );
+
+ return esc_url( $image_src );
+ }
+ }
+
+ return esc_url( $image_src );
+}
+
+/**
+ * Check if post has an image attached, including a fallback.
+ *
+ * @param int $post The post ID to check.
+ *
+ * @return bool
+ */
+function jetpack_has_featured_image( $post = null ) {
+ return (bool) get_the_post_thumbnail( $post );
+}
+
+/**
+ * Adds custom class to the array of post classes.
+ *
+ * @param array $classes Classes for the post element.
+ * @param array $class Optional. Comma separated list of additional classes.
+ * @param array $post_id Unique The post ID to check
+ *
+ * @return array $classes
+ */
+function jetpack_featured_images_post_class( $classes, $class, $post_id ) {
+ $post_password_required = post_password_required( $post_id );
+ $opts = jetpack_featured_images_get_settings();
+
+ if ( jetpack_has_featured_image( $post_id ) && (bool) 1 === (bool) $opts['fallback-option'] && ! is_attachment() && ! $post_password_required && 'post' === get_post_type() ) {
+ $classes[] = 'has-post-thumbnail';
+ }
+
+ return $classes;
+}
+add_filter( 'post_class', 'jetpack_featured_images_post_class', 10, 3 );
diff --git a/plugins/jetpack/modules/theme-tools/content-options/featured-images.php b/plugins/jetpack/modules/theme-tools/content-options/featured-images.php
new file mode 100644
index 00000000..d6855f6c
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/content-options/featured-images.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * The function to prevent for Featured Images to be displayed in a theme.
+ */
+function jetpack_featured_images_remove_post_thumbnail( $metadata, $object_id, $meta_key, $single ) {
+ $opts = jetpack_featured_images_get_settings();
+
+ // Automatically return metadata if it's a PayPal product - we don't want to hide the Featured Image.
+ if ( 'jp_pay_product' === get_post_type( $object_id ) ) {
+ return $metadata;
+ }
+
+ // Return false if the archive option or singular option is unticked.
+ if (
+ ( true === $opts['archive']
+ && ( is_home() || is_archive() || is_search() )
+ && ! jetpack_is_shop_page()
+ && ! $opts['archive-option']
+ && ( isset( $meta_key )
+ && '_thumbnail_id' === $meta_key )
+ && in_the_loop()
+ )
+ || ( true === $opts['post']
+ && is_single()
+ && ! jetpack_is_product()
+ && ! $opts['post-option']
+ && ( isset( $meta_key )
+ && '_thumbnail_id' === $meta_key )
+ && in_the_loop()
+ )
+ || ( true === $opts['page']
+ && is_singular()
+ && is_page()
+ && ! $opts['page-option']
+ && ( isset( $meta_key )
+ && '_thumbnail_id' === $meta_key )
+ && in_the_loop()
+ )
+ || ( true === $opts['portfolio']
+ && post_type_exists( 'jetpack-portfolio' )
+ && is_singular( 'jetpack-portfolio' )
+ && ! $opts['portfolio-option']
+ && ( isset( $meta_key )
+ && '_thumbnail_id' === $meta_key )
+ && in_the_loop()
+ )
+ ) {
+ return false;
+ } else {
+ return $metadata;
+ }
+}
+add_filter( 'get_post_metadata', 'jetpack_featured_images_remove_post_thumbnail', true, 4 );
+
+/**
+ * Check if we are in a WooCommerce Product in order to exclude it from the is_single check.
+ */
+function jetpack_is_product() {
+ return ( function_exists( 'is_product' ) ) ? is_product() : false;
+}
+
+/**
+ * Check if we are in a WooCommerce Shop in order to exclude it from the is_archive check.
+ */
+function jetpack_is_shop_page() {
+ // Check if WooCommerce is active first.
+ if ( ! class_exists( 'WooCommerce' ) ) {
+ return false;
+ }
+
+ global $wp_query;
+
+ $front_page_id = get_option( 'page_on_front' );
+ $current_page_id = $wp_query->get( 'page_id' );
+ $is_static_front_page = 'page' === get_option( 'show_on_front' );
+
+ if ( $is_static_front_page && $front_page_id === $current_page_id ) {
+ $is_shop_page = ( $current_page_id === wc_get_page_id( 'shop' ) ) ? true : false;
+ } else {
+ $is_shop_page = is_shop();
+ }
+
+ return $is_shop_page;
+}
diff --git a/plugins/jetpack/modules/theme-tools/content-options/post-details.php b/plugins/jetpack/modules/theme-tools/content-options/post-details.php
new file mode 100644
index 00000000..7851a5be
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/content-options/post-details.php
@@ -0,0 +1,150 @@
+<?php
+/**
+ * The function to include Post Details in a theme's stylesheet.
+ */
+function jetpack_post_details_enqueue_scripts() {
+ // Make sure we can proceed.
+ list( $should_run, $options, $definied, $post_details ) = jetpack_post_details_should_run();
+
+ if ( ! $should_run ) {
+ return;
+ }
+
+ list( $date_option, $categories_option, $tags_option, $author_option, $comment_option ) = $options;
+ list( $date, $categories, $tags, $author, $comment ) = $definied;
+
+ $elements = array();
+
+ // If date option is unticked, add it to the list of classes.
+ if ( 1 != $date_option && ! empty( $date ) ) {
+ $elements[] = $date;
+ }
+
+ // If categories option is unticked, add it to the list of classes.
+ if ( 1 != $categories_option && ! empty( $categories ) ) {
+ $elements[] = $categories;
+ }
+
+ // If tags option is unticked, add it to the list of classes.
+ if ( 1 != $tags_option && ! empty( $tags ) ) {
+ $elements[] = $tags;
+ }
+
+ // If author option is unticked, add it to the list of classes.
+ if ( 1 != $author_option && ! empty( $author ) ) {
+ $elements[] = $author;
+ }
+
+ // If comment option is unticked, add it to the list of classes.
+ if ( 1 != $comment_option && ! empty( $comment ) ) {
+ $elements[] = $comment;
+ }
+
+ // Get the list of classes.
+ $elements = implode( ', ', $elements );
+
+ // Hide the classes with CSS.
+ $css = $elements . ' { clip: rect(1px, 1px, 1px, 1px); height: 1px; position: absolute; overflow: hidden; width: 1px; }';
+
+ // Add the CSS to the stylesheet.
+ wp_add_inline_style( $post_details['stylesheet'], $css );
+}
+add_action( 'wp_enqueue_scripts', 'jetpack_post_details_enqueue_scripts' );
+
+/**
+ * Adds custom classes to the array of body classes.
+ */
+function jetpack_post_details_body_classes( $classes ) {
+ // Make sure we can proceed.
+ list( $should_run, $options, $definied ) = jetpack_post_details_should_run();
+
+ if ( ! $should_run ) {
+ return $classes;
+ }
+
+ list( $date_option, $categories_option, $tags_option, $author_option, $comment_option ) = $options;
+ list( $date, $categories, $tags, $author, $comment ) = $definied;
+
+ // If date option is unticked, add a class of 'date-hidden' to the body.
+ if ( 1 != $date_option && ! empty( $date ) ) {
+ $classes[] = 'date-hidden';
+ }
+
+ // If categories option is unticked, add a class of 'categories-hidden' to the body.
+ if ( 1 != $categories_option && ! empty( $categories ) ) {
+ $classes[] = 'categories-hidden';
+ }
+
+ // If tags option is unticked, add a class of 'tags-hidden' to the body.
+ if ( 1 != $tags_option && ! empty( $tags ) ) {
+ $classes[] = 'tags-hidden';
+ }
+
+ // If author option is unticked, add a class of 'author-hidden' to the body.
+ if ( 1 != $author_option && ! empty( $author ) ) {
+ $classes[] = 'author-hidden';
+ }
+
+ // If comment option is unticked, add a class of 'comment-hidden' to the body.
+ if ( 1 != $comment_option && ! empty( $comment ) ) {
+ $classes[] = 'comment-hidden';
+ }
+
+ return $classes;
+}
+add_filter( 'body_class', 'jetpack_post_details_body_classes' );
+
+/**
+ * Determines if Post Details should run.
+ */
+function jetpack_post_details_should_run() {
+ // Empty value representing falsy return value.
+ $void = array( false, null, null, null );
+
+ // If the theme doesn't support 'jetpack-content-options', don't continue.
+ if ( ! current_theme_supports( 'jetpack-content-options' ) ) {
+ return $void;
+ }
+
+ $options = get_theme_support( 'jetpack-content-options' );
+ $post_details = ( ! empty( $options[0]['post-details'] ) ) ? $options[0]['post-details'] : null;
+
+ // If the theme doesn't support 'jetpack-content-options[ 'post-details' ]', don't continue.
+ if ( empty( $post_details ) ) {
+ return $void;
+ }
+
+ $date = ( ! empty( $post_details['date'] ) ) ? $post_details['date'] : null;
+ $categories = ( ! empty( $post_details['categories'] ) ) ? $post_details['categories'] : null;
+ $tags = ( ! empty( $post_details['tags'] ) ) ? $post_details['tags'] : null;
+ $author = ( ! empty( $post_details['author'] ) ) ? $post_details['author'] : null;
+ $comment = ( ! empty( $post_details['comment'] ) ) ? $post_details['comment'] : null;
+
+ // If there is no stylesheet and there are no date, categories, tags, author or comment declared, don't continue.
+ if (
+ empty( $post_details['stylesheet'] )
+ && ( empty( $date )
+ || empty( $categories )
+ || empty( $tags )
+ || empty( $author )
+ || empty( $comment ) )
+ ) {
+ return $void;
+ }
+
+ $date_option = get_option( 'jetpack_content_post_details_date', 1 );
+ $categories_option = get_option( 'jetpack_content_post_details_categories', 1 );
+ $tags_option = get_option( 'jetpack_content_post_details_tags', 1 );
+ $author_option = get_option( 'jetpack_content_post_details_author', 1 );
+ $comment_option = get_option( 'jetpack_content_post_details_comment', 1 );
+
+ $options = array( $date_option, $categories_option, $tags_option, $author_option, $comment_option );
+ $definied = array( $date, $categories, $tags, $author, $comment );
+
+ // If all the options are ticked, don't continue.
+ if ( array( 1, 1, 1, 1, 1 ) === $options ) {
+ return $void;
+ }
+
+ return array( true, $options, $definied, $post_details );
+}
diff --git a/plugins/jetpack/modules/theme-tools/featured-content.php b/plugins/jetpack/modules/theme-tools/featured-content.php
new file mode 100644
index 00000000..1df0f069
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/featured-content.php
@@ -0,0 +1,722 @@
+<?php
+
+if ( ! class_exists( 'Featured_Content' ) && isset( $GLOBALS['pagenow'] ) && 'plugins.php' !== $GLOBALS['pagenow'] ) {
+
+ /**
+ * Featured Content.
+ *
+ * This module will allow users to define a subset of posts to be displayed in a
+ * theme-designated featured content area.
+ *
+ * This feature will only be activated for themes that declare that they support
+ * it. This can be done by adding code similar to the following during the
+ * "after_setup_theme" action:
+ *
+ * add_theme_support( 'featured-content', array(
+ * 'filter' => 'mytheme_get_featured_content',
+ * 'max_posts' => 20,
+ * 'post_types' => array( 'post', 'page' ),
+ * ) );
+ *
+ * For maximum compatibility with different methods of posting users will
+ * designate a featured post tag to associate posts with. Since this tag now has
+ * special meaning beyond that of a normal tags, users will have the ability to
+ * hide it from the front-end of their site.
+ */
+ class Featured_Content {
+
+ /**
+ * The maximum number of posts that a Featured Content area can contain. We
+ * define a default value here but themes can override this by defining a
+ * "max_posts" entry in the second parameter passed in the call to
+ * add_theme_support( 'featured-content' ).
+ *
+ * @see Featured_Content::init()
+ */
+ public static $max_posts = 15;
+
+ /**
+ * The registered post types supported by Featured Content. Themes can add
+ * Featured Content support for registered post types by defining a
+ * 'post_types' argument (string|array) in the call to
+ * add_theme_support( 'featured-content' ).
+ *
+ * @see Featured_Content::init()
+ */
+ public static $post_types = array( 'post' );
+
+ /**
+ * The tag that is used to mark featured content. Users can define
+ * a custom tag name that will be stored in this variable.
+ *
+ * @see Featured_Content::hide_featured_term
+ */
+ public static $tag;
+
+ /**
+ * Instantiate.
+ *
+ * All custom functionality will be hooked into the "init" action.
+ */
+ public static function setup() {
+ add_action( 'init', array( __CLASS__, 'init' ), 30 );
+ }
+
+ /**
+ * Conditionally hook into WordPress.
+ *
+ * Themes must declare that they support this module by adding
+ * add_theme_support( 'featured-content' ); during after_setup_theme.
+ *
+ * If no theme support is found there is no need to hook into WordPress. We'll
+ * just return early instead.
+ *
+ * @uses Featured_Content::$max_posts
+ */
+ public static function init() {
+ $theme_support = get_theme_support( 'featured-content' );
+
+ // Return early if theme does not support featured content.
+ if ( ! $theme_support ) {
+ return;
+ }
+
+ /*
+ * An array of named arguments must be passed as the second parameter
+ * of add_theme_support().
+ */
+ if ( ! isset( $theme_support[0] ) ) {
+ return;
+ }
+
+ if ( isset( $theme_support[0]['featured_content_filter'] ) ) {
+ $theme_support[0]['filter'] = $theme_support[0]['featured_content_filter'];
+ unset( $theme_support[0]['featured_content_filter'] );
+ }
+
+ // Return early if "filter" has not been defined.
+ if ( ! isset( $theme_support[0]['filter'] ) ) {
+ return;
+ }
+
+ // Theme can override the number of max posts.
+ if ( isset( $theme_support[0]['max_posts'] ) ) {
+ self::$max_posts = absint( $theme_support[0]['max_posts'] );
+ }
+
+ add_filter( $theme_support[0]['filter'], array( __CLASS__, 'get_featured_posts' ) );
+ add_action( 'customize_register', array( __CLASS__, 'customize_register' ), 9 );
+ add_action( 'admin_init', array( __CLASS__, 'register_setting' ) );
+ add_action( 'save_post', array( __CLASS__, 'delete_transient' ) );
+ add_action( 'delete_post_tag', array( __CLASS__, 'delete_post_tag' ) );
+ add_action( 'customize_controls_enqueue_scripts', array( __CLASS__, 'enqueue_scripts' ) );
+ add_action( 'pre_get_posts', array( __CLASS__, 'pre_get_posts' ) );
+ add_action( 'switch_theme', array( __CLASS__, 'switch_theme' ) );
+ add_action( 'switch_theme', array( __CLASS__, 'delete_transient' ) );
+ add_action( 'wp_loaded', array( __CLASS__, 'wp_loaded' ) );
+ add_action( 'update_option_featured-content', array( __CLASS__, 'flush_post_tag_cache' ), 10, 2 );
+ add_action( 'delete_option_featured-content', array( __CLASS__, 'flush_post_tag_cache' ), 10, 2 );
+ add_action( 'split_shared_term', array( __CLASS__, 'jetpack_update_featured_content_for_split_terms', 10, 4 ) );
+
+ if ( isset( $theme_support[0]['additional_post_types'] ) ) {
+ $theme_support[0]['post_types'] = array_merge( array( 'post' ), (array) $theme_support[0]['additional_post_types'] );
+ unset( $theme_support[0]['additional_post_types'] );
+ }
+
+ // Themes can allow Featured Content pages
+ if ( isset( $theme_support[0]['post_types'] ) ) {
+ self::$post_types = array_merge( self::$post_types, (array) $theme_support[0]['post_types'] );
+ self::$post_types = array_unique( self::$post_types );
+
+ // register post_tag support for each post type
+ foreach ( self::$post_types as $post_type ) {
+ register_taxonomy_for_object_type( 'post_tag', $post_type );
+ }
+ }
+ }
+
+ /**
+ * Hide "featured" tag from the front-end.
+ *
+ * Has to run on wp_loaded so that the preview filters of the customizer
+ * have a chance to alter the value.
+ */
+ public static function wp_loaded() {
+ if ( self::get_setting( 'hide-tag' ) ) {
+ $settings = self::get_setting();
+
+ // This is done before setting filters for get_terms in order to avoid an infinite filter loop
+ self::$tag = get_term_by( 'name', $settings['tag-name'], 'post_tag' );
+
+ add_filter( 'get_terms', array( __CLASS__, 'hide_featured_term' ), 10, 3 );
+ add_filter( 'get_the_terms', array( __CLASS__, 'hide_the_featured_term' ), 10, 3 );
+ }
+ }
+
+ /**
+ * Get featured posts
+ *
+ * This method is not intended to be called directly. Theme developers should
+ * place a filter directly in their theme and then pass its name as a value of
+ * the "filter" key in the array passed as the $args parameter during the call
+ * to: add_theme_support( 'featured-content', $args ).
+ *
+ * @uses Featured_Content::get_featured_post_ids()
+ *
+ * @return array
+ */
+ public static function get_featured_posts() {
+ $post_ids = self::get_featured_post_ids();
+
+ // No need to query if there is are no featured posts.
+ if ( empty( $post_ids ) ) {
+ return array();
+ }
+
+ $featured_posts = get_posts(
+ array(
+ 'include' => $post_ids,
+ 'posts_per_page' => count( $post_ids ),
+ 'post_type' => self::$post_types,
+ 'suppress_filters' => false,
+ )
+ );
+
+ return $featured_posts;
+ }
+
+ /**
+ * Get featured post IDs
+ *
+ * This function will return the an array containing the post IDs of all
+ * featured posts.
+ *
+ * Sets the "featured_content_ids" transient.
+ *
+ * @return array Array of post IDs.
+ */
+ public static function get_featured_post_ids() {
+ // Return array of cached results if they exist.
+ $featured_ids = get_transient( 'featured_content_ids' );
+ if ( ! empty( $featured_ids ) ) {
+ return array_map(
+ 'absint',
+ /**
+ * Filter the list of Featured Posts IDs.
+ *
+ * @module theme-tools
+ *
+ * @since 2.7.0
+ *
+ * @param array $featured_ids Array of post IDs.
+ */
+ apply_filters( 'featured_content_post_ids', (array) $featured_ids )
+ );
+ }
+
+ $settings = self::get_setting();
+
+ // Return empty array if no tag name is set.
+ $term = get_term_by( 'name', $settings['tag-name'], 'post_tag' );
+ if ( ! $term ) {
+ $term = get_term_by( 'id', $settings['tag-id'], 'post_tag' );
+ }
+ if ( $term ) {
+ $tag = $term->term_id;
+ } else {
+ /** This action is documented in modules/theme-tools/featured-content.php */
+ return apply_filters( 'featured_content_post_ids', array() );
+ }
+
+ // Back compat for installs that have the quantity option still set.
+ $quantity = isset( $settings['quantity'] ) ? $settings['quantity'] : self::$max_posts;
+
+ // Query for featured posts.
+ $featured = get_posts(
+ array(
+ 'numberposts' => $quantity,
+ 'post_type' => self::$post_types,
+ 'suppress_filters' => false,
+ 'tax_query' => array(
+ array(
+ 'field' => 'term_id',
+ 'taxonomy' => 'post_tag',
+ 'terms' => $tag,
+ ),
+ ),
+ )
+ );
+
+ // Return empty array if no featured content exists.
+ if ( ! $featured ) {
+ /** This action is documented in modules/theme-tools/featured-content.php */
+ return apply_filters( 'featured_content_post_ids', array() );
+ }
+
+ // Ensure correct format before save/return.
+ $featured_ids = wp_list_pluck( (array) $featured, 'ID' );
+ $featured_ids = array_map( 'absint', $featured_ids );
+
+ set_transient( 'featured_content_ids', $featured_ids );
+
+ /** This action is documented in modules/theme-tools/featured-content.php */
+ return apply_filters( 'featured_content_post_ids', $featured_ids );
+ }
+
+ /**
+ * Delete Transient.
+ *
+ * Hooks in the "save_post" action.
+ *
+ * @see Featured_Content::validate_settings().
+ */
+ public static function delete_transient() {
+ delete_transient( 'featured_content_ids' );
+ }
+
+ /**
+ * Flush the Post Tag relationships cache.
+ *
+ * Hooks in the "update_option_featured-content" action.
+ */
+ public static function flush_post_tag_cache( $prev, $opts ) {
+ if ( ! empty( $opts ) && ! empty( $opts['tag-id'] ) ) {
+ $query = new WP_Query(
+ array(
+ 'tag_id' => (int) $opts['tag-id'],
+ 'posts_per_page' => -1,
+ )
+ );
+ foreach ( $query->posts as $post ) {
+ wp_cache_delete( $post->ID, 'post_tag_relationships' );
+ }
+ }
+ }
+
+ /**
+ * Exclude featured posts from the blog query when the blog is the front-page,
+ * and user has not checked the "Also display tagged posts outside the Featured Content area" checkbox.
+ *
+ * Filter the home page posts, and remove any featured post ID's from it.
+ * Hooked onto the 'pre_get_posts' action, this changes the parameters of the
+ * query before it gets any posts.
+ *
+ * @uses Featured_Content::get_featured_post_ids();
+ * @uses Featured_Content::get_setting();
+ * @param WP_Query $query
+ * @return WP_Query Possibly modified WP_Query
+ */
+ public static function pre_get_posts( $query ) {
+
+ // Bail if not home or not main query.
+ if ( ! $query->is_home() || ! $query->is_main_query() ) {
+ return;
+ }
+
+ // Bail if the blog page is not the front page.
+ if ( 'posts' !== get_option( 'show_on_front' ) ) {
+ return;
+ }
+
+ $featured = self::get_featured_post_ids();
+
+ // Bail if no featured posts.
+ if ( ! $featured ) {
+ return;
+ }
+
+ $settings = self::get_setting();
+
+ // Bail if the user wants featured posts always displayed.
+ if ( true == $settings['show-all'] ) {
+ return;
+ }
+
+ // We need to respect post ids already in the blacklist.
+ $post__not_in = $query->get( 'post__not_in' );
+
+ if ( ! empty( $post__not_in ) ) {
+ $featured = array_merge( (array) $post__not_in, $featured );
+ $featured = array_unique( $featured );
+ }
+
+ $query->set( 'post__not_in', $featured );
+ }
+
+ /**
+ * Reset tag option when the saved tag is deleted.
+ *
+ * It's important to mention that the transient needs to be deleted, too.
+ * While it may not be obvious by looking at the function alone, the transient
+ * is deleted by Featured_Content::validate_settings().
+ *
+ * Hooks in the "delete_post_tag" action.
+ *
+ * @see Featured_Content::validate_settings().
+ *
+ * @param int $tag_id The term_id of the tag that has been deleted.
+ * @return void
+ */
+ public static function delete_post_tag( $tag_id ) {
+ $settings = self::get_setting();
+
+ if ( empty( $settings['tag-id'] ) || $tag_id != $settings['tag-id'] ) {
+ return;
+ }
+
+ $settings['tag-id'] = 0;
+ $settings = self::validate_settings( $settings );
+ update_option( 'featured-content', $settings );
+ }
+
+ /**
+ * Hide featured tag from displaying when global terms are queried from
+ * the front-end.
+ *
+ * Hooks into the "get_terms" filter.
+ *
+ * @uses Featured_Content::get_setting()
+ *
+ * @param array $terms A list of term objects. This is the return value of get_terms().
+ * @param array $taxonomies An array of taxonomy slugs.
+ * @return array $terms
+ */
+ public static function hide_featured_term( $terms, $taxonomies, $args ) {
+
+ // This filter is only appropriate on the front-end.
+ if ( is_admin() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) || ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) ) {
+ return $terms;
+ }
+
+ // We only want to hide the featured tag.
+ if ( ! in_array( 'post_tag', $taxonomies ) ) {
+ return $terms;
+ }
+
+ // Bail if no terms were returned.
+ if ( empty( $terms ) ) {
+ return $terms;
+ }
+
+ // Bail if term objects are unavailable.
+ if ( 'all' != $args['fields'] ) {
+ return $terms;
+ }
+
+ $settings = self::get_setting();
+
+ if ( false !== self::$tag ) {
+ foreach ( $terms as $order => $term ) {
+ if (
+ is_object( $term )
+ && (
+ $settings['tag-id'] === $term->term_id
+ || $settings['tag-name'] === $term->name
+ )
+ ) {
+ unset( $terms[ $order ] );
+ }
+ }
+ }
+
+ return $terms;
+ }
+
+ /**
+ * Hide featured tag from displaying when terms associated with a post object
+ * are queried from the front-end.
+ *
+ * Hooks into the "get_the_terms" filter.
+ *
+ * @uses Featured_Content::get_setting()
+ *
+ * @param array $terms A list of term objects. This is the return value of get_the_terms().
+ * @param int $id The ID field for the post object that terms are associated with.
+ * @param array $taxonomy An array of taxonomy slugs.
+ * @return array $terms
+ */
+ public static function hide_the_featured_term( $terms, $id, $taxonomy ) {
+
+ // This filter is only appropriate on the front-end.
+ if ( is_admin() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) || ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) ) {
+ return $terms;
+ }
+
+ // Make sure we are in the correct taxonomy.
+ if ( 'post_tag' != $taxonomy ) {
+ return $terms;
+ }
+
+ // No terms? Return early!
+ if ( empty( $terms ) ) {
+ return $terms;
+ }
+
+ $settings = self::get_setting();
+ $tag = get_term_by( 'name', $settings['tag-name'], 'post_tag' );
+
+ if ( false !== $tag ) {
+ foreach ( $terms as $order => $term ) {
+ if ( $settings['tag-id'] === $term->term_id || $settings['tag-name'] === $term->name ) {
+ unset( $terms[ $order ] );
+ }
+ }
+ }
+
+ return $terms;
+ }
+
+ /**
+ * Register custom setting on the Settings -> Reading screen.
+ *
+ * @uses Featured_Content::render_form()
+ * @uses Featured_Content::validate_settings()
+ *
+ * @return void
+ */
+ public static function register_setting() {
+ add_settings_field( 'featured-content', __( 'Featured Content', 'jetpack' ), array( __class__, 'render_form' ), 'reading' );
+
+ // Register sanitization callback for the Customizer.
+ register_setting( 'featured-content', 'featured-content', array( __class__, 'validate_settings' ) );
+ }
+
+ /**
+ * Add settings to the Customizer.
+ *
+ * @param WP_Customize_Manager $wp_customize Theme Customizer object.
+ */
+ public static function customize_register( $wp_customize ) {
+ $wp_customize->add_section(
+ 'featured_content',
+ array(
+ 'title' => esc_html__( 'Featured Content', 'jetpack' ),
+ 'description' => sprintf( __( 'Easily feature all posts with the <a href="%1$s">"featured" tag</a> or a tag of your choice. Your theme supports up to %2$s posts in its featured content area.', 'jetpack' ), admin_url( '/edit.php?tag=featured' ), absint( self::$max_posts ) ),
+ 'priority' => 130,
+ 'theme_supports' => 'featured-content',
+ )
+ );
+
+ /*
+ Add Featured Content settings.
+ *
+ * Sanitization callback registered in Featured_Content::validate_settings().
+ * See http://themeshaper.com/2013/04/29/validation-sanitization-in-customizer/comment-page-1/#comment-12374
+ */
+ $wp_customize->add_setting(
+ 'featured-content[tag-name]',
+ array(
+ 'type' => 'option',
+ 'sanitize_js_callback' => array( __CLASS__, 'delete_transient' ),
+ )
+ );
+ $wp_customize->add_setting(
+ 'featured-content[hide-tag]',
+ array(
+ 'default' => true,
+ 'type' => 'option',
+ 'sanitize_js_callback' => array( __CLASS__, 'delete_transient' ),
+ )
+ );
+ $wp_customize->add_setting(
+ 'featured-content[show-all]',
+ array(
+ 'default' => false,
+ 'type' => 'option',
+ 'sanitize_js_callback' => array( __CLASS__, 'delete_transient' ),
+ )
+ );
+
+ // Add Featured Content controls.
+ $wp_customize->add_control(
+ 'featured-content[tag-name]',
+ array(
+ 'label' => esc_html__( 'Tag name', 'jetpack' ),
+ 'section' => 'featured_content',
+ 'theme_supports' => 'featured-content',
+ 'priority' => 20,
+ )
+ );
+ $wp_customize->add_control(
+ 'featured-content[hide-tag]',
+ array(
+ 'label' => esc_html__( 'Do not display tag in post details and tag clouds.', 'jetpack' ),
+ 'section' => 'featured_content',
+ 'theme_supports' => 'featured-content',
+ 'type' => 'checkbox',
+ 'priority' => 30,
+ )
+ );
+ $wp_customize->add_control(
+ 'featured-content[show-all]',
+ array(
+ 'label' => esc_html__( 'Also display tagged posts outside the Featured Content area.', 'jetpack' ),
+ 'section' => 'featured_content',
+ 'theme_supports' => 'featured-content',
+ 'type' => 'checkbox',
+ 'priority' => 40,
+ )
+ );
+ }
+
+ /**
+ * Enqueue the tag suggestion script.
+ */
+ public static function enqueue_scripts() {
+ wp_enqueue_script( 'featured-content-suggest', plugins_url( 'js/suggest.js', __FILE__ ), array( 'suggest' ), '20131022', true );
+ }
+
+ /**
+ * Renders all form fields on the Settings -> Reading screen.
+ */
+ public static function render_form() {
+ printf( __( 'The settings for Featured Content have <a href="%s">moved to Appearance &rarr; Customize</a>.', 'jetpack' ), admin_url( 'customize.php?#accordion-section-featured_content' ) );
+ }
+
+ /**
+ * Get settings
+ *
+ * Get all settings recognized by this module. This function will return all
+ * settings whether or not they have been stored in the database yet. This
+ * ensures that all keys are available at all times.
+ *
+ * In the event that you only require one setting, you may pass its name as the
+ * first parameter to the function and only that value will be returned.
+ *
+ * @param string $key The key of a recognized setting.
+ * @return mixed Array of all settings by default. A single value if passed as first parameter.
+ */
+ public static function get_setting( $key = 'all' ) {
+ $saved = (array) get_option( 'featured-content' );
+
+ /**
+ * Filter Featured Content's default settings.
+ *
+ * @module theme-tools
+ *
+ * @since 2.7.0
+ *
+ * @param array $args {
+ * Array of Featured Content Settings
+ *
+ * @type int hide-tag Default is 1.
+ * @type int tag-id Default is 0.
+ * @type string tag-name Default is empty.
+ * @type int show-all Default is 0.
+ * }
+ */
+ $defaults = apply_filters(
+ 'featured_content_default_settings',
+ array(
+ 'hide-tag' => 1,
+ 'tag-id' => 0,
+ 'tag-name' => '',
+ 'show-all' => 0,
+ )
+ );
+
+ $options = wp_parse_args( $saved, $defaults );
+ $options = array_intersect_key( $options, $defaults );
+
+ if ( 'all' != $key ) {
+ return isset( $options[ $key ] ) ? $options[ $key ] : false;
+ }
+
+ return $options;
+ }
+
+ /**
+ * Validate settings
+ *
+ * Make sure that all user supplied content is in an expected format before
+ * saving to the database. This function will also delete the transient set in
+ * Featured_Content::get_featured_content().
+ *
+ * @uses Featured_Content::delete_transient()
+ *
+ * @param array $input
+ * @return array $output
+ */
+ public static function validate_settings( $input ) {
+ $output = array();
+
+ if ( empty( $input['tag-name'] ) ) {
+ $output['tag-id'] = 0;
+ } else {
+ $term = get_term_by( 'name', $input['tag-name'], 'post_tag' );
+
+ if ( $term ) {
+ $output['tag-id'] = $term->term_id;
+ } else {
+ $new_tag = wp_create_tag( $input['tag-name'] );
+
+ if ( ! is_wp_error( $new_tag ) && isset( $new_tag['term_id'] ) ) {
+ $output['tag-id'] = $new_tag['term_id'];
+ }
+ }
+
+ $output['tag-name'] = $input['tag-name'];
+ }
+
+ $output['hide-tag'] = isset( $input['hide-tag'] ) && $input['hide-tag'] ? 1 : 0;
+
+ $output['show-all'] = isset( $input['show-all'] ) && $input['show-all'] ? 1 : 0;
+
+ self::delete_transient();
+
+ return $output;
+ }
+
+ /**
+ * Removes the quantity setting from the options array.
+ *
+ * @return void
+ */
+ public static function switch_theme() {
+ $option = (array) get_option( 'featured-content' );
+
+ if ( isset( $option['quantity'] ) ) {
+ unset( $option['quantity'] );
+ update_option( 'featured-content', $option );
+ }
+ }
+
+ public static function jetpack_update_featured_content_for_split_terms( $old_term_id, $new_term_id, $term_taxonomy_id, $taxonomy ) {
+ $featured_content_settings = get_option( 'featured-content', array() );
+
+ // Check to see whether the stored tag ID is the one that's just been split.
+ if ( isset( $featured_content_settings['tag-id'] ) && $old_term_id == $featured_content_settings['tag-id'] && 'post_tag' == $taxonomy ) {
+ // We have a match, so we swap out the old tag ID for the new one and resave the option.
+ $featured_content_settings['tag-id'] = $new_term_id;
+ update_option( 'featured-content', $featured_content_settings );
+ }
+ }
+ }
+
+ /**
+ * Adds the featured content plugin to the set of files for which action
+ * handlers should be copied when the theme context is loaded by the REST API.
+ *
+ * @param array $copy_dirs Copy paths with actions to be copied
+ * @return array Copy paths with featured content plugin
+ */
+ function wpcom_rest_api_featured_content_copy_plugin_actions( $copy_dirs ) {
+ $copy_dirs[] = __FILE__;
+ return $copy_dirs;
+ }
+ add_action( 'restapi_theme_action_copy_dirs', 'wpcom_rest_api_featured_content_copy_plugin_actions' );
+
+ /**
+ * Delayed initialization for API Requests.
+ */
+ function wpcom_rest_request_before_callbacks( $request ) {
+ Featured_Content::init();
+ return $request;
+ }
+
+ if ( Jetpack_Constants::is_true( 'IS_WPCOM' ) && Jetpack_Constants::is_true( 'REST_API_REQUEST' ) ) {
+ add_filter( 'rest_request_before_callbacks', 'wpcom_rest_request_before_callbacks');
+ }
+
+ Featured_Content::setup();
+} // end if ( ! class_exists( 'Featured_Content' ) && isset( $GLOBALS['pagenow'] ) && 'plugins.php' !== $GLOBALS['pagenow'] ) {
diff --git a/plugins/jetpack/modules/theme-tools/infinite-scroll.php b/plugins/jetpack/modules/theme-tools/infinite-scroll.php
new file mode 100644
index 00000000..ac5a0aa8
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/infinite-scroll.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * INFINITE SCROLL
+ */
+
+/**
+ * Load theme's infinite scroll annotation file, if present in the IS plugin.
+ * The `setup_theme` action is used because the annotation files should be using `after_setup_theme` to register support for IS.
+ *
+ * As released in Jetpack 2.0, a child theme's parent wasn't checked for in the plugin's bundled support, hence the convoluted way the parent is checked for now.
+ *
+ * @uses is_admin, wp_get_theme, apply_filters
+ * @action setup_theme
+ * @return null
+ */
+function jetpack_load_infinite_scroll_annotation() {
+ if ( is_admin() && isset( $_GET['page'] ) && 'jetpack' == $_GET['page'] ) {
+ $theme = wp_get_theme();
+
+ if ( ! is_a( $theme, 'WP_Theme' ) && ! is_array( $theme ) ) {
+ return;
+ }
+
+ /** This filter is already documented in modules/infinite-scroll/infinity.php */
+ $customization_file = apply_filters( 'infinite_scroll_customization_file', dirname( __FILE__ ) . "/infinite-scroll/themes/{$theme['Stylesheet']}.php", $theme['Stylesheet'] );
+
+ if ( is_readable( $customization_file ) ) {
+ require_once $customization_file;
+ } elseif ( ! empty( $theme['Template'] ) ) {
+ $customization_file = dirname( __FILE__ ) . "/infinite-scroll/themes/{$theme['Template']}.php";
+
+ if ( is_readable( $customization_file ) ) {
+ require_once $customization_file;
+ }
+ }
+ }
+}
+add_action( 'setup_theme', 'jetpack_load_infinite_scroll_annotation' );
+
+/**
+ * Prevent IS from being activated if theme doesn't support it
+ *
+ * @param bool $can_activate
+ * @filter jetpack_can_activate_infinite-scroll
+ * @return bool
+ */
+function jetpack_can_activate_infinite_scroll() {
+ return (bool) current_theme_supports( 'infinite-scroll' );
+}
+add_filter( 'jetpack_can_activate_infinite-scroll', 'jetpack_can_activate_infinite_scroll' );
diff --git a/plugins/jetpack/modules/theme-tools/js/suggest.js b/plugins/jetpack/modules/theme-tools/js/suggest.js
new file mode 100644
index 00000000..4d6c8794
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/js/suggest.js
@@ -0,0 +1,7 @@
+/* global ajaxurl:true */
+jQuery( function( $ ) {
+ $( '#customize-control-featured-content-tag-name input' ).suggest(
+ ajaxurl + '?action=ajax-tag-search&tax=post_tag',
+ { delay: 500, minchars: 2 }
+ );
+} );
diff --git a/plugins/jetpack/modules/theme-tools/random-redirect.php b/plugins/jetpack/modules/theme-tools/random-redirect.php
new file mode 100644
index 00000000..d866d336
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/random-redirect.php
@@ -0,0 +1,83 @@
+<?php
+/*
+Plugin Name: Random Redirect
+Plugin URI: https://wordpress.org/extend/plugins/random-redirect/
+Description: Allows you to create a link to yourblog.example.com/?random which will redirect someone to a random post on your blog, in a StumbleUpon-like fashion.
+Version: 1.2-wpcom
+Author: Matt Mullenweg
+Author URI: http://photomatt.net/
+*/
+
+function jetpack_matt_random_redirect() {
+ // Verify that the Random Redirect plugin this code is from is not active
+ // See http://plugins.trac.wordpress.org/ticket/1898
+ if ( ! ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
+ if ( is_plugin_active( 'random-redirect/random-redirect.php' ) ) {
+ return;
+ }
+ }
+
+ // Set default post type.
+ $post_type = get_post_type();
+
+ // Set default category type
+ if ( is_category() ) {
+ $category = get_the_category();
+ if ( isset( $category ) && ! empty( $category ) ) {
+ $random_cat_id = $category[0]->term_id;
+ }
+ }
+
+ // Set author name if we're on an author archive.
+ if ( is_author() ) {
+ $random_author_name = get_the_author_meta( 'user_login' );
+ $random_author_query = 'AND user_login = "' . $random_author_name . '"';
+ } else {
+ $random_author_query = '';
+ }
+
+ // Acceptable URL formats: /[...]/?random=[post type], /?random, /&random, /&random=1
+ if ( ! isset( $_GET['random'] ) && ! in_array( strtolower( $_SERVER['REQUEST_URI'] ), array( '/&random', '/&random=1' ) ) ) {
+ return;
+ }
+
+ // Ignore POST requests.
+ if ( ! empty( $_POST ) ) {
+ return;
+ }
+
+ // Persistent AppEngine abuse. ORDER BY RAND is expensive.
+ if ( strstr( $_SERVER['HTTP_USER_AGENT'], 'AppEngine-Google' ) ) {
+ wp_die( 'Please <a href="http://en.support.wordpress.com/contact/" rel="noopener noreferrer" target="_blank">contact support</a>' );
+ }
+
+ // Set the category ID if the parameter is set.
+ if ( isset( $_GET['random_cat_id'] ) ) {
+ $random_cat_id = (int) $_GET['random_cat_id'];
+ }
+
+ // Change the post type if the parameter is set.
+ if ( isset( $_GET['random_post_type'] ) && post_type_exists( $_GET['random_post_type'] ) ) {
+ $post_type = $_GET['random_post_type'];
+ }
+
+ // Don't show a random page if 'page' isn't specified as the post type specifically.
+ if ( 'page' === $post_type && is_front_page() && ! isset( $_GET['random_post_type'] ) ) {
+ $post_type = 'post';
+ }
+
+ global $wpdb;
+
+ if ( isset( $random_cat_id ) ) {
+ $random_id = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT ID FROM $wpdb->posts AS p INNER JOIN $wpdb->term_relationships AS tr ON (p.ID = tr.object_id AND tr.term_taxonomy_id = %s) INNER JOIN $wpdb->term_taxonomy AS tt ON(tr.term_taxonomy_id = tt.term_taxonomy_id AND taxonomy = 'category') WHERE p.post_type = %s AND post_password = '' AND post_status = 'publish' %s ORDER BY RAND() LIMIT 1", $random_cat_id, $post_type, $random_author_query ) );
+ } else {
+ $random_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type = %s AND post_password = '' AND post_status = 'publish' %s ORDER BY RAND() LIMIT 1", $post_type, $random_author_query ) );
+ }
+
+ $permalink = get_permalink( $random_id );
+ wp_safe_redirect( $permalink );
+ exit;
+}
+
+add_action( 'template_redirect', 'jetpack_matt_random_redirect' );
diff --git a/plugins/jetpack/modules/theme-tools/responsive-videos.php b/plugins/jetpack/modules/theme-tools/responsive-videos.php
new file mode 100644
index 00000000..61987a8d
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/responsive-videos.php
@@ -0,0 +1,152 @@
+<?php
+
+/**
+ * Load the Responsive videos plugin
+ */
+function jetpack_responsive_videos_init() {
+
+ /* If the doesn't theme support 'jetpack-responsive-videos', don't continue */
+ if ( ! current_theme_supports( 'jetpack-responsive-videos' ) ) {
+ return;
+ }
+
+ /* If the theme does support 'jetpack-responsive-videos', wrap the videos */
+ add_filter( 'wp_video_shortcode', 'jetpack_responsive_videos_embed_html' );
+ add_filter( 'video_embed_html', 'jetpack_responsive_videos_embed_html' );
+
+ /* Only wrap oEmbeds if video */
+ add_filter( 'embed_oembed_html', 'jetpack_responsive_videos_maybe_wrap_oembed', 10, 2 );
+ add_filter( 'embed_handler_html', 'jetpack_responsive_videos_maybe_wrap_oembed', 10, 2 );
+
+ /* Wrap videos in Buddypress */
+ add_filter( 'bp_embed_oembed_html', 'jetpack_responsive_videos_embed_html' );
+
+ /* Wrap Slideshare shortcodes */
+ add_filter( 'jetpack_slideshare_shortcode', 'jetpack_responsive_videos_embed_html' );
+
+ // Remove the Jetpack Responsive video wrapper in embed blocks on sites that support core Responsive embeds.
+ if ( current_theme_supports( 'responsive-embeds' ) ) {
+ add_filter( 'render_block', 'jetpack_responsive_videos_remove_wrap_oembed', 10, 2 );
+ }
+}
+add_action( 'after_setup_theme', 'jetpack_responsive_videos_init', 99 );
+
+
+/**
+ * Adds a wrapper to videos and enqueue script
+ *
+ * @return string
+ */
+function jetpack_responsive_videos_embed_html( $html ) {
+ if ( empty( $html ) || ! is_string( $html ) ) {
+ return $html;
+ }
+
+ // The customizer video widget wraps videos with a class of wp-video
+ // mejs as of 4.9 apparently resizes videos too which causes issues
+ // skip the video if it is wrapped in wp-video.
+ $video_widget_wrapper = 'class="wp-video"';
+
+ $mejs_wrapped = strpos( $html, $video_widget_wrapper );
+
+ // If this is a video widget wrapped by mejs, return the html.
+ if ( false !== $mejs_wrapped ) {
+ return $html;
+ }
+
+ if ( defined( 'SCRIPT_DEBUG' ) && true == SCRIPT_DEBUG ) {
+ wp_enqueue_script( 'jetpack-responsive-videos-script', plugins_url( 'responsive-videos/responsive-videos.js', __FILE__ ), array( 'jquery' ), '1.3', true );
+ } else {
+ wp_enqueue_script( 'jetpack-responsive-videos-min-script', plugins_url( 'responsive-videos/responsive-videos.min.js', __FILE__ ), array( 'jquery' ), '1.3', true );
+ }
+
+ // Enqueue CSS to ensure compatibility with all themes
+ wp_enqueue_style( 'jetpack-responsive-videos-style', plugins_url( 'responsive-videos/responsive-videos.css', __FILE__ ) );
+
+ return '<div class="jetpack-video-wrapper">' . $html . '</div>';
+}
+
+/**
+ * Check if oEmbed is a `$video_patterns` provider video before wrapping.
+ *
+ * @param mixed $html The cached HTML result, stored in post meta.
+ * @param string $url he attempted embed URL.
+ *
+ * @return string
+ */
+function jetpack_responsive_videos_maybe_wrap_oembed( $html, $url = null ) {
+ if ( empty( $html ) || ! is_string( $html ) || ! $url ) {
+ return $html;
+ }
+
+ $jetpack_video_wrapper = '<div class="jetpack-video-wrapper">';
+
+ $already_wrapped = strpos( $html, $jetpack_video_wrapper );
+
+ // If the oEmbed has already been wrapped, return the html.
+ if ( false !== $already_wrapped ) {
+ return $html;
+ }
+
+ /**
+ * oEmbed Video Providers.
+ *
+ * A whitelist of oEmbed video provider Regex patterns to check against before wrapping the output.
+ *
+ * @module theme-tools
+ *
+ * @since 3.8.0
+ *
+ * @param array $video_patterns oEmbed video provider Regex patterns.
+ */
+ $video_patterns = apply_filters(
+ 'jetpack_responsive_videos_oembed_videos',
+ array(
+ 'https?://((m|www)\.)?youtube\.com/watch',
+ 'https?://((m|www)\.)?youtube\.com/playlist',
+ 'https?://youtu\.be/',
+ 'https?://(.+\.)?vimeo\.com/',
+ 'https?://(www\.)?dailymotion\.com/',
+ 'https?://dai.ly/',
+ 'https?://(www\.)?hulu\.com/watch/',
+ 'https?://wordpress.tv/',
+ 'https?://(www\.)?funnyordie\.com/videos/',
+ 'https?://vine.co/v/',
+ 'https?://(www\.)?collegehumor\.com/video/',
+ 'https?://(www\.|embed\.)?ted\.com/talks/',
+ )
+ );
+
+ // Merge patterns to run in a single preg_match call.
+ $video_patterns = '(' . implode( '|', $video_patterns ) . ')';
+
+ $is_video = preg_match( $video_patterns, $url );
+
+ // If the oEmbed is a video, wrap it in the responsive wrapper.
+ if ( false === $already_wrapped && 1 === $is_video ) {
+ return jetpack_responsive_videos_embed_html( $html );
+ }
+
+ return $html;
+}
+
+/**
+ * Remove the Jetpack Responsive video wrapper in embed blocks.
+ *
+ * @since 7.0.0
+ *
+ * @param string $block_content The block content about to be appended.
+ * @param array $block The full block, including name and attributes.
+ *
+ * @return string $block_content String of rendered HTML.
+ */
+function jetpack_responsive_videos_remove_wrap_oembed( $block_content, $block ) {
+ if (
+ isset( $block['blockName'] )
+ && false !== strpos( $block['blockName'], 'core-embed' )
+ ) {
+ $block_content = preg_replace( '#<div class="jetpack-video-wrapper">(.*?)</div>#', '${1}', $block_content );
+ }
+
+ return $block_content;
+}
diff --git a/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.css b/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.css
new file mode 100644
index 00000000..056f1829
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.css
@@ -0,0 +1,10 @@
+.jetpack-video-wrapper {
+ margin-bottom: 1.6em;
+}
+
+.jetpack-video-wrapper > embed,
+.jetpack-video-wrapper > iframe,
+.jetpack-video-wrapper > object,
+.jetpack-video-wrapper > .wp-video {
+ margin-bottom: 0;
+}
diff --git a/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js b/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js
new file mode 100644
index 00000000..668cc7a0
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js
@@ -0,0 +1,63 @@
+( function( $ ) {
+ var resizeTimer;
+
+ function responsiveVideos() {
+ $( '.jetpack-video-wrapper' )
+ .find( 'embed, iframe, object' )
+ .each( function() {
+ var _this, videoWidth, videoHeight, videoRatio, videoWrapper, videoMargin, containerWidth;
+
+ _this = $( this );
+ videoMargin = 0;
+
+ if (
+ _this
+ .parents( '.jetpack-video-wrapper' )
+ .prev( 'p' )
+ .css( 'text-align' ) === 'center'
+ ) {
+ videoMargin = '0 auto';
+ }
+
+ if ( ! _this.attr( 'data-ratio' ) ) {
+ _this
+ .attr( 'data-ratio', this.height / this.width )
+ .attr( 'data-width', this.width )
+ .attr( 'data-height', this.height )
+ .css( {
+ display: 'block',
+ margin: videoMargin,
+ } );
+ }
+
+ videoWidth = _this.attr( 'data-width' );
+ videoHeight = _this.attr( 'data-height' );
+ videoRatio = _this.attr( 'data-ratio' );
+ videoWrapper = _this.parent();
+ containerWidth = videoWrapper.width();
+
+ if ( videoRatio === 'Infinity' ) {
+ videoWidth = '100%';
+ }
+
+ _this.removeAttr( 'height' ).removeAttr( 'width' );
+
+ if ( videoWidth > containerWidth ) {
+ _this.width( containerWidth ).height( containerWidth * videoRatio );
+ } else {
+ _this.width( videoWidth ).height( videoHeight );
+ }
+ } );
+ }
+
+ $( document ).ready( function() {
+ $( window )
+ .on( 'load.jetpack', responsiveVideos )
+ .on( 'resize.jetpack', function() {
+ clearTimeout( resizeTimer );
+ resizeTimer = setTimeout( responsiveVideos, 500 );
+ } )
+ .on( 'post-load.jetpack', responsiveVideos )
+ .resize();
+ } );
+} )( jQuery );
diff --git a/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.min.js b/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.min.js
new file mode 100644
index 00000000..ff419935
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.min.js
@@ -0,0 +1 @@
+!function(t){function a(){t(".jetpack-video-wrapper").find("embed, iframe, object").each(function(){var a,e,i,r,h,d,o;a=t(this),d=0,"center"===a.parents(".jetpack-video-wrapper").prev("p").css("text-align")&&(d="0 auto"),a.attr("data-ratio")||a.attr("data-ratio",this.height/this.width).attr("data-width",this.width).attr("data-height",this.height).css({display:"block",margin:d}),e=a.attr("data-width"),i=a.attr("data-height"),r=a.attr("data-ratio"),h=a.parent(),o=h.width(),"Infinity"===r&&(e="100%"),a.removeAttr("height").removeAttr("width"),e>o?a.width(o).height(o*r):a.width(e).height(i)})}var e;t(document).ready(function(){t(window).on("load.jetpack",a).on("resize.jetpack",function(){clearTimeout(e),e=setTimeout(a,500)}).on("post-load.jetpack",a).resize()})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-breadcrumbs.php b/plugins/jetpack/modules/theme-tools/site-breadcrumbs.php
new file mode 100644
index 00000000..2f266738
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-breadcrumbs.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Plugin Name: Site Breadcrumbs
+ * Plugin URI: https://wordpress.com
+ * Description: Quickly add breadcrumbs to the single view of a hierarchical post type or a hierarchical taxonomy.
+ * Author: Automattic
+ * Version: 1.0
+ * Author URI: https://wordpress.com
+ * License: GPL2 or later
+ */
+
+function jetpack_breadcrumbs() {
+ $taxonomy = is_category() ? 'category' : get_query_var( 'taxonomy' );
+ $is_taxonomy_hierarchical = is_taxonomy_hierarchical( $taxonomy );
+
+ $post_type = is_page() ? 'page' : get_query_var( 'post_type' );
+ $is_post_type_hierarchical = is_post_type_hierarchical( $post_type );
+
+ if ( ! ( $is_post_type_hierarchical || $is_taxonomy_hierarchical ) || is_front_page() ) {
+ return;
+ }
+
+ $breadcrumb = '';
+
+ if ( $is_post_type_hierarchical ) {
+ $post_id = get_queried_object_id();
+ $ancestors = array_reverse( get_post_ancestors( $post_id ) );
+ if ( $ancestors ) {
+ foreach ( $ancestors as $ancestor ) {
+ $breadcrumb .= '<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><a href="' . esc_url( get_permalink( $ancestor ) ) . '" itemprop="item"><span itemprop="name">' . esc_html( get_the_title( $ancestor ) ) . '</span></a></span>';
+ }
+ }
+ $breadcrumb .= '<span class="current-page" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><span itemprop="name">' . esc_html( get_the_title( $post_id ) ) . '</span></span>';
+ } elseif ( $is_taxonomy_hierarchical ) {
+ $current = get_term( get_queried_object_id(), $taxonomy );
+
+ if ( is_wp_error( $current ) ) {
+ return;
+ }
+
+ if ( $current->parent ) {
+ $breadcrumb = jetpack_get_term_parents( $current->parent, $taxonomy );
+ }
+
+ $breadcrumb .= '<span class="current-category" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><span itemprop="name">' . esc_html( $current->name ) . '</span></span>';
+ }
+
+ $home = '<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><a href="' . esc_url( home_url( '/' ) ) . '" class="home-link" itemprop="item" rel="home"><span itemprop="name">' . esc_html__( 'Home', 'jetpack' ) . '</span></a></span>';
+
+ echo '<nav class="entry-breadcrumbs" itemscope itemtype="https://schema.org/BreadcrumbList">' . $home . $breadcrumb . '</nav>';
+}
+
+/**
+ * Return the parents for a given taxonomy term ID.
+ *
+ * @param int $term Taxonomy term whose parents will be returned.
+ * @param string $taxonomy Taxonomy name that the term belongs to.
+ * @param array $visited Terms already added to prevent duplicates.
+ *
+ * @return string A list of links to the term parents.
+ */
+function jetpack_get_term_parents( $term, $taxonomy, $visited = array() ) {
+ $parent = get_term( $term, $taxonomy );
+
+ if ( is_wp_error( $parent ) ) {
+ return $parent;
+ }
+
+ $chain = '';
+
+ if ( $parent->parent && ( $parent->parent != $parent->term_id ) && ! in_array( $parent->parent, $visited ) ) {
+ $visited[] = $parent->parent;
+ $chain .= jetpack_get_term_parents( $parent->parent, $taxonomy, $visited );
+ }
+
+ $chain .= '<a href="' . esc_url( get_category_link( $parent->term_id ) ) . '">' . $parent->name . '</a>';
+
+ return $chain;
+}
diff --git a/plugins/jetpack/modules/theme-tools/site-logo.php b/plugins/jetpack/modules/theme-tools/site-logo.php
new file mode 100644
index 00000000..04f16b71
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo.php
@@ -0,0 +1,46 @@
+<?php
+/*
+ * Site Logo.
+ * @see http://jetpack.com/support/site-logo/
+ *
+ * This feature will only be activated for themes that declare their support.
+ * This can be done by adding code similar to the following during the
+ * 'after_setup_theme' action:
+ *
+ * $args = array(
+ * 'header-text' => array(
+ * 'site-title',
+ * 'site-description',
+ * ),
+ * 'size' => 'medium',
+ * );
+ * add_theme_support( 'site-logo', $args );
+ *
+ */
+
+/**
+ * Activate the Site Logo plugin.
+ *
+ * @uses current_theme_supports()
+ * @since 3.2
+ */
+function site_logo_init() {
+ // For transferring existing site logo from Jetpack -> Core
+ if ( current_theme_supports( 'custom-logo' ) && ! get_theme_mod( 'custom_logo' ) && $jp_logo = get_option( 'site_logo' ) ) {
+ set_theme_mod( 'custom_logo', $jp_logo['id'] );
+ delete_option( 'site_logo' );
+ }
+
+ // Only load our code if our theme declares support, and the standalone plugin is not activated.
+ if ( current_theme_supports( 'site-logo' ) && ! class_exists( 'Site_Logo', false ) ) {
+ // Load our class for namespacing.
+ require dirname( __FILE__ ) . '/site-logo/inc/class-site-logo.php';
+
+ // Load template tags.
+ require dirname( __FILE__ ) . '/site-logo/inc/functions.php';
+
+ // Load backwards-compatible template tags.
+ require dirname( __FILE__ ) . '/site-logo/inc/compat.php';
+ }
+}
+add_action( 'init', 'site_logo_init' );
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.css b/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.css
new file mode 100644
index 00000000..d5441db1
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.css
@@ -0,0 +1,12 @@
+/**
+ * RTL styles for the Site Logo control. Just swaps the button sides.
+ */
+#customize-control-site_logo .remove {
+ float: right;
+ margin-left: 3px;
+}
+
+#customize-control-site_logo .new,
+#customize-control-site_logo .change {
+ float: left;
+}
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.min.css b/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.min.css
new file mode 100644
index 00000000..1893fe9c
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.min.css
@@ -0,0 +1 @@
+#customize-control-site_logo .remove{float:right;margin-left:3px}#customize-control-site_logo .change,#customize-control-site_logo .new{float:left} \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.css b/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.css
new file mode 100644
index 00000000..b9a10fe6
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.css
@@ -0,0 +1,49 @@
+/**
+ * Styles for the Site Logo control.
+ */
+#customize-control-site_logo .current {
+ margin-bottom: 6px;
+}
+
+#customize-control-site_logo .current span {
+ border: 1px solid #eee;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ color: #555;
+ display: block;
+ overflow: hidden;
+ line-height: 40px;
+ min-height: 40px;
+ padding: 0 6px;
+ text-align: center;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+#customize-control-site_logo .current img {
+ max-width: 100%;
+}
+
+#customize-control-site_logo button.new,
+#customize-control-site_logo button.change,
+#customize-control-site_logo button.remove {
+ height: auto;
+ width: 48%;
+ white-space: normal;
+}
+
+#customize-control-site_logo .remove {
+ float: left;
+ margin-right: 3px;
+}
+
+#customize-control-site_logo .new,
+#customize-control-site_logo .change {
+ float: right;
+}
+
+#customize-control-site_logo .customize-control-description {
+ display: block;
+ clear: both;
+ margin-bottom: 10px;
+} \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.min.css b/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.min.css
new file mode 100644
index 00000000..7fcee5ae
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.min.css
@@ -0,0 +1 @@
+#customize-control-site_logo .current{margin-bottom:6px}#customize-control-site_logo .current span{border:1px solid #eee;-webkit-border-radius:2px;border-radius:2px;color:#555;display:block;overflow:hidden;line-height:40px;min-height:40px;padding:0 6px;text-align:center;text-overflow:ellipsis;white-space:nowrap}#customize-control-site_logo .current img{max-width:100%}#customize-control-site_logo button.change,#customize-control-site_logo button.new,#customize-control-site_logo button.remove{height:auto;width:48%;white-space:normal}#customize-control-site_logo .remove{float:left;margin-right:3px}#customize-control-site_logo .change,#customize-control-site_logo .new{float:right}#customize-control-site_logo .customize-control-description{display:block;clear:both;margin-bottom:10px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo-control.php b/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo-control.php
new file mode 100644
index 00000000..5e23507d
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo-control.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * Custom logo uploader control for the Customizer.
+ *
+ * @package Jetpack
+ */
+class Site_Logo_Image_Control extends WP_Customize_Control {
+ /**
+ * Constructor for our custom control.
+ *
+ * @param object $wp_customize
+ * @param string $control_id
+ * @param array $args
+ * @uses Site_Logo_Image_Control::l10n()
+ */
+ public function __construct( $wp_customize, $control_id, $args = array() ) {
+ // declare these first so they can be overridden
+ $this->l10n = array(
+ 'upload' => __( 'Add logo', 'jetpack' ),
+ 'set' => __( 'Set as logo', 'jetpack' ),
+ 'choose' => __( 'Choose logo', 'jetpack' ),
+ 'change' => __( 'Change logo', 'jetpack' ),
+ 'remove' => __( 'Remove logo', 'jetpack' ),
+ 'placeholder' => __( 'No logo set', 'jetpack' ),
+ );
+
+ parent::__construct( $wp_customize, $control_id, $args );
+ }
+
+ /**
+ * This will be critical for our JS constructor.
+ */
+ public $type = 'site_logo';
+
+ /**
+ * Allows overriding of global labels by a specific control.
+ */
+ public $l10n = array();
+
+ /**
+ * The type of files that should be allowed by the media modal.
+ */
+ public $mime_type = 'image';
+
+ /**
+ * Enqueue our media manager resources, scripts, and styles.
+ *
+ * @uses wp_enqueue_media()
+ * @uses wp_enqueue_style()
+ * @uses wp_enqueue_script()
+ * @uses plugins_url()
+ */
+ public function enqueue() {
+ // Enqueues all needed media resources.
+ wp_enqueue_media();
+
+ // Enqueue our control script and styles.
+ wp_enqueue_style( 'site-logo-control', plugins_url( '../css/site-logo-control.css', __FILE__ ) );
+ wp_enqueue_script( 'site-logo-control', plugins_url( '../js/site-logo-control.js', __FILE__ ), array( 'media-views', 'customize-controls', 'underscore' ), '', true );
+ }
+
+ /**
+ * Check if we have an active site logo.
+ *
+ * @uses get_option()
+ * @return boolean
+ */
+ public function has_site_logo() {
+ $logo = get_option( 'site_logo' );
+
+ if ( empty( $logo['url'] ) ) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Display our custom control in the Customizer.
+ *
+ * @uses Site_Logo_Image_Control::l10n()
+ * @uses Site_Logo_Image_Control::mime_type()
+ * @uses Site_Logo_Image_Control::label()
+ * @uses Site_Logo_Image_Control::description()
+ * @uses esc_attr()
+ * @uses esc_html()
+ */
+ public function render_content() {
+ // We do this to allow the upload control to specify certain labels
+ $l10n = json_encode( $this->l10n );
+
+ // Control title
+ printf(
+ '<span class="customize-control-title" data-l10n="%s" data-mime="%s">%s</span>',
+ esc_attr( $l10n ),
+ esc_attr( $this->mime_type ),
+ esc_html( $this->label )
+ );
+
+ // Control description
+ if ( ! empty( $this->description ) ) : ?>
+ <span class="description customize-control-description"><?php echo $this->description; ?></span>
+ <?php endif; ?>
+
+ <div class="current"></div>
+ <div class="actions"></div>
+ <?php
+ }
+}
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php b/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php
new file mode 100644
index 00000000..75fe80b1
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php
@@ -0,0 +1,377 @@
+<?php
+/**
+ * Our Site Logo class for managing a theme-agnostic logo through the Customizer.
+ *
+ * @package Jetpack
+ */
+class Site_Logo {
+ /**
+ * Stores our single instance.
+ */
+ private static $instance;
+
+ /**
+ * Stores our current logo settings.
+ */
+ public $logo;
+
+ /**
+ * Return our instance, creating a new one if necessary.
+ *
+ * @uses Site_Logo::$instance
+ * @return object Site_Logo
+ */
+ public static function instance() {
+ if ( ! isset( self::$instance ) ) {
+ self::$instance = new Site_Logo();
+ self::$instance->register_hooks();
+ }
+
+ return self::$instance;
+ }
+
+ /**
+ * Get our current logo settings stored in options.
+ *
+ * @uses get_option()
+ */
+ private function __construct() {
+ $this->logo = get_option( 'site_logo', null );
+ }
+
+ /**
+ * Register our actions and filters.
+ *
+ * @uses Site_Logo::head_text_styles()
+ * @uses Site_Logo::customize_register()
+ * @uses Site_Logo::preview_enqueue()
+ * @uses Site_Logo::body_classes()
+ * @uses Site_Logo::media_manager_image_sizes()
+ * @uses add_action
+ * @uses add_filter
+ */
+ public function register_hooks() {
+ // This would only happen if a theme supports BOTH site-logo and custom-logo for some reason
+ if ( current_theme_supports( 'custom-logo' ) ) {
+ return;
+ }
+
+ add_action( 'wp_head', array( $this, 'head_text_styles' ) );
+ add_action( 'customize_register', array( $this, 'customize_register' ) );
+ add_action( 'customize_preview_init', array( $this, 'preview_enqueue' ) );
+ add_action( 'delete_attachment', array( $this, 'reset_on_attachment_delete' ) );
+ add_filter( 'body_class', array( $this, 'body_classes' ) );
+ add_filter( 'image_size_names_choose', array( $this, 'media_manager_image_sizes' ) );
+ add_filter( 'display_media_states', array( $this, 'add_media_state' ) );
+ }
+
+ /**
+ * Add our logo uploader to the Customizer.
+ *
+ * @param object $wp_customize Customizer object.
+ * @uses current_theme_supports()
+ * @uses current_theme_supports()
+ * @uses WP_Customize_Manager::add_setting()
+ * @uses WP_Customize_Manager::add_control()
+ * @uses Site_Logo::sanitize_checkbox()
+ */
+ public function customize_register( $wp_customize ) {
+ // Include our custom control.
+ require dirname( __FILE__ ) . '/class-site-logo-control.php';
+
+ // Add a setting to hide header text if the theme isn't supporting the feature itself
+ if ( ! current_theme_supports( 'custom-header' ) ) {
+ $wp_customize->add_setting(
+ 'site_logo_header_text',
+ array(
+ 'default' => 1,
+ 'sanitize_callback' => array( $this, 'sanitize_checkbox' ),
+ 'transport' => 'postMessage',
+ )
+ );
+
+ $wp_customize->add_control(
+ new WP_Customize_Control(
+ $wp_customize,
+ 'site_logo_header_text',
+ array(
+ 'label' => __( 'Display Header Text', 'jetpack' ),
+ 'section' => 'title_tagline',
+ 'settings' => 'site_logo_header_text',
+ 'type' => 'checkbox',
+ )
+ )
+ );
+ }
+
+ // Add the setting for our logo value.
+ $wp_customize->add_setting(
+ 'site_logo',
+ array(
+ 'capability' => 'manage_options',
+ 'default' => array(
+ 'id' => 0,
+ 'sizes' => array(),
+ 'url' => false,
+ ),
+ 'sanitize_callback' => array( $this, 'sanitize_logo_setting' ),
+ 'transport' => 'postMessage',
+ 'type' => 'option',
+ )
+ );
+
+ // Add our image uploader.
+ $wp_customize->add_control(
+ new Site_Logo_Image_Control(
+ $wp_customize,
+ 'site_logo',
+ array(
+ 'label' => __( 'Logo', 'jetpack' ),
+ 'section' => 'title_tagline',
+ 'settings' => 'site_logo',
+ )
+ )
+ );
+ }
+
+ /**
+ * Enqueue scripts for the Customizer live preview.
+ *
+ * @uses wp_enqueue_script()
+ * @uses plugins_url()
+ * @uses current_theme_supports()
+ * @uses Site_Logo::header_text_classes()
+ * @uses wp_localize_script()
+ */
+ public function preview_enqueue() {
+ wp_enqueue_script( 'site-logo-preview', plugins_url( '../js/site-logo.js', __FILE__ ), array( 'media-views' ), '', true );
+
+ // Don't bother passing in header text classes if the theme supports custom headers.
+ if ( ! current_theme_supports( 'custom-header' ) ) {
+ $classes = jetpack_sanitize_header_text_classes( $this->header_text_classes() );
+ wp_enqueue_script( 'site-logo-header-text', plugins_url( '../js/site-logo-header-text.js', __FILE__ ), array( 'media-views' ), '', true );
+ wp_localize_script( 'site-logo-header-text', 'site_logo_header_classes', $classes );
+ }
+ }
+
+ /**
+ * Get header text classes. If not defined in add_theme_support(), defaults from Underscores will be used.
+ *
+ * @uses get_theme_support
+ * @return string String of classes to hide
+ */
+ public function header_text_classes() {
+ $args = get_theme_support( 'site-logo' );
+
+ if ( isset( $args[0]['header-text'] ) ) {
+ // Use any classes defined in add_theme_support().
+ $classes = $args[0]['header-text'];
+ } else {
+ // Otherwise, use these defaults, which will work with any Underscores-based theme.
+ $classes = array(
+ 'site-title',
+ 'site-description',
+ );
+ }
+
+ // If we've got an array, reduce them to a string for output
+ if ( is_array( $classes ) ) {
+ $classes = (string) '.' . implode( ', .', $classes );
+ } else {
+ $classes = (string) '.' . $classes;
+ }
+
+ return $classes;
+ }
+
+ /**
+ * Hide header text on front-end if necessary.
+ *
+ * @uses current_theme_supports()
+ * @uses get_theme_mod()
+ * @uses Site_Logo::header_text_classes()
+ * @uses esc_html()
+ */
+ public function head_text_styles() {
+ // Bail if our theme supports custom headers.
+ if ( current_theme_supports( 'custom-header' ) ) {
+ return;
+ }
+
+ // Is Display Header Text unchecked? If so, we need to hide our header text.
+ if ( ! get_theme_mod( 'site_logo_header_text', 1 ) ) {
+ $classes = $this->header_text_classes();
+ ?>
+ <!-- Site Logo: hide header text -->
+ <style type="text/css">
+ <?php echo jetpack_sanitize_header_text_classes( $classes ); ?> {
+ position: absolute;
+ clip: rect(1px, 1px, 1px, 1px);
+ }
+ </style>
+ <?php
+ }
+ }
+
+ /**
+ * Determine image size to use for the logo.
+ *
+ * @uses get_theme_support()
+ * @return string Size specified in add_theme_support declaration, or 'thumbnail' default
+ */
+ public function theme_size() {
+ $args = get_theme_support( 'site-logo' );
+ $valid_sizes = get_intermediate_image_sizes();
+
+ // Add 'full' to the list of accepted values.
+ $valid_sizes[] = 'full';
+
+ // If the size declared in add_theme_support is valid, use it; otherwise, just go with 'thumbnail'.
+ $size = ( isset( $args[0]['size'] ) && in_array( $args[0]['size'], $valid_sizes ) ) ? $args[0]['size'] : 'thumbnail';
+
+ return $size;
+ }
+
+ /**
+ * Make custom image sizes available to the media manager.
+ *
+ * @param array $sizes
+ * @uses get_intermediate_image_sizes()
+ * @return array All default and registered custom image sizes.
+ */
+ public function media_manager_image_sizes( $sizes ) {
+ // Get an array of all registered image sizes.
+ $intermediate = get_intermediate_image_sizes();
+
+ // Have we got anything fun to work with?
+ if ( is_array( $intermediate ) && ! empty( $intermediate ) ) {
+ foreach ( $intermediate as $key => $size ) {
+ // If the size isn't already in the $sizes array, add it.
+ if ( ! array_key_exists( $size, $sizes ) ) {
+ $sizes[ $size ] = $size;
+ }
+ }
+ }
+
+ return $sizes;
+ }
+
+ /**
+ * Add site logos to media states in the Media Manager.
+ *
+ * @return array The current attachment's media states.
+ */
+ public function add_media_state( $media_states ) {
+ // Only bother testing if we have a site logo set.
+ if ( $this->has_site_logo() ) {
+ global $post;
+
+ // If our attachment ID and the site logo ID match, this image is the site logo.
+ if ( $post->ID == $this->logo['id'] ) {
+ $media_states[] = __( 'Site Logo', 'jetpack' );
+ }
+ }
+
+ return $media_states;
+ }
+
+ /**
+ * Reset the site logo if the current logo is deleted in the media manager.
+ *
+ * @param int $site_id
+ * @uses Site_Logo::remove_site_logo()
+ */
+ public function reset_on_attachment_delete( $post_id ) {
+ if ( $this->logo['id'] == $post_id ) {
+ $this->remove_site_logo();
+ }
+ }
+
+ /**
+ * Determine if a site logo is assigned or not.
+ *
+ * @uses Site_Logo::$logo
+ * @return boolean True if there is an active logo, false otherwise
+ */
+ public function has_site_logo() {
+ return ( isset( $this->logo['id'] ) && 0 !== $this->logo['id'] ) ? true : false;
+ }
+
+ /**
+ * Reset the site logo option to zero (empty).
+ *
+ * @uses update_option()
+ */
+ public function remove_site_logo() {
+ update_option(
+ 'site_logo',
+ array(
+ 'id' => (int) 0,
+ 'sizes' => array(),
+ 'url' => '',
+ )
+ );
+ }
+
+ /**
+ * Adds custom classes to the array of body classes.
+ *
+ * @uses Site_Logo::has_site_logo()
+ * @return array Array of <body> classes
+ */
+ public function body_classes( $classes ) {
+ // Add a class if a Site Logo is active
+ if ( $this->has_site_logo() ) {
+ $classes[] = 'has-site-logo';
+ }
+
+ return $classes;
+ }
+
+ /**
+ * Sanitize our header text Customizer setting.
+ *
+ * @param $input
+ * @return mixed 1 if checked, empty string if not checked.
+ */
+ public function sanitize_checkbox( $input ) {
+ return ( 1 == $input ) ? 1 : '';
+ }
+
+ /**
+ * Validate and sanitize a new site logo setting.
+ *
+ * @param $input
+ * @return mixed 1 if checked, empty string if not checked.
+ */
+ public function sanitize_logo_setting( $input ) {
+ $input['id'] = absint( $input['id'] );
+ $input['url'] = esc_url_raw( $input['url'] );
+
+ // If the new setting doesn't point to a valid attachment, just reset the whole thing.
+ if ( false == wp_get_attachment_image_src( $input['id'] ) ) {
+ $input = array(
+ 'id' => (int) 0,
+ 'sizes' => array(),
+ 'url' => '',
+ );
+ }
+
+ return $input;
+ }
+}
+
+/**
+ * Allow themes and plugins to access Site_Logo methods and properties.
+ *
+ * @uses Site_Logo::instance()
+ * @return object Site_Logo
+ */
+function site_logo() {
+ return Site_Logo::instance();
+}
+
+/**
+ * One site logo, please.
+ */
+site_logo();
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/inc/compat.php b/plugins/jetpack/modules/theme-tools/site-logo/inc/compat.php
new file mode 100644
index 00000000..d1098536
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/inc/compat.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Functions for maintaining backwards compatibility with unprefixed template tags from the original Site Logo plugin.
+ * These should never be used in themes; instead, use the template tags in functions.php.
+ * See: https://github.com/Automattic/jetpack/pull/956
+ *
+ * @package Jetpack
+ */
+
+if ( ! function_exists( 'the_site_logo' ) ) :
+ /**
+ * Unprefixed, backwards-compatible function for outputting the site logo.
+ *
+ * @uses jetpack_the_site_logo()
+ */
+ function the_site_logo() {
+ jetpack_the_site_logo();
+ }
+endif;
+
+if ( ! function_exists( 'has_site_logo' ) ) :
+ /**
+ * Unprefixed, backwards-compatible function for determining if a site logo has been set.
+ *
+ * @uses jetpack_has_site_logo()
+ * @return bool True if a site logo is set, false otherwise.
+ */
+ function has_site_logo() {
+ return jetpack_has_site_logo();
+ }
+endif;
+
+if ( ! function_exists( 'get_site_logo' ) ) :
+ /**
+ * Unprefixed, backwards-compatible function for getting either the site logo's image URL or its ID.
+ *
+ * @param string $show Return the site logo URL or ID.
+ * @uses jetpack_get_site_logo()
+ * @return string Site logo ID or URL (the default).
+ */
+ function get_site_logo( $show = 'url' ) {
+ return jetpack_get_site_logo( $show );
+ }
+endif;
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php b/plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php
new file mode 100644
index 00000000..3b27b32f
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php
@@ -0,0 +1,176 @@
+<?php
+/**
+ * Functions and template tags for using site logos.
+ *
+ * @package Jetpack
+ */
+
+/**
+ * Retrieve the site logo URL or ID (URL by default). Pass in the string 'id' for ID.
+ *
+ * @uses get_option()
+ * @uses esc_url_raw()
+ * @uses set_url_scheme()
+ * @return mixed The URL or ID of our site logo, false if not set
+ * @since 1.0
+ */
+function jetpack_get_site_logo( $show = 'url' ) {
+ $logo = site_logo()->logo;
+
+ // Return false if no logo is set
+ if ( ! isset( $logo['id'] ) || 0 == $logo['id'] ) {
+ return false;
+ }
+
+ // Return the ID if specified, otherwise return the URL by default
+ if ( 'id' == $show ) {
+ return $logo['id'];
+ } else {
+ return esc_url_raw( set_url_scheme( $logo['url'] ) );
+ }
+}
+
+/**
+ * Retrieve an array of the dimensions of the Site Logo.
+ *
+ * @uses Site_Logo::theme_size()
+ * @uses get_option( 'thumbnail_size_w' )
+ * @uses get_option( 'thumbnail_size_h' )
+ * @uses global $_wp_additional_image_sizes;
+ *
+ * @since 3.6.0
+ *
+ * @return array $dimensions {
+ * An array of dimensions of the Site Logo.
+ *
+ * @type string $width Width of the logo in pixels.
+ * @type string $height Height of the logo in pixels.
+ * }
+ */
+function jetpack_get_site_logo_dimensions() {
+ // Get the image size to use with the logo.
+ $size = site_logo()->theme_size();
+
+ // If the size is the default `thumbnail`, get its dimensions. Otherwise, get them from $_wp_additional_image_sizes
+ if ( empty( $size ) ) {
+ return false;
+ } elseif ( 'thumbnail' == $size ) {
+ $dimensions = array(
+ 'width' => get_option( 'thumbnail_size_w' ),
+ 'height' => get_option( 'thumbnail_size_h' ),
+ );
+ } else {
+ global $_wp_additional_image_sizes;
+
+ if ( ! isset( $_wp_additional_image_sizes[ $size ] ) ) {
+ return false;
+ }
+
+ $dimensions = array(
+ 'width' => $_wp_additional_image_sizes[ $size ]['width'],
+ 'height' => $_wp_additional_image_sizes[ $size ]['height'],
+ );
+ }
+
+ return $dimensions;
+}
+
+/**
+ * Determine if a site logo is assigned or not.
+ *
+ * @uses get_option
+ * @return boolean True if there is an active logo, false otherwise
+ */
+function jetpack_has_site_logo() {
+ return site_logo()->has_site_logo();
+}
+
+/**
+ * Output an <img> tag of the site logo, at the size specified
+ * in the theme's add_theme_support() declaration.
+ *
+ * @uses Site_Logo::logo
+ * @uses Site_Logo::theme_size()
+ * @uses jetpack_has_site_logo()
+ * @uses jetpack_is_customize_preview()
+ * @uses esc_url()
+ * @uses home_url()
+ * @uses esc_attr()
+ * @uses wp_get_attachment_image()
+ * @uses apply_filters()
+ * @since 1.0
+ */
+function jetpack_the_site_logo() {
+ $logo = site_logo()->logo;
+ $logo_id = get_theme_mod( 'custom_logo' ); // Check for WP 4.5 Site Logo
+ $logo_id = $logo_id ? $logo_id : $logo['id']; // Use WP Core logo if present, otherwise use Jetpack's.
+ $size = site_logo()->theme_size();
+ $html = '';
+
+ // If no logo is set, but we're in the Customizer, leave a placeholder (needed for the live preview).
+ if ( ! jetpack_has_site_logo() ) {
+ if ( jetpack_is_customize_preview() ) {
+ $html = sprintf(
+ '<a href="%1$s" class="site-logo-link" style="display:none;"><img class="site-logo" data-size="%2$s" /></a>',
+ esc_url( home_url( '/' ) ),
+ esc_attr( $size )
+ );
+ }
+ }
+
+ // We have a logo. Logo is go.
+ else {
+ $html = sprintf(
+ '<a href="%1$s" class="site-logo-link" rel="home" itemprop="url">%2$s</a>',
+ esc_url( home_url( '/' ) ),
+ wp_get_attachment_image(
+ $logo_id,
+ $size,
+ false,
+ array(
+ 'class' => "site-logo attachment-$size",
+ 'data-size' => $size,
+ 'itemprop' => 'logo',
+ )
+ )
+ );
+ }
+
+ /**
+ * Filter the Site Logo output.
+ *
+ * @module theme-tools
+ *
+ * @since 3.2.0
+ *
+ * @param string $html Site Logo HTML output.
+ * @param array $logo Array of Site Logo details.
+ * @param string $size Size specified in add_theme_support declaration, or 'thumbnail' default.
+ */
+ echo apply_filters( 'jetpack_the_site_logo', $html, $logo, $size );
+}
+
+/**
+ * Whether the site is being previewed in the Customizer.
+ * Duplicate of core function until 4.0 is released.
+ *
+ * @global WP_Customize_Manager $wp_customize Customizer instance.
+ * @return bool True if the site is being previewed in the Customizer, false otherwise.
+ */
+function jetpack_is_customize_preview() {
+ global $wp_customize;
+
+ return is_a( $wp_customize, 'WP_Customize_Manager' ) && $wp_customize->is_preview();
+}
+
+/**
+ * Sanitize the string of classes used for header text.
+ * Limit to A-Z,a-z,0-9,(space),(comma),_,-
+ *
+ * @return string Sanitized string of CSS classes.
+ */
+function jetpack_sanitize_header_text_classes( $classes ) {
+ $classes = preg_replace( '/[^A-Za-z0-9\,\ ._-]/', '', $classes );
+
+ return $classes;
+}
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js
new file mode 100644
index 00000000..c4cce6c2
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js
@@ -0,0 +1,160 @@
+/**
+ * JS for handling the Site Logo Customizer control.
+ */
+( function( wp, $ ) {
+ // nice shortcut
+ var api = wp.customize;
+ /**
+ * The Customizer looks for wp.customizer.controlConstructor[type] functions
+ * where type == the type member of a WP_Customize_Control
+ */
+ api.controlConstructor.site_logo = api.Control.extend( {
+ /**
+ * This method is called when the control is ready to run.
+ * Do all of your setup and event binding here.
+ */
+ ready: function() {
+ // this.container is a jQuery object of your container
+
+ // grab the bits of data from the title for specifying this control
+ var data = this.container.find( '.customize-control-title' ).data();
+
+ // Use specific l10n data for this control where available
+ this.l10n = data.l10n;
+ // Grab mime type
+ this.mime = data.mime;
+
+ // Set up image container and button elements. Cache for re-use.
+ this.$imgContainer = $( '#customize-control-site_logo .current' );
+ this.$btnContainer = $( '#customize-control-site_logo .actions' );
+ this.$img = $( '<img class="site-logo-thumbnail" />' ).prependTo( this.$imgContainer );
+ this.$placeholder = $( '<span>' + this.l10n.placeholder + '</span>' ).prependTo(
+ this.$imgContainer
+ );
+ this.$btnAdd = $(
+ '<button type="button" class="button new">' + this.l10n.upload + '</button>'
+ ).prependTo( this.$btnContainer );
+ this.$btnChange = $(
+ '<button type="button" class="button change">' + this.l10n.change + '</button>'
+ ).prependTo( this.$btnContainer );
+ this.$btnRemove = $(
+ '<button type="button" class="button remove">' + this.l10n.remove + '</button>'
+ ).prependTo( this.$btnContainer );
+
+ // handy shortcut so we don't have to us _.bind every time we add a callback
+ _.bindAll( this, 'removeImg', 'upload', 'render', 'pick' );
+
+ this.$btnAdd.on( 'click', this.upload );
+ this.$btnChange.on( 'click', this.upload );
+ this.$btnRemove.on( 'click', this.removeImg );
+
+ // Call render method whenever setting is changed.
+ this.setting.bind( 'change', this.render );
+ // Do initial rendering.
+ this.render();
+ },
+ /**
+ * Remember that _.bind was used to maintain `this` as the control
+ * object rather than the usual jQuery way of binding to the DOM element.
+ */
+ upload: function( event ) {
+ event.preventDefault();
+
+ if ( ! this.frame ) {
+ this.initFrame();
+ }
+
+ this.frame.open();
+ },
+ /**
+ * Set the media frame so that it can be reused and accessed when needed.
+ */
+ initFrame: function() {
+ this.frame = wp.media( {
+ // The title of the media modal
+ title: this.l10n.choose,
+ // restrict to specified mime type
+ library: {
+ type: this.mime,
+ },
+ // Customize the submit button.
+ button: {
+ // Set the text of the button.
+ text: this.l10n.set,
+ },
+ // Just one, thanks.
+ multiple: false,
+ } );
+
+ // When an image is selected, run a callback.
+ this.frame.on( 'select', this.pick );
+ },
+ /**
+ * Fired when an image is selected in the media modal. Gets the selected
+ * image information, and sets it within the control.
+ */
+ pick: function() {
+ // get the attachment from the modal frame
+ var attachment = this.frame
+ .state()
+ .get( 'selection' )
+ .single();
+ if ( 'image' === attachment.get( 'type' ) ) {
+ // set the setting - the callback will take care of rendering
+ this.setting( this.reduceMembers( attachment.toJSON() ) );
+ }
+ },
+ /**
+ * Reduces the attachment object to just the few desired members.
+ * @param {object} attachment An attachment object provided by the
+ * medial modal.
+ * @return {object} A reduced media object.
+ */
+ reduceMembers: function( attachment ) {
+ var desired = [ 'id', 'sizes', 'url' ],
+ output = {};
+ $.each( desired, function( i, key ) {
+ output[ key ] = attachment[ key ];
+ } );
+ return output;
+ },
+ /**
+ * Called on init and whenever a setting is changed. Shows the thumbnail
+ * when there is one or the upload button when there isn't.
+ */
+ render: function() {
+ var value = this.setting();
+
+ if ( value && value.url ) {
+ this.$placeholder.hide();
+ if ( ! value.sizes || ! value.sizes.medium ) {
+ this.$img.attr( 'src', value.url );
+ } else {
+ this.$img.attr( 'src', value.sizes.medium.url );
+ }
+ this.$img.show();
+ this.$btnRemove.show();
+ this.$btnChange.show();
+ this.$btnAdd.hide();
+ } else {
+ this.$img.hide();
+ this.$placeholder.show();
+ this.$btnRemove.hide();
+ this.$btnChange.hide();
+ this.$btnAdd.show();
+ }
+ },
+ /**
+ * Called when the "Remove Image" link is clicked. Sets thes setting back
+ * to its default state.
+ * @param {object} event jQuery Event object from click event
+ */
+ removeImg: function( event ) {
+ event.preventDefault();
+ this.setting( {
+ url: '',
+ id: 0,
+ } );
+ },
+ } );
+} )( this.wp, jQuery );
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.min.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.min.js
new file mode 100644
index 00000000..171d98e8
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.min.js
@@ -0,0 +1 @@
+(function(a,c){var b=a.customize;b.controlConstructor.site_logo=b.Control.extend({ready:function(){var d=this.container.find(".customize-control-title").data();this.l10n=d.l10n;this.mime=d.mime;this.$imgContainer=c("#customize-control-site_logo .current");this.$btnContainer=c("#customize-control-site_logo .actions");this.$img=c('<img class="site-logo-thumbnail" />').prependTo(this.$imgContainer);this.$placeholder=c("<span>"+this.l10n.placeholder+"</span>").prependTo(this.$imgContainer);this.$btnAdd=c('<button type="button" class="button new">'+this.l10n.upload+"</button>").prependTo(this.$btnContainer);this.$btnChange=c('<button type="button" class="button change">'+this.l10n.change+"</button>").prependTo(this.$btnContainer);this.$btnRemove=c('<button type="button" class="button remove">'+this.l10n.remove+"</button>").prependTo(this.$btnContainer);_.bindAll(this,"removeImg","upload","render","pick");this.$btnAdd.on("click",this.upload);this.$btnChange.on("click",this.upload);this.$btnRemove.on("click",this.removeImg);this.setting.bind("change",this.render);this.render()},upload:function(d){d.preventDefault();if(!this.frame){this.initFrame()}this.frame.open()},initFrame:function(){this.frame=a.media({title:this.l10n.choose,library:{type:this.mime},button:{text:this.l10n.set},multiple:false});this.frame.on("select",this.pick)},pick:function(){var d=this.frame.state().get("selection").first().toJSON();d=this.reduceMembers(d);this.setting(d)},reduceMembers:function(f){var e=["id","sizes","url"],d={};c.each(e,function(h,g){d[g]=f[g]});return d},render:function(){var d=this.setting();if(d&&d.url){this.$placeholder.hide();if(!d.sizes||!d.sizes.medium){this.$img.attr("src",d.url)}else{this.$img.attr("src",d.sizes.medium.url)}this.$img.show();this.$btnRemove.show();this.$btnChange.show();this.$btnAdd.hide()}else{this.$img.hide();this.$placeholder.show();this.$btnRemove.hide();this.$btnChange.hide();this.$btnAdd.show()}},removeImg:function(d){d.preventDefault();this.setting({url:"",id:0})}})})(this.wp,jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.js
new file mode 100644
index 00000000..82673a7e
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.js
@@ -0,0 +1,24 @@
+/* global site_logo_header_classes */
+/**
+ * JS for handling the "Display Header Text" setting's realtime preview.
+ */
+( function( $ ) {
+ var api = wp.customize,
+ $classes = site_logo_header_classes;
+
+ api( 'site_logo_header_text', function( value ) {
+ value.bind( function( to ) {
+ if ( true === to ) {
+ $( $classes ).css( {
+ position: 'static',
+ clip: 'auto',
+ } );
+ } else {
+ $( $classes ).css( {
+ position: 'absolute',
+ clip: 'rect(1px 1px 1px 1px)',
+ } );
+ }
+ } );
+ } );
+} )( jQuery );
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.min.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.min.js
new file mode 100644
index 00000000..39c56ec0
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.min.js
@@ -0,0 +1 @@
+!function(t){var i=wp.customize,o=site_logo_header_classes;i("site_logo_header_text",function(i){i.bind(function(i){t(o).css(!0===i?{position:"static",clip:"auto"}:{position:"absolute",clip:"rect(1px 1px 1px 1px)"})})})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.js
new file mode 100644
index 00000000..6c959c0c
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.js
@@ -0,0 +1,46 @@
+/**
+ * JS for handling the Site Logo real-time display in the Customizer preview frame.
+ */
+( function( $ ) {
+ var api = wp.customize,
+ $body,
+ $anchor,
+ $logo,
+ size;
+
+ function cacheSelectors() {
+ $body = $( 'body' );
+ $anchor = $( '.site-logo-link' );
+ $logo = $( '.site-logo' );
+ size = $logo.attr( 'data-size' );
+ }
+
+ api( 'site_logo', function( value ) {
+ value.bind( function( newVal ) {
+ // grab selectors the first time through
+ if ( ! $body ) {
+ cacheSelectors();
+ }
+
+ // Let's update our preview logo.
+ if ( newVal && newVal.url ) {
+ // If the source was smaller than the size required by the theme, give the biggest we've got.
+ if ( ! newVal.sizes[ size ] ) {
+ size = 'full';
+ }
+
+ $logo.attr( {
+ height: newVal.sizes[ size ].height,
+ width: newVal.sizes[ size ].width,
+ src: newVal.sizes[ size ].url,
+ } );
+
+ $anchor.show();
+ $body.addClass( 'has-site-logo' );
+ } else {
+ $anchor.hide();
+ $body.removeClass( 'has-site-logo' );
+ }
+ } );
+ } );
+} )( jQuery );
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.min.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.min.js
new file mode 100644
index 00000000..a6fe41eb
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.min.js
@@ -0,0 +1 @@
+(function(d){var e=wp.customize,c,f,g,a;e("site_logo",function(e){e.bind(function(b){c||(c=d("body"),f=d(".site-logo-link"),g=d(".site-logo"),a=g.attr("data-size"));b&&b.url?(b.sizes[a]||(a="full"),g.attr({height:b.sizes[a].height,width:b.sizes[a].width,src:b.sizes[a].url}),f.show(),c.addClass("has-site-logo")):(f.hide(),c.removeClass("has-site-logo"))})})})(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/social-links.php b/plugins/jetpack/modules/theme-tools/social-links.php
new file mode 100644
index 00000000..44b2cbc8
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/social-links.php
@@ -0,0 +1,252 @@
+<?php
+/**
+ * Social Links.
+ *
+ * This feature will only be activated for themes that declare their support.
+ * This can be done by adding code similar to the following during the
+ * 'after_setup_theme' action:
+ *
+ * add_theme_support( 'social-links', array(
+ * 'facebook', 'twitter', 'linkedin', 'tumblr', 'google_plus',
+ * ) );
+ */
+
+function jetpack_theme_supports_social_links() {
+ if ( current_theme_supports( 'social-links' ) && function_exists( 'publicize_init' ) ) {
+ new Social_Links();
+ }
+}
+add_action( 'init', 'jetpack_theme_supports_social_links', 30 );
+
+if ( ! class_exists( 'Social_Links' ) ) {
+
+ class Social_Links {
+
+ /**
+ * The links the user set for each service.
+ *
+ * @var array
+ */
+ private $links;
+
+ /**
+ * A Publicize object.
+ *
+ * @var Publicize
+ */
+ private $publicize;
+
+ /**
+ * An array with all services that are supported by both Publicize and the
+ * currently active theme.
+ *
+ * @var array
+ */
+ private $services = array();
+
+ /**
+ * An array of the services the theme supports
+ *
+ * @var array
+ */
+ private $theme_supported_services = array();
+
+ /**
+ * Constructor.
+ */
+ public function __construct() {
+ $theme_support = get_theme_support( 'social-links' );
+
+ /*
+ An array of named arguments must be passed as the second parameter
+ * of add_theme_support().
+ */
+ if ( empty( $theme_support[0] ) ) {
+ return;
+ }
+
+ $this->theme_supported_services = $theme_support[0];
+ $this->links = Jetpack_Options::get_option( 'social_links', array() );
+
+ $this->admin_setup();
+
+ add_filter( 'jetpack_has_social_links', array( $this, 'has_social_links' ) );
+ add_filter( 'jetpack_get_social_links', array( $this, 'get_social_links' ) );
+
+ foreach ( $theme_support[0] as $service ) {
+ add_filter( "pre_option_jetpack-$service", array( $this, 'get_social_link_filter' ) ); // get_option( 'jetpack-service' );
+ add_filter( "theme_mod_jetpack-$service", array( $this, 'get_social_link_filter' ) ); // get_theme_mod( 'jetpack-service' );
+ }
+ }
+
+ public function admin_setup() {
+ if ( ! current_user_can( 'manage_options' ) ) {
+ return;
+ }
+
+ if ( ! is_admin() && ! $this->is_customize_preview() ) {
+ return;
+ }
+
+ $this->publicize = publicize_init();
+ $publicize_services = $this->publicize->get_services( 'connected' );
+ $this->services = array_intersect( array_keys( $publicize_services ), $this->theme_supported_services );
+
+ add_action( 'publicize_connected', array( $this, 'check_links' ), 20 );
+ add_action( 'publicize_disconnected', array( $this, 'check_links' ), 20 );
+ add_action( 'customize_register', array( $this, 'customize_register' ) );
+ add_filter( 'sanitize_option_jetpack_options', array( $this, 'sanitize_link' ) );
+ }
+
+ /**
+ * Compares the currently saved links with the connected services and removes
+ * links from services that are no longer connected.
+ *
+ * @return void
+ */
+ public function check_links() {
+ $active_links = array_intersect_key( $this->links, array_flip( $this->services ) );
+
+ if ( $active_links !== $this->links ) {
+ $this->links = $active_links;
+ Jetpack_Options::update_option( 'social_links', $active_links );
+ }
+ }
+
+ /**
+ * Add social link dropdown to the Customizer.
+ *
+ * @param WP_Customize_Manager $wp_customize Theme Customizer object.
+ */
+ public function customize_register( $wp_customize ) {
+ $wp_customize->add_section(
+ 'jetpack_social_links',
+ array(
+ 'title' => esc_html__( 'Connect', 'jetpack' ),
+ 'priority' => 35,
+ )
+ );
+
+ foreach ( array_keys( $this->publicize->get_services( 'all' ) ) as $service ) {
+ $choices = $this->get_customize_select( $service );
+
+ if ( empty( $choices ) ) {
+ continue;
+ }
+
+ $wp_customize->add_setting(
+ "jetpack_options[social_links][$service]",
+ array(
+ 'type' => 'option',
+ 'default' => '',
+ )
+ );
+
+ $wp_customize->add_control(
+ "jetpack-$service",
+ array(
+ 'label' => $this->publicize->get_service_label( $service ),
+ 'section' => 'jetpack_social_links',
+ 'settings' => "jetpack_options[social_links][$service]",
+ 'type' => 'select',
+ 'choices' => $choices,
+ )
+ );
+ }
+ }
+
+ /**
+ * Sanitizes social links.
+ *
+ * @param array $option The incoming values to be sanitized.
+ * @returns array
+ */
+ public function sanitize_link( $option ) {
+ foreach ( $this->services as $service ) {
+ if ( ! empty( $option['social_links'][ $service ] ) ) {
+ $option['social_links'][ $service ] = esc_url_raw( $option['social_links'][ $service ] );
+ } else {
+ unset( $option['social_links'][ $service ] );
+ }
+ }
+
+ return $option;
+ }
+
+ /**
+ * Returns whether there are any social links set.
+ *
+ * @returns bool
+ */
+ public function has_social_links() {
+ return ! empty( $this->links );
+ }
+
+ /**
+ * Return available social links.
+ *
+ * @returns array
+ */
+ public function get_social_links() {
+ return $this->links;
+ }
+
+ /**
+ * Short-circuits get_option and get_theme_mod calls.
+ *
+ * @param string $link The incoming value to be replaced.
+ * @returns string $link The social link that we've got.
+ */
+ public function get_social_link_filter( $link ) {
+ if ( preg_match( '/_jetpack-(.+)$/i', current_filter(), $matches ) && ! empty( $this->links[ $matches[1] ] ) ) {
+ return $this->links[ $matches[1] ];
+ }
+
+ return $link;
+ }
+
+ /**
+ * Puts together an array of choices for a specific service.
+ *
+ * @param string $service The social service.
+ * @return array An associative array with profile links and display names.
+ */
+ private function get_customize_select( $service ) {
+ $choices = array(
+ '' => __( '&mdash; Select &mdash;', 'jetpack' ),
+ );
+
+ if ( isset( $this->links[ $service ] ) ) {
+ $choices[ $this->links[ $service ] ] = $this->links[ $service ];
+ }
+
+ $connected_services = $this->publicize->get_services( 'connected' );
+ if ( isset( $connected_services[ $service ] ) ) {
+ foreach ( $connected_services[ $service ] as $c ) {
+ $profile_link = $this->publicize->get_profile_link( $service, $c );
+
+ if ( false === $profile_link ) {
+ continue;
+ }
+
+ $choices[ $profile_link ] = $this->publicize->get_display_name( $service, $c );
+ }
+ }
+
+ if ( 1 === count( $choices ) ) {
+ return array();
+ }
+
+ return $choices;
+ }
+
+ /**
+ * Back-compat function for versions prior to 4.0.
+ */
+ private function is_customize_preview() {
+ global $wp_customize;
+ return is_a( $wp_customize, 'WP_Customize_Manager' ) && $wp_customize->is_preview();
+ }
+ }
+
+} // end if ( ! class_exists( 'Social_Links' )
diff --git a/plugins/jetpack/modules/theme-tools/social-menu.php b/plugins/jetpack/modules/theme-tools/social-menu.php
new file mode 100644
index 00000000..16c66b6a
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/social-menu.php
@@ -0,0 +1,113 @@
+<?php
+/**
+ * Social Menu.
+ *
+ * This feature will only be activated for themes that declare their support.
+ * This can be done by adding code similar to the following during the
+ * 'after_setup_theme' action:
+ *
+ * add_theme_support( 'jetpack-social-menu' );
+ */
+
+/**
+ * Activate the Social Menu plugin.
+ *
+ * @uses current_theme_supports()
+ */
+function jetpack_social_menu_init() {
+ // Only load our code if our theme declares support
+ if ( ! current_theme_supports( 'jetpack-social-menu' ) ) {
+ return;
+ }
+
+ /*
+ * Social Menu description.
+ *
+ * Rename the social menu description.
+ *
+ * @module theme-tools
+ *
+ * @since 3.9.0
+ *
+ * @param string $social_menu_description Social Menu description
+ */
+ $social_menu_description = apply_filters( 'jetpack_social_menu_description', __( 'Social Menu', 'jetpack' ) );
+
+ // Register a new menu location
+ register_nav_menus(
+ array(
+ 'jetpack-social-menu' => esc_html( $social_menu_description ),
+ )
+ );
+
+ // Enqueue CSS
+ add_action( 'wp_enqueue_scripts', 'jetpack_social_menu_style' );
+
+ // Load SVG icons related functions and filters
+ if ( 'svg' === jetpack_social_menu_get_type() ) {
+ require dirname( __FILE__ ) . '/social-menu/icon-functions.php';
+ }
+}
+add_action( 'after_setup_theme', 'jetpack_social_menu_init', 99 );
+
+/**
+ * Return the type of menu the theme is using.
+ *
+ * @uses get_theme_support()
+ * @return null|string $menu_type
+ */
+function jetpack_social_menu_get_type() {
+ $options = get_theme_support( 'jetpack-social-menu' );
+
+ if ( empty( $options ) ) {
+ $menu_type = null;
+ } else {
+ $menu_type = ( in_array( $options[0], array( 'genericons', 'svg' ) ) ) ? $options[0] : 'genericons';
+ }
+
+ return $menu_type;
+}
+
+/**
+ * Function to enqueue the CSS.
+ */
+function jetpack_social_menu_style() {
+ $menu_type = jetpack_social_menu_get_type();
+
+ if ( ! $menu_type ) {
+ return;
+ }
+
+ $deps = ( 'genericons' === $menu_type ) ? array( 'genericons' ) : null;
+
+ if ( has_nav_menu( 'jetpack-social-menu' ) ) {
+ wp_enqueue_style( 'jetpack-social-menu', plugins_url( 'social-menu/social-menu.css', __FILE__ ), $deps, '1.0' );
+ }
+}
+
+/**
+ * Create the function for the menu.
+ */
+function jetpack_social_menu() {
+ if ( has_nav_menu( 'jetpack-social-menu' ) ) :
+ $menu_type = jetpack_social_menu_get_type();
+ $link_after = '</span>';
+
+ if ( 'svg' === $menu_type ) {
+ $link_after .= jetpack_social_menu_get_svg( array( 'icon' => 'chain' ) );
+ } ?>
+ <nav class="jetpack-social-navigation jetpack-social-navigation-<?php echo esc_attr( $menu_type ); ?>" role="navigation" aria-label="<?php esc_html_e( 'Social Links Menu', 'jetpack' ); ?>">
+ <?php
+ wp_nav_menu(
+ array(
+ 'theme_location' => 'jetpack-social-menu',
+ 'link_before' => '<span class="screen-reader-text">',
+ 'link_after' => $link_after,
+ 'depth' => 1,
+ )
+ );
+ ?>
+ </nav><!-- .jetpack-social-navigation -->
+ <?php
+ endif;
+}
diff --git a/plugins/jetpack/modules/theme-tools/social-menu/icon-functions.php b/plugins/jetpack/modules/theme-tools/social-menu/icon-functions.php
new file mode 100644
index 00000000..9a8a1dd6
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/social-menu/icon-functions.php
@@ -0,0 +1,177 @@
+<?php
+/**
+ * SVG icons related functions and filters
+ *
+ * @package Jetpack
+ */
+
+if ( ! function_exists( 'jetpack_social_menu_include_svg_icons' ) ) :
+ /**
+ * Add SVG definitions to the footer.
+ */
+ function jetpack_social_menu_include_svg_icons() {
+ // Define SVG sprite file.
+ $svg_icons = dirname( __FILE__ ) . '/social-menu.svg';
+
+ // If it exists, include it.
+ if ( file_exists( $svg_icons ) ) {
+ require_once $svg_icons;
+ }
+ }
+ add_action( 'wp_footer', 'jetpack_social_menu_include_svg_icons', 9999 );
+endif;
+
+if ( ! function_exists( 'jetpack_social_menu_get_svg' ) ) :
+ /**
+ * Return SVG markup.
+ *
+ * @param array $args {
+ * Parameters needed to display an SVG.
+ *
+ * @type string $icon Required SVG icon filename.
+ * }
+ * @return string SVG markup.
+ */
+ function jetpack_social_menu_get_svg( $args = array() ) {
+ // Make sure $args are an array.
+ if ( empty( $args ) ) {
+ return esc_html__( 'Please define default parameters in the form of an array.', 'jetpack' );
+ }
+
+ // Define an icon.
+ if ( false === array_key_exists( 'icon', $args ) ) {
+ return esc_html__( 'Please define an SVG icon filename.', 'jetpack' );
+ }
+
+ // Set defaults.
+ $defaults = array(
+ 'icon' => '',
+ 'fallback' => false,
+ );
+
+ // Parse args.
+ $args = wp_parse_args( $args, $defaults );
+
+ // Set aria hidden.
+ $aria_hidden = ' aria-hidden="true"';
+
+ // Begin SVG markup.
+ $svg = '<svg class="icon icon-' . esc_attr( $args['icon'] ) . '"' . $aria_hidden . ' role="img">';
+
+ /*
+ * Display the icon.
+ *
+ * The whitespace around `<use>` is intentional - it is a work around to a keyboard navigation bug in Safari 10.
+ *
+ * See https://core.trac.wordpress.org/ticket/38387.
+ */
+ $svg .= ' <use href="#icon-' . esc_html( $args['icon'] ) . '" xlink:href="#icon-' . esc_html( $args['icon'] ) . '"></use> ';
+
+ // Add some markup to use as a fallback for browsers that do not support SVGs.
+ if ( $args['fallback'] ) {
+ $svg .= '<span class="svg-fallback icon-' . esc_attr( $args['icon'] ) . '"></span>';
+ }
+
+ $svg .= '</svg>';
+
+ return $svg;
+ }
+endif;
+
+if ( ! function_exists( 'jetpack_social_menu_nav_menu_social_icons' ) ) :
+ /**
+ * Display SVG icons in social links menu.
+ *
+ * @param string $item_output The menu item output.
+ * @param WP_Post $item Menu item object.
+ * @param int $depth Depth of the menu.
+ * @param array $args wp_nav_menu() arguments.
+ * @return string $item_output The menu item output with social icon.
+ */
+ function jetpack_social_menu_nav_menu_social_icons( $item_output, $item, $depth, $args ) {
+ // Get supported social icons.
+ $social_icons = jetpack_social_menu_social_links_icons();
+
+ // Change SVG icon inside social links menu if there is supported URL.
+ if ( 'jetpack-social-menu' === $args->theme_location ) {
+ foreach ( $social_icons as $attr => $value ) {
+ if ( false !== strpos( $item_output, $attr ) ) {
+ $item_output = str_replace( $args->link_after, '</span>' . jetpack_social_menu_get_svg( array( 'icon' => esc_attr( $value ) ) ), $item_output );
+ }
+ }
+ }
+
+ return $item_output;
+ }
+ add_filter( 'walker_nav_menu_start_el', 'jetpack_social_menu_nav_menu_social_icons', 10, 4 );
+endif;
+
+if ( ! function_exists( 'jetpack_social_menu_social_links_icons' ) ) :
+ /**
+ * Returns an array of supported social links (URL and icon name).
+ *
+ * @return array $social_links_icons
+ */
+ function jetpack_social_menu_social_links_icons() {
+ // Supported social links icons.
+ $social_links_icons = array(
+ '500px.com' => '500px',
+ 'amazon.cn' => 'amazon',
+ 'amazon.in' => 'amazon',
+ 'amazon.fr' => 'amazon',
+ 'amazon.de' => 'amazon',
+ 'amazon.it' => 'amazon',
+ 'amazon.nl' => 'amazon',
+ 'amazon.es' => 'amazon',
+ 'amazon.co' => 'amazon',
+ 'amazon.ca' => 'amazon',
+ 'amazon.com' => 'amazon',
+ 'apple.com' => 'apple',
+ 'itunes.com' => 'apple',
+ 'bandcamp.com' => 'bandcamp',
+ 'behance.net' => 'behance',
+ 'codepen.io' => 'codepen',
+ 'deviantart.com' => 'deviantart',
+ 'discord.gg' => 'discord',
+ 'discordapp.com' => 'discord',
+ 'digg.com' => 'digg',
+ 'dribbble.com' => 'dribbble',
+ 'dropbox.com' => 'dropbox',
+ 'etsy.com' => 'etsy',
+ 'facebook.com' => 'facebook',
+ '/feed/' => 'feed',
+ 'flickr.com' => 'flickr',
+ 'foursquare.com' => 'foursquare',
+ 'goodreads.com' => 'goodreads',
+ 'google.com' => 'google',
+ 'github.com' => 'github',
+ 'instagram.com' => 'instagram',
+ 'linkedin.com' => 'linkedin',
+ 'mailto:' => 'mail',
+ 'meetup.com' => 'meetup',
+ 'medium.com' => 'medium',
+ 'pinterest.' => 'pinterest',
+ 'getpocket.com' => 'pocket',
+ 'reddit.com' => 'reddit',
+ 'skype.com' => 'skype',
+ 'skype:' => 'skype',
+ 'slideshare.net' => 'slideshare',
+ 'snapchat.com' => 'snapchat',
+ 'soundcloud.com' => 'soundcloud',
+ 'spotify.com' => 'spotify',
+ 'stackoverflow.com' => 'stackoverflow',
+ 'stumbleupon.com' => 'stumbleupon',
+ 'tumblr.com' => 'tumblr',
+ 'twitch.tv' => 'twitch',
+ 'twitter.com' => 'twitter',
+ 'vimeo.com' => 'vimeo',
+ 'vk.com' => 'vk',
+ 'wordpress.org' => 'wordpress',
+ 'wordpress.com' => 'wordpress',
+ 'yelp.com' => 'yelp',
+ 'youtube.com' => 'youtube',
+ );
+
+ return $social_links_icons;
+ }
+endif;
diff --git a/plugins/jetpack/modules/theme-tools/social-menu/social-menu.css b/plugins/jetpack/modules/theme-tools/social-menu/social-menu.css
new file mode 100644
index 00000000..57a3d7c1
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/social-menu/social-menu.css
@@ -0,0 +1,197 @@
+/*--------------------------------------------------------------
+Global
+--------------------------------------------------------------*/
+.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;
+}
+
+/*--------------------------------------------------------------
+SVG
+--------------------------------------------------------------*/
+.jetpack-social-navigation-svg .icon {
+ color: inherit;
+ fill: currentColor;
+ height: 1em;
+ vertical-align: middle;
+ width: 1em;
+}
+
+/*--------------------------------------------------------------
+Genericons
+--------------------------------------------------------------*/
+.jetpack-social-navigation-genericons 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: normal;
+ height: 1em;
+ line-height: 1;
+ speak: none;
+ text-decoration: inherit;
+ vertical-align: top;
+ width: 1em;
+}
+
+/* Default */
+.jetpack-social-navigation-genericons a:before {
+ content: "\f415";
+}
+
+/* CodePen */
+.jetpack-social-navigation-genericons a[href*="codepen.io"]:before {
+ content: "\f216";
+}
+
+/* Digg */
+.jetpack-social-navigation-genericons a[href*="digg.com"]:before {
+ content: "\f221";
+}
+
+/* Dribbble */
+.jetpack-social-navigation-genericons a[href*="dribbble.com"]:before {
+ content: "\f201";
+}
+
+/* Dropbox */
+.jetpack-social-navigation-genericons a[href*="dropbox.com"]:before {
+ content: "\f225";
+}
+
+/* Email */
+.jetpack-social-navigation-genericons a[href*="mailto:"]:before {
+ content: "\f410";
+}
+
+/* Facebook */
+.jetpack-social-navigation-genericons a[href*="facebook.com"]:before {
+ content: "\f203";
+}
+
+/* Flickr */
+.jetpack-social-navigation-genericons a[href*="flickr.com"]:before {
+ content: "\f211";
+}
+
+/* Foursquare */
+.jetpack-social-navigation-genericons a[href*="foursquare.com"]:before {
+ content: "\f226";
+}
+
+/* GitHub */
+.jetpack-social-navigation-genericons a[href*="github.com"]:before {
+ content: "\f200";
+}
+
+/* Google Plus */
+.jetpack-social-navigation-genericons a[href*="plus.google.com"]:before {
+ content: "\f206";
+}
+
+/* Instagram */
+.jetpack-social-navigation-genericons a[href*="instagram.com"]:before {
+ content: "\f215";
+}
+
+/* LinkedIn */
+.jetpack-social-navigation-genericons a[href*="linkedin.com"]:before {
+ content: "\f208";
+}
+
+/* Path */
+.jetpack-social-navigation-genericons a[href*="path.com"]:before {
+ content: "\f219";
+}
+
+/* Pinterest */
+.jetpack-social-navigation-genericons a[href*="pinterest."]:before {
+ content: "\f210";
+}
+
+/* Pocket */
+.jetpack-social-navigation-genericons a[href*="getpocket.com"]:before {
+ content: "\f224";
+}
+
+/* Polldaddy */
+.jetpack-social-navigation-genericons a[href*="polldaddy.com"]:before {
+ content: "\f217";
+}
+
+/* Reddit */
+.jetpack-social-navigation-genericons a[href*="reddit.com"]:before {
+ content: "\f222";
+}
+
+/* RSS Feed */
+.jetpack-social-navigation-genericons a[href$="/feed/"]:before {
+ content: "\f413";
+}
+
+/* Skype */
+.jetpack-social-navigation-genericons a[href*="skype:"]:before {
+ content: "\f220";
+}
+
+/* Spotify */
+.jetpack-social-navigation-genericons a[href*="spotify.com"]:before {
+ content: "\f515";
+}
+
+/* StumbleUpon */
+.jetpack-social-navigation-genericons a[href*="stumbleupon.com"]:before {
+ content: "\f223";
+}
+
+/* Tumblr */
+.jetpack-social-navigation-genericons a[href*="tumblr.com"]:before {
+ content: "\f214";
+}
+
+/* Twitch */
+.jetpack-social-navigation-genericons a[href*="twitch.tv"]:before {
+ content: "\f516";
+}
+
+/* Twitter */
+.jetpack-social-navigation-genericons a[href*="twitter.com"]:before {
+ content: "\f202";
+}
+
+/* Vimeo */
+.jetpack-social-navigation-genericons a[href*="vimeo.com"]:before {
+ content: "\f212";
+}
+
+/* Vine */
+.jetpack-social-navigation-genericons a[href*="vine.co"]:before {
+ content: "\f517";
+}
+
+/* WordPress */
+.jetpack-social-navigation-genericons a[href*="wordpress.com"]:before,
+.jetpack-social-navigation-genericons a[href*="wordpress.org"]:before {
+ content: "\f205";
+}
+
+/* YouTube */
+.jetpack-social-navigation-genericons a[href*="youtube.com"]:before {
+ content: "\f213";
+}
diff --git a/plugins/jetpack/modules/theme-tools/social-menu/social-menu.svg b/plugins/jetpack/modules/theme-tools/social-menu/social-menu.svg
new file mode 100644
index 00000000..896d255f
--- /dev/null
+++ b/plugins/jetpack/modules/theme-tools/social-menu/social-menu.svg
@@ -0,0 +1,137 @@
+<svg style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<defs>
+<symbol id="icon-500px" viewBox="0 0 24 24">
+<path d="M6.94026,15.1412c.00437.01213.108.29862.168.44064a6.55008,6.55008,0,1,0,6.03191-9.09557,6.68654,6.68654,0,0,0-2.58357.51467A8.53914,8.53914,0,0,0,8.21268,8.61344L8.209,8.61725V3.22948l9.0504-.00008c.32934-.0036.32934-.46353.32934-.61466s0-.61091-.33035-.61467L7.47248,2a.43.43,0,0,0-.43131.42692v7.58355c0,.24466.30476.42131.58793.4819.553.11812.68074-.05864.81617-.2457l.018-.02481A10.52673,10.52673,0,0,1,9.32258,9.258a5.35268,5.35268,0,1,1,7.58985,7.54976,5.417,5.417,0,0,1-3.80867,1.56365,5.17483,5.17483,0,0,1-2.69822-.74478l.00342-4.61111a2.79372,2.79372,0,0,1,.71372-1.78792,2.61611,2.61611,0,0,1,1.98282-.89477,2.75683,2.75683,0,0,1,1.95525.79477,2.66867,2.66867,0,0,1,.79656,1.909,2.724,2.724,0,0,1-2.75849,2.748,4.94651,4.94651,0,0,1-.86254-.13719c-.31234-.093-.44519.34058-.48892.48349-.16811.54966.08453.65862.13687.67489a3.75751,3.75751,0,0,0,1.25234.18375,3.94634,3.94634,0,1,0-2.82444-6.742,3.67478,3.67478,0,0,0-1.13028,2.584l-.00041.02323c-.0035.11667-.00579,2.881-.00644,3.78811l-.00407-.00451a6.18521,6.18521,0,0,1-1.0851-1.86092c-.10544-.27856-.34358-.22925-.66857-.12917-.14192.04372-.57386.17677-.47833.489Zm4.65165-1.08338a.51346.51346,0,0,0,.19513.31818l.02276.022a.52945.52945,0,0,0,.3517.18416.24242.24242,0,0,0,.16577-.0611c.05473-.05082.67382-.67812.73287-.738l.69041.68819a.28978.28978,0,0,0,.21437.11032.53239.53239,0,0,0,.35708-.19486c.29792-.30419.14885-.46821.07676-.54751l-.69954-.69975.72952-.73469c.16-.17311.01874-.35708-.12218-.498-.20461-.20461-.402-.25742-.52855-.14083l-.7254.72665-.73354-.73375a.20128.20128,0,0,0-.14179-.05695.54135.54135,0,0,0-.34379.19648c-.22561.22555-.274.38149-.15656.5059l.73374.7315-.72942.73072A.26589.26589,0,0,0,11.59191,14.05782Zm1.59866-9.915A8.86081,8.86081,0,0,0,9.854,4.776a.26169.26169,0,0,0-.16938.22759.92978.92978,0,0,0,.08619.42094c.05682.14524.20779.531.50006.41955a8.40969,8.40969,0,0,1,2.91968-.55484,7.87875,7.87875,0,0,1,3.086.62286,8.61817,8.61817,0,0,1,2.30562,1.49315.2781.2781,0,0,0,.18318.07586c.15529,0,.30425-.15253.43167-.29551.21268-.23861.35873-.4369.1492-.63538a8.50425,8.50425,0,0,0-2.62312-1.694A9.0177,9.0177,0,0,0,13.19058,4.14283ZM19.50945,18.6236h0a.93171.93171,0,0,0-.36642-.25406.26589.26589,0,0,0-.27613.06613l-.06943.06929A7.90606,7.90606,0,0,1,7.60639,18.505a7.57284,7.57284,0,0,1-1.696-2.51537,8.58715,8.58715,0,0,1-.5147-1.77754l-.00871-.04864c-.04939-.25873-.28755-.27684-.62981-.22448-.14234.02178-.5755.088-.53426.39969l.001.00712a9.08807,9.08807,0,0,0,15.406,4.99094c.00193-.00192.04753-.04718.0725-.07436C19.79425,19.16234,19.87422,18.98728,19.50945,18.6236Z"/>
+</symbol>
+<symbol id="icon-amazon" viewBox="0 0 24 24">
+<path d="M13.582,8.182C11.934,8.367,9.78,8.49,8.238,9.166c-1.781,0.769-3.03,2.337-3.03,4.644 c0,2.953,1.86,4.429,4.253,4.429c2.02,0,3.125-0.477,4.685-2.065c0.516,0.747,0.685,1.109,1.629,1.894 c0.212,0.114,0.483,0.103,0.672-0.066l0.006,0.006c0.567-0.505,1.599-1.401,2.18-1.888c0.231-0.188,0.19-0.496,0.009-0.754 c-0.52-0.718-1.072-1.303-1.072-2.634V8.305c0-1.876,0.133-3.599-1.249-4.891C15.23,2.369,13.422,2,12.04,2 C9.336,2,6.318,3.01,5.686,6.351C5.618,6.706,5.877,6.893,6.109,6.945l2.754,0.298C9.121,7.23,9.308,6.977,9.357,6.72 c0.236-1.151,1.2-1.706,2.284-1.706c0.584,0,1.249,0.215,1.595,0.738c0.398,0.584,0.346,1.384,0.346,2.061V8.182z M13.049,14.088 c-0.451,0.8-1.169,1.291-1.967,1.291c-1.09,0-1.728-0.83-1.728-2.061c0-2.42,2.171-2.86,4.227-2.86v0.615 C13.582,12.181,13.608,13.104,13.049,14.088z M20.683,19.339C18.329,21.076,14.917,22,11.979,22c-4.118,0-7.826-1.522-10.632-4.057 c-0.22-0.199-0.024-0.471,0.241-0.317c3.027,1.762,6.771,2.823,10.639,2.823c2.608,0,5.476-0.541,8.115-1.66 C20.739,18.62,21.072,19.051,20.683,19.339z M21.336,21.043c-0.194,0.163-0.379,0.076-0.293-0.139 c0.284-0.71,0.92-2.298,0.619-2.684c-0.301-0.386-1.99-0.183-2.749-0.092c-0.23,0.027-0.266-0.173-0.059-0.319 c1.348-0.946,3.555-0.673,3.811-0.356C22.925,17.773,22.599,19.986,21.336,21.043z"/>
+</symbol>
+<symbol id="icon-apple" viewBox="0 0 24 24">
+<path d="M20.07,17.586a10.874,10.874,0,0,1-1.075,1.933,9.822,9.822,0,0,1-1.385,1.674,2.687,2.687,0,0,1-1.78.784,4.462,4.462,0,0,1-1.644-.393,4.718,4.718,0,0,0-1.77-.391,4.878,4.878,0,0,0-1.82.391A4.9,4.9,0,0,1,9.021,22a2.53,2.53,0,0,1-1.82-.8A10.314,10.314,0,0,1,5.752,19.46,11.987,11.987,0,0,1,4.22,16.417a11.143,11.143,0,0,1-.643-3.627,6.623,6.623,0,0,1,.87-3.465A5.1,5.1,0,0,1,6.268,7.483a4.9,4.9,0,0,1,2.463-.695,5.8,5.8,0,0,1,1.9.443,6.123,6.123,0,0,0,1.511.444,9.04,9.04,0,0,0,1.675-.523,5.537,5.537,0,0,1,2.277-.4,4.835,4.835,0,0,1,3.788,1.994,4.213,4.213,0,0,0-2.235,3.827,4.222,4.222,0,0,0,1.386,3.181,4.556,4.556,0,0,0,1.385.909q-.167.483-.353.927ZM16.211,2.4a4.267,4.267,0,0,1-1.094,2.8,3.726,3.726,0,0,1-3.1,1.528A3.114,3.114,0,0,1,12,6.347a4.384,4.384,0,0,1,1.16-2.828,4.467,4.467,0,0,1,1.414-1.061A4.215,4.215,0,0,1,16.19,2a3.633,3.633,0,0,1,.021.4Z"/>
+</symbol>
+<symbol id="icon-bandcamp" viewBox="0 0 24 24">
+<path d="M15.27 17.289 3 17.289 8.73 6.711 21 6.711 15.27 17.289"/>
+</symbol>
+<symbol id="icon-behance" viewBox="0 0 24 24">
+<path d="M7.799,5.698c0.589,0,1.12,0.051,1.606,0.156c0.482,0.102,0.894,0.273,1.241,0.507c0.344,0.235,0.612,0.546,0.804,0.938 c0.188,0.387,0.281,0.871,0.281,1.443c0,0.619-0.141,1.137-0.421,1.551c-0.284,0.413-0.7,0.751-1.255,1.014 c0.756,0.218,1.317,0.601,1.689,1.146c0.374,0.549,0.557,1.205,0.557,1.975c0,0.623-0.12,1.161-0.359,1.612 c-0.241,0.457-0.569,0.828-0.973,1.114c-0.408,0.288-0.876,0.5-1.399,0.637C9.052,17.931,8.514,18,7.963,18H2V5.698H7.799 M7.449,10.668c0.481,0,0.878-0.114,1.192-0.345c0.311-0.228,0.463-0.603,0.463-1.119c0-0.286-0.051-0.523-0.152-0.707 C8.848,8.315,8.711,8.171,8.536,8.07C8.362,7.966,8.166,7.894,7.94,7.854c-0.224-0.044-0.457-0.06-0.697-0.06H4.709v2.874H7.449z M7.6,15.905c0.267,0,0.521-0.024,0.759-0.077c0.243-0.053,0.457-0.137,0.637-0.261c0.182-0.12,0.332-0.283,0.441-0.491 C9.547,14.87,9.6,14.602,9.6,14.278c0-0.633-0.18-1.084-0.533-1.357c-0.356-0.27-0.83-0.404-1.413-0.404H4.709v3.388L7.6,15.905z M16.162,15.864c0.367,0.358,0.897,0.538,1.583,0.538c0.493,0,0.92-0.125,1.277-0.374c0.354-0.248,0.571-0.514,0.654-0.79h2.155 c-0.347,1.072-0.872,1.838-1.589,2.299C19.534,18,18.67,18.23,17.662,18.23c-0.701,0-1.332-0.113-1.899-0.337 c-0.567-0.227-1.041-0.544-1.439-0.958c-0.389-0.415-0.689-0.907-0.904-1.484c-0.213-0.574-0.32-1.21-0.32-1.899 c0-0.666,0.11-1.288,0.329-1.863c0.222-0.577,0.529-1.075,0.933-1.492c0.406-0.42,0.885-0.751,1.444-0.994 c0.558-0.241,1.175-0.363,1.857-0.363c0.754,0,1.414,0.145,1.98,0.44c0.563,0.291,1.026,0.686,1.389,1.181 c0.363,0.493,0.622,1.057,0.783,1.69c0.16,0.632,0.217,1.292,0.171,1.983h-6.428C15.557,14.84,15.795,15.506,16.162,15.864 M18.973,11.184c-0.291-0.321-0.783-0.496-1.384-0.496c-0.39,0-0.714,0.066-0.973,0.2c-0.254,0.132-0.461,0.297-0.621,0.491 c-0.157,0.197-0.265,0.405-0.328,0.628c-0.063,0.217-0.101,0.413-0.111,0.587h3.98C19.478,11.969,19.265,11.509,18.973,11.184z M15.057,7.738h4.985V6.524h-4.985L15.057,7.738z"/>
+</symbol>
+<symbol id="icon-chain" viewBox="0 0 24 24">
+<path d="M19.647,16.706a1.134,1.134,0,0,0-.343-.833l-2.549-2.549a1.134,1.134,0,0,0-.833-.343,1.168,1.168,0,0,0-.883.392l.233.226q.2.189.264.264a2.922,2.922,0,0,1,.184.233.986.986,0,0,1,.159.312,1.242,1.242,0,0,1,.043.337,1.172,1.172,0,0,1-1.176,1.176,1.237,1.237,0,0,1-.337-.043,1,1,0,0,1-.312-.159,2.76,2.76,0,0,1-.233-.184q-.073-.068-.264-.264l-.226-.233a1.19,1.19,0,0,0-.4.895,1.134,1.134,0,0,0,.343.833L15.837,19.3a1.13,1.13,0,0,0,.833.331,1.18,1.18,0,0,0,.833-.318l1.8-1.789a1.12,1.12,0,0,0,.343-.821Zm-8.615-8.64a1.134,1.134,0,0,0-.343-.833L8.163,4.7a1.134,1.134,0,0,0-.833-.343,1.184,1.184,0,0,0-.833.331L4.7,6.473a1.12,1.12,0,0,0-.343.821,1.134,1.134,0,0,0,.343.833l2.549,2.549a1.13,1.13,0,0,0,.833.331,1.184,1.184,0,0,0,.883-.38L8.728,10.4q-.2-.189-.264-.264A2.922,2.922,0,0,1,8.28,9.9a.986.986,0,0,1-.159-.312,1.242,1.242,0,0,1-.043-.337A1.172,1.172,0,0,1,9.254,8.079a1.237,1.237,0,0,1,.337.043,1,1,0,0,1,.312.159,2.761,2.761,0,0,1,.233.184q.073.068.264.264l.226.233a1.19,1.19,0,0,0,.4-.895ZM22,16.706a3.343,3.343,0,0,1-1.042,2.488l-1.8,1.789a3.536,3.536,0,0,1-4.988-.025l-2.525-2.537a3.384,3.384,0,0,1-1.017-2.488,3.448,3.448,0,0,1,1.078-2.561l-1.078-1.078a3.434,3.434,0,0,1-2.549,1.078,3.4,3.4,0,0,1-2.5-1.029L3.029,9.794A3.4,3.4,0,0,1,2,7.294,3.343,3.343,0,0,1,3.042,4.806l1.8-1.789A3.384,3.384,0,0,1,7.331,2a3.357,3.357,0,0,1,2.5,1.042l2.525,2.537a3.384,3.384,0,0,1,1.017,2.488,3.448,3.448,0,0,1-1.078,2.561l1.078,1.078a3.551,3.551,0,0,1,5.049-.049l2.549,2.549A3.4,3.4,0,0,1,22,16.706Z"/>
+</symbol>
+<symbol id="icon-codepen" viewBox="0 0 24 24">
+<path d="M22.016,8.84c-0.002-0.013-0.005-0.025-0.007-0.037c-0.005-0.025-0.008-0.048-0.015-0.072 c-0.003-0.015-0.01-0.028-0.013-0.042c-0.008-0.02-0.015-0.04-0.023-0.062c-0.007-0.015-0.013-0.028-0.02-0.042 c-0.008-0.02-0.018-0.037-0.03-0.057c-0.007-0.013-0.017-0.027-0.025-0.038c-0.012-0.018-0.023-0.035-0.035-0.052 c-0.01-0.013-0.02-0.025-0.03-0.037c-0.015-0.017-0.028-0.032-0.043-0.045c-0.01-0.012-0.022-0.023-0.035-0.035 c-0.015-0.015-0.032-0.028-0.048-0.04c-0.012-0.01-0.025-0.02-0.037-0.03c-0.005-0.003-0.01-0.008-0.015-0.012l-9.161-6.096 c-0.289-0.192-0.666-0.192-0.955,0L2.359,8.237C2.354,8.24,2.349,8.245,2.344,8.249L2.306,8.277 c-0.017,0.013-0.033,0.027-0.048,0.04C2.246,8.331,2.234,8.342,2.222,8.352c-0.015,0.015-0.028,0.03-0.042,0.047 c-0.012,0.013-0.022,0.023-0.03,0.037C2.139,8.453,2.125,8.471,2.115,8.488C2.107,8.501,2.099,8.514,2.09,8.526 C2.079,8.548,2.069,8.565,2.06,8.585C2.054,8.6,2.047,8.613,2.04,8.626C2.032,8.648,2.025,8.67,2.019,8.69 c-0.005,0.013-0.01,0.027-0.013,0.042C1.999,8.755,1.995,8.778,1.99,8.803C1.989,8.817,1.985,8.828,1.984,8.84 C1.978,8.879,1.975,8.915,1.975,8.954v6.093c0,0.037,0.003,0.075,0.008,0.112c0.002,0.012,0.005,0.025,0.007,0.038 c0.005,0.023,0.008,0.047,0.015,0.072c0.003,0.015,0.008,0.028,0.013,0.04c0.007,0.022,0.013,0.042,0.022,0.063 c0.007,0.015,0.013,0.028,0.02,0.04c0.008,0.02,0.018,0.038,0.03,0.058c0.007,0.013,0.015,0.027,0.025,0.038 c0.012,0.018,0.023,0.035,0.035,0.052c0.01,0.013,0.02,0.025,0.03,0.037c0.013,0.015,0.028,0.032,0.042,0.045 c0.012,0.012,0.023,0.023,0.035,0.035c0.015,0.013,0.032,0.028,0.048,0.04l0.038,0.03c0.005,0.003,0.01,0.007,0.013,0.01 l9.163,6.095C11.668,21.953,11.833,22,12,22c0.167,0,0.332-0.047,0.478-0.144l9.163-6.095l0.015-0.01 c0.013-0.01,0.027-0.02,0.037-0.03c0.018-0.013,0.035-0.028,0.048-0.04c0.013-0.012,0.025-0.023,0.035-0.035 c0.017-0.015,0.03-0.032,0.043-0.045c0.01-0.013,0.02-0.025,0.03-0.037c0.013-0.018,0.025-0.035,0.035-0.052 c0.008-0.013,0.018-0.027,0.025-0.038c0.012-0.02,0.022-0.038,0.03-0.058c0.007-0.013,0.013-0.027,0.02-0.04 c0.008-0.022,0.015-0.042,0.023-0.063c0.003-0.013,0.01-0.027,0.013-0.04c0.007-0.025,0.01-0.048,0.015-0.072 c0.002-0.013,0.005-0.027,0.007-0.037c0.003-0.042,0.007-0.079,0.007-0.117V8.954C22.025,8.915,22.022,8.879,22.016,8.84z M12.862,4.464l6.751,4.49l-3.016,2.013l-3.735-2.492V4.464z M11.138,4.464v4.009l-3.735,2.494L4.389,8.954L11.138,4.464z M3.699,10.562L5.853,12l-2.155,1.438V10.562z M11.138,19.536l-6.749-4.491l3.015-2.011l3.735,2.492V19.536z M12,14.035L8.953,12 L12,9.966L15.047,12L12,14.035z M12.862,19.536v-4.009l3.735-2.492l3.016,2.011L12.862,19.536z M20.303,13.438L18.147,12 l2.156-1.438L20.303,13.438z"/>
+</symbol>
+<symbol id="icon-deviantart" viewBox="0 0 24 24">
+<path d="M 18.19 5.636 18.19 2 18.188 2 14.553 2 14.19 2.366 12.474 5.636 11.935 6 5.81 6 5.81 10.994 9.177 10.994 9.477 11.357 5.81 18.363 5.81 22 5.811 22 9.447 22 9.81 21.634 11.526 18.364 12.065 18 18.19 18 18.19 13.006 14.823 13.006 14.523 12.641 18.19 5.636z"/>
+</symbol>
+<symbol id="icon-digg" viewBox="0 0 24 24">
+<path d="M4.5,5.4h2.2V16H1V8.5h3.5V5.4L4.5,5.4z M4.5,14.2v-4H3.2v4H4.5z M7.6,8.5V16h2.2V8.5C9.8,8.5,7.6,8.5,7.6,8.5z M7.6,5.4 v2.2h2.2V5.4C9.8,5.4,7.6,5.4,7.6,5.4z M10.7,8.5h5.7v10.1h-5.7v-1.8h3.5V16h-3.5C10.7,16,10.7,8.5,10.7,8.5z M14.2,14.2v-4h-1.3v4 H14.2z M17.3,8.5H23v10.1h-5.7v-1.8h3.5V16h-3.5C17.3,16,17.3,8.5,17.3,8.5z M20.8,14.2v-4h-1.3v4H20.8z"/>
+</symbol>
+<symbol id="icon-discord" viewBox="0 0 24 24">
+<path d="M10.227 9.957c-.559 0-1 .48-1 1.063 0 .585.453 1.066 1 1.066.558 0 1-.48 1-1.066.007-.582-.442-1.063-1-1.063zm3.574 0c-.559 0-.996.48-.996 1.063 0 .585.449 1.066.996 1.066.558 0 1-.48 1-1.066 0-.582-.442-1.063-1-1.063zm0 0 M18.563 1.918H5.438c-1.11 0-2.008.879-2.008 1.973v12.957c0 1.093.898 1.972 2.007 1.972h11.11l-.52-1.773 1.254 1.14 1.184 1.075 2.105 1.82V3.891c0-1.094-.898-1.973-2.008-1.973zM14.78 14.434s-.351-.414-.644-.778c1.281-.355 1.773-1.14 1.773-1.14a5.745 5.745 0 0 1-1.129.566c-.488.2-.96.336-1.418.41a7.07 7.07 0 0 1-2.539-.008 8.133 8.133 0 0 1-1.441-.414 6.219 6.219 0 0 1-.715-.324c-.027-.02-.059-.027-.086-.047a.113.113 0 0 1-.039-.031c-.176-.094-.273-.16-.273-.16s.468.765 1.71 1.129c-.293.363-.656.797-.656.797-2.164-.067-2.984-1.457-2.984-1.457 0-3.086 1.41-5.586 1.41-5.586 1.41-1.036 2.75-1.008 2.75-1.008l.098.113c-1.762.5-2.575 1.258-2.575 1.258s.215-.117.579-.277c1.046-.454 1.878-.579 2.222-.606.059-.008.11-.02.168-.02a8.728 8.728 0 0 1 1.977-.019c.933.106 1.93.375 2.949.922 0 0-.773-.719-2.438-1.219l.137-.152s1.34-.028 2.75 1.008c0 0 1.414 2.5 1.414 5.586 0 0-.836 1.39-3 1.457zm0 0"/>
+</symbol>
+<symbol id="icon-dribbble" viewBox="0 0 24 24">
+<path d="M12,22C6.486,22,2,17.514,2,12S6.486,2,12,2c5.514,0,10,4.486,10,10S17.514,22,12,22z M20.434,13.369 c-0.292-0.092-2.644-0.794-5.32-0.365c1.117,3.07,1.572,5.57,1.659,6.09C18.689,17.798,20.053,15.745,20.434,13.369z M15.336,19.876c-0.127-0.749-0.623-3.361-1.822-6.477c-0.019,0.006-0.038,0.013-0.056,0.019c-4.818,1.679-6.547,5.02-6.701,5.334 c1.448,1.129,3.268,1.803,5.243,1.803C13.183,20.555,14.311,20.313,15.336,19.876z M5.654,17.724 c0.193-0.331,2.538-4.213,6.943-5.637c0.111-0.036,0.224-0.07,0.337-0.102c-0.214-0.485-0.448-0.971-0.692-1.45 c-4.266,1.277-8.405,1.223-8.778,1.216c-0.003,0.087-0.004,0.174-0.004,0.261C3.458,14.207,4.29,16.21,5.654,17.724z M3.639,10.264 c0.382,0.005,3.901,0.02,7.897-1.041c-1.415-2.516-2.942-4.631-3.167-4.94C5.979,5.41,4.193,7.613,3.639,10.264z M9.998,3.709 c0.236,0.316,1.787,2.429,3.187,5c3.037-1.138,4.323-2.867,4.477-3.085C16.154,4.286,14.17,3.471,12,3.471 C11.311,3.471,10.641,3.554,9.998,3.709z M18.612,6.612C18.432,6.855,17,8.69,13.842,9.979c0.199,0.407,0.389,0.821,0.567,1.237 c0.063,0.148,0.124,0.295,0.184,0.441c2.842-0.357,5.666,0.215,5.948,0.275C20.522,9.916,19.801,8.065,18.612,6.612z"/>
+</symbol>
+<symbol id="icon-dropbox" viewBox="0 0 24 24">
+<path d="M12,6.134L6.069,9.797L2,6.54l5.883-3.843L12,6.134z M2,13.054l5.883,3.843L12,13.459L6.069,9.797L2,13.054z M12,13.459 l4.116,3.439L22,13.054l-4.069-3.257L12,13.459z M22,6.54l-5.884-3.843L12,6.134l5.931,3.663L22,6.54z M12.011,14.2l-4.129,3.426 l-1.767-1.153v1.291l5.896,3.539l5.897-3.539v-1.291l-1.769,1.153L12.011,14.2z"/>
+</symbol>
+<symbol id="icon-etsy" viewBox="0 0 24 24">
+<path d="M9.16033,4.038c0-.27174.02717-.43478.48913-.43478h6.22283c1.087,0,1.68478.92391,2.11957,2.663l.35326,1.38587h1.05978C19.59511,3.712,19.75815,2,19.75815,2s-2.663.29891-4.23913.29891h-7.962L3.29076,2.163v1.1413L4.731,3.57609c1.00543.19022,1.25.40761,1.33152,1.33152,0,0,.08152,2.71739.08152,7.20109s-.08152,7.17391-.08152,7.17391c0,.81522-.32609,1.11413-1.33152,1.30435l-1.44022.27174V22l4.2663-.13587h7.11957c1.60326,0,5.32609.13587,5.32609.13587.08152-.97826.625-5.40761.70652-5.89674H19.7038L18.644,18.52174c-.84239,1.90217-2.06522,2.038-3.42391,2.038H11.1712c-1.3587,0-2.01087-.54348-2.01087-1.712V12.65217s3.0163,0,3.99457.08152c.76087.05435,1.22283.27174,1.46739,1.33152l.32609,1.413h1.16848l-.08152-3.55978.163-3.587H15.02989l-.38043,1.57609c-.24457,1.03261-.40761,1.22283-1.46739,1.33152-1.38587.13587-4.02174.1087-4.02174.1087Z"/>
+</symbol>
+<symbol id="icon-facebook" viewBox="0 0 24 24">
+<path d="M20.007,3H3.993C3.445,3,3,3.445,3,3.993v16.013C3,20.555,3.445,21,3.993,21h8.621v-6.971h-2.346v-2.717h2.346V9.31 c0-2.325,1.42-3.591,3.494-3.591c0.993,0,1.847,0.074,2.096,0.107v2.43l-1.438,0.001c-1.128,0-1.346,0.536-1.346,1.323v1.734h2.69 l-0.35,2.717h-2.34V21h4.587C20.555,21,21,20.555,21,20.007V3.993C21,3.445,20.555,3,20.007,3z"/>
+</symbol>
+<symbol id="icon-feed" viewBox="0 0 24 24">
+<path d="M2,8.667V12c5.515,0,10,4.485,10,10h3.333C15.333,14.637,9.363,8.667,2,8.667z M2,2v3.333 c9.19,0,16.667,7.477,16.667,16.667H22C22,10.955,13.045,2,2,2z M4.5,17C3.118,17,2,18.12,2,19.5S3.118,22,4.5,22S7,20.88,7,19.5 S5.882,17,4.5,17z"/>
+</symbol>
+<symbol id="icon-flickr" viewBox="0 0 24 24">
+<path d="M6.5,7c-2.75,0-5,2.25-5,5s2.25,5,5,5s5-2.25,5-5S9.25,7,6.5,7z M17.5,7c-2.75,0-5,2.25-5,5s2.25,5,5,5s5-2.25,5-5 S20.25,7,17.5,7z"/>
+</symbol>
+<symbol id="icon-foursquare" viewBox="0 0 24 24">
+<path d="M17.573,2c0,0-9.197,0-10.668,0S5,3.107,5,3.805s0,16.948,0,16.948c0,0.785,0.422,1.077,0.66,1.172 c0.238,0.097,0.892,0.177,1.285-0.275c0,0,5.035-5.843,5.122-5.93c0.132-0.132,0.132-0.132,0.262-0.132h3.26 c1.368,0,1.588-0.977,1.732-1.552c0.078-0.318,0.692-3.428,1.225-6.122l0.675-3.368C19.56,2.893,19.14,2,17.573,2z M16.495,7.22 c-0.053,0.252-0.372,0.518-0.665,0.518c-0.293,0-4.157,0-4.157,0c-0.467,0-0.802,0.318-0.802,0.787v0.508 c0,0.467,0.337,0.798,0.805,0.798c0,0,3.197,0,3.528,0s0.655,0.362,0.583,0.715c-0.072,0.353-0.407,2.102-0.448,2.295 c-0.04,0.193-0.262,0.523-0.655,0.523c-0.33,0-2.88,0-2.88,0c-0.523,0-0.683,0.068-1.033,0.503 c-0.35,0.437-3.505,4.223-3.505,4.223c-0.032,0.035-0.063,0.027-0.063-0.015V4.852c0-0.298,0.26-0.648,0.648-0.648 c0,0,8.228,0,8.562,0c0.315,0,0.61,0.297,0.528,0.683L16.495,7.22z"/>
+</symbol>
+<symbol id="icon-goodreads" viewBox="0 0 24 24">
+<path d="M17.3,17.5c-0.2,0.8-0.5,1.4-1,1.9c-0.4,0.5-1,0.9-1.7,1.2C13.9,20.9,13.1,21,12,21c-0.6,0-1.3-0.1-1.9-0.2 c-0.6-0.1-1.1-0.4-1.6-0.7c-0.5-0.3-0.9-0.7-1.2-1.2c-0.3-0.5-0.5-1.1-0.5-1.7h1.5c0.1,0.5,0.2,0.9,0.5,1.2 c0.2,0.3,0.5,0.6,0.9,0.8c0.3,0.2,0.7,0.3,1.1,0.4c0.4,0.1,0.8,0.1,1.2,0.1c1.4,0,2.5-0.4,3.1-1.2c0.6-0.8,1-2,1-3.5v-1.7h0 c-0.4,0.8-0.9,1.4-1.6,1.9c-0.7,0.5-1.5,0.7-2.4,0.7c-1,0-1.9-0.2-2.6-0.5C8.7,15,8.1,14.5,7.7,14c-0.5-0.6-0.8-1.3-1-2.1 c-0.2-0.8-0.3-1.6-0.3-2.5c0-0.9,0.1-1.7,0.4-2.5c0.3-0.8,0.6-1.5,1.1-2c0.5-0.6,1.1-1,1.8-1.4C10.3,3.2,11.1,3,12,3 c0.5,0,0.9,0.1,1.3,0.2c0.4,0.1,0.8,0.3,1.1,0.5c0.3,0.2,0.6,0.5,0.9,0.8c0.3,0.3,0.5,0.6,0.6,1h0V3.4h1.5V15 C17.6,15.9,17.5,16.7,17.3,17.5z M13.8,14.1c0.5-0.3,0.9-0.7,1.3-1.1c0.3-0.5,0.6-1,0.8-1.6c0.2-0.6,0.3-1.2,0.3-1.9 c0-0.6-0.1-1.2-0.2-1.9c-0.1-0.6-0.4-1.2-0.7-1.7c-0.3-0.5-0.7-0.9-1.3-1.2c-0.5-0.3-1.1-0.5-1.9-0.5s-1.4,0.2-1.9,0.5 c-0.5,0.3-1,0.7-1.3,1.2C8.5,6.4,8.3,7,8.1,7.6C8,8.2,7.9,8.9,7.9,9.5c0,0.6,0.1,1.3,0.2,1.9C8.3,12,8.6,12.5,8.9,13 c0.3,0.5,0.8,0.8,1.3,1.1c0.5,0.3,1.1,0.4,1.9,0.4C12.7,14.5,13.3,14.4,13.8,14.1z"/>
+</symbol>
+<symbol id="icon-google" viewBox="0 0 24 24">
+<path d="M12.02,10.18v3.72v0.01h5.51c-0.26,1.57-1.67,4.22-5.5,4.22c-3.31,0-6.01-2.75-6.01-6.12s2.7-6.12,6.01-6.12 c1.87,0,3.13,0.8,3.85,1.48l2.84-2.76C16.99,2.99,14.73,2,12.03,2c-5.52,0-10,4.48-10,10s4.48,10,10,10c5.77,0,9.6-4.06,9.6-9.77 c0-0.83-0.11-1.42-0.25-2.05H12.02z"/>
+</symbol>
+<symbol id="icon-github" viewBox="0 0 24 24">
+<path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833
+c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"/>
+</symbol>
+<symbol id="icon-instagram" viewBox="0 0 24 24">
+<path d="M12,4.622c2.403,0,2.688,0.009,3.637,0.052c0.877,0.04,1.354,0.187,1.671,0.31c0.42,0.163,0.72,0.358,1.035,0.673 c0.315,0.315,0.51,0.615,0.673,1.035c0.123,0.317,0.27,0.794,0.31,1.671c0.043,0.949,0.052,1.234,0.052,3.637 s-0.009,2.688-0.052,3.637c-0.04,0.877-0.187,1.354-0.31,1.671c-0.163,0.42-0.358,0.72-0.673,1.035 c-0.315,0.315-0.615,0.51-1.035,0.673c-0.317,0.123-0.794,0.27-1.671,0.31c-0.949,0.043-1.233,0.052-3.637,0.052 s-2.688-0.009-3.637-0.052c-0.877-0.04-1.354-0.187-1.671-0.31c-0.42-0.163-0.72-0.358-1.035-0.673 c-0.315-0.315-0.51-0.615-0.673-1.035c-0.123-0.317-0.27-0.794-0.31-1.671C4.631,14.688,4.622,14.403,4.622,12 s0.009-2.688,0.052-3.637c0.04-0.877,0.187-1.354,0.31-1.671c0.163-0.42,0.358-0.72,0.673-1.035 c0.315-0.315,0.615-0.51,1.035-0.673c0.317-0.123,0.794-0.27,1.671-0.31C9.312,4.631,9.597,4.622,12,4.622 M12,3 C9.556,3,9.249,3.01,8.289,3.054C7.331,3.098,6.677,3.25,6.105,3.472C5.513,3.702,5.011,4.01,4.511,4.511 c-0.5,0.5-0.808,1.002-1.038,1.594C3.25,6.677,3.098,7.331,3.054,8.289C3.01,9.249,3,9.556,3,12c0,2.444,0.01,2.751,0.054,3.711 c0.044,0.958,0.196,1.612,0.418,2.185c0.23,0.592,0.538,1.094,1.038,1.594c0.5,0.5,1.002,0.808,1.594,1.038 c0.572,0.222,1.227,0.375,2.185,0.418C9.249,20.99,9.556,21,12,21s2.751-0.01,3.711-0.054c0.958-0.044,1.612-0.196,2.185-0.418 c0.592-0.23,1.094-0.538,1.594-1.038c0.5-0.5,0.808-1.002,1.038-1.594c0.222-0.572,0.375-1.227,0.418-2.185 C20.99,14.751,21,14.444,21,12s-0.01-2.751-0.054-3.711c-0.044-0.958-0.196-1.612-0.418-2.185c-0.23-0.592-0.538-1.094-1.038-1.594 c-0.5-0.5-1.002-0.808-1.594-1.038c-0.572-0.222-1.227-0.375-2.185-0.418C14.751,3.01,14.444,3,12,3L12,3z M12,7.378 c-2.552,0-4.622,2.069-4.622,4.622S9.448,16.622,12,16.622s4.622-2.069,4.622-4.622S14.552,7.378,12,7.378z M12,15 c-1.657,0-3-1.343-3-3s1.343-3,3-3s3,1.343,3,3S13.657,15,12,15z M16.804,6.116c-0.596,0-1.08,0.484-1.08,1.08 s0.484,1.08,1.08,1.08c0.596,0,1.08-0.484,1.08-1.08S17.401,6.116,16.804,6.116z"/>
+</symbol>
+<symbol id="icon-linkedin" viewBox="0 0 24 24">
+<path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"/>
+</symbol>
+<symbol id="icon-mail" viewBox="0 0 24 24">
+<path d="M20,4H4C2.895,4,2,4.895,2,6v12c0,1.105,0.895,2,2,2h16c1.105,0,2-0.895,2-2V6C22,4.895,21.105,4,20,4z M20,8.236l-8,4.882 L4,8.236V6h16V8.236z"/>
+</symbol>
+<symbol id="icon-meetup" viewBox="0 0 24 24">
+<path d="M19.24775,14.722a3.57032,3.57032,0,0,1-2.94457,3.52073,3.61886,3.61886,0,0,1-.64652.05634c-.07314-.0008-.10187.02846-.12507.09547A2.38881,2.38881,0,0,1,13.49453,20.094a2.33092,2.33092,0,0,1-1.827-.50716.13635.13635,0,0,0-.19878-.00408,3.191,3.191,0,0,1-2.104.60248,3.26309,3.26309,0,0,1-3.00324-2.71993,2.19076,2.19076,0,0,1-.03512-.30865c-.00156-.08579-.03413-.1189-.11608-.13493a2.86421,2.86421,0,0,1-1.23189-.56111,2.945,2.945,0,0,1-1.166-2.05749,2.97484,2.97484,0,0,1,.87524-2.50774.112.112,0,0,0,.02091-.16107,2.7213,2.7213,0,0,1-.36648-1.48A2.81256,2.81256,0,0,1,6.57673,7.58838a.35764.35764,0,0,0,.28869-.22819,4.2208,4.2208,0,0,1,6.02892-1.90111.25161.25161,0,0,0,.22023.0243,3.65608,3.65608,0,0,1,3.76031.90678A3.57244,3.57244,0,0,1,17.95918,8.626a2.97339,2.97339,0,0,1,.01829.57356.10637.10637,0,0,0,.0853.12792,1.97669,1.97669,0,0,1,1.27939,1.33733,2.00266,2.00266,0,0,1-.57112,2.12652c-.05284.05166-.04168.08328-.01173.13489A3.51189,3.51189,0,0,1,19.24775,14.722Zm-6.35959-.27836a1.6984,1.6984,0,0,0,1.14556,1.61113,3.82039,3.82039,0,0,0,1.036.17935,1.46888,1.46888,0,0,0,.73509-.12255.44082.44082,0,0,0,.26057-.44274.45312.45312,0,0,0-.29211-.43375.97191.97191,0,0,0-.20678-.063c-.21326-.03806-.42754-.0701-.63973-.11215a.54787.54787,0,0,1-.50172-.60926,2.75864,2.75864,0,0,1,.1773-.901c.1763-.535.414-1.045.64183-1.55913A12.686,12.686,0,0,0,15.85,10.47863a1.58461,1.58461,0,0,0,.04861-.87208,1.04531,1.04531,0,0,0-.85432-.83981,1.60658,1.60658,0,0,0-1.23654.16594.27593.27593,0,0,1-.36286-.03413c-.085-.0747-.16594-.15379-.24918-.23055a.98682.98682,0,0,0-1.33577-.04933,6.1468,6.1468,0,0,1-.4989.41615.47762.47762,0,0,1-.51535.03566c-.17448-.09307-.35512-.175-.53531-.25665a1.74949,1.74949,0,0,0-.56476-.2016,1.69943,1.69943,0,0,0-1.61654.91787,8.05815,8.05815,0,0,0-.32952.80126c-.45471,1.2557-.82507,2.53825-1.20838,3.81639a1.24151,1.24151,0,0,0,.51532,1.44389,1.42659,1.42659,0,0,0,1.22008.17166,1.09728,1.09728,0,0,0,.66994-.69764c.44145-1.04111.839-2.09989,1.25981-3.14926.11581-.28876.22792-.57874.35078-.86438a.44548.44548,0,0,1,.69189-.19539.50521.50521,0,0,1,.15044.43836,1.75625,1.75625,0,0,1-.14731.50453c-.27379.69219-.55265,1.38236-.82766,2.074a2.0836,2.0836,0,0,0-.14038.42876.50719.50719,0,0,0,.27082.57722.87236.87236,0,0,0,.66145.02739.99137.99137,0,0,0,.53406-.532q.61571-1.20914,1.228-2.42031.28423-.55863.57585-1.1133a.87189.87189,0,0,1,.29055-.35253.34987.34987,0,0,1,.37634-.01265.30291.30291,0,0,1,.12434.31459.56716.56716,0,0,1-.04655.1915c-.05318.12739-.10286.25669-.16183.38156-.34118.71775-.68754,1.43273-1.02568,2.152A2.00213,2.00213,0,0,0,12.88816,14.44366Zm4.78568,5.28972a.88573.88573,0,0,0-1.77139.00465.8857.8857,0,0,0,1.77139-.00465Zm-14.83838-7.296a.84329.84329,0,1,0,.00827-1.68655.8433.8433,0,0,0-.00827,1.68655Zm10.366-9.43673a.83506.83506,0,1,0-.0091,1.67.83505.83505,0,0,0,.0091-1.67Zm6.85014,5.22a.71651.71651,0,0,0-1.433.0093.71656.71656,0,0,0,1.433-.0093ZM5.37528,6.17908A.63823.63823,0,1,0,6.015,5.54483.62292.62292,0,0,0,5.37528,6.17908Zm6.68214,14.80843a.54949.54949,0,1,0-.55052.541A.54556.54556,0,0,0,12.05742,20.98752Zm8.53235-8.49689a.54777.54777,0,0,0-.54027.54023.53327.53327,0,0,0,.532.52293.51548.51548,0,0,0,.53272-.5237A.53187.53187,0,0,0,20.58977,12.49063ZM7.82846,2.4715a.44927.44927,0,1,0,.44484.44766A.43821.43821,0,0,0,7.82846,2.4715Zm13.775,7.60492a.41186.41186,0,0,0-.40065.39623.40178.40178,0,0,0,.40168.40168A.38994.38994,0,0,0,22,10.48172.39946.39946,0,0,0,21.60349,10.07642ZM5.79193,17.96207a.40469.40469,0,0,0-.397-.39646.399.399,0,0,0-.396.405.39234.39234,0,0,0,.39939.389A.39857.39857,0,0,0,5.79193,17.96207Z"/>
+</symbol>
+<symbol id="icon-medium" viewBox="0 0 24 24">
+<path d="M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z"/>
+</symbol>
+<symbol id="icon-pinterest" viewBox="0 0 24 24">
+<path d="M12.289,2C6.617,2,3.606,5.648,3.606,9.622c0,1.846,1.025,4.146,2.666,4.878c0.25,0.111,0.381,0.063,0.439-0.169 c0.044-0.175,0.267-1.029,0.365-1.428c0.032-0.128,0.017-0.237-0.091-0.362C6.445,11.911,6.01,10.75,6.01,9.668 c0-2.777,2.194-5.464,5.933-5.464c3.23,0,5.49,2.108,5.49,5.122c0,3.407-1.794,5.768-4.13,5.768c-1.291,0-2.257-1.021-1.948-2.277 c0.372-1.495,1.089-3.112,1.089-4.191c0-0.967-0.542-1.775-1.663-1.775c-1.319,0-2.379,1.309-2.379,3.059 c0,1.115,0.394,1.869,0.394,1.869s-1.302,5.279-1.54,6.261c-0.405,1.666,0.053,4.368,0.094,4.604 c0.021,0.126,0.167,0.169,0.25,0.063c0.129-0.165,1.699-2.419,2.142-4.051c0.158-0.59,0.817-2.995,0.817-2.995 c0.43,0.784,1.681,1.446,3.013,1.446c3.963,0,6.822-3.494,6.822-7.833C20.394,5.112,16.849,2,12.289,2"/>
+</symbol>
+<symbol id="icon-pocket" viewBox="0 0 24 24">
+<path d="M21.927,4.194C21.667,3.48,20.982,3,20.222,3h-0.01h-1.721H3.839C3.092,3,2.411,3.47,2.145,4.17 C2.066,4.378,2.026,4.594,2.026,4.814v6.035l0.069,1.2c0.29,2.73,1.707,5.115,3.899,6.778c0.039,0.03,0.079,0.059,0.119,0.089 l0.025,0.018c1.175,0.859,2.491,1.441,3.91,1.727c0.655,0.132,1.325,0.2,1.991,0.2c0.615,0,1.232-0.057,1.839-0.17 c0.073-0.014,0.145-0.028,0.219-0.044c0.02-0.004,0.042-0.012,0.064-0.023c1.359-0.297,2.621-0.864,3.753-1.691l0.025-0.018 c0.04-0.029,0.08-0.058,0.119-0.089c2.192-1.664,3.609-4.049,3.898-6.778l0.069-1.2V4.814C22.026,4.605,22,4.398,21.927,4.194z M17.692,10.481l-4.704,4.512c-0.266,0.254-0.608,0.382-0.949,0.382c-0.342,0-0.684-0.128-0.949-0.382l-4.705-4.512 C5.838,9.957,5.82,9.089,6.344,8.542c0.524-0.547,1.392-0.565,1.939-0.04l3.756,3.601l3.755-3.601 c0.547-0.524,1.415-0.506,1.939,0.04C18.256,9.089,18.238,9.956,17.692,10.481z"/>
+</symbol>
+<symbol id="icon-reddit" viewBox="0 0 24 24">
+<path d="M22,11.816c0-1.256-1.021-2.277-2.277-2.277c-0.593,0-1.122,0.24-1.526,0.614c-1.481-0.965-3.455-1.594-5.647-1.69 l1.171-3.702l3.18,0.748c0.008,1.028,0.846,1.862,1.876,1.862c1.035,0,1.877-0.842,1.877-1.878c0-1.035-0.842-1.877-1.877-1.877 c-0.769,0-1.431,0.466-1.72,1.13l-3.508-0.826c-0.203-0.047-0.399,0.067-0.46,0.261l-1.35,4.268 c-2.316,0.038-4.411,0.67-5.97,1.671C5.368,9.765,4.853,9.539,4.277,9.539C3.021,9.539,2,10.56,2,11.816 c0,0.814,0.433,1.523,1.078,1.925c-0.037,0.221-0.061,0.444-0.061,0.672c0,3.292,4.011,5.97,8.941,5.97s8.941-2.678,8.941-5.97 c0-0.214-0.02-0.424-0.053-0.632C21.533,13.39,22,12.661,22,11.816z M18.776,4.394c0.606,0,1.1,0.493,1.1,1.1s-0.493,1.1-1.1,1.1 s-1.1-0.494-1.1-1.1S18.169,4.394,18.776,4.394z M2.777,11.816c0-0.827,0.672-1.5,1.499-1.5c0.313,0,0.598,0.103,0.838,0.269 c-0.851,0.676-1.477,1.479-1.812,2.36C2.983,12.672,2.777,12.27,2.777,11.816z M11.959,19.606c-4.501,0-8.164-2.329-8.164-5.193 S7.457,9.22,11.959,9.22s8.164,2.329,8.164,5.193S16.46,19.606,11.959,19.606z M20.636,13.001c-0.326-0.89-0.948-1.701-1.797-2.384 c0.248-0.186,0.55-0.301,0.883-0.301c0.827,0,1.5,0.673,1.5,1.5C21.223,12.299,20.992,12.727,20.636,13.001z M8.996,14.704 c-0.76,0-1.397-0.616-1.397-1.376c0-0.76,0.637-1.397,1.397-1.397c0.76,0,1.376,0.637,1.376,1.397 C10.372,14.088,9.756,14.704,8.996,14.704z M16.401,13.328c0,0.76-0.616,1.376-1.376,1.376c-0.76,0-1.399-0.616-1.399-1.376 c0-0.76,0.639-1.397,1.399-1.397C15.785,11.931,16.401,12.568,16.401,13.328z M15.229,16.708c0.152,0.152,0.152,0.398,0,0.55 c-0.674,0.674-1.727,1.002-3.219,1.002c-0.004,0-0.007-0.002-0.011-0.002c-0.004,0-0.007,0.002-0.011,0.002 c-1.492,0-2.544-0.328-3.218-1.002c-0.152-0.152-0.152-0.398,0-0.55c0.152-0.152,0.399-0.151,0.55,0 c0.521,0.521,1.394,0.775,2.669,0.775c0.004,0,0.007,0.002,0.011,0.002c0.004,0,0.007-0.002,0.011-0.002 c1.275,0,2.148-0.253,2.669-0.775C14.831,16.556,15.078,16.556,15.229,16.708z"/>
+</symbol>
+<symbol id="icon-skype" viewBox="0 0 24 24">
+<path d="M10.113,2.699c0.033-0.006,0.067-0.013,0.1-0.02c0.033,0.017,0.066,0.033,0.098,0.051L10.113,2.699z M2.72,10.223 c-0.006,0.034-0.011,0.069-0.017,0.103c0.018,0.032,0.033,0.064,0.051,0.095L2.72,10.223z M21.275,13.771 c0.007-0.035,0.011-0.071,0.018-0.106c-0.018-0.031-0.033-0.064-0.052-0.095L21.275,13.771z M13.563,21.199 c0.032,0.019,0.065,0.035,0.096,0.053c0.036-0.006,0.071-0.011,0.105-0.017L13.563,21.199z M22,16.386 c0,1.494-0.581,2.898-1.637,3.953c-1.056,1.057-2.459,1.637-3.953,1.637c-0.967,0-1.914-0.251-2.75-0.725 c0.036-0.006,0.071-0.011,0.105-0.017l-0.202-0.035c0.032,0.019,0.065,0.035,0.096,0.053c-0.543,0.096-1.099,0.147-1.654,0.147 c-1.275,0-2.512-0.25-3.676-0.743c-1.125-0.474-2.135-1.156-3.002-2.023c-0.867-0.867-1.548-1.877-2.023-3.002 c-0.493-1.164-0.743-2.401-0.743-3.676c0-0.546,0.049-1.093,0.142-1.628c0.018,0.032,0.033,0.064,0.051,0.095L2.72,10.223 c-0.006,0.034-0.011,0.069-0.017,0.103C2.244,9.5,2,8.566,2,7.615c0-1.493,0.582-2.898,1.637-3.953 c1.056-1.056,2.46-1.638,3.953-1.638c0.915,0,1.818,0.228,2.622,0.655c-0.033,0.007-0.067,0.013-0.1,0.02l0.199,0.031 c-0.032-0.018-0.066-0.034-0.098-0.051c0.002,0,0.003-0.001,0.004-0.001c0.586-0.112,1.187-0.169,1.788-0.169 c1.275,0,2.512,0.249,3.676,0.742c1.124,0.476,2.135,1.156,3.002,2.024c0.868,0.867,1.548,1.877,2.024,3.002 c0.493,1.164,0.743,2.401,0.743,3.676c0,0.575-0.054,1.15-0.157,1.712c-0.018-0.031-0.033-0.064-0.052-0.095l0.034,0.201 c0.007-0.035,0.011-0.071,0.018-0.106C21.754,14.494,22,15.432,22,16.386z M16.817,14.138c0-1.331-0.613-2.743-3.033-3.282 l-2.209-0.49c-0.84-0.192-1.807-0.444-1.807-1.237c0-0.794,0.679-1.348,1.903-1.348c2.468,0,2.243,1.696,3.468,1.696 c0.645,0,1.209-0.379,1.209-1.031c0-1.521-2.435-2.663-4.5-2.663c-2.242,0-4.63,0.952-4.63,3.488c0,1.221,0.436,2.521,2.839,3.123 l2.984,0.745c0.903,0.223,1.129,0.731,1.129,1.189c0,0.762-0.758,1.507-2.129,1.507c-2.679,0-2.307-2.062-3.743-2.062 c-0.645,0-1.113,0.444-1.113,1.078c0,1.236,1.501,2.886,4.856,2.886C15.236,17.737,16.817,16.199,16.817,14.138z"/>
+</symbol>
+<symbol id="icon-slideshare" viewBox="0 0 24 24">
+<path d="M11.738,10.232a2.142,2.142,0,0,1-.721,1.619,2.556,2.556,0,0,1-3.464,0,2.183,2.183,0,0,1,0-3.243,2.572,2.572,0,0,1,3.464,0A2.136,2.136,0,0,1,11.738,10.232Zm5.7,0a2.15,2.15,0,0,1-.715,1.619,2.563,2.563,0,0,1-3.469,0,2.183,2.183,0,0,1,0-3.243,2.58,2.58,0,0,1,3.469,0A2.144,2.144,0,0,1,17.439,10.232Zm2.555,2.045V4.7a2.128,2.128,0,0,0-.363-1.4,1.614,1.614,0,0,0-1.261-.415H5.742a1.656,1.656,0,0,0-1.278.386A2.246,2.246,0,0,0,4.129,4.7v7.643a8.212,8.212,0,0,0,1,.454q.516.193.92.318a6.847,6.847,0,0,0,.92.21q.516.085.806.125a6.615,6.615,0,0,0,.795.045l.665.006q.16,0,.642-.023t.506-.023a1.438,1.438,0,0,1,1.079.307,1.134,1.134,0,0,0,.114.1,7.215,7.215,0,0,0,.693.579q.079-1.033,1.34-.988.057,0,.415.017l.488.023q.13.006.517.011t.6-.011l.619-.051a5.419,5.419,0,0,0,.693-.1l.7-.153a5.353,5.353,0,0,0,.761-.221q.345-.131.766-.307a8.727,8.727,0,0,0,.818-.392Zm1.851-.057a10.4,10.4,0,0,1-4.225,2.862,6.5,6.5,0,0,1-.261,5.281,3.524,3.524,0,0,1-2.078,1.681,2.452,2.452,0,0,1-2.067-.17,1.915,1.915,0,0,1-.931-1.863l-.011-3.7V16.3l-.279-.068q-.188-.045-.267-.057l-.011,3.839a1.9,1.9,0,0,1-.943,1.863,2.481,2.481,0,0,1-2.078.17,3.519,3.519,0,0,1-2.067-1.7,6.546,6.546,0,0,1-.25-5.258A10.4,10.4,0,0,1,2.152,12.22a.56.56,0,0,1-.045-.715q.238-.3.681.011l.125.079a.767.767,0,0,1,.125.091V3.8a1.987,1.987,0,0,1,.534-1.4,1.7,1.7,0,0,1,1.295-.579H19.141a1.7,1.7,0,0,1,1.295.579,1.985,1.985,0,0,1,.534,1.4v7.882l.238-.17q.443-.307.681-.011a.56.56,0,0,1-.045.715Z"/>
+</symbol>
+<symbol id="icon-snapchat" viewBox="0 0 24 24">
+<path d="M12.065,2a5.526,5.526,0,0,1,3.132.892A5.854,5.854,0,0,1,17.326,5.4a5.821,5.821,0,0,1,.351,2.33q0,.612-.117,2.487a.809.809,0,0,0,.365.091,1.93,1.93,0,0,0,.664-.176,1.93,1.93,0,0,1,.664-.176,1.3,1.3,0,0,1,.729.234.7.7,0,0,1,.351.6.839.839,0,0,1-.41.7,2.732,2.732,0,0,1-.9.41,3.192,3.192,0,0,0-.9.378.728.728,0,0,0-.41.618,1.575,1.575,0,0,0,.156.56,6.9,6.9,0,0,0,1.334,1.953,5.6,5.6,0,0,0,1.881,1.315,5.875,5.875,0,0,0,1.042.3.42.42,0,0,1,.365.456q0,.911-2.852,1.341a1.379,1.379,0,0,0-.143.507,1.8,1.8,0,0,1-.182.605.451.451,0,0,1-.429.241,5.878,5.878,0,0,1-.807-.085,5.917,5.917,0,0,0-.833-.085,4.217,4.217,0,0,0-.807.065,2.42,2.42,0,0,0-.82.293,6.682,6.682,0,0,0-.755.5q-.351.267-.755.527a3.886,3.886,0,0,1-.989.436A4.471,4.471,0,0,1,11.831,22a4.307,4.307,0,0,1-1.256-.176,3.784,3.784,0,0,1-.976-.436q-.4-.26-.749-.527a6.682,6.682,0,0,0-.755-.5,2.422,2.422,0,0,0-.807-.293,4.432,4.432,0,0,0-.82-.065,5.089,5.089,0,0,0-.853.1,5,5,0,0,1-.762.1.474.474,0,0,1-.456-.241,1.819,1.819,0,0,1-.182-.618,1.411,1.411,0,0,0-.143-.521q-2.852-.429-2.852-1.341a.42.42,0,0,1,.365-.456,5.793,5.793,0,0,0,1.042-.3,5.524,5.524,0,0,0,1.881-1.315,6.789,6.789,0,0,0,1.334-1.953A1.575,1.575,0,0,0,6,12.9a.728.728,0,0,0-.41-.618,3.323,3.323,0,0,0-.9-.384,2.912,2.912,0,0,1-.9-.41.814.814,0,0,1-.41-.684.71.71,0,0,1,.338-.593,1.208,1.208,0,0,1,.716-.241,1.976,1.976,0,0,1,.625.169,2.008,2.008,0,0,0,.69.169.919.919,0,0,0,.416-.091q-.117-1.849-.117-2.474A5.861,5.861,0,0,1,6.385,5.4,5.516,5.516,0,0,1,8.625,2.819,7.075,7.075,0,0,1,12.062,2Z"/>
+</symbol>
+<symbol id="icon-soundcloud" viewBox="0 0 24 24">
+<path d="M8.9,16.1L9,14L8.9,9.5c0-0.1,0-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1c-0.1,0-0.1,0-0.1,0.1c0,0-0.1,0.1-0.1,0.1L8.3,14l0.1,2.1 c0,0.1,0,0.1,0.1,0.1c0,0,0.1,0.1,0.1,0.1C8.8,16.3,8.9,16.3,8.9,16.1z M11.4,15.9l0.1-1.8L11.4,9c0-0.1,0-0.2-0.1-0.2 c0,0-0.1,0-0.1,0s-0.1,0-0.1,0c-0.1,0-0.1,0.1-0.1,0.2l0,0.1l-0.1,5c0,0,0,0.7,0.1,2v0c0,0.1,0,0.1,0.1,0.1c0.1,0.1,0.1,0.1,0.2,0.1 c0.1,0,0.1,0,0.2-0.1c0.1,0,0.1-0.1,0.1-0.2L11.4,15.9z M2.4,12.9L2.5,14l-0.2,1.1c0,0.1,0,0.1-0.1,0.1c0,0-0.1,0-0.1-0.1L2.1,14 l0.1-1.1C2.2,12.9,2.3,12.9,2.4,12.9C2.3,12.9,2.4,12.9,2.4,12.9z M3.1,12.2L3.3,14l-0.2,1.8c0,0.1,0,0.1-0.1,0.1 c-0.1,0-0.1,0-0.1-0.1L2.8,14L3,12.2C3,12.2,3,12.2,3.1,12.2C3.1,12.2,3.1,12.2,3.1,12.2z M3.9,11.9L4.1,14l-0.2,2.1 c0,0.1,0,0.1-0.1,0.1c-0.1,0-0.1,0-0.1-0.1L3.5,14l0.2-2.1c0-0.1,0-0.1,0.1-0.1C3.9,11.8,3.9,11.8,3.9,11.9z M4.7,11.9L4.9,14 l-0.2,2.1c0,0.1-0.1,0.1-0.1,0.1c-0.1,0-0.1,0-0.1-0.1L4.3,14l0.2-2.2c0-0.1,0-0.1,0.1-0.1C4.7,11.7,4.7,11.8,4.7,11.9z M5.6,12 l0.2,2l-0.2,2.1c0,0.1-0.1,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0-0.1,0-0.1L5.1,14l0.2-2c0,0,0-0.1,0-0.1s0.1,0,0.1,0 C5.5,11.9,5.5,11.9,5.6,12L5.6,12z M6.4,10.7L6.6,14l-0.2,2.1c0,0,0,0.1,0,0.1c0,0-0.1,0-0.1,0c-0.1,0-0.1-0.1-0.2-0.2L5.9,14 l0.2-3.3c0-0.1,0.1-0.2,0.2-0.2c0,0,0.1,0,0.1,0C6.4,10.7,6.4,10.7,6.4,10.7z M7.2,10l0.2,4.1l-0.2,2.1c0,0,0,0.1,0,0.1 c0,0-0.1,0-0.1,0c-0.1,0-0.2-0.1-0.2-0.2l-0.1-2.1L6.8,10c0-0.1,0.1-0.2,0.2-0.2c0,0,0.1,0,0.1,0S7.2,9.9,7.2,10z M8,9.6L8.2,14 L8,16.1c0,0.1-0.1,0.2-0.2,0.2c-0.1,0-0.2-0.1-0.2-0.2L7.5,14l0.1-4.4c0-0.1,0-0.1,0.1-0.1c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1 C8,9.6,8,9.6,8,9.6z M11.4,16.1L11.4,16.1L11.4,16.1z M9.7,9.6L9.8,14l-0.1,2.1c0,0.1,0,0.1-0.1,0.2s-0.1,0.1-0.2,0.1 c-0.1,0-0.1,0-0.1-0.1s-0.1-0.1-0.1-0.2L9.2,14l0.1-4.4c0-0.1,0-0.1,0.1-0.2s0.1-0.1,0.2-0.1c0.1,0,0.1,0,0.2,0.1S9.7,9.5,9.7,9.6 L9.7,9.6z M10.6,9.8l0.1,4.3l-0.1,2c0,0.1,0,0.1-0.1,0.2c0,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2-0.1c0,0-0.1-0.1-0.1-0.2L10,14 l0.1-4.3c0-0.1,0-0.1,0.1-0.2c0,0,0.1-0.1,0.2-0.1c0.1,0,0.1,0,0.2,0.1S10.6,9.7,10.6,9.8z M12.4,14l-0.1,2c0,0.1,0,0.1-0.1,0.2 c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2-0.1c-0.1-0.1-0.1-0.1-0.1-0.2l-0.1-1l-0.1-1l0.1-5.5v0c0-0.1,0-0.2,0.1-0.2 c0.1,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0c0.1,0,0.1,0.1,0.1,0.2L12.4,14z M22.1,13.9c0,0.7-0.2,1.3-0.7,1.7c-0.5,0.5-1.1,0.7-1.7,0.7 h-6.8c-0.1,0-0.1,0-0.2-0.1c-0.1-0.1-0.1-0.1-0.1-0.2V8.2c0-0.1,0.1-0.2,0.2-0.3c0.5-0.2,1-0.3,1.6-0.3c1.1,0,2.1,0.4,2.9,1.1 c0.8,0.8,1.3,1.7,1.4,2.8c0.3-0.1,0.6-0.2,1-0.2c0.7,0,1.3,0.2,1.7,0.7C21.8,12.6,22.1,13.2,22.1,13.9L22.1,13.9z"/>
+</symbol>
+<symbol id="icon-spotify" viewBox="0 0 24 24">
+<path d="M12,2C6.477,2,2,6.477,2,12c0,5.523,4.477,10,10,10c5.523,0,10-4.477,10-10C22,6.477,17.523,2,12,2 M16.586,16.424 c-0.18,0.295-0.563,0.387-0.857,0.207c-2.348-1.435-5.304-1.76-8.785-0.964c-0.335,0.077-0.67-0.133-0.746-0.469 c-0.077-0.335,0.132-0.67,0.469-0.746c3.809-0.871,7.077-0.496,9.713,1.115C16.673,15.746,16.766,16.13,16.586,16.424 M17.81,13.7 c-0.226,0.367-0.706,0.482-1.072,0.257c-2.687-1.652-6.785-2.131-9.965-1.166C6.36,12.917,5.925,12.684,5.8,12.273 C5.675,11.86,5.908,11.425,6.32,11.3c3.632-1.102,8.147-0.568,11.234,1.328C17.92,12.854,18.035,13.335,17.81,13.7 M17.915,10.865 c-3.223-1.914-8.54-2.09-11.618-1.156C5.804,9.859,5.281,9.58,5.131,9.086C4.982,8.591,5.26,8.069,5.755,7.919 c3.532-1.072,9.404-0.865,13.115,1.338c0.445,0.264,0.59,0.838,0.327,1.282C18.933,10.983,18.359,11.129,17.915,10.865"/>
+</symbol>
+<symbol id="icon-stackoverflow" viewBox="0 0 24 24">
+<path d="m 17.817128,20.228605 v -5.337217 h 1.771431 V 22 H 3.6 v -7.108612 h 1.771401 v 5.337217 z" />
+<path d="m 7.3267845,14.385359 8.6959295,1.817316 0.368168,-1.748385 -8.6959318,-1.817319 z m 1.1503197,-4.140944 8.0517968,3.749872 0.73617,-1.610385 -8.0518344,-3.7728517 z m 2.2315078,-3.9569154 6.832405,5.6822664 1.12738,-1.357316 -6.832576,-5.6822636 z m 4.417,-4.2099019 -1.426448,1.0581864 5.291191,7.1316119 1.426412,-1.0582745 z M 7.1427296,18.434189 h 8.8799844 v -1.7713 H 7.1427296 Z" />
+<path d="m 17.817128,20.228605 v -5.337217 h 1.771431 V 22 H 3.6 v -7.108612 h 1.771401 v 5.337217 z" />
+<path d="m 7.3267845,14.385359 8.6959295,1.817316 0.368168,-1.748385 -8.6959318,-1.817319 z m 1.1503197,-4.140944 8.0517968,3.749872 0.73617,-1.610385 -8.0518344,-3.7728517 z m 2.2315078,-3.9569154 6.832405,5.6822664 1.12738,-1.357316 -6.832576,-5.6822636 z m 4.417,-4.2099019 -1.426448,1.0581864 5.291191,7.1316119 1.426412,-1.0582745 z M 7.1427296,18.434189 h 8.8799844 v -1.7713 H 7.1427296 Z" />
+</symbol>
+<symbol id="icon-stumbleupon" viewBox="0 0 24 24">
+<path d="M12,4.294c-2.469,0-4.471,2.002-4.471,4.471v6.353c0,0.585-0.474,1.059-1.059,1.059c-0.585,0-1.059-0.474-1.059-1.059 v-2.824H2v2.941c0,2.469,2.002,4.471,4.471,4.471c2.469,0,4.471-2.002,4.471-4.471V8.765c0-0.585,0.474-1.059,1.059-1.059 s1.059,0.474,1.059,1.059v1.294l1.412,0.647l2-0.647V8.765C16.471,6.296,14.469,4.294,12,4.294z M13.059,12.353v2.882 c0,2.469,2.002,4.471,4.471,4.471S22,17.704,22,15.235v-2.824h-3.412v2.824c0,0.585-0.474,1.059-1.059,1.059 c-0.585,0-1.059-0.474-1.059-1.059v-2.882l-2,0.647L13.059,12.353z"/>
+</symbol>
+<symbol id="icon-tumblr" viewBox="0 0 24 24">
+<path d="M16.749,17.396c-0.357,0.17-1.041,0.319-1.551,0.332c-1.539,0.041-1.837-1.081-1.85-1.896V9.847h3.861V6.937h-3.847V2.039 c0,0-2.77,0-2.817,0c-0.046,0-0.127,0.041-0.138,0.144c-0.165,1.499-0.867,4.13-3.783,5.181v2.484h1.945v6.282 c0,2.151,1.587,5.206,5.775,5.135c1.413-0.024,2.982-0.616,3.329-1.126L16.749,17.396z"/>
+</symbol>
+<symbol id="icon-twitch" viewBox="0 0 24 24">
+<path d="M16.499,8.089h-1.636v4.91h1.636V8.089z M12,8.089h-1.637v4.91H12V8.089z M4.228,3.178L3,6.451v13.092h4.499V22h2.456 l2.454-2.456h3.681L21,14.636V3.178H4.228z M19.364,13.816l-2.864,2.865H12l-2.453,2.453V16.68H5.863V4.814h13.501V13.816z"/>
+</symbol>
+<symbol id="icon-twitter" viewBox="0 0 24 24">
+<path d="M22.23,5.924c-0.736,0.326-1.527,0.547-2.357,0.646c0.847-0.508,1.498-1.312,1.804-2.27 c-0.793,0.47-1.671,0.812-2.606,0.996C18.324,4.498,17.257,4,16.077,4c-2.266,0-4.103,1.837-4.103,4.103 c0,0.322,0.036,0.635,0.106,0.935C8.67,8.867,5.647,7.234,3.623,4.751C3.27,5.357,3.067,6.062,3.067,6.814 c0,1.424,0.724,2.679,1.825,3.415c-0.673-0.021-1.305-0.206-1.859-0.513c0,0.017,0,0.034,0,0.052c0,1.988,1.414,3.647,3.292,4.023 c-0.344,0.094-0.707,0.144-1.081,0.144c-0.264,0-0.521-0.026-0.772-0.074c0.522,1.63,2.038,2.816,3.833,2.85 c-1.404,1.1-3.174,1.756-5.096,1.756c-0.331,0-0.658-0.019-0.979-0.057c1.816,1.164,3.973,1.843,6.29,1.843 c7.547,0,11.675-6.252,11.675-11.675c0-0.178-0.004-0.355-0.012-0.531C20.985,7.47,21.68,6.747,22.23,5.924z"/>
+</symbol>
+<symbol id="icon-vimeo" viewBox="0 0 24 24">
+<path d="M22.396,7.164c-0.093,2.026-1.507,4.799-4.245,8.32C15.322,19.161,12.928,21,10.97,21c-1.214,0-2.24-1.119-3.079-3.359 c-0.56-2.053-1.119-4.106-1.68-6.159C5.588,9.243,4.921,8.122,4.206,8.122c-0.156,0-0.701,0.328-1.634,0.98L1.594,7.841 c1.027-0.902,2.04-1.805,3.037-2.708C6.001,3.95,7.03,3.327,7.715,3.264c1.619-0.156,2.616,0.951,2.99,3.321 c0.404,2.557,0.685,4.147,0.841,4.769c0.467,2.121,0.981,3.181,1.542,3.181c0.435,0,1.09-0.688,1.963-2.065 c0.871-1.376,1.338-2.422,1.401-3.142c0.125-1.187-0.343-1.782-1.401-1.782c-0.498,0-1.012,0.115-1.541,0.341 c1.023-3.35,2.977-4.977,5.862-4.884C21.511,3.066,22.52,4.453,22.396,7.164z"/>
+</symbol>
+<symbol id="icon-vk" viewBox="0 0 24 24">
+<path d="M22,7.1c0.2,0.4-0.4,1.5-1.6,3.1c-0.2,0.2-0.4,0.5-0.7,0.9c-0.5,0.7-0.9,1.1-0.9,1.4c-0.1,0.3-0.1,0.6,0.1,0.8 c0.1,0.1,0.4,0.4,0.8,0.9h0l0,0c1,0.9,1.6,1.7,2,2.3c0,0,0,0.1,0.1,0.1c0,0.1,0,0.1,0.1,0.3c0,0.1,0,0.2,0,0.4 c0,0.1-0.1,0.2-0.3,0.3c-0.1,0.1-0.4,0.1-0.6,0.1l-2.7,0c-0.2,0-0.4,0-0.6-0.1c-0.2-0.1-0.4-0.1-0.5-0.2l-0.2-0.1 c-0.2-0.1-0.5-0.4-0.7-0.7s-0.5-0.6-0.7-0.8c-0.2-0.2-0.4-0.4-0.6-0.6C14.8,15,14.6,15,14.4,15c0,0,0,0-0.1,0c0,0-0.1,0.1-0.2,0.2 c-0.1,0.1-0.2,0.2-0.2,0.3c-0.1,0.1-0.1,0.3-0.2,0.5c-0.1,0.2-0.1,0.5-0.1,0.8c0,0.1,0,0.2,0,0.3c0,0.1-0.1,0.2-0.1,0.2l0,0.1 c-0.1,0.1-0.3,0.2-0.6,0.2h-1.2c-0.5,0-1,0-1.5-0.2c-0.5-0.1-1-0.3-1.4-0.6s-0.7-0.5-1.1-0.7s-0.6-0.4-0.7-0.6l-0.3-0.3 c-0.1-0.1-0.2-0.2-0.3-0.3s-0.4-0.5-0.7-0.9s-0.7-1-1.1-1.6c-0.4-0.6-0.8-1.3-1.3-2.2C2.9,9.4,2.5,8.5,2.1,7.5C2,7.4,2,7.3,2,7.2 c0-0.1,0-0.1,0-0.2l0-0.1c0.1-0.1,0.3-0.2,0.6-0.2l2.9,0c0.1,0,0.2,0,0.2,0.1S5.9,6.9,5.9,7L6,7c0.1,0.1,0.2,0.2,0.3,0.3 C6.4,7.7,6.5,8,6.7,8.4C6.9,8.8,7,9,7.1,9.2l0.2,0.3c0.2,0.4,0.4,0.8,0.6,1.1c0.2,0.3,0.4,0.5,0.5,0.7s0.3,0.3,0.4,0.4 c0.1,0.1,0.3,0.1,0.4,0.1c0.1,0,0.2,0,0.3-0.1c0,0,0,0,0.1-0.1c0,0,0.1-0.1,0.1-0.2c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2,0.1-0.5,0.1-0.8 c0-0.4,0-0.8,0-1.3c0-0.3,0-0.5-0.1-0.8c0-0.2-0.1-0.4-0.1-0.5L9.6,7.6C9.4,7.3,9.1,7.2,8.7,7.1C8.6,7.1,8.6,7,8.7,6.9 C8.9,6.7,9,6.6,9.1,6.5c0.4-0.2,1.2-0.3,2.5-0.3c0.6,0,1,0.1,1.4,0.1c0.1,0,0.3,0.1,0.3,0.1c0.1,0.1,0.2,0.1,0.2,0.3 c0,0.1,0.1,0.2,0.1,0.3s0,0.3,0,0.5c0,0.2,0,0.4,0,0.6c0,0.2,0,0.4,0,0.7c0,0.3,0,0.6,0,0.9c0,0.1,0,0.2,0,0.4c0,0.2,0,0.4,0,0.5 c0,0.1,0,0.3,0,0.4s0.1,0.3,0.1,0.4c0.1,0.1,0.1,0.2,0.2,0.3c0.1,0,0.1,0,0.2,0c0.1,0,0.2,0,0.3-0.1c0.1-0.1,0.2-0.2,0.4-0.4 s0.3-0.4,0.5-0.7c0.2-0.3,0.5-0.7,0.7-1.1c0.4-0.7,0.8-1.5,1.1-2.3c0-0.1,0.1-0.1,0.1-0.2c0-0.1,0.1-0.1,0.1-0.1l0,0l0.1,0 c0,0,0,0,0.1,0s0.2,0,0.2,0l3,0c0.3,0,0.5,0,0.7,0S21.9,7,21.9,7L22,7.1z"/>
+</symbol>
+<symbol id="icon-wordpress" viewBox="0 0 24 24">
+<path d="M12.158,12.786L9.46,20.625c0.806,0.237,1.657,0.366,2.54,0.366c1.047,0,2.051-0.181,2.986-0.51 c-0.024-0.038-0.046-0.079-0.065-0.124L12.158,12.786z M3.009,12c0,3.559,2.068,6.634,5.067,8.092L3.788,8.341 C3.289,9.459,3.009,10.696,3.009,12z M18.069,11.546c0-1.112-0.399-1.881-0.741-2.48c-0.456-0.741-0.883-1.368-0.883-2.109 c0-0.826,0.627-1.596,1.51-1.596c0.04,0,0.078,0.005,0.116,0.007C16.472,3.904,14.34,3.009,12,3.009 c-3.141,0-5.904,1.612-7.512,4.052c0.211,0.007,0.41,0.011,0.579,0.011c0.94,0,2.396-0.114,2.396-0.114 C7.947,6.93,8.004,7.642,7.52,7.699c0,0-0.487,0.057-1.029,0.085l3.274,9.739l1.968-5.901l-1.401-3.838 C9.848,7.756,9.389,7.699,9.389,7.699C8.904,7.67,8.961,6.93,9.446,6.958c0,0,1.484,0.114,2.368,0.114 c0.94,0,2.397-0.114,2.397-0.114c0.485-0.028,0.542,0.684,0.057,0.741c0,0-0.488,0.057-1.029,0.085l3.249,9.665l0.897-2.996 C17.841,13.284,18.069,12.316,18.069,11.546z M19.889,7.686c0.039,0.286,0.06,0.593,0.06,0.924c0,0.912-0.171,1.938-0.684,3.22 l-2.746,7.94c2.673-1.558,4.47-4.454,4.47-7.771C20.991,10.436,20.591,8.967,19.889,7.686z M12,22C6.486,22,2,17.514,2,12 C2,6.486,6.486,2,12,2c5.514,0,10,4.486,10,10C22,17.514,17.514,22,12,22z"/>
+</symbol>
+<symbol id="icon-yelp" viewBox="0 0 24 24">
+<path d="M12.271,16.718v1.417q-.011,3.257-.067,3.4a.707.707,0,0,1-.569.446,4.637,4.637,0,0,1-2.024-.424A4.609,4.609,0,0,1,7.8,20.565a.844.844,0,0,1-.19-.4.692.692,0,0,1,.044-.29,3.181,3.181,0,0,1,.379-.524q.335-.412,2.019-2.409.011,0,.669-.781a.757.757,0,0,1,.44-.274.965.965,0,0,1,.552.039.945.945,0,0,1,.418.324.732.732,0,0,1,.139.468Zm-1.662-2.8a.783.783,0,0,1-.58.781l-1.339.435q-3.067.981-3.257.981a.711.711,0,0,1-.6-.4,2.636,2.636,0,0,1-.19-.836,9.134,9.134,0,0,1,.011-1.857,3.559,3.559,0,0,1,.335-1.389.659.659,0,0,1,.625-.357,22.629,22.629,0,0,1,2.253.859q.781.324,1.283.524l.937.379a.771.771,0,0,1,.4.34A.982.982,0,0,1,10.609,13.917Zm9.213,3.313a4.467,4.467,0,0,1-1.021,1.8,4.559,4.559,0,0,1-1.512,1.417.671.671,0,0,1-.7-.078q-.156-.112-2.052-3.2l-.524-.859a.761.761,0,0,1-.128-.513.957.957,0,0,1,.217-.513.774.774,0,0,1,.926-.29q.011.011,1.327.446,2.264.736,2.7.887a2.082,2.082,0,0,1,.524.229.673.673,0,0,1,.245.68Zm-7.5-7.049q.056,1.137-.6,1.361-.647.19-1.272-.792L6.237,4.08a.7.7,0,0,1,.212-.691,5.788,5.788,0,0,1,2.314-1,5.928,5.928,0,0,1,2.5-.352.681.681,0,0,1,.547.5q.034.2.245,3.407T12.327,10.181Zm7.384,1.2a.679.679,0,0,1-.29.658q-.167.112-3.67.959-.747.167-1.015.257l.011-.022a.769.769,0,0,1-.513-.044.914.914,0,0,1-.413-.357.786.786,0,0,1,0-.971q.011-.011.836-1.137,1.394-1.908,1.673-2.275a2.423,2.423,0,0,1,.379-.435A.7.7,0,0,1,17.435,8a4.482,4.482,0,0,1,1.372,1.489,4.81,4.81,0,0,1,.9,1.868v.034Z"/>
+</symbol>
+<symbol id="icon-youtube" viewBox="0 0 24 24">
+<path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"/>
+</symbol>
+</defs>
+</svg>