diff --git a/src/parser/classes/ItemSection.ts b/src/parser/classes/ItemSection.ts index f27d41db..9ac7249c 100644 --- a/src/parser/classes/ItemSection.ts +++ b/src/parser/classes/ItemSection.ts @@ -3,18 +3,19 @@ import { Parser, type RawNode } from '../index.js'; import ItemSectionHeader from './ItemSectionHeader.js'; import ItemSectionTabbedHeader from './ItemSectionTabbedHeader.js'; import CommentsHeader from './comments/CommentsHeader.js'; +import SortFilterHeader from './SortFilterHeader.js'; export default class ItemSection extends YTNode { static type = 'ItemSection'; - header: CommentsHeader | ItemSectionHeader | ItemSectionTabbedHeader | null; + header: CommentsHeader | ItemSectionHeader | ItemSectionTabbedHeader | SortFilterHeader | null; contents: ObservedArray; target_id?: string; continuation?: string; constructor(data: RawNode) { super(); - this.header = Parser.parseItem(data.header, [ CommentsHeader, ItemSectionHeader, ItemSectionTabbedHeader ]); + this.header = Parser.parseItem(data.header, [ CommentsHeader, ItemSectionHeader, ItemSectionTabbedHeader, SortFilterHeader ]); this.contents = Parser.parseArray(data.contents); if (data.targetId || data.sectionIdentifier) { diff --git a/src/parser/classes/SortFilterHeader.ts b/src/parser/classes/SortFilterHeader.ts new file mode 100644 index 00000000..5cb0deab --- /dev/null +++ b/src/parser/classes/SortFilterHeader.ts @@ -0,0 +1,13 @@ +import { YTNode } from '../helpers.js'; +import { Parser, YTNodes, type RawNode } from '../index.js'; + +export default class SortFilterHeader extends YTNode { + static type = 'SortFilterHeader'; + + filter_menu: YTNodes.SortFilterSubMenu | null; + + constructor(data: RawNode) { + super(); + this.filter_menu = Parser.parseItem(data.filterMenu, YTNodes.SortFilterSubMenu); + } +} \ No newline at end of file diff --git a/src/parser/nodes.ts b/src/parser/nodes.ts index f974cec3..5a3b604d 100644 --- a/src/parser/nodes.ts +++ b/src/parser/nodes.ts @@ -351,6 +351,7 @@ export { default as SingleColumnMusicWatchNextResults } from './classes/SingleCo export { default as SingleHeroImage } from './classes/SingleHeroImage.js'; export { default as SlimOwner } from './classes/SlimOwner.js'; export { default as SlimVideoMetadata } from './classes/SlimVideoMetadata.js'; +export { default as SortFilterHeader } from './classes/SortFilterHeader.js'; export { default as SortFilterSubMenu } from './classes/SortFilterSubMenu.js'; export { default as StructuredDescriptionContent } from './classes/StructuredDescriptionContent.js'; export { default as StructuredDescriptionPlaylistLockup } from './classes/StructuredDescriptionPlaylistLockup.js'; diff --git a/src/parser/youtube/Settings.ts b/src/parser/youtube/Settings.ts index 5a9e3d33..96d1ea18 100644 --- a/src/parser/youtube/Settings.ts +++ b/src/parser/youtube/Settings.ts @@ -8,9 +8,11 @@ import SectionList from '../classes/SectionList.js'; import SettingsOptions from '../classes/SettingsOptions.js'; import SettingsSidebar from '../classes/SettingsSidebar.js'; import SettingsSwitch from '../classes/SettingsSwitch.js'; +import CommentsHeader from '../classes/comments/CommentsHeader.js'; +import ItemSectionHeader from '../classes/ItemSectionHeader.js'; +import ItemSectionTabbedHeader from '../classes/ItemSectionTabbedHeader.js'; import Tab from '../classes/Tab.js'; import TwoColumnBrowseResults from '../classes/TwoColumnBrowseResults.js'; - import type Actions from '../../core/Actions.js'; import type { ApiResponse } from '../../core/Actions.js'; import type { IBrowseResponse } from '../types/ParsedResponse.js'; @@ -42,7 +44,7 @@ class Settings { this.introduction = contents?.shift()?.contents?.firstOfType(PageIntroduction); this.sections = contents?.map((el: ItemSection) => ({ - title: el.header?.title.toString() || null, + title: el.header?.is(CommentsHeader, ItemSectionHeader, ItemSectionTabbedHeader) ? el.header.title.toString() : null, contents: el.contents })); }