YouTube - Version 14.1.1

Version Description

Download this release

Release Info

Developer embedplus
Plugin Icon 128x128 YouTube
Version 14.1.1
Comparing to
See all releases

Code changes from version 14.1 to 14.1.1

readme.txt CHANGED
@@ -4,13 +4,15 @@ Plugin Name: Embed Plus Plugin for YouTube, with YouTube Gallery, Channel, Playl
4
  Tags: youtube gallery, youtube wordpress plugin, channel gallery, playlist gallery, defer css javascript, youtube channel, youtube live, lazy load, facade
5
  Requires at least: 4.5
6
  Tested up to: 6.0
7
- Stable tag: 14.1
8
  License: GPLv3 or later
9
 
10
  YouTube Embed WordPress Plugin. Embed a responsive video, YouTube channel gallery, playlist gallery, YouTube livestream. Defer JavaScript
11
 
12
  == Description ==
13
 
 
 
14
  **YouTube WordPress Plugin** to embed and customize a YouTube gallery (channel or playlist), YouTube livestream (and premiere), YouTube short, or standard YouTube video. This YouTube WordPress plugin can be customized in a wide variety of ways. The plugin also focuses on performance with the ability to lazy load with a facade and defer JavaScript while serving minified CSS and JavaScript. Here are a few recently added features to all versions (free and Pro) of this WordPress plugin:
15
 
16
  * YouTube gallery embeds and standard videos now support Facade Mode which improves plugin performance by loading a lighter version of the player, until it is clicked. The plugin then loads the real YouTube embed after clicking (note: for live streams, the real player is always loaded). We have tested this feature in multiple cases with a mix of other WordPress plugins, and we found it to successfully improve your Lighthouse performance score by addressing the following recommendation: "Some third-party resources can be lazy loaded with a facade - 1 facade alternative available." You can demo this facade feature on our [YouTube Plugin WordPress](https://youtube-wordpress-plugin.embedplus.com/) test site.
@@ -187,6 +189,12 @@ Assuming you already have the EmbedPlus plugin active, you can embed a YouTube s
187
 
188
  == Changelog ==
189
 
 
 
 
 
 
 
190
  = Embed Plus for YouTube WordPress Plugin 14.1 =
191
  * Adds the live stream fallback feature to channel-based live stream embeds
192
 
4
  Tags: youtube gallery, youtube wordpress plugin, channel gallery, playlist gallery, defer css javascript, youtube channel, youtube live, lazy load, facade
5
  Requires at least: 4.5
6
  Tested up to: 6.0
7
+ Stable tag: 14.1.1
8
  License: GPLv3 or later
9
 
10
  YouTube Embed WordPress Plugin. Embed a responsive video, YouTube channel gallery, playlist gallery, YouTube livestream. Defer JavaScript
11
 
12
  == Description ==
13
 
14
+ https://www.youtube.com/watch?v=QDdvXBqfrzM
15
+
16
  **YouTube WordPress Plugin** to embed and customize a YouTube gallery (channel or playlist), YouTube livestream (and premiere), YouTube short, or standard YouTube video. This YouTube WordPress plugin can be customized in a wide variety of ways. The plugin also focuses on performance with the ability to lazy load with a facade and defer JavaScript while serving minified CSS and JavaScript. Here are a few recently added features to all versions (free and Pro) of this WordPress plugin:
17
 
18
  * YouTube gallery embeds and standard videos now support Facade Mode which improves plugin performance by loading a lighter version of the player, until it is clicked. The plugin then loads the real YouTube embed after clicking (note: for live streams, the real player is always loaded). We have tested this feature in multiple cases with a mix of other WordPress plugins, and we found it to successfully improve your Lighthouse performance score by addressing the following recommendation: "Some third-party resources can be lazy loaded with a facade - 1 facade alternative available." You can demo this facade feature on our [YouTube Plugin WordPress](https://youtube-wordpress-plugin.embedplus.com/) test site.
189
 
190
  == Changelog ==
191
 
192
+ = Embed Plus for YouTube WordPress Plugin 14.1.1 =
193
+ * Better compatability with WordPress 6.0
194
+ * Easier channel live stream wizard
195
+ * Cleaner uninstalls
196
+ * Add intro helper video
197
+
198
  = Embed Plus for YouTube WordPress Plugin 14.1 =
199
  * Adds the live stream fallback feature to channel-based live stream embeds
200
 
styles/ytprefs-onboarding.css CHANGED
@@ -88,6 +88,22 @@ input.ui-widget[type=text] {
88
  position: relative;
89
  }
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  /* STEPS ************/
92
 
93
  .wrap-ytprefs-onboarding h1
88
  position: relative;
89
  }
90
 
91
+ .epyt-fitvid {
92
+ width: 100%;
93
+ padding-top: 56.25%;
94
+ position: relative;
95
+ }
96
+
97
+ .epyt-fitvid iframe {
98
+ position: absolute;
99
+ top: 0;
100
+ left:0;
101
+ right: 0;
102
+ bottom: 0;
103
+ width: 100%;
104
+ height: 100%;
105
+ }
106
+
107
  /* STEPS ************/
108
 
109
  .wrap-ytprefs-onboarding h1
styles/ytprefs-onboarding.min.css CHANGED
@@ -1,2 +1,2 @@
1
 
2
- #wphead{display:none}#wpbody{margin-left:0}#adminmenuback{display:none}#adminmenu,adminmenuwrap{display:none}#wpcontent,.auto-fold #wpcontent{margin-left:0}#wpadminbar{display:none}html.wp-toolbar{padding:0}#footer,#wpfooter,.auto-fold #wpfooter{display:none}#screen-meta-links{display:none}#wpfooter{clear:both}.clearboth{clear:both}.pad20{padding:20px}.center{text-align:center}.bold{font-weight:bold}.orange{color:#f85d00}.smallnote{font-size:small;font-style:italic}.indent-option{margin-left:25px}.ui-widget,.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:inherit}.ui-accordion .ui-accordion-header{margin-top:15px;font-weight:bold}.ui-accordion .ui-accordion-content.header-go-content{display:none!important;height:0!important}.ui-widget-content a{color:#0073aa}input.ui-widget[type=text]{margin:0;padding:.4em 1em;width:450px}.txt-button-align input.ui-widget[type=text],.txt-button-align button{vertical-align:top}#epyt_wiz_wrap .ui-button{font-weight:bold}.ui-button .ui-icon{transform:scale(1.35,1.35)}.copycode{background-color:#eef;border:2px solid #c7d6e4;display:inline-block;font-size:.9em;overflow-x:hidden;vertical-align:middle;white-space:nowrap;width:400px;padding-left:15px;padding-right:15px}.pointer{cursor:pointer}.relative{position:relative}.wrap-ytprefs-onboarding h1{line-height:40px}.wrap-ytprefs-onboarding h2{line-height:2em}.wrap-ytprefs-onboarding .box-vi-not-interested{display:none}.ytprefs-ob-step{position:absolute;visibility:hidden;opacity:0;transition:opacity 300ms,visibility 300ms;width:100%;height:0;top:-200000px}.ytprefs-ob-step.active-step{visibility:visible;opacity:1;height:auto;top:0}.ytprefs-ob-title{font-size:2em;line-height:2em;text-align:center}.ytprefs-ob-subtitle{font-size:1.4em;line-height:2em}.ytprefs-ob-content{max-width:800px;margin:0 auto}.ytprefs-ob-nav{text-align:center;margin-top:20px;padding-top:20px;border-top:2px solid #ddd;clear:both;margin-bottom:50px}.ytprefs-ob-nav .ytprefs-ob-nav-hide{display:none}.ytprefs-ob-nav button.button-secondary,.ytprefs-ob-nav button.button-primary{display:inline-block;margin:0 10px}.ytprefs-ob-nav button.ytprefs-ob-nav-prev,.ytprefs-ob-nav button.ytprefs-ob-nav-close{margin-right:25px}.ytprefs-ob-step1 ul.ytprefs-ob-filter li{margin-bottom:15px}.ytprefs-ob-step1 .ytprefs-hover-icons{width:160px;float:right;margin-left:30px;min-height:200px;position:relative}.ytprefs-ob-step1 .ytprefs-hover-icons img{position:absolute;top:0;left:0;opacity:0;display:block;width:100%;height:auto;transition:opacity 200ms}.ytprefs-ob-step1 .ytprefs-hover-icons img.yob-icon-visible{opacity:1}.ytprefs-ob-step2 .ytprefs-ob-setting{display:none;margin:10px 0 25px 0}.ytprefs-ob-step2 .ytprefs-ob-setting.yob-single-visible,.ytprefs-ob-step2 .ytprefs-ob-setting.yob-gallery-visible,.ytprefs-ob-step2 .ytprefs-ob-setting.yob-standalone-visible,.ytprefs-ob-step2 .ytprefs-ob-setting.yob-privacy-visible,.ytprefs-ob-step2 .ytprefs-ob-setting.yob-live-visible{display:block}.ytprefs-ob-step2 form #responsive ~ #boxresponsive_all,.ytprefs-ob-step2 form #facade_mode ~ .box_facade_mode{height:0;visibility:none;opacity:0;pointer-events:none;transition:opacity 300ms,visibility 300ms}.ytprefs-ob-step2 form #responsive:checked ~ #boxresponsive_all,.ytprefs-ob-step2 form #facade_mode:checked ~ .box_facade_mode{height:auto;visibility:visible;opacity:1;margin-top:10px;pointer-events:all}.ytindent{padding-left:15px;border-left:5px solid #e0e0e0}.gdpr-options-left{width:65%;float:left}.gdpr-options-right{width:33%;float:right;margin-top:20px}.gdpr-options-right .img-gdpr-message{width:100%;height:auto}iframe#gdpr_consent_message_ifr{min-height:250px!important}.ytprefs-ob-step4 .ytprefs-ob-content{max-width:100%}.wiztab-screenshots{float:right;max-width:50%;height:auto;clear:right;margin-left:30px;margin-bottom:15px;display:block;border:5px solid #ddd}.ytprefs-ob-success{color:#00a000;font-weight:bold}.ytprefs-ob-success:after{content:url('../images/adstxt-valid.png')}input[type="checkbox"]+label .check-note{display:none}input[type="checkbox"]:checked+label .check-note{display:inline}#not_live_on ~ #wp-not_live_content-wrap{opacity:.3}#not_live_on:checked ~ #wp-not_live_content-wrap{opacity:1}
1
 
2
+ #wphead{display:none}#wpbody{margin-left:0}#adminmenuback{display:none}#adminmenu,adminmenuwrap{display:none}#wpcontent,.auto-fold #wpcontent{margin-left:0}#wpadminbar{display:none}html.wp-toolbar{padding:0}#footer,#wpfooter,.auto-fold #wpfooter{display:none}#screen-meta-links{display:none}#wpfooter{clear:both}.clearboth{clear:both}.pad20{padding:20px}.center{text-align:center}.bold{font-weight:bold}.orange{color:#f85d00}.smallnote{font-size:small;font-style:italic}.indent-option{margin-left:25px}.ui-widget,.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:inherit}.ui-accordion .ui-accordion-header{margin-top:15px;font-weight:bold}.ui-accordion .ui-accordion-content.header-go-content{display:none!important;height:0!important}.ui-widget-content a{color:#0073aa}input.ui-widget[type=text]{margin:0;padding:.4em 1em;width:450px}.txt-button-align input.ui-widget[type=text],.txt-button-align button{vertical-align:top}#epyt_wiz_wrap .ui-button{font-weight:bold}.ui-button .ui-icon{transform:scale(1.35,1.35)}.copycode{background-color:#eef;border:2px solid #c7d6e4;display:inline-block;font-size:.9em;overflow-x:hidden;vertical-align:middle;white-space:nowrap;width:400px;padding-left:15px;padding-right:15px}.pointer{cursor:pointer}.relative{position:relative}.epyt-fitvid{width:100%;padding-top:56.25%;position:relative}.epyt-fitvid iframe{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%}.wrap-ytprefs-onboarding h1{line-height:40px}.wrap-ytprefs-onboarding h2{line-height:2em}.wrap-ytprefs-onboarding .box-vi-not-interested{display:none}.ytprefs-ob-step{position:absolute;visibility:hidden;opacity:0;transition:opacity 300ms,visibility 300ms;width:100%;height:0;top:-200000px}.ytprefs-ob-step.active-step{visibility:visible;opacity:1;height:auto;top:0}.ytprefs-ob-title{font-size:2em;line-height:2em;text-align:center}.ytprefs-ob-subtitle{font-size:1.4em;line-height:2em}.ytprefs-ob-content{max-width:800px;margin:0 auto}.ytprefs-ob-nav{text-align:center;margin-top:20px;padding-top:20px;border-top:2px solid #ddd;clear:both;margin-bottom:50px}.ytprefs-ob-nav .ytprefs-ob-nav-hide{display:none}.ytprefs-ob-nav button.button-secondary,.ytprefs-ob-nav button.button-primary{display:inline-block;margin:0 10px}.ytprefs-ob-nav button.ytprefs-ob-nav-prev,.ytprefs-ob-nav button.ytprefs-ob-nav-close{margin-right:25px}.ytprefs-ob-step1 ul.ytprefs-ob-filter li{margin-bottom:15px}.ytprefs-ob-step1 .ytprefs-hover-icons{width:160px;float:right;margin-left:30px;min-height:200px;position:relative}.ytprefs-ob-step1 .ytprefs-hover-icons img{position:absolute;top:0;left:0;opacity:0;display:block;width:100%;height:auto;transition:opacity 200ms}.ytprefs-ob-step1 .ytprefs-hover-icons img.yob-icon-visible{opacity:1}.ytprefs-ob-step2 .ytprefs-ob-setting{display:none;margin:10px 0 25px 0}.ytprefs-ob-step2 .ytprefs-ob-setting.yob-single-visible,.ytprefs-ob-step2 .ytprefs-ob-setting.yob-gallery-visible,.ytprefs-ob-step2 .ytprefs-ob-setting.yob-standalone-visible,.ytprefs-ob-step2 .ytprefs-ob-setting.yob-privacy-visible,.ytprefs-ob-step2 .ytprefs-ob-setting.yob-live-visible{display:block}.ytprefs-ob-step2 form #responsive ~ #boxresponsive_all,.ytprefs-ob-step2 form #facade_mode ~ .box_facade_mode{height:0;visibility:none;opacity:0;pointer-events:none;transition:opacity 300ms,visibility 300ms}.ytprefs-ob-step2 form #responsive:checked ~ #boxresponsive_all,.ytprefs-ob-step2 form #facade_mode:checked ~ .box_facade_mode{height:auto;visibility:visible;opacity:1;margin-top:10px;pointer-events:all}.ytindent{padding-left:15px;border-left:5px solid #e0e0e0}.gdpr-options-left{width:65%;float:left}.gdpr-options-right{width:33%;float:right;margin-top:20px}.gdpr-options-right .img-gdpr-message{width:100%;height:auto}iframe#gdpr_consent_message_ifr{min-height:250px!important}.ytprefs-ob-step4 .ytprefs-ob-content{max-width:100%}.wiztab-screenshots{float:right;max-width:50%;height:auto;clear:right;margin-left:30px;margin-bottom:15px;display:block;border:5px solid #ddd}.ytprefs-ob-success{color:#00a000;font-weight:bold}.ytprefs-ob-success:after{content:url('../images/adstxt-valid.png')}input[type="checkbox"]+label .check-note{display:none}input[type="checkbox"]:checked+label .check-note{display:inline}#not_live_on ~ #wp-not_live_content-wrap{opacity:.3}#not_live_on:checked ~ #wp-not_live_content-wrap{opacity:1}
styles/ytprefs.css CHANGED
@@ -11,6 +11,11 @@ iframe.__youtube_prefs__
11
  text-align: center;
12
  }
13
 
 
 
 
 
 
14
  /*.epyt-gallery div[tabindex]:focus {
15
  outline: none;
16
  }*/
11
  text-align: center;
12
  }
13
 
14
+ .epyt-gallery .epyt-figure {
15
+ margin-inline: 0;
16
+ margin-block: 0;
17
+ }
18
+
19
  /*.epyt-gallery div[tabindex]:focus {
20
  outline: none;
21
  }*/
styles/ytprefs.min.css CHANGED
@@ -1,2 +1,2 @@
1
 
2
- .epyt-debug{cursor:pointer;text-align:left;background-color:#ddd;color:#000}iframe.__youtube_prefs__{border-width:0}.epyt-gallery{text-align:center}.epyt-gallery iframe{margin-bottom:0}.epyt-gallery.epyt-lb iframe{display:none;height:0!important}.epyt-gallery-list{margin:0 -8px 0 -8px;position:relative;transition:opacity ease-out .3s;display:block}.epyt-gallery-list .epyt-gallery-thumb{box-sizing:border-box}.epyt-gallery-list p{display:none}.epyt-gallery-clear{clear:both}.epyt-gallery-list.epyt-loading{opacity:.5;transition:opacity ease-out .3s}.epyt-gallery-thumb{position:relative;box-sizing:border-box;overflow-y:hidden;display:block!important;cursor:pointer;opacity:1;float:left;padding:0 8px 10px 8px;height:auto}.epyt-gallery-thumb.hover{position:relative;opacity:1;transition:opacity ease-out .3s;height:auto}.epyt-gallery-img-box{width:100%}.epyt-gallery-img{height:0;width:100%;padding-top:56.25%!important;position:relative;overflow:hidden!important;background-size:cover!important;background-position:center!important}.epyt-gallery-playhover{opacity:0;position:absolute;top:-10px;left:0;width:100%;height:100%;vertical-align:middle;text-align:center;transition:opacity ease-out .3s}.epyt-gallery-thumb.hover .epyt-gallery-playhover,.epyt-gallery-thumb.epyt-current-video .epyt-gallery-playhover{opacity:1;top:0;transition:all ease-out .3s}.epyt-gallery-thumb .epyt-gallery-playcrutch{display:inline-block;height:100%;vertical-align:middle;width:0}.epyt-gallery-playhover .epyt-play-img{height:auto!important;max-width:15%!important;padding:0!important;margin:0!important;min-width:30px!important;vertical-align:middle!important;display:inline-block!important;width:auto;border:0;box-sizing:border-box}.epyt-gallery-title{font-size:80%;line-height:120%;padding:10px}.epyt-gallery-notitle{padding:4px}.epyt-gallery-notitle span{display:none}.epyt-gallery-rowtitle{text-align:center;width:100%;position:absolute;left:0;top:100%;opacity:0;z-index:10;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.epyt-gallery-rowtitle.hover{opacity:1;transition:opacity linear .2s}.epyt-gallery-rowbreak{clear:both}.epyt-pagination{clear:both;text-align:center;padding:10px 8px 10px 8px}.epyt-pagination.epyt-hide-pagination *{display:none!important}.epyt-pagination>div,.epyt-pagenumbers>div{display:inline-block;padding:0 2px 0 2px;vertical-align:middle}.epyt-pagination .epyt-pagebutton{cursor:pointer;display:inline-block;padding:0 10px 0 10px}.epyt-pagebutton>div{display:inline}.epyt-pagination .epyt-loader{display:none}.epyt-gallery-list.epyt-loading .epyt-pagination .epyt-loader{display:inline-block}body .lity-container{width:100%;max-width:964px}.epyt-curtain .lity-opened iframe{opacity:0;transition:opacity .3s linear .5s}.epyt-gallery-allthumbs.epyt-cols-1 .epyt-gallery-thumb{width:100%}.epyt-gallery-allthumbs.epyt-cols-2 .epyt-gallery-thumb{width:50%}.epyt-gallery-allthumbs.epyt-cols-3 .epyt-gallery-thumb{width:33.333%}.epyt-gallery-allthumbs.epyt-cols-4 .epyt-gallery-thumb{width:25%}.epyt-gallery-allthumbs.epyt-cols-5 .epyt-gallery-thumb{width:20%}.epyt-gallery-allthumbs.epyt-cols-6 .epyt-gallery-thumb{width:16.666%}.epyt-gallery-allthumbs.epyt-cols-7 .epyt-gallery-thumb{width:14.285%}.epyt-gallery-allthumbs.epyt-cols-8 .epyt-gallery-thumb{width:12.5%}.epyt-gallery-allthumbs.epyt-cols-9 .epyt-gallery-thumb{width:11.111%}.epyt-gallery-allthumbs.epyt-cols-10 .epyt-gallery-thumb{width:10%}.epyt-gallery-allthumbs.epyt-cols-11 .epyt-gallery-thumb{width:9.090%}.epyt-gallery-allthumbs.epyt-cols-12 .epyt-gallery-thumb{width:8.333%}.epyt-gallery-allthumbs.epyt-cols-13 .epyt-gallery-thumb{width:7.692%}.epyt-gallery-allthumbs.epyt-cols-14 .epyt-gallery-thumb{width:7.142%}.epyt-gallery-allthumbs.epyt-cols-15 .epyt-gallery-thumb{width:6.666%}.epyt-gallery-allthumbs.epyt-cols-16 .epyt-gallery-thumb{width:6.25%}.epyt-gallery-allthumbs.epyt-cols-17 .epyt-gallery-thumb{width:5.882%}.epyt-gallery-allthumbs.epyt-cols-18 .epyt-gallery-thumb{width:5.555%}.epyt-gallery-allthumbs.epyt-cols-19 .epyt-gallery-thumb{width:5.263%}.epyt-gallery-allthumbs.epyt-cols-20 .epyt-gallery-thumb{width:5%}.epyt-pagebutton.hide,.epyt-pagenumbers.hide{display:none!important;opacity:0!important;visibility:hidden!important}.epyt-gallery-subscribe{text-align:center;padding:15px 0 10px 0;clear:both}.epyt-gallery-subscribe a.epyt-gallery-subbutton,.epyt-gallery-subscribe a.epyt-gallery-subbutton:hover{display:inline-block;padding:5px 10px;background-color:#e62117!important;color:#fff!important;text-decoration:none!important;border-radius:3px}.epyt-gallery-subscribe a.epyt-gallery-subbutton img{width:20px!important;height:auto!important;vertical-align:middle!important;padding:0 6px 3px 0;display:inline-block;background:transparent;-webkit-box-shadow:none;box-shadow:none;margin:0}body div.__youtube_prefs__.__youtube_prefs_gdpr__{background-color:#000;background-image:-webkit-linear-gradient(top,#000,#444);background-image:linear-gradient(to bottom,#000,#444);padding:25px;height:auto;text-align:left}body div.__youtube_prefs__.__youtube_prefs_gdpr__ *{color:#e3e3e3!important}body div.__youtube_prefs__.__youtube_prefs_gdpr__ a{text-decoration:underline}body div.__youtube_prefs__.__youtube_prefs_gdpr__ button.__youtube_prefs_gdpr__,body div.__youtube_prefs__.__youtube_prefs_gdpr__ button.__youtube_prefs_gdpr__:hover{display:inline-block;padding:5px 10px;background:#e62117!important;color:#fff!important;text-decoration:none!important;border-radius:3px;font-weight:normal;border-width:0;box-sizing:border-box}body div.__youtube_prefs__.__youtube_prefs_gdpr__ button.__youtube_prefs_gdpr__ img{width:20px!important;height:auto!important;vertical-align:middle!important;padding:0 6px 3px 0;display:inline-block;background:transparent;-webkit-box-shadow:none;box-shadow:none;margin-left:8px}body .epyt-gallery-img-gdpr{background-color:#000;background-image:-webkit-linear-gradient(top,#000,#444);background-image:linear-gradient(to bottom,#000,#444)}.epyt-facade{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%;-webkit-transition:.4s all;-moz-transition:.4s all;transition:.4s all}.epyt-facade:hover{-webkit-filter:brightness(90%);-moz-filter:brightness(90%);filter:brightness(90%)}.epyt-facade img.epyt-facade-poster{display:block;margin:0;max-width:100%;width:100%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border:0;height:auto;cursor:pointer}.epyt-facade button.epyt-facade-play{background-color:transparent!important;position:absolute;left:50%;top:50%;width:68px;height:48px;margin-left:-34px;margin-top:-24px;-webkit-transition:opacity .25s cubic-bezier(0,0,0.2,1);transition:opacity .25s cubic-bezier(0,0,0.2,1);cursor:pointer;border-width:0!important}.epyt-facade button.epyt-facade-play svg{height:100%;left:0;position:absolute;top:0;width:100%;pointer-events:none}.epyt-facade button.epyt-facade-play svg .ytp-large-play-button-bg{-webkit-transition:fill .1s cubic-bezier(0.4,0,1,1),fill-opacity .1s cubic-bezier(0.4,0,1,1);transition:fill .1s cubic-bezier(0.4,0,1,1),fill-opacity .1s cubic-bezier(0.4,0,1,1);fill:#212121;fill-opacity:.8}.epyt-facade:hover button.epyt-facade-play svg .ytp-large-play-button-bg{-webkit-transition:fill .1s cubic-bezier(0,0,0.2,1),fill-opacity .1s cubic-bezier(0,0,0.2,1);transition:fill .1s cubic-bezier(0,0,0.2,1),fill-opacity .1s cubic-bezier(0,0,0.2,1);fill:#f00;fill-opacity:1}.wp-embed-responsive .wp-block-embed.wp-has-aspect-ratio .wp-block-embed__wrapper .epyt-is-override.epyt-facade{position:absolute;top:0;right:0;bottom:0;left:0}.wp-block-embed.wp-has-aspect-ratio .wp-block-embed__wrapper .epyt-is-override.__youtube_prefs_gdpr__{position:relative}.wp-embed-responsive .wp-block-embed.wp-has-aspect-ratio .wp-block-embed__wrapper .epyt-is-override.__youtube_prefs_gdpr__{position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto}.wp-embed-responsive .wp-block-embed.wp-has-aspect-ratio .wp-block-embed__wrapper.epyt-is-override__wrapper:before{padding:0}.wp-embed-responsive .wp-block-embed.wp-has-aspect-ratio .wp-block-embed__wrapper.epyt-is-override__wrapper .epyt-is-override.__youtube_prefs_gdpr__{position:relative;top:unset;right:unset;bottom:unset;left:unset}.ytvi-story-container{display:block;max-width:100%}
1
 
2
+ .epyt-debug{cursor:pointer;text-align:left;background-color:#ddd;color:#000}iframe.__youtube_prefs__{border-width:0}.epyt-gallery{text-align:center}.epyt-gallery .epyt-figure{margin-inline:0;margin-block:0}.epyt-gallery iframe{margin-bottom:0}.epyt-gallery.epyt-lb iframe{display:none;height:0!important}.epyt-gallery-list{margin:0 -8px 0 -8px;position:relative;transition:opacity ease-out .3s;display:block}.epyt-gallery-list .epyt-gallery-thumb{box-sizing:border-box}.epyt-gallery-list p{display:none}.epyt-gallery-clear{clear:both}.epyt-gallery-list.epyt-loading{opacity:.5;transition:opacity ease-out .3s}.epyt-gallery-thumb{position:relative;box-sizing:border-box;overflow-y:hidden;display:block!important;cursor:pointer;opacity:1;float:left;padding:0 8px 10px 8px;height:auto}.epyt-gallery-thumb.hover{position:relative;opacity:1;transition:opacity ease-out .3s;height:auto}.epyt-gallery-img-box{width:100%}.epyt-gallery-img{height:0;width:100%;padding-top:56.25%!important;position:relative;overflow:hidden!important;background-size:cover!important;background-position:center!important}.epyt-gallery-playhover{opacity:0;position:absolute;top:-10px;left:0;width:100%;height:100%;vertical-align:middle;text-align:center;transition:opacity ease-out .3s}.epyt-gallery-thumb.hover .epyt-gallery-playhover,.epyt-gallery-thumb.epyt-current-video .epyt-gallery-playhover{opacity:1;top:0;transition:all ease-out .3s}.epyt-gallery-thumb .epyt-gallery-playcrutch{display:inline-block;height:100%;vertical-align:middle;width:0}.epyt-gallery-playhover .epyt-play-img{height:auto!important;max-width:15%!important;padding:0!important;margin:0!important;min-width:30px!important;vertical-align:middle!important;display:inline-block!important;width:auto;border:0;box-sizing:border-box}.epyt-gallery-title{font-size:80%;line-height:120%;padding:10px}.epyt-gallery-notitle{padding:4px}.epyt-gallery-notitle span{display:none}.epyt-gallery-rowtitle{text-align:center;width:100%;position:absolute;left:0;top:100%;opacity:0;z-index:10;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.epyt-gallery-rowtitle.hover{opacity:1;transition:opacity linear .2s}.epyt-gallery-rowbreak{clear:both}.epyt-pagination{clear:both;text-align:center;padding:10px 8px 10px 8px}.epyt-pagination.epyt-hide-pagination *{display:none!important}.epyt-pagination>div,.epyt-pagenumbers>div{display:inline-block;padding:0 2px 0 2px;vertical-align:middle}.epyt-pagination .epyt-pagebutton{cursor:pointer;display:inline-block;padding:0 10px 0 10px}.epyt-pagebutton>div{display:inline}.epyt-pagination .epyt-loader{display:none}.epyt-gallery-list.epyt-loading .epyt-pagination .epyt-loader{display:inline-block}body .lity-container{width:100%;max-width:964px}.epyt-curtain .lity-opened iframe{opacity:0;transition:opacity .3s linear .5s}.epyt-gallery-allthumbs.epyt-cols-1 .epyt-gallery-thumb{width:100%}.epyt-gallery-allthumbs.epyt-cols-2 .epyt-gallery-thumb{width:50%}.epyt-gallery-allthumbs.epyt-cols-3 .epyt-gallery-thumb{width:33.333%}.epyt-gallery-allthumbs.epyt-cols-4 .epyt-gallery-thumb{width:25%}.epyt-gallery-allthumbs.epyt-cols-5 .epyt-gallery-thumb{width:20%}.epyt-gallery-allthumbs.epyt-cols-6 .epyt-gallery-thumb{width:16.666%}.epyt-gallery-allthumbs.epyt-cols-7 .epyt-gallery-thumb{width:14.285%}.epyt-gallery-allthumbs.epyt-cols-8 .epyt-gallery-thumb{width:12.5%}.epyt-gallery-allthumbs.epyt-cols-9 .epyt-gallery-thumb{width:11.111%}.epyt-gallery-allthumbs.epyt-cols-10 .epyt-gallery-thumb{width:10%}.epyt-gallery-allthumbs.epyt-cols-11 .epyt-gallery-thumb{width:9.090%}.epyt-gallery-allthumbs.epyt-cols-12 .epyt-gallery-thumb{width:8.333%}.epyt-gallery-allthumbs.epyt-cols-13 .epyt-gallery-thumb{width:7.692%}.epyt-gallery-allthumbs.epyt-cols-14 .epyt-gallery-thumb{width:7.142%}.epyt-gallery-allthumbs.epyt-cols-15 .epyt-gallery-thumb{width:6.666%}.epyt-gallery-allthumbs.epyt-cols-16 .epyt-gallery-thumb{width:6.25%}.epyt-gallery-allthumbs.epyt-cols-17 .epyt-gallery-thumb{width:5.882%}.epyt-gallery-allthumbs.epyt-cols-18 .epyt-gallery-thumb{width:5.555%}.epyt-gallery-allthumbs.epyt-cols-19 .epyt-gallery-thumb{width:5.263%}.epyt-gallery-allthumbs.epyt-cols-20 .epyt-gallery-thumb{width:5%}.epyt-pagebutton.hide,.epyt-pagenumbers.hide{display:none!important;opacity:0!important;visibility:hidden!important}.epyt-gallery-subscribe{text-align:center;padding:15px 0 10px 0;clear:both}.epyt-gallery-subscribe a.epyt-gallery-subbutton,.epyt-gallery-subscribe a.epyt-gallery-subbutton:hover{display:inline-block;padding:5px 10px;background-color:#e62117!important;color:#fff!important;text-decoration:none!important;border-radius:3px}.epyt-gallery-subscribe a.epyt-gallery-subbutton img{width:20px!important;height:auto!important;vertical-align:middle!important;padding:0 6px 3px 0;display:inline-block;background:transparent;-webkit-box-shadow:none;box-shadow:none;margin:0}body div.__youtube_prefs__.__youtube_prefs_gdpr__{background-color:#000;background-image:-webkit-linear-gradient(top,#000,#444);background-image:linear-gradient(to bottom,#000,#444);padding:25px;height:auto;text-align:left}body div.__youtube_prefs__.__youtube_prefs_gdpr__ *{color:#e3e3e3!important}body div.__youtube_prefs__.__youtube_prefs_gdpr__ a{text-decoration:underline}body div.__youtube_prefs__.__youtube_prefs_gdpr__ button.__youtube_prefs_gdpr__,body div.__youtube_prefs__.__youtube_prefs_gdpr__ button.__youtube_prefs_gdpr__:hover{display:inline-block;padding:5px 10px;background:#e62117!important;color:#fff!important;text-decoration:none!important;border-radius:3px;font-weight:normal;border-width:0;box-sizing:border-box}body div.__youtube_prefs__.__youtube_prefs_gdpr__ button.__youtube_prefs_gdpr__ img{width:20px!important;height:auto!important;vertical-align:middle!important;padding:0 6px 3px 0;display:inline-block;background:transparent;-webkit-box-shadow:none;box-shadow:none;margin-left:8px}body .epyt-gallery-img-gdpr{background-color:#000;background-image:-webkit-linear-gradient(top,#000,#444);background-image:linear-gradient(to bottom,#000,#444)}.epyt-facade{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%;-webkit-transition:.4s all;-moz-transition:.4s all;transition:.4s all}.epyt-facade:hover{-webkit-filter:brightness(90%);-moz-filter:brightness(90%);filter:brightness(90%)}.epyt-facade img.epyt-facade-poster{display:block;margin:0;max-width:100%;width:100%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border:0;height:auto;cursor:pointer}.epyt-facade button.epyt-facade-play{background-color:transparent!important;position:absolute;left:50%;top:50%;width:68px;height:48px;margin-left:-34px;margin-top:-24px;-webkit-transition:opacity .25s cubic-bezier(0,0,0.2,1);transition:opacity .25s cubic-bezier(0,0,0.2,1);cursor:pointer;border-width:0!important}.epyt-facade button.epyt-facade-play svg{height:100%;left:0;position:absolute;top:0;width:100%;pointer-events:none}.epyt-facade button.epyt-facade-play svg .ytp-large-play-button-bg{-webkit-transition:fill .1s cubic-bezier(0.4,0,1,1),fill-opacity .1s cubic-bezier(0.4,0,1,1);transition:fill .1s cubic-bezier(0.4,0,1,1),fill-opacity .1s cubic-bezier(0.4,0,1,1);fill:#212121;fill-opacity:.8}.epyt-facade:hover button.epyt-facade-play svg .ytp-large-play-button-bg{-webkit-transition:fill .1s cubic-bezier(0,0,0.2,1),fill-opacity .1s cubic-bezier(0,0,0.2,1);transition:fill .1s cubic-bezier(0,0,0.2,1),fill-opacity .1s cubic-bezier(0,0,0.2,1);fill:#f00;fill-opacity:1}.wp-embed-responsive .wp-block-embed.wp-has-aspect-ratio .wp-block-embed__wrapper .epyt-is-override.epyt-facade{position:absolute;top:0;right:0;bottom:0;left:0}.wp-block-embed.wp-has-aspect-ratio .wp-block-embed__wrapper .epyt-is-override.__youtube_prefs_gdpr__{position:relative}.wp-embed-responsive .wp-block-embed.wp-has-aspect-ratio .wp-block-embed__wrapper .epyt-is-override.__youtube_prefs_gdpr__{position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto}.wp-embed-responsive .wp-block-embed.wp-has-aspect-ratio .wp-block-embed__wrapper.epyt-is-override__wrapper:before{padding:0}.wp-embed-responsive .wp-block-embed.wp-has-aspect-ratio .wp-block-embed__wrapper.epyt-is-override__wrapper .epyt-is-override.__youtube_prefs_gdpr__{position:relative;top:unset;right:unset;bottom:unset;left:unset}.ytvi-story-container{display:block;max-width:100%}
uninstall.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // if uninstall.php is not called by WordPress, die
4
+ if (!defined('WP_UNINSTALL_PLUGIN'))
5
+ {
6
+ die;
7
+ }
8
+
9
+ // if the option to do this is checked
10
+ $all_yt_options = get_option('youtubeprefs_alloptions');
11
+ if (!empty($all_yt_options['uninstall_data']))
12
+ {
13
+ global $wpdb;
14
+
15
+ // delete main options
16
+ delete_option('youtubeprefs_alloptions');
17
+
18
+ // delete backup options
19
+ $backup_plugin_options = $wpdb->get_results("SELECT option_name FROM $wpdb->options WHERE option_name LIKE 'youtubeprefs\_alloptions\_backup\_%'");
20
+ foreach ($backup_plugin_options as $option)
21
+ {
22
+ delete_option($option->option_name);
23
+ }
24
+
25
+ // delete vi data
26
+ $vi_table_name = $wpdb->prefix . 'vi_consent_logs';
27
+ $wpdb->query("DROP TABLE IF EXISTS $vi_table_name");
28
+ }
youtube.php CHANGED
@@ -3,11 +3,10 @@
3
  Plugin Name: Embed Plus Plugin for YouTube
4
  Plugin URI: https://www.embedplus.com/dashboard/pro-easy-video-analytics.aspx?ref=plugin
5
  Description: YouTube Embed Plugin. Embed a YouTube channel gallery, playlist gallery, YouTube live stream. Lite embeds with defer JavaScript and facade options
6
- Version: 14.1
7
  Author: Embed Plus for YouTube Team
8
  Author URI: https://www.embedplus.com
9
  Requires at least: 4.5
10
- Tested up to: 5.9
11
  */
12
 
13
  /*
@@ -36,7 +35,7 @@ class YouTubePrefs
36
 
37
  public static $folder_name = 'youtube-embed-plus';
38
  public static $curltimeout = 30;
39
- public static $version = '14.1';
40
  public static $opt_version = 'version';
41
  public static $optembedwidth = null;
42
  public static $optembedheight = null;
@@ -47,6 +46,7 @@ class YouTubePrefs
47
  public static $opt_glance = 'glance';
48
  public static $opt_autoplay = 'autoplay';
49
  public static $opt_debugmode = 'debugmode';
 
50
  public static $opt_old_script_method = 'old_script_method';
51
  public static $opt_cc_load_policy = 'cc_load_policy';
52
  public static $opt_cc_lang_pref = 'cc_lang_pref';
@@ -720,7 +720,7 @@ class YouTubePrefs
720
  $step1_live_errors = '';
721
  $step1_live_error_invalid = 'Sorry, that does not seem to be a valid link to an existing live video. ' . $step1_api_error_msg;
722
  $step1_livechannel_errors = '';
723
- $step1_livechannel_error_invalid = 'Sorry, that does not seem to be a link to an existing channel.';
724
 
725
  $if_live_preview = false;
726
 
@@ -1039,18 +1039,42 @@ class YouTubePrefs
1039
  {
1040
  throw new Exception();
1041
  }
1042
- if (preg_match('@/channel/(.+)@', $search))
1043
  {
1044
  try
1045
  {
1046
  $thechannelid = null;
1047
- // channel id
1048
- $chanmatch = array();
1049
- preg_match('@/channel/(.+)@', $search, $chanmatch);
1050
- if (!empty($chanmatch))
1051
  {
1052
- $thechannelid = $chanmatch[1];
1053
- //$thechannel = self::get_channel_snippet($chanmatch[1]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1054
  }
1055
  if (!empty($thechannelid))
1056
  {
@@ -1174,10 +1198,7 @@ class YouTubePrefs
1174
  }
1175
  ?>
1176
  <p>
1177
- <strong>Is your live stream not working?</strong> According to Google/YouTube rules, there must be an active AdSense account that's connected to the live
1178
- stream's channel (for monetization) in order embed the stream. If you own the channel, we suggest that you attach an AdSense account. Otherwise, you will
1179
- likely just see a blank screen when you embed your stream, even if it is visible on YouTube.com.
1180
- Read more here: <a href="https://support.google.com/youtube/answer/2474026?hl=en" target="_blank">https://support.google.com/youtube/answer/2474026?hl=en</a>
1181
  </p>
1182
  </div>
1183
  <?php
@@ -1322,13 +1343,6 @@ class YouTubePrefs
1322
  else
1323
  {
1324
  ?>
1325
- <p>
1326
- Important: You can embed any public livestreams or premieres from any channel that YouTube/Google has approved to be <strong>Eligible</strong> and <strong>Enabled</strong>.
1327
- If you're trying to embed a livestream from your own channel, you can check make sure it is <strong>Eligible</strong> and <strong>Enabled</strong> by <a href="https://www.youtube.com/features" target="_blank">visiting here.</a>
1328
- You are verified if you see the word "Enabled" at the bottom of the box that is labeled "Embed live streams." Note that verification can only be done directly through YouTube/Google with the link above, and this plugin cannot automatically do that.
1329
- YouTube/Google also requires <strong>Monetization</strong> enabled. <a href="https://www.embedplus.com/how-to-embed-a-youtube-livestream-in-wordpress.aspx" target="_blank">You can read more here &raquo;</a>
1330
- </p>
1331
-
1332
  <div class="livestream-tabs">
1333
  <ul>
1334
  <li><a href="#livestream-tabs-2">Channel-based livestream (recommended)<sup class="orange">new</sup></a></li>
@@ -1356,11 +1370,16 @@ class YouTubePrefs
1356
  </div>
1357
  <div id="livestream-tabs-2">
1358
  <p>
1359
- This will embed a video that will automatically display the next upcoming live stream from a channel.
1360
  </p>
1361
- <p>
1362
- Enter the link to the channel page below (note the word "channel" should be in the link).<br>Example: https://www.youtube.com/<strong>channel</strong>/UCL0iAkpqV5YaIVG7xkDtS4Q
1363
- </p>
 
 
 
 
 
1364
  <form name="wizform_livechannel" method="post" action="" class="wizform" id="wizform_livechannel">
1365
  <?php wp_nonce_field('_epyt_wiz', '_epyt_nonce', true); ?>
1366
  <div class="center txt-button-align">
@@ -1939,6 +1958,7 @@ class YouTubePrefs
1939
  $_not_live_on = 0;
1940
  $_not_live_on_channel = 0;
1941
  $_debugmode = 0;
 
1942
  $_admin_off_scripts = 0;
1943
  $_defer_js = 0;
1944
  $_defer_jquery = 0;
@@ -1969,6 +1989,7 @@ class YouTubePrefs
1969
  $_glance = self::tryget($arroptions, self::$opt_glance, $_glance);
1970
  $_autoplay = self::tryget($arroptions, self::$opt_autoplay, 0);
1971
  $_debugmode = self::tryget($arroptions, self::$opt_debugmode, 0);
 
1972
  $_old_script_method = self::tryget($arroptions, self::$opt_old_script_method, 0);
1973
  $_cc_load_policy = self::tryget($arroptions, self::$opt_cc_load_policy, 0);
1974
  $_cc_lang_pref = self::tryget($arroptions, self::$opt_cc_lang_pref, $_cc_lang_pref);
@@ -1978,7 +1999,7 @@ class YouTubePrefs
1978
  $_rel = self::tryget($arroptions, self::$opt_rel, 1);
1979
  $_fs = self::tryget($arroptions, self::$opt_fs, 1);
1980
  $_playsinline = self::tryget($arroptions, self::$opt_playsinline, 0);
1981
- $_origin = self::tryget($arroptions, self::$opt_origin, 0);
1982
  $_hl = self::tryget($arroptions, self::$opt_hl, '');
1983
  $_dohl = self::tryget($arroptions, self::$opt_dohl, 0);
1984
  $_theme = self::tryget($arroptions, self::$opt_theme, 'dark');
@@ -2134,6 +2155,7 @@ class YouTubePrefs
2134
  self::$opt_not_live_on => $_not_live_on,
2135
  self::$opt_not_live_on_channel => $_not_live_on_channel,
2136
  self::$opt_debugmode => $_debugmode,
 
2137
  self::$opt_admin_off_scripts => $_admin_off_scripts,
2138
  self::$opt_defer_js => $_defer_js,
2139
  self::$opt_defer_jquery => $_defer_jquery,
@@ -2833,7 +2855,7 @@ class YouTubePrefs
2833
  if ($iscontent && !$isoverride && $finalparams[self::$opt_gb_compat] == 1 && current_theme_supports('responsive-embeds'))// self::using_gutenberg())
2834
  {
2835
  // don't do the following if: overriding default YT, is widget
2836
- $begin_gb_wrapper = '<figure class="wp-block-embed wp-block-embed-youtube is-type-video is-provider-youtube"><div class="wp-block-embed__wrapper">';
2837
  //wp-block-embed-youtube is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio
2838
  $end_gb_wrapper = '</div></figure>';
2839
  }
@@ -3240,7 +3262,7 @@ class YouTubePrefs
3240
  $new_pointer_content = '<h3>' . __('New Update') . '</h3>'; // ooopointer
3241
 
3242
  $new_pointer_content .= '<p>'; // ooopointer
3243
- $new_pointer_content .= "This update adds the live stream fallback feature to channel-based live stream embeds, for both free and <a target=_blank href=" . self::$epbase . '/dashboard/pro-easy-video-analytics.aspx?ref=frompointer' . ">Pro versions</a>.";
3244
  if (self::vi_logged_in())
3245
  {
3246
  $new_pointer_content .= "<br><br><strong>Note:</strong> You are currently logged into the vi intelligence feature. vi support is being deprecated in the next version, so we recommend taking the vi ads down from your site. Please contact ext@embedplus.com for questions.";
@@ -3965,18 +3987,18 @@ class YouTubePrefs
3965
  The plugin will automatically switch to your video's live stream or premiere once it's active. In the <em>"Not Live" Fallback Content</em> box below, enter what you would like to appear until then.
3966
  You can even insert shortcodes from our plugin into the box below (shortcodes from other plugins may or may not work correctly).
3967
  If you just want to show the standard countdown player that YouTube provides, don't use this feature.
3968
- <strong>NOTE: Turning this on for direct-link live streams uses a significant amount of your YouTube API quota. We suggest unchecking it if your site has high traffic. If you chose to use this feature, do not put another live stream embed below.</strong>
3969
  </label>
3970
  <br>
3971
  <br>
3972
  <input name="<?php echo self::$opt_not_live_on_channel; ?>" id="<?php echo self::$opt_not_live_on_channel; ?>" <?php checked($all[self::$opt_not_live_on_channel], 1); ?> type="checkbox" class="checkbox">
3973
- <label for="<?php echo self::$opt_not_live_on_channel; ?>"><span class="chktitle">Turn on for <b>channel</b> live streams:</span> <sup class="orange">beta</sup>
3974
  If your live stream embed is channel-based, YouTube might show an error message if there is no upcoming or currently streaming video from your channel.
3975
  Instead of showing an error, you can display some "coming soon" content in that space for your visitors to see until you've scheduled a live stream or premiere
3976
  (Once you've scheduled something, YouTube will display the usual countdown until the stream happens).
3977
  In the <em>"Not Live" Fallback Content</em> box below, enter what you would like to appear when nothing is playing or scheduled to play yet on your channel.
3978
  You can even insert shortcodes from our plugin into the box below (shortcodes from other plugins may or may not work correctly).
3979
- <strong>NOTE: This feature for channel live streams is experimental, but it will preserve your API quota. We recommend trying this instead of the direct-link option, to see if it works for your site. We hope to improve this feature over time.</strong>
3980
  </label>
3981
  <div class="p not-live-content">
3982
  <p>
@@ -4445,7 +4467,13 @@ class YouTubePrefs
4445
  It may print out some diagnostic info so that we can help you solve your issue.
4446
  </label>
4447
  </p>
4448
-
 
 
 
 
 
 
4449
  </div>
4450
 
4451
 
@@ -4499,7 +4527,7 @@ class YouTubePrefs
4499
  </h3>
4500
  <p>
4501
  Suppose you have a few videos that need to be different from the above defaults. You can add options to the end of a link as displayed below to override the above defaults. Each option should begin with '&'.
4502
- <br><span class="orange">PRO users: You can use the big <a href="<?php echo self::$epbase . '/dashboard/pro-easy-video-analytics.aspx?ref=manual' ?>" target="_blank">customize</a> buttons that you will see inside the wizard, instead of memorizing the following codes.</span>
4503
  </p>
4504
  <?php
4505
  _e('<ul class="reglist">');
@@ -4713,7 +4741,15 @@ class YouTubePrefs
4713
  <h2>Plugin Support</h2>
4714
 
4715
  <div id="nonprosupport">
4716
- We've found that a common support request has been from users that are pasting video links on single lines, as required, but are not seeing the video embed show up. One of these suggestions is usually the fix:
 
 
 
 
 
 
 
 
4717
  <ul class="reglist">
4718
  <li>Make sure the URL is really on its own line by itself. Or, if you need multiple videos on the same line, make sure each URL is wrapped properly with the shortcode (Example: <code>[embedyt]http://www.youtube.com/watch?v=ABCDEFGHIJK&width=400&height=250[/embedyt]</code>)</li>
4719
  <li>Make sure the URL is not an active hyperlink (i.e., it should just be plain text). Otherwise, highlight the URL and click the "unlink" button in your editor: <img src="<?php echo plugins_url('images/unlink.png', __FILE__) ?>"/>.</li>
@@ -5079,6 +5115,7 @@ class YouTubePrefs
5079
  $new_options[self::$opt_glance] = self::postchecked(self::$opt_glance) ? 1 : 0;
5080
  $new_options[self::$opt_autoplay] = self::postchecked(self::$opt_autoplay) ? 1 : 0;
5081
  $new_options[self::$opt_debugmode] = self::postchecked(self::$opt_debugmode) ? 1 : 0;
 
5082
  $new_options[self::$opt_admin_off_scripts] = self::postchecked(self::$opt_admin_off_scripts) ? 1 : 0;
5083
  $new_options[self::$opt_defer_js] = self::postchecked(self::$opt_defer_js) ? 1 : 0;
5084
  $new_options[self::$opt_defer_jquery] = self::postchecked(self::$opt_defer_jquery) ? 1 : 0;
@@ -5596,6 +5633,17 @@ class YouTubePrefs
5596
  <button type="button" class="button-secondary ytprefs-ob-nav-close">Cancel</button>
5597
  <button type="button" disabled class="button-primary ytprefs-ob-nav-next">Next &raquo;</button>
5598
  </div>
 
 
 
 
 
 
 
 
 
 
 
5599
  </div>
5600
  </div>
5601
  <div class="ytprefs-ob-step ytprefs-ob-step2">
3
  Plugin Name: Embed Plus Plugin for YouTube
4
  Plugin URI: https://www.embedplus.com/dashboard/pro-easy-video-analytics.aspx?ref=plugin
5
  Description: YouTube Embed Plugin. Embed a YouTube channel gallery, playlist gallery, YouTube live stream. Lite embeds with defer JavaScript and facade options
6
+ Version: 14.1.1
7
  Author: Embed Plus for YouTube Team
8
  Author URI: https://www.embedplus.com
9
  Requires at least: 4.5
 
10
  */
11
 
12
  /*
35
 
36
  public static $folder_name = 'youtube-embed-plus';
37
  public static $curltimeout = 30;
38
+ public static $version = '14.1.1';
39
  public static $opt_version = 'version';
40
  public static $optembedwidth = null;
41
  public static $optembedheight = null;
46
  public static $opt_glance = 'glance';
47
  public static $opt_autoplay = 'autoplay';
48
  public static $opt_debugmode = 'debugmode';
49
+ public static $opt_uninstall_data = 'uninstall_data';
50
  public static $opt_old_script_method = 'old_script_method';
51
  public static $opt_cc_load_policy = 'cc_load_policy';
52
  public static $opt_cc_lang_pref = 'cc_lang_pref';
720
  $step1_live_errors = '';
721
  $step1_live_error_invalid = 'Sorry, that does not seem to be a valid link to an existing live video. ' . $step1_api_error_msg;
722
  $step1_livechannel_errors = '';
723
+ $step1_livechannel_error_invalid = __('Sorry, that does not seem to be a link to an existing channel. Note: the custom channel name will not work. Please enter either a) the official channel format shown above, or b) any any single video belonging to the channel and the plugin can retrieve the official channel format for you.', 'text_domain');
724
 
725
  $if_live_preview = false;
726
 
1039
  {
1040
  throw new Exception();
1041
  }
1042
+ if (preg_match(self::$justurlregex, $search) || preg_match('@/channel/(.+)@', $search))
1043
  {
1044
  try
1045
  {
1046
  $thechannelid = null;
1047
+ if (preg_match(self::$justurlregex, $search))
 
 
 
1048
  {
1049
+ // single id
1050
+ $theytid = null;
1051
+ try
1052
+ {
1053
+ $theytid = self::try_get_ytid($search);
1054
+ }
1055
+ catch (Exception $ex)
1056
+ {
1057
+
1058
+ }
1059
+ $chanvid = null;
1060
+ if ($theytid)
1061
+ {
1062
+ $chanvid = self::get_video_snippet($theytid);
1063
+ }
1064
+ if ($chanvid)
1065
+ {
1066
+ $thechannelid = $chanvid->snippet->channelId;
1067
+ }
1068
+ }
1069
+ else
1070
+ {
1071
+ // channel id
1072
+ $chanmatch = array();
1073
+ preg_match('@/channel/(.+)@', $search, $chanmatch);
1074
+ if (!empty($chanmatch))
1075
+ {
1076
+ $thechannelid = $chanmatch[1];
1077
+ }
1078
  }
1079
  if (!empty($thechannelid))
1080
  {
1198
  }
1199
  ?>
1200
  <p>
1201
+ <?php _e('<strong>Is your live stream not working?</strong> Read more here: <a href="https://support.google.com/youtube/answer/2474026?hl=en" target="_blank">https://support.google.com/youtube/answer/2474026?hl=en</a>', 'text_domain'); ?>
 
 
 
1202
  </p>
1203
  </div>
1204
  <?php
1343
  else
1344
  {
1345
  ?>
 
 
 
 
 
 
 
1346
  <div class="livestream-tabs">
1347
  <ul>
1348
  <li><a href="#livestream-tabs-2">Channel-based livestream (recommended)<sup class="orange">new</sup></a></li>
1370
  </div>
1371
  <div id="livestream-tabs-2">
1372
  <p>
1373
+ <?php _e('This will embed a video that will automatically display the next upcoming live stream from a channel. You have 2 choices:', 'text_domain'); ?>
1374
  </p>
1375
+ <ol>
1376
+ <li>
1377
+ <?php _e('Enter the link to the official channel page below (note the word "channel" should be in the link, with a long ID afterward).<br>Example', 'text_domain'); ?>: https://www.youtube.com/<strong>channel</strong>/UCL0iAkpqV5YaIVG7xkDtS4Q
1378
+ </li>
1379
+ <li>
1380
+ <?php _e('Or, if you do not know where to find the above format, you can enter any single video that is owned by the channel, and the plugin can retrieve the above format for you.<br>Example', 'text_domain'); ?>: https://www.youtube.com/watch?<strong>v=3tXY8YSIxHM</strong>
1381
+ </li>
1382
+ </ol>
1383
  <form name="wizform_livechannel" method="post" action="" class="wizform" id="wizform_livechannel">
1384
  <?php wp_nonce_field('_epyt_wiz', '_epyt_nonce', true); ?>
1385
  <div class="center txt-button-align">
1958
  $_not_live_on = 0;
1959
  $_not_live_on_channel = 0;
1960
  $_debugmode = 0;
1961
+ $_uninstall_data = 0;
1962
  $_admin_off_scripts = 0;
1963
  $_defer_js = 0;
1964
  $_defer_jquery = 0;
1989
  $_glance = self::tryget($arroptions, self::$opt_glance, $_glance);
1990
  $_autoplay = self::tryget($arroptions, self::$opt_autoplay, 0);
1991
  $_debugmode = self::tryget($arroptions, self::$opt_debugmode, 0);
1992
+ $_uninstall_data = self::tryget($arroptions, self::$opt_uninstall_data, 0);
1993
  $_old_script_method = self::tryget($arroptions, self::$opt_old_script_method, 0);
1994
  $_cc_load_policy = self::tryget($arroptions, self::$opt_cc_load_policy, 0);
1995
  $_cc_lang_pref = self::tryget($arroptions, self::$opt_cc_lang_pref, $_cc_lang_pref);
1999
  $_rel = self::tryget($arroptions, self::$opt_rel, 1);
2000
  $_fs = self::tryget($arroptions, self::$opt_fs, 1);
2001
  $_playsinline = self::tryget($arroptions, self::$opt_playsinline, 0);
2002
+ $_origin = self::tryget($arroptions, self::$opt_origin, 1);
2003
  $_hl = self::tryget($arroptions, self::$opt_hl, '');
2004
  $_dohl = self::tryget($arroptions, self::$opt_dohl, 0);
2005
  $_theme = self::tryget($arroptions, self::$opt_theme, 'dark');
2155
  self::$opt_not_live_on => $_not_live_on,
2156
  self::$opt_not_live_on_channel => $_not_live_on_channel,
2157
  self::$opt_debugmode => $_debugmode,
2158
+ self::$opt_uninstall_data => $_uninstall_data,
2159
  self::$opt_admin_off_scripts => $_admin_off_scripts,
2160
  self::$opt_defer_js => $_defer_js,
2161
  self::$opt_defer_jquery => $_defer_jquery,
2855
  if ($iscontent && !$isoverride && $finalparams[self::$opt_gb_compat] == 1 && current_theme_supports('responsive-embeds'))// self::using_gutenberg())
2856
  {
2857
  // don't do the following if: overriding default YT, is widget
2858
+ $begin_gb_wrapper = '<figure class="wp-block-embed wp-block-embed-youtube is-type-video is-provider-youtube epyt-figure"><div class="wp-block-embed__wrapper">';
2859
  //wp-block-embed-youtube is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio
2860
  $end_gb_wrapper = '</div></figure>';
2861
  }
3262
  $new_pointer_content = '<h3>' . __('New Update') . '</h3>'; // ooopointer
3263
 
3264
  $new_pointer_content .= '<p>'; // ooopointer
3265
+ $new_pointer_content .= "This update has more compatibility for WordPress 6.0, adds easier live stream embedding, and allows for cleaner uninstalls for both free and <a target=_blank href=" . self::$epbase . '/dashboard/pro-easy-video-analytics.aspx?ref=frompointer' . ">Pro versions</a>.";
3266
  if (self::vi_logged_in())
3267
  {
3268
  $new_pointer_content .= "<br><br><strong>Note:</strong> You are currently logged into the vi intelligence feature. vi support is being deprecated in the next version, so we recommend taking the vi ads down from your site. Please contact ext@embedplus.com for questions.";
3987
  The plugin will automatically switch to your video's live stream or premiere once it's active. In the <em>"Not Live" Fallback Content</em> box below, enter what you would like to appear until then.
3988
  You can even insert shortcodes from our plugin into the box below (shortcodes from other plugins may or may not work correctly).
3989
  If you just want to show the standard countdown player that YouTube provides, don't use this feature.
3990
+ <strong>NOTE: Turning this on for direct-link live streams uses a significant amount of your YouTube API quota. We suggest unchecking it if your site has high traffic. If you chose to use this feature, do <u>not</u> put another live stream embed below.</strong>
3991
  </label>
3992
  <br>
3993
  <br>
3994
  <input name="<?php echo self::$opt_not_live_on_channel; ?>" id="<?php echo self::$opt_not_live_on_channel; ?>" <?php checked($all[self::$opt_not_live_on_channel], 1); ?> type="checkbox" class="checkbox">
3995
+ <label for="<?php echo self::$opt_not_live_on_channel; ?>"><span class="chktitle">Turn on for <b>channel</b> live streams: <sup class="orange">beta</sup></span>
3996
  If your live stream embed is channel-based, YouTube might show an error message if there is no upcoming or currently streaming video from your channel.
3997
  Instead of showing an error, you can display some "coming soon" content in that space for your visitors to see until you've scheduled a live stream or premiere
3998
  (Once you've scheduled something, YouTube will display the usual countdown until the stream happens).
3999
  In the <em>"Not Live" Fallback Content</em> box below, enter what you would like to appear when nothing is playing or scheduled to play yet on your channel.
4000
  You can even insert shortcodes from our plugin into the box below (shortcodes from other plugins may or may not work correctly).
4001
+ <strong>NOTE: This feature for channel live streams is experimental, but it will preserve your API quota. We recommend trying this instead of the direct-link option, to see if it works for your site. We hope to improve this feature over time. If you chose to use this feature, do <u>not</u> put another live stream embed below.</strong>
4002
  </label>
4003
  <div class="p not-live-content">
4004
  <p>
4467
  It may print out some diagnostic info so that we can help you solve your issue.
4468
  </label>
4469
  </p>
4470
+ <p>
4471
+ <input name="<?php echo self::$opt_uninstall_data; ?>" id="<?php echo self::$opt_uninstall_data; ?>" <?php checked($all[self::$opt_uninstall_data], 1); ?> type="checkbox" class="checkbox">
4472
+ <label for="<?php echo self::$opt_uninstall_data; ?>">
4473
+ <b class="chktitle">Delete Options When Uninstalling: <sup class="orange">new</sup></b> Checking this box will permanently delete your options the next time you uninstall the plugin. Leave it unchecked
4474
+ to preserve your options between installations.
4475
+ </label>
4476
+ </p>
4477
  </div>
4478
 
4479
 
4527
  </h3>
4528
  <p>
4529
  Suppose you have a few videos that need to be different from the above defaults. You can add options to the end of a link as displayed below to override the above defaults. Each option should begin with '&'.
4530
+ <br><span class="orange">PRO users: You can use the <a href="<?php echo self::$epbase . '/dashboard/pro-easy-video-analytics.aspx?ref=manual' ?>" target="_blank">customize</a> buttons that you will see inside the wizard, instead of memorizing the following codes.</span>
4531
  </p>
4532
  <?php
4533
  _e('<ul class="reglist">');
4741
  <h2>Plugin Support</h2>
4742
 
4743
  <div id="nonprosupport">
4744
+ <p>
4745
+ Here is a short video explaining a few of the plugin's features:
4746
+ </p>
4747
+ <div class="epyt-fitvid">
4748
+ <iframe src="https://www.youtube.com/embed/QDdvXBqfrzM?rel=0" allowfullscreen="" frameborder="0"></iframe>
4749
+ </div>
4750
+ <p>
4751
+ We've also found that a common support request has been from users that are pasting video links on single lines, as required, but are not seeing the video embed show up. One of these suggestions is usually the fix:
4752
+ </p>
4753
  <ul class="reglist">
4754
  <li>Make sure the URL is really on its own line by itself. Or, if you need multiple videos on the same line, make sure each URL is wrapped properly with the shortcode (Example: <code>[embedyt]http://www.youtube.com/watch?v=ABCDEFGHIJK&width=400&height=250[/embedyt]</code>)</li>
4755
  <li>Make sure the URL is not an active hyperlink (i.e., it should just be plain text). Otherwise, highlight the URL and click the "unlink" button in your editor: <img src="<?php echo plugins_url('images/unlink.png', __FILE__) ?>"/>.</li>
5115
  $new_options[self::$opt_glance] = self::postchecked(self::$opt_glance) ? 1 : 0;
5116
  $new_options[self::$opt_autoplay] = self::postchecked(self::$opt_autoplay) ? 1 : 0;
5117
  $new_options[self::$opt_debugmode] = self::postchecked(self::$opt_debugmode) ? 1 : 0;
5118
+ $new_options[self::$opt_uninstall_data] = self::postchecked(self::$opt_uninstall_data) ? 1 : 0;
5119
  $new_options[self::$opt_admin_off_scripts] = self::postchecked(self::$opt_admin_off_scripts) ? 1 : 0;
5120
  $new_options[self::$opt_defer_js] = self::postchecked(self::$opt_defer_js) ? 1 : 0;
5121
  $new_options[self::$opt_defer_jquery] = self::postchecked(self::$opt_defer_jquery) ? 1 : 0;
5633
  <button type="button" class="button-secondary ytprefs-ob-nav-close">Cancel</button>
5634
  <button type="button" disabled class="button-primary ytprefs-ob-nav-next">Next &raquo;</button>
5635
  </div>
5636
+ <h2>
5637
+ Intro Video
5638
+ </h2>
5639
+ <p>
5640
+ Want a quick visual overview? Here's a preview of some of the free features of the plugin.
5641
+ </p>
5642
+ <div class="epyt-fitvid">
5643
+ <iframe src="https://www.youtube.com/embed/QDdvXBqfrzM?rel=0" allowfullscreen="" frameborder="0"></iframe>
5644
+ </div>
5645
+ <p>
5646
+ </p>
5647
  </div>
5648
  </div>
5649
  <div class="ytprefs-ob-step ytprefs-ob-step2">