Compare commits

..

686 commits

Author SHA1 Message Date
Innovation 89e990207e Delicious, finally, a good fucking commit
modified:   README.md
	modified:   apps/Cinema/index.php
	modified:   apps/Cinema/meta
	modified:   apps/FileManager/index.html
	modified:   apps/FileManager/meta
	modified:   apps/Notepad/index.php
	modified:   apps/Notepad/meta
	modified:   apps/terminal/terminal/scripts/swapTheme.php
2022-02-14 19:25:00 +00:00
Innovation ba0428c46e Update 'README.md'
Update year. Accidentally migrated repo after adding notice.
2022-02-11 19:10:50 +00:00
Innovation Science dd968847f3
Update README.md 2022-02-11 12:19:57 -06:00
Innovation Inc 404026a4c2 Spring cleaning
Cleaned up the file structure a bit.
Also made the terminal portable.
2021-03-26 02:34:24 -05:00
Innovation Inc 5678a476ed A massive commit
I'm finally going to continue working on this and commit like I should.
2021-03-26 00:58:21 -05:00
Innovation Inc 0501e9c455 Update to 0.1.6b 2020-05-26 23:26:34 -05:00
DremOSDeveloperTeam 7e06b5f4cf 0.1.5b 2020-03-30 22:57:55 -05:00
Innovation Inc 5f0583dc1c
Update README.md 2020-03-19 13:06:20 -05:00
DremOSDeveloperTeam d2f430b464 0.1.4b 2020-02-27 19:10:11 -06:00
Innovation Inc fb16985f60
Update index.html 2019-12-19 00:10:38 -06:00
Innovation Inc 90131d2f09
Add files via upload 2019-12-19 00:04:07 -06:00
Innovation Inc f4aa0db7d7
Add files via upload 2019-12-19 00:03:37 -06:00
Innovation Inc 1ca7c592ce
Add files via upload 2019-12-19 00:03:06 -06:00
Innovation Inc bffdd43e04
Add files via upload 2019-12-18 15:04:04 -06:00
Innovation Inc 77bc878060
Unspaghettification 2019-12-13 22:19:20 -06:00
Innovation Inc 01052bb2bd
Unspaghettification 2019-12-13 22:16:24 -06:00
Innovation Inc 30594ef6de
Update index-open.html 2019-12-13 22:06:48 -06:00
Innovation Inc 2d34b4d5b7
Update index-open.html 2019-12-13 22:04:57 -06:00
Innovation Inc bf35b9b8b2
Update index-open.html 2019-12-13 22:02:28 -06:00
Innovation Inc ebb13fa66f
Update index-open.html 2019-12-13 21:59:02 -06:00
Innovation Inc fca1497ed6
Update index-open.html 2019-12-13 21:17:12 -06:00
Innovation Inc b2e0c079ef
Update index.html 2019-12-13 21:12:40 -06:00
Innovation Inc d76c7d5f63
Update index.html 2019-12-13 21:11:29 -06:00
Innovation Inc 8a0ee25efd
Update index-open.html 2019-12-13 21:05:07 -06:00
Innovation Inc 213935e564
Update index.html 2019-12-13 20:13:05 -06:00
Innovation Inc dc5eb0e0a7
Update index.html 2019-12-13 20:10:47 -06:00
Innovation Inc 89dd830904
Add files via upload 2019-12-13 20:07:56 -06:00
Innovation Inc 85947eede8
Update README.md 2019-12-13 18:46:22 -06:00
Innovation Inc b41984758a
Delete index-all.html 2019-12-13 18:43:49 -06:00
Innovation Inc b5bb00f8a2
Update index.html 2019-12-13 18:42:49 -06:00
Innovation Inc 2a6b3201a1
Delete taskbar.html 2019-12-13 18:42:30 -06:00
Innovation Inc 717bd2b0d0
Update index-open.html 2019-12-13 18:40:54 -06:00
Innovation Inc 2162afa167
Rename debug.html to index.html 2019-12-13 18:40:48 -06:00
Innovation Inc d9756ce11d
Update index-open.html 2019-12-13 18:38:00 -06:00
Innovation Inc c93e5863bd
Update index-open.html 2019-12-13 18:32:33 -06:00
Innovation Inc d810c89ce3
Update index-open.html 2019-12-13 18:26:25 -06:00
Innovation Inc 39f141e292
Update index-open.html 2019-12-13 18:22:58 -06:00
Innovation Inc 71d7624c0b
Update index-open.html 2019-12-13 18:21:58 -06:00
Innovation Inc 686dd212d1
Update index-open.html 2019-12-13 18:17:52 -06:00
Innovation Inc 6bcf486134
Update index-all.html 2019-12-13 18:13:49 -06:00
Innovation Inc 9fd50f6b52
Update index-open.html 2019-12-13 18:11:16 -06:00
Innovation Inc a14fee8420
Update index-all.html 2019-12-13 18:11:03 -06:00
Innovation Inc 26f7e7b5ed
Update index-open.html 2019-12-13 17:53:25 -06:00
Innovation Inc 19b0033571
Update index-open.html 2019-12-13 17:45:56 -06:00
Innovation Inc 1674d34752
Update index.html 2019-12-13 17:36:43 -06:00
Innovation Inc 9be46fa1cd
Update index-open.html 2019-12-13 17:33:01 -06:00
Innovation Inc 10d1ab6c8c
Update index-open.html 2019-12-13 17:27:39 -06:00
Innovation Inc 45da2628f2
Update index-open.html 2019-12-13 17:21:45 -06:00
Innovation Inc 7af64bfd46
Update index-open.html 2019-12-13 17:21:07 -06:00
Innovation Inc 67069f4905
Update index-open.html 2019-12-13 17:18:35 -06:00
Innovation Inc b91efd3cc1
Update index-open.html 2019-12-13 17:17:44 -06:00
Innovation Inc 131029c5b9
Update index-open.html 2019-12-13 17:13:48 -06:00
Innovation Inc b216689291
Update index.html 2019-12-13 17:01:32 -06:00
Innovation Inc 8828d72a73
Update index-open.html 2019-12-13 14:23:03 -06:00
Innovation Inc c9653a340c
Update index-open.html 2019-12-13 11:46:47 -06:00
Innovation Inc 41613be716
Update index-all.html 2019-12-13 11:45:36 -06:00
Innovation Inc 1523470e8f
Update index.html 2019-12-13 11:44:20 -06:00
Innovation Inc f477b9074a
Update index.html 2019-12-13 10:29:18 -06:00
Innovation Inc 1cbc5f0dac
Update index-open.html 2019-09-19 18:03:32 -05:00
Innovation Inc 3352f69959
Update index-open.html 2019-09-19 18:03:10 -05:00
Innovation Inc 1d5abb024f
Update index-all.html 2019-09-19 17:53:18 -05:00
Innovation Inc 234270535c
Add files via upload 2019-09-18 21:03:48 -05:00
Innovation Inc f77a597213
Update index.html 2019-05-25 00:33:50 -05:00
Innovation Inc 7921ca8013
Update index.html 2019-05-12 21:34:17 -05:00
Innovation Inc e747fbdbd3
Update debug.html 2019-05-12 21:31:37 -05:00
Innovation Inc 9e8636a336
Update terminal.js 2019-05-12 21:26:55 -05:00
Innovation Inc a745fe9088
Update README.md 2019-05-03 11:43:22 -05:00
Innovation Inc 3b0e246773
Update index-open.html 2019-04-25 12:02:15 -05:00
Innovation Inc 31030049d3
Update index-closed.html 2019-04-25 11:54:18 -05:00
Innovation Inc fb478b4e5e
Update index-closed.html 2019-04-25 11:49:12 -05:00
Innovation Inc 5b08dfd307
Update index-closed.html 2019-04-25 11:41:11 -05:00
Innovation Inc 29aa2dfeb1
Update index-closed.html 2019-04-25 11:40:05 -05:00
Innovation Inc e6f752d20b
Update index-open.html 2019-04-25 11:33:54 -05:00
Innovation Inc 105bac3bf0
Update debug.html 2019-04-23 12:31:29 -05:00
Innovation Inc 4814ac5572
Update debug.html 2019-04-23 12:26:28 -05:00
Innovation Inc 62ee69e92c
Update taskbar.html 2019-04-23 11:21:12 -05:00
Innovation Inc 3ae66f9ea2
Update index.html 2019-04-23 11:17:16 -05:00
Innovation Inc 1368b26225
Update 404.html 2019-04-23 10:59:12 -05:00
Innovation Inc 68137c3ca3 Add files via upload 2019-04-23 10:50:20 -05:00
Innovation Inc cba2fc177d Add files via upload 2019-04-23 10:50:03 -05:00
Innovation Inc 51148c097a
Delete index.js 2019-04-23 10:49:48 -05:00
Innovation Inc 66167382a9
Delete terminal.js 2019-04-23 10:49:39 -05:00
Innovation Inc 80efc5ffd4 Add files via upload 2019-04-23 10:49:26 -05:00
Innovation Inc c1ca119135 Add files via upload 2019-04-23 10:49:07 -05:00
Innovation Inc 9cf3bf3269
Update index.html 2019-04-23 10:31:44 -05:00
Innovation Inc a1a54e0337
Update index.html 2019-04-23 10:26:12 -05:00
Innovation Inc 689912c27b
Update terminal.js 2019-04-23 10:21:29 -05:00
Innovation Inc 6137bcacb4 Add files via upload 2019-04-23 10:14:47 -05:00
Innovation Inc 15f912a87b
Update terminal.js 2019-04-23 10:12:11 -05:00
Innovation Inc 6af067d652
Create index.js 2019-04-23 10:03:10 -05:00
Innovation Inc 14e5155f75
Create terminal.js 2019-04-23 10:02:54 -05:00
Innovation Inc 472c1e7d82
Create style.css 2019-04-23 10:02:17 -05:00
Innovation Inc c0e488104a Add files via upload 2019-04-23 10:01:18 -05:00
Innovation Inc c07943958e
Update debug.html 2019-04-23 09:14:49 -05:00
Innovation Inc b2dc9bb940
Update index-open.html 2019-04-22 13:58:27 -05:00
Innovation Inc 774e8eac63
Update index-open.html 2019-04-22 13:54:04 -05:00
Innovation Inc a179154f83
Update index-open.html 2019-04-22 13:53:01 -05:00
Innovation Inc 8a3471239c
Update index-open.html 2019-04-22 13:50:56 -05:00
Innovation Inc 0238e00ec5
Update index-open.html 2019-04-22 13:49:39 -05:00
Innovation Inc b91fff6f2c
Update index-open.html 2019-04-22 13:48:34 -05:00
Innovation Inc a9ef64e497
Update index-closed.html 2019-04-22 13:47:37 -05:00
Innovation Inc 4d0871e7ab
Update index-closed.html 2019-04-22 13:45:32 -05:00
Innovation Inc 39aff8c6fa
Update index.html 2019-04-22 13:40:52 -05:00
Innovation Inc a14e78973a
Update index.html 2019-04-22 13:38:02 -05:00
Innovation Inc 838085f0fb
Update index-open.html 2019-04-22 13:37:28 -05:00
Innovation Inc cb65b6783e
Update index-open.html 2019-04-22 13:32:54 -05:00
Innovation Inc 70a63f9c0a
Update index-closed.html 2019-04-22 11:47:23 -05:00
Innovation Inc 91adde7584
Update index-open.html 2019-04-22 11:47:05 -05:00
Innovation Inc c024c38c97
Update index.html 2019-04-22 11:45:56 -05:00
Innovation Inc 0d1e6b5ea4
Update index-open.html 2019-04-22 11:42:46 -05:00
Innovation Inc 269b82499d
Update index-open.html 2019-04-22 11:38:25 -05:00
Innovation Inc 73cf5b9238
Update shuttingdown.html 2019-04-22 11:37:42 -05:00
Innovation Inc 397a864307
Update shuttingdown.html 2019-04-22 11:31:29 -05:00
Innovation Inc c2f608b2e6
Update shuttingdown.html 2019-04-22 11:30:18 -05:00
Innovation Inc 21cc8daad9
Update shuttingdown.html 2019-04-22 11:26:32 -05:00
Innovation Inc fc839cf75b
Update shuttingdown.html 2019-04-22 11:21:32 -05:00
Innovation Inc ed7bf99741
Update shuttingdown.html 2019-04-22 11:20:00 -05:00
Innovation Inc 7b0e23ad56
Update index-open.html 2019-04-21 20:42:00 -05:00
Innovation Inc c3e86f2d80
Update index-open.html 2019-04-21 20:41:47 -05:00
Innovation Inc ec0b2d7555
Update index-closed.html 2019-04-21 20:41:29 -05:00
Innovation Inc 72158cfafe
Update index-all.html 2019-04-21 20:38:57 -05:00
Innovation Inc d16e01edaa
Update index-all.html 2019-04-21 20:35:19 -05:00
Innovation Inc 8a73e8da73
Update index-all.html 2019-04-21 20:34:10 -05:00
Innovation Inc cf14519d17
Update index-all.html 2019-04-21 20:32:38 -05:00
Innovation Inc 7a13121b1b
Update index-all.html 2019-04-21 20:31:13 -05:00
Innovation Inc 27848825a6
Update index-all.html 2019-04-21 20:10:45 -05:00
Innovation Inc a644992978
Update taskbar.html 2019-04-21 20:10:07 -05:00
Innovation Inc 3cff554569
Update taskbar.html 2019-04-21 20:07:42 -05:00
Innovation Inc 3f950d159e
Update taskbar.html 2019-04-21 20:06:12 -05:00
Innovation Inc 18c9496daa
Update taskbar.html 2019-04-21 20:00:55 -05:00
Innovation Inc 6e18083ea3
Update taskbar.html 2019-04-21 19:59:17 -05:00
Innovation Inc 0645d19d3b
Update taskbar.html 2019-04-21 19:56:56 -05:00
Innovation Inc 289c3fa81e
Update taskbar.html 2019-04-21 19:55:22 -05:00
Innovation Inc 37a9be38d4
Update taskbar.html 2019-04-21 19:53:21 -05:00
Innovation Inc 3329bed15f
Update taskbar.html 2019-04-21 19:51:48 -05:00
Innovation Inc 6aa15d63b4
Update taskbar.html 2019-04-21 19:42:47 -05:00
Innovation Inc 5ba0d82b04
Update taskbar.html 2019-04-21 19:40:54 -05:00
Innovation Inc 9e64282e74
Update taskbar.html 2019-04-21 19:38:10 -05:00
Innovation Inc 7c9650cc56
Update taskbar.html 2019-04-21 19:17:33 -05:00
Innovation Inc acb667f627
Update index.html 2019-04-21 19:16:04 -05:00
Innovation Inc 3d7fac7836
Update taskbar.html 2019-04-21 19:15:10 -05:00
Innovation Inc b4d66603b0
Update taskbar.html 2019-04-21 19:12:33 -05:00
Innovation Inc 04963612b7
Update taskbar.html 2019-04-21 19:05:51 -05:00
Innovation Inc 19187ee6b4
Update taskbar.html 2019-04-21 19:02:38 -05:00
Innovation Inc de8c42a24e
Update taskbar.html 2019-04-21 18:59:56 -05:00
Innovation Inc 2e91197885
Update taskbar.html 2019-04-21 18:58:23 -05:00
Innovation Inc 47dd737abe
Update taskbar.html 2019-04-21 18:55:41 -05:00
Innovation Inc fee3005be0
Update index-all.html 2019-04-21 18:54:33 -05:00
Innovation Inc ad05afea72
Update index-all.html 2019-04-21 18:53:13 -05:00
Innovation Inc ad2f058316
Update index.html 2019-04-21 18:52:57 -05:00
Innovation Inc fcd2ca1fb0
Update index.html 2019-04-21 18:50:55 -05:00
Innovation Inc c3a91fbe07
Update index.html 2019-04-21 18:50:41 -05:00
Innovation Inc 5f884b8eec
Update taskbar.html 2019-04-21 18:44:04 -05:00
Innovation Inc 627c2e6023
Update index-all.html 2019-04-21 18:40:40 -05:00
Innovation Inc 916c14079e
Update index-all.html 2019-04-21 18:39:28 -05:00
SparrOSDeveloperTeam de5c814a38
Fix tool tip for button 2019-04-21 18:37:22 -05:00
Innovation Inc 63fca4d6e9
Update index-all.html 2019-04-21 18:36:17 -05:00
Innovation Inc 6ddc12a2ce
Update index-all.html 2019-04-21 18:34:18 -05:00
SparrOSDeveloperTeam e5aa2d5799
Add alt to Home button 2019-04-21 18:31:42 -05:00
Innovation Inc 75a998fb5f
Delete index2.html 2019-04-21 18:30:57 -05:00
Innovation Inc 544e541455
Update taskbar.html 2019-04-21 18:28:46 -05:00
Innovation Inc f5e7ce8b08
Update index2.html 2019-04-21 18:26:06 -05:00
Innovation Inc e469309a37
Update index2.html 2019-04-21 18:23:17 -05:00
Innovation Inc afcc8e346e
Update taskbar.html 2019-04-21 18:22:51 -05:00
Innovation Inc 25014563f1
Update index2.html 2019-04-21 18:20:06 -05:00
Innovation Inc 76e824a5da
Update taskbar.html 2019-04-21 18:17:14 -05:00
Innovation Inc a07e775253
Update index.html 2019-04-21 18:15:45 -05:00
Innovation Inc 76c650672c
Update index2.html 2019-04-21 18:08:08 -05:00
Innovation Inc 4a098861c1
Update index-all.html 2019-04-21 18:04:33 -05:00
Innovation Inc 592ee25699
Update taskbar.html 2019-04-21 18:02:01 -05:00
Innovation Inc 4ad72365ef
Update taskbar.html 2019-04-21 18:00:09 -05:00
Innovation Inc a949d9448b
Update taskbar.html 2019-04-21 17:58:25 -05:00
Innovation Inc 0694de70a1
Update index-all.html 2019-04-21 17:57:06 -05:00
Innovation Inc bb1d55a024
Update index-all.html 2019-04-21 17:38:05 -05:00
Innovation Inc b132fa63d1
Update index-all.html 2019-04-21 17:34:14 -05:00
Innovation Inc b8014429c6
Update taskbar.html 2019-04-21 17:32:31 -05:00
Innovation Inc a1291ae630
Update index-all.html 2019-04-21 17:29:29 -05:00
Innovation Inc b62f2a0b6a
Update index.html 2019-04-21 17:28:33 -05:00
Innovation Inc e8c0f2c0e5
Update index-all.html 2019-04-21 17:27:12 -05:00
Innovation Inc bcd87733a8
Update taskbar.html 2019-04-21 17:24:40 -05:00
Innovation Inc 708549b5d1
Update index-all.html 2019-04-21 17:22:47 -05:00
Innovation Inc 8cea2b29c0
Update index.html 2019-04-21 17:22:01 -05:00
Innovation Inc b9bd3c9ee8
Update index.html 2019-04-21 17:14:10 -05:00
Innovation Inc 53bc0fb8f2
Create index-all.html 2019-04-21 17:13:36 -05:00
Innovation Inc 388cabef20
Update index.html 2019-04-21 17:11:27 -05:00
Innovation Inc 14ee502e74
Create taskbar.html 2019-04-21 17:06:53 -05:00
Innovation Inc 16b4dddadf
Update index.html 2019-04-21 17:05:33 -05:00
Innovation Inc 2bbcab3c7a
Update index-open.html 2019-04-21 16:59:25 -05:00
DremOSDeveloperTeam fd117c5486 delete some things 2019-04-21 16:54:54 -05:00
Innovation Inc e7ba286999
Delete index.html 2019-04-21 16:28:14 -05:00
Innovation Inc 9c829c6d95
Delete icon.png 2019-04-21 16:27:57 -05:00
Innovation Inc 095c0b1ea2
Delete slides.png 2019-04-21 16:26:58 -05:00
Innovation Inc 4329e79c00
Delete slides.html 2019-04-21 16:26:50 -05:00
Innovation Inc c969384564
Delete sheets.png 2019-04-21 16:26:40 -05:00
Innovation Inc 98204aaed0
Delete sheets.html 2019-04-21 16:26:32 -05:00
Innovation Inc 8ced723b12
Delete docs.png 2019-04-21 16:26:21 -05:00
Innovation Inc b2396823db
Delete docs.html 2019-04-21 16:26:12 -05:00
Innovation Inc 27a9215a68
Delete index.html 2019-04-21 16:25:21 -05:00
Innovation Inc 71be40c0d4
Delete browser.png 2019-04-21 16:25:08 -05:00
Innovation Inc a141213773
Update index.html 2019-04-21 15:56:01 -05:00
Innovation Inc f17fa11270
Update index.html 2019-04-21 15:47:48 -05:00
Innovation Inc 721762f5df
Update README.md 2019-04-21 15:46:03 -05:00
Innovation Inc ef3bce6355
Update README.md 2019-04-21 15:45:48 -05:00
Innovation Inc e419d59b70
Update README.md 2019-04-21 15:45:32 -05:00
Innovation Inc c435381fd0
Update index.html 2019-01-09 11:05:57 -06:00
Innovation Inc 3a9bdffc3b
Add files via upload 2019-01-09 11:01:34 -06:00
Innovation Inc 05d6092185
Delete script.png 2019-01-09 10:59:44 -06:00
Innovation Inc cf89cfcdaf
Update index.html 2019-01-09 10:55:34 -06:00
Innovation Inc 706c0773ca
Update index-open.html 2019-01-09 10:50:26 -06:00
Innovation Inc 61da3db684
Update index-open.html 2019-01-09 10:47:19 -06:00
Innovation Inc bf26745ff0
Update 404.html 2019-01-07 11:57:32 -06:00
Innovation Inc 29d0254308
Update index.html 2019-01-07 11:56:15 -06:00
Innovation Inc a5c484399d
Update index.html 2019-01-07 11:55:59 -06:00
Innovation Inc 11baa6629c
Update 404.html 2019-01-07 11:54:58 -06:00
Innovation Inc f66b5b33e5
Add files via upload 2019-01-07 11:53:50 -06:00
Innovation Inc fc88eba813
Update index.html 2018-12-27 05:06:10 -06:00
Innovation Inc 9c5ff053c7
Update index.html 2018-12-27 04:58:17 -06:00
Innovation Inc 6be0566796
Update index.html 2018-12-27 04:56:04 -06:00
Innovation Inc 0275b0ef56
Update index.html 2018-12-27 04:52:39 -06:00
Innovation Inc d31cba4348
Update index.html 2018-12-27 04:46:07 -06:00
Innovation Inc 532fbe3552
Add files via upload 2018-12-27 04:35:59 -06:00
Innovation Inc 044dfdffca
Update index-open.html 2018-12-27 04:35:39 -06:00
Innovation Inc cf84a95e8e
Create index.html 2018-12-27 04:33:33 -06:00
DremOS Developing Team 758579de6a
Update index2.html 2018-12-20 11:00:26 -06:00
DremOS Developing Team c1b9424a02
Update index.html 2018-12-20 11:00:16 -06:00
DremOS Developing Team 288f6c85f9
Update index.html 2018-12-20 10:59:21 -06:00
DremOS Developing Team ea4e187a8e
Update index2.html 2018-12-20 10:59:08 -06:00
DremOS Developing Team 40132a74f5
Update index.html 2018-12-20 10:58:32 -06:00
DremOS Developing Team af6ced4f96
Update index2.html 2018-12-20 10:57:19 -06:00
DremOS Developing Team 4db415f6c7
Update index.html 2018-12-20 10:57:09 -06:00
DremOS Developing Team 918e917dc3
Update index2.html 2018-12-20 10:56:45 -06:00
DremOS Developing Team 486df9c95a
Update index.html 2018-12-17 11:39:22 -06:00
DremOS Developing Team 9813582f5c
Update index.html 2018-12-17 11:38:15 -06:00
DremOS Developing Team 4fcfffe6cc
Update index.html 2018-12-17 11:34:44 -06:00
DremOS Developing Team 1ac89c9b6b
Update index.html 2018-12-17 11:32:52 -06:00
DremOS Developing Team bc1b11878d
Update index.html 2018-12-17 11:31:13 -06:00
DremOS Developing Team 1492674923
Update index.html 2018-12-17 11:26:00 -06:00
DremOS Developing Team cb7ac3bf2c
Update index-open.html 2018-12-17 10:48:35 -06:00
DremOS Developing Team 0ce153b585
Update index-open.html 2018-12-17 10:43:06 -06:00
DremOS Developing Team c5dbfa0f59
Update index-open.html 2018-12-17 10:38:18 -06:00
DremOS Developing Team ae47391660
Update index-open.html 2018-12-17 10:36:43 -06:00
DremOS Developing Team 0fb6172b88
Update index-open.html 2018-12-17 10:33:13 -06:00
DremOS Developing Team dd0a6accd5
Update index.html 2018-12-17 10:31:20 -06:00
DremOS Developing Team a69241e1e8
Update index-open.html 2018-12-17 10:30:32 -06:00
DremOS Developing Team 9a009053e5
Add files via upload 2018-12-17 10:29:40 -06:00
DremOS Developing Team b12e85e1ca
Create index.html 2018-12-17 10:29:06 -06:00
DremOS Developing Team 6453d4b424
Update index-open.html 2018-12-17 10:28:11 -06:00
DremOS Developing Team 5111060ad3
Update index-closed.html 2018-11-29 12:15:46 -06:00
DremOS Developing Team f15c9ed735
Update index-open.html 2018-11-29 12:15:24 -06:00
DremOS Developing Team 9348a9418f
Update index-open.html 2018-11-29 12:14:55 -06:00
DremOS Developing Team 008ee7dc14
Add files via upload 2018-11-29 12:06:48 -06:00
DremOS Developing Team 023609cb0f
Update index-open.html 2018-11-29 11:40:47 -06:00
DremOS Developing Team d75f98a7eb
Create sheets.html 2018-11-29 11:39:23 -06:00
DremOS Developing Team d2aad0ced5
Create slides.html 2018-11-29 11:38:32 -06:00
DremOS Developing Team 469ca082ac
Update docs.html 2018-11-29 11:37:57 -06:00
DremOS Developing Team 182e4e96b3
Update index-open.html 2018-11-29 11:35:08 -06:00
DremOS Developing Team 93b777ee11
Add files via upload 2018-11-29 11:34:01 -06:00
DremOS Developing Team 566f23ce6a
Create docs.html 2018-11-29 11:33:41 -06:00
DremOS Developing Team 0bd45ed729
Update index-open.html 2018-11-29 11:22:09 -06:00
DremOS Developing Team 329fff15dc
Update index.html 2018-11-27 10:46:06 -06:00
DremOS Developing Team eb59661c6e
Update index2.html 2018-11-27 10:45:38 -06:00
DremOS Developing Team 3fd55d7caa
Update index-open.html 2018-11-07 15:46:34 -06:00
DremOS Developing Team 14fe47d1b7
Update index-open.html 2018-11-07 15:41:20 -06:00
DremOS Developing Team 1a4e58db81
Update README.md 2018-11-05 11:13:59 -06:00
DremOS Developing Team 9f39f22e08
Update 404.html 2018-10-17 14:48:18 -06:00
DremOS Developing Team e5f1c44fc3
Update index.html 2018-10-17 14:47:19 -06:00
DremOS Developing Team 1f57e317e9
Update index.html 2018-10-17 14:46:43 -06:00
DremOS Developing Team 9228d05a7c
Delete ambient.wav 2018-10-17 14:46:29 -06:00
DremOS Developing Team b1874ae90b
Update debug.html 2018-10-17 14:40:22 -06:00
DremOS Developing Team 4836c267ae
Update index-closed.html 2018-10-17 14:17:28 -06:00
DremOS Developing Team a223bc06cf
Update index-open.html 2018-10-17 14:17:12 -06:00
DremOS Developing Team bdc75875bc
Update index.html 2018-10-17 14:09:18 -06:00
DremOS Developing Team 8ccae3f727
Add files via upload 2018-10-17 14:07:48 -06:00
DremOS Developing Team 0ef597158d
Delete ambient.wav 2018-10-17 14:07:03 -06:00
DremOS Developing Team 8e1d4cf9c3
Add files via upload 2018-10-17 14:06:35 -06:00
DremOS Developing Team 7c63b2b013
Delete ambient.wav 2018-10-17 14:03:18 -06:00
DremOS Developing Team 4685a1fc1c
Delete ambient.wav 2018-10-17 14:02:49 -06:00
DremOS Developing Team a5e4a5004c
Update index.html 2018-10-17 13:48:19 -06:00
DremOS Developing Team bdef23bd28
Update index.html 2018-10-15 11:17:51 -05:00
DremOS Developing Team 10fa50d491
Update index.html 2018-10-15 11:17:42 -05:00
DremOS Developing Team 3ff0d23ccd
Update index.html 2018-10-15 11:17:07 -05:00
DremOS Developing Team 66b123d6be
Update debug.html 2018-10-15 11:14:58 -05:00
DremOS Developing Team 8233fe8c8f
Update 404.html 2018-10-15 10:55:16 -05:00
DremOS Developing Team d3a07f78bd
Update 404.html 2018-10-15 10:54:18 -05:00
DremOS Developing Team 20c796e9b9
Add files via upload 2018-10-15 10:54:05 -05:00
DremOS Developing Team 8b0b61f796
Update 404.html 2018-10-10 11:35:45 -05:00
DremOS Developing Team e9cec7a29b
Update 404.html 2018-10-10 11:34:53 -05:00
DremOS Developing Team 3344121c02
Update 404.html 2018-10-10 11:32:55 -05:00
DremOS Developing Team baad51e937
Update 404.html 2018-10-10 11:32:23 -05:00
DremOS Developing Team 78ac0025f6
Update 404.html 2018-10-10 11:30:41 -05:00
DremOS Developing Team 892be4bf14
Update 404.html 2018-10-10 11:29:15 -05:00
DremOS Developing Team 955932716a
Create 404.html 2018-10-10 11:21:19 -05:00
DremOS Developing Team e4ba94fca7
Update index.html 2018-09-28 09:56:42 -05:00
DremOS Developing Team 5e5bdc3340
Update index.html 2018-09-28 09:54:21 -05:00
DremOS Developing Team 90da34470e
Update index.html 2018-09-28 09:54:04 -05:00
DremOS Developing Team 21ada003b1
Update index.html 2018-09-28 09:53:34 -05:00
DremOS Developing Team 1afbf841d8
Update index-open.html 2018-09-28 09:51:15 -05:00
DremOS Developing Team 9cd6582ce4
Update index-closed.html 2018-09-28 09:50:39 -05:00
DremOS Developing Team 592e8788ea
Update index.html 2018-09-28 09:50:01 -05:00
DremOS Developing Team c7343c6716
Update shuttingdown.html 2018-09-26 16:34:05 -05:00
DremOS Developing Team 35a1152e82
Add files via upload 2018-09-26 16:33:42 -05:00
DremOS Developing Team 6dadf53006
Delete shutdown.gif 2018-09-26 16:33:02 -05:00
DremOS Developing Team 1975a2f599
Add files via upload 2018-09-26 16:24:47 -05:00
DremOS Developing Team 869733d074
Delete shutdown.gif 2018-09-26 16:24:31 -05:00
DremOS Developing Team f88db599fb
Add files via upload 2018-09-26 16:20:50 -05:00
DremOS Developing Team c60b6b9b0f
Delete shutdown.gif 2018-09-26 16:20:27 -05:00
DremOS Developing Team ff686a5de5
Add files via upload 2018-09-26 16:15:55 -05:00
DremOS Developing Team bf23c88dfe
Delete shutdown.gif 2018-09-26 16:15:40 -05:00
DremOS Developing Team 37e2d90bb9
Update shuttingdown.html 2018-09-26 16:11:34 -05:00
DremOS Developing Team 195141d4fe
Add files via upload 2018-09-26 16:07:51 -05:00
DremOS Developing Team 8b64626cbf
Delete shutdown.gif 2018-09-26 16:06:37 -05:00
DremOS Developing Team f3a9a6be84
Update shuttingdown.html 2018-09-26 16:06:09 -05:00
DremOS Developing Team fa09fc48e3
Update shuttingdown.html 2018-09-26 15:51:59 -05:00
DremOS Developing Team f000a78f38
Update shuttingdown.html 2018-09-26 15:49:42 -05:00
DremOS Developing Team d81a05034d
Update index-open.html 2018-09-26 15:35:33 -05:00
DremOS Developing Team 76e06d85f1
Update index.html 2018-09-26 15:31:05 -05:00
DremOS Developing Team a996bc1137
Update index-closed.html 2018-09-26 15:22:14 -05:00
DremOS Developing Team 0d813fde42
Update index-open.html 2018-09-26 15:21:41 -05:00
DremOS Developing Team 3303a44db9
Update index-closed.html 2018-09-26 15:10:43 -05:00
DremOS Developing Team 68e20d8698
Update index-open.html 2018-09-26 15:09:42 -05:00
DremOS Developing Team d28f7583f3
Update index-open.html 2018-09-25 11:12:22 -05:00
DremOS Developing Team df4582ec2c
Update index-closed.html 2018-09-25 11:11:58 -05:00
DremOS Developing Team 210920a7ae
Update index-closed.html 2018-09-25 11:10:14 -05:00
DremOS Developing Team 4e1eb527e7
Update index.html 2018-09-25 11:08:37 -05:00
DremOS Developing Team 4b378e5c69
Update index-open.html 2018-09-25 11:06:44 -05:00
DremOS Developing Team 51099ebf9e
Update debug.html 2018-09-24 11:42:00 -05:00
DremOS Developing Team c30f36fd2a
Update debug.html 2018-09-24 11:41:27 -05:00
DremOS Developing Team 7dfe6eabd6
Update debug.html 2018-09-24 11:35:22 -05:00
DremOS Developing Team 39bf08481a
Update debug.html 2018-09-24 11:33:11 -05:00
DremOS Developing Team 7f6a3a8823
Update debug.html 2018-09-24 09:58:02 -05:00
DremOS Developing Team 2cd4276c70
Update index-open.html 2018-09-24 09:57:29 -05:00
DremOS Developing Team 4e2e393342
Update index-closed.html 2018-09-24 09:57:08 -05:00
DremOS Developing Team 018258c049
Update debug.html 2018-09-24 09:56:37 -05:00
DremOS Developing Team ff667d83d0
Update debug.html 2018-09-24 09:56:23 -05:00
DremOS Developing Team 465f73b329
Update index.html 2018-09-24 09:53:24 -05:00
DremOS Developing Team a130ae72ba
Update debug.html 2018-09-24 09:49:40 -05:00
DremOS Developing Team 4ae350346d
Update index.html 2018-09-23 01:12:54 -05:00
DremOS Developing Team eebb42d3a4
Update index-open.html 2018-09-23 01:10:46 -05:00
DremOS Developing Team 7f1404ac22
Update index-closed.html 2018-09-23 01:10:02 -05:00
DremOS Developing Team ee1d62cde1
Update index-closed.html 2018-09-23 01:06:07 -05:00
DremOS Developing Team a8332d38e6
Update index-open.html 2018-09-23 01:05:22 -05:00
DremOS Developing Team dec6d476e9
Delete mopen.wav 2018-09-23 01:03:03 -05:00
DremOS Developing Team eb3cd1225c
Delete mclose.wav 2018-09-23 01:02:52 -05:00
DremOS Developing Team 9aa4f209f3
Add files via upload 2018-09-23 01:02:29 -05:00
DremOS Developing Team 7186fd133f
Update shuttingdown.html 2018-09-22 18:49:03 -05:00
DremOS Developing Team 142a1137a9
Update shuttingdown.html 2018-09-22 18:46:55 -05:00
DremOS Developing Team 2699868fb8
Update index-open.html 2018-09-21 13:26:14 -05:00
DremOS Developing Team fa4b4cf770
Update shuttingdown.html 2018-09-21 13:25:21 -05:00
DremOS Developing Team a0066c055e
Create shuttingdown.html 2018-09-21 13:19:30 -05:00
DremOS Developing Team 2da88a6be6
Update shutdown.html 2018-09-21 13:17:32 -05:00
DremOS Developing Team 01a5eab95b
Update shutdown.html 2018-09-21 13:16:30 -05:00
DremOS Developing Team 4ec48dc24a
Update debug.html 2018-09-21 13:13:25 -05:00
DremOS Developing Team 818aba224c
Update shutdown.html 2018-09-21 13:08:45 -05:00
DremOS Developing Team 5af3c2c994
Add files via upload 2018-09-21 13:07:45 -05:00
DremOS Developing Team 3dc8cc07be
Update debug.html 2018-09-21 13:07:17 -05:00
DremOS Developing Team 7fb9a1dbb4
Update debug.html 2018-09-21 13:02:31 -05:00
DremOS Developing Team b876503738
Update debug.html 2018-09-21 12:54:28 -05:00
DremOS Developing Team b12373e3c7
Update debug.html 2018-09-21 12:16:32 -05:00
DremOS Developing Team 583b235f74
Update index-open.html 2018-09-21 12:10:42 -05:00
DremOS Developing Team 571c764459
Update index.html 2018-08-30 11:10:04 -05:00
DremOS Developing Team bb7ac7c778
Update index.html 2018-08-30 11:08:14 -05:00
DremOS Developing Team 688b046293
Update index.html 2018-08-30 11:07:38 -05:00
DremOS Developing Team 1897dbd1c9
Update index-open.html 2018-08-30 11:04:24 -05:00
DremOS Developing Team a5c5960182
Update index-closed.html 2018-08-30 11:03:56 -05:00
DremOS Developing Team d077ec076b
Update index.html 2018-08-30 11:03:14 -05:00
DremOS Developing Team 8ce2ce1f0d
Update index.html 2018-08-30 11:00:41 -05:00
DremOS Developing Team 14fefb84d6
Update index2.html 2018-08-30 11:00:11 -05:00
DremOS Developing Team d19ea387ab
Update index.html 2018-08-30 10:59:34 -05:00
DremOS Developing Team ac653116d0
Update index.html 2018-08-30 10:57:18 -05:00
DremOS Developing Team d531ec47fd
Add files via upload 2018-08-08 23:20:37 -05:00
DremOS Developing Team 47a3ea4ee3
Update index-closed.html 2018-08-08 23:20:13 -05:00
DremOS Developing Team edee0c6aa5
Update index-open.html 2018-08-08 23:19:56 -05:00
DremOS Developing Team 267e9bfa45
Update index-closed.html 2018-08-08 22:45:37 -05:00
DremOS Developing Team 212d5d6f78
Update index-closed.html 2018-08-08 22:28:39 -05:00
DremOS Developing Team be575828f5
Update index-open.html 2018-08-08 22:27:47 -05:00
DremOS Developing Team dd3ae28754
Update index-open.html 2018-08-08 22:21:53 -05:00
DremOS Developing Team fce6d7aeb3
Update index-closed.html 2018-08-08 22:20:47 -05:00
DremOS Developing Team 10985dc867
Update index-closed.html 2018-08-08 22:16:14 -05:00
DremOS Developing Team 374f661ae8
Update index.html 2018-08-07 23:03:45 -05:00
DremOS Developing Team 5fb6ecec18
Update index.html 2018-08-07 23:03:06 -05:00
DremOS Developing Team 31aea03e42
Update index.html 2018-08-07 23:02:32 -05:00
DremOS Developing Team 86ad3caf95
Update index.html 2018-08-07 23:02:12 -05:00
DremOS Developing Team 47f082bafb
Add files via upload 2018-08-07 23:00:22 -05:00
DremOS Developing Team 0e88667465
Update index.html 2018-08-07 22:59:10 -05:00
DremOS Developing Team 5c7578d1e8
Update index.html 2018-08-07 22:58:45 -05:00
DremOS Developing Team 5ac9c627c4
Update index.html 2018-08-07 22:54:16 -05:00
DremOS Developing Team c9746b7db1
Update index.html 2018-08-07 22:52:05 -05:00
DremOS Developing Team 014d4cbf68
Add files via upload 2018-08-07 22:45:56 -05:00
DremOS Developing Team c6b60335f6
Update index.html 2018-08-07 22:45:27 -05:00
DremOS Developing Team 878c382137
Update index.html 2018-08-07 22:45:04 -05:00
DremOS Developing Team dcf9afdf56
Add files via upload 2018-08-07 22:44:16 -05:00
DremOS Developing Team 09f94b963f
Update index.html 2018-08-07 22:43:30 -05:00
DremOS Developing Team ea5a5c7af0
Add files via upload 2018-08-07 22:41:55 -05:00
DremOS Developing Team 539be38b00
Update index.html 2018-08-07 12:22:10 -05:00
DremOS Developing Team 4d2441aa22
Update index2.html 2018-08-07 12:20:54 -05:00
DremOS Developing Team 013ec4eadb
Update index.html 2018-08-07 12:20:04 -05:00
DremOS Developing Team aa5e4a4086
Update index.html 2018-08-07 12:14:40 -05:00
DremOS Developing Team 1b71127f12
Add files via upload 2018-08-07 12:12:35 -05:00
DremOS Developing Team 3a6fe6dcd7
Update index.html 2018-08-07 12:02:19 -05:00
DremOS Developing Team 41e9df656b
Update index-closed.html 2018-08-07 11:58:59 -05:00
DremOS Developing Team 09bc39c74d
Update index-open.html 2018-08-07 11:57:13 -05:00
DremOS Developing Team 6526848a79
Update index-closed.html 2018-08-07 10:53:51 -05:00
DremOS Developing Team ae1a357c15
Update index.html 2018-08-07 10:52:41 -05:00
DremOS Developing Team 1e77c50c45
Update index2.html 2018-08-07 10:52:05 -05:00
DremOS Developing Team a5d8ae31c3
Update index2.html 2018-08-07 10:48:48 -05:00
DremOS Developing Team 548dc8071d
Update index.html 2018-08-07 10:46:58 -05:00
DremOS Developing Team 4818e97a15
Update index-closed.html 2018-08-07 10:38:36 -05:00
DremOS Developing Team e4cb6b9995
Update index-open.html 2018-08-07 10:37:59 -05:00
DremOS Developing Team 857c68cb53
Add files via upload 2018-08-07 10:31:20 -05:00
DremOS Developing Team 77b9bb0f56
Update index-closed.html 2018-08-07 10:29:57 -05:00
DremOS Developing Team 7549eff930
Update index-open.html 2018-08-07 10:29:19 -05:00
DremOS Developing Team e922e85188
Add files via upload 2018-07-05 23:24:30 -05:00
DremOS Developing Team f024b2da85
Add files via upload 2018-07-05 23:23:28 -05:00
DremOS Developing Team cc7fe2e0a7
Delete startup.mp3 2018-07-05 23:23:06 -05:00
DremOS Developing Team ad593e2683
Update index.html 2018-07-03 20:34:26 -05:00
DremOS Developing Team 60046ce23e
Update index.html 2018-07-03 20:33:29 -05:00
DremOS Developing Team 9e77ed6641
Update index.html 2018-07-03 20:32:42 -05:00
DremOS Developing Team 3f672d5bf3
Update index-closed.html 2018-07-03 00:25:16 -05:00
DremOS Developing Team 679e61f8e1
Update index-open.html 2018-07-03 00:24:42 -05:00
DremOS Developing Team 799f75aa1e
Update index-open.html 2018-07-03 00:20:57 -05:00
DremOS Developing Team 6b69da0abf
Update index-open.html 2018-07-03 00:17:37 -05:00
DremOS Developing Team f8f51a1f45
Update index-closed.html 2018-07-03 00:16:51 -05:00
DremOS Developing Team dbc2941c68
Update index-open.html 2018-07-02 23:06:01 -05:00
DremOS Developing Team d5ba8a6675
Update index-open.html 2018-07-02 23:05:05 -05:00
DremOS Developing Team 36e799d4fb
Update index-open.html 2018-07-02 23:03:32 -05:00
DremOS Developing Team 5a39048dd0
Update index-open.html 2018-07-02 23:02:33 -05:00
DremOS Developing Team ff4f2fe1f2
Update index.html 2018-07-02 23:01:14 -05:00
DremOS Developing Team 9b6f72c6a9
Update index-open.html 2018-07-02 23:00:21 -05:00
DremOS Developing Team 0cb7834aa3
Update README.md 2018-07-02 22:57:46 -05:00
DremOS Developing Team 802419f454
Update index.html 2018-07-02 22:48:48 -05:00
DremOS Developing Team b60b690836
Update index2.html 2018-07-02 22:48:22 -05:00
DremOS Developing Team b769711f12
Update index2.html 2018-07-02 22:18:18 -05:00
DremOS Developing Team 472dcba3db
Update index.html 2018-07-02 22:17:37 -05:00
DremOS Developing Team 9444dcd744
Update index.html 2018-07-02 22:15:58 -05:00
DremOS Developing Team b037912381
Add files via upload 2018-07-02 22:13:20 -05:00
DremOS Developing Team 5acf4cfe9d
Add files via upload 2018-07-02 21:47:20 -05:00
DremOS Developing Team 6b59e451d3
Delete startup.mp3 2018-07-02 21:46:55 -05:00
DremOS Developing Team 5cd4752bed
Update index.html 2018-07-02 21:35:44 -05:00
DremOS Developing Team aeb5a57fae
Add files via upload 2018-07-02 21:19:12 -05:00
DremOS Developing Team 2124ff3b0b
Update index-open.html 2018-07-02 21:01:35 -05:00
DremOS Developing Team ed890aa85d
Delete paint.png 2018-07-02 21:00:57 -05:00
DremOS Developing Team 6e38b1547e
Delete brush.png 2018-07-02 21:00:25 -05:00
DremOS Developing Team 8b374ddf9e
Update index-open.html 2018-07-02 20:58:07 -05:00
DremOS Developing Team ba45f2fe70
Update index-open.html 2018-07-02 20:57:15 -05:00
DremOS Developing Team dd3f772a02
Add files via upload 2018-07-02 20:55:42 -05:00
DremOS Developing Team ad2bee2c72
Update index-open.html 2018-07-02 20:01:45 -05:00
DremOS Developing Team 390f8fdf09
Update index-open.html 2018-07-02 19:53:53 -05:00
DremOS Developing Team 52372b055c
Add files via upload 2018-07-02 19:52:38 -05:00
DremOS Developing Team 985a81a05e
Add files via upload 2018-07-02 19:52:25 -05:00
DremOS Developing Team 4795a47584
Add files via upload 2018-07-02 19:44:30 -05:00
DremOS Developing Team c73c66f204
Add files via upload 2018-07-02 19:44:05 -05:00
DremOS Developing Team f396578ee6
Add files via upload 2018-07-02 19:26:43 -05:00
DremOS Developing Team 4c2bcd8b42
Add files via upload 2018-07-02 19:23:33 -05:00
DremOS Developing Team 899e8a8cb5
Add files via upload 2018-07-02 19:17:20 -05:00
DremOS Developing Team 4f59fa164e
Update index-open.html 2018-07-02 19:16:34 -05:00
DremOS Developing Team 0f07ae27d7
Update index-open.html 2018-07-02 19:01:26 -05:00
DremOS Developing Team 274949b4b0
Add files via upload 2018-07-02 18:58:08 -05:00
DremOS Developing Team 3dc7de58f2
Delete paint.png 2018-07-02 18:57:54 -05:00
DremOS Developing Team 04a21e1705
Update index-open.html 2018-07-02 18:55:56 -05:00
DremOS Developing Team e033fb8375
Update index-open.html 2018-07-02 18:52:41 -05:00
DremOS Developing Team a64105e164
Update index-open.html 2018-07-02 18:44:24 -05:00
DremOS Developing Team 0f905fea86
Update index-open.html 2018-07-02 18:44:02 -05:00
DremOS Developing Team 649bafc86a
Add files via upload 2018-07-02 18:42:04 -05:00
DremOS Developing Team 11cb82ea16
Delete paint.png 2018-07-02 18:41:38 -05:00
DremOS Developing Team f36880c2be
Update index-open.html 2018-07-02 18:40:35 -05:00
DremOS Developing Team d8809e2e3c
Add files via upload 2018-07-02 18:38:03 -05:00
DremOS Developing Team 009feb6040
Update index.html 2018-07-02 18:27:19 -05:00
DremOS Developing Team 0b53dac1f4
Update index-open.html 2018-07-02 18:26:27 -05:00
DremOS Developing Team 9480cd1a87
Update index-closed.html 2018-07-02 18:25:58 -05:00
DremOS Developing Team 735abcc0d8
Update index.html 2018-07-02 17:46:34 -05:00
DremOS Developing Team 22e1f8e79f
Update index.html 2018-07-02 17:35:59 -05:00
DremOS Developing Team 18246c4a92
Update index2.html 2018-07-02 17:35:40 -05:00
DremOS Developing Team 9e59480cd5
Update index.html 2018-07-02 17:33:49 -05:00
DremOS Developing Team f603fc73ae
Rename index1.09.html to index.html 2018-07-02 17:32:57 -05:00
DremOS Developing Team 8ef7a5dba9
Rename index.html to index2.html 2018-07-02 17:32:42 -05:00
DremOS Developing Team 0ed71c0a21
Update index-open.html 2018-07-02 17:28:20 -05:00
SparrOSDeveloperTeam 44a885c141
Add files via upload 2018-07-02 17:23:19 -05:00
SparrOSDeveloperTeam 334e8e1680
Delete chord.wav 2018-07-02 17:23:16 -05:00
SparrOSDeveloperTeam d97d74f05c
Update debug.html 2018-07-02 17:22:58 -05:00
SparrOSDeveloperTeam 1e9b906b2d
Update debug.html 2018-07-02 17:20:48 -05:00
SparrOSDeveloperTeam 7692d61b25
Add files via upload 2018-07-02 17:15:03 -05:00
SparrOSDeveloperTeam be7ffd7384
Create debug.html 2018-07-02 17:14:51 -05:00
SparrOSDeveloperTeam 8669d7e57e
Update index-open.html 2018-07-02 17:08:06 -05:00
SparrOSDeveloperTeam 20a025f92c
Update index1.09.html 2018-07-02 17:00:16 -05:00
SparrOSDeveloperTeam a0ed8b28a6
Add files via upload 2018-07-02 16:54:59 -05:00
SparrOSDeveloperTeam a6d08a5f3a
Update index1.09.html 2018-07-02 16:54:41 -05:00
SparrOSDeveloperTeam 422969e6c9
Add files via upload 2018-07-02 16:53:35 -05:00
DremOS Developing Team ff18db264e
Update index.html 2018-07-02 16:32:58 -05:00
DremOS Developing Team d375d23a2f
Update index.html 2018-07-02 16:31:23 -05:00
DremOS Developing Team fabe23a122
Update index.html 2018-07-02 16:29:32 -05:00
DremOS Developing Team de9ba82e59
Update index.html 2018-07-02 16:27:57 -05:00
DremOS Developing Team 1dc001a7d6
Update index.html 2018-07-02 16:26:09 -05:00
DremOS Developing Team 8bac5cae0b
Add files via upload 2018-07-02 16:19:38 -05:00
DremOS Developing Team 7d4d2954cd
Update index.html 2018-07-02 16:17:57 -05:00
DremOS Developing Team 8ffe888fad
Update shutdown.html 2018-07-02 16:16:04 -05:00
DremOS Developing Team b5e2f1968e
Update shutdown.html 2018-07-02 16:01:08 -05:00
DremOS Developing Team b7f7192fcd
Update shutdown.html 2018-07-02 15:58:46 -05:00
DremOS Developing Team 1758472043
Update index.html 2018-07-02 15:57:24 -05:00
DremOS Developing Team 5d039b3337
Rename shutdown.htm to shutdown.html 2018-07-02 15:53:09 -05:00
DremOS Developing Team 1cef17e135
Create shutdown.htm 2018-07-02 15:51:36 -05:00
DremOS Developing Team 2da63eb5eb
Update index-open.html 2018-07-02 15:41:29 -05:00
DremOS Developing Team aadc642972
Update index.html 2018-07-02 15:24:51 -05:00
DremOS Developing Team 7361880167
Update index.html 2018-07-02 15:24:46 -05:00
DremOS Developing Team cb16f79c6e
Update index.html 2018-07-02 15:23:37 -05:00
DremOS Developing Team e899ca66f7
Update index.html 2018-07-02 15:21:55 -05:00
DremOS Developing Team 1edcf92724
Update index.html 2018-07-02 15:20:58 -05:00
DremOS Developing Team 0596f26049
Update index.html 2018-07-02 14:57:36 -05:00
DremOS Developing Team c9cfb06f8d
Update index.html 2018-07-02 00:29:28 -05:00
DremOS Developing Team c57d5872ec
Update index.html 2018-07-01 22:11:53 -05:00
DremOS Developing Team 9ffcd0e994
Update index.html 2018-07-01 22:08:16 -05:00
DremOS Developing Team 963150a6f4
Update index-open.html 2018-07-01 22:02:31 -05:00
DremOS Developing Team 83e96b0059
Update index.html 2018-07-01 22:01:16 -05:00
DremOS Developing Team cbdce36821
Update index.html 2018-07-01 22:01:10 -05:00
DremOS Developing Team 9716fb4f44
Update index-open.html 2018-07-01 21:58:24 -05:00
DremOS Developing Team 0b0f44f941
Update index-closed.html 2018-07-01 21:58:01 -05:00
DremOS Developing Team a2d852a873
Update index-open.html 2018-07-01 21:55:49 -05:00
DremOS Developing Team b7cfa62f73
Update index.html 2018-07-01 21:54:15 -05:00
DremOS Developing Team f8eb7bd840
Add files via upload 2018-07-01 21:31:49 -05:00
DremOS Developing Team 9f9561218f
Delete Wii Shop Channel Music.mp3 2018-07-01 21:30:45 -05:00
DremOS Developing Team 642c98236f
Add files via upload 2018-07-01 21:30:19 -05:00
DremOS Developing Team 6205bdfd55
Create index.html 2018-07-01 21:27:11 -05:00
DremOS Developing Team 3fef955064
Update index.html 2018-07-01 01:48:29 -05:00
DremOS Developing Team a4ea3695f9
Update index-closed.html 2018-07-01 01:45:45 -05:00
DremOS Developing Team c5cf28ff10
Update index-open.html 2018-07-01 01:44:55 -05:00
DremOS Developing Team e38331c8ee
Add files via upload 2018-07-01 01:41:15 -05:00
DremOS Developing Team f4a71e8c6c
Add files via upload 2018-07-01 01:40:04 -05:00
DremOS Developing Team 6981e797bb
Add files via upload 2018-07-01 01:36:51 -05:00
DremOS Developing Team 4153292077
Add files via upload 2018-07-01 01:22:42 -05:00
DremOS Developing Team 2278ac4552
Add files via upload 2018-07-01 01:21:14 -05:00
DremOS Developing Team 9f565296cc
Add files via upload 2018-07-01 01:17:49 -05:00
DremOS Developing Team 395c4f166a
Add files via upload 2018-07-01 01:14:23 -05:00
DremOS Developing Team 7ccf758459
Add files via upload 2018-07-01 01:11:03 -05:00
DremOS Developing Team ec9aa14201
Add files via upload 2018-07-01 01:06:02 -05:00
DremOS Developing Team 55e9f49d88
Add files via upload 2018-07-01 00:55:01 -05:00
DremOS Developing Team 5e898bb68b
Create temp 2018-07-01 00:53:06 -05:00
DremOS Developing Team b20c2b9b4a
Add files via upload 2018-07-01 00:51:37 -05:00
DremOS Developing Team c1692d2061
Create temp 2018-07-01 00:50:31 -05:00
DremOS Developing Team 9cd6537fc7
Update index.html 2018-06-30 22:42:19 -05:00
DremOS Developing Team c014a39224
Update index-open.html 2018-06-30 22:40:10 -05:00
DremOS Developing Team c650445879
Update index-open.html 2018-06-30 22:31:21 -05:00
SparrOSDeveloperTeam b051a30083
Update README.md 2018-06-30 14:07:14 -05:00
DremOS Developing Team 9917f6a809
Update index.html 2018-06-30 02:02:16 -05:00
DremOS Developing Team 180e0f788c
Update index.html 2018-06-30 02:00:09 -05:00
DremOS Developing Team c63f832e5d
Update index.html 2018-06-30 01:53:45 -05:00
DremOS Developing Team f30c98da1b
Update index-closed.html 2018-06-30 01:50:48 -05:00
DremOS Developing Team cde3506f94
Update index-open.html 2018-06-30 01:50:23 -05:00
DremOS Developing Team 0133847b1c
Update index-open.html 2018-06-30 01:49:29 -05:00
DremOS Developing Team 6e55b9cfbe
Update index.html 2018-06-30 01:48:42 -05:00
DremOS Developing Team a4f0da6991
Update index-open.html 2018-06-30 01:47:18 -05:00
DremOS Developing Team 59da469fd4
Update index.html 2018-06-30 01:45:23 -05:00
DremOS Developing Team c8ada3facd
Add files via upload 2018-06-30 01:36:38 -05:00
DremOS Developing Team 48f19a938c
Add files via upload 2018-06-30 01:33:31 -05:00
DremOS Developing Team 11c28cd1cd
Add files via upload 2018-06-30 01:31:17 -05:00
DremOS Developing Team 06646d691d
Create temp 2018-06-30 01:28:06 -05:00
DremOS Developing Team 998ed8a7c4
Add files via upload 2018-06-30 01:27:07 -05:00
DremOS Developing Team 21765d3c37
Create temp 2018-06-30 01:25:02 -05:00
DremOS Developing Team c27461536b
Add files via upload 2018-06-30 01:24:18 -05:00
DremOS Developing Team 49c3181034
Create temp 2018-06-30 01:23:18 -05:00
DremOS Developing Team f000a03453
Delete temp 2018-06-30 01:22:52 -05:00
DremOS Developing Team 2702ce776f
Create temp 2018-06-30 01:16:32 -05:00
DremOS Developing Team 0e184aa513
Add files via upload 2018-06-30 01:13:59 -05:00
DremOS Developing Team b07ef01837
Create temp 2018-06-30 01:11:41 -05:00
DremOS Developing Team 932827400c
Add files via upload 2018-06-30 01:11:05 -05:00
DremOS Developing Team 117974d357
Create temp 2018-06-30 01:08:26 -05:00
DremOS Developing Team 8ddfe0f858
Update index-open.html 2018-06-30 00:45:44 -05:00
DremOS Developing Team c5efc2966c
Update index-open.html 2018-06-30 00:42:59 -05:00
DremOS Developing Team 115d68ce73
Update index-open.html 2018-06-30 00:38:26 -05:00
DremOS Developing Team 7d3fbd26de
Update index.html 2018-06-30 00:37:37 -05:00
DremOS Developing Team 37085a9758
Add files via upload 2018-06-30 00:33:04 -05:00
DremOS Developing Team 83b9554cf5
Create temp 2018-06-30 00:29:50 -05:00
DremOS Developing Team 09a5f56db7
Add files via upload 2018-06-30 00:29:18 -05:00
DremOS Developing Team 339eedf549
Create index.html 2018-06-30 00:28:16 -05:00
DremOS Developing Team 3979f874a8
Delete tinymce 2018-06-30 00:27:59 -05:00
DremOS Developing Team 68f1f488e4
Create tinymce 2018-06-30 00:27:48 -05:00
DremOS Developing Team 0316e06c52
Update index-open.html 2018-06-30 00:24:36 -05:00
DremOS Developing Team ab341ebc9e
Update index-closed.html 2018-06-30 00:19:09 -05:00
DremOS Developing Team 9e0deffb51
Update index-open.html 2018-06-30 00:18:38 -05:00
DremOS Developing Team 949123d5be
Update index-open.html 2018-06-30 00:15:47 -05:00
DremOS Developing Team 14dc29dc29
Update index.html 2018-06-30 00:14:59 -05:00
DremOS Developing Team 8095f596c9
Update index.html 2018-06-30 00:14:12 -05:00
DremOS Developing Team 3d7775246a
Update index.html 2018-06-30 00:13:22 -05:00
DremOS Developing Team 95950c3850
Update index.html 2018-06-30 00:12:39 -05:00
DremOS Developing Team 3f5a0eb03e
Update index.html 2018-06-30 00:10:36 -05:00
DremOS Developing Team 1723b2831f
Update index.html 2018-06-30 00:06:16 -05:00
DremOS Developing Team d79e9518de
Update index.html 2018-06-30 00:05:03 -05:00
DremOS Developing Team de228bd19f
Update index.html 2018-06-30 00:02:03 -05:00
DremOS Developing Team acdf3a1e17
Update index.html 2018-06-29 23:59:12 -05:00
DremOS Developing Team dc386c3775
Update index.html 2018-06-29 23:57:33 -05:00
DremOS Developing Team 6c6af823fd
Update index.html 2018-06-29 23:57:12 -05:00
DremOS Developing Team 249b3fde73
Update index.html 2018-06-29 23:52:18 -05:00
DremOS Developing Team 7a4d12bcdc
Update index.html 2018-06-29 23:51:54 -05:00
DremOS Developing Team 46ef622d2d
Update index.html 2018-06-29 23:47:37 -05:00
DremOS Developing Team d2b99a54ac
Update index.html 2018-06-29 23:47:14 -05:00
DremOS Developing Team 84127beb24
Rename index-experimental.html to index.html 2018-06-29 23:43:38 -05:00
DremOS Developing Team 5ac64f112c
Rename index.html to index-closed.html 2018-06-29 23:43:21 -05:00
DremOS Developing Team f44c89114a
Delete i-index.html 2018-06-29 23:42:50 -05:00
DremOS Developing Team 083f49b3f5
Update index-experimental.html 2018-06-29 23:40:51 -05:00
DremOS Developing Team 662e426da7
Update index-experimental.html 2018-06-29 23:37:51 -05:00
DremOS Developing Team da6e7c1ada
Update index-open.html 2018-06-29 23:35:35 -05:00
DremOS Developing Team 8e73be7650
Update index-open.html 2018-06-29 23:33:48 -05:00
DremOS Developing Team 713d6b171a
Create i-index.html 2018-06-29 23:31:15 -05:00
DremOS Developing Team dfde9ad2eb
Update index-experimental.html 2018-06-29 23:29:02 -05:00
SparrOSDeveloperTeam 8fe2e6e91c
Add files via upload 2018-06-29 23:20:53 -05:00
SparrOSDeveloperTeam 404f4b0b0e
Rename jquery-3.3.1.min.js to jquery/jquery-3.3.1.min.js 2018-06-29 23:18:48 -05:00
DremOS Developing Team 5b57b64106
Create index-experimental.html 2018-06-29 23:17:50 -05:00
DremOS Developing Team 3e7653365f
Add files via upload 2018-06-29 23:16:45 -05:00
DremOS Developing Team 615d482c3a
Update index.html 2018-06-29 23:13:45 -05:00
DremOS Developing Team 6e33bbea8e
Update index.html 2018-06-29 23:13:06 -05:00
DremOS Developing Team b5fa594aa5
Update index.html 2018-06-29 23:12:20 -05:00
DremOS Developing Team 9e1f657ea0
Update index.html 2018-06-29 23:11:49 -05:00
DremOS Developing Team 6cebcac675
Update index.html 2018-06-29 23:11:17 -05:00
DremOS Developing Team 53fe8c3117
Update index.html 2018-06-29 23:09:09 -05:00
DremOS Developing Team 8ef5209d35
Update index.html 2018-06-29 23:05:30 -05:00
DremOS Developing Team 389414a5da
Update index.html 2018-06-29 23:04:43 -05:00
DremOS Developing Team bb4225b144
Update index.html 2018-06-29 23:03:41 -05:00
DremOS Developing Team 780eb34730
Update index.html 2018-06-29 22:58:57 -05:00
DremOS Developing Team 4fc76e302d
Update index.html 2018-06-29 22:57:54 -05:00
DremOS Developing Team b3a20260f7
Update index.html 2018-06-29 22:54:06 -05:00
DremOS Developing Team 53aae95d1c
Update index.html 2018-06-29 22:52:10 -05:00
DremOS Developing Team f6c646bdaf
Update index.html 2018-06-29 22:50:47 -05:00
DremOS Developing Team 30130578c3
Update index-open.html 2018-06-29 22:48:16 -05:00
DremOS Developing Team dce57c1988
Update index-open.html 2018-06-29 22:47:17 -05:00
DremOS Developing Team 8c1e46d0c6
Update index-open.html 2018-06-29 22:46:30 -05:00
DremOS Developing Team 637cf5391c
Update index-open.html 2018-06-29 22:44:37 -05:00
DremOS Developing Team 6b18c8d496
Update index-open.html 2018-06-29 22:42:05 -05:00
DremOS Developing Team 1630a6ff60
Update index-open.html 2018-06-29 22:40:15 -05:00
DremOS Developing Team 29ad8c4807
Update index.html 2018-06-29 22:32:48 -05:00
DremOS Developing Team 2258c11a8c
Update index.html 2018-06-29 22:32:32 -05:00
DremOS Developing Team 75f5892522
Update index-open.html 2018-06-29 22:29:58 -05:00
DremOS Developing Team 12066aee77
Update index-open.html 2018-06-29 22:24:17 -05:00
DremOS Developing Team f6731b3ce7
Update index-open.html 2018-06-29 22:22:49 -05:00
DremOS Developing Team bf56750b98
Update index-open.html 2018-06-29 22:22:12 -05:00
DremOS Developing Team 297a5cc2a0
Update index-open.html 2018-06-29 22:16:42 -05:00
DremOS Developing Team 5517815d56
Update index.html 2018-06-29 22:13:39 -05:00
DremOS Developing Team 0de888e672
Update index.html 2018-06-29 22:12:35 -05:00
DremOS Developing Team 7113509f6a
Update index.html 2018-06-29 22:11:31 -05:00
DremOS Developing Team ac72d83041
Add files via upload 2018-06-29 21:58:24 -05:00
DremOS Developing Team dcbe76b798
Update README.md 2018-06-29 21:32:37 -05:00
DremOS Developing Team e762ac8789
Update index.html 2018-06-29 21:29:29 -05:00
DremOS Developing Team 1569617c9d
Update index.html 2018-06-29 21:27:11 -05:00
DremOS Developing Team 61c1a44206
Update index.html 2018-06-29 21:25:05 -05:00
DremOS Developing Team 3b383487b1
Update index.html 2018-06-29 21:24:01 -05:00
DremOS Developing Team 0acc50a2bb
Add files via upload 2018-06-29 21:17:01 -05:00
SparrOSDeveloperTeam aed6e80616
Update index.html 2018-06-29 21:13:28 -05:00
SparrOSDeveloperTeam 845652adb7
Update index.html 2018-06-29 21:03:51 -05:00
SparrOSDeveloperTeam 991bf83152
Update index.html 2018-06-29 21:02:14 -05:00
SparrOSDeveloperTeam 5e79203b0a
Update index.html 2018-06-29 21:00:53 -05:00
SparrOSDeveloperTeam bee368f03e
Update index.html 2018-06-29 20:59:09 -05:00
DremOS Developing Team d227b88207
Update index.html 2018-06-29 20:55:47 -05:00
SparrOSDeveloperTeam 7436288acc
Update index.html 2018-06-29 20:53:45 -05:00
SparrOSDeveloperTeam 3e17c7ebba
Update index.html 2018-06-29 20:49:14 -05:00
SparrOSDeveloperTeam 369c29297c
Update index.html 2018-06-29 20:47:40 -05:00
SparrOSDeveloperTeam 71638d43fe
Update index.html 2018-06-29 20:47:00 -05:00
SparrOSDeveloperTeam a34534e0b8
Update index.html 2018-06-29 20:45:45 -05:00
SparrOSDeveloperTeam 2887b2a857
Update index.html 2018-06-29 20:44:14 -05:00
SparrOSDeveloperTeam d44446d7c7
Update index.html 2018-06-29 20:43:14 -05:00
SparrOSDeveloperTeam fa8f380001
Update index.html 2018-06-29 20:40:58 -05:00
SparrOSDeveloperTeam da575cb47d
Update index.html 2018-06-29 20:40:53 -05:00
SparrOSDeveloperTeam 294740e8ce
Update index.html 2018-06-29 20:36:55 -05:00
SparrOSDeveloperTeam b0fac17205
Update index.html 2018-06-29 20:31:19 -05:00
SparrOSDeveloperTeam 30ab61757d
Update index.html 2018-06-29 20:27:56 -05:00
SparrOSDeveloperTeam 467051f6a5
Update index.html 2018-06-29 20:25:20 -05:00
DremOS Developing Team 98a2a98880
Update index.html 2018-06-29 20:23:08 -05:00
DremOS Developing Team 5bc7ce536a
Update index.html 2018-06-29 20:21:26 -05:00
DremOS Developing Team 03360ba7ec
Update index.html 2018-06-29 20:18:33 -05:00
DremOS Developing Team eee6e156be
Update index.html 2018-06-29 20:13:09 -05:00
DremOS Developing Team 09415c9ca5
Update index.html 2018-06-29 20:07:46 -05:00
DremOS Developing Team c42239292a
Update index-open.html 2018-06-29 20:01:36 -05:00
DremOS Developing Team 6eab246e52
Create index.html 2018-06-29 20:00:25 -05:00
DremOS Developing Team 112132423c
Update index.html 2018-06-29 20:00:05 -05:00
DremOS Developing Team 9c9e01cb72
Create index.html 2018-06-29 19:50:17 -05:00
DremOS Developing Team 16b32018cd
Create index.html 2018-06-29 19:50:01 -05:00
DremOS Developing Team cf451281ac
Create index.html 2018-06-29 19:49:40 -05:00
DremOS Developing Team af3d4bbbe4
Update index-open.html 2018-06-29 19:48:40 -05:00
DremOS Developing Team 18592599e8
Update index-open.html 2018-06-29 19:46:55 -05:00
DremOS Developing Team 27e20b48e9
Update index-open.html 2018-06-29 19:44:47 -05:00
DremOS Developing Team be267700e3
Update index.html 2018-06-29 19:39:26 -05:00
DremOS Developing Team fe3b2c7846
Create index-open.html 2018-06-29 19:33:28 -05:00
DremOS Developing Team 22ba516443
Update index.html 2018-06-29 19:31:43 -05:00
DremOS Developing Team 6821665b21
Update index.html 2018-06-29 19:29:40 -05:00
DremOS Developing Team d95998300e
Update index.html 2018-06-29 19:28:34 -05:00
DremOS Developing Team 177fea7410
Update index.html 2018-06-29 19:28:03 -05:00
DremOS Developing Team 69820f5f62
Update README.md 2018-06-29 19:25:35 -05:00
DremOS Developing Team 67193a9f0d
Update index.html 2018-06-29 19:23:19 -05:00
DremOS Developing Team 6c7247904a
Update index.html 2018-06-29 19:17:22 -05:00
DremOS Developing Team d646460f5f
Update README.md 2018-06-29 19:16:18 -05:00
85 changed files with 4964 additions and 5 deletions

BIN
DremJS-Background.png Normal file

Binary file not shown.

After

(image error) Size: 73 KiB

Binary file not shown.

After

(image error) Size: 2.7 MiB

13
LICENSE-TERMINAL Normal file
View file

@ -0,0 +1,13 @@
<!--
Copyright (c) 2019 by Andrew M Barfield (https://codepen.io/AndrewBarfield/pen/qEqWMq)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-->

3
README-teminal.txt Normal file
View file

@ -0,0 +1,3 @@
A Pen created at CodePen.io. You can find this one at https://codepen.io/AndrewBarfield/pen/qEqWMq.
A console for the Web written completely in JavaScript. The console supports Web versions of Linux commands.

View file

@ -1,6 +1,30 @@
# DremJS
A web OS featuring 3rd party support, an IDE, and much more.
It's free and completly hosted on GitHub. No more building needed!!!
Alternatively, you can also download this and upload it to your own web server (as this project is open source). Just give credit for the original source code.
A multitasking (as of 0.1.2b) web OS featuring 3rd party support, an IDE (coming soon!), and much more (coming soon too.).
(C) Innovation Inc. 2018
DremJS is free and completly hosted on GitHub/a web server. No more building needed!
Just download this and upload it to your own web server (as this project is open source and licensed under the terms of the GNU General Public License v3). Just give credit for the original source code.
Alternatively, you can fork this repository and go to the following site after setting up GitHub pages:
<code>yourusername.github.io/DremJS</code>
However, this is not recommended as updating and installing apps is much harder.
# DremJS Updates Frequently
## How to manualy update your DremJS Desktop
Updating the DremJS Desktop is quite easy, as long as you know what you're doing.
### Step 1
Go into the index-open.html file and copy your application list to clipbord or to a txt file.
### Step 2
Download the repository and unzip the zip file to your DremJS Desktop. Overwrite all files.
### Step 3
Copy your DremJS Desktop application list with the new application list in the new index-open.html file.
Note: You should delete any duplicate application listings!
And that's it! Now you have the latest version of DremJS installed on your web server!
A system to update with a single click of a button and to install applications from DremJS itself is coming soon.
<br />
<br />
&copy; Innovation Inc. 2020

Binary file not shown.

After

(image error) Size: 16 KiB

Binary file not shown.

After

(image error) Size: 19 KiB

Binary file not shown.

After

(image error) Size: 23 KiB

Binary file not shown.

After

(image error) Size: 16 KiB

Binary file not shown.

After

(image error) Size: 28 KiB

BIN
apps/Cinema/cinema.png Normal file

Binary file not shown.

After

(image error) Size: 2.6 KiB

238
apps/Cinema/index.php Normal file
View file

@ -0,0 +1,238 @@
<?php
$file = "/home/user/Pictures/Default.png";
function GenerateTagForMedia($path) {
global $file;
// What even is this massive statement? The answer may shock you.
// (it's laziness)
if(isset($_REQUEST["action"]) && $_REQUEST["action"] == "shuffle") {
return ShuffleMusic();
}
if(isset($_REQUEST["openfile"])) {
if(file_exists($_SERVER["DOCUMENT_ROOT"].$_REQUEST["openfile"]) && !is_dir($_SERVER["DOCUMENT_ROOT"].$_REQUEST["openfile"])) {
$mime = mime_content_type($_SERVER["DOCUMENT_ROOT"].$_REQUEST["openfile"]);
if(strstr($mime, "video/")){
return "<video class='media' controls autoplay>\
<source src='".$_REQUEST["openfile"]."' type='".$mime."'>\
</video>";
// This basically depends on the video tag to support the video and is dumb.
}else if(strstr($mime, "image/")){
return "<img class='media' src='".$_REQUEST['openfile']."'>";
}else if(strstr($mime, "audio/")){
return "<audio controls autoplay>\
<source src='".$_REQUEST["openfile"]."' type='".$mime."'>\
</audio>";
}
} else {
return "<img class='media' src='assets/images/Default.png'>";
}
} else {
return "<img class='media' src='assets/images/Default.png'>";
}
}
function ShuffleMusic() {
// Build array of all music in the user's Music directory
$files = scandir("/home/user/Music/");
$music = array();
$temp = "";
// Find all files that have .mp3, .wav, or .ogg (not case sensitive) and put them into the $music array
for ($i = 0; $i < count($files); $i++) {
if (count($temp) >= 5) {
$temp = substr($files[$i], count($files[$i]-4));
} else {
$temp = "StringTooSmallSkipping";
}
if($temp == ".mp3" || $temp == ".wav" || $temp == ".ogg") {
$music[] = $files[$i];
}
}
}
/*if($_REQUEST["action"] == "shuffle") {
ShufleMusic();
}*/
?>
<html>
<head>
<style>
body {
font-family: Calibri;
background-color: white;
}
.container {
width: 80%;
margin: auto;
padding: 0px;
}
.left {
width: 30%;
float: left;
}
.right {
margin-left: 5%;
}
.openDialog {
position: absolute;
background: #D3D3D3;
top: 5%;
left: 5%;
width: 90%;
padding: 5px;
display: none;
}
.aboutDialog {
position: absolute;
background: #D3D3D3;
top: 5%;
left: 5%;
width: 90%;
height: 90%;
padding: 5px;
display: none;
}
.actionbar {
height: 42px;
width: 100%;
background-color: black;
}
.actionbarbutton {
width: 32px;
height: 32px;
border: 10px;
}
.media {
height: 95%;
width: auto;
vertical-align: middle;
}
</style>
</head>
<body onload="Init();">
<script type="text/javascript">
document.addEventListener('contextmenu', event => event.preventDefault());
function GetDremJSMenuFunctions() {
return [
["Open", "OpenDocumentDialog();"],
["<hr />", ""],
["Shuffle", "ShuffleMusic();"],
["<hr />", ""],
["Toggle Light", "ToggleLight();"],
["<hr />", ""],
["About", "About();"]
];
}
CurrentFile = "/home/user/";
var MediaTag = "";
function Init() {
//document.getElementById("writingto").innerHTML = "Writing to: " + CurrentFile;
MediaTag = "<?php echo GenerateTagForMedia("/home/user/Pictures/Default.png"); ?>";
document.getElementById("open").value = CurrentFile;
document.getElementById('MediaBox').innerHTML=MediaTag;
}
function OpenDocumentDialog() {
document.getElementById("openDialog").style.display = "block";
}
function OpenDocument() {
/*$.ajax({
url : window.location.href,
type : "POST",
data : {action : "open", open : document.getElementById("open").value},
success: function(data, textStatus, jqXHR) {
//console.log(data);// You can see the result which is created in chat.php
console.log("Successfully Opened");
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus);// if there is an error
}
});*/
//CurrentFile = document.getElementById("open").value;
//CancelOpen();
//Init();
window.location.href = "index.php?action=open&openfile=" + document.getElementById("open").value;
}
function CancelOpen() {
document.getElementById("openDialog").style.display = "none";
}
function About() {
document.getElementById("aboutDialog").style.display = "block";
}
function CloseAbout() {
document.getElementById("aboutDialog").style.display = "none";
}
function ToggleLight() {
if (document.getElementsByTagName("body")[0].style.backgroundColor === "black") {
document.getElementsByTagName("body")[0].style.backgroundColor = "white";
} else {
document.getElementsByTagName("body")[0].style.backgroundColor = "black";
}
}
function ShuffleMusic() {
$.ajax({
type:'POST',
url:'index.php',
data:'action=shuffle',
success:function(data) {
if(data=="Something") {
// Do Something
} else {
// Do Something
}
}
});
window.location.href = "index.php?action=shuffle";
}
</script>
<!--<div id="actionBar" class="actionbar">
<div id="light" class="actionbarbutton left">
<img style="width:42px;height:42px;" src="assets/images/lightbulb-on-white.png" />
</div>
</div>-->
<center>
<div id="MediaBox">
</div>
</center>
<div id="openDialog" class="openDialog">
<p>Input the path to the media file you would like to open. You can use the File Manager to find the path.</p>
<!--<form action="index.php" method="POST">
<input type="hidden" name="action" value="open" />-->
<input type="text" id="open" name="open" size="50" />
<input type="submit" id="OpenFile" onclick="OpenDocument()" value="Open File" />
<!--</form>-->
<input type="button" onclick="CancelOpen()" value="Cancel" />
</div>
<div id="aboutDialog" class="aboutDialog container">
<div class="left">
<img src="cinema.png" style="width:128px;height:128px" />
</div>
<div class="right">
<h1>About DremJS Cinema</h1>
<h2>Version: 0.1.0b</h2>
</div>
<p>
Open: Opens a media file.<br />
Toggle Light: Toggles the background to be white or black (easier on the eyes)<br />
</p>
<center><input type="button" onclick="CloseAbout()" value="Close" /></center>
<p>
</div>
</body>
</html>

6
apps/Cinema/meta Normal file
View file

@ -0,0 +1,6 @@
Name: Cinema
Author: Innovation Inc.
Width: 700
Height: 450
Icon: cinema.png
Category: /Media

View file

@ -0,0 +1,2 @@
[27-Oct-2020 09:43:56 America/Chicago] PHP Parse error: syntax error, unexpected '}' in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/cinema/index.php on line 46
[27-Oct-2020 09:45:05 America/Chicago] PHP Notice: Undefined index: action in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/cinema/index.php on line 53

Binary file not shown.

After

(image error) Size: 2.8 KiB

View file

@ -0,0 +1,9 @@
<!-- File Manager Forwarder -->
<html>
<head>
<script>
document.addEventListener('contextmenu', event => event.preventDefault());
</script>
<meta http-equiv="refresh" content="0;url=../../home/user/index.php" />
</head>
</html>

6
apps/FileManager/meta Normal file
View file

@ -0,0 +1,6 @@
Name: File Manager
Author: Innovation Science
Width: 700
Height: 450
Icon: filemanager.png
Category: /

211
apps/Notepad/index.php Normal file
View file

@ -0,0 +1,211 @@
<?php
//if(!isset($_POST["open"])) {
$file = "/home/user/Documents/NewFile.txt";
//} else {
//$file = $_POST["open"];
//}
function GetFileContents() {
global $file;
if(isset($_REQUEST["openfile"]))
return file_get_contents($_SERVER["DOCUMENT_ROOT"].$_REQUEST["openfile"]);
return file_get_contents($_SERVER["DOCUMENT_ROOT"].$file);
}
function SaveDocument() {
//$currentUser = $_SERVER["DOCUMENT_ROOT"]."/home/user";
$writeto = fopen($_SERVER["DOCUMENT_ROOT"].$_REQUEST["file"], "w");
fwrite($writeto, $_REQUEST["text"]);
fclose($writeto);
}
if (isset($_REQUEST["action"])) {
if($_REQUEST["action"] == "save") {
SaveDocument();
} elseif ($_REQUEST["action"] == "open") {
global $file;
$file = $_REQUEST["openfile"];
if(!is_file($_SERVER["DOCUMENT_ROOT"].$file)) {
$writeto = fopen($_SERVER["DOCUMENT_ROOT"].$file, "w");
fclose($writeto);
}
} else {
}
}
?>
<html>
<head>
<style>
body {
font-family: Calibri;
}
.container {
width: 80%;
margin: auto;
padding: 0px;
}
.left {
width: 30%;
float: left;
}
.right {
margin-left: 5%;
}
.openDialog {
position: absolute;
background: #D3D3D3;
top: 5%;
left: 5%;
width: 90%;
padding: 5px;
display: none;
}
.aboutDialog {
position: absolute;
background: #D3D3D3;
top: 5%;
left: 5%;
width: 90%;
height: 90%;
padding: 5px;
display: none;
}
</style>
</head>
<body onload="Init();">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
CurrentFile = "<?php echo $file; ?>";
function Init() {
document.getElementById("writingto").innerHTML = "Writing to: " + CurrentFile;
document.getElementById("inputbox").value = "<?php echo GetFileContents(); //echo file_get_contents($_SERVER["DOCUMENT_ROOT"].$file); ?>";
document.getElementById("open").value = CurrentFile;
}
document.addEventListener('contextmenu', event => event.preventDefault());
function GetDremJSMenuFunctions() {
return [
["Open", "OpenDocumentDialog();"],
["Save", "SaveDocument();"],
["<hr />", ""],
["Copy", "CopyText();"],
["Paste", "PasteText();"],
["<hr />", ""],
["About", "About();"]
];
// Scrapped
// ["New", "NewDocument();"],
// ["Save As...", "SaveDocumentAs();"],
// ["Delete", "DeleteSelected();"],
}
function SaveDocument() {
//document.getElementById("form").submit();
//console.log(document.getElementById("inputbox").value);
$.ajax({
url : window.location.href,
type: "POST",
data : {action : "save", text : document.getElementById("inputbox").value, file : CurrentFile},
success: function(data, textStatus, jqXHR) {
//console.log(data);// You can see the result which is created in chat.php
console.log("Successfully Saved");
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus);// if there is an error
}
});
//Init();
}
function OpenDocumentDialog() {
document.getElementById("openDialog").style.display = "block";
}
function OpenDocument() {
/*$.ajax({
url : window.location.href,
type : "POST",
data : {action : "open", open : document.getElementById("open").value},
success: function(data, textStatus, jqXHR) {
//console.log(data);// You can see the result which is created in chat.php
console.log("Successfully Opened");
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus);// if there is an error
}
});*/
//CurrentFile = document.getElementById("open").value;
//CancelOpen();
//Init();
//console.log(document.getElementById("open").value);
window.location.href = "index.php?action=open&openfile=" + document.getElementById("open").value;
}
function CancelOpen() {
document.getElementById("openDialog").style.display = "none";
}
function CopyText() {
document.execCommand("copy");
}
function PasteText() {
box = document.getElementById("inputbox");
box.focus();
navigator.clipboard.readText()
.then(text => {
loc = box.value.slice(0, box.selectionStart).length;
value = document.getElementById("inputbox").value;
document.getElementById("inputbox").value = value.substring(0, loc) + text + value.substring(loc, value.length);
})
.catch(err => {
console.error('Failed to read clipboard contents: ', err);
});
}
function About() {
document.getElementById("aboutDialog").style.display = "block";
}
function CloseAbout() {
document.getElementById("aboutDialog").style.display = "none";
}
</script>
<!--<form>
<label>DremJS Notepad</label>
<br />
<textarea id="inputbox" name="inputbox" rows="50" columns="500"></textarea>
</form>-->
<div id="openDialog" class="openDialog">
<p>Input the path to the document you would like to open. You can use the File Manager to find the path.</p>
<!--<form action="index.php" method="POST">
<input type="hidden" name="action" value="open" />-->
<input type="text" id="open" name="open" size="50" />
<input type="submit" id="OpenFile" onclick="OpenDocument()" value="Open File" />
<!--</form>-->
<input type="button" onclick="CancelOpen()" value="Cancel" />
</div>
<div id="aboutDialog" class="aboutDialog container">
<div class="left">
<img src="notepad.png" style="width:128px;height:128px" />
</div>
<div class="right">
<h1>About DremJS Notepad</h1>
<h2>Version: 0.1.0b</h2>
</div>
<p>
Open: Opens or creates a new document.<br />
Save: Saves the current document.<br />
Copy: Copies selected text to the clipboard.<br />
Paste: Pastes the text in the clipboard to where the cursor is (requires clipboard access).
</p>
<center><input type="button" onclick="CloseAbout()" value="Close" /></center>
<p>
</div>
<textarea id="inputbox" name="text" rows="23" cols="90"></textarea>
<p id="writingto"></p>
</body>
</html>

6
apps/Notepad/meta Normal file
View file

@ -0,0 +1,6 @@
Name: Notepad
Author: Innovation Inc.
Width: 700
Height: 450
Icon: notepad.png
Categpry: /Tools

BIN
apps/Notepad/notepad.png Normal file

Binary file not shown.

After

(image error) Size: 94 KiB

View file

@ -0,0 +1,27 @@
[25-Aug-2020 21:42:10 America/Chicago] PHP Notice: Undefined variable: file in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 76
[25-Aug-2020 21:42:10 America/Chicago] PHP Notice: Undefined variable: file in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 80
[25-Aug-2020 21:42:18 America/Chicago] PHP Notice: Undefined variable: file in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 76
[25-Aug-2020 21:42:18 America/Chicago] PHP Notice: Undefined variable: file in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 80
[25-Aug-2020 21:44:42 America/Chicago] PHP Parse error: syntax error, unexpected 'return' (T_RETURN), expecting ';' in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 10
[25-Aug-2020 21:50:40 America/Chicago] PHP Notice: Undefined index: open in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:51:12 America/Chicago] PHP Notice: Undefined index: open in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:51:22 America/Chicago] PHP Notice: Undefined index: open in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:51:24 America/Chicago] PHP Notice: Undefined index: open in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:51:32 America/Chicago] PHP Notice: Undefined index: open in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:51:41 America/Chicago] PHP Notice: Undefined index: open in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:51:48 America/Chicago] PHP Notice: Undefined index: open in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:52:43 America/Chicago] PHP Notice: Undefined index: openfile in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:52:46 America/Chicago] PHP Notice: Undefined index: openfile in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:52:47 America/Chicago] PHP Notice: Undefined index: openfile in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:53:04 America/Chicago] PHP Notice: Undefined index: openfile in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:53:06 America/Chicago] PHP Notice: Undefined index: openfile in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:53:45 America/Chicago] PHP Parse error: syntax error, unexpected '<', expecting end of file in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 213
[25-Aug-2020 21:53:47 America/Chicago] PHP Parse error: syntax error, unexpected '<', expecting end of file in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 213
[25-Aug-2020 21:53:54 America/Chicago] PHP Notice: Undefined index: openfile in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:53:54 America/Chicago] PHP Notice: Undefined index: action in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 212
[25-Aug-2020 21:55:30 America/Chicago] PHP Notice: Undefined index: openfile in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:55:33 America/Chicago] PHP Notice: Undefined index: openfile in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:59:29 America/Chicago] PHP Notice: Undefined index: openfile in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 211
[25-Aug-2020 21:59:29 America/Chicago] PHP Notice: Undefined index: action in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 212
[26-Aug-2020 08:55:57 America/Chicago] PHP Warning: file_get_contents(/mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/home/user/Documents/NewFile.txt): failed to open stream: No such file or directory in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 11
[27-Oct-2020 09:13:28 America/Chicago] PHP Warning: file_get_contents(/mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/home/user/Documents/NewFile.txt): failed to open stream: No such file or directory in /mnt/c/Users/Sam/Documents/dremjs/DremJS-0.1.6b/apps/notepad/index.php on line 11

2
apps/TestApp1/index.html Normal file
View file

@ -0,0 +1,2 @@
<h1>it works</h1>
<a href="/DremJS/index.html"><p>Home</p></a>

2
apps/TestApp2/index.html Normal file
View file

@ -0,0 +1,2 @@
<h1>it works</h1>
<a href="/DremJS/index.html"><p>Home</p></a>

BIN
apps/about/about.png Normal file

Binary file not shown.

After

(image error) Size: 794 B

173
apps/about/index.html Normal file
View file

@ -0,0 +1,173 @@
<html>
<head>
<title>About DremJS</title>
<style type="text/css">
body {
font-family: Calibri;
}
.container {
width: 80%;
margin: auto;
padding: 0px;
}
.left {
width: 30%;
float: left;
}
.right {
margin-left: 5%;
}
</style>
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
document.addEventListener('contextmenu', event => event.preventDefault());
function GetDremJSMenuFunctions() {
return [
["Secret", "SecretFunctionLol();"]
];
}
function SecretFunctionLol() {
window.location.replace("https://www.youtube.com/embed/fC7oUOUEEi4");
}
</script>
<section class="container">
<div class="left">
<img src="logo.png" style="width:128px;height:128px" />
</div>
<div class="right">
<h1>About DremJS</h1>
<h2>Version: 0.1.7b</h2>
<h2>Agenda WM 0.1.2b</h2>
</div>
</section>
<p>Changelog:<br />
Version 0.1.7b<br />
+File Manager<br />
+Notepad<br />
+A right-click context menu<br />
+Added new folders<br />
&nbsp;+ /etc - Used for holding configuration files<br />
&nbsp;+ /assets - Holds assets for use by DremJS<br />
&nbsp;+ /assets/media/images - Holds specifically images<br />
Spring cleaning<br />
&nbsp;-Removed ambient music on all applications<br />
&nbsp;-Removed 404 error screen (since it wasn't used anyway)<br />
&nbsp;-Removed background.png (same reason as the above)<br />
&nbsp;-Removed the old favicon<br />
~Made the terminal portable<br />
~General system stability improvements to enhance the user's experience.<br /><br />
Version 0.1.6b<br />
+Widget support (see wiki for more information)<br />
+Made clicking apps in the taskbar move applications to the front instead of minimizing.<br />
+Cowsay (PHP and JS interfacing experiment)<br />
+Changed the start menu to the Drem Logo<br />
+Added a task manager (combined with Server Status application)<br />
+Added a CPU/memory monitor (see wiki for more information)<br />
~Windows now have a shaded background<br />
~Fixed a bug in terminal where white-space is ignored by output().<br />
~Made terminal themes consistent (no more cookies)<br />
~General system stability improvements to enhance the user's experience.<br /><br />
Version 0.1.5b<br />
+Readded the start menu<br />
+A lite theme for the terminal, if that's your thing. You can toggle the theme with "settheme".<br />
~DremJS went on a strict diet and lost about 15MBs<br />
~Changed DremJS's font to Calibri<br />
~Overhauled the About application a lot.
~General system stability improvements to enhance the user's experience.
NOTE: Even though DremJS's font is Calibri, it does NOT mean that applications will automagically change to Calibri. Developers need to set their own font if they want a custom one.<br /><br />
Version 0.1.4b<br />
+Added ProcMan (Process Manager) to the terminal which allows you to list all processes or kill a process<br />
+Added insmod (Install Module). It's on its first prototype so it's not able to do much.<br />
~Separated Terminal from Debug and made it accessible when not in Debug mode.<br />
~Updated Terminal image.<br />
~Probable a ton more changes that I forgot about before I went on a break<br />
~Updated to Agenda WM 0.1.0b, which adds some new features and tweaks including, but not limited to:<br />
~Made Agenda its own .js file<br />
~Moved the taskbar that was originally in DremJS into Agenda WM<br />
+Added the ability to minimize and restore applications (hence the taskbar move)<br /><br />
Version 0.1.3b<br />
~Updated to Agenda WM 0.0.4b, which adds some new features and tweaks including, but not limited to:<br />
+A maximize button<br />
+The ability to launch applications with a specific size.<br /><br />
Version 0.1.2b (Hotfix 1)<br />
~Fixed a bug where multiple instances of the same app will have the same (supposed to be) unique identifier, which caused problems with closing and layering.<br /><br />
Version 0.1.2b<br />
This is a very important and large release for DremJS!<br />
We are going to hard code the start menu to stay open at all times for a while until we care enough to reimpliment it better.<br />
<!-- Maybe in 0.1.3b... -->
<!--+++We're very glad to present a very basic application installation program! It only works on MiniWeb. I don't know if it will work on Apache servers or not.-->
+++With the brand new Agenda WM, you can now multitask in DremJS!<br />
+Added 'cmd_fm' command to terminal. CMD.FM is a free online radio service that looks like a computer terminal. <br /><br />
Version 0.1.1b<br />
+A terminal that is accessable from the Debug Menu. It's based off of <a href="https://codepen.io/AndrewBarfield/pen/qEqWMq?css-preprocessor=scss">Andrew Barfield's HTML5 Web Terminal</a>.<br />
~Some UI Tweaks<br />
~Bug Fixes<br />
~Made the shutdown function actually shut DremJS down<br /><br />
Version 0.1.0b<br />
+A taskbar<br />
++Home button moved to taskbar<br />
++About app is on taskbar for defaults. Because we are still working on the taskbar, documentation for adding or removing icons from the taskbar will not be released yet.<br />
~Some apps moved to the Marketplace to make DremJS smaller. The most important apps stay (About, DremJS Market, How to Install Apps, Report a Bug)<br /><br />
Version 0.0.9-1a<br />
+PVT Counter<br />
~Improved 404 screen that isn't an eye sore when you look at it in the dark<br />
~Bug Fixes<br />
~Made the GUI more centered and prettier<br /><br />
Version 0.0.8-2a<br />
=More WAV to MP3 fixes<br /><br />
Version 0.0.8-1a<br />
+A crash handler for 404 errors, should you have any.<br />
+A little debug menu that can be found in the bug report application. Uncommenting it will enable it. At the moment, it is mostly useless.<br />
~A few minor patches<br /><br />
Version 0.0.8a<br />
+Shutdown animation<br />
+Added icons for downloadable apps (apps in DremJS Market)<br />
=Better Shop app (no iframe inside an iframe)<br />
=Better way of getting downloads from DremJS Market (GitHub Releases)<br />
=To prevent having to resize div in index-open.html, the start menu takes up the entire left hand side of the open page<br />
=SO MANY MORE BUG FIXES!!!<br /><br />
Version 0.0.7-3a<br />
Removed the underlines and made all application links black in the start menu.<br /><br />
Version 0.0.7-2a<br />
Ironically, fixed a bug in the debug application which caused DremJS to open in a new tab when clicking "Go Back" by simply removing it. That's the home button's job anyway!<br /><br />
Version 0.0.7-1a<br />
~Compatibility Update<br />
Turned some .wav files into mp3 files for consistancy, and for better support for MiniWeb<br />
Made the Debug application an application with the purpose of bug reporting<br /><br />
Version 0.0.7a<br />
~Compatibility Update<br />
+Changed iframes to use %'s rather than px. This will make the OS grow or shrink per the device's size. This was mainly added for smaller devices such as phones and tablets.<br /><br />
Version 0.0.6-1a<br />
+Open menu sound added<br />
+Ambient music added in some built in applications<br /><br />
Version 0.0.6a<br />
This update was really only made for fun and to make the OS overall prettier.<br />
~The Market got moved to the actual DremJS-Market repository so that everyone has the same DremJS Market<br />
+App Icons!<br />
+Favicon!<br />
+Shutdown Button<br />
+Shutdown Sound<br />
+Startup Sound<br />
+A few more small tweaks to make the OS prettier<br /><br />
Version 0.0.5a<br />
+Whats that?! It's a gradualy improving app store!! You must download DremJS and host it or run it on your browser on your own PC to use it though.<br />
Installation instructions are inside the zip that will download from it. Read it before you install!!!<br /><br />
Version 0.0.4a<br />
+Sam&Yoe Group: The Video Game<br />
~Music has some problems<br /><br />
Version 0.0.3a<br />
Now for some functionality.<br />
+TinyMCE Text Editor<br />
+Paint app<br /><br />
Version 0.0.2a<br />
+This version actually used javascript for the home button! Now DremJS really is DremJS! Seriously though, when installing web apps on this thing that don't have a home button, this button is a life saver.<br />
-All built-in apps have gotten their home buttons removed due to the "master" home button.<br />
-Test Apps Removed (from start menu)<br /><br />
Version 0.0.1a<br />
The first ever version. Doesn't even have JS yet, despite the name. Don't expect much.<br />
Future ideas:<br />
To be able to go back to the home screen easier, I will soon add a home button by loading apps using iframe instead.</p>
</body>
</html>

BIN
apps/about/logo.png Normal file

Binary file not shown.

After

(image error) Size: 508 KiB

6
apps/about/meta Normal file
View file

@ -0,0 +1,6 @@
Name: About
Author: Innovation Inc.
Width: 800
Height: 500
Icon: about.png
Category: /

BIN
apps/debug/chord.mp3 Normal file

Binary file not shown.

BIN
apps/debug/debug.png Normal file

Binary file not shown.

After

(image error) Size: 385 B

39
apps/debug/index.html Normal file
View file

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html>
<head>
<title>Notice</title>
</head>
<style type="text/css">
code {
background-color: #eee;
color: black;
padding: 5px;
}
</style>
<body>
<script>
document.addEventListener('contextmenu', event => event.preventDefault());
</script>
<embed src="https://sparrdrem.github.io/DremJS/apps/debug/chord.mp3" width="0" height="0" loop="true" autostart="true" hidden="true" />
<h1>
Notice
</h1>
<hr />
<br />
<br />
<p>
This will transfer you to the GitReports page in a new tab.<br />
To go back, press home now.
</p>
<a target="_blank" href="https://gitreports.com/issue/DremOSDeveloperTeam/DremJS"><button>Proceed</button></a>
<hr />
<!-- Uncomment everything below to enable the Debug Menu -->
<!--<h2>Debug Menu (only works if DremJS is on the root of your HTML server)</h2>
<p>Notice: the debug menu is fairly useless at the moment.</p>
<a href="/404.html"><button>Initiate 404 Crash</button></a>
<a href="/index.html" target="_parent"><button>Force DremJS to go to the Home Menu</button></a>
<a href="../../terminal.html"><button>Start Terminal</button></a>-->
</body>
</html>

6
apps/debug/meta Normal file
View file

@ -0,0 +1,6 @@
Name: Debug
Author: Innovation Inc.
Width: 700
Height: 450
Icon: debug.png
Category: /Tools

BIN
apps/howto/apps.png Normal file

Binary file not shown.

After

(image error) Size: 16 KiB

BIN
apps/howto/howto.png Normal file

Binary file not shown.

After

(image error) Size: 569 B

46
apps/howto/index.html Normal file
View file

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html>
<head>
<title>How To Install Applications On DremJS</title>
</head>
<style type="text/css">
code {
background-color: #eee;
color: white;
padding: 5px;
display: block;
}
body {
font-family: Calibri;
}
</style>
<body>
<script>
document.addEventListener('contextmenu', event => event.preventDefault());
</script>
<h1>
How to Install Applications On DremJS
</h1>
<h2>
Step 1
</h2>
<p>
Make a directory inside the "apps" directory and copy the program files to it
</p>
<img src="apps.png" alt="App folder">
<h2>
Step 2
</h2>
<p>
Go to the index-open.html file on the root of the OS and go to the main <kbd>ul</kbd> block. Insert anywhere within it, changing the image src, and application names to your needs:
Note: If there is a "install.txt" file in the application folder, please copy the script from there.
</p>
<br />
<img src="script.png" alt="Script">
<p>
Thats it! The program will appear in the Start menu and should start to work.
</p>
<br />
<p><a href="https://github.com/SparrOSDeveloperTeam/">SparrOS Developer Team</a> helped develop application. Thanks!</p>
</body>
</html>

6
apps/howto/meta Normal file
View file

@ -0,0 +1,6 @@
Name: How to Install Applications
Author: Innovation Inc.
Width: 800
Height: 500
Icon: howto.png
Category: /

BIN
apps/howto/script.png Normal file

Binary file not shown.

After

(image error) Size: 4.7 KiB

8
apps/market/index.html Normal file
View file

@ -0,0 +1,8 @@
<html>
<head>
<script>
document.addEventListener('contextmenu', event => event.preventDefault());
</script>
<meta http-equiv = "refresh" content = "0; url = https://sparrdrem.github.io/DremJS-Market/" />
</head>
</html>

BIN
apps/market/market.png Normal file

Binary file not shown.

After

(image error) Size: 349 B

6
apps/market/meta Normal file
View file

@ -0,0 +1,6 @@
Name: DremJS Market
Author: Innovation Science
Width: max
Height: max
Icon: market.png
Category: /

View file

@ -0,0 +1,63 @@
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/jquery-ui.min.js"></script>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
<style>
body {
font-family: Calibri;
}
.buttonA, .buttonB {
display: inline-block;
}
.buttons {
width: 100%;
left: 0px;
top: 0px;
position: sticky;
background-color: #D3D3D3;
}
</style>
<script>
document.addEventListener('contextmenu', event => event.preventDefault());
</script>
<script type="text/javascript">
$(function() {
var i = 0
while (i <= 1000) {
if (parent.idExists(i)) {
content='<tr><td><p>'+i+'</p></td><td><p>'+parent.idExists(i)+'</p></td><td><button class="sideRight" type="button" onclick="parent.closeApplication('+i+')">Kill</button></td></tr>';
var container=document.getElementById("container");
container.insertAdjacentHTML("beforeend", content);
//console.log(i + "\t\t" + parent.idExists(i));
}
i++;
}
});
function startRefresh() {
$.get("TaskManager.html", function(data) {
$(document.body).html(data);
});
}
$(function() {
setTimeout(startRefresh,1000);
});
</script>
</head>
<body>
<div class="buttons">
<a href="index.php"><button type="button" class="buttonA">Status</button></a>
<button type="button" class="buttonB" disabled>Task Manager</button>
</div>
<table id="container" style="width:100%">
<thead>
<tr>
<th>ID</th>
<th>Process Name</th>
<th></th>
</tr>
</thead>
</table>
</body>
</html>

113
apps/serverstatus/index.php Normal file
View file

@ -0,0 +1,113 @@
<?php
header('Refresh:10');
function displayInfo() {
$systemInfo = '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/jquery-ui.min.js"></script>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
$(function() {
var content = \'<center><p>CPU Usage: '.getCpuUsage().'%</p><div id="cpuUsageBar"></div><br /><p>Memory Usage (see docs): '.memory_usage()."KB/".memory_total()."KB".'</p><div id="memoryUsageBar"></div></center>\';
var parent=document.getElementById("container");
parent.insertAdjacentHTML("beforeend", content);
$( "#cpuUsageBar" ).progressbar({
value: '.getCpuUsage().'
});
$( "#memoryUsageBar" ).progressbar({
value: '.round((memory_usage()/memory_total())*100, 2).'
});
});
function startRefresh() {
$.get("index.php", function(data) {
$(document.body).html(data);
});
}
$(function() {
setTimeout(startRefresh,5000);
});
</script>
<style>
body {
font-family: Calibri;
}
.buttonA, .buttonB {
display: inline-block;
}
.buttons {
width: 100%;
top: 0px;
left: 0px;
position: sticky;
background-color: #D3D3D3;
}
</style>
</head>
<body>
<script>
document.addEventListener("contextmenu", event => event.preventDefault());
</script>
<div class="buttons">
<button type="button" class="buttonA" disabled>Status</button>
<a href="TaskManager.html"><button type="button" class="buttonB">Task Manager</button></a>
</div>
<div id="container">
</div>
</body>
</html>';
echo($systemInfo);
//ob_flush();
//flush();
}
function memory_usage() {
return memory_total() - memory_free();
}
function memory_free() {
$fh = fopen('/proc/meminfo','r');
$mem = 0;
while ($line = fgets($fh)) {
$pieces = array();
if (preg_match('/^MemFree:\s+(\d+)\skB$/', $line, $pieces)) {
$mem = $pieces[1];
break;
}
}
fclose($fh);
return $mem;
}
function memory_total() {
$fh = fopen('/proc/meminfo','r');
$mem = 0;
while ($line = fgets($fh)) {
$pieces = array();
if (preg_match('/^MemTotal:\s+(\d+)\skB$/', $line, $pieces)) {
$mem = $pieces[1];
break;
}
}
fclose($fh);
return $mem;
}
function getCpuUsage() {
if(stristr(PHP_OS, 'win')) {
$_ENV['typeperfCounter'] = '\processor(_total)\% processor time';
exec('typeperf -sc 1 "'.$_ENV['typeperfCounter'].'"', $p);
$line = explode(',', $p[2]);
$load = trim($line[1], '"');
return $load;
} else {
$usage = sys_getloadavg();
return $usage[0];
}
}
displayInfo();
?>

6
apps/serverstatus/meta Normal file
View file

@ -0,0 +1,6 @@
Name: Server Status
Author: Innovation Science
Width: 300
Height: 300
Icon: serverstatus.png
Category: /

Binary file not shown.

After

(image error) Size: 1.4 KiB

106
apps/terminal/css/dark.css Normal file
View file

@ -0,0 +1,106 @@
::selection {
background: #FF5E99;
}
html, body {
width: 100%;
height: 100%;
margin: 0;
}
body {
font-size: 11pt;
font-family: Inconsolata, monospace;
color: white;
background-color: black;
}
#container {
padding: .1em 1.5em 1em 1em;
}
#container output {
clear: both;
width: 100%;
}
#container output h3 {
margin: 0;
}
#container output pre {
margin: 0;
}
.input-line {
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
clear: both;
}
.input-line > div:nth-child(2) {
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
}
.prompt {
white-space: nowrap;
color: #96b38a;
margin-right: 7px;
display: -webkit-box;
-webkit-box-pack: center;
-webkit-box-orient: vertical;
display: -moz-box;
-moz-box-pack: center;
-moz-box-orient: vertical;
display: box;
box-pack: center;
box-orient: vertical;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.cmdline {
outline: none;
background-color: transparent;
margin: 0;
width: 100%;
font: inherit;
border: none;
color: inherit;
}
.ls-files {
height: 45px;
-webkit-column-width: 100px;
-moz-column-width: 100px;
-o-column-width: 100px;
column-width: 100px;
}
/************************************************************/
/* SVG Clock */
/************************************************************/
.clock-container {
display: none /*inline-block*/;
position: relative;
width: 200px;
vertical-align: middle;
overflow: hidden;
}
.clock-container > svg > circle {
stroke-width: 2px;
stroke: #fff;
}
.hour, .min, .sec {
stroke-width: 1px;
fill: #333;
stroke: #555;
}
.sec {
stroke: #f55;
}

106
apps/terminal/css/lite.css Normal file
View file

@ -0,0 +1,106 @@
::selection {
background: #ACCEF7;
}
html, body {
width: 100%;
height: 100%;
margin: 0;
}
body {
font-size: 11pt;
font-family: Inconsolata, monospace;
color: black;
background-color: white;
}
#container {
padding: .1em 1.5em 1em 1em;
}
#container output {
clear: both;
width: 100%;
}
#container output h3 {
margin: 0;
}
#container output pre {
margin: 0;
}
.input-line {
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
clear: both;
}
.input-line > div:nth-child(2) {
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
}
.prompt {
white-space: nowrap;
color: #0000ff;
margin-right: 7px;
display: -webkit-box;
-webkit-box-pack: center;
-webkit-box-orient: vertical;
display: -moz-box;
-moz-box-pack: center;
-moz-box-orient: vertical;
display: box;
box-pack: center;
box-orient: vertical;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.cmdline {
outline: none;
background-color: transparent;
margin: 0;
width: 100%;
font: inherit;
border: none;
color: inherit;
}
.ls-files {
height: 45px;
-webkit-column-width: 100px;
-moz-column-width: 100px;
-o-column-width: 100px;
column-width: 100px;
}
/************************************************************/
/* SVG Clock */
/************************************************************/
.clock-container {
display: none /*inline-block*/;
position: relative;
width: 200px;
vertical-align: middle;
overflow: hidden;
}
.clock-container > svg > circle {
stroke-width: 2px;
stroke: #fff;
}
.hour, .min, .sec {
stroke-width: 1px;
fill: #333;
stroke: #555;
}
.sec {
stroke: #f55;
}

112
apps/terminal/index.html Normal file
View file

@ -0,0 +1,112 @@
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>DremJS Terminal</title>
<link rel="stylesheet" type="text/css" title="dark" href="css/dark.css">
<!--<link rel="alternate stylesheet" type="text/css" title="lite" href="css/lite.css">-->
</head>
<body>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
<title>DremJS</title>
<link href="https://fonts.googleapis.com/css?family=Inconsolata"
rel="stylesheet" type="text/css" />
</head>
<body onload="getTheme();">
<script>
function getTheme() {
var path = $('script[src*=terminal]').attr('src').replace('terminal.js', '');
jQuery.get(path + 'configs/theme.conf', function(data) {
if(data == "1") {
var cssLink = $('link[href*="/css/dark.css"]');
cssLink.replaceWith('<link href="' + path + 'css/lite.css" type="text/css" rel="stylesheet">');
} else {
var cssLink = $('link[href*="css/lite.css"]');
cssLink.replaceWith('<link href="' + path + 'css/dark.css" type="text/css" rel="stylesheet">');
}
});
}
</script>
<!--<script> old script
function setTheme() {
if (checkCookie('terminalTheme') == false) {
document.cookie = "terminalTheme=0";
} else {
theme = getCookie('terminalTheme');
if (theme == 1) {
/*var stylesheet = document.getElementById("stylesheet");
stylesheet.setAttribute('href', 'css/lite.css');*/
var cssLink = $('link[href*="css/dark.css"]');
cssLink.replaceWith('<link href="css/lite.css" type="text/css" rel="stylesheet">');
}
}
}
function checkCookie(cname) {
var cookie = getCookie(cname);
if (cookie != "") {
return true;
} else {
return false;
}
}
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i <ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
</script>-->
<div id="container">
<output></output>
<div id="input-line" class="input-line">
<div class="prompt"></div><div><input class="cmdline" autofocus /></div>
</div>
</div>
<!--<script src="http://www.codehelper.io/api/ips/?js"></script>-->
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="./terminal/terminal.js"></script>
<div class="clock-container">
<svg viewBox="0 0 100 100">
<circle cx="50" cy="50" r="45"/>
<g>
<rect class="hour" x="47.5" y="12.5" width="5" height="40" rx="2.5" ry="2.55" />
<rect class="min" x="48.5" y="12.5" width="3" height="40" rx="2" ry="2"/>
<line class="sec" x1="50" y1="50" x2="50" y2="16" />
</g>
</svg>
</div>
</body>
</html>
<script src="./terminal/index.js"></script>
</body>
</html>

6
apps/terminal/meta Normal file
View file

@ -0,0 +1,6 @@
Name: Terminal
Author: Innovation Science
Width: 700
Height: 450
Icon: terminal.png
Category: /

View file

@ -0,0 +1,5 @@
type terminal;
name hello;
output("world");
//break;

BIN
apps/terminal/terminal.png Normal file

Binary file not shown.

After

(image error) Size: 20 KiB

View file

@ -0,0 +1 @@
0

View file

@ -0,0 +1,22 @@
document.addEventListener('contextmenu', event => event.preventDefault());
$(function() {
// Set the command-line prompt to include the user's IP Address
//$('.prompt').html('[' + codehelper_ip["IP"] + '@HTML5] # ');
$('.prompt').html('[user@DremJS] # ');
// Initialize a new terminal object
var term = new Terminal('#input-line .cmdline', '#container output');
term.init();
// Update the clock every second
setInterval(function() {
function r(cls, deg) {
$('.' + cls).attr('transform', 'rotate('+ deg +' 50 50)')
}
var d = new Date()
r("sec", 6*d.getSeconds())
r("min", 6*d.getMinutes())
r("hour", 30*(d.getHours()%12) + d.getMinutes()/2)
}, 1000);
});

View file

@ -0,0 +1,78 @@
<?php
//header('Content-type: text/plain');
$inputText = $_REQUEST['inputText'];
$skin = $_REQUEST['skin'];
$output = "";
// Getting some information about the string to figure out how to make the
// speech bubble. This is a terrible way of doing it, but that's a problem for
// future Sam (aka years after I forget about making this when it breaks).
if (strlen($inputText) > 39) {
$wrapTextOnceFlag = True;
} else {
$wrapTextOnceFlag = False;
}
if (strlen($inputText) > 78) {
$wrapTextTwiceFlag = True;
} else {
$wrapTextTwiceFlag = False;
}
// Now that we know how to process the speech bubble, we now need to process
// the input string.
if($wrapTextOnceFlag == True) {
$output.=" _________________________________________<br />";
if($wrapTextTwiceFlag == True) {
$textArray = str_split($inputText, 39);
$output.="/ ".$textArray[0]." \<br />";
$counter = 1;
while($counter < sizeof($textArray)-2) {
$output.="| ".$textArray[$counter]." |<br />";
//$output.="Adding line ".$counter." of ".sizeof($textArray)-2."<br /";
$counter++;
}
$output.="\ ".$textArray[sizeof($textArray)-1].str_repeat(' ', 39-strlen($textArray[sizeof($textArray)-1]))." /<br />";
$output.=" -----------------------------------------<br />";
//$output.=$textArray[sizeof($textArray)-1];
} else {
$textArray = str_split($inputText, 39);
$output.="/ ".$textArray[0]." \<br />";
$output.="\ ".$textArray[1].str_repeat(' ', 39-strlen($textArray[1]))." /<br />";
$output.=" -----------------------------------------<br />";
}
} else {
$output.=" _".str_repeat("_", strlen($inputText))."_<br />";
$output.="< ".$inputText." ><br />";
$output.=" -".str_repeat("-", strlen($inputText))."-<br />";
}
if($skin == "tux") {
$output.=" \\ .--.<br />";
$output.=" \\ |_ |<br />";
$output.=" |:_/ |<br />";
$output.=" // \\ \\<br />";
$output.=" (| | )<br />";
$output.=" /'\\_ _/`\\<br />";
$output.=" \\___)=(___/";
/*
\ .--.
\ |_ |
|:_/ |
// \ \
(| | )
/'\_ _/`\
\___)=(___/
*/
} else {
$output.=" \\ ^__^<br />";
$output.=" \\ (oo)\\_______<br />";
$output.=" (__)\\ )\\/\\<br />";
$output.=" ||----w |<br />";
$output.=" || ||";
/*
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
*/
}
echo $output;
?>

View file

@ -0,0 +1,10 @@
<?php
$theme = file_get_contents('../configs/theme.conf');
if($theme == "1") {
file_put_contents('../configs/theme.conf', '0');
} else {
file_put_contents('../configs/theme.conf', '1');
}
?>

Binary file not shown.

After

(image error) Size: 928 KiB

View file

@ -0,0 +1,421 @@
var util = util || {};
var infinateLoopDetect;
var i = 0;
var f = 0;
var moduleTypeFlag = 0;
var cmdString = "";
var modules = [];
var moduleCode = [];
var modInstall;
var firstLine = "";
document.addEventListener('contextmenu', event => event.preventDefault());
util.toArray = function(list) {
return Array.prototype.slice.call(list || [], 0);
};
function show_image(src, width, height, alt) {
var img = document.createElement("img");
img.src = src;
img.width = width;
img.height = height;
img.alt = alt;
// This next line will just add it to the <body> tag
document.body.appendChild(img);
}
var Terminal = Terminal || function(cmdLineContainer, outputContainer) {
window.URL = window.URL || window.webkitURL;
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
var cmdLine_ = document.querySelector(cmdLineContainer);
var output_ = document.querySelector(outputContainer);
cmds = [
'cat', 'clear', 'clock', 'date', 'echo', 'help', 'uname', 'cmd_fm', 'procman', 'insmod', 'rmmod', 'swaptheme', 'cowsay'
];
var fs_ = null;
var cwd_ = null;
var history_ = [];
var histpos_ = 0;
var histtemp_ = 0;
window.addEventListener('click', function(e) {
cmdLine_.focus();
}, false);
cmdLine_.addEventListener('click', inputTextClick_, false);
cmdLine_.addEventListener('keydown', historyHandler_, false);
cmdLine_.addEventListener('keydown', processNewCommand_, false);
//
function inputTextClick_(e) {
this.value = this.value;
}
//
function historyHandler_(e) {
if (history_.length) {
if (e.keyCode == 38 || e.keyCode == 40) {
if (history_[histpos_]) {
history_[histpos_] = this.value;
} else {
histtemp_ = this.value;
}
}
if (e.keyCode == 38) { // up
histpos_--;
if (histpos_ < 0) {
histpos_ = 0;
}
} else if (e.keyCode == 40) { // down
histpos_++;
if (histpos_ > history_.length) {
histpos_ = history_.length;
}
}
if (e.keyCode == 38 || e.keyCode == 40) {
this.value = history_[histpos_] ? history_[histpos_] : histtemp_;
this.value = this.value; // Sets cursor to end of input.
}
}
}
//
function processNewCommand_(e) {
if (e.keyCode == 9) { // tab
e.preventDefault();
// Implement tab suggest.
} else if (e.keyCode == 13) { // enter
// Save shell history.
if (this.value) {
history_[history_.length] = this.value;
histpos_ = history_.length;
}
// Duplicate current input and append to output section.
var line = this.parentNode.parentNode.cloneNode(true);
line.removeAttribute('id')
line.classList.add('line');
var input = line.querySelector('input.cmdline');
input.autofocus = false;
input.readOnly = true;
output_.appendChild(line);
if (this.value && this.value.trim()) {
/*var args = this.value.split(' ').filter(function(val, i) {
return val;
});*/
var args = [].concat.apply([], this.value.split('"').map(function(v,i){
return i%2 ? v : v.split(' ')
})).filter(Boolean);
var cmd = args[0].toLowerCase();
args = args.splice(1); // Remove cmd from arg list.
}
//infinateLoopDetect = setTimeout(function(){ alert("Infinate Loop!"); }, 10000);
switch (cmd) {
case 'cat':
var url = args.join(' ');
if (!url) {
output('Usage: ' + cmd + ' https://s.codepen.io/...');
output('Example: ' + cmd + ' https://s.codepen.io/AndrewBarfield/pen/LEbPJx.js');
break;
}
$.get( url, function(data) {
var encodedStr = data.replace(/[\u00A0-\u9999<>\&]/gim, function(i) {
return '&#'+i.charCodeAt(0)+';';
});
output('<pre>' + encodedStr + '</pre>');
});
break;
case 'clear':
output_.innerHTML = '';
this.value = '';
return;
case 'clock':
var appendDiv = jQuery($('.clock-container')[0].outerHTML);
appendDiv.attr('style', 'display:inline-block');
output_.appendChild(appendDiv[0]);
break;
case 'date':
output( new Date() );
break;
case 'echo':
output( args.join(' ') );
break;
case 'help':
if (!arguments || (args[0] != "modules")) {
cmdString = "";
output('DremJS Terminal Help Menu');
output('All default commands (without modules) for the terminal are as follows:');
for (i = 0; i < cmds.length; i++)
cmdString += cmds[i] + " ";
output(cmdString);
cmdString = "";
output('Module commands:');
for (i = 0; i < modules.length; i++)
cmdString += modules[i] + " ";
output(cmdString);
cmdString = "";
output('For information on Modules, run "help modules"');
} else if (args[0] == "modules") {
output('DremJS Terminal Help Menu - Modules');
output('What are Modules?');
output('Modules are a simple way to temporarily add new functionality to DremJS. Modules have a .djsm (DremJS Module) file extension and contain JavaScript code which can be ran immediately or from a terminal. DremJS Modules can also be installed in batch with a .djsms (DremJS Module Script). These scripts will automatically handle installations of modules that may be too complex to fit into one file and therefor have multiple modules.\n\n');
output('Currently, there are three different types of modules: immediate, terminal, and parentscript. An immediate module does exactly what it says: run the code immediately. A terminal module adds functionality to the terminal, such as a new command. However, terminal modules are not persistent after you close the terminal (yet). A parentscript module adds functionality to the main Agenda WM script.\n\n');
output('The pros and cons of modules');
output('The pros of modules is that you can add new functionality to DremJS or the terminal without having to install an application.');
output('The cons of a module is that, since it adds or runs code on-the-fly to DremJS, they are very insecure. A man-in-the-middle attack or other naughty module can cause your data to be stolen (please never use DremJS with any personal data), DremJS to become unstable, or completely crash. This is why we made it so modules are not permanently installed. If you want code that stays put, it is recommended to use an application.');
}
break;
case 'uname':
output(navigator.appVersion);
break;
/*case 'whoami':
var result = "<img src=\"" + codehelper_ip["Flag"]+ "\"><br><br>";
for (var prop in codehelper_ip)
result += prop + ": " + codehelper_ip[prop] + "<br>";
output(result);
break;*/
case 'cmd_fm':
window.open("https://cmd.to/fm","_self")
break;
case 'spin':
//show_image('spin.gif', 100, 100, 'Spinny');
output('<img align="left" src="' + $('script[src*=terminal]').attr('src').replace('terminal.js', '') +'/spin.gif" width="100" height="100">');
break;
case 'procman':
var arguments = args.join(' ');
if (!arguments || (args[0] != "list" && args[0] != "kill")) {
output('Process Manager (procman) help');
output('procman kill - kill a process');
output('procman list - list all processes');
break;
} else if (args[0] == "list") {
var i = 0;
output('ID\t\tName');
while (i <= 1000) {
if (parent.idExists(i))
output(i + "\t\t" + parent.idExists(i));
i++;
}
break;
} else if (args[0] == "kill") {
if (!args[1]) {
output("fatal: no application ID provided!");
} else if (parent.idExists(args[1])) {
output("Killing application with ID " + args[1]);
parent.closeApplication(args[1])
} else {
output("fatal: application ID " + args[1] + " does not exist.");
}
}
break;
case 'insmod':
i=0;
modInstall="";
firstLine="";
if (!arguments || (args[0] != "remote" && args[0] != "local")) {
output('Install Module (insmod) help');
output('NOTICE: insmod is currently a prototype and is not yet feature-complete or secured at all. NEVER INSTALL A MODULE UNLESS YOU ARE ON YOUR LOCAL NETWORK!');
output('To install a module not inside the DremJS folder (not recommended, insecure):');
output('insmod remote https://example.com/path/to/foo.djsm\n');
output('To install a module inside the DremJS folder');
output('insmod remote http://your.local.ip.address/path/to/foo.djsm');
output('Planned features that aren\'t yet implimented:');
output('Batch installs (DremJS Module Installation Scripts)');
output('Local installations');
//output('insmod local path/to/module.djsm\n');
//output('To run a module installation script for batch installations that is not inside the DremJS folder:');
//output('insmod remote https://example.com/foo.djsms\n');
//output('To run a module installation script that is not inside the DremJS folder:');
//output('insmod local path/to/script.djsms\n');
output('For more information on modules, please run: help modules');
} else if (args[0] == "remote") {
if (args[1] != undefined) {
if ((args[1].substring(args[1].length-5)) == ".djsm") {
output('[insmod] Loading modue at ' + args[1] + '...');
var modInstall;
jQuery.get(args[1], function(data) {
// Welcome to callback hell
modInstall = data;
output('[insmod] Parsing module...');
i=0;
while (modInstall.charAt(i) != ';' && i < 50) {
firstLine += modInstall.charAt(i);
i++;
}
modInstall = modInstall.substring(i+1, modInstall.length);
if (firstLine == "type immediate") {
output('[insmod] module type is immediate');
moduleTypeFlag = 1;
output('[insmod] fatal: module type "immediate" not implimented. Maybe 0.1.6b?');
} else if (firstLine == "type terminal") {
output('[insmod] module type is terminal');
moduleTypeFlag = 2;
firstLine = "";
i=0;
while (modInstall.charAt(i) != ';' && i < 50) {
firstLine += modInstall.charAt(i);
i++;
}
newCmdName = firstLine.substring(6, firstLine.length);
output('[insmod] adding command with name "' + newCmdName + '" to terminal modules list...');
modules.push(newCmdName);
output('[insmod] installing module...');
modInstall = modInstall.substring(3+firstLine.length, modInstall.length);
moduleCode.push(modInstall);
} else if (firstLine == "type parentscript") {
output('[insmod] module type is parentscript');
moduleTypeFlag = 3;
output('[insmod] fatal: module type "parentscript" not implimented. Maybe 0.1.6b?');
} else {
output('[insmod] fatal: the input file is not a DremJS Module or DremJS Module Script');
moduleTypeFlag = 0;
}
/*if (moduleTypeFlag = 1) {
output('[insmod] fatal: not implimented. Maybe 0.1.6b?');
} else if */
});
//output('[insmod] Installing module...');
break;
} else if ((args[1].substring(args[1].length-6)) == ".djsms") {
//output('Running module installation script at ' + args[1] + '...');
output('[insmod] fatal: module installation scripts are not implimented. Maybe 0.1.6b?');
} else {
output('[insmod] fatal: the input file is not a DremJS Module or DremJS Module Script');
break;
}
} else {
output('[insmod] fatal: no input file was provided.');
break;
}
} else if (args[0] == "local") {
output('[insmod] fatal: local installation is not yet implimented. Remote installation can do this. For example: insmod remote http://localhost:8000/modules/foo-0.0.0.djsm');
}
break;
case 'rmmod':
output('[rmmod] fatal: not implimented. Maybe 0.1.6b?');
break;
case 'swaptheme':
$.ajax({
url: 'terminal/scripts/swapTheme.php'
});
output('Theme swapped. Please restart the terminal and refresh it a few times.');
break;
case 'cowsay':
if(args[0] == null) {
output("cowsay [text] &lt;skin&gt;<br />Availible skins:<br />default\t\ttux<br />If no skin is provided or it is invalid, the default is used instead.");
} else {
var oReq = new XMLHttpRequest();
oReq.onload = function() {
output(this.responseText);
};
if(args[1] == null)
args[1] = "cow";
oReq.open("get", "terminal/scripts/cowsay.php?inputText=" + args[0] + "&skin=" + args[1], true);
oReq.send();
}
break;
default:
var notFoundFlag = 1;
if (cmd != undefined) {
// Checks if the default terminal command exists
for (i = 0; i < cmds.length; i++)
if (cmd != cmds[i])
notFoundFlag = 1;
else {
notFoundFlag = 0;
i = cmds.length;
}
// Checks if a module with the command name is installed
for (i = 0; i < modules.length; i++) {
if (cmd != modules[i])
notFoundFlag = 1;
else {
notFoundFlag = 0;
eval(moduleCode[i]);
}
}
} else {
cmd = "";
}
if (notFoundFlag == 1) {
output(cmd + ': command not found');
}
};
window.scrollTo(0, getDocHeight_());
this.value = ''; // Clear/setup line for next input.
}
//clearTimeout(infinateLoopDetect);
}
//
function formatColumns_(entries) {
var maxName = entries[0].name;
util.toArray(entries).forEach(function(entry, i) {
if (entry.name.length > maxName.length) {
maxName = entry.name;
}
});
var height = entries.length <= 3 ?
'height: ' + (entries.length * 15) + 'px;' : '';
// 12px monospace font yields ~7px screen width.
var colWidth = maxName.length * 7;
return ['<div class="ls-files" style="-webkit-column-width:',
colWidth, 'px;', height, '">'];
}
//
function output(html) {
output_.insertAdjacentHTML('beforeEnd', '<p style="white-space:pre;">' + html + '</p>');
}
function sleep(delay) {
var start = new Date().getTime();
while (new Date().getTime() < start + delay);
} // Cyclefucker 1000
function fileToVar(t) {
modInstall = t;
alert(modInstall);
}
// Cross-browser impl to get document's height.
function getDocHeight_() {
var d = document;
return Math.max(
Math.max(d.body.scrollHeight, d.documentElement.scrollHeight),
Math.max(d.body.offsetHeight, d.documentElement.offsetHeight),
Math.max(d.body.clientHeight, d.documentElement.clientHeight)
);
}
//
return {
init: function() {
jQuery.get('terminal/configs/theme.conf', function(data) {
if(data == "1") {
output('<img align="left" src="/assets/media/images/termlogo-lite.png" width="100" height="100" style="padding: 0px 10px 20px 0px"><h2 style="letter-spacing: 4px">DremJS Terminal</h2><p>' + new Date() + '</p><p>Enter "help" for more information.</p>');
} else {
output('<img align="left" src="/assets/media/images/termlogo-dark.png" width="100" height="100" style="padding: 0px 10px 20px 0px"><h2 style="letter-spacing: 4px">DremJS Terminal</h2><p>' + new Date() + '</p><p>Enter "help" for more information.</p>');
}
});
},
output: output
}
};

View file

@ -0,0 +1,47 @@
<html>
<head>
</head>
<body>
<script>
document.addEventListener('contextmenu', event => event.preventDefault());
</script>
<?php
echo "List of availible widgets:<br />";
$widgets = array_filter(glob(getenv('DOCUMENT_ROOT').'/widgets/*'), 'is_dir');
for($i = 0; $i<=sizeof($widgets)-1; $i++) {
$temp = explode("/", $widgets[$i]);
echo $temp[sizeof($temp)-1].' ';
}
echo "<br /><br />Currently enabled widgets:<br />";
$enabledWidgets = explode("\n", file_get_contents(getenv('DOCUMENT_ROOT')."/etc/enabled_widgets"));
for($i = 0; $i<=sizeof($enabledWidgets)-1; $i++)
echo $enabledWidgets[$i].' ';
echo "<br />";
if(array_key_exists('add', $_POST)) {
addWidget();
}
function addWidget() {
$widget = $_REQUEST['widget'];
$widgets = array_filter(glob(getenv('DOCUMENT_ROOT').'/widgets/*'), 'is_dir');
$enabledWidgets = explode("\n", file_get_contents(getenv('DOCUMENT_ROOT')."/etc/enabled_widgets"));
//print($widget.'<br />');
//print_r($widgets);
//print_r($enabledWidgets);
if(in_array(getenv('DOCUMENT_ROOT').'/widgets/'.$widget, $widgets) && !(in_array($widget, $enabledWidgets))) {
$file = fopen(getenv('DOCUMENT_ROOT').'/etc/enabled_widgets', 'a');
fwrite($file, $widget."\n");
fclose($file);
echo "Added ".$widget;
} else {
echo "Can't add widget - it either doesn't exist or is already enabled";
}
}
?>
<form method="post">
<input type="text" name="widget" class="text" />
<input type="submit" name="add" class="button" value="Add Widget" />
</form>
<a href="index.php"><button type=button>Back</button></a>
</body>
</html>

View file

@ -0,0 +1,37 @@
<html>
<head>
</head>
<body>
<script>
document.addEventListener('contextmenu', event => event.preventDefault());
</script>
<?php
echo "List of availible widgets:<br />";
$widgets = array_filter(glob(getenv('DOCUMENT_ROOT').'/widgets/*'), 'is_dir');
for($i = 0; $i<=sizeof($widgets)-1; $i++) {
$temp = explode("/", $widgets[$i]);
echo $temp[sizeof($temp)-1].' ';
}
echo "<br /><br />Currently enabled widgets:<br />";
$enabledWidgets = explode("\n", file_get_contents(getenv('DOCUMENT_ROOT')."/etc/enabled_widgets"));
for($i = 0; $i<=sizeof($enabledWidgets)-1; $i++)
echo $enabledWidgets[$i].' ';
echo "<br />";
if(array_key_exists('add', $_POST)) {
addWidgets();
} else if(array_key_exists('remove', $_POST)) {
removeWidgets();
}
function addWidgets() {
echo "Add";
}
function removeWidgets() {
echo "Remove";
}
?>
<a href="addwidget.php"><button type=button>Add Widget</button></a>
<a href="removewidget.php"><button type=button>Clear Widget List</button></a>
<p>Changes take effect after restart.</p>
</body>
</html>

View file

@ -0,0 +1,6 @@
Name: Widgets Settings
Author: Innovation Science
Width: -1
Height: -1
Icon: widgets-settings.png
Category: /Tools

View file

@ -0,0 +1,4 @@
<?php
header("Location: index.php");
file_put_contents(getenv('DOCUMENT_ROOT').'/etc/enabled_widgets', '');
?>

Binary file not shown.

After

(image error) Size: 6.2 KiB

Binary file not shown.

After

(image error) Size: 118 KiB

Binary file not shown.

After

(image error) Size: 18 KiB

Binary file not shown.

After

(image error) Size: 508 KiB

Binary file not shown.

After

(image error) Size: 998 B

Binary file not shown.

After

(image error) Size: 508 KiB

Binary file not shown.

After

(image error) Size: 508 KiB

Binary file not shown.

Binary file not shown.

0
etc/enabled_widgets Normal file
View file

BIN
favicon.ico Normal file

Binary file not shown.

After

Width: 16px  |  Height: 16px  |  Size: 1.1 KiB

BIN
home/user/Music/song.mp3 Normal file

Binary file not shown.

BIN
home/user/Music/town.mp3 Normal file

Binary file not shown.

499
home/user/index.php Normal file
View file

@ -0,0 +1,499 @@
<?php
/********************************
Simple PHP File Manager
Copyright John Campbell (jcampbell1)
Liscense: MIT
********************************/
// Thanks for providing such a great PHP application!
//Disable error report for undefined superglobals
error_reporting( error_reporting() & ~E_NOTICE );
//Security options
$allow_delete = true; // Set to false to disable delete button and delete POST request.
$allow_upload = true; // Set to true to allow upload files
$allow_create_folder = true; // Set to false to disable folder creation
$allow_direct_link = true; // Set to false to only allow downloads and not direct link
$allow_show_folders = true; // Set to false to hide all subdirectories
$disallowed_patterns = ['*.php']; // must be an array. Matching files not allowed to be uploaded
$hidden_patterns = ['*.php','.*']; // Matching files hidden in directory index
$PASSWORD = ''; // Set the password, to access the file manager... (optional)
if($PASSWORD) {
session_start();
if(!$_SESSION['_sfm_allowed']) {
// sha1, and random bytes to thwart timing attacks. Not meant as secure hashing.
$t = bin2hex(openssl_random_pseudo_bytes(10));
if($_POST['p'] && sha1($t.$_POST['p']) === sha1($t.$PASSWORD)) {
$_SESSION['_sfm_allowed'] = true;
header('Location: ?');
}
echo '<html><body><form action=? method=post>PASSWORD:<input type=password name=p autofocus/></form></body></html>';
exit;
}
}
// must be in UTF-8 or `basename` doesn't work
setlocale(LC_ALL,'en_US.UTF-8');
$tmp_dir = dirname($_SERVER['SCRIPT_FILENAME']);
if(DIRECTORY_SEPARATOR==='\\') $tmp_dir = str_replace('/',DIRECTORY_SEPARATOR,$tmp_dir);
$tmp = get_absolute_path($tmp_dir . '/' .$_REQUEST['file']);
if($tmp === false)
err(404,'File or Directory Not Found');
if(substr($tmp, 0,strlen($tmp_dir)) !== $tmp_dir)
err(403,"Forbidden");
if(strpos($_REQUEST['file'], DIRECTORY_SEPARATOR) === 0)
err(403,"Forbidden");
if(preg_match('@^.+://@',$_REQUEST['file'])) {
err(403,"Forbidden");
}
if(!$_COOKIE['_sfm_xsrf'])
setcookie('_sfm_xsrf',bin2hex(openssl_random_pseudo_bytes(16)));
if($_POST) {
if($_COOKIE['_sfm_xsrf'] !== $_POST['xsrf'] || !$_POST['xsrf'])
err(403,"XSRF Failure");
}
$file = $_REQUEST['file'] ?: '.';
if($_GET['do'] == 'list') {
if (is_dir($file)) {
$directory = $file;
$result = [];
$files = array_diff(scandir($directory), ['.','..']);
foreach ($files as $entry) if (!is_entry_ignored($entry, $allow_show_folders, $hidden_patterns)) {
$i = $directory . '/' . $entry;
$stat = stat($i);
$result[] = [
'mtime' => $stat['mtime'],
'size' => $stat['size'],
'name' => basename($i),
'path' => preg_replace('@^\./@', '', $i),
'is_dir' => is_dir($i),
'is_deleteable' => $allow_delete && ((!is_dir($i) && is_writable($directory)) ||
(is_dir($i) && is_writable($directory) && is_recursively_deleteable($i))),
'is_readable' => is_readable($i),
'is_writable' => is_writable($i),
'is_executable' => is_executable($i),
];
}
usort($result,function($f1,$f2){
$f1_key = ($f1['is_dir']?:2) . $f1['name'];
$f2_key = ($f2['is_dir']?:2) . $f2['name'];
return $f1_key > $f2_key;
});
} else {
err(412,"Not a Directory");
}
echo json_encode(['success' => true, 'is_writable' => is_writable($file), 'results' =>$result]);
exit;
} elseif ($_POST['do'] == 'delete') {
if($allow_delete) {
rmrf($file);
}
exit;
} elseif ($_POST['do'] == 'mkdir' && $allow_create_folder) {
// don't allow actions outside root. we also filter out slashes to catch args like './../outside'
$dir = $_POST['name'];
$dir = str_replace('/', '', $dir);
if(substr($dir, 0, 2) === '..')
exit;
chdir($file);
@mkdir($_POST['name']);
exit;
} elseif ($_POST['do'] == 'upload' && $allow_upload) {
foreach($disallowed_patterns as $pattern)
if(fnmatch($pattern, $_FILES['file_data']['name']))
err(403,"Files of this type are not allowed.");
$res = move_uploaded_file($_FILES['file_data']['tmp_name'], $file.'/'.$_FILES['file_data']['name']);
exit;
} elseif ($_GET['do'] == 'download') {
foreach($disallowed_patterns as $pattern)
if(fnmatch($pattern, $file))
err(403,"Files of this type are not allowed.");
$filename = basename($file);
$finfo = finfo_open(FILEINFO_MIME_TYPE);
header('Content-Type: ' . finfo_file($finfo, $file));
header('Content-Length: '. filesize($file));
header(sprintf('Content-Disposition: attachment; filename=%s',
strpos('MSIE',$_SERVER['HTTP_REFERER']) ? rawurlencode($filename) : "\"$filename\"" ));
ob_flush();
readfile($file);
exit;
}
function is_entry_ignored($entry, $allow_show_folders, $hidden_patterns) {
if ($entry === basename(__FILE__)) {
return true;
}
if (is_dir($entry) && !$allow_show_folders) {
return true;
}
foreach($hidden_patterns as $pattern) {
if(fnmatch($pattern,$entry)) {
return true;
}
}
return false;
}
function rmrf($dir) {
if(is_dir($dir)) {
$files = array_diff(scandir($dir), ['.','..']);
foreach ($files as $file)
rmrf("$dir/$file");
rmdir($dir);
} else {
unlink($dir);
}
}
function is_recursively_deleteable($d) {
$stack = [$d];
while($dir = array_pop($stack)) {
if(!is_readable($dir) || !is_writable($dir))
return false;
$files = array_diff(scandir($dir), ['.','..']);
foreach($files as $file) if(is_dir($file)) {
$stack[] = "$dir/$file";
}
}
return true;
}
// from: http://php.net/manual/en/function.realpath.php#84012
function get_absolute_path($path) {
$path = str_replace(['/', '\\'], DIRECTORY_SEPARATOR, $path);
$parts = explode(DIRECTORY_SEPARATOR, $path);
$absolutes = [];
foreach ($parts as $part) {
if ('.' == $part) continue;
if ('..' == $part) {
array_pop($absolutes);
} else {
$absolutes[] = $part;
}
}
return implode(DIRECTORY_SEPARATOR, $absolutes);
}
function err($code,$msg) {
http_response_code($code);
header("Content-Type: application/json");
echo json_encode(['error' => ['code'=>intval($code), 'msg' => $msg]]);
exit;
}
function asBytes($ini_v) {
$ini_v = trim($ini_v);
$s = ['g'=> 1<<30, 'm' => 1<<20, 'k' => 1<<10];
return intval($ini_v) * ($s[strtolower(substr($ini_v,-1))] ?: 1);
}
$MAX_UPLOAD_SIZE = min(asBytes(ini_get('post_max_size')), asBytes(ini_get('upload_max_filesize')));
?>
<!DOCTYPE html>
<html><head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<style>
body {font-family: "lucida grande","Segoe UI",Arial, sans-serif; font-size: 14px;width:1024;padding:1em;margin:0;}
th {font-weight: normal; color: #1F75CC; background-color: #F0F9FF; padding:.5em 1em .5em .2em;
text-align: left;cursor:pointer;user-select: none;}
th .indicator {margin-left: 6px }
thead {border-top: 1px solid #82CFFA; border-bottom: 1px solid #96C4EA;border-left: 1px solid #E7F2FB;
border-right: 1px solid #E7F2FB; }
#top {height:52px;}
#mkdir {display:inline-block;float:right;padding-top:16px;}
label { display:block; font-size:11px; color:#555;}
#file_drop_target {width:500px; padding:12px 0; border: 4px dashed #ccc;font-size:12px;color:#ccc;
text-align: center;float:right;margin-right:20px;}
#file_drop_target.drag_over {border: 4px dashed #96C4EA; color: #96C4EA;}
#upload_progress {padding: 4px 0;}
#upload_progress .error {color:#a00;}
#upload_progress > div { padding:3px 0;}
.no_write #mkdir, .no_write #file_drop_target {display: none}
.progress_track {display:inline-block;width:200px;height:10px;border:1px solid #333;margin: 0 4px 0 10px;}
.progress {background-color: #82CFFA;height:10px; }
footer {font-size:11px; color:#bbbbc5; padding:4em 0 0;text-align: left;}
footer a, footer a:visited {color:#bbbbc5;}
#breadcrumb { padding-top:34px; font-size:15px; color:#aaa;display:inline-block;float:left;}
#folder_actions {width: 50%;float:right;}
a, a:visited { color:#00c; text-decoration: none}
a:hover {text-decoration: underline}
.sort_hide{ display:none;}
table {border-collapse: collapse;width:100%;}
thead {max-width: 1024px}
td { padding:.2em 1em .2em .2em; border-bottom:1px solid #def;height:30px; font-size:12px;white-space: nowrap;}
td.first {font-size:14px;white-space: normal;}
td.empty { color:#777; font-style: italic; text-align: center;padding:3em 0;}
.is_dir .size {color:transparent;font-size:0;}
.is_dir .size:before {content: "--"; font-size:14px;color:#333;}
.is_dir .download{visibility: hidden}
a.delete {display:inline-block;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADtSURBVHjajFC7DkFREJy9iXg0t+EHRKJDJSqRuIVaJT7AF+jR+xuNRiJyS8WlRaHWeOU+kBy7eyKhs8lkJrOzZ3OWzMAD15gxYhB+yzAm0ndez+eYMYLngdkIf2vpSYbCfsNkOx07n8kgWa1UpptNII5VR/M56Nyt6Qq33bbhQsHy6aR0WSyEyEmiCG6vR2ffB65X4HCwYC2e9CTjJGGok4/7Hcjl+ImLBWv1uCRDu3peV5eGQ2C5/P1zq4X9dGpXP+LYhmYz4HbDMQgUosWTnmQoKKf0htVKBZvtFsx6S9bm48ktaV3EXwd/CzAAVjt+gHT5me0AAAAASUVORK5CYII=) no-repeat scroll 0 2px;
color:#d00; margin-left: 15px;font-size:11px;padding:0 0 0 13px;
}
.name {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABAklEQVRIie2UMW6DMBSG/4cYkJClIhauwMgx8CnSC9EjJKcwd2HGYmAwEoMREtClEJxYakmcoWq/yX623veebZmWZcFKWZbXyTHeOeeXfWDN69/uzPP8x1mVUmiaBlLKsxACAC6cc2OPd7zYK1EUYRgGZFkG3/fPAE5fIjcCAJimCXEcGxKnAiICERkSIcQmeVoQhiHatoWUEkopJEkCAB/r+t0lHyVN023c9z201qiq6s2ZYA9jDIwx1HW9xZ4+Ihta69cK9vwLvsX6ivYf4FGIyJj/rg5uqwccd2Ar7OUdOL/kPyKY5/mhZJ53/2asgiAIHhLYMARd16EoCozj6EzwCYrrX5dC9FQIAAAAAElFTkSuQmCC) no-repeat scroll 0px 12px;
padding:15px 0 10px 40px;
}
.is_dir .name {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI0SURBVFiF7Vctb1RRED1nZu5977VQVBEQBKZ1GCDBEwy+ISgCBsMPwOH4CUXgsKQOAxq5CaKChEBqShNK222327f79n0MgpRQ2qC2twKOGjE352TO3Jl76e44S8iZsgOww+Dhi/V3nePOsQRFv679/qsnV96ehgAeWvBged3vXi+OJewMW/Q+T8YCLr18fPnNqQq4fS0/MWlQdviwVqNpp9Mvs7l8Wn50aRH4zQIAqOruxANZAG4thKmQA8D7j5OFw/iIgLXvo6mR/B36K+LNp71vVd1cTMR8BFmwTesc88/uLQ5FKO4+k4aarbuPnq98mbdo2q70hmU0VREkEeCOtqrbMprmFqM1psoYAsg0U9EBtB0YozUWzWpVZQgBxMm3YPoCiLpxRrPaYrBKRSUL5qn2AgFU0koMVlkMOo6G2SIymQCAGE/AGHRsWbCRKc8VmaBN4wBIwkZkFmxkWZDSFCwyommZSABgCmZBSsuiHahA8kA2iZYzSapAsmgHlgfdVyGLTFg3iZqQhAqZB923GGUgQhYRVElmAUXIGGVgedQ9AJJnAkqyClCEkkfdM1Pt13VHdxDpnof0jgxB+mYqO5PaCSDRIAbgDgdpKjtmwm13irsnq4ATdKeYcNvUZAt0dg5NVwEQFKrJlpn45lwh/LpbWdela4K5QsXEN61tytWr81l5YSY/n4wdQH84qjd2J6vEz+W0BOAGgLlE/AMAPQCv6e4gmWYC/QF3d/7zf8P/An4AWL/T1+B2nyIAAAAASUVORK5CYII=) no-repeat scroll 0px 10px;
padding:15px 0 10px 40px;
}
.download {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB2klEQVR4nJ2ST2sTQRiHn5mdmj92t9XmUJIWJGq9NHrRgxQiCtqbl97FqxgaL34CP0FD8Qv07EHEU0Ew6EXEk6ci8Q9JtcXEkHR3k+zujIdUqMkmiANzmJdnHn7vzCuIWbe291tSkvhz1pr+q1L2bBwrRgvFrcZKKinfP9zI2EoKmm7Azstf3V7fXK2Wc3ujvIqzAhglwRJoS2ImQZMEBjgyoDS4hv8QGHA1WICvp9yelsA7ITBTIkwWhGBZ0Iv+MUF+c/cB8PTHt08snb+AGAACZDj8qIN6bSe/uWsBb2qV24/GBLn8yl0plY9AJ9NKeL5ICyEIQkkiZenF5XwBDAZzWItLIIR6LGfk26VVxzltJ2gFw2a0FmQLZ+bcbo/DPbcd+PrDyRb+GqRipbGlZtX92UvzjmUpEGC0JgpC3M9dL+qGz16XsvcmCgCK2/vPtTNzJ1x2kkZIRBSivh8Z2Q4+VkvZy6O8HHvWyGyITvA1qndNpxfguQNkc2CIzM0xNk5QLedCEZm1VKsf2XrAXMNrA2vVcq4ZJ4DhvCSAeSALXASuLBTW129U6oPrT969AK4Bq0AeWARs4BRgieMUEkgDmeO9ANipzDnH//nFB0KgAxwATaAFeID5DQNatLGdaXOWAAAAAElFTkSuQmCC) no-repeat scroll 0px 5px;
padding:4px 0 4px 20px;
}
</style>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script>
(function($){
$.fn.tablesorter = function() {
var $table = this;
this.find('th').click(function() {
var idx = $(this).index();
var direction = $(this).hasClass('sort_asc');
$table.tablesortby(idx,direction);
});
return this;
};
$.fn.tablesortby = function(idx,direction) {
var $rows = this.find('tbody tr');
function elementToVal(a) {
var $a_elem = $(a).find('td:nth-child('+(idx+1)+')');
var a_val = $a_elem.attr('data-sort') || $a_elem.text();
return (a_val == parseInt(a_val) ? parseInt(a_val) : a_val);
}
$rows.sort(function(a,b){
var a_val = elementToVal(a), b_val = elementToVal(b);
return (a_val > b_val ? 1 : (a_val == b_val ? 0 : -1)) * (direction ? 1 : -1);
})
this.find('th').removeClass('sort_asc sort_desc');
$(this).find('thead th:nth-child('+(idx+1)+')').addClass(direction ? 'sort_desc' : 'sort_asc');
for(var i =0;i<$rows.length;i++)
this.append($rows[i]);
this.settablesortmarkers();
return this;
}
$.fn.retablesort = function() {
var $e = this.find('thead th.sort_asc, thead th.sort_desc');
if($e.length)
this.tablesortby($e.index(), $e.hasClass('sort_desc') );
return this;
}
$.fn.settablesortmarkers = function() {
this.find('thead th span.indicator').remove();
this.find('thead th.sort_asc').append('<span class="indicator">&darr;<span>');
this.find('thead th.sort_desc').append('<span class="indicator">&uarr;<span>');
return this;
}
})(jQuery);
$(function(){
var XSRF = (document.cookie.match('(^|; )_sfm_xsrf=([^;]*)')||0)[2];
var MAX_UPLOAD_SIZE = <?php echo $MAX_UPLOAD_SIZE ?>;
var $tbody = $('#list');
$(window).on('hashchange',list).trigger('hashchange');
$('#table').tablesorter();
$('#table').on('click','.delete',function(data) {
$.post("",{'do':'delete',file:$(this).attr('data-file'),xsrf:XSRF},function(response){
list();
},'json');
return false;
});
$('#mkdir').submit(function(e) {
var hashval = decodeURIComponent(window.location.hash.substr(1)),
$dir = $(this).find('[name=name]');
e.preventDefault();
$dir.val().length && $.post('?',{'do':'mkdir',name:$dir.val(),xsrf:XSRF,file:hashval},function(data){
list();
},'json');
$dir.val('');
return false;
});
<?php if($allow_upload): ?>
// file upload stuff
$('#file_drop_target').on('dragover',function(){
$(this).addClass('drag_over');
return false;
}).on('dragend',function(){
$(this).removeClass('drag_over');
return false;
}).on('drop',function(e){
e.preventDefault();
var files = e.originalEvent.dataTransfer.files;
$.each(files,function(k,file) {
uploadFile(file);
});
$(this).removeClass('drag_over');
});
$('input[type=file]').change(function(e) {
e.preventDefault();
$.each(this.files,function(k,file) {
uploadFile(file);
});
});
function uploadFile(file) {
var folder = decodeURIComponent(window.location.hash.substr(1));
if(file.size > MAX_UPLOAD_SIZE) {
var $error_row = renderFileSizeErrorRow(file,folder);
$('#upload_progress').append($error_row);
window.setTimeout(function(){$error_row.fadeOut();},5000);
return false;
}
var $row = renderFileUploadRow(file,folder);
$('#upload_progress').append($row);
var fd = new FormData();
fd.append('file_data',file);
fd.append('file',folder);
fd.append('xsrf',XSRF);
fd.append('do','upload');
var xhr = new XMLHttpRequest();
xhr.open('POST', '?');
xhr.onload = function() {
$row.remove();
list();
};
xhr.upload.onprogress = function(e){
if(e.lengthComputable) {
$row.find('.progress').css('width',(e.loaded/e.total*100 | 0)+'%' );
}
};
xhr.send(fd);
}
function renderFileUploadRow(file,folder) {
return $row = $('<div/>')
.append( $('<span class="fileuploadname" />').text( (folder ? folder+'/':'')+file.name))
.append( $('<div class="progress_track"><div class="progress"></div></div>') )
.append( $('<span class="size" />').text(formatFileSize(file.size)) )
};
function renderFileSizeErrorRow(file,folder) {
return $row = $('<div class="error" />')
.append( $('<span class="fileuploadname" />').text( 'Error: ' + (folder ? folder+'/':'')+file.name))
.append( $('<span/>').html(' file size - <b>' + formatFileSize(file.size) + '</b>'
+' exceeds max upload size of <b>' + formatFileSize(MAX_UPLOAD_SIZE) + '</b>') );
}
<?php endif; ?>
function list() {
var hashval = window.location.hash.substr(1);
$.get('?do=list&file='+ hashval,function(data) {
$tbody.empty();
$('#breadcrumb').empty().html(renderBreadcrumbs(hashval));
if(data.success) {
$.each(data.results,function(k,v){
$tbody.append(renderFileRow(v));
});
!data.results.length && $tbody.append('<tr><td class="empty" colspan=5>This folder is empty</td></tr>')
data.is_writable ? $('body').removeClass('no_write') : $('body').addClass('no_write');
} else {
console.warn(data.error.msg);
}
$('#table').retablesort();
},'json');
}
function renderFileRow(data) {
var $link = $('<a class="name" />')
.attr('href', data.is_dir ? '#' + encodeURIComponent(data.path) : './' + data.path)
.text(data.name);
var allow_direct_link = <?php echo $allow_direct_link?'true':'false'; ?>;
if (!data.is_dir && !allow_direct_link) $link.css('pointer-events','none');
var $dl_link = $('<a/>').attr('href','?do=download&file='+ encodeURIComponent(data.path))
.addClass('download').text('download');
var $delete_link = $('<a href="#" />').attr('data-file',data.path).addClass('delete').text('delete');
var perms = [];
if(data.is_readable) perms.push('read');
if(data.is_writable) perms.push('write');
if(data.is_executable) perms.push('exec');
var $html = $('<tr />')
.addClass(data.is_dir ? 'is_dir' : '')
.append( $('<td class="first" />').append($link) )
.append( $('<td/>').attr('data-sort',data.is_dir ? -1 : data.size)
.html($('<span class="size" />').text(formatFileSize(data.size))) )
.append( $('<td/>').attr('data-sort',data.mtime).text(formatTimestamp(data.mtime)) )
.append( $('<td/>').text(perms.join('+')) )
.append( $('<td/>').append($dl_link).append( data.is_deleteable ? $delete_link : '') )
return $html;
}
function renderBreadcrumbs(path) {
var base = "",
$html = $('<div/>').append( $('<a href=#>Home</a></div>') );
$.each(path.split('%2F'),function(k,v){
if(v) {
var v_as_text = decodeURIComponent(v);
$html.append( $('<span/>').text(' ▸ ') )
.append( $('<a/>').attr('href','#'+base+v).text(v_as_text) );
base += v + '%2F';
}
});
return $html;
}
function formatTimestamp(unix_timestamp) {
var m = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var d = new Date(unix_timestamp*1000);
return [m[d.getMonth()],' ',d.getDate(),', ',d.getFullYear()," ",
(d.getHours() % 12 || 12),":",(d.getMinutes() < 10 ? '0' : '')+d.getMinutes(),
" ",d.getHours() >= 12 ? 'PM' : 'AM'].join('');
}
function formatFileSize(bytes) {
var s = ['bytes', 'KB','MB','GB','TB','PB','EB'];
for(var pos = 0;bytes >= 1000; pos++,bytes /= 1024);
var d = Math.round(bytes*10);
return pos ? [parseInt(d/10),".",d%10," ",s[pos]].join('') : bytes + ' bytes';
}
})
</script>
</head><body>
<script>
document.addEventListener('contextmenu', event => event.preventDefault());
</script>
<div id="top">
<?php if($allow_create_folder): ?>
<form action="?" method="post" id="mkdir" />
<label for=dirname>Create New Folder</label><input id=dirname type=text name=name value="" />
<input type="submit" value="create" />
</form>
<?php endif; ?>
<?php if($allow_upload): ?>
<div id="file_drop_target">
Drag Files Here To Upload
<b>or</b>
<input type="file" multiple />
</div>
<?php endif; ?>
<div id="breadcrumb">&nbsp;</div>
</div>
<div id="upload_progress"></div>
<table id="table"><thead><tr>
<th>Name</th>
<th>Size</th>
<th>Modified</th>
<th>Permissions</th>
<th>Actions</th>
</tr></thead><tbody id="list">
</tbody></table>
<footer><a href="/rootfb.php">Index of <?php echo preg_replace('/^' . preg_quote($_SERVER['DOCUMENT_ROOT'], '/') . '/', '', __DIR__); ?> | Press to unlock root on this browser</a></footer>
</body></html>

View file

@ -1 +0,0 @@

416
index.php Normal file
View file

@ -0,0 +1,416 @@
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<script src="/js/jquery.ui.touch-punch.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/themes/base/jquery-ui.css"/>
<!-- classes were from SparrOS Developer Team -->
<title>DremJS</title>
<style>
.framewrap {
width:500px;
height:300px;
padding:10px;
position: fixed;
top: 50px;
left: 10px;
background-color:#87CEEB;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}
.framewrapMobile {
width:100%;
height:100%;
/*padding:10px;*/
position: fixed;
top: 50px;
left: 0px;
background-color:#87CEEB;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}
.appFrame {
width:99%;
height:93%;
background-color:#FFFFFF;
}
.appFrameMobile {
width:99%;
height:99%;
background-color:#FFFFFF;
}
.cwhite {
color: white;
}
.br1 {
position: absolute;
bottom: 8px;
right: 16px;
font-size: 12px;
}
.br2 {
position: absolute;
bottom: 22px;
right: 16px;
font-size: 12px;
}
.br3 {
position: absolute;
bottom: 36px;
right: 16px;
font-size: 12px;
}
html {
background: url(DremJS-Background.png) no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
body {
font-family: Calibri;
margin:0px;
}
a:link {
color: black;
text-decoration: none;
}
a:visited {
color: black;
text-decoration: none;
}
.cent {
position: relative;
top: 4px;
}
.taskbar {
background-color: black;
position: absolute;
top: 0;
right: 0;
width: 100%;
/*z-index: 20000;*/
}
.taskbarTime {
height: 42px;
float: left;
}
.taskbarApps {
text-align: center;
float: left;
margin-left: 5px;
padding: 2px;
border-radius: 6px;
//border: 2px solid #FFFFFF;
}
.taskbarAppOpen {
border: 2px solid #FFFFFF;
//border-style: solid;
//border-color: white;
//border-width: 2px;
//background-color: white;
//border: 2px solid #FFFFFF;
}
.startbtn {
background-color: transparent;
color: black;
padding: 8px; // Bad way of doing this but that's a problem for future Sam
font-size: 16px;
border: none;
z-index: 30000;
}
.start-content {
display: none;
position: absolute;
right:0px;
background-color: #f9f9f9;
min-width: 200px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
padding: 12px 16px;
z-index: 30000;
}
.start {
position: absolute;
display: inline-block;
top:0px;
right:0px;
z-index:30000;
}
.start-content a:hover {background-color: #ccc}
.start:hover .start-content {
display: block;
}
.start:hover .startbtn {
background-color: gray;
}
#context-menu {
position:fixed;
z-index:30000;
width:150px;
background:#1b1a1a;
/*border-radius:5px;*/
transform:scale(0);
transform-origin:top left;
}
#context-menu.active {
transform:scale(1);
transition:transform 300ms ease-in-out;
}
#context-menu .item {
padding:8px 10px;
font-size:15px;
color:#eee;
}
#context-menu .item:hover {
background:#555;
}
#context-menu .item i {
display:inline-block;
margin-right:5px;
}
#context-menu hr {
margin:2px 0px;
border-color:#555;
}
</style>
</head>
<body onload="initAgendaWM(); touchstart();">
<div id="main" tabindex="-1">
<p class="cwhite br2">DremJS Version 0.1.7b</p>
<p class="cwhite br1">&copy; Innovation Inc.</p>
<div id="context-menu">
</div>
<div class="start">
<button class="startbtn"><img src="/assets/media/images/logo.png" style="width:24px;height24px;"></button>
<div class="start-content">
<a onclick="openApplication('about', 800, 500, 'about.png')"><p><img src="apps/about/about.png" align="top"> About DremJS</p></a>
<a onclick="openApplication('howto', 800, 500, 'howto.png')"><p><img src="apps/howto/howto.png" align="top"> How to Install Applications</p></a>
<a onclick="openApplication('market', 'max', 'max', 'market.png')"><p><img src="apps/market/market.png" align="top"> DremJS Market</p></a>
<a onclick="openApplication('debug', 700, 450, 'debug.png')"><p><img src="apps/debug/debug.png" align="top"> Report a Bug</p></a>
<a onclick="openApplication('FileManager', 700, 450, 'filemanager.png')"><p><img src="apps/FileManager/filemanager.png" align="top" width="16" height="16"> File Manager</p></a>
<a onclick="openApplication('Cinema', 700, 450, 'cinema.png')"><p><img src="apps/Cinema/cinema.png" align="top" width="16" height="16"> Cinema</p></a>
<a onclick="openApplication('Notepad', 700, 450, 'notepad.png')"><p><img src="apps/Notepad/notepad.png" align="top" width="16" height="16"> Notepad</p></a>
<a onclick="openApplication('terminal', 700, 450, 'terminal.png')"><p><img src="apps/terminal/terminal.png" align="top" width="16" height="16"> Terminal</p></a>
<a onclick="openApplication('serverstatus', '300', '300', 'serverstatus.png')"><p><img src="apps/serverstatus/serverstatus.png" align="top" style="width:16px;height:16px;"> Server Status</p></a>
<a onclick="openApplication('widgets-settings', -1, -1, 'widgets-settings.png')"><p><img src="apps/widgets-settings/widgets-settings.png" align="top" style="width:16px;height:16px"> Widgets Settings</p></a>
<hr />
<a target="_top" href="shuttingdown.html"><p><img src="/assets/media/images/shutdown.png" align="top" style="width:16px;height:16px;"> Shutdown DremJS</p></a>
</div>
</div>
<div id="appContainer">
<!-- This is the taskbar -->
<div id="taskbar" class="taskbar">
<div id="taskbarTime" class="taskbarTime">
<!-- Add apps here -->
<div class="cwhite" style="text-align:left" id="txt"></div> <a onclick="openApplication('about', 800, 500, 'about.png')"><img src="apps/about/about.png"> |</a>
</div>
<div id="taskbarApps">
</div>
</div>
</div>
</div>
<script src="/js/agenda/mobile-detect.js"></script>
<script src="/js/agenda/agenda-wm.js"></script>
<script>
var counter;
var pressHoldDuration = 50;
var pressHoldEvent = new CustomEvent("pressHold");
var timerID;
//var currentSelectedTaskbarApp = "";
var allowContextMenuFlag = true;
var firstTouchFlag = false;
$("#context-menu").hover(function() {
allowContextMenuFlag = false;
}, function() {
allowContextMenuFlag = true;
})
window.addEventListener("contextmenu",function(event){
event.preventDefault();
});
window.onmousedown = function(eventData) {
if (eventData.button === 2) {
showContextMenu();
}
}
window.addEventListener("click",function(){
closeContextMenu();
});
function showContextMenu(appid) {
if(allowContextMenuFlag == false) { return; }
// Base context menu
var contextMenuItems = '<!-- DremJS Global Functions -->'
/*<div onclick="" class="item">\
<i class="fa"></i> Item\
</div>*/
if(!detector.mobile()) {
contextMenuItems+='<div onclick="minimizeAllApplications();" class="item">\
<i class="fa"></i> Show Desktop\
</div>'
}
contextMenuItems+='</hr>\
<!-- Application-Specific Functions -->\
\
'
if(GetCurrentTaskbarApp() != "") {
contextMenuItems+='<div onclick="closeApplication(' + GetCurrentTaskbarApp() + ')" class="item">\
<i class="fa"></i> Close Application\
</div>';
} else if($(":focus").attr('class') == "taskbarApps") {
contextMenuItems+='<div onclick="closeApplication(' + $(":focus").attr('id').substr(4, $(":focus").attr('id').length) + ')" class="item">\
<i class="fa"></i> Close Application\
</div>';
}
SetCurrentTaskbarApp("");
// Grab 2D array of elements and corresponding JavaScript functions (should be JSON but I don't know how to JSON)
var failedFlag = false;
//if(appid) {
id=appid;
//} else {
// var id=$(':focus').attr('id');
//}
try {
var applicationFunctions = document.getElementById(id).contentWindow.GetDremJSMenuFunctions();
} catch(e) {
//console.log("An error occured trying to get custom context menu functions from the application. This probably means the application hasn't been updated for modern versions of DremJS. No custom context menu items will be displayed.")
//console.log(e);
failedFlag = true;
}
if (failedFlag == false) {
contextMenuItems+="<hr />"
for(i=0; i<applicationFunctions.length; i++) {
if(applicationFunctions[i][0] == "<hr />")
contextMenuItems+="<hr />";
else
contextMenuItems+="<div class='item' onclick=\"document.getElementById('" + id + "').contentWindow." + applicationFunctions[i][1] + "\">\n\t<i class='fa'></i> " + applicationFunctions[i][0] +"\n</div>";
}
//console.log(contextMenuItems);
}
//console.log(contextMenuItems);
var contextElement = document.getElementById("context-menu");
contextElement.innerHTML = '';
contextElement.insertAdjacentHTML('beforeend', contextMenuItems);
//posX = event.clientX;
//posY = event.clientY;
if(!(detector.mobile())) {
posX = event.clientX;
posY = event.clientY;
if(appid || (document.getElementById(id) && document.getElementById(id).tagName == "IFRAME")) {
posX = document.getElementById(id).getBoundingClientRect().left + posX;
posY = document.getElementById(id).getBoundingClientRect().top + posY;
}
contextElement.style.top = posY + "px";
contextElement.style.left = posX + "px";
} else {
// This is what we in the business call a bodge
if(appid) {
contextElement.style.top = document.getElementById(id).getBoundingClientRect().top + "px";
contextElement.style.left = document.getElementById(id).getBoundingClientRect().left + "px";
} else {
contextElement.style.top = clientY + "px";
contextElement.style.left = clientX + "px";
}
}
setTimeout(function() { contextElement.classList.add("active"); }, 10);
}
function closeContextMenu() {
document.getElementById("context-menu").classList.remove("active");
}
function canAccessIFrame(iframe) {
var html = null;
try {
var doc = iframe.contentDocument || iframe.contentWindow.document;
html = doc.body.innerHTML;
} catch(err){
return false;
}
return true;
}
var monitor = setInterval(function(){
//var elem = document.activeElement;
var elem = $(':focus');
if(elem && $(elem).prop("tagName") == 'IFRAME' && canAccessIFrame(elem.get(0))){
elem.contents().find("body").mousedown(function(event) {
switch (event.which) {
case 1:
//console.log('Left mouse button pressed - ' + elem.attr('name'));
closeContextMenu();
break;
case 2:
//console.log('Middle mouse button pressed');
break;
case 3:
//console.log('Right mouse button pressed - ' + elem.attr('id'));
showContextMenu(elem.attr('id'));
break;
default:
console.log('You have a strange mouse');
break;
}
});
}
}, 100);
var clientX;
var clientY;
var startX;
var startY;
var currentX;
var currentY;
var onlongtouch;
var timer;
var touchduration = 800; //length of time we want the user to touch before we do something
window.addEventListener('touchstart', function(e) {
clientX = e.touches[0].clientX;
clientY = e.touches[0].clientY;
currentX = clientX;
currentY = clientY;
//DelayBeforeContextMenu = setTimeout(showContextMenu(), touchduration);
});
function touchstart(e) {
//e.preventDefault();
startX = clientX;
startY = clientY;
if (!timer) {
timer = setTimeout(onlongtouch, touchduration);
}
}
function touchend() {
//stops short touches from firing the event
if (timer) {
clearTimeout(timer);
timer = null;
}
}
onlongtouch = function() {
timer = null;
if(firstTouchFlag && Math.abs(startX - currentX) < 50 && Math.abs(startY - currentY) < 50) {
showContextMenu();
} else {
firstTouchFlag=true;
}
};
function updateXY(e) {
currentX = e.touches[0].clientX;
currentY = e.touches[0].clientY;
}
document.addEventListener("DOMContentLoaded", function(event) {
window.addEventListener("touchstart", touchstart, false);
window.addEventListener("touchend", touchend, false);
window.addEventListener("touchmove", updateXY, true);
});
</script>
</body>
</html>

274
js/agenda/agenda-wm.js Normal file
View file

@ -0,0 +1,274 @@
/*
* _____/\\\\\\\\\______________________________________________________/\\\_________________
* ___/\\\\\\\\\\\\\___________________________________________________\/\\\_________________
* __/\\\/////////\\\___/\\\\\\\\______________________________________\/\\\_________________
* _\/\\\_______\/\\\__/\\\////\\\_____/\\\\\\\\___/\\/\\\\\\__________\/\\\___/\\\\\\\\\____
* _\/\\\\\\\\\\\\\\\_\//\\\\\\\\\___/\\\/////\\\_\/\\\////\\\____/\\\\\\\\\__\////////\\\___
* _\/\\\/////////\\\__\///////\\\__/\\\\\\\\\\\__\/\\\__\//\\\__/\\\////\\\____/\\\\\\\\\\__
* _\/\\\_______\/\\\__/\\_____\\\_\//\\///////___\/\\\___\/\\\_\/\\\__\/\\\___/\\\/////\\\__
* _\/\\\_______\/\\\_\//\\\\\\\\___\//\\\\\\\\\\_\/\\\___\/\\\_\//\\\\\\\/\\_\//\\\\\\\\/\\_
* _\///________\///___\////////_____\//////////__\///____\///___\///////\//___\////////\//__
* "So, what's on the agenda?"
* (C) Innovation Inc. 2020
*/
var detector = new MobileDetect(window.navigator.userAgent)
var highestId = 0;
var CurrentTaskbarApp = "";
function initAgendaWM() {
//var detector = new MobileDetect(window.navigator.userAgent)
if(!(detector.mobile())) {
console.log("Initializing Agenda WM");
startTime();
console.log("Starting widgets");
startWidgets();
makeDraggable();
console.log("Agenda WM Initialized");
} else {
initAgendaMobile();
}
} // Initialize Agenda
// Desktop version of Agenda
function makeDraggable() {
$(".framewrap")
.draggable()
.resizable();
} // Makes all applications with the framewrap class draggable. Has to be ran every time applications are launched or things get sticky.
/*function moveToFront(app) {
var application = document.getElementById(app);
if(openflag==true)
application.style.display = "block";
openflag = true;
$('.framewrap').css('z-index', 1);
$('#' + app).css('z-index', 9999);
console.log("Move to front");
} // Move a clicked application to the front*/
function moveToFront(app) {
$('.framewrap').css('z-index', 1);
$('.framewrapMobile').css('z-index', 1);
$('#' + app).css('z-index', 9999);
} // Move a clicked application to the front
function openApplication(app, width, height, appIcon, filename) {
// Set width and height as default if one is <=-1
if (width <= -1 || height <= -1 || width == undefined || height == undefined) {
width="500";
height="300";
}
if (filename == undefined) {
file = "";
} else {
file = filename;
}
var i = 0;
// Get the first available application ID.
while ($('#' + i).length)
i++;
/*
This is just the following as a string:
<div onclick=moveToFront('[windowID]') id='[windowID]' class='framewrap' style='width:[width]px; height=[height]px'>
<input type='button' onclick="closeApplication('[windowID]')" value='X' />
<input type='button' onclick="maximizeApplication('[windowID]')" value='\u25A1' />
<input type='button' onclick="minimizeApplication('[windowID]')" value='_' />
<iframe class='appFrame' src='apps/[application name]'></iframe>
</div>
[windowID] is replaced with i (defined above)
[application name] is replaced with parameter "app" (used to determine the application name to open).
The app parameter points to a subdirectory called apps. This means if you were to run openApplication(foo), it will attempt to open an
Application stored at apps/foo/
Quite frustrating to work with, but it works. I'll make it fancier later, but right now it is good enough.
*/
//var application="<div onclick=\"moveToFront('" + i + "')\" name='" + app + "' id='" + i + "' class='framewrap' style='width:" + width + "px; height:" + height + "px'><td nowrap><input type='button' onclick=\"closeApplication('" + i + "')\" value='X' /><input type='button' onclick=\"maximizeApplication('" + i + "')\" value='\u25A1' /><input type='button' onclick=\"minimizeApplication('" + i + "')\" value='_' /><p>Application Name</p></td><iframe class='appFrame' src='apps/" + app + "/" + file + "'></iframe></div>";
//var taskbarApp="<div id='task" + i + "' onclick=\"moveToFront('" + i + "')\" class='taskbarApps'><img src='apps/" + app + "/" + appIcon + "' style='width:32px;height:32px' align='middle' /></div>";
if (!(detector.mobile())) {
var application="<div onclick=\"moveToFront('" + i + "')\" name='" + app + "' id='" + i + "' class='framewrap' style='width:" + width + "px; height:" + height + "px'><input type='button' onclick=\"closeApplication('" + i + "')\" value='X' /><input type='button' onclick=\"maximizeApplication('" + i + "')\" value='\u25A1' /><input type='button' onclick=\"minimizeApplication('" + i + "')\" value='_' /><iframe name='" + i + "' id='app" + i + "' class='appFrame' src='apps/" + app + "/'></iframe></div>";
var taskbarApp="<div onmousedown='SetCurrentTaskbarApp(" + i + ")' onmouseup='SetCurrentTaskbarApp(\"\")' id='task" + i + "' onclick=\"minimizeApplication('" + i + "')\" class='taskbarApps taskbarAppOpen'><img src='apps/" + app + "/" + appIcon + "' style='width:32px;height:32px' align='middle' /></div>";
} else {
var application="<div onclick=\"moveToFront('" + i + "')\" name='" + app + "' id='" + i + "' class='framewrapMobile' style='width:" + width + "px; height:" + height + "px'><input type='button' onclick=\"showContextMenu('app" + i + "')\" value='&#9660;' /><iframe name='" + i + "' id='app" + i + "' class='appFrameMobile' src='apps/" + app + "/'></iframe></div>";
var taskbarApp="<div tabindex='0' onmousedown='SetCurrentTaskbarApp(" + i + ")' id='task" + i + "' onclick=\"moveToFront('" + i + "'); SetCurrentTaskbarApp(" + i + ")\" class='taskbarApps'><img src='apps/" + app + "/" + appIcon + "' style='width:32px;height:32px' align='middle' /></div>";
// touchstart='SetCurrentTaskbarApp(" + i + ")' touchend='SetCurrentTaskbarApp(\"\")'
// onmouseup='SetCurrentTaskbarApp(\"\")'
}
var parent=document.getElementById('appContainer');
parent.insertAdjacentHTML('beforeend', application);
var parent=document.getElementById('taskbarApps');
parent.insertAdjacentHTML('beforeend', taskbarApp);
if (width == "max" || height == "max")
maximizeApplication(i);
moveToFront(i);
makeDraggable();
if (detector.mobile()) {
maximizeApplication(i);
}
if (i>highestId)
highestId=i;
} // Opens an application.
function openWidget(widget, filename) {
if (filename == undefined) {
file = "";
} else {
file = filename;
}
var i = 0;
// Get the first available application ID.
while ($('#' + i).length)
i++;
var newWidget = "<div name='" + widget + "' id='" + i + "' class='framewrap' style='width:300px;height:300px;'><br /><iframe class='appFrame' src='widgets/" + widget + "/" + file + "'></iframe></div>";
var parent=document.getElementById('appContainer');
parent.insertAdjacentHTML('beforeend', newWidget);
makeDraggable();
} // Start a new widget
function startWidgets() {
jQuery.get('/etc/enabled_widgets', function(data) {
var widgets = data.split("\n");
for(i = 0; i < widgets.length-1; i++) {
if(true) {
console.log('Opening ' + widgets[i]);
openWidget(widgets[i]);
} else {
console.log("ERROR: Can't open widget - a network error occurred. This probably means this widget does not exist. Ignoring.");
}
}
});
} // Start all enabled widgets
function closeApplication(id) {
if(idExists(id)) {
var application = document.getElementById(id);
var taskbarApp = document.getElementById('task' + id);
application.parentNode.removeChild(application);
if(taskbarApp != null)
taskbarApp.parentNode.removeChild(taskbarApp);
} else {
console.log("Application with ID " + id + " does not exist. Ignoring.");
}
} // Closes an application.
function maximizeApplication(id, DoNotMoveToFront) {
if($("#" + id).length) {
if(document.getElementById(id).style.display == "none")
application.style.display = "block";
windowheight = window.innerHeight-42;
//document.getElementById(id).setAttribute('style', "height: 92%; width: 99%; top: 42px; left: 0px");
document.getElementById(id).setAttribute('style', "height: " + windowheight + "px; width: 100%; top: 42px; left: 0px");
if(!DoNotMoveToFront)
moveToFront(id);
}
//document.getElementById(id).setAttribute('style', "height: " + (window.innerHeight-42) + "px; width: " + window.innerHeight + "; top: 42px; left: 0px");
} // Maximize application
/*function minimizeApplication(id) {
var application = document.getElementById(id);
if (application.style.display === "none") {
application.style.display = "block";
} else {
application.style.display = "none";
}
openflag=false;
console.log("Minimize");
} // Minimize application*/
function minimizeApplication(id, DisallowUnminimize) {
var application = document.getElementById(id);
if (application.style.display === "none" && !DisallowUnminimize) {
application.style.display = "block";
} else {
application.style.display = "none";
}
} // Minimize application
function idExists(id) {
if ($('#' + id).length)
return $('#' + id).attr('name');
else
return false;
} // Check if an ID exists
function startTime() {
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
m = checkTime(m);
s = checkTime(s);
document.getElementById('txt').innerHTML =
h + ":" + m + ":" + s;
var t = setTimeout(startTime, 500);
} // Tick tock, Mr. Wick...
function checkTime(i) {
if (i < 10) {i = "0" + i}; // add zero in front of numbers < 10
return i;
}
/*function returnStatus(req, status) {
//console.log(req);
if(status == 200) {
console.log("The url is available");
// send an event
} else {
console.log("The url returned status code " + status);
// send a different event
}
}*/
function fetchStatus(address) {
var client = new XMLHttpRequest();
client.onreadystatechange = function() {
// in case of network errors this might not give reliable results
if(this.readyState == 4)
return this.status;
}
client.open("HEAD", address);
client.send();
}
// Below are helper functions for making the "Close Application" function in DremJS possible. They may come in handy for other reasons, too.
function SetCurrentTaskbarApp(id, AutoDisable) {
//console.log("SET: " + id);
CurrentTaskbarApp = "" + id;
} // Sets or mutates CurrentTaskbarApp
function GetCurrentTaskbarApp() {
//console.log("GET: " + CurrentTaskbarApp);
return CurrentTaskbarApp;
} // Accessor for CurrentTaskbarApp
// Mobile version of Agenda
function initAgendaMobile() {
console.log("Initializing Agenda Mobile");
startTime();
console.log("Starting widgets");
startWidgets();
makeDraggable();
console.log("Agenda Mobile Initialized");
}
function maximizeAllApplications() {
for(i=0; i<=highestId; i++)
maximizeApplication(i, true);
}
function minimizeAllApplications() {
for(i=0; i<=highestId; i++)
minimizeApplication(i, true);
}
$(window).resize(function() {
if(detector.mobile())
maximizeAllApplications();
});
/*function showContextMenu() {
try {
parent.showContextMenu();
} catch(e) { }
}*/

1004
js/agenda/mobile-detect.js Normal file

File diff suppressed because one or more lines are too long

11
js/jquery.ui.touch-punch.min.js vendored Normal file
View file

@ -0,0 +1,11 @@
/*!
* jQuery UI Touch Punch 0.2.3
*
* Copyright 20112014, Dave Furfero
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Depends:
* jquery.ui.widget.js
* jquery.ui.mouse.js
*/
!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);

508
rootfb.php Normal file
View file

@ -0,0 +1,508 @@
<?php
/********************************
Simple PHP File Manager
Copyright John Campbell (jcampbell1)
Liscense: MIT
********************************/
// Thanks for providing such a great PHP application!
//Disable error report for undefined superglobals
error_reporting( error_reporting() & ~E_NOTICE );
//Security options
$allow_delete = true; // Set to false to disable delete button and delete POST request.
$allow_upload = true; // Set to true to allow upload files
$allow_create_folder = true; // Set to false to disable folder creation
$allow_direct_link = true; // Set to false to only allow downloads and not direct link
$allow_show_folders = true; // Set to false to hide all subdirectories
$disallowed_patterns = ['*.php']; // must be an array. Matching files not allowed to be uploaded
$hidden_patterns = ['*.php','.*']; // Matching files hidden in directory index
$PASSWORD = 'admin'; // Set the password, to access the file manager... (optional)
if($PASSWORD) {
session_start();
// Disabled to prevent using cookies to determine if a computer is trusted.
if(!$_SESSION['_sfm_allowed']) {
// sha1, and random bytes to thwart timing attacks. Not meant as secure hashing.
$t = bin2hex(openssl_random_pseudo_bytes(10));
if($_POST['p'] && sha1($t.$_POST['p']) === sha1($t.$PASSWORD)) {
$_SESSION['_sfm_allowed'] = true;
header('Location: ?');
}
echo '<html><body><form action=? method=post>PASSWORD:<input type=password name=p autofocus/></form></body></html>';
exit;
}
}
// must be in UTF-8 or `basename` doesn't work
setlocale(LC_ALL,'en_US.UTF-8');
$tmp_dir = dirname($_SERVER['SCRIPT_FILENAME']);
if(DIRECTORY_SEPARATOR==='\\') $tmp_dir = str_replace('/',DIRECTORY_SEPARATOR,$tmp_dir);
$tmp = get_absolute_path($tmp_dir . '/' .$_REQUEST['file']);
if($tmp === false)
err(404,'File or Directory Not Found');
if(substr($tmp, 0,strlen($tmp_dir)) !== $tmp_dir)
err(403,"Forbidden");
if(strpos($_REQUEST['file'], DIRECTORY_SEPARATOR) === 0)
err(403,"Forbidden");
if(preg_match('@^.+://@',$_REQUEST['file'])) {
err(403,"Forbidden");
}
if(!$_COOKIE['_sfm_xsrf'])
setcookie('_sfm_xsrf',bin2hex(openssl_random_pseudo_bytes(16)));
if($_POST) {
if($_COOKIE['_sfm_xsrf'] !== $_POST['xsrf'] || !$_POST['xsrf'])
err(403,"XSRF Failure");
}
$file = $_REQUEST['file'] ?: '.';
if($_GET['do'] == 'list') {
if (is_dir($file)) {
$directory = $file;
$result = [];
$files = array_diff(scandir($directory), ['.','..']);
foreach ($files as $entry) if (!is_entry_ignored($entry, $allow_show_folders, $hidden_patterns)) {
$i = $directory . '/' . $entry;
$stat = stat($i);
$result[] = [
'mtime' => $stat['mtime'],
'size' => $stat['size'],
'name' => basename($i),
'path' => preg_replace('@^\./@', '', $i),
'is_dir' => is_dir($i),
'is_deleteable' => $allow_delete && ((!is_dir($i) && is_writable($directory)) ||
(is_dir($i) && is_writable($directory) && is_recursively_deleteable($i))),
'is_readable' => is_readable($i),
'is_writable' => is_writable($i),
'is_executable' => is_executable($i),
];
}
usort($result,function($f1,$f2){
$f1_key = ($f1['is_dir']?:2) . $f1['name'];
$f2_key = ($f2['is_dir']?:2) . $f2['name'];
return $f1_key > $f2_key;
});
} else {
err(412,"Not a Directory");
}
echo json_encode(['success' => true, 'is_writable' => is_writable($file), 'results' =>$result]);
exit;
} elseif ($_POST['do'] == 'delete') {
if($allow_delete) {
rmrf($file);
}
exit;
} elseif ($_POST['do'] == 'mkdir' && $allow_create_folder) {
// don't allow actions outside root. we also filter out slashes to catch args like './../outside'
$dir = $_POST['name'];
$dir = str_replace('/', '', $dir);
if(substr($dir, 0, 2) === '..')
exit;
chdir($file);
@mkdir($_POST['name']);
exit;
} elseif ($_POST['do'] == 'upload' && $allow_upload) {
foreach($disallowed_patterns as $pattern)
if(fnmatch($pattern, $_FILES['file_data']['name']))
err(403,"Files of this type are not allowed.");
$res = move_uploaded_file($_FILES['file_data']['tmp_name'], $file.'/'.$_FILES['file_data']['name']);
exit;
} elseif ($_GET['do'] == 'download') {
foreach($disallowed_patterns as $pattern)
if(fnmatch($pattern, $file))
err(403,"Files of this type are not allowed.");
$filename = basename($file);
$finfo = finfo_open(FILEINFO_MIME_TYPE);
header('Content-Type: ' . finfo_file($finfo, $file));
header('Content-Length: '. filesize($file));
header(sprintf('Content-Disposition: attachment; filename=%s',
strpos('MSIE',$_SERVER['HTTP_REFERER']) ? rawurlencode($filename) : "\"$filename\"" ));
ob_flush();
readfile($file);
exit;
}
function is_entry_ignored($entry, $allow_show_folders, $hidden_patterns) {
if ($entry === basename(__FILE__)) {
return true;
}
if (is_dir($entry) && !$allow_show_folders) {
return true;
}
foreach($hidden_patterns as $pattern) {
if(fnmatch($pattern,$entry)) {
return true;
}
}
return false;
}
function rmrf($dir) {
if(is_dir($dir)) {
$files = array_diff(scandir($dir), ['.','..']);
foreach ($files as $file)
rmrf("$dir/$file");
rmdir($dir);
} else {
unlink($dir);
}
}
function is_recursively_deleteable($d) {
$stack = [$d];
while($dir = array_pop($stack)) {
if(!is_readable($dir) || !is_writable($dir))
return false;
$files = array_diff(scandir($dir), ['.','..']);
foreach($files as $file) if(is_dir($file)) {
$stack[] = "$dir/$file";
}
}
return true;
}
// from: http://php.net/manual/en/function.realpath.php#84012
function get_absolute_path($path) {
$path = str_replace(['/', '\\'], DIRECTORY_SEPARATOR, $path);
$parts = explode(DIRECTORY_SEPARATOR, $path);
$absolutes = [];
foreach ($parts as $part) {
if ('.' == $part) continue;
if ('..' == $part) {
array_pop($absolutes);
} else {
$absolutes[] = $part;
}
}
return implode(DIRECTORY_SEPARATOR, $absolutes);
}
function err($code,$msg) {
http_response_code($code);
header("Content-Type: application/json");
echo json_encode(['error' => ['code'=>intval($code), 'msg' => $msg]]);
exit;
}
function asBytes($ini_v) {
$ini_v = trim($ini_v);
$s = ['g'=> 1<<30, 'm' => 1<<20, 'k' => 1<<10];
return intval($ini_v) * ($s[strtolower(substr($ini_v,-1))] ?: 1);
}
$MAX_UPLOAD_SIZE = min(asBytes(ini_get('post_max_size')), asBytes(ini_get('upload_max_filesize')));
?>
<!DOCTYPE html>
<html><head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<style>
body {font-family: "lucida grande","Segoe UI",Arial, sans-serif; font-size: 14px;width:1024;padding:1em;margin:0;}
th {font-weight: normal; color: #1F75CC; background-color: #F0F9FF; padding:.5em 1em .5em .2em;
text-align: left;cursor:pointer;user-select: none;}
th .indicator {margin-left: 6px }
thead {border-top: 1px solid #82CFFA; border-bottom: 1px solid #96C4EA;border-left: 1px solid #E7F2FB;
border-right: 1px solid #E7F2FB; }
#top {height:52px;}
#mkdir {display:inline-block;float:right;padding-top:16px;}
label { display:block; font-size:11px; color:#555;}
#file_drop_target {width:500px; padding:12px 0; border: 4px dashed #ccc;font-size:12px;color:#ccc;
text-align: center;float:right;margin-right:20px;}
#file_drop_target.drag_over {border: 4px dashed #96C4EA; color: #96C4EA;}
#upload_progress {padding: 4px 0;}
#upload_progress .error {color:#a00;}
#upload_progress > div { padding:3px 0;}
.no_write #mkdir, .no_write #file_drop_target {display: none}
.progress_track {display:inline-block;width:200px;height:10px;border:1px solid #333;margin: 0 4px 0 10px;}
.progress {background-color: #82CFFA;height:10px; }
footer {font-size:11px; color:#bbbbc5; padding:4em 0 0;text-align: left;}
footer a, footer a:visited {color:#bbbbc5;}
#breadcrumb { padding-top:34px; font-size:15px; color:#aaa;display:inline-block;float:left;}
#folder_actions {width: 50%;float:right;}
a, a:visited { color:#00c; text-decoration: none}
a:hover {text-decoration: underline}
.sort_hide{ display:none;}
table {border-collapse: collapse;width:100%;}
thead {max-width: 1024px}
td { padding:.2em 1em .2em .2em; border-bottom:1px solid #def;height:30px; font-size:12px;white-space: nowrap;}
td.first {font-size:14px;white-space: normal;}
td.empty { color:#777; font-style: italic; text-align: center;padding:3em 0;}
.is_dir .size {color:transparent;font-size:0;}
.is_dir .size:before {content: "--"; font-size:14px;color:#333;}
.is_dir .download{visibility: hidden}
a.delete {display:inline-block;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADtSURBVHjajFC7DkFREJy9iXg0t+EHRKJDJSqRuIVaJT7AF+jR+xuNRiJyS8WlRaHWeOU+kBy7eyKhs8lkJrOzZ3OWzMAD15gxYhB+yzAm0ndez+eYMYLngdkIf2vpSYbCfsNkOx07n8kgWa1UpptNII5VR/M56Nyt6Qq33bbhQsHy6aR0WSyEyEmiCG6vR2ffB65X4HCwYC2e9CTjJGGok4/7Hcjl+ImLBWv1uCRDu3peV5eGQ2C5/P1zq4X9dGpXP+LYhmYz4HbDMQgUosWTnmQoKKf0htVKBZvtFsx6S9bm48ktaV3EXwd/CzAAVjt+gHT5me0AAAAASUVORK5CYII=) no-repeat scroll 0 2px;
color:#d00; margin-left: 15px;font-size:11px;padding:0 0 0 13px;
}
.name {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABAklEQVRIie2UMW6DMBSG/4cYkJClIhauwMgx8CnSC9EjJKcwd2HGYmAwEoMREtClEJxYakmcoWq/yX623veebZmWZcFKWZbXyTHeOeeXfWDN69/uzPP8x1mVUmiaBlLKsxACAC6cc2OPd7zYK1EUYRgGZFkG3/fPAE5fIjcCAJimCXEcGxKnAiICERkSIcQmeVoQhiHatoWUEkopJEkCAB/r+t0lHyVN023c9z201qiq6s2ZYA9jDIwx1HW9xZ4+Ihta69cK9vwLvsX6ivYf4FGIyJj/rg5uqwccd2Ar7OUdOL/kPyKY5/mhZJ53/2asgiAIHhLYMARd16EoCozj6EzwCYrrX5dC9FQIAAAAAElFTkSuQmCC) no-repeat scroll 0px 12px;
padding:15px 0 10px 40px;
}
.is_dir .name {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI0SURBVFiF7Vctb1RRED1nZu5977VQVBEQBKZ1GCDBEwy+ISgCBsMPwOH4CUXgsKQOAxq5CaKChEBqShNK222327f79n0MgpRQ2qC2twKOGjE352TO3Jl76e44S8iZsgOww+Dhi/V3nePOsQRFv679/qsnV96ehgAeWvBged3vXi+OJewMW/Q+T8YCLr18fPnNqQq4fS0/MWlQdviwVqNpp9Mvs7l8Wn50aRH4zQIAqOruxANZAG4thKmQA8D7j5OFw/iIgLXvo6mR/B36K+LNp71vVd1cTMR8BFmwTesc88/uLQ5FKO4+k4aarbuPnq98mbdo2q70hmU0VREkEeCOtqrbMprmFqM1psoYAsg0U9EBtB0YozUWzWpVZQgBxMm3YPoCiLpxRrPaYrBKRSUL5qn2AgFU0koMVlkMOo6G2SIymQCAGE/AGHRsWbCRKc8VmaBN4wBIwkZkFmxkWZDSFCwyommZSABgCmZBSsuiHahA8kA2iZYzSapAsmgHlgfdVyGLTFg3iZqQhAqZB923GGUgQhYRVElmAUXIGGVgedQ9AJJnAkqyClCEkkfdM1Pt13VHdxDpnof0jgxB+mYqO5PaCSDRIAbgDgdpKjtmwm13irsnq4ATdKeYcNvUZAt0dg5NVwEQFKrJlpn45lwh/LpbWdela4K5QsXEN61tytWr81l5YSY/n4wdQH84qjd2J6vEz+W0BOAGgLlE/AMAPQCv6e4gmWYC/QF3d/7zf8P/An4AWL/T1+B2nyIAAAAASUVORK5CYII=) no-repeat scroll 0px 10px;
padding:15px 0 10px 40px;
}
.download {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB2klEQVR4nJ2ST2sTQRiHn5mdmj92t9XmUJIWJGq9NHrRgxQiCtqbl97FqxgaL34CP0FD8Qv07EHEU0Ew6EXEk6ci8Q9JtcXEkHR3k+zujIdUqMkmiANzmJdnHn7vzCuIWbe291tSkvhz1pr+q1L2bBwrRgvFrcZKKinfP9zI2EoKmm7Azstf3V7fXK2Wc3ujvIqzAhglwRJoS2ImQZMEBjgyoDS4hv8QGHA1WICvp9yelsA7ITBTIkwWhGBZ0Iv+MUF+c/cB8PTHt08snb+AGAACZDj8qIN6bSe/uWsBb2qV24/GBLn8yl0plY9AJ9NKeL5ICyEIQkkiZenF5XwBDAZzWItLIIR6LGfk26VVxzltJ2gFw2a0FmQLZ+bcbo/DPbcd+PrDyRb+GqRipbGlZtX92UvzjmUpEGC0JgpC3M9dL+qGz16XsvcmCgCK2/vPtTNzJ1x2kkZIRBSivh8Z2Q4+VkvZy6O8HHvWyGyITvA1qndNpxfguQNkc2CIzM0xNk5QLedCEZm1VKsf2XrAXMNrA2vVcq4ZJ4DhvCSAeSALXASuLBTW129U6oPrT969AK4Bq0AeWARs4BRgieMUEkgDmeO9ANipzDnH//nFB0KgAxwATaAFeID5DQNatLGdaXOWAAAAAElFTkSuQmCC) no-repeat scroll 0px 5px;
padding:4px 0 4px 20px;
}
</style>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script>
(function($){
$.fn.tablesorter = function() {
var $table = this;
this.find('th').click(function() {
var idx = $(this).index();
var direction = $(this).hasClass('sort_asc');
$table.tablesortby(idx,direction);
});
return this;
};
$.fn.tablesortby = function(idx,direction) {
var $rows = this.find('tbody tr');
function elementToVal(a) {
var $a_elem = $(a).find('td:nth-child('+(idx+1)+')');
var a_val = $a_elem.attr('data-sort') || $a_elem.text();
return (a_val == parseInt(a_val) ? parseInt(a_val) : a_val);
}
$rows.sort(function(a,b){
var a_val = elementToVal(a), b_val = elementToVal(b);
return (a_val > b_val ? 1 : (a_val == b_val ? 0 : -1)) * (direction ? 1 : -1);
})
this.find('th').removeClass('sort_asc sort_desc');
$(this).find('thead th:nth-child('+(idx+1)+')').addClass(direction ? 'sort_desc' : 'sort_asc');
for(var i =0;i<$rows.length;i++)
this.append($rows[i]);
this.settablesortmarkers();
return this;
}
$.fn.retablesort = function() {
var $e = this.find('thead th.sort_asc, thead th.sort_desc');
if($e.length)
this.tablesortby($e.index(), $e.hasClass('sort_desc') );
return this;
}
$.fn.settablesortmarkers = function() {
this.find('thead th span.indicator').remove();
this.find('thead th.sort_asc').append('<span class="indicator">&darr;<span>');
this.find('thead th.sort_desc').append('<span class="indicator">&uarr;<span>');
return this;
}
})(jQuery);
$(function(){
var XSRF = (document.cookie.match('(^|; )_sfm_xsrf=([^;]*)')||0)[2];
var MAX_UPLOAD_SIZE = <?php echo $MAX_UPLOAD_SIZE ?>;
var $tbody = $('#list');
$(window).on('hashchange',list).trigger('hashchange');
$('#table').tablesorter();
$('#table').on('click','.delete',function(data) {
$.post("",{'do':'delete',file:$(this).attr('data-file'),xsrf:XSRF},function(response){
list();
},'json');
return false;
});
$('#mkdir').submit(function(e) {
var hashval = decodeURIComponent(window.location.hash.substr(1)),
$dir = $(this).find('[name=name]');
e.preventDefault();
$dir.val().length && $.post('?',{'do':'mkdir',name:$dir.val(),xsrf:XSRF,file:hashval},function(data){
list();
},'json');
$dir.val('');
return false;
});
<?php if($allow_upload): ?>
// file upload stuff
$('#file_drop_target').on('dragover',function(){
$(this).addClass('drag_over');
return false;
}).on('dragend',function(){
$(this).removeClass('drag_over');
return false;
}).on('drop',function(e){
e.preventDefault();
var files = e.originalEvent.dataTransfer.files;
$.each(files,function(k,file) {
uploadFile(file);
});
$(this).removeClass('drag_over');
});
$('input[type=file]').change(function(e) {
e.preventDefault();
$.each(this.files,function(k,file) {
uploadFile(file);
});
});
function uploadFile(file) {
var folder = decodeURIComponent(window.location.hash.substr(1));
if(file.size > MAX_UPLOAD_SIZE) {
var $error_row = renderFileSizeErrorRow(file,folder);
$('#upload_progress').append($error_row);
window.setTimeout(function(){$error_row.fadeOut();},5000);
return false;
}
var $row = renderFileUploadRow(file,folder);
$('#upload_progress').append($row);
var fd = new FormData();
fd.append('file_data',file);
fd.append('file',folder);
fd.append('xsrf',XSRF);
fd.append('do','upload');
var xhr = new XMLHttpRequest();
xhr.open('POST', '?');
xhr.onload = function() {
$row.remove();
list();
};
xhr.upload.onprogress = function(e){
if(e.lengthComputable) {
$row.find('.progress').css('width',(e.loaded/e.total*100 | 0)+'%' );
}
};
xhr.send(fd);
}
function renderFileUploadRow(file,folder) {
return $row = $('<div/>')
.append( $('<span class="fileuploadname" />').text( (folder ? folder+'/':'')+file.name))
.append( $('<div class="progress_track"><div class="progress"></div></div>') )
.append( $('<span class="size" />').text(formatFileSize(file.size)) )
};
function renderFileSizeErrorRow(file,folder) {
return $row = $('<div class="error" />')
.append( $('<span class="fileuploadname" />').text( 'Error: ' + (folder ? folder+'/':'')+file.name))
.append( $('<span/>').html(' file size - <b>' + formatFileSize(file.size) + '</b>'
+' exceeds max upload size of <b>' + formatFileSize(MAX_UPLOAD_SIZE) + '</b>') );
}
<?php endif; ?>
function list() {
var hashval = window.location.hash.substr(1);
$.get('?do=list&file='+ hashval,function(data) {
$tbody.empty();
$('#breadcrumb').empty().html(renderBreadcrumbs(hashval));
if(data.success) {
$.each(data.results,function(k,v){
$tbody.append(renderFileRow(v));
});
!data.results.length && $tbody.append('<tr><td class="empty" colspan=5>This folder is empty</td></tr>')
data.is_writable ? $('body').removeClass('no_write') : $('body').addClass('no_write');
} else {
console.warn(data.error.msg);
}
$('#table').retablesort();
},'json');
}
function renderFileRow(data) {
var $link = $('<a class="name" />')
.attr('href', data.is_dir ? '#' + encodeURIComponent(data.path) : './' + data.path)
.text(data.name);
var allow_direct_link = <?php echo $allow_direct_link?'true':'false'; ?>;
if (!data.is_dir && !allow_direct_link) $link.css('pointer-events','none');
var $dl_link = $('<a/>').attr('href','?do=download&file='+ encodeURIComponent(data.path))
.addClass('download').text('download');
var $delete_link = $('<a href="#" />').attr('data-file',data.path).addClass('delete').text('delete');
var perms = [];
if(data.is_readable) perms.push('read');
if(data.is_writable) perms.push('write');
if(data.is_executable) perms.push('exec');
var $html = $('<tr />')
.addClass(data.is_dir ? 'is_dir' : '')
.append( $('<td class="first" />').append($link) )
.append( $('<td/>').attr('data-sort',data.is_dir ? -1 : data.size)
.html($('<span class="size" />').text(formatFileSize(data.size))) )
.append( $('<td/>').attr('data-sort',data.mtime).text(formatTimestamp(data.mtime)) )
.append( $('<td/>').text(perms.join('+')) )
.append( $('<td/>').append($dl_link).append( data.is_deleteable ? $delete_link : '') )
return $html;
}
function renderBreadcrumbs(path) {
var base = "",
$html = $('<div/>').append( $('<a href=#>Home</a></div>') );
$.each(path.split('%2F'),function(k,v){
if(v) {
var v_as_text = decodeURIComponent(v);
$html.append( $('<span/>').text(' ▸ ') )
.append( $('<a/>').attr('href','#'+base+v).text(v_as_text) );
base += v + '%2F';
}
});
return $html;
}
function formatTimestamp(unix_timestamp) {
var m = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var d = new Date(unix_timestamp*1000);
return [m[d.getMonth()],' ',d.getDate(),', ',d.getFullYear()," ",
(d.getHours() % 12 || 12),":",(d.getMinutes() < 10 ? '0' : '')+d.getMinutes(),
" ",d.getHours() >= 12 ? 'PM' : 'AM'].join('');
}
function formatFileSize(bytes) {
var s = ['bytes', 'KB','MB','GB','TB','PB','EB'];
for(var pos = 0;bytes >= 1000; pos++,bytes /= 1024);
var d = Math.round(bytes*10);
return pos ? [parseInt(d/10),".",d%10," ",s[pos]].join('') : bytes + ' bytes';
}
})
</script>
</head><body>
<script>
document.addEventListener('contextmenu', event => event.preventDefault());
</script>
<div id="top">
<?php if($allow_create_folder): ?>
<form action="?" method="post" id="mkdir" />
<label for=dirname>Create New Folder</label><input id=dirname type=text name=name value="" />
<input type="submit" value="create" />
</form>
<?php endif; ?>
<?php if($allow_upload): ?>
<div id="file_drop_target">
Drag Files Here To Upload
<b>or</b>
<input type="file" multiple />
</div>
<?php endif; ?>
<div id="breadcrumb">&nbsp;</div>
</div>
<div id="upload_progress"></div>
<table id="table"><thead><tr>
<th>Name</th>
<th>Size</th>
<th>Modified</th>
<th>Permissions</th>
<th>Actions</th>
</tr></thead><tbody id="list">
</tbody></table>
<footer><a onclick="lockRoot()">Index of <?php echo preg_replace('/^' . preg_quote($_SERVER['DOCUMENT_ROOT'], '/') . '/', '', __DIR__); ?> | Press to lock root on this browser</a></footer>
<script>
function lockRoot() {
document.cookie = "PHPSESSID=; expires = Thu, 01 Jan 1970 00:00:00 GMT"
document.cookie = "_sfm_xsrf=; expires = Thu, 01 Jan 1970 00:00:00 GMT"
window.location.href = '/home/user/index.php';
} // If you are like me and use the same browsing session for ages at a time, this can easily prevent usage of the root file browser.
</script>
</body></html>

30
shutdown.html Normal file
View file

@ -0,0 +1,30 @@
<html>
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
width: 100%;
}
body {
display: table;
background-color: #000000;
}
.my-block {
text-align: center;
display: table-cell;
vertical-align: middle;
}
.orange {
color: orange;
}
</style>
</head>
<body>
<div class="my-block orange">
It's now safe to turn off<br />
your browser
</div>
</body>
</html>

32
shuttingdown.html Normal file
View file

@ -0,0 +1,32 @@
<html>
<head>
<script src="jquery/jquery-3.3.1.min.js"></script>
<meta http-equiv="refresh" content="7;url=shutdown.html" />
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
width: 100%;
}
body {
display: table;
background-color: #00A9DA;
}
.my-block {
text-align: center;
display: table-cell;
vertical-align: middle;
}
.orange {
color: orange;
</style>
</head>
<body>
<embed src="/assets/media/music/shutdown.mp3" width="0" height="0" loop="false" autostart="true" hidden="true" />
<div class="my-block">
<img src="/assets/media/images/goodbye.gif">
</div>
</body>
</html>

92
widgets/clock/index.html Normal file
View file

@ -0,0 +1,92 @@
<!DOCTYPE html>
<html>
<body>
<center><canvas id="canvas" width="255px" height="255px" style="background-color:#FFF">
</canvas></center>
<script>
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var radius = canvas.height / 2;
ctx.translate(radius, radius);
radius = radius * 0.90
setInterval(drawClock, 1000);
function drawClock() {
drawFace(ctx, radius);
drawNumbers(ctx, radius);
drawTime(ctx, radius);
}
function drawFace(ctx, radius) {
var grad;
ctx.beginPath();
ctx.arc(0, 0, radius, 0, 2*Math.PI);
ctx.fillStyle = 'white';
ctx.fill();
grad = ctx.createRadialGradient(0,0,radius*0.95, 0,0,radius*1.05);
grad.addColorStop(0, '#333');
grad.addColorStop(0.5, 'white');
grad.addColorStop(1, '#333');
ctx.strokeStyle = grad;
ctx.lineWidth = radius*0.1;
ctx.stroke();
ctx.beginPath();
ctx.arc(0, 0, radius*0.1, 0, 2*Math.PI);
ctx.fillStyle = '#333';
ctx.fill();
}
function drawNumbers(ctx, radius) {
var ang;
var num;
ctx.font = radius*0.15 + "px arial";
ctx.textBaseline="middle";
ctx.textAlign="center";
for(num = 1; num < 13; num++){
ang = num * Math.PI / 6;
ctx.rotate(ang);
ctx.translate(0, -radius*0.85);
ctx.rotate(-ang);
ctx.fillText(num.toString(), 0, 0);
ctx.rotate(ang);
ctx.translate(0, radius*0.85);
ctx.rotate(-ang);
}
}
function drawTime(ctx, radius){
var now = new Date();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
//hour
hour=hour%12;
hour=(hour*Math.PI/6)+
(minute*Math.PI/(6*60))+
(second*Math.PI/(360*60));
drawHand(ctx, hour, radius*0.5, radius*0.07);
//minute
minute=(minute*Math.PI/30)+(second*Math.PI/(30*60));
drawHand(ctx, minute, radius*0.8, radius*0.07);
// second
second=(second*Math.PI/30);
drawHand(ctx, second, radius*0.9, radius*0.02);
}
function drawHand(ctx, pos, length, width) {
ctx.beginPath();
ctx.lineWidth = width;
ctx.lineCap = "round";
ctx.moveTo(0,0);
ctx.rotate(pos);
ctx.lineTo(0, -length);
ctx.stroke();
ctx.rotate(-pos);
}
</script>
</body>
</html>

1
widgets/clock/name Normal file
View file

@ -0,0 +1 @@
Clock

View file

@ -0,0 +1,110 @@
<?php
header('Refresh:10');
function displayInfo() {
$systemInfo = '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/jquery-ui.min.js"></script>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
$(function() {
var content = \'<center><p>CPU Usage: '.getCpuUsage().'%</p><div id="cpuUsageBar"></div><br /><p>Memory Usage (see docs): '.memory_usage()."KB/".memory_total()."KB".'</p><div id="memoryUsageBar"></div></center>\';
var parent=document.getElementById("container");
parent.insertAdjacentHTML("beforeend", content);
$( "#cpuUsageBar" ).progressbar({
value: '.getCpuUsage().'
});
$( "#memoryUsageBar" ).progressbar({
value: '.round((memory_usage()/memory_total())*100, 2).'
});
});
function startRefresh() {
$.get("index.php", function(data) {
$(document.body).html(data);
});
}
$(function() {
setTimeout(startRefresh,5000);
});
</script>
<style>
body {
font-family: Calibri;
}
.buttonA, .buttonB {
display: inline-block;
}
.buttons {
width: 100%;
top: 0px;
left: 0px;
position: sticky;
background-color: #D3D3D3;
}
</style>
</head>
<body>
<!--<div class="buttons">
<button type="button" class="buttonA" disabled>Status</button>
<a href="TaskManager.html"><button type="button" class="buttonB">Task Manager</button></a>
</div>-->
<div id="container">
</div>
</body>
</html>';
echo($systemInfo);
//ob_flush();
//flush();
}
function memory_usage() {
return memory_total() - memory_free();
}
function memory_free() {
$fh = fopen('/proc/meminfo','r');
$mem = 0;
while ($line = fgets($fh)) {
$pieces = array();
if (preg_match('/^MemFree:\s+(\d+)\skB$/', $line, $pieces)) {
$mem = $pieces[1];
break;
}
}
fclose($fh);
return $mem;
}
function memory_total() {
$fh = fopen('/proc/meminfo','r');
$mem = 0;
while ($line = fgets($fh)) {
$pieces = array();
if (preg_match('/^MemTotal:\s+(\d+)\skB$/', $line, $pieces)) {
$mem = $pieces[1];
break;
}
}
fclose($fh);
return $mem;
}
function getCpuUsage() {
if(stristr(PHP_OS, 'win')) {
$_ENV['typeperfCounter'] = '\processor(_total)\% processor time';
exec('typeperf -sc 1 "'.$_ENV['typeperfCounter'].'"', $p);
$line = explode(',', $p[2]);
$load = trim($line[1], '"');
return $load;
} else {
$usage = sys_getloadavg();
return $usage[0];
}
}
displayInfo();
?>

View file

@ -0,0 +1 @@
Server Status