mirror of
https://github.com/LuanRT/YouTube.js.git
synced 2026-06-13 09:32:12 +00:00
refactor: Update some nodes to use AccessibilityData.ts
This commit is contained in:
@@ -2,20 +2,22 @@ import Text from './misc/Text.js';
|
||||
import NavigationEndpoint from './NavigationEndpoint.js';
|
||||
import { YTNode } from '../helpers.js';
|
||||
import type { RawNode } from '../index.js';
|
||||
import AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';
|
||||
|
||||
export default class Button extends YTNode {
|
||||
static type = 'Button';
|
||||
|
||||
text?: string;
|
||||
label?: string;
|
||||
tooltip?: string;
|
||||
style?: string;
|
||||
size?: string;
|
||||
icon_type?: string;
|
||||
is_disabled?: boolean;
|
||||
target_id?: string;
|
||||
endpoint: NavigationEndpoint;
|
||||
|
||||
public text?: string;
|
||||
public label?: string;
|
||||
public tooltip?: string;
|
||||
public style?: string;
|
||||
public size?: string;
|
||||
public icon_type?: string;
|
||||
public is_disabled?: boolean;
|
||||
public target_id?: string;
|
||||
public endpoint: NavigationEndpoint;
|
||||
public accessibility?: AccessibilitySupportedDatas;
|
||||
|
||||
constructor(data: RawNode) {
|
||||
super();
|
||||
if (Reflect.has(data, 'text'))
|
||||
@@ -23,12 +25,13 @@ export default class Button extends YTNode {
|
||||
|
||||
if (Reflect.has(data, 'accessibility') && Reflect.has(data.accessibility, 'label')) {
|
||||
this.label = data.accessibility.label;
|
||||
} else if (
|
||||
Reflect.has(data, 'accessibilityData') &&
|
||||
Reflect.has(data.accessibilityData, 'accessibilityData') &&
|
||||
Reflect.has(data.accessibilityData.accessibilityData, 'label')
|
||||
) {
|
||||
this.label = data.accessibilityData.accessibilityData.label;
|
||||
}
|
||||
|
||||
if ('accessibilityData' in data
|
||||
&& 'accessibilityData' in data.accessibilityData) {
|
||||
this.accessibility = {
|
||||
accessibility_data: new AccessibilityData(data.accessibilityData.accessibilityData)
|
||||
};
|
||||
}
|
||||
|
||||
if (Reflect.has(data, 'tooltip'))
|
||||
|
||||
@@ -2,18 +2,29 @@ import Thumbnail from './misc/Thumbnail.js';
|
||||
import NavigationEndpoint from './NavigationEndpoint.js';
|
||||
import { YTNode } from '../helpers.js';
|
||||
import type { RawNode } from '../index.js';
|
||||
import AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';
|
||||
|
||||
export default class ChannelThumbnailWithLink extends YTNode {
|
||||
static type = 'ChannelThumbnailWithLink';
|
||||
|
||||
thumbnails: Thumbnail[];
|
||||
endpoint: NavigationEndpoint;
|
||||
label?: string;
|
||||
public thumbnails: Thumbnail[];
|
||||
public endpoint: NavigationEndpoint;
|
||||
public accessibility?: AccessibilitySupportedDatas;
|
||||
|
||||
constructor(data: RawNode) {
|
||||
super();
|
||||
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
|
||||
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
|
||||
this.label = data.accessibility?.accessibilityData?.label;
|
||||
|
||||
if ('accessibility' in data
|
||||
&& 'accessibilityData' in data.accessibility) {
|
||||
this.accessibility = {
|
||||
accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
get label(): string | undefined {
|
||||
return this.accessibility?.accessibility_data?.label;
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,26 @@
|
||||
import { YTNode } from '../helpers.js';
|
||||
import type { RawNode } from '../index.js';
|
||||
import AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';
|
||||
|
||||
export default class MusicInlineBadge extends YTNode {
|
||||
static type = 'MusicInlineBadge';
|
||||
|
||||
icon_type: string;
|
||||
label: string;
|
||||
public icon_type: string;
|
||||
public accessibility?: AccessibilitySupportedDatas;
|
||||
|
||||
constructor(data: RawNode) {
|
||||
super();
|
||||
this.icon_type = data.icon.iconType;
|
||||
this.label = data.accessibilityData.accessibilityData.label;
|
||||
|
||||
if ('accessibilityData' in data
|
||||
&& 'accessibilityData' in data.accessibilityData) {
|
||||
this.accessibility = {
|
||||
accessibility_data: new AccessibilityData(data.accessibilityData.accessibilityData)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
get label(): string | undefined {
|
||||
return this.accessibility?.accessibility_data?.label;
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,17 @@
|
||||
import NavigationEndpoint from './NavigationEndpoint.js';
|
||||
import { YTNode } from '../helpers.js';
|
||||
import type { RawNode } from '../index.js';
|
||||
import AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';
|
||||
|
||||
export default class MusicPlayButton extends YTNode {
|
||||
static type = 'MusicPlayButton';
|
||||
|
||||
endpoint: NavigationEndpoint;
|
||||
play_icon_type: string;
|
||||
pause_icon_type: string;
|
||||
play_label?: string;
|
||||
pause_label?: string;
|
||||
icon_color: string;
|
||||
public endpoint: NavigationEndpoint;
|
||||
public play_icon_type: string;
|
||||
public pause_icon_type: string;
|
||||
public icon_color: string;
|
||||
public accessibility_play_data?: AccessibilitySupportedDatas;
|
||||
public accessibility_pause_data?: AccessibilitySupportedDatas;
|
||||
|
||||
constructor(data: RawNode) {
|
||||
super();
|
||||
@@ -18,14 +19,28 @@ export default class MusicPlayButton extends YTNode {
|
||||
this.play_icon_type = data.playIcon.iconType;
|
||||
this.pause_icon_type = data.pauseIcon.iconType;
|
||||
|
||||
if (Reflect.has(data, 'accessibilityPlayData')) {
|
||||
this.play_label = data.accessibilityPlayData.accessibilityData?.label;
|
||||
if ('accessibilityPlayData' in data
|
||||
&& 'accessibilityData' in data.accessibilityPlayData) {
|
||||
this.accessibility_play_data = {
|
||||
accessibility_data: new AccessibilityData(data.accessibilityPlayData.accessibilityData)
|
||||
};
|
||||
}
|
||||
|
||||
if (Reflect.has(data, 'accessibilityPauseData')) {
|
||||
this.pause_label = data.accessibilityPauseData.accessibilityData?.label;
|
||||
if ('accessibilityPauseData' in data
|
||||
&& 'accessibilityData' in data.accessibilityPauseData) {
|
||||
this.accessibility_pause_data = {
|
||||
accessibility_data: new AccessibilityData(data.accessibilityPauseData.accessibilityData)
|
||||
};
|
||||
}
|
||||
|
||||
this.icon_color = data.iconColor;
|
||||
}
|
||||
|
||||
get play_label(): string | undefined {
|
||||
return this.accessibility_play_data?.accessibility_data?.label;
|
||||
}
|
||||
|
||||
get pause_label(): string | undefined {
|
||||
return this.accessibility_pause_data?.accessibility_data?.label;
|
||||
}
|
||||
}
|
||||
@@ -3,16 +3,17 @@ import type { RawNode } from '../index.js';
|
||||
import NavigationEndpoint from './NavigationEndpoint.js';
|
||||
import Text from './misc/Text.js';
|
||||
import Thumbnail from './misc/Thumbnail.js';
|
||||
import AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';
|
||||
|
||||
export default class ReelItem extends YTNode {
|
||||
static type = 'ReelItem';
|
||||
|
||||
id: string;
|
||||
title: Text;
|
||||
thumbnails: Thumbnail[];
|
||||
views: Text;
|
||||
endpoint: NavigationEndpoint;
|
||||
accessibility_label?: string;
|
||||
public id: string;
|
||||
public title: Text;
|
||||
public thumbnails: Thumbnail[];
|
||||
public views: Text;
|
||||
public endpoint: NavigationEndpoint;
|
||||
public accessibility?: AccessibilitySupportedDatas;
|
||||
|
||||
constructor(data: RawNode) {
|
||||
super();
|
||||
@@ -21,6 +22,16 @@ export default class ReelItem extends YTNode {
|
||||
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
|
||||
this.views = new Text(data.viewCountText);
|
||||
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
|
||||
this.accessibility_label = data.accessibility.accessibilityData.label;
|
||||
|
||||
if ('accessibility' in data
|
||||
&& 'accessibilityData' in data.accessibility) {
|
||||
this.accessibility = {
|
||||
accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
get label() {
|
||||
return this.accessibility?.accessibility_data?.label;
|
||||
}
|
||||
}
|
||||
@@ -1,42 +1,40 @@
|
||||
import { YTNode } from '../helpers.js';
|
||||
import type { RawNode } from '../index.js';
|
||||
import NavigationEndpoint from './NavigationEndpoint.js';
|
||||
import AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';
|
||||
|
||||
export interface SubMenuItem {
|
||||
title: string;
|
||||
selected: boolean;
|
||||
continuation: string;
|
||||
endpoint: NavigationEndpoint;
|
||||
subtitle: string | null;
|
||||
}
|
||||
|
||||
export default class SortFilterSubMenu extends YTNode {
|
||||
static type = 'SortFilterSubMenu';
|
||||
|
||||
title?: string;
|
||||
icon_type?: string;
|
||||
label?: string;
|
||||
tooltip?: string;
|
||||
|
||||
sub_menu_items?: {
|
||||
title: string;
|
||||
selected: boolean;
|
||||
continuation: string;
|
||||
endpoint: NavigationEndpoint;
|
||||
subtitle: string | null;
|
||||
}[];
|
||||
public title?: string;
|
||||
public icon_type?: string;
|
||||
public tooltip?: string;
|
||||
public sub_menu_items?: SubMenuItem[];
|
||||
public accessibility?: AccessibilitySupportedDatas;
|
||||
|
||||
constructor(data: RawNode) {
|
||||
super();
|
||||
if (Reflect.has(data, 'title')) {
|
||||
if ('title' in data) {
|
||||
this.title = data.title;
|
||||
}
|
||||
|
||||
if (Reflect.has(data, 'icon')) {
|
||||
if ('icon' in data) {
|
||||
this.icon_type = data.icon.iconType;
|
||||
}
|
||||
|
||||
if (Reflect.has(data, 'accessibility')) {
|
||||
this.label = data.accessibility.accessibilityData.label;
|
||||
}
|
||||
|
||||
if (Reflect.has(data, 'tooltip')) {
|
||||
if ('tooltip' in data) {
|
||||
this.tooltip = data.tooltip;
|
||||
}
|
||||
|
||||
if (Reflect.has(data, 'subMenuItems')) {
|
||||
if ('subMenuItems' in data) {
|
||||
this.sub_menu_items = data.subMenuItems.map((item: RawNode) => ({
|
||||
title: item.title,
|
||||
selected: item.selected,
|
||||
@@ -45,5 +43,16 @@ export default class SortFilterSubMenu extends YTNode {
|
||||
subtitle: item.subtitle || null
|
||||
}));
|
||||
}
|
||||
|
||||
if ('accessibility' in data
|
||||
&& 'accessibilityData' in data.accessibility) {
|
||||
this.accessibility = {
|
||||
accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
get label(): string | undefined {
|
||||
return this.accessibility?.accessibility_data?.label;
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import MenuFlexibleItem from './MenuFlexibleItem.js';
|
||||
import LikeButton from '../LikeButton.js';
|
||||
import ToggleButton from '../ToggleButton.js';
|
||||
import FlexibleActionsView from '../FlexibleActionsView.js';
|
||||
import AccessibilityData, { type AccessibilitySupportedDatas } from '../misc/AccessibilityData.js';
|
||||
|
||||
export default class Menu extends YTNode {
|
||||
static type = 'Menu';
|
||||
@@ -16,7 +17,7 @@ export default class Menu extends YTNode {
|
||||
public items: ObservedArray<YTNode>;
|
||||
public flexible_items: ObservedArray<MenuFlexibleItem>;
|
||||
public top_level_buttons: ObservedArray<ToggleButton | LikeButton | Button |ButtonView | SegmentedLikeDislikeButtonView | FlexibleActionsView>;
|
||||
public label?: string;
|
||||
public accessibility?: AccessibilitySupportedDatas;
|
||||
|
||||
constructor(data: RawNode) {
|
||||
super();
|
||||
@@ -24,10 +25,17 @@ export default class Menu extends YTNode {
|
||||
this.flexible_items = Parser.parseArray(data.flexibleItems, MenuFlexibleItem);
|
||||
this.top_level_buttons = Parser.parseArray(data.topLevelButtons, [ ToggleButton, LikeButton, Button, ButtonView, SegmentedLikeDislikeButtonView, FlexibleActionsView ]);
|
||||
|
||||
if (Reflect.has(data, 'accessibility') && Reflect.has(data.accessibility, 'accessibilityData')) {
|
||||
this.label = data.accessibility.accessibilityData.label;
|
||||
if ('accessibility' in data
|
||||
&& 'accessibilityData' in data.accessibility) {
|
||||
this.accessibility = {
|
||||
accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
get label(): string | undefined {
|
||||
return this.accessibility?.accessibility_data?.label;
|
||||
}
|
||||
|
||||
// XXX: alias for consistency
|
||||
get contents() {
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
import type { RawNode } from '../../types/index.js';
|
||||
|
||||
export interface AccessibilitySupportedDatas {
|
||||
accessibility_data: AccessibilityData;
|
||||
}
|
||||
|
||||
export interface AccessibilityId {
|
||||
accessibility_id_type?:
|
||||
| 'UNKNOWN'
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { YTNode } from '../../helpers.js';
|
||||
import { type RawNode } from '../../index.js';
|
||||
import Text from '../misc/Text.js';
|
||||
import NavigationEndpoint from '../NavigationEndpoint.js';
|
||||
import AccessibilityData, { type AccessibilitySupportedDatas } from '../misc/AccessibilityData.js';
|
||||
|
||||
export default class PivotBarItem extends YTNode {
|
||||
static type = 'PivotBarItem';
|
||||
@@ -11,6 +11,7 @@ export default class PivotBarItem extends YTNode {
|
||||
public title: Text;
|
||||
public accessibility_label?: string;
|
||||
public icon_type?: string;
|
||||
public accessibility?: AccessibilitySupportedDatas;
|
||||
|
||||
constructor(data: RawNode) {
|
||||
super();
|
||||
@@ -18,10 +19,18 @@ export default class PivotBarItem extends YTNode {
|
||||
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
|
||||
this.title = new Text(data.title);
|
||||
|
||||
if (Reflect.has(data, 'accessibility') && Reflect.has(data.accessibility, 'accessibilityData'))
|
||||
this.accessibility_label = data.accessibility.accessibilityData.label;
|
||||
|
||||
if ('accessibility' in data
|
||||
&& 'accessibilityData' in data.accessibility) {
|
||||
this.accessibility = {
|
||||
accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)
|
||||
};
|
||||
}
|
||||
|
||||
if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType'))
|
||||
this.icon_type = data.icon.iconType;
|
||||
}
|
||||
|
||||
get label() {
|
||||
return this.accessibility?.accessibility_data?.label;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user