forked from oraoto/pib
-
-
Notifications
You must be signed in to change notification settings - Fork 57
/
Copy pathHome.js
149 lines (131 loc) · 5.33 KB
/
Home.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import './Common.css';
import './Home.css';
import phpPageIcon from './deepin-php-icon.svg';
import cakePhpIcon from './cakephp-icon.svg';
import drupalIcon from './drupal-icon.svg';
import codeIgniterIcon from './codeigniter-icon.svg';
import laravelIcon from './laravel-icon.svg';
import laminasIcon from './laminas-icon.svg';
import reactIcon from './react-icon.svg';
// import rolodexIcon from './icons/rolodex-icon-32.png';
import editorIcon from './icons/editor-icon-32.png';
import donateIcon from './icons/donate-icon-32.png';
import githubIcon from './icons/github-icon-32.png';
import sunburstIcon from './icons/sunburst.png';
import netscapeIcon from './icons/netscape.png';
import mouseIcon from './icons/mouse.png';
import cmdIcon from './icons/cmd-icon-32.png';
import dbIcon from './icons/database.png';
import downIcon from './icons/down.png';
import upIcon from './icons/up.png';
import { useEffect, useMemo, useState } from 'react';
import Header from './Header';
function Home() {
const [offset, setOffset] = useState(Math.trunc(Math.random() * 5));
const [scrollState, setScrollState] = useState(1);
const [showMore, setShowMore] = useState(false);
const query = useMemo(() => new URLSearchParams(window.location.search), []);
useEffect(() => {
if(query.has('code') || query.has('demo'))
{
window.location = process.env.PUBLIC_URL + '/embedded-php.html' + window.location.search;
}
}, [query]);
useEffect(() => {
const speed = 1400;
setTimeout(() => {
if(offset >= 5)
{
setTimeout(() => {
setScrollState(0);
setOffset(0);
setTimeout(() => {
setScrollState(1);
setOffset(1);
}, 32);
}, 16);
}
else
{
setScrollState(1);
setOffset((offset + 1) % 6);
}
}, speed);
}, [offset, scrollState]);
return (
<div className = "home">
<div className='home-menu bevel'>
<Header />
<h2>Select a demo:</h2>
<div className='row'>
<a className = "big-link inset" href = {process.env.PUBLIC_URL + '/embedded-php.html?demo=phpinfo.php'}>
<div className = "big-icon embedded">
<img alt = "page showing php logo" src = {phpPageIcon} />
</div>
<span className = "title">PHP Embedded Demo</span>
<p className='padded'>View, edit & run PHP code right in the browser.</p>
</a>
<a className = "big-link inset" href = {process.env.PUBLIC_URL + '/select-framework.html'}>
<div className = "big-icon cgi" style={{'--offset': offset}} data-scroll-state = {scrollState}>
<div className = "offset-column">
<img src = {cakePhpIcon} alt = "CakePHP logo" />
<img src = {codeIgniterIcon} alt = "CodeIgniter logo" />
<img src = {drupalIcon} alt = "Drupal logo" />
<img src = {laminasIcon} alt = "Laminas logo" />
<img src = {laravelIcon} alt = "Laravel logo" />
<img src = {cakePhpIcon} alt = "CakePHP logo" />
</div>
</div>
<span className = "title">PHP CGI Demo</span>
<p className='padded'>Spin up a CGI service worker and serve a demo from the framework of your choice.</p>
</a>
</div>
<div className = "inset button-bar">
<button onClick = {() => window.location = process.env.PUBLIC_URL + '/code-editor.html'}>
<img src = {editorIcon} className = "icon" alt = "Code Editor" />
Code Editor
</button>
{/* <button>
<img src = {rolodexIcon} className = "icon" alt = "SQL Editor" />
SQL Editor
</button> */}
<button onClick = {() => window.open('https://github.com/sponsors/seanmorris')}>
<img src = {donateIcon} className = "icon" alt = "Donate" />
Donate
</button>
<button onClick = {() => window.open('https://github.com/seanmorris/php-wasm?tab=readme-ov-file#-php-wasm')}>
<img src = {githubIcon} className = "icon" alt = "Github" />
Github
</button>
</div>
<h3><button onClick = { () => {setShowMore(!showMore)}} className='square'><img src = {showMore ? upIcon : downIcon} /></button><span onClick = { () => {setShowMore(!showMore)}}>More...</span></h3>
{ showMore && ( <div className = "inset extra-demos">
<a target = "_blank" href = {process.env.PUBLIC_URL + '/dbg-preview.html'} className="icon-box">
<img src = {cmdIcon} alt = "PHP-DBG Preview" />
<span>PHP-DBG Preview</span>
</a>
<a target = "_blank" href = {process.env.PUBLIC_URL + '/forecast.html'} className="icon-box">
<img src = {sunburstIcon} alt = "Inline FrontEnd PHP" />
<span>Inline FrontEnd PHP</span>
</a>
<a target = "_blank" href = "https://github.com/seanmorris/php-gtk" className="icon-box">
<img src = {netscapeIcon} alt = "GTK PHP+Node Browser" />
<span>GTK PHP+Node Browser</span>
</a>
<a target = "_blank" href = "https://codepen.io/SeanMorris227/pen/NWoGMYp?editors=1010" className="icon-box">
<img src = {mouseIcon} alt = "PHP Event Handlers" />
<span>PHP Event Handlers</span>
</a>
{/* <a target = "_blank" href = "https://php-cloud.pages.dev/" className="icon-box">
<img src = {dbIcon} alt = "CloudFlare D1 SQL PDO Connector" />
<span>CloudFlare D1 SQL PDO Connector</span>
</a> */}
</div> ) }
<div className = "inset right demo-bar">
<span>Demo powered by React</span> <img alt = "react-logo" src = {reactIcon} className='small-icon'/>
</div>
</div>
</div>
);
}
export default Home;