close #71; fix bugs

pull/78/head
Henrique Dias 2016-06-07 18:15:55 +01:00
parent acc4c92b15
commit 4cd72ca58d
11 changed files with 38 additions and 32 deletions

File diff suppressed because one or more lines are too long

View File

@ -1,10 +1,14 @@
var basePath = "/";
$(document).ready(function() {
basePath += window.location.pathname.split('/')[0];
// Log out the user sending bad credentials to the server
$("#logout").click(function(event) {
event.preventDefault();
$.ajax({
type: "GET",
url: "/admin",
url: basePath + "",
async: false,
username: "username",
password: "password",

View File

@ -247,7 +247,7 @@ $(document).on('page:browse', function() {
}
if (filename.substring(0, 1) != "/") {
filename = window.location.pathname.replace("/admin/browse/", "") + '/' + filename;
filename = window.location.pathname.replace(basePath + "/browse/", "") + '/' + filename;
}
var content = {
@ -323,7 +323,7 @@ $(document).on('page:browse', function() {
}
var request = new XMLHttpRequest();
request.open("POST", "/admin/git");
request.open("POST", basePath + "/git");
request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
request.send(JSON.stringify({
command: value

View File

@ -103,6 +103,8 @@ $(document).on('page:editor', function() {
regenerate: button.data("regenerate")
}
console.log(JSON.stringify(data));
var request = new XMLHttpRequest();
request.open("POST", window.location);
request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
@ -155,7 +157,6 @@ $(document).on('page:editor', function() {
input = input.replace(/\[/, '\\[');
input = input.replace(/\]/, '\\]');
block.append('<div id="' + newID + '-' + $('#' + input + ' > div').length + '" data-type="array-item"><input name="' + newID + ':auto" id="' + newID + '"></input><span class="actions"> <button class="delete">&#8722;</button></span></div></div>');
console.log('New array item added.');
}
// Main add button, after all blocks
@ -241,8 +242,6 @@ $(document).on('page:editor', function() {
template = template.replace("${type}", type);
newItem.after(template);
newItem.remove();
console.log('"' + blockID + '" block of type "' + type + '" added.');
}
return false;
@ -260,7 +259,6 @@ $(document).on('page:editor', function() {
name = button.parent().parent().attr("for") || button.parent().parent().attr("id") || button.parent().parent().parent().attr("id");
name = name.replace(/\[/, '\\[');
name = name.replace(/\]/, '\\]');
console.log(name)
$('label[for="' + name + '"]').fadeOut().remove();
$('#' + name).fadeOut().remove();

View File

@ -9,23 +9,21 @@
<title>{{ if Defined . "Name" }}{{ .Name }}{{ end }}</title>
<link href='https://fonts.googleapis.com/css?family=Roboto:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="/admin/assets/css/main.min.css">
{{ if and (Defined . "Config")}}{{ if not (eq .Config.Styles "") }}<link rel="stylesheet" href="{{ .Config.Styles }}">{{ end }}{{ end }}
{{ if and (Defined . "User") }}{{ if not (eq .User.Styles "") }}<link rel="stylesheet" href="{{ .User.Styles }}">{{ end }}{{ end }}
<link rel="stylesheet" href="{{ if and (Defined . "User") }}{{ .User.Admin }}{{ else }}{{ .Config.Admin }}{{ end }}/assets/css/main.min.css">
{{ if not (eq .Config.Styles "") }}<link rel="stylesheet" href="{{ .Config.Styles }}">{{ end }}
<script src="/admin/assets/js/plugins.min.js"></script>
<script src="{{ if and (Defined . "User") }}{{ .User.Admin }}{{ else }}{{ .Config.Admin }}{{ end }}/assets/js/plugins.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.3/ace.js"></script>
<script src="/admin/assets/js/app.min.js"></script>
<script src="{{ if and (Defined . "User") }}{{ .User.Admin }}{{ else }}{{ .Config.Admin }}{{ end }}/assets/js/app.min.js"></script>
</head>
<body>
<nav>
<ul class="container">
<li><a href="/"><i class="fa fa-home fa-lg"></i><span> Go to website</span></a></li>
<li><a data-pjax href="/admin/browse/content/"><i class="fa fa-newspaper-o"></i><span> Content</span></a></li>
<li><a data-pjax href="/admin/browse/"><i class="fa fa-folder-o"></i><span> Browse</span></a></li>
<li><a data-pjax href="/admin/settings/"><i class="fa fa-cog"></i><span> Settings</span></a></li>
<li><a data-pjax href="{{ if and (Defined . "User") }}{{ .User.Admin }}{{ else }}{{ .Config.Admin }}{{ end }}/browse/content/"><i class="fa fa-newspaper-o"></i><span> Content</span></a></li>
<li><a data-pjax href="{{ if and (Defined . "User") }}{{ .User.Admin }}{{ else }}{{ .Config.Admin }}{{ end }}/browse/"><i class="fa fa-folder-o"></i><span> Browse</span></a></li>
<li><a data-pjax href="{{ if and (Defined . "User") }}{{ .User.Admin }}{{ else }}{{ .Config.Admin }}{{ end }}/settings/"><i class="fa fa-cog"></i><span> Settings</span></a></li>
<li><a data-pjax id="logout" href="#logout"><i class="fa fa-sign-out"></i><span> Logout</span></a></li>
</ul>
</nav>

View File

@ -1,4 +1,6 @@
{{ define "content" }}{{ $path := .Path }}
{{ define "content" }}
{{ $path := .Path }}
{{ $admin := .User.Admin }}
<main class="browse">
<div class="actions">
@ -42,12 +44,12 @@
<td>
{{if .IsDir}}
<i class="fa fa-folder"></i> <a data-pjax class="filename" href="{{.URL}}">{{.Name}}</a> {{else}} {{ if CanBeEdited .URL }}
<i class="fa fa-file"></i> <a data-pjax class="file filename" href="/admin/edit{{ $path }}{{.URL}}">{{.Name}}</a> {{ else }}
<i class="fa fa-file"></i> <a data-pjax class="file filename" href="{{ $admin }}/edit{{ $path }}{{.URL}}">{{.Name}}</a> {{ else }}
<i class="fa fa-file"></i> <span class="filename">{{.Name}}</span> {{ end }} {{ end }}
</td>
<td class="right hideable">{{.HumanSize}}</td>
<td class="right hideable">{{.HumanModTime "01/02/2006 3:04:05 PM"}}</td>
<td class="right"><button data-file="/admin/browse{{ $path }}{{.URL}}" data-message="File renamed." class="rename">&#9998;</button> <button data-file="/admin/browse{{ $path }}{{.URL}}" data-message="File deleted." class="delete">&#10006;</button></td>
<td class="right"><button data-file="{{ $admin }}/browse{{ $path }}{{.URL}}" data-message="File renamed." class="rename">&#9998;</button> <button data-file="{{ $admin }}/browse{{ $path }}{{.URL}}" data-message="File deleted." class="delete">&#10006;</button></td>
</tr>
{{end}}
</table>

View File

@ -21,13 +21,13 @@ type response struct {
func ServeHTTP(w http.ResponseWriter, r *http.Request, c *config.Config) (int, error) {
conf = c
// Removes the page main path from the URL
r.URL.Path = strings.Replace(r.URL.Path, "/admin/browse", "", 1)
r.URL.Path = strings.Replace(r.URL.Path, c.Admin+"/browse", "", 1)
switch r.Method {
case "DELETE":
return DELETE(w, r)
case "POST":
return POST(w, r)
return POST(w, r, c)
case "GET":
return GET(w, r)
case "PUT":

View File

@ -10,13 +10,14 @@ import (
"path/filepath"
"strings"
"github.com/hacdias/caddy-hugo/config"
"github.com/hacdias/caddy-hugo/tools/commands"
s "github.com/hacdias/caddy-hugo/tools/server"
)
// POST handles the POST method on browse page. It's used to create new files,
// folders and upload content.
func POST(w http.ResponseWriter, r *http.Request) (int, error) {
func POST(w http.ResponseWriter, r *http.Request, c *config.Config) (int, error) {
// Remove prefix slash
r.URL.Path = strings.TrimPrefix(r.URL.Path, "/")
@ -47,7 +48,7 @@ func POST(w http.ResponseWriter, r *http.Request) (int, error) {
filename := info["filename"].(string)
filename = strings.TrimPrefix(filename, "/")
filename = strings.TrimSuffix(filename, "/")
url := "/admin/edit/" + r.URL.Path + filename
url := c.Admin + "/edit/" + r.URL.Path + filename
filename = conf.Path + r.URL.Path + filename
if strings.HasPrefix(filename, conf.Path+"content/") &&

View File

@ -10,7 +10,7 @@ import (
"github.com/hacdias/caddy-hugo/tools/server"
)
// PUT handles the HTTP PUT request for all /admin/browse related requests.
// PUT handles the HTTP PUT request for all /{admin}/browse related requests.
// Renames a file and/or a folder.
func PUT(w http.ResponseWriter, r *http.Request) (int, error) {
// Remove both beginning and trailing slashes

View File

@ -16,7 +16,7 @@ var (
// ServeHTTP serves the editor page
func ServeHTTP(w http.ResponseWriter, r *http.Request, c *config.Config) (int, error) {
conf = c
filename = strings.Replace(r.URL.Path, "/admin/edit/", "", 1)
filename = strings.Replace(r.URL.Path, c.Admin+"/edit/", "", 1)
filename = c.Path + filename
switch r.Method {

View File

@ -4,6 +4,7 @@ import (
"bytes"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"net/http"
"path/filepath"
@ -17,8 +18,6 @@ import (
"github.com/spf13/hugo/parser"
)
var data info
type info struct {
ContentType string
Schedule bool
@ -32,11 +31,15 @@ type response struct {
// POST handles the POST method on editor page
func POST(w http.ResponseWriter, r *http.Request) (int, error) {
var data info
// Get the JSON information sent using a buffer
rawBuffer := new(bytes.Buffer)
rawBuffer.ReadFrom(r.Body)
err := json.Unmarshal(rawBuffer.Bytes(), &data)
fmt.Println(string(rawBuffer.Bytes()))
if err != nil {
return server.RespondJSON(w, &response{"Error decrypting json."}, http.StatusInternalServerError, err)
}
@ -46,7 +49,7 @@ func POST(w http.ResponseWriter, r *http.Request) (int, error) {
switch data.ContentType {
case "frontmatter-only":
f, code, err := parseFrontMatterOnlyFile()
f, code, err := parseFrontMatterOnlyFile(data)
if err != nil {
return server.RespondJSON(w, &response{err.Error()}, code, err)
}
@ -59,7 +62,7 @@ func POST(w http.ResponseWriter, r *http.Request) (int, error) {
file = []byte(mainContent)
case "complete":
f, code, err := parseCompleteFile()
f, code, err := parseCompleteFile(data)
if err != nil {
return server.RespondJSON(w, &response{err.Error()}, code, err)
}
@ -83,7 +86,7 @@ func POST(w http.ResponseWriter, r *http.Request) (int, error) {
return server.RespondJSON(w, nil, http.StatusOK, nil)
}
func parseFrontMatterOnlyFile() ([]byte, int, error) {
func parseFrontMatterOnlyFile(data info) ([]byte, int, error) {
frontmatter := strings.TrimPrefix(filepath.Ext(filename), ".")
var mark rune
@ -121,7 +124,7 @@ func parseFrontMatterOnlyFile() ([]byte, int, error) {
return f, http.StatusOK, nil
}
func parseCompleteFile() ([]byte, int, error) {
func parseCompleteFile(data info) ([]byte, int, error) {
// The main content of the file
mainContent := data.Content["content"].(string)
mainContent = "\n\n" + strings.TrimSpace(mainContent) + "\n"