chore: Монорепо с общими пакетами
This commit is contained in:
4
packages/video-player/dist/core/plugins/big-play-pause-button.d.ts
vendored
Normal file
4
packages/video-player/dist/core/plugins/big-play-pause-button.d.ts
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
import Player from "video.js/dist/types/player";
|
||||
declare function bigPlayPauseButtonPlugin(this: Player): void;
|
||||
export default bigPlayPauseButtonPlugin;
|
||||
//# sourceMappingURL=big-play-pause-button.d.ts.map
|
||||
1
packages/video-player/dist/core/plugins/big-play-pause-button.d.ts.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/big-play-pause-button.d.ts.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"big-play-pause-button.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/big-play-pause-button.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAkBhD,iBAAS,wBAAwB,CAAC,IAAI,EAAE,MAAM,QAO7C;AAID,eAAe,wBAAwB,CAAC"}
|
||||
26
packages/video-player/dist/core/plugins/big-play-pause-button.js
vendored
Normal file
26
packages/video-player/dist/core/plugins/big-play-pause-button.js
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
import videojs from "video.js";
|
||||
const BigPlayButton = videojs.getComponent("BigPlayButton");
|
||||
class BigPlayPauseButton extends BigPlayButton {
|
||||
handleClick() {
|
||||
const player = this.player();
|
||||
if (player.paused()) {
|
||||
player.play();
|
||||
}
|
||||
else {
|
||||
player.pause();
|
||||
}
|
||||
}
|
||||
}
|
||||
videojs.registerComponent("BigPlayPauseButton", BigPlayPauseButton);
|
||||
// Функция плагина с аннотацией типа this
|
||||
function bigPlayPauseButtonPlugin() {
|
||||
const player = this;
|
||||
const defaultButton = player.getChild("bigPlayButton");
|
||||
if (defaultButton) {
|
||||
defaultButton.dispose();
|
||||
}
|
||||
player.addChild("BigPlayPauseButton", {});
|
||||
}
|
||||
videojs.registerPlugin("bigPlayPauseButton", bigPlayPauseButtonPlugin);
|
||||
export default bigPlayPauseButtonPlugin;
|
||||
//# sourceMappingURL=big-play-pause-button.js.map
|
||||
1
packages/video-player/dist/core/plugins/big-play-pause-button.js.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/big-play-pause-button.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"big-play-pause-button.js","sourceRoot":"","sources":["../../../src/core/plugins/big-play-pause-button.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAC;AAG/B,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AAE5D,MAAM,kBAAmB,SAAQ,aAAa;IAC7C,WAAW;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAY,CAAC;QAEvC,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACF,CAAC;CACD;AAED,OAAO,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;AACpE,yCAAyC;AACzC,SAAS,wBAAwB;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACvD,IAAI,aAAa,EAAE,CAAC;QACnB,aAAa,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IACD,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,wBAAwB,CAAC,CAAC;AAEvE,eAAe,wBAAwB,CAAC"}
|
||||
4
packages/video-player/dist/core/plugins/register.d.ts
vendored
Normal file
4
packages/video-player/dist/core/plugins/register.d.ts
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
import "./settings";
|
||||
import "./big-play-pause-button";
|
||||
import "./skip-buttons";
|
||||
//# sourceMappingURL=register.d.ts.map
|
||||
1
packages/video-player/dist/core/plugins/register.d.ts.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/register.d.ts.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/register.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,CAAC;AACpB,OAAO,yBAAyB,CAAC;AACjC,OAAO,gBAAgB,CAAC"}
|
||||
4
packages/video-player/dist/core/plugins/register.js
vendored
Normal file
4
packages/video-player/dist/core/plugins/register.js
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
import "./settings";
|
||||
import "./big-play-pause-button";
|
||||
import "./skip-buttons";
|
||||
//# sourceMappingURL=register.js.map
|
||||
1
packages/video-player/dist/core/plugins/register.js.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/register.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/core/plugins/register.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,CAAC;AACpB,OAAO,yBAAyB,CAAC;AACjC,OAAO,gBAAgB,CAAC"}
|
||||
38
packages/video-player/dist/core/plugins/settings/components/tach-video-menu-button/index.d.ts
vendored
Normal file
38
packages/video-player/dist/core/plugins/settings/components/tach-video-menu-button/index.d.ts
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
import Component from "video.js/dist/types/component";
|
||||
import Player from "video.js/dist/types/player";
|
||||
import TachVideoMenu from "../tach-video-menu";
|
||||
import TachVideoMenuItem from "../tach-video-menu-item";
|
||||
declare const MenuButton: typeof Component;
|
||||
export default class TachVideoMenuButton extends MenuButton {
|
||||
private hideThreshold_;
|
||||
private buttonPressed_;
|
||||
private menu;
|
||||
private menuButton_;
|
||||
items: TachVideoMenuItem[];
|
||||
/**
|
||||
* Button constructor.
|
||||
*
|
||||
* @param {Player} player - videojs player instance
|
||||
*/
|
||||
constructor(player: Player, title: string, name: string);
|
||||
/**
|
||||
* Creates button items.
|
||||
*
|
||||
* @return {TachVideoMenuItem[]} - Button items
|
||||
*/
|
||||
createItems(): TachVideoMenuItem[];
|
||||
/**
|
||||
* Создаёт меню и добавляет в него все пункты.
|
||||
*
|
||||
* @return {Menu} - Сконструированное меню
|
||||
*/
|
||||
createMenu(): TachVideoMenu;
|
||||
/**
|
||||
* Обновление меню без его пересоздания.
|
||||
*
|
||||
* @return {Menu} - Обновлённое меню
|
||||
*/
|
||||
update(): void;
|
||||
}
|
||||
export {};
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/components/tach-video-menu-button/index.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,+BAA+B,CAAC;AACtD,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAEhD,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AAExD,QAAA,MAAM,UAAU,kBAAqC,CAAC;AAStD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,UAAU;IAC1D,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,WAAW,CAAa;IACzB,KAAK,EAAE,iBAAiB,EAAE,CAAM;IAEvC;;;;OAIG;gBACS,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAiBvD;;;;OAIG;IACH,WAAW,IAAI,iBAAiB,EAAE;IAIlC;;;;OAIG;IACH,UAAU;IAsBV;;;;OAIG;IACH,MAAM;CA6BN"}
|
||||
90
packages/video-player/dist/core/plugins/settings/components/tach-video-menu-button/index.js
vendored
Normal file
90
packages/video-player/dist/core/plugins/settings/components/tach-video-menu-button/index.js
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
import videojs from "video.js";
|
||||
import TachVideoMenu from "../tach-video-menu";
|
||||
const MenuButton = videojs.getComponent("MenuButton");
|
||||
const Menu = videojs.getComponent("Menu");
|
||||
export default class TachVideoMenuButton extends MenuButton {
|
||||
/**
|
||||
* Button constructor.
|
||||
*
|
||||
* @param {Player} player - videojs player instance
|
||||
*/
|
||||
constructor(player, title, name) {
|
||||
super(player, {
|
||||
title: title,
|
||||
name: name,
|
||||
});
|
||||
this.hideThreshold_ = 0;
|
||||
this.buttonPressed_ = false;
|
||||
this.items = [];
|
||||
// Перехватываем событие 'mouseenter' на уровне захвата и предотвращаем его дальнейшее распространение
|
||||
const el = this.menuButton_.el();
|
||||
el.addEventListener("mouseenter", e => {
|
||||
e.stopImmediatePropagation();
|
||||
}, true);
|
||||
}
|
||||
/**
|
||||
* Creates button items.
|
||||
*
|
||||
* @return {TachVideoMenuItem[]} - Button items
|
||||
*/
|
||||
createItems() {
|
||||
return [];
|
||||
}
|
||||
/**
|
||||
* Создаёт меню и добавляет в него все пункты.
|
||||
*
|
||||
* @return {Menu} - Сконструированное меню
|
||||
*/
|
||||
createMenu() {
|
||||
const menu = new TachVideoMenu(this.player_, {
|
||||
menuButton: this,
|
||||
});
|
||||
this.hideThreshold_ = 0;
|
||||
this.items = this.createItems();
|
||||
if (this.items) {
|
||||
// Если метод updateItems присутствует, используем его для обновления списка
|
||||
if (typeof menu.updateItems === "function") {
|
||||
menu.updateItems(this.items);
|
||||
}
|
||||
else {
|
||||
// Если по какой-то причине обновление недоступно, добавляем элементы по одному
|
||||
this.items.forEach(item => menu.addItem(item));
|
||||
}
|
||||
}
|
||||
return menu;
|
||||
}
|
||||
/**
|
||||
* Обновление меню без его пересоздания.
|
||||
*
|
||||
* @return {Menu} - Обновлённое меню
|
||||
*/
|
||||
update() {
|
||||
// Если меню уже создано и поддерживает updateItems, обновляем его содержимое
|
||||
if (this.menu && typeof this.menu.updateItems === "function") {
|
||||
this.items = this.createItems();
|
||||
this.menu.updateItems(this.items);
|
||||
}
|
||||
else {
|
||||
// Если меню ещё не создано, создаём его
|
||||
this.menu = this.createMenu();
|
||||
}
|
||||
this.addChild(this.menu);
|
||||
/**
|
||||
* Track the state of the menu button
|
||||
*
|
||||
* @type {Boolean}
|
||||
* @private
|
||||
*/
|
||||
this.buttonPressed_ = false;
|
||||
this.menuButton_.el_.setAttribute("aria-expanded", "false");
|
||||
if (this.items && this.items?.length <= this.hideThreshold_) {
|
||||
this.hide();
|
||||
this.menu.contentEl().removeAttribute("role");
|
||||
}
|
||||
else {
|
||||
this.show();
|
||||
this.menu.contentEl().setAttribute("role", "menu");
|
||||
}
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=index.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/components/tach-video-menu-button/index.ts"],"names":[],"mappings":"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"}
|
||||
33
packages/video-player/dist/core/plugins/settings/components/tach-video-menu-item/index.d.ts
vendored
Normal file
33
packages/video-player/dist/core/plugins/settings/components/tach-video-menu-item/index.d.ts
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
import Player from "video.js/dist/types/player";
|
||||
import { TachPlayerMenuItemOptions, TachPlayerPlugin } from "../../types";
|
||||
import TachVideoMenuButton from "../tach-video-menu-button";
|
||||
declare const VideoJsMenuItemClass: typeof import("video.js/dist/types/component").default;
|
||||
export interface ITachPlayerMenuItem extends TachPlayerMenuItemOptions {
|
||||
onClick: () => void;
|
||||
enabled?: boolean;
|
||||
value?: unknown;
|
||||
}
|
||||
/**
|
||||
* Extend vjs menu item class.
|
||||
*/
|
||||
export default class TachVideoMenuItem extends VideoJsMenuItemClass {
|
||||
private item;
|
||||
private button;
|
||||
private plugin;
|
||||
/**
|
||||
* Menu item constructor.
|
||||
*
|
||||
* @param {Player} player - vjs player
|
||||
* @param {ITachVideoMenuItem} item - Item object
|
||||
* @param {ConcreteButton} button - The containing button.
|
||||
* @param {TachPlayerPlugin} plugin - This plugin instance.
|
||||
*/
|
||||
constructor(player: Player, item: ITachPlayerMenuItem, button: TachVideoMenuButton, plugin: TachPlayerPlugin);
|
||||
/**
|
||||
* Click event for menu item.
|
||||
*/
|
||||
handleClick(): void;
|
||||
selected(val: boolean): void;
|
||||
}
|
||||
export {};
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/components/tach-video-menu-item/index.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAEhD,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,mBAAmB,MAAM,2BAA2B,CAAC;AAG5D,QAAA,MAAM,oBAAoB,wDAAmC,CAAC;AAG9D,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB;IACrE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,oBAAoB;IAClE,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAmB;IAEjC;;;;;;;OAOG;gBAEF,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,mBAAmB,EACzB,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,gBAAgB;IAczB;;OAEG;IACH,WAAW;IAWX,QAAQ,CAAC,GAAG,EAAE,OAAO;CAIrB"}
|
||||
45
packages/video-player/dist/core/plugins/settings/components/tach-video-menu-item/index.js
vendored
Normal file
45
packages/video-player/dist/core/plugins/settings/components/tach-video-menu-item/index.js
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
import videojs from "video.js";
|
||||
// Concrete classes
|
||||
const VideoJsMenuItemClass = videojs.getComponent("MenuItem");
|
||||
/**
|
||||
* Extend vjs menu item class.
|
||||
*/
|
||||
export default class TachVideoMenuItem extends VideoJsMenuItemClass {
|
||||
/**
|
||||
* Menu item constructor.
|
||||
*
|
||||
* @param {Player} player - vjs player
|
||||
* @param {ITachVideoMenuItem} item - Item object
|
||||
* @param {ConcreteButton} button - The containing button.
|
||||
* @param {TachPlayerPlugin} plugin - This plugin instance.
|
||||
*/
|
||||
constructor(player, item, button, plugin) {
|
||||
super(player, {
|
||||
label: item.label,
|
||||
selectable: item.selectable || true,
|
||||
selected: item.selected || false,
|
||||
});
|
||||
this.item = item;
|
||||
this.button = button;
|
||||
this.plugin = plugin;
|
||||
item.className && this.addClass(item.className);
|
||||
}
|
||||
/**
|
||||
* Click event for menu item.
|
||||
*/
|
||||
handleClick() {
|
||||
if (this.item.onClick) {
|
||||
// Reset other menu items selected status.
|
||||
for (let i = 0; i < this.button.items?.length; ++i) {
|
||||
this.button.items[i].selected(false);
|
||||
}
|
||||
this.selected(true);
|
||||
return this.item.onClick();
|
||||
}
|
||||
}
|
||||
selected(val) {
|
||||
//@ts-expect-error // getComponent reduant
|
||||
super.selected(val);
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=index.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/components/tach-video-menu-item/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAC;AAM/B,mBAAmB;AACnB,MAAM,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AAS9D;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,oBAAoB;IAKlE;;;;;;;OAOG;IACH,YACC,MAAc,EACd,IAAyB,EACzB,MAA2B,EAC3B,MAAwB;QAExB,KAAK,CAAC,MAAM,EAAE;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;YACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;SACzB,CAAC,CAAC;QACV,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,WAAW;QACV,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,0CAA0C;YAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;gBACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,QAAQ,CAAC,GAAY;QACpB,0CAA0C;QAC1C,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;CACD"}
|
||||
33
packages/video-player/dist/core/plugins/settings/components/tach-video-menu/index.d.ts
vendored
Normal file
33
packages/video-player/dist/core/plugins/settings/components/tach-video-menu/index.d.ts
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
import Player from "video.js/dist/types/player";
|
||||
import TachVideoMenuButton from "../tach-video-menu-button";
|
||||
import TachVideoMenuItem from "../tach-video-menu-item";
|
||||
declare const VideoJsMenuClass: typeof import("video.js/dist/types/component").default;
|
||||
type BaseMenuOptions = ConstructorParameters<typeof VideoJsMenuClass>[1];
|
||||
interface TachMenuOptions extends NonNullable<BaseMenuOptions> {
|
||||
menuButton: TachVideoMenuButton;
|
||||
}
|
||||
/**
|
||||
* Extend vjs menu item class.
|
||||
*/
|
||||
export default class TachVideoMenu extends VideoJsMenuClass {
|
||||
private menuOpened_;
|
||||
/**
|
||||
* Menu item constructor.
|
||||
*
|
||||
* @param {Player} player - vjs player
|
||||
* @param {TachPlayerMenuItemOptions} item - Item object
|
||||
* @param {ConcreteButton} button - The containing button.
|
||||
* @param {TachPlayerPlugin} plugin - This plugin instance.
|
||||
*/
|
||||
constructor(player: Player, options: TachMenuOptions);
|
||||
hide(): void;
|
||||
show(): void;
|
||||
addItem(item: TachVideoMenuItem): void;
|
||||
/**
|
||||
* Обновляет пункты меню.
|
||||
* @param {Array<Object|string>} newItems - Массив новых компонентов или их имён, которые будут добавлены в меню.
|
||||
*/
|
||||
updateItems(newItems: TachVideoMenuItem[]): void;
|
||||
}
|
||||
export {};
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
1
packages/video-player/dist/core/plugins/settings/components/tach-video-menu/index.d.ts.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/settings/components/tach-video-menu/index.d.ts.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/components/tach-video-menu/index.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAEhD,OAAO,mBAAmB,MAAM,2BAA2B,CAAC;AAC5D,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AAGxD,QAAA,MAAM,gBAAgB,wDAA+B,CAAC;AAMtD,KAAK,eAAe,GAAG,qBAAqB,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,UAAU,eAAgB,SAAQ,WAAW,CAAC,eAAe,CAAC;IAC7D,UAAU,EAAE,mBAAmB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,gBAAgB;IAC1D,OAAO,CAAC,WAAW,CAAkB;IACrC;;;;;;;OAOG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe;IAUpD,IAAI;IAMJ,IAAI;IAMJ,OAAO,CAAC,IAAI,EAAE,iBAAiB;IAK/B;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,iBAAiB,EAAE;CAczC"}
|
||||
56
packages/video-player/dist/core/plugins/settings/components/tach-video-menu/index.js
vendored
Normal file
56
packages/video-player/dist/core/plugins/settings/components/tach-video-menu/index.js
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
import videojs from "video.js";
|
||||
// Concrete classes
|
||||
const VideoJsMenuClass = videojs.getComponent("Menu");
|
||||
/**
|
||||
* Extend vjs menu item class.
|
||||
*/
|
||||
export default class TachVideoMenu extends VideoJsMenuClass {
|
||||
/**
|
||||
* Menu item constructor.
|
||||
*
|
||||
* @param {Player} player - vjs player
|
||||
* @param {TachPlayerMenuItemOptions} item - Item object
|
||||
* @param {ConcreteButton} button - The containing button.
|
||||
* @param {TachPlayerPlugin} plugin - This plugin instance.
|
||||
*/
|
||||
constructor(player, options) {
|
||||
super(player, options);
|
||||
this.menuOpened_ = false;
|
||||
player.on("userinactive", () => {
|
||||
if (this.menuOpened_) {
|
||||
player.userActive(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
hide() {
|
||||
this.menuOpened_ = false;
|
||||
// Вызов родительского метода скрытия
|
||||
super.hide();
|
||||
}
|
||||
show() {
|
||||
this.menuOpened_ = true;
|
||||
// Вызов родительского метода скрытия
|
||||
super.show();
|
||||
}
|
||||
addItem(item) {
|
||||
//@ts-expect-error getComponent reduant method
|
||||
super.addItem(item);
|
||||
}
|
||||
/**
|
||||
* Обновляет пункты меню.
|
||||
* @param {Array<Object|string>} newItems - Массив новых компонентов или их имён, которые будут добавлены в меню.
|
||||
*/
|
||||
updateItems(newItems) {
|
||||
// Получаем текущих потомков
|
||||
const currentChildren = this.children().slice();
|
||||
// Удаляем все остальные дочерние компоненты.
|
||||
currentChildren.forEach(child => {
|
||||
this.removeChild(child);
|
||||
});
|
||||
// Добавляем новые пункты меню.
|
||||
newItems.forEach(item => {
|
||||
this.addItem(item);
|
||||
});
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
packages/video-player/dist/core/plugins/settings/components/tach-video-menu/index.js.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/settings/components/tach-video-menu/index.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/components/tach-video-menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAC;AAM/B,mBAAmB;AACnB,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAWtD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,gBAAgB;IAE1D;;;;;;;OAOG;IACH,YAAY,MAAc,EAAE,OAAwB;QACnD,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAVhB,gBAAW,GAAY,KAAK,CAAC;QAYpC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;YAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI;QACH,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,qCAAqC;QACrC,KAAK,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,IAAI;QACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,qCAAqC;QACrC,KAAK,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,OAAO,CAAC,IAAuB;QAC9B,8CAA8C;QAC9C,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAA6B;QACxC,4BAA4B;QAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC;QAEhD,6CAA6C;QAC7C,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC/B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,+BAA+B;QAC/B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"}
|
||||
53
packages/video-player/dist/core/plugins/settings/index.d.ts
vendored
Normal file
53
packages/video-player/dist/core/plugins/settings/index.d.ts
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
import Component from "video.js/dist/types/component";
|
||||
import Player from "video.js/dist/types/player";
|
||||
import Plugin from "video.js/dist/types/plugin";
|
||||
import "./settings.css";
|
||||
interface SettingsButtonOptions {
|
||||
}
|
||||
interface PlayerWithControlBar extends Player {
|
||||
hlsInstance?: unknown;
|
||||
controlBar: Component;
|
||||
}
|
||||
declare const BasePlugin: typeof Plugin;
|
||||
declare class SettingsButton extends BasePlugin {
|
||||
private options;
|
||||
private mainMenu;
|
||||
private settingsButton;
|
||||
private buttonInstance;
|
||||
private backButton;
|
||||
private playbackRateButton;
|
||||
private qualityRateButton;
|
||||
private audioTracksButton;
|
||||
private textTracksButton;
|
||||
constructor(player: PlayerWithControlBar, options: SettingsButtonOptions);
|
||||
/**
|
||||
* Инициализация плагина: создание кнопки настроек и привязка событий
|
||||
*/
|
||||
private initialize;
|
||||
/**
|
||||
* Привязка событий плеера (например, для обновления меню)
|
||||
*/
|
||||
private bindPlayerEvents;
|
||||
/**
|
||||
* Создание кнопки настроек и определение пунктов меню.
|
||||
* Здесь создаются фабрики для формирования кнопок и устанавливается начальное меню.
|
||||
*/
|
||||
private createSettingsButton;
|
||||
/**
|
||||
* Обёртка для создания экземпляра пункта меню.
|
||||
*
|
||||
* @param item - объект настроек пункта меню
|
||||
* @returns экземпляр TachVideoMenuItem
|
||||
*/
|
||||
private getMenuItem;
|
||||
/**
|
||||
* Устанавливает (обновляет) пункты меню плагина.
|
||||
*
|
||||
* @param items - массив пунктов меню (если не передан, используются кнопки по умолчанию)
|
||||
* @param skipBackButton - если true, не добавлять кнопку "Назад"
|
||||
* @param forceShow - если true, принудительно показать меню после обновления
|
||||
*/
|
||||
private setMenu;
|
||||
}
|
||||
export default SettingsButton;
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
1
packages/video-player/dist/core/plugins/settings/index.d.ts.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/settings/index.d.ts.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/plugins/settings/index.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,+BAA+B,CAAC;AACtD,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAWhD,OAAO,gBAAgB,CAAC;AAGxB,UAAU,qBAAqB;CAE9B;AAGD,UAAU,oBAAqB,SAAQ,MAAM;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,SAAS,CAAC;CACtB;AAED,QAAA,MAAM,UAAU,EAAmC,OAAO,MAAM,CAAC;AAKjE,cAAM,cAAe,SAAQ,UAAU;IACtC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,cAAc,CAAa;IAGnC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,gBAAgB,CAA6B;gBAEzC,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,qBAAqB;IAMxE;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA8D5B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;;OAMG;YACW,OAAO;CA8CrB;AAID,eAAe,cAAc,CAAC"}
|
||||
141
packages/video-player/dist/core/plugins/settings/index.js
vendored
Normal file
141
packages/video-player/dist/core/plugins/settings/index.js
vendored
Normal file
@@ -0,0 +1,141 @@
|
||||
import videojs from "video.js";
|
||||
import TachVideoMenuButton from "./components/tach-video-menu-button";
|
||||
import TachVideoMenuItem from "./components/tach-video-menu-item";
|
||||
import audioTrackSelector from "./selectors/audio-track-selector";
|
||||
import playbackRateSelector from "./selectors/playback-rate-selector";
|
||||
import qualityRateSelector from "./selectors/quality-rate-selector";
|
||||
import textTracksSelector from "./selectors/text-track-selector";
|
||||
import "./settings.css";
|
||||
const BasePlugin = videojs.getPlugin("plugin");
|
||||
// Значения опций по умолчанию
|
||||
const defaults = {};
|
||||
class SettingsButton extends BasePlugin {
|
||||
constructor(player, options) {
|
||||
super(player);
|
||||
this.mainMenu = [];
|
||||
this.options = videojs.obj.merge(defaults, options);
|
||||
this.player.ready(() => this.initialize());
|
||||
}
|
||||
/**
|
||||
* Инициализация плагина: создание кнопки настроек и привязка событий
|
||||
*/
|
||||
initialize() {
|
||||
this.createSettingsButton();
|
||||
this.bindPlayerEvents();
|
||||
}
|
||||
/**
|
||||
* Привязка событий плеера (например, для обновления меню)
|
||||
*/
|
||||
bindPlayerEvents() {
|
||||
// При необходимости можно привязать событие, например:
|
||||
// this.settingsButton.on("click", this.setMenu.bind(this, undefined, false, true));
|
||||
}
|
||||
/**
|
||||
* Создание кнопки настроек и определение пунктов меню.
|
||||
* Здесь создаются фабрики для формирования кнопок и устанавливается начальное меню.
|
||||
*/
|
||||
createSettingsButton() {
|
||||
const player = this.player;
|
||||
// Создаем кнопку настроек с помощью компонента TachVideoMenuButton
|
||||
this.settingsButton = new TachVideoMenuButton(player, "Settings", "Settings");
|
||||
this.buttonInstance = player.controlBar.addChild(this.settingsButton, {
|
||||
componentClass: "settingsButton",
|
||||
});
|
||||
this.buttonInstance.addClass("vjs-settings-button");
|
||||
// Определяем кнопку "Назад" для возврата в главное меню
|
||||
this.backButton = {
|
||||
label: "Назад",
|
||||
value: this.mainMenu,
|
||||
selectable: false,
|
||||
selected: false,
|
||||
onClick: () => this.setMenu(undefined, true, true),
|
||||
className: "settings-back",
|
||||
};
|
||||
// Создаем фабрики для дополнительных настроек
|
||||
const { menuItem: audioMenuItem, menuItems: audioMenuItems } = audioTrackSelector(player);
|
||||
this.audioTracksButton = () => ({
|
||||
...audioMenuItem(),
|
||||
onClick: () => this.setMenu(audioMenuItems(), false, true),
|
||||
});
|
||||
const { menuItem: textMenuItem, menuItems: textMenuItems } = textTracksSelector(player);
|
||||
this.textTracksButton = () => ({
|
||||
...textMenuItem(),
|
||||
onClick: () => this.setMenu(textMenuItems(), false, true),
|
||||
});
|
||||
const { menuItem: playbackMenuItem, menuItems: playbackMenuItems } = playbackRateSelector(player);
|
||||
this.playbackRateButton = () => ({
|
||||
...playbackMenuItem(),
|
||||
onClick: () => this.setMenu(playbackMenuItems(), false, true),
|
||||
});
|
||||
// В createSettingsButton замени этот участок:
|
||||
const qualitySelector = qualityRateSelector(player);
|
||||
this.qualityRateButton = () => ({
|
||||
...qualitySelector.menuItem(), // пересоздание при каждом открытии меню
|
||||
onClick: () => this.setMenu(qualitySelector.menuItems(), false, true),
|
||||
});
|
||||
// Подписка на автообновление, когда hls переключает уровень
|
||||
qualitySelector.setMenuUpdateCallback(() => {
|
||||
this.setMenu(undefined, true); // Обновить главное меню без перезахода
|
||||
});
|
||||
// Инициализируем меню с кнопками по умолчанию без показа
|
||||
this.setMenu(undefined, true, false);
|
||||
}
|
||||
/**
|
||||
* Обёртка для создания экземпляра пункта меню.
|
||||
*
|
||||
* @param item - объект настроек пункта меню
|
||||
* @returns экземпляр TachVideoMenuItem
|
||||
*/
|
||||
getMenuItem(item) {
|
||||
return new TachVideoMenuItem(this.player, item, this.settingsButton, this);
|
||||
}
|
||||
/**
|
||||
* Устанавливает (обновляет) пункты меню плагина.
|
||||
*
|
||||
* @param items - массив пунктов меню (если не передан, используются кнопки по умолчанию)
|
||||
* @param skipBackButton - если true, не добавлять кнопку "Назад"
|
||||
* @param forceShow - если true, принудительно показать меню после обновления
|
||||
*/
|
||||
async setMenu(items = [], skipBackButton = false, forceShow = false) {
|
||||
const menuButtons = [];
|
||||
if (!skipBackButton) {
|
||||
menuButtons.push(this.backButton);
|
||||
}
|
||||
if (items?.length === 0) {
|
||||
// Если не переданы конкретные пункты меню – используем кнопки по умолчанию
|
||||
const defaultButtons = [
|
||||
this.playbackRateButton,
|
||||
this.qualityRateButton,
|
||||
this.textTracksButton,
|
||||
this.audioTracksButton,
|
||||
];
|
||||
defaultButtons.forEach(createButton => {
|
||||
const btn = createButton();
|
||||
if (btn.enabled) {
|
||||
menuButtons.push(btn);
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
menuButtons.push(...items);
|
||||
}
|
||||
// Формируем список пунктов меню: вместо пересоздания меню, назначаем функцию,
|
||||
// возвращающую актуальный список пунктов, и вызываем метод обновления.
|
||||
this.settingsButton.createItems = () => menuButtons.map(item => this.getMenuItem(item));
|
||||
await this.settingsButton.update();
|
||||
// Если требуется принудительно показать меню, эмулируем клик по кнопке меню
|
||||
if (forceShow) {
|
||||
const menuElement = this.buttonInstance.el().querySelector(".vjs-menu");
|
||||
const menuButton = this.buttonInstance
|
||||
.el()
|
||||
.querySelector(".vjs-menu-button");
|
||||
if (menuElement && menuButton) {
|
||||
menuButton.click();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Регистрируем плагин в Video.js
|
||||
videojs.registerPlugin("settingsMenu", SettingsButton);
|
||||
export default SettingsButton;
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
packages/video-player/dist/core/plugins/settings/index.js.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/settings/index.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/plugins/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAC;AAK/B,OAAO,mBAAmB,MAAM,qCAAqC,CAAC;AACtE,OAAO,iBAEN,MAAM,mCAAmC,CAAC;AAC3C,OAAO,kBAAkB,MAAM,kCAAkC,CAAC;AAClE,OAAO,oBAAoB,MAAM,oCAAoC,CAAC;AACtE,OAAO,mBAAmB,MAAM,mCAAmC,CAAC;AACpE,OAAO,kBAAkB,MAAM,iCAAiC,CAAC;AAEjE,OAAO,gBAAgB,CAAC;AAaxB,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAmB,CAAC;AAEjE,8BAA8B;AAC9B,MAAM,QAAQ,GAA0B,EAAE,CAAC;AAE3C,MAAM,cAAe,SAAQ,UAAU;IAatC,YAAY,MAA4B,EAAE,OAA8B;QACvE,KAAK,CAAC,MAAM,CAAC,CAAC;QAZP,aAAQ,GAA0B,EAAE,CAAC;QAa5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACK,UAAU;QACjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,gBAAgB;QACvB,uDAAuD;QACvD,oFAAoF;IACrF,CAAC;IAED;;;OAGG;IACK,oBAAoB;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAA8B,CAAC;QAEnD,mEAAmE;QACnE,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,CAC5C,MAAM,EACN,UAAU,EACV,UAAU,CACV,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE;YACrE,cAAc,EAAE,gBAAgB;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QAEpD,wDAAwD;QACxD,IAAI,CAAC,UAAU,GAAG;YACjB,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,IAAI,CAAC,QAAQ;YACpB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;YAClD,SAAS,EAAE,eAAe;SAC1B,CAAC;QAEF,8CAA8C;QAC9C,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,GAC3D,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,iBAAiB,GAAG,GAAG,EAAE,CAAC,CAAC;YAC/B,GAAG,aAAa,EAAE;YAClB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;SAC1D,CAAC,CAAC;QAEH,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,GACzD,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC,CAAC;YAC9B,GAAG,YAAY,EAAE;YACjB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;SACzD,CAAC,CAAC;QAEH,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,GACjE,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,kBAAkB,GAAG,GAAG,EAAE,CAAC,CAAC;YAChC,GAAG,gBAAgB,EAAE;YACrB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;SAC7D,CAAC,CAAC;QAEH,8CAA8C;QAC9C,MAAM,eAAe,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,iBAAiB,GAAG,GAAG,EAAE,CAAC,CAAC;YAC/B,GAAG,eAAe,CAAC,QAAQ,EAAE,EAAE,wCAAwC;YACvE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;SACrE,CAAC,CAAC;QAEH,4DAA4D;QAC5D,eAAe,CAAC,qBAAqB,CAAC,GAAG,EAAE;YAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,uCAAuC;QACvE,CAAC,CAAC,CAAC;QAEH,yDAAyD;QACzD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACK,WAAW,CAAC,IAAyB;QAC5C,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,OAAO,CACpB,QAA+B,EAAE,EACjC,iBAA0B,KAAK,EAC/B,YAAqB,KAAK;QAE1B,MAAM,WAAW,GAA0B,EAAE,CAAC;QAE9C,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,2EAA2E;YAC3E,MAAM,cAAc,GAAG;gBACtB,IAAI,CAAC,kBAAkB;gBACvB,IAAI,CAAC,iBAAiB;gBACtB,IAAI,CAAC,gBAAgB;gBACrB,IAAI,CAAC,iBAAiB;aACtB,CAAC;YACF,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBACrC,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;gBAC3B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBACjB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACP,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED,8EAA8E;QAC9E,uEAAuE;QACvE,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,GAAG,EAAE,CACtC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QAEnC,4EAA4E;QAC5E,IAAI,SAAS,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc;iBACpC,EAAE,EAAE;iBACJ,aAAa,CAAC,kBAAkB,CAAC,CAAC;YACpC,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;gBAC9B,UAA0B,CAAC,KAAK,EAAE,CAAC;YACrC,CAAC;QACF,CAAC;IACF,CAAC;CACD;AAED,iCAAiC;AACjC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AACvD,eAAe,cAAc,CAAC"}
|
||||
27
packages/video-player/dist/core/plugins/settings/selectors/audio-track-selector/index.d.ts
vendored
Normal file
27
packages/video-player/dist/core/plugins/settings/selectors/audio-track-selector/index.d.ts
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
import Player from "video.js/dist/types/player";
|
||||
import { TachPlayerMenuItemOptions } from "../../types";
|
||||
interface TrackMenuOptions extends TachPlayerMenuItemOptions {
|
||||
}
|
||||
declare const audioTrack: (player: Player, options?: TrackMenuOptions) => {
|
||||
menuItems: () => {
|
||||
label: string;
|
||||
value: number;
|
||||
selected: boolean;
|
||||
onClick: () => void;
|
||||
}[] | {
|
||||
label: string;
|
||||
value: string | undefined;
|
||||
selected: boolean;
|
||||
onClick: () => void;
|
||||
}[];
|
||||
menuItem: () => {
|
||||
value: string | null;
|
||||
enabled: boolean;
|
||||
label: string;
|
||||
selectable?: boolean;
|
||||
selected?: boolean;
|
||||
className?: string;
|
||||
};
|
||||
};
|
||||
export default audioTrack;
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/selectors/audio-track-selector/index.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAEhD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AASxD,UAAU,gBAAiB,SAAQ,yBAAyB;CAAG;AAe/D,QAAA,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,UAAS,gBAA2B;;;;;;;;;;;;;;;;;;;;CAmJvE,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
||||
125
packages/video-player/dist/core/plugins/settings/selectors/audio-track-selector/index.js
vendored
Normal file
125
packages/video-player/dist/core/plugins/settings/selectors/audio-track-selector/index.js
vendored
Normal file
@@ -0,0 +1,125 @@
|
||||
const defaults = {
|
||||
label: "Язык",
|
||||
selected: false,
|
||||
selectable: false,
|
||||
className: "audio-selector",
|
||||
};
|
||||
const audioTrack = (player, options = defaults) => {
|
||||
const playerWithTracks = player;
|
||||
const getNativeTrackList = () => {
|
||||
if (typeof playerWithTracks.audioTracks !== "function") {
|
||||
return undefined;
|
||||
}
|
||||
return playerWithTracks.audioTracks();
|
||||
};
|
||||
const getNativeTracks = () => {
|
||||
return getNativeTrackList()?.tracks_ ?? [];
|
||||
};
|
||||
const setNativeTrack = (track) => {
|
||||
const audioTracks = getNativeTracks();
|
||||
for (let i = 0; i < audioTracks.length; ++i) {
|
||||
audioTracks[i].enabled = audioTracks[i] === track;
|
||||
}
|
||||
};
|
||||
const getSelectedNativeTrack = () => {
|
||||
const audioTracks = getNativeTracks();
|
||||
for (let i = 0; i < audioTracks.length; ++i) {
|
||||
if (audioTracks[i].enabled === true) {
|
||||
return audioTracks[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
const getHlsInstance = () => playerWithTracks.hlsInstance ?? null;
|
||||
const getHlsTracks = () => {
|
||||
const hls = getHlsInstance();
|
||||
return hls?.audioTracks ?? [];
|
||||
};
|
||||
const setHlsTrack = (trackId) => {
|
||||
const hls = getHlsInstance();
|
||||
if (!hls)
|
||||
return;
|
||||
hls.audioTrack = trackId;
|
||||
};
|
||||
const getSelectedHlsTrack = () => {
|
||||
const hls = getHlsInstance();
|
||||
if (!hls)
|
||||
return null;
|
||||
const tracks = getHlsTracks();
|
||||
const currentId = hls.audioTrack;
|
||||
return tracks.find(track => track.id === currentId) ?? null;
|
||||
};
|
||||
const formatHlsTrackLabel = (track, index) => {
|
||||
if (track.name?.trim()) {
|
||||
return track.name.trim();
|
||||
}
|
||||
if (track.lang?.trim()) {
|
||||
return track.lang.trim().toUpperCase();
|
||||
}
|
||||
const fallbackIndex = typeof index === "number"
|
||||
? index + 1
|
||||
: typeof track.id === "number"
|
||||
? track.id + 1
|
||||
: 1;
|
||||
return `Дорожка ${fallbackIndex}`;
|
||||
};
|
||||
const buildHlsMenuItems = () => {
|
||||
const hls = getHlsInstance();
|
||||
const hlsTracks = getHlsTracks();
|
||||
if (!hls || hlsTracks.length === 0) {
|
||||
return [];
|
||||
}
|
||||
return hlsTracks.map((track, index) => ({
|
||||
label: formatHlsTrackLabel(track, index),
|
||||
value: track.id,
|
||||
selected: track.id === hls.audioTrack,
|
||||
onClick: () => setHlsTrack(track.id),
|
||||
}));
|
||||
};
|
||||
const hasAudioTracks = () => {
|
||||
if (getHlsTracks().length > 0) {
|
||||
return true;
|
||||
}
|
||||
return getNativeTracks().length > 0;
|
||||
};
|
||||
const menuItems = () => {
|
||||
const hlsTracks = buildHlsMenuItems();
|
||||
if (hlsTracks.length > 0) {
|
||||
return hlsTracks;
|
||||
}
|
||||
const nativeTracks = getNativeTracks();
|
||||
const trackItems = [];
|
||||
for (let i = 0; i < nativeTracks?.length; ++i) {
|
||||
const trackItem = {
|
||||
label: nativeTracks[i].label || "Default",
|
||||
value: nativeTracks[i].label,
|
||||
selected: nativeTracks[i].enabled,
|
||||
onClick: () => setNativeTrack(nativeTracks[i]),
|
||||
};
|
||||
trackItems.push(trackItem);
|
||||
}
|
||||
return trackItems;
|
||||
};
|
||||
const getSelectedTrackLabel = () => {
|
||||
const selectedHlsTrack = getSelectedHlsTrack();
|
||||
if (selectedHlsTrack) {
|
||||
const tracks = getHlsTracks();
|
||||
const index = tracks.findIndex(track => track.id === selectedHlsTrack.id);
|
||||
return formatHlsTrackLabel(selectedHlsTrack, index);
|
||||
}
|
||||
return getSelectedNativeTrack()?.label ?? null;
|
||||
};
|
||||
const menuItem = () => {
|
||||
return {
|
||||
...options,
|
||||
value: getSelectedTrackLabel(),
|
||||
enabled: hasAudioTracks(),
|
||||
};
|
||||
};
|
||||
return {
|
||||
menuItems,
|
||||
menuItem,
|
||||
};
|
||||
};
|
||||
export default audioTrack;
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
packages/video-player/dist/core/plugins/settings/selectors/audio-track-selector/index.js.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/settings/selectors/audio-track-selector/index.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/selectors/audio-track-selector/index.ts"],"names":[],"mappings":"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"}
|
||||
30
packages/video-player/dist/core/plugins/settings/selectors/playback-rate-selector/index.d.ts
vendored
Normal file
30
packages/video-player/dist/core/plugins/settings/selectors/playback-rate-selector/index.d.ts
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
import Player from "video.js/dist/types/player";
|
||||
import { TachPlayerMenuItemOptions } from "../../types";
|
||||
interface SpeedMenuOptions extends TachPlayerMenuItemOptions {
|
||||
speeds: Array<{
|
||||
label: string;
|
||||
value: number;
|
||||
}>;
|
||||
}
|
||||
declare const playbackRate: (player: Player, options?: SpeedMenuOptions) => {
|
||||
menuItems: () => {
|
||||
label: string;
|
||||
selectable: boolean;
|
||||
selected: boolean;
|
||||
onClick: () => number | undefined;
|
||||
}[];
|
||||
menuItem: () => {
|
||||
enabled: boolean;
|
||||
speeds: Array<{
|
||||
label: string;
|
||||
value: number;
|
||||
}>;
|
||||
label: string;
|
||||
value?: any;
|
||||
selectable?: boolean;
|
||||
selected?: boolean;
|
||||
className?: string;
|
||||
};
|
||||
};
|
||||
export default playbackRate;
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/selectors/playback-rate-selector/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAEhD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAgBxD,UAAU,gBAAiB,SAAQ,yBAAyB;IAC3D,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,QAAA,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,UAAS,gBAA2B;;;;;;;;;gBAHjE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;;;;;;;CAwB/C,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
||||
35
packages/video-player/dist/core/plugins/settings/selectors/playback-rate-selector/index.js
vendored
Normal file
35
packages/video-player/dist/core/plugins/settings/selectors/playback-rate-selector/index.js
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
const defaults = {
|
||||
label: "Скорость воспроизведения",
|
||||
selected: false,
|
||||
selectable: false,
|
||||
speeds: [
|
||||
{ label: "0.5x", value: 0.5 },
|
||||
{ label: "Обычная", value: 1 },
|
||||
{ label: "1.5x", value: 1.5 },
|
||||
{ label: "1.75x", value: 1.75 },
|
||||
{ label: "2x", value: 2 },
|
||||
],
|
||||
className: "speed-selector",
|
||||
};
|
||||
const playbackRate = (player, options = defaults) => {
|
||||
const menuItems = () => options.speeds.map(speed => {
|
||||
return {
|
||||
label: speed.label,
|
||||
selectable: true,
|
||||
selected: speed.value === player.playbackRate(),
|
||||
onClick: () => player.playbackRate(speed.value),
|
||||
};
|
||||
});
|
||||
const menuItem = () => {
|
||||
return {
|
||||
...options,
|
||||
enabled: true,
|
||||
};
|
||||
};
|
||||
return {
|
||||
menuItems,
|
||||
menuItem,
|
||||
};
|
||||
};
|
||||
export default playbackRate;
|
||||
//# sourceMappingURL=index.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/selectors/playback-rate-selector/index.ts"],"names":[],"mappings":"AAIA,MAAM,QAAQ,GAAG;IAChB,KAAK,EAAE,0BAA0B;IACjC,QAAQ,EAAE,KAAK;IACf,UAAU,EAAE,KAAK;IACjB,MAAM,EAAE;QACP,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;QAC7B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;QAC9B,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;QAC7B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;QAC/B,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;KACzB;IACD,SAAS,EAAE,gBAAgB;CAC3B,CAAC;AAMF,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,UAA4B,QAAQ,EAAE,EAAE;IAC7E,MAAM,SAAS,GAAG,GAAG,EAAE,CACtB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAC1B,OAAO;YACN,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,YAAY,EAAE;YAC/C,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;SAC/C,CAAC;IACH,CAAC,CAAC,CAAC;IACJ,MAAM,QAAQ,GAAG,GAAG,EAAE;QACrB,OAAO;YACN,GAAG,OAAO;YACV,OAAO,EAAE,IAAI;SACb,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACN,SAAS;QACT,QAAQ;KACR,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
||||
39
packages/video-player/dist/core/plugins/settings/selectors/quality-rate-selector/index.d.ts
vendored
Normal file
39
packages/video-player/dist/core/plugins/settings/selectors/quality-rate-selector/index.d.ts
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
import Player from "video.js/dist/types/player";
|
||||
import { TachPlayerMenuItemOptions } from "../../types";
|
||||
interface QualityMenuOptions extends TachPlayerMenuItemOptions {
|
||||
}
|
||||
declare const qualityRate: (player: Player, options?: QualityMenuOptions) => {
|
||||
menuItems: () => {
|
||||
label: string;
|
||||
value: string;
|
||||
selected: boolean;
|
||||
onClick: () => void;
|
||||
}[];
|
||||
menuItem: () => {
|
||||
enabled: boolean;
|
||||
label: string;
|
||||
value?: any;
|
||||
selectable?: boolean;
|
||||
selected?: boolean;
|
||||
className?: string;
|
||||
};
|
||||
setMenuUpdateCallback: () => void;
|
||||
} | {
|
||||
menuItem: () => {
|
||||
enabled: boolean;
|
||||
label: string;
|
||||
value?: any;
|
||||
selectable?: boolean;
|
||||
selected?: boolean;
|
||||
className?: string;
|
||||
};
|
||||
menuItems: () => {
|
||||
label: string;
|
||||
value: number;
|
||||
selected: boolean;
|
||||
onClick: () => void;
|
||||
}[];
|
||||
setMenuUpdateCallback: (cb: () => void) => void;
|
||||
};
|
||||
export default qualityRate;
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/selectors/quality-rate-selector/index.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAEhD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAgBxD,UAAU,kBAAmB,SAAQ,yBAAyB;CAAG;AAEjE,QAAA,MAAM,WAAW,GAChB,QAAQ,MAAM,EACd,UAAS,kBAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAyHH,MAAM,IAAI;CAgB7C,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
||||
125
packages/video-player/dist/core/plugins/settings/selectors/quality-rate-selector/index.js
vendored
Normal file
125
packages/video-player/dist/core/plugins/settings/selectors/quality-rate-selector/index.js
vendored
Normal file
@@ -0,0 +1,125 @@
|
||||
import Hls from "hls.js";
|
||||
const defaults = {
|
||||
label: "Качество",
|
||||
selected: false,
|
||||
selectable: false,
|
||||
className: "quality-selector",
|
||||
};
|
||||
const qualityRate = (player, options = defaults) => {
|
||||
const hls = player.hlsInstance;
|
||||
let onMenuUpdate = null;
|
||||
if (!hls) {
|
||||
return {
|
||||
menuItems: () => [
|
||||
{ label: "Авто", value: "auto", selected: true, onClick: () => { } },
|
||||
],
|
||||
menuItem: () => ({ ...options, enabled: false }),
|
||||
setMenuUpdateCallback: () => { },
|
||||
};
|
||||
}
|
||||
// Инициализация состояния уровней качества
|
||||
let levels = [];
|
||||
let isMenuInitialized = false;
|
||||
const updateLevels = () => {
|
||||
if (hls.levels?.length > 0) {
|
||||
levels = hls.levels;
|
||||
if (!isMenuInitialized) {
|
||||
isMenuInitialized = true;
|
||||
}
|
||||
if (onMenuUpdate) {
|
||||
onMenuUpdate();
|
||||
}
|
||||
}
|
||||
};
|
||||
// Обновляем уровни при загрузке манифеста
|
||||
hls.on(Hls.Events.MANIFEST_PARSED, () => {
|
||||
updateLevels();
|
||||
});
|
||||
// Проверяем, есть ли уже доступные уровни
|
||||
if (hls.levels && hls.levels?.length > 0) {
|
||||
levels = hls.levels;
|
||||
}
|
||||
const getPixels = (l) => (l.width > l.height ? l.height : l.width);
|
||||
const formatBitrate = (bps) => (bps / 1000000).toFixed(1).replace(/\.0$/, "") + " Мбит";
|
||||
const getCurrentAutoLevel = () => {
|
||||
const current = levels[hls.currentLevel];
|
||||
return current ? `${getPixels(current)}p` : "";
|
||||
};
|
||||
const getCurrentManualLevel = () => {
|
||||
const manual = levels[hls.manualLevel];
|
||||
return manual
|
||||
? `${getPixels(manual)}p / ${formatBitrate(manual.bitrate)}`
|
||||
: "Качество";
|
||||
};
|
||||
const menuItem = () => {
|
||||
return {
|
||||
...options,
|
||||
enabled: levels?.length > 0,
|
||||
label: levels?.length === 0
|
||||
? "Качество"
|
||||
: levels?.length === 1
|
||||
? "Авто"
|
||||
: hls.autoLevelEnabled
|
||||
? `Авто (${getCurrentAutoLevel()})`
|
||||
: getCurrentManualLevel(),
|
||||
};
|
||||
};
|
||||
const setQuality = (quality) => {
|
||||
if (!levels?.length)
|
||||
return;
|
||||
if (quality === 'auto') {
|
||||
hls.currentLevel = -1;
|
||||
}
|
||||
else if (typeof quality === 'number') {
|
||||
hls.currentLevel = quality;
|
||||
}
|
||||
};
|
||||
const menuItems = () => {
|
||||
const isAuto = hls.autoLevelEnabled;
|
||||
// Если доступен только один уровень качества, показываем только "Авто"
|
||||
if (levels?.length <= 1) {
|
||||
return [{
|
||||
label: "Авто",
|
||||
value: -1,
|
||||
selected: true,
|
||||
onClick: () => setQuality('auto'),
|
||||
}];
|
||||
}
|
||||
const items = levels.map((level, index) => {
|
||||
const label = `${getPixels(level)}p / ${formatBitrate(level.bitrate)}`;
|
||||
const selected = !isAuto && hls.currentLevel === index;
|
||||
return {
|
||||
label,
|
||||
value: index,
|
||||
selected,
|
||||
onClick: () => setQuality(index),
|
||||
};
|
||||
});
|
||||
items.sort((a, b) => b.value - a.value);
|
||||
// Добавляем "Авто" с информацией о текущем качестве только если есть выбор
|
||||
items.push({
|
||||
label: isAuto ? `Авто (${getCurrentAutoLevel()})` : "Авто",
|
||||
value: -1,
|
||||
selected: isAuto,
|
||||
onClick: () => setQuality('auto'),
|
||||
});
|
||||
return items;
|
||||
};
|
||||
// Позволяет установить внешний колбэк на обновление меню
|
||||
const setMenuUpdateCallback = (cb) => {
|
||||
onMenuUpdate = cb;
|
||||
// Если уже есть уровни качества, сразу обновляем меню
|
||||
if (levels?.length > 0) {
|
||||
requestAnimationFrame(() => cb());
|
||||
}
|
||||
};
|
||||
// Подписка на смену уровня (в т.ч. в авто режиме)
|
||||
hls.on(Hls.Events.LEVEL_SWITCHED, () => {
|
||||
if (onMenuUpdate) {
|
||||
onMenuUpdate(); // триггерим обновление главного меню
|
||||
}
|
||||
});
|
||||
return { menuItem, menuItems, setMenuUpdateCallback };
|
||||
};
|
||||
export default qualityRate;
|
||||
//# sourceMappingURL=index.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/selectors/quality-rate-selector/index.ts"],"names":[],"mappings":"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"}
|
||||
26
packages/video-player/dist/core/plugins/settings/selectors/text-track-selector/index.d.ts
vendored
Normal file
26
packages/video-player/dist/core/plugins/settings/selectors/text-track-selector/index.d.ts
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
import Player from "video.js/dist/types/player";
|
||||
import { TachPlayerMenuItemOptions } from "../../types";
|
||||
interface QualityMenuOptions extends TachPlayerMenuItemOptions {
|
||||
}
|
||||
declare const textTracks: (player: Player & {
|
||||
textTracks: () => {
|
||||
tracks_?: TextTrack[];
|
||||
};
|
||||
}, options?: QualityMenuOptions) => {
|
||||
menuItems: () => {
|
||||
label: any;
|
||||
value: any;
|
||||
selected: boolean;
|
||||
onClick: () => void;
|
||||
}[];
|
||||
menuItem: () => {
|
||||
enabled: boolean;
|
||||
label: string;
|
||||
value?: any;
|
||||
selectable?: boolean;
|
||||
selected?: boolean;
|
||||
className?: string;
|
||||
};
|
||||
};
|
||||
export default textTracks;
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/selectors/text-track-selector/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAEhD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AASxD,UAAU,kBAAmB,SAAQ,yBAAyB;CAAG;AAEjE,QAAA,MAAM,UAAU,GACf,QAAQ,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM;QAAE,OAAO,CAAC,EAAE,SAAS,EAAE,CAAA;KAAE,CAAA;CAAE,EAChE,UAAS,kBAA6B;;;;;;;;;;;;;;;CAgDtC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
||||
49
packages/video-player/dist/core/plugins/settings/selectors/text-track-selector/index.js
vendored
Normal file
49
packages/video-player/dist/core/plugins/settings/selectors/text-track-selector/index.js
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
const defaults = {
|
||||
label: "Субтитры",
|
||||
selected: false,
|
||||
selectable: false,
|
||||
className: "subs-selector",
|
||||
};
|
||||
const textTracks = (player, options = defaults) => {
|
||||
const menuItems = () => {
|
||||
const textTracks = player.textTracks().tracks_;
|
||||
const trackItems = [];
|
||||
for (let i = 0; i < textTracks?.length; ++i) {
|
||||
if (textTracks[i].mode === "hidden") {
|
||||
continue;
|
||||
}
|
||||
const trackItem = {
|
||||
label: textTracks[i].label,
|
||||
value: textTracks[i].label,
|
||||
selected: textTracks[i].mode === "showing",
|
||||
onClick: () => setTrack(textTracks[i]),
|
||||
};
|
||||
trackItems.push(trackItem);
|
||||
}
|
||||
return trackItems;
|
||||
};
|
||||
const setTrack = (track) => {
|
||||
const textTracks = player.textTracks().tracks_;
|
||||
for (let i = 0; i < textTracks?.length; ++i) {
|
||||
if (textTracks[i].mode === "hidden") {
|
||||
continue;
|
||||
}
|
||||
if (textTracks[i].label === track.label)
|
||||
textTracks[i].mode = "showing";
|
||||
else
|
||||
textTracks[i].mode = "disabled";
|
||||
}
|
||||
};
|
||||
const menuItem = () => {
|
||||
return {
|
||||
...options,
|
||||
enabled: menuItems().length > 0,
|
||||
};
|
||||
};
|
||||
return {
|
||||
menuItems,
|
||||
menuItem,
|
||||
};
|
||||
};
|
||||
export default textTracks;
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
packages/video-player/dist/core/plugins/settings/selectors/text-track-selector/index.js.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/settings/selectors/text-track-selector/index.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/selectors/text-track-selector/index.ts"],"names":[],"mappings":"AAIA,MAAM,QAAQ,GAAG;IAChB,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,KAAK;IACf,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,eAAe;CAC1B,CAAC;AAIF,MAAM,UAAU,GAAG,CAClB,MAAgE,EAChE,UAA8B,QAAQ,EACrC,EAAE;IACH,MAAM,SAAS,GAAG,GAAG,EAAE;QACtB,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC;QAC/C,MAAM,UAAU,GAAG,EAAE,CAAC;QAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC7C,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,SAAS;YACV,CAAC;YAED,MAAM,SAAS,GAAG;gBACjB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK;gBAC1B,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK;gBAC1B,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS;gBAC1C,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aACtC,CAAC;YAEF,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,UAAU,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,KAAgB,EAAE,EAAE;QACrC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC;QAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC7C,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,SAAS;YACV,CAAC;YAED,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;gBAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC;;gBACnE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC;QACtC,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAG,EAAE;QACrB,OAAO;YACN,GAAG,OAAO;YACV,OAAO,EAAE,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC;SAC/B,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACN,SAAS;QACT,QAAQ;KACR,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
||||
93
packages/video-player/dist/core/plugins/settings/settings.css
vendored
Normal file
93
packages/video-player/dist/core/plugins/settings/settings.css
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
.video-js {
|
||||
.vjs-control-bar {
|
||||
.vjs-settings-button {
|
||||
.vjs-menu {
|
||||
z-index: 10 !important;
|
||||
&.vjs-lock-showing {
|
||||
width: 100%;
|
||||
|
||||
.vjs-menu-content {
|
||||
height: fit-content;
|
||||
bottom: 3em;
|
||||
width: 340px;
|
||||
left: -220px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.vjs-mobile-ui {
|
||||
.vjs-control-bar {
|
||||
.vjs-settings-button {
|
||||
.vjs-menu {
|
||||
&.vjs-lock-showing {
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
|
||||
.vjs-menu-content {
|
||||
border-radius: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
padding-top: 50vh;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
padding-bottom: 5px;
|
||||
max-height: 100vh;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
/* top: 85%;
|
||||
left: 50%; */
|
||||
/* transform: translate(-50%, -85%); */
|
||||
|
||||
background: rgba(
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0.5
|
||||
); /* затемнение в области паддингов */
|
||||
|
||||
&:hover {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50vh;
|
||||
left: 20px;
|
||||
right: 20px;
|
||||
bottom: 5px;
|
||||
background: var(--Default-BgDarken);
|
||||
border-radius: 10px; /* желаемый border-radius */
|
||||
}
|
||||
|
||||
.vjs-menu-item {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
border-radius: 0;
|
||||
|
||||
&:hover {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (orientation: landscape) {
|
||||
padding-top: 20px;
|
||||
padding-left: 25vw;
|
||||
padding-right: 25vw;
|
||||
|
||||
&::before {
|
||||
top: 20px;
|
||||
left: 25vw;
|
||||
right: 25vw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
10
packages/video-player/dist/core/plugins/settings/types.d.ts
vendored
Normal file
10
packages/video-player/dist/core/plugins/settings/types.d.ts
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
export interface TachPlayerMenuItemOptions {
|
||||
label: string;
|
||||
value?: any;
|
||||
selectable?: boolean;
|
||||
selected?: boolean;
|
||||
className?: string;
|
||||
}
|
||||
export interface TachPlayerPlugin {
|
||||
}
|
||||
//# sourceMappingURL=types.d.ts.map
|
||||
1
packages/video-player/dist/core/plugins/settings/types.d.ts.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/settings/types.d.ts.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/plugins/settings/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;CAAG"}
|
||||
2
packages/video-player/dist/core/plugins/settings/types.js
vendored
Normal file
2
packages/video-player/dist/core/plugins/settings/types.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
export {};
|
||||
//# sourceMappingURL=types.js.map
|
||||
1
packages/video-player/dist/core/plugins/settings/types.js.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/settings/types.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/plugins/settings/types.ts"],"names":[],"mappings":""}
|
||||
126
packages/video-player/dist/core/plugins/skip-buttons.css
vendored
Normal file
126
packages/video-player/dist/core/plugins/skip-buttons.css
vendored
Normal file
@@ -0,0 +1,126 @@
|
||||
.video-js {
|
||||
.vjs-skip-button-component {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: calc(50% - 48px);
|
||||
height: calc(100% - 73px);
|
||||
|
||||
opacity: 1;
|
||||
transition: opacity 1s;
|
||||
|
||||
&.vjs-skip-backward {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
&.vjs-skip-forward {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.vjs-skip-button {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.icon-placeholder {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
align-content: center;
|
||||
position: absolute;
|
||||
top: calc(50% + calc(48px / 2));
|
||||
}
|
||||
|
||||
.scroll-info {
|
||||
width: 100%;
|
||||
height: calc(100% + 73px);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
|
||||
padding: 6%;
|
||||
border-radius: 50%;
|
||||
box-sizing: border-box;
|
||||
|
||||
align-content: center;
|
||||
|
||||
color: var(--Light-theme-Default-White, #fff);
|
||||
text-align: center;
|
||||
/* app/bold/Headline */
|
||||
font-family: Inter;
|
||||
font-size: 1.3vw;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
|
||||
.scroll-icon {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.scroll-text {
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
font-size: 1vw;
|
||||
}
|
||||
}
|
||||
|
||||
&.vjs-skip-button-backward {
|
||||
.icon-placeholder {
|
||||
right: 10px;
|
||||
background-repeat: no-repeat;
|
||||
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M31.8191 5.58705C29.3458 4.53678 26.6859 3.99697 23.9988 4.00001C17.4569 4.00039 11.6487 7.14174 8 11.9982V8.00001C8 6.89544 7.10457 6.00001 6 6.00001C4.89543 6.00001 4 6.89544 4 8.00001V24C4 25.1046 4.89543 26 6 26C7.10457 26 8 25.1046 8 24C8 15.1636 15.1636 8.00001 24 8.00001L24.0024 8.00001C26.151 7.99745 28.278 8.42902 30.2557 9.26884C32.2334 10.1087 34.021 11.3394 35.5113 12.8872C36.2774 13.6829 37.5435 13.7069 38.3392 12.9407C39.1349 12.1746 39.1589 10.9085 38.3927 10.1128C36.5287 8.17687 34.2928 6.63748 31.8191 5.58705ZM42 22C40.8954 22 40 22.8954 40 24C40 32.8364 32.8364 40 24 40H23.9973C19.8528 40.0056 15.8691 38.3968 12.8908 35.5148C12.0971 34.7466 10.8309 34.7674 10.0628 35.5612C9.29464 36.3549 9.31542 37.6211 10.1092 38.3892C13.8348 41.9945 18.8182 44.007 24.0027 44L24 42V44H24.0027C35.047 43.9985 44 35.0447 44 24C44 22.8954 43.1046 22 42 22Z' fill='white'/%3E%3C/svg%3E") no-repeat center / 24px 24px;
|
||||
}
|
||||
.scroll-info {
|
||||
left: -65%;
|
||||
align-items: end;
|
||||
background: linear-gradient(
|
||||
270deg,
|
||||
rgba(0, 0, 0, 0.25) 0%,
|
||||
rgba(0, 0, 0, 0) 73.42%
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
&.vjs-skip-button-forward {
|
||||
.icon-placeholder {
|
||||
left: 10px;
|
||||
background-repeat: no-repeat;
|
||||
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M16.1809 5.58705C18.6542 4.53678 21.3141 3.99697 24.0012 4.00001C30.5431 4.00039 36.3513 7.14174 40 11.9982V8.00001C40 6.89544 40.8954 6.00001 42 6.00001C43.1046 6.00001 44 6.89544 44 8.00001V24C44 25.1046 43.1046 26 42 26C40.8954 26 40 25.1046 40 24C40 15.1636 32.8364 8.00001 24 8.00001L23.9976 8.00001C21.849 7.99745 19.722 8.42902 17.7443 9.26884C15.7666 10.1087 13.979 11.3394 12.4887 12.8872C11.7226 13.6829 10.4565 13.7069 9.66082 12.9407C8.86512 12.1746 8.84114 10.9085 9.60727 10.1128C11.4713 8.17687 13.7072 6.63748 16.1809 5.58705ZM6 22C7.10457 22 8 22.8954 8 24C8 32.8364 15.1636 40 24 40H24.0027C28.1472 40.0056 32.1309 38.3968 35.1092 35.5148C35.9029 34.7466 37.1691 34.7674 37.9372 35.5612C38.7054 36.3549 38.6846 37.6211 37.8908 38.3892C34.1652 41.9945 29.1818 44.007 23.9973 44L24 42V44H23.9973C12.953 43.9985 4 35.0447 4 24C4 22.8954 4.89543 22 6 22Z' fill='white'/%3E%3C/svg%3E") no-repeat center / 24px 24px;
|
||||
}
|
||||
.scroll-info {
|
||||
align-items: start;
|
||||
right: -65%;
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
rgba(0, 0, 0, 0.25) 0%,
|
||||
rgba(0, 0, 0, 0) 73.42%
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.vjs-user-inactive {
|
||||
.vjs-skip-button-component {
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* &.vjs-hls-live, */
|
||||
&.vjs-controls-disabled {
|
||||
.vjs-skip-button-component {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
8
packages/video-player/dist/core/plugins/skip-buttons.d.ts
vendored
Normal file
8
packages/video-player/dist/core/plugins/skip-buttons.d.ts
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
import type Player from "video.js/dist/types/player";
|
||||
import "./skip-buttons.css";
|
||||
export interface SkipButtonsOptions {
|
||||
skip: number;
|
||||
}
|
||||
declare const skipButtonsPlugin: (this: Player, options: SkipButtonsOptions) => void;
|
||||
export default skipButtonsPlugin;
|
||||
//# sourceMappingURL=skip-buttons.d.ts.map
|
||||
1
packages/video-player/dist/core/plugins/skip-buttons.d.ts.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/skip-buttons.d.ts.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"skip-buttons.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/skip-buttons.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;AAErD,OAAO,oBAAoB,CAAC;AAE5B,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;CACb;AAoID,QAAA,MAAM,iBAAiB,GAAa,MAAM,MAAM,EAAE,SAAS,kBAAkB,SAoD5E,CAAC;AAIF,eAAe,iBAAiB,CAAC"}
|
||||
150
packages/video-player/dist/core/plugins/skip-buttons.js
vendored
Normal file
150
packages/video-player/dist/core/plugins/skip-buttons.js
vendored
Normal file
@@ -0,0 +1,150 @@
|
||||
import videojs from "video.js";
|
||||
import "./skip-buttons.css";
|
||||
const BACKWARD_SCROLL_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" style="width: 20%; max-width: 48px; height: auto;" fill="none"><path d="M41.1751 35.3188C40.5985 35.3188 40.1204 35.1359 39.5579 34.7984L25.2282 26.361C24.2298 25.7704 23.7938 25.0812 23.7938 24.2656C23.7938 23.4641 24.2298 22.775 25.2282 22.1844L39.5579 13.7469C40.1344 13.4094 40.5985 13.2266 41.1751 13.2266C42.2719 13.2266 43.2001 14.0703 43.2001 15.6312V32.9141C43.2001 34.475 42.2719 35.3188 41.1751 35.3188ZM21.8532 35.3188C21.2767 35.3188 20.7985 35.1359 20.236 34.7984L5.89231 26.361C4.90783 25.7704 4.47199 25.0812 4.47199 24.2656C4.47199 23.4641 4.90783 22.775 5.89231 22.1844L20.236 13.7469C20.7985 13.4094 21.2767 13.2266 21.8532 13.2266C22.9501 13.2266 23.8782 14.0703 23.8782 15.6312V32.9141C23.8782 34.475 22.9501 35.3188 21.8532 35.3188Z" fill="url(#paint0_linear_17944_473880)"/><defs><linearGradient id="paint0_linear_17944_473880" x1="43.2001" y1="23.9984" x2="4.80007" y2="23.9984" gradientUnits="userSpaceOnUse"><stop stop-color="white"/><stop offset="0.49" stop-color="white"/><stop offset="0.5" stop-color="white" stop-opacity="0.3"/><stop offset="1" stop-color="white" stop-opacity="0.3"/></linearGradient></defs></svg>`;
|
||||
const FORWARD_SCROLL_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" style="width: 20%; max-width: 48px; height: auto;" fill="none"><path d="M2.82499 22.3188C3.40155 22.3188 3.87968 22.1359 4.44218 21.7984L18.7719 13.361C19.7703 12.7704 20.2063 12.0812 20.2063 11.2656C20.2063 10.4641 19.7703 9.775 18.7719 9.18437L4.44218 0.746875C3.86562 0.409375 3.40155 0.226562 2.82499 0.226562C1.72811 0.226562 0.799988 1.07031 0.799988 2.63125V19.9141C0.799988 21.475 1.72811 22.3188 2.82499 22.3188ZM22.1469 22.3188C22.7234 22.3188 23.2016 22.1359 23.764 21.7984L38.1077 13.361C39.0922 12.7704 39.5281 12.0812 39.5281 11.2656C39.5281 10.4641 39.0922 9.775 38.1077 9.18437L23.764 0.746875C23.2016 0.409375 22.7234 0.226562 22.1469 0.226562C21.05 0.226562 20.1219 1.07031 20.1219 2.63125V19.9141C20.1219 21.475 21.05 22.3188 22.1469 22.3188Z" fill="url(#paint0_linear_17959_7312)"/><defs><linearGradient id="paint0_linear_17959_7312" x1="0.799988" y1="10.9984" x2="39.2" y2="10.9984" gradientUnits="userSpaceOnUse"><stop stop-color="white"/><stop offset="0.49" stop-color="white"/><stop offset="0.5" stop-color="white" stop-opacity="0.3"/><stop offset="1" stop-color="white" stop-opacity="0.3"/></linearGradient></defs></svg>`;
|
||||
const wakePlayerUI = (player) => {
|
||||
const playerWithActivity = player;
|
||||
playerWithActivity.reportUserActivity?.();
|
||||
playerWithActivity.userActive?.(true);
|
||||
player.el()?.focus?.();
|
||||
};
|
||||
const secondsLabel = (accumulated) => {
|
||||
const seconds = Math.abs(accumulated);
|
||||
const mod10 = seconds % 10;
|
||||
const mod100 = seconds % 100;
|
||||
if (mod10 === 1 && mod100 !== 11) {
|
||||
return `${seconds} секунду`;
|
||||
}
|
||||
if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14)) {
|
||||
return `${seconds} секунды`;
|
||||
}
|
||||
return `${seconds} секунд`;
|
||||
};
|
||||
const createSkipButton = (player, skip, direction) => {
|
||||
const button = document.createElement("button");
|
||||
button.type = "button";
|
||||
button.className = `vjs-skip-button vjs-skip-button-${direction}`;
|
||||
const icon = document.createElement("span");
|
||||
icon.className = "icon-placeholder";
|
||||
icon.textContent = String(skip);
|
||||
button.appendChild(icon);
|
||||
const scrollInfo = document.createElement("div");
|
||||
scrollInfo.className = "scroll-info";
|
||||
scrollInfo.style.display = "none";
|
||||
const scrollIcon = document.createElement("span");
|
||||
scrollIcon.className = `scroll-icon scroll-icon-${direction}`;
|
||||
scrollIcon.innerHTML =
|
||||
direction === "backward" ? BACKWARD_SCROLL_ICON : FORWARD_SCROLL_ICON;
|
||||
scrollInfo.appendChild(scrollIcon);
|
||||
const scrollText = document.createElement("span");
|
||||
scrollText.className = "scroll-text";
|
||||
scrollInfo.appendChild(scrollText);
|
||||
button.appendChild(scrollInfo);
|
||||
let accumulated = 0;
|
||||
let timer = null;
|
||||
const renderScrollInfo = () => {
|
||||
if (accumulated === 0) {
|
||||
scrollInfo.style.display = "none";
|
||||
scrollText.textContent = "";
|
||||
return;
|
||||
}
|
||||
scrollInfo.style.display = "flex";
|
||||
scrollText.textContent = secondsLabel(accumulated);
|
||||
};
|
||||
button.addEventListener("click", () => {
|
||||
wakePlayerUI(player);
|
||||
accumulated += direction === "forward" ? skip : -skip;
|
||||
renderScrollInfo();
|
||||
if (timer) {
|
||||
clearTimeout(timer);
|
||||
}
|
||||
timer = setTimeout(() => {
|
||||
const currentTime = player.currentTime() || 0;
|
||||
player.currentTime(currentTime + accumulated);
|
||||
wakePlayerUI(player);
|
||||
accumulated = 0;
|
||||
renderScrollInfo();
|
||||
}, 500);
|
||||
});
|
||||
return button;
|
||||
};
|
||||
class SkipButtonComponent extends videojs.getComponent("Component") {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this.element = null;
|
||||
}
|
||||
createEl() {
|
||||
const direction = this.options_.direction;
|
||||
const skip = Number(this.options_.skip) || 10;
|
||||
const el = super.createEl("div", {
|
||||
className: `vjs-skip-button-component vjs-skip-${direction}`,
|
||||
});
|
||||
this.element = createSkipButton(this.player(), skip, direction);
|
||||
el.appendChild(this.element);
|
||||
return el;
|
||||
}
|
||||
}
|
||||
class SkipBackwardButtonComponent extends SkipButtonComponent {
|
||||
constructor(player, options) {
|
||||
options.direction = "backward";
|
||||
super(player, options);
|
||||
}
|
||||
}
|
||||
class SkipForwardButtonComponent extends SkipButtonComponent {
|
||||
constructor(player, options) {
|
||||
options.direction = "forward";
|
||||
super(player, options);
|
||||
}
|
||||
}
|
||||
videojs.registerComponent("SkipBackwardButtonComponent", SkipBackwardButtonComponent);
|
||||
videojs.registerComponent("SkipForwardButtonComponent", SkipForwardButtonComponent);
|
||||
const skipButtonsPlugin = function (options) {
|
||||
const player = this;
|
||||
player.ready(() => {
|
||||
player.addChild("SkipBackwardButtonComponent", { skip: options.skip });
|
||||
player.addChild("SkipForwardButtonComponent", { skip: options.skip });
|
||||
const triggerSkip = (direction) => {
|
||||
const selector = `.vjs-skip-button-${direction}`;
|
||||
const button = player.el().querySelector(selector);
|
||||
wakePlayerUI(player);
|
||||
button?.click();
|
||||
};
|
||||
const onKeydown = (event) => {
|
||||
const active = document.activeElement;
|
||||
const tag = active?.tagName;
|
||||
const isEditable = tag === "INPUT" ||
|
||||
tag === "TEXTAREA" ||
|
||||
tag === "SELECT" ||
|
||||
active?.getAttribute("contenteditable") === "true";
|
||||
if (isEditable) {
|
||||
return;
|
||||
}
|
||||
if (event.key === " " || event.code === "Space") {
|
||||
event.preventDefault();
|
||||
wakePlayerUI(player);
|
||||
if (player.paused()) {
|
||||
void player.play();
|
||||
}
|
||||
else {
|
||||
player.pause();
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (event.key === "ArrowRight") {
|
||||
event.preventDefault();
|
||||
triggerSkip("forward");
|
||||
}
|
||||
else if (event.key === "ArrowLeft") {
|
||||
event.preventDefault();
|
||||
triggerSkip("backward");
|
||||
}
|
||||
};
|
||||
document.addEventListener("keydown", onKeydown);
|
||||
player.on("dispose", () => {
|
||||
document.removeEventListener("keydown", onKeydown);
|
||||
});
|
||||
});
|
||||
};
|
||||
videojs.registerPlugin("skipButtons", skipButtonsPlugin);
|
||||
export default skipButtonsPlugin;
|
||||
//# sourceMappingURL=skip-buttons.js.map
|
||||
1
packages/video-player/dist/core/plugins/skip-buttons.js.map
vendored
Normal file
1
packages/video-player/dist/core/plugins/skip-buttons.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user