diff --git a/Documents/000.jpg b/Documents/000.jpg
new file mode 100644
index 0000000..3a9d54a
Binary files /dev/null and b/Documents/000.jpg differ
diff --git a/Images/000.jpg b/Images/000.jpg
new file mode 100644
index 0000000..c7524e9
Binary files /dev/null and b/Images/000.jpg differ
diff --git a/Images/1.png b/Images/1.png
new file mode 100644
index 0000000..fc62279
Binary files /dev/null and b/Images/1.png differ
diff --git a/Images/2.png b/Images/2.png
new file mode 100644
index 0000000..ac674ea
Binary files /dev/null and b/Images/2.png differ
diff --git a/Images/3.png b/Images/3.png
new file mode 100644
index 0000000..386de4d
Binary files /dev/null and b/Images/3.png differ
diff --git a/Images/4.png b/Images/4.png
new file mode 100644
index 0000000..98fea97
Binary files /dev/null and b/Images/4.png differ
diff --git a/Images/5.png b/Images/5.png
new file mode 100644
index 0000000..2005d71
Binary files /dev/null and b/Images/5.png differ
diff --git a/Music/000.jpg b/Music/000.jpg
new file mode 100644
index 0000000..7cd17f4
Binary files /dev/null and b/Music/000.jpg differ
diff --git a/README.md b/README.md
index f60dc1f..68aba40 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,15 @@ Notes:
3. The provided folders except "resources" are optional. You can add and remove them as you please.
4. The media and image pane can be moved by dragging from the transparentish bar that has the close button and other controls.
+# TO-DO
+1. Allow for move, copy, delete functionality.
+2. Allow for creating folders through the web interface.
+3. Fix the ' and & naming issue.
+4. Resolve issue were uploading doesn't always prompt an interface update.
+5. Impliment themes functionality.
+6. Look to refactor code.
+
+
# Images
![1 Home](Images/1.png)
diff --git a/Videos/000.jpg b/Videos/000.jpg
new file mode 100644
index 0000000..2a1deca
Binary files /dev/null and b/Videos/000.jpg differ
diff --git a/favicon.png b/favicon.png
new file mode 100644
index 0000000..76c6e41
Binary files /dev/null and b/favicon.png differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..2a743d3
--- /dev/null
+++ b/index.html
@@ -0,0 +1,42 @@
+
+
+
+
+ Web File Manager
+
+
+
+
+
+
+
+
+
+
+
+
+ Path:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/css/base.css b/resources/css/base.css
new file mode 100644
index 0000000..40854c9
--- /dev/null
+++ b/resources/css/base.css
@@ -0,0 +1,14 @@
+html {
+ margin: 0em;
+ padding: 0em;
+}
+
+iframe {
+ position: fixed;
+ overflow: auto;
+ background-color: rgba(60, 110, 135, 0.24);
+ color: rgba(255, 255, 255, 1);
+ width: 100%;
+ height: auto;
+ bottom: 0;
+}
diff --git a/resources/css/main.css b/resources/css/main.css
new file mode 100644
index 0000000..c7f6082
--- /dev/null
+++ b/resources/css/main.css
@@ -0,0 +1,158 @@
+/* IDs */
+
+#DIRPATHUL {
+ display: none;
+ width: 1px;
+ height: 1px;
+}
+
+#bg {
+ position: fixed;
+ top: 0%;
+ left: 0%;
+ width: 100%;
+ height: 100%;
+ z-index: -999;
+}
+#bg img {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ width: 100%;
+ height: 100%;
+ z-index: -999;
+}
+
+#fullPathHeader, #dynDiv,
+.errorStyling, .dirStyle, .movieStyle, .fileStyle {
+ display: block;
+ width: 100%;
+ height: auto;
+ overflow: auto;
+ padding-bottom: 0.5em;
+ color: #ffffff;
+ text-align: center;
+ font-size: 1.2em;
+ background-color: rgba(0,0,0,0.64);
+}
+
+#fullPathHeader {
+ display: block;
+ position: fixed;
+ top: 0.5em;
+}
+
+#dynDiv {
+ margin-top: 8em;
+}
+
+#imgView, #imgArea, #fileView {
+ width: 800px;
+ height: 600px;
+}
+
+#imgView, #fileView {
+ position: fixed;
+ bottom: 0em;
+ z-index: 100;
+ border-style: solid;
+ border-color: rgb(114,184,199);
+
+ }
+
+#fileView {
+ display: block;
+ overflow: auto;
+}
+
+#fileViewInner {
+ position: sticky;
+ display: inline;
+ width: 100%;
+ height: 500px;
+}
+
+#imgArea {
+ width: 800px;
+ height: 600px;
+ overflow-y: scroll;
+}
+
+#imgView { overflow: hidden; left: 15em; }
+
+
+/* Classes */
+.imgViewImg {
+ width: inherit;
+ height: auto;
+}
+
+
+.dirStyle { background-color: rgba(0, 0, 0, 0.56); }
+.movieStyle, .fileStyle { background-color: rgba(101, 101, 101, 0.56); }
+
+.dirStyle:hover, .movieStyle:hover, .fileStyle:hover {
+ background-color: rgba(0, 141, 166, 0.56);
+ cursor: pointer;
+}
+
+.movieStyle {
+ float: left;
+ width: 15em;
+ overflow: hidden;
+ height: auto;
+ margin: 0.5em;
+ padding: 0.5em;
+}
+
+.movieTitle {
+ width: 15em;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.iconImg {
+ width: 12em;
+ height: 8em;
+ margin: 1em;
+}
+
+.popOutBttn, .closeBttn {
+ float: right;
+ z-index: 2;
+ width: 4em;
+ height: 4em;
+ text-align: center;
+ vertical-align: middle;
+ line-height: 4em; /* the same as your div height */
+ background-color: rgba(0,0,0, 0.85);
+ color: rgb(255,255,255);
+ border-style:solid;
+ border-color: rgb(255,255,255);
+}
+
+
+/* Hover events */
+.closeBttn:hover, .popOutBttn:hover {
+ cursor: pointer;
+}
+
+.closeBttn:hover, .popOutBttn:hover {
+ background-color: rgba(255,255,255, 0.85);
+ color: #000000;
+ border-color: #000000;
+}
+
+.error, .warnning, .success {
+ float: left;
+ clear: both;
+}
+
+.errorStyling { background-color: rgb(255,0,0); }
+
+.error { color: rgb(255, 0, 0); }
+.warnning { color: rgb(255, 168, 0); }
+.success { color: rgb(136, 204, 39); }
diff --git a/resources/ffmpegthumbnailer b/resources/ffmpegthumbnailer
new file mode 100755
index 0000000..0b6e6e2
Binary files /dev/null and b/resources/ffmpegthumbnailer differ
diff --git a/resources/images/backgrounds/000.jpg b/resources/images/backgrounds/000.jpg
new file mode 100755
index 0000000..4ffd219
Binary files /dev/null and b/resources/images/backgrounds/000.jpg differ
diff --git a/resources/images/thumbnails/placeHolder.txt b/resources/images/thumbnails/placeHolder.txt
new file mode 100644
index 0000000..a8fe526
--- /dev/null
+++ b/resources/images/thumbnails/placeHolder.txt
@@ -0,0 +1 @@
+Place Holder File
diff --git a/resources/js/ajax.js b/resources/js/ajax.js
new file mode 100644
index 0000000..ee60156
--- /dev/null
+++ b/resources/js/ajax.js
@@ -0,0 +1,140 @@
+var pathNodes = []; // Path parts Could store a cookie to keep sessions
+
+function getDirSSE() {
+ var path = "";
+
+ // Create path from array of items
+ for (pathNode of pathNodes) { path += pathNode; }
+ path = "dirQuery=" + path;
+ process(path);
+}
+
+function getDir(query) {
+ var formULPTH = document.getElementById("DIRPATHUL");
+ var path = "";
+
+ // push or pop to path list
+ if (query === "/") {
+ if (document.cookie) {
+ var temp = document.cookie.replace("dirQuery=", "");
+ temp = temp.split("/");
+ // Subtract one b/c paths end with / and create empty slot
+ var size = temp.length - 1;
+
+ for (var i = 0; i < size; i++) {
+ pathNodes.push(temp[i] + "/");
+ }
+ } else {
+ pathNodes.push("." + query); // If in root of server
+ }
+ } else if (query === "../") {
+ if (pathNodes.length > 1) { pathNodes.pop(); } // Only remove while not in root
+ } else if (query === "./") { // Do nothing since re-scanning dir
+ } else { pathNodes.push(query); } // Add path
+
+ // Create path from array of items
+ for (pathNode of pathNodes) { path += pathNode; }
+
+ formULPTH.value = path; // Used when upoading a file
+ path = "dirQuery=" + path;
+ process(path);
+}
+
+function process(path) {
+ // Get dir info...
+ var xhttp = new XMLHttpRequest(); // Create the xhttp object
+
+ // This is actually run after open and send are done
+ xhttp.onreadystatechange = function() {
+ if (this.readyState === 4 && this.status === 200) {
+ // Send the returned data to further process
+ updatePage(this.responseXML);
+ }
+ };
+ xhttp.open("POST", "resources/php/process.php", true); // Open the connection
+ xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ xhttp.overrideMimeType('application/xml'); // Force return to be XML
+ xhttp.send(path); // Start the process
+
+ // Use a cookie for persistence during browser session....
+ document.cookie = path +"; path=" + document.URL;
+}
+
+function updatePage(returnData) {
+ var dirPath = returnData.getElementsByTagName('PATH_HEAD')[0];
+ var dirs = returnData.getElementsByTagName('DIR');
+ var videos = returnData.getElementsByTagName('VID_FILE');
+ var images = returnData.getElementsByTagName('IMG_FILE');
+ var files = returnData.getElementsByTagName('FILE');
+ var insertArea = document.getElementById('dynDiv');
+ var workingDir = dirPath.innerHTML;
+ var i = 0;
+
+ // Insert dirs
+ document.getElementById("path").innerHTML = dirPath.innerHTML;
+ insertArea.innerHTML = "";
+
+ if (workingDir === "./") { var i = 2 } // Remove ,. and ../ if in "root"
+
+ var size = dirs.length;
+ for (; i < size; i++) {
+ var dir = dirs[i].innerHTML;
+
+ if (dir != "resources/") {
+ insertArea.innerHTML += "
"
+ + dir
+ + "";
+ }
+ }
+
+ // Insert videos
+ size = videos .length;
+ for (i = 0; i < size; i++) {
+ var thumbnail = videos[i].children[0].innerHTML;
+ var videoPth = videos[i].children[1].innerHTML;
+ var vidNme = videos[i].children[2].innerHTML;
+
+ insertArea.innerHTML += ""
+ + ""
+ + "
" + vidNme + "
"
+ + "";
+ }
+
+ // Insert images
+ size = images.length;
+ for (i = 0; i < size; i++) {
+ var thumbnail = images[i].children[0].innerHTML;
+ var imgTitle = images[i].children[1].innerHTML;
+
+ if (!imgTitle.includes("favicon.png") && !imgTitle.includes("000.png") &&
+ !imgTitle.includes("000.jpg") && !imgTitle.includes("000.gif")) {
+ insertArea.innerHTML += "";
+ }
+ }
+
+ if (images[0] != undefined) {
+ if (images[0].children[0].innerHTML.includes("000.jpg") ||
+ images[0].children[0].innerHTML.includes("000.png") ||
+ images[0].children[0].innerHTML.includes("000.gif")) {
+ updateBG(images[0].children[0].innerHTML);
+ } else { updateBG("resources/images/backgrounds/000.jpg"); }
+ } else { updateBG("resources/images/backgrounds/000.jpg"); }
+
+ // Insert files
+ size = files.length;
+ for (i = 0; i < size; i++) {
+ var filePath = files[i].children[0].innerHTML;
+ var fileName = files[i].children[1].innerHTML
+
+ if (fileName != "sse.php" && fileName != "upload.php" &&
+ fileName != "open.php" && fileName != "process.php") {
+ insertArea.innerHTML += "