|
1
|
|
|
<?php |
|
2
|
|
|
require_once __DIR__ .'/../vendor/autoload.php'; |
|
3
|
|
|
use Kristuff\Mishell\Console; |
|
4
|
|
|
|
|
5
|
|
|
Console::clear(); |
|
6
|
|
|
printLoader(); |
|
7
|
|
|
goIndex(); |
|
8
|
|
|
|
|
9
|
|
|
function goIndex() |
|
10
|
|
|
{ |
|
11
|
|
|
printHeader(); |
|
12
|
|
|
printIndex(); |
|
13
|
|
|
askIndex(); |
|
14
|
|
|
} |
|
15
|
|
|
|
|
16
|
|
|
function printLoader() |
|
17
|
|
|
{ |
|
18
|
|
|
|
|
19
|
|
|
Console::log(); |
|
20
|
|
|
Console::log(); |
|
21
|
|
|
Console::log(' '. Console::text(" _ ", 'black', 'white') . Console::text(" ____ _ _ _ ", 'magenta', 'white')); |
|
22
|
|
|
Console::log(' '. Console::text(" _ __ ___ (_) ", 'black', 'white') . Console::text(" / ___|| |__ ___| | | ", 'magenta', 'white')); |
|
23
|
|
|
Console::log(' '. Console::text(" | '_ ` _ \| | ", 'black', 'white') . Console::text(" \___ \| '_ \ / _ \ | | ", 'magenta', 'white')); |
|
24
|
|
|
Console::log(' '. Console::text(" | | | | | | | ", 'black', 'white') . Console::text(" ___) | | | | __/ | | ", 'magenta', 'white')); |
|
25
|
|
|
Console::log(' '. Console::text(" |_| |_| |_|_| ", 'black', 'white') . Console::text(" |____/|_| |_|\___|_|_| ", 'magenta', 'white')); |
|
26
|
|
|
Console::log(' '. Console::text(" ", 'black', 'white') . Console::text(" ", 'magenta', 'white')); |
|
27
|
|
|
Console::log(' '. Console::text(" ", 'black', 'white') . Console::text(" Version 1.0 ", 'black', 'white')); |
|
28
|
|
|
Console::log(' '. Console::text(" ", 'black', 'white') . Console::text(" © 2020 Kristuff ", 'black', 'white')); |
|
29
|
|
|
Console::log(' '. Console::text(" ", 'black', 'white') . Console::text(" ", 'magenta', 'white')); |
|
30
|
|
|
Console::log(); |
|
31
|
|
|
Console::log(); |
|
32
|
|
|
|
|
33
|
|
|
$pad = ' '; |
|
34
|
|
|
|
|
35
|
|
|
// fake progress message |
|
36
|
|
|
for ($i=0 ; $i<=100 ; $i++) { |
|
37
|
|
|
|
|
38
|
|
|
// Overwrite progress message. |
|
39
|
|
|
Console::relog($pad.Console::text('Loading... [', 'white'). |
|
40
|
|
|
Console::text($i .'%', 'green'). |
|
41
|
|
|
Console::text('] completed', 'white')); |
|
42
|
|
|
|
|
43
|
|
|
// wait for a while, so we see the animation |
|
44
|
|
|
usleep(15000); |
|
45
|
|
|
} |
|
46
|
|
|
// Overwrite progress message. |
|
47
|
|
|
Console::relog($pad.Console::text('Done!', 'white', 'green', 'underline').str_pad(' ', 150)); |
|
48
|
|
|
usleep(45000); |
|
49
|
|
|
Console::clear(); |
|
50
|
|
|
} |
|
51
|
|
|
|
|
52
|
|
|
function getIndex() |
|
53
|
|
|
{ |
|
54
|
|
|
$index = []; |
|
55
|
|
|
|
|
56
|
|
|
|
|
57
|
|
|
|
|
58
|
|
|
$index[1] = ['Styles', 'How to get available basic styles', 'demo.styles.php']; |
|
59
|
|
|
$index[2] = ['Colors', 'How to get available foreground colors', 'demo.colors.php']; |
|
60
|
|
|
$index[3] = ['Backgrounds', 'How to get available background colors', 'demo.bgcolors.php']; |
|
61
|
|
|
|
|
62
|
|
|
$index[11] = ['Ask', 'How to ask? (get user input)', 'demo.ask.php']; |
|
63
|
|
|
$index[12] = ['Ask Number', 'How to ask and expect a number?', 'demo.askint.php']; |
|
64
|
|
|
$index[13] = ['Ask Password', 'How to ask a password? (do not print user input)', 'demo.askpassword.php']; |
|
65
|
|
|
|
|
66
|
|
|
$index[14] = ['Table', 'How to print a table?', 'demo.table.php']; |
|
67
|
|
|
$index[15] = ['Bell', 'How to run the bell?', 'demo.bell.php']; |
|
68
|
|
|
$index[16] = ['Progress', 'How to output progress message?', 'demo.progress.php']; |
|
69
|
|
|
$index[17] = ['New window', 'How to open new/restore window?', 'demo.window.php']; |
|
70
|
|
|
|
|
71
|
|
|
// $index[4] = ['Text', 'Console::text() overview', 'demo.log.php']; |
|
72
|
|
|
// $index[5] = ['Log', 'Console::log() overview', 'demo.log.php']; |
|
73
|
|
|
// $index[6] = ['ReLog', 'Console::relog() overview', 'demo.relog.php']; |
|
74
|
|
|
$index[7] = ['Pad', 'Console::pad() overview', 'demo.pad.php']; |
|
75
|
|
|
$index[8] = ['Size', 'How to get the number of columns and lines in terminal', 'demo.size.php']; |
|
76
|
|
|
$index[9] = ['BlueScreen', 'Really nice full screen centered message sample', 'demo.bluescreen.php']; |
|
77
|
|
|
|
|
78
|
|
|
return $index; |
|
79
|
|
|
} |
|
80
|
|
|
|
|
81
|
|
|
function printHeader() |
|
82
|
|
|
{ |
|
83
|
|
|
Console::clear(); |
|
84
|
|
|
Console::log(); |
|
85
|
|
|
Console::log(' '.Console::text(' ', 'white', 'bold', 'underline')); |
|
86
|
|
|
Console::log(' '.Console::text(' ', 'white', 'cyan', 'bold')); |
|
87
|
|
|
Console::log(' '.Console::text(' --- Interactive ~Mishell^^ Console sample --- ', 'white', 'cyan', 'bold')); |
|
88
|
|
|
Console::log(' '.Console::text(' ', 'white', 'cyan', 'bold', 'underline')); |
|
89
|
|
|
Console::log(); |
|
90
|
|
|
} |
|
91
|
|
|
|
|
92
|
|
|
function printSampleHeader($index, $title) |
|
93
|
|
|
{ |
|
94
|
|
|
Console::log(' ' . Console::text(Console::pad('', 20, ' ', STR_PAD_BOTH), 'white', 'bold', 'underline')); |
|
|
|
|
|
|
95
|
|
|
Console::log(' ' . Console::text(Console::pad('', 20, ' ', STR_PAD_BOTH), 'white', 'yellow', 'bold')); |
|
96
|
|
|
Console::log(' ' . Console::text(Console::pad($index .' - ' . $title, 20, ' ', STR_PAD_BOTH), 'white', 'yellow', 'bold')); |
|
97
|
|
|
Console::log(' ' . Console::text(Console::pad('', 20, ' ', STR_PAD_BOTH), 'white', 'yellow', 'bold', 'underline')); |
|
98
|
|
|
Console::log(); |
|
99
|
|
|
} |
|
100
|
|
|
|
|
101
|
|
|
function printIndex() |
|
102
|
|
|
{ |
|
103
|
|
|
Console::log(' '. Console::text('Index:', 'underline', 'bold')); |
|
104
|
|
|
$rowHeaders = ['Index' => 10, 'Item' => 25, 'Description' => 70]; |
|
105
|
|
|
|
|
106
|
|
|
// customize table separator |
|
107
|
|
|
// customize table row style (color, bg...) |
|
108
|
|
|
Console::$verticalSeparator = ''; |
|
109
|
|
|
Console::$verticalInnerSeparator = ''; |
|
110
|
|
|
Console::$horizontalSeparator = ' '; |
|
111
|
|
|
|
|
112
|
|
|
//Console::log(' '.Console::tableRowSeparator($rowHeaders, 'grey')); |
|
113
|
|
|
|
|
114
|
|
|
Console::$horizontalSeparator = '_'; |
|
115
|
|
|
Console::log(' '.Console::tableRowSeparator($rowHeaders, 'white', 'bold')); |
|
116
|
|
|
|
|
117
|
|
|
Console::$horizontalSeparator = ' '; |
|
118
|
|
|
//Console::$verticalSeparator = '|'; |
|
119
|
|
|
Console::log(' '.Console::tableRowSeparator($rowHeaders, 'white', 'blue', 'bold')); |
|
120
|
|
|
|
|
121
|
|
|
|
|
122
|
|
|
Console::log(' '.Console::tableRow($rowHeaders, 'white', 'blue', 'bold')); |
|
123
|
|
|
Console::$horizontalSeparator = '_'; |
|
124
|
|
|
Console::log(' '.Console::tableRowSeparator($rowHeaders, 'white', 'blue', 'bold')); |
|
125
|
|
|
Console::log(' '.Console::tableRowEmpty($rowHeaders, 'white', 'black')); |
|
126
|
|
|
|
|
127
|
|
|
$i = 0; |
|
128
|
|
|
foreach (getIndex() as $key => $value){ |
|
129
|
|
|
|
|
130
|
|
|
if (file_exists( __DIR__ . '/'. $value[2])) { |
|
131
|
|
|
Console::log(' '. |
|
132
|
|
|
Console::tableRow([ |
|
133
|
|
|
$key => 10, |
|
134
|
|
|
$value[0] => 25, |
|
135
|
|
|
$value[1] => 70 |
|
136
|
|
|
], |
|
137
|
|
|
'white', 'black' |
|
138
|
|
|
|
|
139
|
|
|
// ($i % 2 == 1) ? 'white' : 'white', |
|
140
|
|
|
// ($i % 2 == 1) ? 'cyan' : 'lightgrey', |
|
141
|
|
|
// ($i % 2 == 1) ? '' : 'bold' |
|
142
|
|
|
) |
|
143
|
|
|
); |
|
144
|
|
|
$i++; |
|
145
|
|
|
} |
|
146
|
|
|
|
|
147
|
|
|
} |
|
148
|
|
|
Console::log(' '.Console::tableRowSeparator($rowHeaders, 'white', 'black', 'bold')); |
|
149
|
|
|
|
|
150
|
|
|
// reset table sseparators to defaults |
|
151
|
|
|
Console::resetDefaults(); |
|
152
|
|
|
|
|
153
|
|
|
// -------------------- |
|
154
|
|
|
|
|
155
|
|
|
Console::log(''); |
|
156
|
|
|
Console::log(' ' .Console::text('Tips:', 'underline', 'bold')); |
|
157
|
|
|
Console::log(' '. Console::text('- At any time you can stop this program using [', 'green') .Console::text('Ctrl+C', 'black','white') .Console::text(']', 'green')); |
|
158
|
|
|
Console::log(''); |
|
159
|
|
|
} |
|
160
|
|
|
|
|
161
|
|
|
function askIndex() |
|
162
|
|
|
{ |
|
163
|
|
|
$base = Console::text('~miShell^^' , 'yellow'); |
|
164
|
|
|
$base .= Console::text(' $ ' , 'grey'); |
|
165
|
|
|
$selectedIndex = Console::askInt($base . Console::text('Enter desired index then press [Enter] to run sample > ', 'white')); |
|
166
|
|
|
$index = getIndex(); |
|
167
|
|
|
|
|
168
|
|
|
switch($selectedIndex){ |
|
169
|
|
|
case 0: |
|
170
|
|
|
Console::log(); |
|
171
|
|
|
exit(); |
|
|
|
|
|
|
172
|
|
|
break; |
|
173
|
|
|
|
|
174
|
|
|
default: |
|
175
|
|
|
if (array_key_exists($selectedIndex, getIndex())) { |
|
176
|
|
|
|
|
177
|
|
|
$title = $index[$selectedIndex][0]; |
|
178
|
|
|
$fileName = $index[$selectedIndex][2]; |
|
179
|
|
|
$filePath = __DIR__ . '/'. $fileName; |
|
180
|
|
|
|
|
181
|
|
|
Console::clear(); |
|
182
|
|
|
printHeader(); |
|
183
|
|
|
printSampleHeader($selectedIndex, $title); |
|
184
|
|
|
|
|
185
|
|
|
Console::log($base . Console::text('Start running [', 'white') . |
|
186
|
|
|
Console::text( $title, 'lightcyan') . |
|
187
|
|
|
Console::text('] in file [', 'white') . |
|
188
|
|
|
Console::text( $fileName, 'lightcyan') . |
|
189
|
|
|
Console::text(']', 'white')); |
|
190
|
|
|
|
|
191
|
|
|
if (file_exists($filePath)){ |
|
192
|
|
|
Console::log(); |
|
193
|
|
|
include $filePath; |
|
194
|
|
|
Console::log(); |
|
195
|
|
|
Console::log($base . Console::text('End running [', 'white') . |
|
196
|
|
|
Console::text( $title, 'lightcyan') . |
|
197
|
|
|
Console::text(']', 'white')); |
|
198
|
|
|
$response = Console::ask($base . Console::text('Do you want to see the code that has been executed? (type y/Y to see the code) > ', 'white')); |
|
199
|
|
|
if (strtoupper($response) === 'Y') { |
|
200
|
|
|
Console::log($base . Console::text('The code in file [', 'white') . |
|
201
|
|
|
Console::text( $fileName, 'lightcyan') . |
|
202
|
|
|
Console::text('] is:', 'white')); |
|
203
|
|
|
Console::log(); |
|
204
|
|
|
|
|
205
|
|
|
$lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); |
|
206
|
|
|
$count = 1; |
|
207
|
|
|
foreach($lines as $line){ |
|
208
|
|
|
$codeLine = rtrim($line); |
|
209
|
|
|
$isComment = substr(ltrim($codeLine), 0, 2) === '//'; |
|
210
|
|
|
Console::log( |
|
211
|
|
|
Console::pad($count . ' ', 3, ' ', STR_PAD_LEFT) . |
|
|
|
|
|
|
212
|
|
|
Console::text(Console::pad($codeLine, 150), $isComment ? 'magenta' : 'black', 'white') |
|
213
|
|
|
); |
|
214
|
|
|
$count++; |
|
215
|
|
|
} |
|
216
|
|
|
Console::log(); |
|
217
|
|
|
} |
|
218
|
|
|
} else { |
|
219
|
|
|
Console::log($base . Console::text('Error' , 'red')); |
|
220
|
|
|
Console::log($base . Console::text(' => File missing [' . $fileName . ']' , 'red')); |
|
221
|
|
|
} |
|
222
|
|
|
|
|
223
|
|
|
} else { |
|
224
|
|
|
Console::log($base . Console::text('Error:', 'red')); |
|
225
|
|
|
Console::log($base . Console::text('=> the value you entered is not a valid index number.', 'red')); |
|
226
|
|
|
askIndex(); |
|
227
|
|
|
} |
|
228
|
|
|
|
|
229
|
|
|
Console::ask($base . Console::text('Press [Enter] to go back to index > ', 'white')); |
|
230
|
|
|
goIndex(); |
|
231
|
|
|
} |
|
232
|
|
|
} |