From e975c8a3449cb8c794e4e6d9595bf0b6444b29bc Mon Sep 17 00:00:00 2001 From: Emilien Devos <4016501+unixfox@users.noreply.github.com> Date: Mon, 19 Feb 2024 23:59:35 +0100 Subject: [PATCH 1/5] initial working version --- assets/css/player.css | 4 +-- assets/js/player.js | 23 +++++++++++---- src/invidious/routes/api/manifest.cr | 2 +- .../views/components/player_sources.ecr | 5 +--- videojs-dependencies.yml | 28 +++++++++---------- 5 files changed, 36 insertions(+), 26 deletions(-) diff --git a/assets/css/player.css b/assets/css/player.css index 50c7a7487..cdfbdf7fe 100644 --- a/assets/css/player.css +++ b/assets/css/player.css @@ -106,7 +106,7 @@ ul.vjs-menu-content::-webkit-scrollbar { } .vjs-quality-selector, -.video-js .vjs-http-source-selector { +.video-js .vjs-quality-menu-wrapper { order: 4; } @@ -218,7 +218,7 @@ ul.vjs-menu-content::-webkit-scrollbar { } .player-dimensions.vjs-fluid { - padding-top: 82vh; + padding-top: 82vh !important; } video.video-js { diff --git a/assets/js/player.js b/assets/js/player.js index 71c5e7da8..ef1a0ca6b 100644 --- a/assets/js/player.js +++ b/assets/js/player.js @@ -19,6 +19,7 @@ var options = { 'captionsButton', 'audioTrackButton', 'qualitySelector', + 'QualityMenuButton', 'playbackRateMenuButton', 'fullscreenToggle' ] @@ -157,6 +158,16 @@ player.on('timeupdate', function () { elem_iv_other.href = addCurrentTimeToURL(base_url_iv_other, domain); }); +player.one('playing', function () { + + if (!video_data.params.listen && video_data.params.quality === 'dash') { + var quality_menu_button = document.getElementsByClassName('vjs-quality-menu-button'); + for (var i = 0; i < quality_menu_button.length; i++) { + quality_menu_button[i].className += ' vjs-icon-cog'; + } + } +}); + var shareOptions = { socials: ['fbFeed', 'tw', 'reddit', 'email'], @@ -226,8 +237,9 @@ if (isMobile()) { operations_bar_element.append(share_element); if (!video_data.params.listen && video_data.params.quality === 'dash') { - var http_source_selector = document.getElementsByClassName('vjs-http-source-selector vjs-menu-button')[0]; + var http_source_selector = document.getElementsByClassName('vjs-quality-menu-button vjs-menu-button')[0]; operations_bar_element.append(http_source_selector); + } }); } @@ -386,7 +398,7 @@ if (video_data.params.autoplay) { } if (!video_data.params.listen && video_data.params.quality === 'dash') { - player.httpSourceSelector(); + var qualityMenuOptions = {} if (video_data.params.quality_dash !== 'auto') { player.ready(function () { @@ -409,12 +421,13 @@ if (!video_data.params.listen && video_data.params.quality === 'dash') { break; } } - qualityLevels.forEach(function (level, index) { - level.enabled = (index === targetQualityLevel); - }); + qualityMenuOptions.defaultResolution = (qualityLevels[targetQualityLevel].height + "p"); }); }); } + + console.log(qualityMenuOptions) + player.qualityMenu(qualityMenuOptions); } player.vttThumbnails({ diff --git a/src/invidious/routes/api/manifest.cr b/src/invidious/routes/api/manifest.cr index d89e752cd..5de0628d4 100644 --- a/src/invidious/routes/api/manifest.cr +++ b/src/invidious/routes/api/manifest.cr @@ -82,7 +82,7 @@ module Invidious::Routes::API::Manifest xml.element("Role", schemeIdUri: "urn:mpeg:dash:role:2011", value: i == 0 ? "main" : "alternate") - xml.element("Representation", id: fmt["itag"], codecs: codecs, bandwidth: bandwidth) do + xml.element("Representation", id: fmt["itag"].as_i + rand(100), codecs: codecs, bandwidth: bandwidth) do xml.element("AudioChannelConfiguration", schemeIdUri: "urn:mpeg:dash:23003:3:audio_channel_configuration:2011", value: "2") xml.element("BaseURL") { xml.text url } diff --git a/src/invidious/views/components/player_sources.ecr b/src/invidious/views/components/player_sources.ecr index 9af3899c4..ae3c92e45 100644 --- a/src/invidious/views/components/player_sources.ecr +++ b/src/invidious/views/components/player_sources.ecr @@ -1,7 +1,5 @@ - - @@ -9,9 +7,8 @@ - + - diff --git a/videojs-dependencies.yml b/videojs-dependencies.yml index e9ccc9dde..4a1fa7da5 100644 --- a/videojs-dependencies.yml +++ b/videojs-dependencies.yml @@ -1,35 +1,35 @@ -# Due to a 'video append of' error (see #3011), we're stuck on 7.12.1. +# find the checksum of latest version using npm view package video.js: - version: 7.12.1 - shasum: 1d12eeb1f52e3679e8e4c987d9b9eb37e2247fa2 + version: 8.10.0 + shasum: 603a49909ef33f839264da8b73513f9daf592b57 videojs-contrib-quality-levels: - version: 2.1.0 - shasum: 046e9e21ed01043f512b83a1916001d552457083 + version: 4.0.0 + shasum: faa8096594cdbfc3ccbefe8572fc20531ba23f3d -videojs-http-source-selector: - version: 1.1.6 - shasum: 073aadbea0106ba6c98d6b611094dbf8554ffa1f +videojs-contrib-quality-menu: + version: 1.0.0 + shasum: f5e8f855358e20854de23d7607634b5aabf4e9ac videojs-markers: version: 1.0.1 shasum: d7f8d804253fd587813271f8db308a22b9f7df34 videojs-mobile-ui: - version: 0.6.1 - shasum: 0e146c4c481cbee0729cb5e162e558b455562cd0 + version: 1.1.1 + shasum: 6b5e75df36cf688906b3662070399b23da9e8e06 videojs-overlay: - version: 2.1.4 - shasum: 5a103b25374dbb753eb87960d8360c2e8f39cc05 + version: 3.1.0 + shasum: d57505d375eca952feeb36e5b33e0a130e3dc9e0 videojs-share: version: 3.2.1 shasum: 0a3024b981387b9d21c058c829760a72c14b8ceb videojs-vr: - version: 1.8.0 - shasum: 7f2f07f760d8a329c615acd316e49da6ee8edd34 + version: 2.0.0 + shasum: 3d86e3fececf7373cfb89b950ed6ab77ca783d2b videojs-vtt-thumbnails: version: 0.0.13 From 44df12fdfef99873af8ceb2b592b117fed9af938 Mon Sep 17 00:00:00 2001 From: Emilien Devos <4016501+unixfox@users.noreply.github.com> Date: Sun, 28 Apr 2024 17:46:20 +0200 Subject: [PATCH 2/5] update deps + fix videojs-contrib-quality-menu quality selection --- assets/css/quality-selector.css | 2 +- assets/js/player.js | 10 ++++------ assets/js/silvermine-videojs-quality-selector.min.js | 4 ++-- videojs-dependencies.yml | 10 +++++----- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/assets/css/quality-selector.css b/assets/css/quality-selector.css index f3cc03341..575aa365f 100644 --- a/assets/css/quality-selector.css +++ b/assets/css/quality-selector.css @@ -1 +1 @@ -.vjs-quality-selector .vjs-menu-button{margin:0;padding:0;height:100%;width:100%}.vjs-quality-selector .vjs-icon-placeholder{font-family:'VideoJS';font-weight:normal;font-style:normal}.vjs-quality-selector .vjs-icon-placeholder:before{content:'\f110'}.vjs-quality-changing .vjs-big-play-button{display:none}.vjs-quality-changing .vjs-control-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:visible;opacity:1} +.vjs-quality-selector .vjs-menu-button{margin:0;padding:0;height:100%;width:100%}.vjs-quality-selector .vjs-icon-placeholder{font-family:"VideoJS";font-weight:normal;font-style:normal}.video-js:not(.vjs-v8) .vjs-quality-selector .vjs-icon-placeholder::before{content:""}.vjs-v8 .vjs-quality-selector .vjs-icon-placeholder::before{content:""}.vjs-quality-changing .vjs-big-play-button{display:none}.vjs-quality-changing .vjs-control-bar{display:flex;visibility:visible;opacity:1} \ No newline at end of file diff --git a/assets/js/player.js b/assets/js/player.js index ef1a0ca6b..c87ae4fa7 100644 --- a/assets/js/player.js +++ b/assets/js/player.js @@ -43,7 +43,7 @@ embed_url = location.origin + '/embed/' + video_data.id + embed_url.search; var save_player_pos_key = 'save_player_pos'; -videojs.Vhs.xhr.beforeRequest = function(options) { +videojs.Vhs.xhr.onRequest = function(options) { // set local if requested not videoplayback if (!options.uri.includes('videoplayback')) { if (!options.uri.includes('local=true')) @@ -398,7 +398,6 @@ if (video_data.params.autoplay) { } if (!video_data.params.listen && video_data.params.quality === 'dash') { - var qualityMenuOptions = {} if (video_data.params.quality_dash !== 'auto') { player.ready(function () { @@ -421,13 +420,12 @@ if (!video_data.params.listen && video_data.params.quality === 'dash') { break; } } - qualityMenuOptions.defaultResolution = (qualityLevels[targetQualityLevel].height + "p"); + player.qualityMenu({ + defaultResolution: qualityLevels[targetQualityLevel].height + }); }); }); } - - console.log(qualityMenuOptions) - player.qualityMenu(qualityMenuOptions); } player.vttThumbnails({ diff --git a/assets/js/silvermine-videojs-quality-selector.min.js b/assets/js/silvermine-videojs-quality-selector.min.js index 1877047dc..9a1f10d53 100644 --- a/assets/js/silvermine-videojs-quality-selector.min.js +++ b/assets/js/silvermine-videojs-quality-selector.min.js @@ -1,4 +1,4 @@ -/*! @silvermine/videojs-quality-selector 2022-04-13 v1.1.2-43-gaa06e72-dirty */ +/*! @silvermine/videojs-quality-selector 2024-04-28 v1.1.2-88-g294c48d-dirty */ -!function u(o,c,a){function l(e,n){if(!c[e]){if(!o[e]){var t="function"==typeof require&&require;if(!n&&t)return t(e,!0);if(s)return s(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var i=c[e]={exports:{}};o[e][0].call(i.exports,function(n){return l(o[e][1][n]||n)},i,i.exports,u,o,c,a)}return c[e].exports}for(var s="function"==typeof require&&require,n=0;n":">",'"':""","'":"'","`":"`"},W=h.invert(P);h.escape=D(P),h.unescape=D(W),h.result=function(n,e,t){h.isArray(e)||(e=[e]);var r=e.length;if(!r)return h.isFunction(t)?t.call(n):t;for(var i=0;i/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};function Y(n){return"\\"+K[n]}var z=/(.)^/,K={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},G=/\\|'|\r|\n|\u2028|\u2029/g;h.template=function(u,n,e){!n&&e&&(n=e),n=h.defaults({},n,h.templateSettings);var t,r=RegExp([(n.escape||z).source,(n.interpolate||z).source,(n.evaluate||z).source].join("|")+"|$","g"),o=0,c="__p+='";u.replace(r,function(n,e,t,r,i){return c+=u.slice(o,i).replace(G,Y),o=i+n.length,e?c+="'+\n((__t=("+e+"))==null?'':_.escape(__t))+\n'":t?c+="'+\n((__t=("+t+"))==null?'':__t)+\n'":r&&(c+="';\n"+r+"\n__p+='"),n}),c+="';\n",n.variable||(c="with(obj||{}){\n"+c+"}\n"),c="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+c+"return __p;\n";try{t=new Function(n.variable||"obj","_",c)}catch(n){throw n.source=c,n}function i(n){return t.call(this,n,h)}var a=n.variable||"obj";return i.source="function("+a+"){\n"+c+"}",i},h.chain=function(n){var e=h(n);return e._chain=!0,e};function H(n,e){return n._chain?h(e).chain():e}h.mixin=function(t){return h.each(h.functions(t),function(n){var e=h[n]=t[n];h.prototype[n]=function(){var n=[this._wrapped];return i.apply(n,arguments),H(this,e.apply(h,n))}}),h},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=r[e];h.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!==e&&"splice"!==e||0!==n.length||delete n[0],H(this,n)}}),h.each(["concat","join","slice"],function(n){var e=r[n];h.prototype[n]=function(){return H(this,e.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},h.prototype.valueOf=h.prototype.toJSON=h.prototype.value,h.prototype.toString=function(){return String(this._wrapped)},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}()}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(n,e,t){"use strict";var i=n("underscore"),u=n("../events");e.exports=function(n){var r=n.getComponent("MenuItem");return n.extend(r,{constructor:function(n,e){var t=e.source;if(!i.isObject(t))throw new Error('was not provided a "source" object, but rather: '+typeof t);e=i.extend({selectable:!0,label:t.label},e),r.call(this,n,e),this.source=t},handleClick:function(n){r.prototype.handleClick.call(this,n),this.player().trigger(u.QUALITY_REQUESTED,this.source)}})}},{"../events":5,underscore:2}],4:[function(n,e,t){"use strict";var i=n("underscore"),u=n("../events"),o=n("./QualityOption"),c="vjs-quality-changing";e.exports=function(n){var e,r=n.getComponent("MenuButton"),t=o(n);return e=n.extend(r,{constructor:function(t,n){r.call(this,t,n),t.on(u.QUALITY_REQUESTED,function(n,e){this.setSelectedSource(e),t.addClass(c),t.one("loadeddata",function(){t.removeClass(c)})}.bind(this)),t.on(u.PLAYER_SOURCES_CHANGED,function(){this.update()}.bind(this)),t.on(u.QUALITY_SELECTED,function(n,e){this.setSelectedSource(e)}.bind(this)),t.one("ready",function(){this.selectedSrc=t.src(),this.update()}.bind(this)),this.controlText("Open quality selector menu")},setSelectedSource:function(n){var e=n?n.src:void 0;this.selectedSrc!==e&&(this.selectedSrc=e,i.each(this.items,function(n){n.selected(n.source.src===e)}))},createItems:function(){var e=this.player(),n=e.currentSources();return n=n.filter(function(n){return null==n.hidequalityoption}),i.map(n,function(n){return new t(e,{source:n,selected:n.src===this.selectedSrc})}.bind(this))},buildWrapperCSSClass:function(){return"vjs-quality-selector "+r.prototype.buildWrapperCSSClass.call(this)}}),n.registerComponent("QualitySelector",e),e}},{"../events":5,"./QualityOption":3,underscore:2}],5:[function(n,e,t){"use strict";e.exports={QUALITY_REQUESTED:"qualityRequested",QUALITY_SELECTED:"qualitySelected",PLAYER_SOURCES_CHANGED:"playerSourcesChanged"}},{}],6:[function(n,e,t){"use strict";var c=n("underscore"),r=n("./events"),i=n("./components/QualitySelector"),u=n("./middleware/SourceInterceptor"),a=n("./util/SafeSeek");e.exports=function(n){n=n||window.videojs,i(n),u(n),n.hook("setup",function(o){o.on(r.QUALITY_REQUESTED,function(n,e){var t=o.currentSources(),r=o.currentTime(),i=o.playbackRate(),u=o.paused();c.each(t,function(n){n.selected=!1}),c.findWhere(t,{src:e.src}).selected=!0,o._qualitySelectorSafeSeek&&o._qualitySelectorSafeSeek.onQualitySelectionChange(),o.src(t),o.ready(function(){o._qualitySelectorSafeSeek&&!o._qualitySelectorSafeSeek.hasFinished()||(o._qualitySelectorSafeSeek=new a(o,r),o.playbackRate(i)),u||o.play()})})})},e.exports.EVENTS=r},{"./components/QualitySelector":4,"./events":5,"./middleware/SourceInterceptor":7,"./util/SafeSeek":9,underscore:2}],7:[function(n,e,t){"use strict";var u=n("underscore"),o=n("../events");e.exports=function(n){n.use("*",function(i){return{setSource:function(n,e){var t,r=i.currentSources();i._qualitySelectorSafeSeek&&i._qualitySelectorSafeSeek.onPlayerSourcesChange(),u.isEqual(r,i._qualitySelectorPreviousSources)||(i.trigger(o.PLAYER_SOURCES_CHANGED,r),i._qualitySelectorPreviousSources=r),t=u.find(r,function(n){return!0===n.selected||"true"===n.selected||"selected"===n.selected})||n,i.trigger(o.QUALITY_SELECTED,t),e(null,t)}}})}},{"../events":5,underscore:2}],8:[function(n,e,t){"use strict";n("./index")()},{"./index":6}],9:[function(n,e,t){"use strict";var r=n("class.extend");e.exports=r.extend({init:function(n,e){this._player=n,this._seekToTime=e,this._hasFinished=!1,this._keepThisInstanceWhenPlayerSourcesChange=!1,this._seekWhenSafe()},_seekWhenSafe:function(){this._player.readyState()<3?(this._seekFn=this._seek.bind(this),this._player.one("canplay",this._seekFn)):this._seek()},onPlayerSourcesChange:function(){this._keepThisInstanceWhenPlayerSourcesChange?this._keepThisInstanceWhenPlayerSourcesChange=!1:this.cancel()},onQualitySelectionChange:function(){this.hasFinished()||(this._keepThisInstanceWhenPlayerSourcesChange=!0)},_seek:function(){this._player.currentTime(this._seekToTime),this._keepThisInstanceWhenPlayerSourcesChange=!1,this._hasFinished=!0},hasFinished:function(){return this._hasFinished},cancel:function(){this._player.off("canplay",this._seekFn),this._keepThisInstanceWhenPlayerSourcesChange=!1,this._hasFinished=!0}})},{"class.extend":1}]},{},[8]); +!function r(o,i,a){function u(e,n){if(!i[e]){if(!o[e]){var t="function"==typeof require&&require;if(!n&&t)return t(e,!0);if(c)return c(e,!0);throw(t=new Error("Cannot find module '"+e+"'")).code="MODULE_NOT_FOUND",t}t=i[e]={exports:{}},o[e][0].call(t.exports,function(n){return u(o[e][1][n]||n)},t,t.exports,r,o,i,a)}return i[e].exports}for(var c="function"==typeof require&&require,n=0;n"+n+""}var i,a=n("../internals/an-object"),u=n("../internals/object-define-properties"),c=n("../internals/enum-bug-keys"),s=n("../internals/hidden-keys"),l=n("../internals/html"),f=n("../internals/document-create-element"),n=n("../internals/shared-key"),p="prototype",y="script",h=n("IE_PROTO"),d=function(){try{i=document.domain&&new ActiveXObject("htmlfile")}catch(n){}var n;d=i?function(n){n.write(o("")),n.close();var e=n.parentWindow.Object;return n=null,e}(i):((n=f("iframe")).style.display="none",l.appendChild(n),n.src=String("javascript:"),(n=n.contentWindow.document).open(),n.write(o("document.F=Object")),n.close(),n.F);for(var e=c.length;e--;)delete d[p][c[e]];return d()};s[h]=!0,e.exports=Object.create||function(n,e){var t;return null!==n?(r[p]=a(n),t=new r,r[p]=null,t[h]=n):t=d(),void 0===e?t:u(t,e)}},{"../internals/an-object":2,"../internals/document-create-element":13,"../internals/enum-bug-keys":17,"../internals/hidden-keys":25,"../internals/html":26,"../internals/object-define-properties":38,"../internals/shared-key":52}],38:[function(n,e,t){var r=n("../internals/descriptors"),a=n("../internals/object-define-property"),u=n("../internals/an-object"),c=n("../internals/object-keys");e.exports=r?Object.defineProperties:function(n,e){u(n);for(var t,r=c(e),o=r.length,i=0;io;)a(r,t=e[o++])&&(~c(i,t)||i.push(t));return i}},{"../internals/array-includes":3,"../internals/has":24,"../internals/hidden-keys":25,"../internals/to-indexed-object":56}],45:[function(n,e,t){var r=n("../internals/object-keys-internal"),o=n("../internals/enum-bug-keys");e.exports=Object.keys||function(n){return r(n,o)}},{"../internals/enum-bug-keys":17,"../internals/object-keys-internal":44}],46:[function(n,e,t){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);t.f=i?function(n){n=o(this,n);return!!n&&n.enumerable}:r},{}],47:[function(n,e,t){var r=n("../internals/get-built-in"),o=n("../internals/object-get-own-property-names"),i=n("../internals/object-get-own-property-symbols"),a=n("../internals/an-object");e.exports=r("Reflect","ownKeys")||function(n){var e=o.f(a(n)),t=i.f;return t?e.concat(t(n)):e}},{"../internals/an-object":2,"../internals/get-built-in":22,"../internals/object-get-own-property-names":41,"../internals/object-get-own-property-symbols":42}],48:[function(n,e,t){n=n("../internals/global");e.exports=n},{"../internals/global":23}],49:[function(n,e,t){var u=n("../internals/global"),c=n("../internals/create-non-enumerable-property"),s=n("../internals/has"),l=n("../internals/set-global"),r=n("../internals/inspect-source"),n=n("../internals/internal-state"),o=n.get,f=n.enforce,p=String(String).split("String");(e.exports=function(n,e,t,r){var o=!!r&&!!r.unsafe,i=!!r&&!!r.enumerable,a=!!r&&!!r.noTargetGet;"function"==typeof t&&("string"!=typeof e||s(t,"name")||c(t,"name",e),(r=f(t)).source||(r.source=p.join("string"==typeof e?e:""))),n!==u?(o?!a&&n[e]&&(i=!0):delete n[e],i?n[e]=t:c(n,e,t)):i?n[e]=t:l(e,t)})(Function.prototype,"toString",function(){return"function"==typeof this&&o(this).source||r(this)})},{"../internals/create-non-enumerable-property":10,"../internals/global":23,"../internals/has":24,"../internals/inspect-source":29,"../internals/internal-state":30,"../internals/set-global":51}],50:[function(n,e,t){e.exports=function(n){if(null==n)throw TypeError("Can't call method on "+n);return n}},{}],51:[function(n,e,t){var r=n("../internals/global"),o=n("../internals/create-non-enumerable-property");e.exports=function(e,t){try{o(r,e,t)}catch(n){r[e]=t}return t}},{"../internals/create-non-enumerable-property":10,"../internals/global":23}],52:[function(n,e,t){var r=n("../internals/shared"),o=n("../internals/uid"),i=r("keys");e.exports=function(n){return i[n]||(i[n]=o(n))}},{"../internals/shared":54,"../internals/uid":61}],53:[function(n,e,t){var r=n("../internals/global"),o=n("../internals/set-global"),n="__core-js_shared__",n=r[n]||o(n,{});e.exports=n},{"../internals/global":23,"../internals/set-global":51}],54:[function(n,e,t){var r=n("../internals/is-pure"),o=n("../internals/shared-store");(e.exports=function(n,e){return o[n]||(o[n]=void 0!==e?e:{})})("versions",[]).push({version:"3.11.0",mode:r?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},{"../internals/is-pure":34,"../internals/shared-store":53}],55:[function(n,e,t){var r=n("../internals/to-integer"),o=Math.max,i=Math.min;e.exports=function(n,e){n=r(n);return n<0?o(n+e,0):i(n,e)}},{"../internals/to-integer":57}],56:[function(n,e,t){var r=n("../internals/indexed-object"),o=n("../internals/require-object-coercible");e.exports=function(n){return r(o(n))}},{"../internals/indexed-object":28,"../internals/require-object-coercible":50}],57:[function(n,e,t){var r=Math.ceil,o=Math.floor;e.exports=function(n){return isNaN(n=+n)?0:(0":">",'"':""","'":"'","`":"`"},Qn=Un(Wn),Yn=Un(mn(Wn)),Vn=en.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},zn=/(.)^/,Gn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Hn=/\\|'|\r|\n|\u2028|\u2029/g;function Kn(n){return"\\"+Gn[n]}var $n=/^\s*(\w|\$)+\s*$/;var Jn=0;function Xn(n,e,t,r,o){if(!(r instanceof e))return n.apply(t,o);t=_n(n.prototype),o=n.apply(t,o);return j(o)?o:t}var Zn=m(function(o,i){var a=Zn.placeholder,u=function(){for(var n=0,e=i.length,t=Array(e),r=0;r video.js: version: 8.10.0 shasum: 603a49909ef33f839264da8b73513f9daf592b57 videojs-contrib-quality-levels: - version: 4.0.0 - shasum: faa8096594cdbfc3ccbefe8572fc20531ba23f3d + version: 4.1.0 + shasum: 44c2d2167114a5c8418548b10a25cb409d6cba51 videojs-contrib-quality-menu: - version: 1.0.0 - shasum: f5e8f855358e20854de23d7607634b5aabf4e9ac + version: 1.0.1 + shasum: 991f641afabf1b346088f290efcf689688e42368 videojs-markers: version: 1.0.1 From 38110fe7701cb816240bb1199eda1f1093ae6fc2 Mon Sep 17 00:00:00 2001 From: Emilien Devos <4016501+unixfox@users.noreply.github.com> Date: Tue, 30 Apr 2024 19:39:06 +0200 Subject: [PATCH 3/5] videojs-share js --- assets/css/videojs-share.css | 7 +++++++ assets/js/videojs-share.js | 7 +++++++ src/invidious/views/components/player_sources.ecr | 2 ++ 3 files changed, 16 insertions(+) create mode 100644 assets/css/videojs-share.css create mode 100644 assets/js/videojs-share.js diff --git a/assets/css/videojs-share.css b/assets/css/videojs-share.css new file mode 100644 index 000000000..7722c8d9c --- /dev/null +++ b/assets/css/videojs-share.css @@ -0,0 +1,7 @@ +/** + * videojs-share + * @version 3.2.1 + * @copyright 2024 Mikhail Khazov + * @license MIT + */ + .video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-modal-dialog-content{display:flex;align-items:center;padding:0;background-image:linear-gradient(to bottom, rgba(0,0,0,0.77), rgba(0,0,0,0.75))}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{position:absolute;right:0;top:5px;width:30px;height:30px;color:#fff;cursor:pointer;opacity:0.9;transition:opacity 0.25s ease-out}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:before{content:'×';font-size:20px;line-height:15px}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:hover{opacity:1}.video-js .vjs-share{display:flex;flex-direction:column;justify-content:space-around;align-items:center;width:100%;height:100%;max-height:400px}.video-js .vjs-share__top,.video-js .vjs-share__middle,.video-js .vjs-share__bottom{display:flex}.video-js .vjs-share__top,.video-js .vjs-share__middle{flex-direction:column;justify-content:space-between}.video-js .vjs-share__middle{padding:0 25px}.video-js .vjs-share__title{align-self:center;font-size:22px;color:#fff}.video-js .vjs-share__subtitle{width:100%;margin:0 auto 12px;font-size:16px;color:#fff;opacity:0.7}.video-js .vjs-share__short-link-wrapper{position:relative;display:block;width:100%;height:40px;margin:0 auto;margin-bottom:15px;border:0;color:rgba(255,255,255,0.65);background-color:#363636;outline:none;overflow:hidden;flex-shrink:0}.video-js .vjs-share__short-link{display:block;width:100%;height:100%;padding:0 40px 0 15px;border:0;color:rgba(255,255,255,0.65);background-color:#363636;outline:none}.video-js .vjs-share__btn{position:absolute;right:0;bottom:0;height:40px;width:40px;display:flex;align-items:center;padding:0 11px;border:0;color:#fff;background-color:#2e2e2e;background-size:18px 19px;background-position:center;background-repeat:no-repeat;cursor:pointer;outline:none;transition:width 0.3s ease-out, padding 0.3s ease-out}.video-js .vjs-share__btn svg{flex-shrink:0}.video-js .vjs-share__btn span{position:relative;padding-left:10px;opacity:0;transition:opacity 0.3s ease-out}.video-js .vjs-share__btn:hover{justify-content:center;width:100%;padding:0 40px;background-image:none}.video-js .vjs-share__btn:hover span{opacity:1}.video-js .vjs-share__socials{display:flex;flex-wrap:wrap;justify-content:center;align-content:flex-start;transition:width 0.3s ease-out, height 0.3s ease-out}.video-js .vjs-share__social{display:flex;justify-content:center;align-items:center;flex-shrink:0;width:32px;height:32px;margin-right:6px;margin-bottom:6px;cursor:pointer;font-size:8px;transition:transform 0.3s ease-out, filter 0.2s ease-out;border:none;outline:none}.video-js .vjs-share__social:hover{filter:brightness(115%)}.video-js .vjs-share__social svg{overflow:visible;max-height:24px}.video-js .vjs-share__social_vk{background-color:#5d7294}.video-js .vjs-share__social_ok{background-color:#ed7c20}.video-js .vjs-share__social_mail,.video-js .vjs-share__social_email{background-color:#134785}.video-js .vjs-share__social_tw{background-color:#76aaeb}.video-js .vjs-share__social_reddit{background-color:#ff4500}.video-js .vjs-share__social_fbFeed{background-color:#475995}.video-js .vjs-share__social_messenger{background-color:#0084ff}.video-js .vjs-share__social_gp{background-color:#d53f35}.video-js .vjs-share__social_linkedin{background-color:#0077b5}.video-js .vjs-share__social_viber{background-color:#766db5}.video-js .vjs-share__social_telegram{background-color:#4bb0e2}.video-js .vjs-share__social_whatsapp{background-color:#78c870}.video-js .vjs-share__bottom{justify-content:center}@media (max-height: 220px){.video-js .vjs-share .hidden-xs{display:none}}@media (max-height: 350px){.video-js .vjs-share .hidden-sm{display:none}}@media (min-height: 400px){.video-js .vjs-share__title{margin-bottom:15px}.video-js .vjs-share__short-link-wrapper{margin-bottom:30px}}@media (min-width: 320px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:5px;top:10px}}@media (min-width: 660px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:20px;top:20px}.video-js .vjs-share__social{width:40px;height:40px}} diff --git a/assets/js/videojs-share.js b/assets/js/videojs-share.js new file mode 100644 index 000000000..fa3e71815 --- /dev/null +++ b/assets/js/videojs-share.js @@ -0,0 +1,7 @@ +/** + * videojs-share + * @version 3.2.1 + * @copyright 2024 Mikhail Khazov + * @license MIT + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],e):t.videojsShare=e(t.videojs)}(this,function(i){"use strict";i=i&&i.hasOwnProperty("default")?i.default:i;var t="undefined"!=typeof window?window.location.href:"";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var r={mobileVerification:!0,title:"Video",url:t,socials:["fbFeed","tw","reddit","gp","messenger","linkedin","vk","ok","mail","email","telegram","whatsapp","viber"],embedCode:"",redirectUri:t+"#close_window"},e=function(t,e,n){return e&&a(t.prototype,e),n&&a(t,n),t};function a(t,e){for(var n=0;nH&&(r="".concat(r.substr(0,H),"...")),a&&a.length>H&&(a="".concat(a.substr(0,H),"...")),t=S(o?{url:n}:{url:n,title:a,description:r,image:i,noparse:!0}),"https://vk.com/share.php?".concat(t)}function P(){var t=0\n \n\n',tw:'\n \n\n',reddit:'\n \n\n',gp:'\n \n\n',messenger:'\n \n \n\n',linkedin:'\n \n\n',vk:'\n \n\n',ok:'\n \n\n',mail:'\n \n\n',email:'\n \n\n',telegram:'\n \n\n',whatsapp:'\n \n\n',viber:'\n \n\n'},D=(W.prototype.getContent=function(){return this.content},W.prototype._createContent=function(){var t='\n \n \n \n '+this.player.localize("Copy")+"\n ",e=document.createElement("div"),n="";this.options.embedCode&&(n='\n \n "),e.innerHTML='
\n \n\n
\n \n \n\n "+n+'\n
\n\n
\n
\n '+this._getSocialItems().join("")+"\n
\n
\n
",this.content=e.firstChild},W.prototype._initClipboard=function(){var i=this;new E(".vjs-share__btn",{target:function(t){return t.previousElementSibling}}).on("success",function(t){function e(){n.innerText=i.player.localize("Copy"),t.clearSelection()}var n=t.trigger.querySelector("."+i.copyBtnTextClass);n.innerText=i.player.localize("Copied"),"ontouchstart"in window||0