/**
* Copyright (C) 2021 Thomas Weber
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see `;
});
};
const messages = defineMessages({
defaultTitle: {
defaultMessage: 'Editor',
description: 'Title of homepage',
id: 'pm.guiDefaultTitle'
}
});
const WrappedMenuBar = compose(
SBFileUploaderHOC,
TWPackagerIntegrationHOC
)(MenuBar);
if (AddonChannels.reloadChannel) {
AddonChannels.reloadChannel.addEventListener('message', () => {
location.reload();
});
}
if (AddonChannels.changeChannel) {
AddonChannels.changeChannel.addEventListener('message', e => {
SettingsStore.setStoreWithVersionCheck(e.data);
});
}
runAddons();
/* todo: fix this and make it work properly */
// const projectDetailCache = {};
// const getProjectDetailsById = async (id) => {
// // if we have already gotten the details of this project, avoid making another request since they likely never changed
// if (projectDetailCache[String(id)] != null) return projectDetailCache[String(id)];
// // TODO: when this is fixed change this to the new api
// const response = await fetch(`https://projects.penguinmod.com/api/projects/getPublished?id=${id}`);
// // Don't continue if the api never returned 200-299 since we would cache an error as project details
// if (!response.ok) return {};
// const project = await response.json();
// projectDetailCache[String(id)] = project;
// return projectDetailCache[String(id)];
// };
const Footer = () => (
);
const monthNames = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
];
const numberSuffixes = [
'st',
'nd',
'rd',
'th',
'th',
'th',
'th',
'th',
'th',
'th'
];
const addNumberSuffix = num => {
if (!num) return `${num}`;
if (num < 20 && num > 10) return `${num}th`;
return num + numberSuffixes[(num - 1) % 10];
};
class Interface extends React.Component {
constructor (props) {
super(props);
this.handleUpdateProjectTitle = this.handleUpdateProjectTitle.bind(this);
}
componentDidUpdate (prevProps) {
if (prevProps.isLoading && !this.props.isLoading) {
loadServiceWorker();
}
}
handleUpdateProjectTitle (title, isDefault) {
if (isDefault || !title) {
document.title = `PenguinMod - ${this.props.intl.formatMessage(messages.defaultTitle)}`;
} else {
document.title = `${title} - PenguinMod`;
}
}
copyProjectLink (id) {
if ('clipboard' in navigator && 'writeText' in navigator.clipboard) {
navigator.clipboard.writeText(`https://projects.penguinmod.com/${id}`);
}
}
render () {
const {
/* eslint-disable no-unused-vars */
intl,
hasCloudVariables,
title,
description,
extraProjectInfo,
remixedProjectInfo,
isFullScreen,
isLoading,
isPlayerOnly,
isRtl,
onClickTheme,
projectId,
/* eslint-enable no-unused-vars */
...props
} = this.props;
const isHomepage = isPlayerOnly && !isFullScreen;
const isEditor = !isPlayerOnly;
const isUpdated = extraProjectInfo.isUpdated;
const projectReleaseYear = extraProjectInfo.releaseDate.getFullYear();
const projectReleaseMonth = monthNames[extraProjectInfo.releaseDate.getMonth()];
const projectReleaseDay = addNumberSuffix(extraProjectInfo.releaseDate.getDate());
const hour24 = extraProjectInfo.releaseDate.getHours();
const projectReleaseHour = hour24 === 0 ? 12 : (hour24 > 12 ? hour24 - 12 : hour24);
const projectReleaseHalf = extraProjectInfo.releaseDate.getHours() > 11
? 'PM'
: 'AM';
const projectReleaseMinute = extraProjectInfo.releaseDate.getMinutes();
return (
This project is currently under review. Content may not be suitable for all ages, and you should be careful when running the project.
Thanks to {remixedProjectInfo.author} for the original project {remixedProjectInfo.name} .