Archetypes working :)

pull/82/head
Henrique Dias 2016-06-29 14:57:40 +01:00
parent 049bc2fe0f
commit 53c7ea422d
4 changed files with 121 additions and 36 deletions

View File

@ -0,0 +1,32 @@
{
"js": {
"allowed_file_extensions": ["js", "json", "jshintrc", "jsbeautifyrc"],
// Set brace_style
// collapse: (old default) Put braces on the same line as control statements
// collapse-preserve-inline: (new default) Same as collapse but better support for ES6 destructuring and other features. https://github.com/victorporof/Sublime-HTMLPrettify/issues/231
// expand: Put braces on own line (Allman / ANSI style)
// end-expand: Put end braces on own line
// none: Keep them where they are
"brace_style": "collapse-preserve-inline",
"break_chained_methods": false, // Break chained method calls across subsequent lines
"e4x": false, // Pass E4X xml literals through untouched
"end_with_newline": false, // End output with newline
"indent_char": " ", // Indentation character
"indent_level": 0, // Initial indentation level
"indent_size": 4, // Indentation size
"indent_with_tabs": false, // Indent with tabs, overrides `indent_size` and `indent_char`
"jslint_happy": false, // If true, then jslint-stricter mode is enforced
"keep_array_indentation": false, // Preserve array indentation
"keep_function_indentation": false, // Preserve function indentation
"max_preserve_newlines": 0, // Maximum number of line breaks to be preserved in one chunk (0 disables)
"preserve_newlines": true, // Whether existing line breaks should be preserved
"space_after_anon_function": false, // Should the space before an anonymous function's parens be added, "function()" vs "function ()"
"space_before_conditional": true, // Should the space before conditional statement be added, "if(true)" vs "if (true)"
"space_in_empty_paren": false, // Add padding spaces within empty paren, "f()" vs "f( )"
"space_in_paren": false, // Add padding spaces within paren, ie. f( a, b )
"unescape_strings": false, // Should printable characters in strings encoded in \xNN notation be unescaped, "example" vs "\x65\x78\x61\x6d\x70\x6c\x65"
"wrap_line_length": 0 // Lines should wrap at next opportunity after this number of characters (0 disables)
}
}

View File

@ -8,9 +8,47 @@ document.addEventListener('DOMContentLoaded', event => {
</a>`); </a>`);
}); });
document.addEventListener('listing', event => { document.addEventListener('listing', event => {
if (window.location.pathname.includes('/content/')) {
document.getElementById('newdir').placeholder = "file[:archetype]..."; document.getElementById('newdir').placeholder = "file[:archetype]...";
document.getElementById('newdir').removeEventListener('keydown', newDirEvent);
document.getElementById('newdir').addEventListener('keydown', event => {
if (event.keyCode == 27) {
document.getElementById('newdir').classList.toggle('enabled');
setTimeout(() => {
document.getElementById('newdir').value = '';
}, 200);
}
if (event.keyCode == 13) {
event.preventDefault();
let value = document.getElementById('newdir').value;
let index = value.lastIndexOf(':');
let name = value.substring(0, index);
let archetype = value.substring(index + 1, value.length);
if (name == "") name = archetype;
if (index == -1) archetype = "";
let button = document.getElementById('new');
let html = button.changeToLoading();
let request = new XMLHttpRequest();
request.open("POST", window.location);
request.setRequestHeader('Filename', name);
request.setRequestHeader('Archetype', archetype);
request.send();
request.onreadystatechange = function() {
if (request.readyState == 4) {
button.changeToDone((request.status != 200), html);
if (request.status == 200) {
window.location = window.location.pathname + name;
}
}
}
}
});
}
}); });
document.addEventListener('editor', event => { document.addEventListener('editor', event => {

19
hugo.go
View File

@ -67,8 +67,23 @@ func (h Hugo) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) {
} }
if r.Method == http.MethodPost && r.Header.Get("archetype") != "" { if r.Method == http.MethodPost && r.Header.Get("archetype") != "" {
// TODO: this filename := r.Header.Get("Filename")
return 0, nil archetype := r.Header.Get("archetype")
if !strings.HasSuffix(filename, ".md") && !strings.HasSuffix(filename, ".markdown") {
return h.FileManager.ServeHTTP(w, r)
}
filename = strings.Replace(r.URL.Path, h.Config.BaseURL+"/content/", "", 1) + filename
filename = filepath.Clean(filename)
args := []string{"new", filename, "--kind", archetype}
if err := commands.Run(h.Config.Hugo, args, h.Config.Root); err != nil {
return http.StatusInternalServerError, err
}
return http.StatusOK, nil
} }
if directory.CanBeEdited(r.URL.Path) && r.Method == http.MethodPut { if directory.CanBeEdited(r.URL.Path) && r.Method == http.MethodPut {

View File

@ -9,7 +9,7 @@ import (
func Run(command string, args []string, path string) error { func Run(command string, args []string, path string) error {
cmd := exec.Command(command, args...) cmd := exec.Command(command, args...)
cmd.Dir = path cmd.Dir = path
cmd.Stdout = os.Stderr cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
return cmd.Run() return cmd.Run()
} }