You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

490 lines
15 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import React from "react";
import ReactDOM from "react-dom";
//import { Link } from "react-router-dom";
//import { MainPage } from "../../pages/main";
import Accordion from "../Acardion";
import ModalForm from "../Modal";
import "./style.css";
class FullCard extends React.Component {
ui = {
name: "Имя",
category: "Категория:",
versions: "Доступные версии",
uses: " USE:",
decription: "Описание:",
site: "Сайт:",
InstallButton: {
text: "Установить"
}
};
styleUseinfo = {
mobile: {
position: "fixed",
bottom: "0px",
left: "0px",
width: "100vw",
background: "#FFF",
borderTop: "1px solid #CDC",
paddingTop: "5px"
},
nomob: { margin: "5px", width: "100vw", display: "inline" }
};
langs = [
{ title: "RU", link: "" },
{ title: "EN", link: "" },
{ title: "DE", link: "" }
];
isMobile() {
return navigator.userAgentData.mobile;
}
IntstallPackageParamms = {
NamePackage: this.props.PackageName.Name,
Version: "",
USE: [],
TargetUses: {}
};
toBack() {
document.getElementById("pTitle").textContent = "Главная";
document.getElementById("containerInfo").style.display = "none";
}
vInstall() {
//document.getElementById("containerInfo").display = "block";
if (this.IntstallPackageParamms.Version !== "") {
ReactDOM.render(
<ModalForm
title={this.props.PackageName.Name}
root={this.props.PackageName}
PropMain={this.props.rec}
icons={this.props.icons}
useDes={this.props.useDes}
Ipkg={this.props.Ipkg}
>
<div className="sCard">
<h1 className="title"> </h1>
<div
style={{
flex: "3",
//display: "flex",
justifyContent: "center",
alignItems: "center",
flexDirection: "column"
}}
>
<img
src={
this.props.icons[this.props.PackageName.Name.split("/")[1]]
}
style={{
width: "128px",
height: "128px",
float: "left",
marginRight: "20px"
}}
alt={this.props.PackageName.Name.split("/")[1]}
/>
</div>
<div
style={{
flex: "9"
/*float: "left" */
}}
>
<span>
{" "}
<b>{this.ui.category}</b>{" "}
{this.props.PackageName.Name.split("/")[0]}
</span>
<div className="cVer" style={{ float: "flex" }}>
<b>{this.ui.versions}:</b>
{this.IntstallPackageParamms.Version}
</div>
<div style={{}}>
<Accordion title={this.ui.uses}>
<div
className="sUse"
style={{
overflowY: "scroll",
maxHeight: "150px",
background: "#EEE"
}}
>
{this.IntstallPackageParamms.USE.map((u, j) => (
<span style={{ padding: "3px" }} key={u} id={u}>
{this.chech_targent(u)}
</span>
))}
</div>
</Accordion>
</div>
<div>
<b>
<div id="useInfo" className="useInfo" style={{}}></div>
</b>
</div>
<div>
<p>
<b>{this.ui.decription}</b>{" "}
{this.props.PackageName.Description}
</p>
</div>
<div className="Btm">
<strong>
<span
className="btn right"
id={this.props.PackageName.Name}
style={{ cursor: "pointer" }}
onClick={() => this.vInstall()}
>
{this.ui.InstallButton.text}
</span>
</strong>
</div>
</div>
</div>
</ModalForm>,
document.getElementById("containerInfo")
);
} else {
let statblVer = "";
for (let v = 0; v < this.props.PackageName.version.length; v++) {
if (this.props.PackageName.version[v].split("[U]")[1] === "") {
statblVer = this.props.PackageName.version[v].split("[U]")[0];
}
}
this.IntstallPackageParamms.Version = statblVer;
this.vInstall();
/* ReactDOM.render(
<ModalForm
title={"Error"}
root={this.props.PackageName}
PropMain={this.props.rec}
icons={this.props.icons}
useDes={this.props.useDes}
Ipkg={this.props.Ipkg}
>
<div
style={{
background: "#F00",
color: "#000",
padding: "20px",
fontSize: "1.1em"
}}
>
Error
</div>
</ModalForm>,
document.getElementById("containerInfo")
);*/
}
}
addUse(use) {
if (
document.getElementById(use).style.background === "#0F0" ||
document.getElementById(use).style.background === "rgb(0, 255, 0)"
) {
document.getElementById(use).style.background = "#FFF";
for (let i = 0; i < this.IntstallPackageParamms.USE.length; i++) {
console.log(i);
if (use === this.IntstallPackageParamms.USE[i]) {
this.IntstallPackageParamms.USE.slice(i, i); // delete this.IntstallPackageParamms.USE[i];
}
}
} else {
document.getElementById(use).style.background = "#0F0";
this.IntstallPackageParamms.USE[
this.IntstallPackageParamms.USE.length
] = use;
}
console.log(this.IntstallPackageParamms);
}
addVersion(version) {
console.log(typeof version);
if (this.IntstallPackageParamms.Version !== "") {
if (this.IntstallPackageParamms.Version !== version) {
document.getElementById(
this.IntstallPackageParamms.Version
).style.background = "#FFF";
this.IntstallPackageParamms.Version = version;
document.getElementById(
version
).style.background = document
.getElementById(version)
.style.border.split("2px solid")[1];
} else {
document.getElementById(
this.IntstallPackageParamms.Version
).style.background = "#FFF";
this.IntstallPackageParamms.Version = "";
}
} else {
this.IntstallPackageParamms.Version = version;
document.getElementById(
version
).style.background = document
.getElementById(version)
.style.border.split("2px solid")[1];
console.log(this.IntstallPackageParamms);
}
}
checkVersion(item) {
//console.log(item.split("[U]")[1] === "");
console
.log
//this.props.Ipkgthis.props.PackageName.Name.split("/")[1])
();
if (item.split("[U]")[1] === "") {
return (
<span
key={item}
id={item.split("[U]")[0]}
style={{ border: " 2px solid #0F0", marginLeft: "5px" }}
onClick={() => this.addVersion(item.split("[U]")[0])}
>
{item.split("[U]")[0]}
</span>
);
} else {
return (
<span
key={item}
id={item.split("[M]")[0]}
style={{ border: "2px solid #F00", marginLeft: "5px" }}
onClick={() => this.addVersion(item.split("[M]")[0])}
>
{item.split("[M]")[0]}
</span>
);
}
}
chech_targent(t) {
let lt = "";
if (t.split("+").length > 1) {
lt = t.split("+")[1];
} else {
lt = t;
}
let targets = ["single_target_", "modules_", "cpu_flags"];
if (lt.split("single_target_").length > 1) {
this.IntstallPackageParamms.TargetUses[
String(t.split("single_target_")[0]).toUpperCase()
] = String(t.split("single_target_")[1]);
return (
String(t.split("single_target_")[0]).toUpperCase() +
"=\t" +
String(t.split("single_target_")[1])
);
}
if (lt.split("modules_").length > 1) {
this.IntstallPackageParamms.TargetUses[
String(t.split("_modules_")[0]).toUpperCase()
] = String(t.split("_modules_")[1]);
return (
String(t.split("_modules_")[0]).toUpperCase() +
"=\t" +
String(t.split("_modules_")[1])
);
} else if (lt.split("cpu_flags").length > 1) {
this.IntstallPackageParamms.TargetUses["CPU_FLAGS"] = String(
t.split("cpu_flags_")[1]
);
return "CPU_FLAGS=\t" + String(t.split("cpu_flags_")[1]);
} else {
return t;
}
}
VuseInfo(use) {
//console.log(use);
//console.log(this.props.useDes);
//console.log(Object.keys(this.props.uses));
//document.getElementById(uId).style.background = "orange";
if (use.split("+").length > 1) {
use = use.split("+")[1];
}
if (
use in this.props.useDes.LocalUSE ||
use in this.props.useDes.GlobalUSE
//use.split("+")[1] in this.props.useDes.LocalUSE ||
//use.split("+")[1] in this.props.useDes.GlobalUSE
) {
if (use in this.props.useDes.LocalUSE) {
document.getElementById(
"useInfo"
).textContent = this.props.useDes.LocalUSE[use];
console.log(use);
} else if (use in this.props.useDes.GlobalUSE) {
document.getElementById(
"useInfo"
).textContent = this.props.useDes.GlobalUSE[use];
console.log(use);
} /*/else {
document.getElementById("useInfo").textContent = this.props.useDes[
use.split("+")[1]
];
console.log(this.props.useDes[use.split("+")[1]]);
}*/
//document.getElementById(uId).style.background = "orange";
//alert(this.props.useDes[use]);
} else {
document.getElementById("useInfo").textContent = use;
}
//document.getElementById("useInfo").textContent = use;
}
clear_VuseInfo() {
document.getElementById("useInfo").textContent = "";
}
render() {
this.IntstallPackageParamms.USE = [];
//document.getElementById("HomePage").style.display = "block";
return (
// Карточка пакета с возможностью установки
<div className="fullCard">
<div className="sCard">
<div className="title" style={{}}>
{this.props.PackageName.Name.split("/")[1]}
<span
className="btn"
id="backBtn"
style={{
padding: "0px 20px 0px 20px",
float: "left",
color: "#FFF",
background: "#F00",
marginRight: "0.85em",
fontSize: "1.1em",
borderRadius: "0.9em"
//border: "1px outset #444",
//background: "rgb(78,116,26)",
// background: "rgb(78,116,26)",
//background:
// "linear-gradient(0deg, rgba(78,116,26,0.5536415249693627) 0%, rgba(229,237,235,0.9093838218881303) 35%)"
}}
onClick={() => this.toBack()}
>
<b style={{ float: "right" }}> {"X"}</b>
</span>
</div>
<hr />
<div
style={{
flex: "6",
//display: "flex",
justifyContent: "center",
alignItems: "center",
flexDirection: "column"
}}
>
<img
// Иконка пакета в карточке
className="card__img"
src={this.props.icons[this.props.PackageName.Name.split("/")[1]]}
style={{
width: "128px",
height: "128px",
align: "middle",
float: "left",
marginRight: "20px"
}}
alt={this.props.PackageName.Name.split("/")[1]}
/>
</div>
<div
style={{
flex: "9"
/*float: "left" */
}}
>
<span>
{" "}
<b>{this.ui.category}</b>{" "}
{this.props.PackageName.Name.split("/")[0]}
</span>
<div className="cVer">
<b>{this.ui.versions}:</b>
{this.props.PackageName.version.map((v) => this.checkVersion(v))}
</div>
<div style={{ padding: "5px" }}>
<Accordion title={this.ui.uses}>
<div
style={{
overflowY: "scroll",
height: "175px",
width: "100vw",
border: "1px outset #CCC",
display: "grid"
}}
>
{this.props.PackageName.USE.map((u, j) => (
<span
key={u}
id={u}
onMouseOver={() =>
this.VuseInfo(this.props.PackageName.USE[j])
}
onMouseOut={() => this.clear_VuseInfo()}
onClick={() => this.addUse(this.props.PackageName.USE[j])}
>
{this.chech_targent(u)}
</span>
))}
</div>
</Accordion>
<b>
<div
id="useInfo"
className="useInfo"
style={
this.isMobile
? this.styleUseinfo.nomob
: this.styleUseinfo.mobile
}
></div>
</b>
<div>
<b>Оверлеи:</b>
<span>{this.props.PackageName.repo}</span>
</div>
</div>
<div>
<p>
<b>{this.ui.decription}</b> {this.props.PackageName.Description}
</p>
<a href={this.props.PackageName.Home_page}>{this.ui.site} </a>
</div>
<div className="Btm">
<strong>
<span
className="btn right"
id={this.props.PackageName.Name}
style={{ cursor: "pointer" }}
onClick={() => this.vInstall()}
>
{this.ui.InstallButton.text}
</span>
</strong>
</div>
</div>
</div>
</div>
);
}
}
export default FullCard;