import * as React from "react"; import Config from "../config" import Utils from "../utils"; import { ContentContainer } from "../types"; import SubmissionNoticeComponent from "./SubmissionNoticeComponent"; var utils = new Utils(); export interface SponsorTimeEditProps { index: number, idSuffix: string, // Contains functions and variables from the content script needed by the skip notice contentContainer: ContentContainer, submissionNotice: SubmissionNoticeComponent; } export interface SponsorTimeEditState { editing: boolean; sponsorTimeEdits: Array>; } class SponsorTimeEditComponent extends React.Component { idSuffix: string; constructor(props: SponsorTimeEditProps) { super(props); this.idSuffix = this.idSuffix; this.state = { editing: false, sponsorTimeEdits: [[null, null], [null, null]] }; } componentDidMount() { // Prevent inputs from triggering key events document.getElementById("sponsorTimesContainer" + this.idSuffix).addEventListener('keydown', function (event) { event.stopPropagation(); }); } render() { let style: React.CSSProperties = { textAlign: "center" }; if (this.props.index != 0) { style.marginTop = "15px"; } // Create time display let timeDisplay: JSX.Element; let sponsorTime = this.props.contentContainer().sponsorTimesSubmitting[this.props.index]; if (this.state.editing) { timeDisplay = (
{ let sponsorTimeEdits = this.state.sponsorTimeEdits; sponsorTimeEdits[0][0] = parseFloat(e.target.value); this.setState({sponsorTimeEdits}); }}> { let sponsorTimeEdits = this.state.sponsorTimeEdits; sponsorTimeEdits[0][1] = parseFloat(e.target.value); this.setState({sponsorTimeEdits}); }}> {" " + chrome.i18n.getMessage("to") + " "} { let sponsorTimeEdits = this.state.sponsorTimeEdits; sponsorTimeEdits[1][0] = parseFloat(e.target.value); this.setState({sponsorTimeEdits}); }}> { let sponsorTimeEdits = this.state.sponsorTimeEdits; sponsorTimeEdits[1][1] = parseFloat(e.target.value); this.setState({sponsorTimeEdits}); }}>
); } else { timeDisplay = (
{utils.getFormattedTime(sponsorTime[0], true) + ((sponsorTime.length >= 1) ? " " + chrome.i18n.getMessage("to") + " " + utils.getFormattedTime(sponsorTime[1], true) : "")}
); } return (
{timeDisplay} {chrome.i18n.getMessage("delete")} {(sponsorTime.length >= 1) ? ( {chrome.i18n.getMessage("preview")} ): ""} {(sponsorTime.length >= 1) ? ( {this.state.editing ? chrome.i18n.getMessage("save") : chrome.i18n.getMessage("edit")} ): ""}
); } toggleEditTime(): void { if (this.state.editing) { this.setState({ editing: false }); this.saveEditTimes(); } else { let sponsorTime = this.props.contentContainer().sponsorTimesSubmitting[this.props.index]; this.setState({ editing: true, sponsorTimeEdits: [[utils.getFormattedMinutes(sponsorTime[0]), utils.getFormattedSeconds(sponsorTime[0])], [utils.getFormattedMinutes(sponsorTime[1]), utils.getFormattedSeconds(sponsorTime[1])]] }); } } saveEditTimes() { // Save sponsorTimes this.props.contentContainer().sponsorTimesSubmitting[this.props.index] = [utils.getRawSeconds(this.state.sponsorTimeEdits[0][0], this.state.sponsorTimeEdits[0][1]), utils.getRawSeconds(this.state.sponsorTimeEdits[1][0], this.state.sponsorTimeEdits[1][1])]; Config.config.sponsorTimes.set(this.props.contentContainer().sponsorVideoID, this.props.contentContainer().sponsorTimesSubmitting); this.props.contentContainer().updatePreviewBar(); } previewTime(): void { let sponsorTimes = this.props.contentContainer().sponsorTimesSubmitting; let index = this.props.index; let skipTime = sponsorTimes[index][0]; if (this.state.editing) { // Save edits before previewing this.saveEditTimes(); } this.props.contentContainer().previewTime(skipTime - 2); } deleteTime(): void { let sponsorTimes = this.props.contentContainer().sponsorTimesSubmitting; let index = this.props.index; //if it is not a complete sponsor time if (sponsorTimes[index].length < 2) { //update video player this.props.contentContainer().changeStartSponsorButton(true, false); } sponsorTimes.splice(index, 1); //save this Config.config.sponsorTimes.set(this.props.contentContainer().sponsorVideoID, sponsorTimes); this.props.contentContainer().updatePreviewBar(); //if they are all removed if (sponsorTimes.length == 0) { this.props.submissionNotice.cancel(); //update video player this.props.contentContainer().changeStartSponsorButton(true, false); } else { //update display this.props.submissionNotice.forceUpdate(); } } } export default SponsorTimeEditComponent;