add commands
This commit is contained in:
		
							parent
							
								
									fb4118f0d4
								
							
						
					
					
						commit
						30f077803b
					
				| 
						 | 
					@ -489,7 +489,8 @@ header p i {
 | 
				
			||||||
    vertical-align: middle;
 | 
					    vertical-align: middle;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
header form {
 | 
					header #search {
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
    display: inline-block;
 | 
					    display: inline-block;
 | 
				
			||||||
    height: 100%;
 | 
					    height: 100%;
 | 
				
			||||||
    padding: 0.75em;
 | 
					    padding: 0.75em;
 | 
				
			||||||
| 
						 | 
					@ -497,43 +498,81 @@ header form {
 | 
				
			||||||
    color: #fff;
 | 
					    color: #fff;
 | 
				
			||||||
    border-radius: 0.3em;
 | 
					    border-radius: 0.3em;
 | 
				
			||||||
    background-color: #1e88e5;
 | 
					    background-color: #1e88e5;
 | 
				
			||||||
 | 
					    transition: .1s ease all;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
header form i,
 | 
					header #search.active {
 | 
				
			||||||
header form input {
 | 
					    background-color: #fff;
 | 
				
			||||||
 | 
					    border-bottom-left-radius: 0;
 | 
				
			||||||
 | 
					    border-bottom-right-radius: 0;
 | 
				
			||||||
 | 
					    box-shadow: 0 1px 3px rgba(0, 0, 0, .06), 0 1px 2px rgba(0, 0, 0, .12);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header #search.active i,
 | 
				
			||||||
 | 
					header #search.active input {
 | 
				
			||||||
 | 
					    color: #212121;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header #search i,
 | 
				
			||||||
 | 
					header #search input {
 | 
				
			||||||
    vertical-align: middle;
 | 
					    vertical-align: middle;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
header form i {
 | 
					header #search i {
 | 
				
			||||||
    margin-right: 0.3em;
 | 
					    margin-right: 0.3em;
 | 
				
			||||||
    color: rgba(255, 255, 255, .5);
 | 
					    color: rgba(255, 255, 255, .5);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
header form input {
 | 
					header #search input {
 | 
				
			||||||
    min-width: 20em;
 | 
					    min-width: 20em;
 | 
				
			||||||
    border: 0;
 | 
					    border: 0;
 | 
				
			||||||
    outline: 0;
 | 
					    outline: 0;
 | 
				
			||||||
 | 
					    color: #fff;
 | 
				
			||||||
    background-color: transparent;
 | 
					    background-color: transparent;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
header form::-webkit-input-placeholder {
 | 
					header #search.active div {
 | 
				
			||||||
 | 
					    visibility: visible;
 | 
				
			||||||
 | 
					    opacity: 1;
 | 
				
			||||||
 | 
					    top: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header #search div {
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    left: 0;
 | 
				
			||||||
 | 
					    z-index: 999999;
 | 
				
			||||||
 | 
					    background-color: #fff;
 | 
				
			||||||
 | 
					    text-align: left;
 | 
				
			||||||
 | 
					    color: #ccc;
 | 
				
			||||||
 | 
					    box-shadow: 0 2px 3px rgba(0, 0, 0, .06), 0 2px 2px rgba(0, 0, 0, .12);
 | 
				
			||||||
 | 
					    padding: .5em;
 | 
				
			||||||
 | 
					    border-bottom-left-radius: .3em;
 | 
				
			||||||
 | 
					    border-bottom-right-radius: .3em;
 | 
				
			||||||
 | 
					    transition: .1s ease all;
 | 
				
			||||||
 | 
					    visibility: hidden;
 | 
				
			||||||
 | 
					    opacity: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header #search ::-webkit-input-placeholder {
 | 
				
			||||||
    /* WebKit, Blink, Edge */
 | 
					    /* WebKit, Blink, Edge */
 | 
				
			||||||
    color: rgba(255, 255, 255, .5);
 | 
					    color: rgba(255, 255, 255, .5);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
header form:-moz-placeholder {
 | 
					header #search :-moz-placeholder {
 | 
				
			||||||
    opacity: 1;
 | 
					    opacity: 1;
 | 
				
			||||||
    /* Mozilla Firefox 4 to 18 */
 | 
					    /* Mozilla Firefox 4 to 18 */
 | 
				
			||||||
    color: rgba(255, 255, 255, .5);
 | 
					    color: rgba(255, 255, 255, .5);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
header form::-moz-placeholder {
 | 
					header #search ::-moz-placeholder {
 | 
				
			||||||
    opacity: 1;
 | 
					    opacity: 1;
 | 
				
			||||||
    /* Mozilla Firefox 19+ */
 | 
					    /* Mozilla Firefox 19+ */
 | 
				
			||||||
    color: rgba(255, 255, 255, .5);
 | 
					    color: rgba(255, 255, 255, .5);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
header form:-ms-input-placeholder {
 | 
					header #search :-ms-input-placeholder {
 | 
				
			||||||
    /* Internet Explorer 10-11 */
 | 
					    /* Internet Explorer 10-11 */
 | 
				
			||||||
    color: rgba(255, 255, 255, .5);
 | 
					    color: rgba(255, 255, 255, .5);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -403,6 +403,50 @@ document.addEventListener("changed-selected", function(event) {
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var searchEvent = function(event) {
 | 
				
			||||||
 | 
					    let value = this.value;
 | 
				
			||||||
 | 
					    let box = document.querySelector('#search div');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (value.length == 0) {
 | 
				
			||||||
 | 
					        box.innerHTML = "Write your git, mercurial or svn command and press enter.";
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let pieces = value.split(' ');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (pieces[0] != "git" && pieces[0] != "hg" && pieces[0] != "svn") {
 | 
				
			||||||
 | 
					        box.innerHTML = "Command not supported."
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    box.innerHTML = "Press enter to continue."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (event.keyCode == 13) {
 | 
				
			||||||
 | 
					        let request = new XMLHttpRequest();
 | 
				
			||||||
 | 
					        request.open('POST', window.location);
 | 
				
			||||||
 | 
					        request.setRequestHeader('Command', value);
 | 
				
			||||||
 | 
					        request.send();
 | 
				
			||||||
 | 
					        request.onreadystatechange = function() {
 | 
				
			||||||
 | 
					            if (request.readyState == 4) {
 | 
				
			||||||
 | 
					                if (request.status == 501) {
 | 
				
			||||||
 | 
					                    box.innerHTML = "Command not implemented."
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (request.status == 500) {
 | 
				
			||||||
 | 
					                    box.innerHTML = "Something went wrong."
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (request.status == 200) {
 | 
				
			||||||
 | 
					                    let text = request.responseText;
 | 
				
			||||||
 | 
					                    text = text.substring(1, text.length - 1);
 | 
				
			||||||
 | 
					                    text = text.replace('\\n', "\n");
 | 
				
			||||||
 | 
					                    box.innerHTML = text;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
document.addEventListener('listing', event => {
 | 
					document.addEventListener('listing', event => {
 | 
				
			||||||
    // Handle date times
 | 
					    // Handle date times
 | 
				
			||||||
    let timeList = document.getElementsByTagName("time");
 | 
					    let timeList = document.getElementsByTagName("time");
 | 
				
			||||||
| 
						 | 
					@ -426,6 +470,17 @@ document.addEventListener('listing', event => {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    document.querySelector('#search input').addEventListener('focus', event => {
 | 
				
			||||||
 | 
					        document.getElementById('search').classList.add('active');
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    document.querySelector('#search input').addEventListener('blur', event => {
 | 
				
			||||||
 | 
					        document.getElementById('search').classList.remove('active');
 | 
				
			||||||
 | 
					        document.querySelector('#search input').value = '';
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    document.querySelector('#search input').addEventListener('keyup', searchEvent);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Enables upload button
 | 
					    // Enables upload button
 | 
				
			||||||
    document.getElementById("upload").addEventListener("click", (event) => {
 | 
					    document.getElementById("upload").addEventListener("click", (event) => {
 | 
				
			||||||
        document.getElementById("upload-input").click();
 | 
					        document.getElementById("upload-input").click();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,12 +39,13 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   <div>
 | 
					   <div>
 | 
				
			||||||
    {{ if .IsDir}}
 | 
					    {{ if .IsDir}}
 | 
				
			||||||
     <!--
 | 
					
 | 
				
			||||||
     <form>
 | 
					    <div id="search">
 | 
				
			||||||
        <i class="material-icons">search</i>
 | 
					        <i class="material-icons">storage</i>
 | 
				
			||||||
        <input type="text" placeholder="Search or command">
 | 
					        <input type="text" placeholder="Execute a command...">
 | 
				
			||||||
    </form>
 | 
					        <div>Write your git, mercurial or svn command and press enter.</div>
 | 
				
			||||||
    -->
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     <div class="action" id="view">
 | 
					     <div class="action" id="view">
 | 
				
			||||||
      <i class="material-icons">view_headline</i>
 | 
					      <i class="material-icons">view_headline</i>
 | 
				
			||||||
     </div>
 | 
					     </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,7 +98,7 @@ func (f FileManager) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, err
 | 
				
			||||||
				// VCS commands
 | 
									// VCS commands
 | 
				
			||||||
				if r.Header.Get("Command") != "" {
 | 
									if r.Header.Get("Command") != "" {
 | 
				
			||||||
					// TODO: not implemented on frontend
 | 
										// TODO: not implemented on frontend
 | 
				
			||||||
					vcsCommand(w, r, c)
 | 
										return vcsCommand(w, r, c)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				// Creates a new folder
 | 
									// Creates a new folder
 | 
				
			||||||
				// TODO: not implemented on frontend
 | 
									// TODO: not implemented on frontend
 | 
				
			||||||
| 
						 | 
					@ -209,8 +209,11 @@ func vcsCommand(w http.ResponseWriter, r *http.Request, c *config.Config) (int,
 | 
				
			||||||
		return http.StatusNotImplemented, nil
 | 
							return http.StatusNotImplemented, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						path := strings.Replace(r.URL.Path, c.BaseURL, c.PathScope, 1)
 | 
				
			||||||
 | 
						path = filepath.Clean(path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cmd := exec.Command(command[0], command[1:len(command)]...)
 | 
						cmd := exec.Command(command[0], command[1:len(command)]...)
 | 
				
			||||||
	cmd.Dir = c.PathScope
 | 
						cmd.Dir = path
 | 
				
			||||||
	output, err := cmd.CombinedOutput()
 | 
						output, err := cmd.CombinedOutput()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue