From 0b2b0da9577f8d6ad19393700071ea9f26d4da10 Mon Sep 17 00:00:00 2001 From: jonz94 Date: Thu, 12 Dec 2024 20:31:59 +0800 Subject: [PATCH] feat(parser): Add `ClientSideToggleMenuItem` (#835) * feat(parser): Add `ClientSideToggleMenuItem` * feat: parse the command * feat: handle different type of `ClientSideToggleMenuItem` --- .../classes/ClientSideToggleMenuItem.ts | 46 +++++++++++++++++++ src/parser/nodes.ts | 1 + 2 files changed, 47 insertions(+) create mode 100644 src/parser/classes/ClientSideToggleMenuItem.ts diff --git a/src/parser/classes/ClientSideToggleMenuItem.ts b/src/parser/classes/ClientSideToggleMenuItem.ts new file mode 100644 index 00000000..7540df1b --- /dev/null +++ b/src/parser/classes/ClientSideToggleMenuItem.ts @@ -0,0 +1,46 @@ +import { YTNode } from '../helpers.js'; +import type { RawNode } from '../index.js'; +import NavigationEndpoint from './NavigationEndpoint.js'; +import Text from './misc/Text.js'; + +export default class ClientSideToggleMenuItem extends YTNode { + static type = 'ClientSideToggleMenuItem'; + + text: Text; + icon_type: string; + toggled_text: Text; + toggled_icon_type: string; + is_toggled?: boolean; + menu_item_identifier: string; + endpoint: NavigationEndpoint; + logging_directives?: { + visibility: { + types: string; + }, + enable_displaylogger_experiment: boolean; + }; + + constructor(data: RawNode) { + super(); + this.text = new Text(data.defaultText); + this.icon_type = data.defaultIcon.iconType; + this.toggled_text = new Text(data.toggledText); + this.toggled_icon_type = data.toggledIcon.iconType; + + if (Reflect.has(data, 'isToggled')) { + this.is_toggled = data.isToggled; + } + + this.menu_item_identifier = data.menuItemIdentifier; + this.endpoint = new NavigationEndpoint(data.command); + + if (Reflect.has(data, 'loggingDirectives')) { + this.logging_directives = { + visibility: { + types: data.loggingDirectives.visibility.types + }, + enable_displaylogger_experiment: data.loggingDirectives.enableDisplayloggerExperiment + }; + } + } +} diff --git a/src/parser/nodes.ts b/src/parser/nodes.ts index c24cc35d..35f30991 100644 --- a/src/parser/nodes.ts +++ b/src/parser/nodes.ts @@ -65,6 +65,7 @@ export { default as ChipBarView } from './classes/ChipBarView.js'; export { default as ChipCloud } from './classes/ChipCloud.js'; export { default as ChipCloudChip } from './classes/ChipCloudChip.js'; export { default as ChipView } from './classes/ChipView.js'; +export { default as ClientSideToggleMenuItem } from './classes/ClientSideToggleMenuItem.js'; export { default as ClipAdState } from './classes/ClipAdState.js'; export { default as ClipCreation } from './classes/ClipCreation.js'; export { default as ClipCreationScrubber } from './classes/ClipCreationScrubber.js';