feat: release v0.0.1
This commit is contained in:
38
dist/core/plugins/settings/components/tach-video-menu-button/index.d.ts
vendored
Normal file
38
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
|
||||
1
dist/core/plugins/settings/components/tach-video-menu-button/index.d.ts.map
vendored
Normal file
1
dist/core/plugins/settings/components/tach-video-menu-button/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-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
dist/core/plugins/settings/components/tach-video-menu-button/index.js
vendored
Normal file
90
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
|
||||
1
dist/core/plugins/settings/components/tach-video-menu-button/index.js.map
vendored
Normal file
1
dist/core/plugins/settings/components/tach-video-menu-button/index.js.map
vendored
Normal file
@@ -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
dist/core/plugins/settings/components/tach-video-menu-item/index.d.ts
vendored
Normal file
33
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
|
||||
1
dist/core/plugins/settings/components/tach-video-menu-item/index.d.ts.map
vendored
Normal file
1
dist/core/plugins/settings/components/tach-video-menu-item/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-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
dist/core/plugins/settings/components/tach-video-menu-item/index.js
vendored
Normal file
45
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
|
||||
1
dist/core/plugins/settings/components/tach-video-menu-item/index.js.map
vendored
Normal file
1
dist/core/plugins/settings/components/tach-video-menu-item/index.js.map
vendored
Normal file
@@ -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
dist/core/plugins/settings/components/tach-video-menu/index.d.ts
vendored
Normal file
33
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
dist/core/plugins/settings/components/tach-video-menu/index.d.ts.map
vendored
Normal file
1
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
dist/core/plugins/settings/components/tach-video-menu/index.js
vendored
Normal file
56
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
dist/core/plugins/settings/components/tach-video-menu/index.js.map
vendored
Normal file
1
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
dist/core/plugins/settings/index.d.ts
vendored
Normal file
53
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
dist/core/plugins/settings/index.d.ts.map
vendored
Normal file
1
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
dist/core/plugins/settings/index.js
vendored
Normal file
141
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
dist/core/plugins/settings/index.js.map
vendored
Normal file
1
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":"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"}
|
||||
27
dist/core/plugins/settings/selectors/audio-track-selector/index.d.ts
vendored
Normal file
27
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
|
||||
1
dist/core/plugins/settings/selectors/audio-track-selector/index.d.ts.map
vendored
Normal file
1
dist/core/plugins/settings/selectors/audio-track-selector/index.d.ts.map
vendored
Normal file
@@ -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
dist/core/plugins/settings/selectors/audio-track-selector/index.js
vendored
Normal file
125
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
dist/core/plugins/settings/selectors/audio-track-selector/index.js.map
vendored
Normal file
1
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
dist/core/plugins/settings/selectors/playback-rate-selector/index.d.ts
vendored
Normal file
30
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
|
||||
1
dist/core/plugins/settings/selectors/playback-rate-selector/index.d.ts.map
vendored
Normal file
1
dist/core/plugins/settings/selectors/playback-rate-selector/index.d.ts.map
vendored
Normal file
@@ -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
dist/core/plugins/settings/selectors/playback-rate-selector/index.js
vendored
Normal file
35
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
|
||||
1
dist/core/plugins/settings/selectors/playback-rate-selector/index.js.map
vendored
Normal file
1
dist/core/plugins/settings/selectors/playback-rate-selector/index.js.map
vendored
Normal file
@@ -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
dist/core/plugins/settings/selectors/quality-rate-selector/index.d.ts
vendored
Normal file
39
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
|
||||
1
dist/core/plugins/settings/selectors/quality-rate-selector/index.d.ts.map
vendored
Normal file
1
dist/core/plugins/settings/selectors/quality-rate-selector/index.d.ts.map
vendored
Normal file
@@ -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
dist/core/plugins/settings/selectors/quality-rate-selector/index.js
vendored
Normal file
125
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
|
||||
1
dist/core/plugins/settings/selectors/quality-rate-selector/index.js.map
vendored
Normal file
1
dist/core/plugins/settings/selectors/quality-rate-selector/index.js.map
vendored
Normal file
@@ -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
dist/core/plugins/settings/selectors/text-track-selector/index.d.ts
vendored
Normal file
26
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
|
||||
1
dist/core/plugins/settings/selectors/text-track-selector/index.d.ts.map
vendored
Normal file
1
dist/core/plugins/settings/selectors/text-track-selector/index.d.ts.map
vendored
Normal file
@@ -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
dist/core/plugins/settings/selectors/text-track-selector/index.js
vendored
Normal file
49
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
dist/core/plugins/settings/selectors/text-track-selector/index.js.map
vendored
Normal file
1
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
dist/core/plugins/settings/settings.css
vendored
Normal file
93
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
dist/core/plugins/settings/types.d.ts
vendored
Normal file
10
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
dist/core/plugins/settings/types.d.ts.map
vendored
Normal file
1
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
dist/core/plugins/settings/types.js
vendored
Normal file
2
dist/core/plugins/settings/types.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
export {};
|
||||
//# sourceMappingURL=types.js.map
|
||||
1
dist/core/plugins/settings/types.js.map
vendored
Normal file
1
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":""}
|
||||
Reference in New Issue
Block a user