Files
YouTube.js/src/parser/classes/EndscreenElement.ts
Daniel Wykerd 2ccbe2ce62 refactor!: cleanup platform support (#306)
* refactor!: cleanup platform support

* chore: lint

* fix: web platform

* feat: provide UniversalCache

Provide UniversalCache as a wrapper around Platform.shim.Cache.

* fix: invalid import

* refactor: remove isolated-vm support

* fix: type info

* refactor: cleanup exports

* fix: mark jintr as external dependency

In the bundled CJS node build, mark jintr as external.

* chore: add additional exports

web exports provide a way to select web implementation manually without
relying on the bundler to select it correctly from the "exports" field

web points to src/platform/web.js
web.bundle points to bundle/browser.js
web.bundle.browser points to bundle/browser.min.js

agnostic exports provide users of the library to provide their own
platform implementation without first importing the default one.

agnostic points to src/platform/lib.ts

* fix: toDash on web

* revert: eval is synchronous

* fix: use serializeDOM in FormatUtils

* ci: automate releases with `release-please`

* chore: clean up workflow files

* ci: fix NPM publish action

---------

Co-authored-by: LuanRT <luan.lrt4@gmail.com>
2023-02-12 04:21:44 -03:00

74 lines
1.7 KiB
TypeScript

import Parser from '../index.js';
import Thumbnail from './misc/Thumbnail.js';
import NavigationEndpoint from './NavigationEndpoint.js';
import Text from './misc/Text.js';
import { YTNode } from '../helpers.js';
class EndscreenElement extends YTNode {
static type = 'EndscreenElement';
style;
title;
endpoint;
image;
icon;
metadata;
call_to_action;
hovercard_button;
is_subscribe;
playlist_length;
thumbnail_overlays;
left;
top;
width;
aspect_ratio;
start_ms;
end_ms;
id: string;
constructor(data: any) {
super();
this.style = `${data.style}`;
this.title = new Text(data.title);
this.endpoint = new NavigationEndpoint(data.endpoint);
if (data.image) {
this.image = Thumbnail.fromResponse(data.image);
}
if (data.icon) {
this.icon = Thumbnail.fromResponse(data.icon);
}
if (data.metadata) {
this.metadata = new Text(data.metadata);
}
if (data.callToAction) {
this.call_to_action = new Text(data.callToAction);
}
if (data.hovercardButton) {
this.hovercard_button = Parser.parseItem(data.hovercardButton);
}
if (data.isSubscribe) {
this.is_subscribe = !!data.isSubscribe;
}
if (data.playlistLength) {
this.playlist_length = new Text(data.playlistLength);
}
this.thumbnail_overlays = data.thumbnailOverlays ? Parser.parseArray(data.thumbnailOverlays) : undefined;
this.left = parseFloat(data.left);
this.width = parseFloat(data.width);
this.top = parseFloat(data.top);
this.aspect_ratio = parseFloat(data.aspectRatio);
this.start_ms = parseFloat(data.startMs);
this.end_ms = parseFloat(data.endMs);
this.id = data.id;
}
}
export default EndscreenElement;