first working version

This commit is contained in:
ston1th 2018-09-14 00:14:49 +02:00
commit 85f93bae69
32 changed files with 863 additions and 571 deletions

View file

@ -1,12 +1,13 @@
// Copyright (C) 2017 Marius Schellenberger
// Copyright (C) 2018 Marius Schellenberger
// This file is auto-generated by build/templates.sh
// This file is auto-generated by templates.sh
// using the contents of the templates directory
package server
import (
"errors"
"git.giftfish.de/ston1th/gowiki/pkg/log"
"html/template"
)
@ -21,7 +22,7 @@ const (
<ul type="circle">
{{if .Data}}
{{range $item := .Data}}
<li><a href="/wiki/{{$item.LinkTitle}}"><b>{{$item.Title}}</b></a></li>
<li><a href="/{{$item.StoreTitle}}"><b>{{$item.Title}}</b></a></li>
{{end}}
{{end}}
</ul>
@ -118,16 +119,13 @@ const (
Index
</a></li>
<li><a href="/all">
All Articles
All Pages
</a></li>
{{if .Login}}
<li><a href="/new">
New Article
New Page
</a></li>
{{end}}
<li><a href="/snippets">
Snippets
</a></li>
</ul>
<form class="navbar-form navbar-left menu-search-bar" role="search" method="post" action="/search">
<input type="hidden" name="token" value="{{.Token}}">
@ -143,7 +141,7 @@ const (
<ul class="nav navbar-nav navbar-right">
{{if .Login}}
{{if .Admin}}
<li><a href="/users">
<li><a href="/user">
Users
</a></li>
{{else}}
@ -177,6 +175,217 @@ const (
</div>
</div>
</div>
{{end}}`
pageDel = `{{define "body"}}
<div class="page-header">
<div class="row">
<div class="col-xs-4 col-xs-offset-4">
<div class="panel panel-danger">
<div class="panel-heading">
<h3 class="panel-title">Delete {{.Data}}</h3>
</div>
<form class="form-horizontal" action="/{{.Data}}/del" method="post">
<input type="hidden" name="token" value="{{.Token}}">
<button class="btn btn-sm btn-danger lg-pull-right" type="submit">Delete</button>
</form>
<div class="panel-body text-center">
<a href="/{{.Data}}" class="btn btn-sm btn-primary">Back</a>
</div>
</div>
</div>
</div>
</div>
{{end}}`
pageEdit = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
</div>
</div>
<form class="form-horizontal" action="/{{.Data.StoreTitle}}/edit" method="post">
<input type="hidden" name="token" value="{{.Token}}">
<input type="hidden" name="store_title" value="{{if .Data}}{{.Data.StoreTitle}}{{end}}">
<fieldset>
<div class="form-group">
<label class="col-xs-1 control-label">Title</label>
<div class="col-xs-11">
<input class="form-control input-sm" type="text" value="{{if .Data}}{{.Data.Title}}{{end}}" spellcheck="false" disabled>
</div>
</div>
<div class="form-group">
<label class="col-xs-1 control-label">Markdown</label>
<div class="col-xs-11">
<textarea class="form-control input-sm md-text" rows="30" name="markdown" spellcheck="false" autofocus>{{if .Data}}{{.Data.Markdown}}{{end}}</textarea>
</div>
</div>
<div class="form-group">
<div class="col-xs-11">
<div class="custom-control custom-radio">
<input type="radio" id="perm1" name="perm" value="1" class="custom-control-input" checked="">
<label class="custom-control-label" for="perm1">Public</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="perm2" name="perm" value="2" class="custom-control-input">
<label class="custom-control-label" for="perm2">Internal</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="perm3" name="perm" value="3" class="custom-control-input">
<label class="custom-control-label" for="perm3">Private</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-11 col-xs-offset-1">
<button class="btn btn-sm btn-primary" type="submit">Submit</button>
</div>
</div>
</fieldset>
</form>
{{end}}`
page = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
</div>
</div>
<div class="row">
<strong>Created by:</strong> {{.Data.Created}}<br>
{{if .Data.Updated}}
<strong>Updated by:</strong> {{.Data.Updated}}{{end}}
<br><br>
</div>
<div class="row">
<div class="col-xs-6">
{{.Data.PageIndex}}
</div>
<div class="col-xs-6">
{{if .Login}}
<div class="row" style="padding-bottom: 14px">
<div class="col-xs-6 {{if ne .Data.StoreTitle "wiki/Index"}}col-xs-offset-4{{else}}col-xs-offset-6{{end}}">
<a href="/{{.Data.StoreTitle}}/edit" class="btn btn-sm btn-primary lg-pull-right">Edit</a>
</div>
{{if ne .Data.StoreTitle "wiki/Index"}}
<div class="col-xs-2">
<a href="/{{.Data.StoreTitle}}/del" class="btn btn-sm btn-primary lg-pull-right">Delete</a>
</div>
{{end}}
</div>
{{end}}
<div class="row">
<div class="col-xs-6 col-xs-offset-6">
<a href="/{{.Data.StoreTitle}}/md" class="btn btn-sm btn-primary lg-pull-right">Markdown</a>
</div>
{{if .Login}}
<div class="col-xs-6 col-xs-offset-6">
<a href="/{{.Data.StoreTitle}}/share" class="btn btn-sm btn-primary lg-pull-right">Share</a>
</div>
{{end}}
</div>
</div>
</div>
{{.Data.HTML}}
{{end}}`
pageMD = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
</div>
</div>
<textarea class="form-control input-sm md-text" rows="30" spellcheck="false" autofocus>{{if .Data}}{{.Data.Markdown}}{{end}}</textarea>
{{end}}`
pageNew = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
</div>
</div>
<form class="form-horizontal" action="/new" method="post">
<input type="hidden" name="token" value="{{.Token}}">
<fieldset>
<div class="form-group">
<label class="col-xs-1 control-label">Section</label>
<div class="col-xs-11">
<select class="form-control input-sm" name="section" autofocus required>
<option>wiki</option>
<option>{{.User}}</option>
</select>
</div>
<label class="col-xs-1 control-label">Title</label>
<div class="col-xs-11">
<input class="form-control input-sm" type="text" placeholder="Title" name="title" value="{{if .Data}}{{.Data.Title}}{{end}}" spellcheck="false" autofocus required>
</div>
</div>
<div class="form-group">
<label class="col-xs-1 control-label">Markdown</label>
<div class="col-xs-11">
<textarea class="form-control input-sm md-text" rows="30" name="markdown" spellcheck="false">{{if .Data}}{{.Data.Markdown}}{{end}}</textarea>
</div>
</div>
<div class="form-group">
<div class="col-xs-11">
<div class="custom-control custom-radio">
<input type="radio" id="perm1" name="perm" value="1" class="custom-control-input" checked="">
<label class="custom-control-label" for="perm1">Public</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="perm2" name="perm" value="2" class="custom-control-input">
<label class="custom-control-label" for="perm2">Internal</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="perm3" name="perm" value="3" class="custom-control-input">
<label class="custom-control-label" for="perm3">Private</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-11 col-xs-offset-1">
<button class="btn btn-sm btn-primary" type="submit">Submit</button>
</div>
</div>
</fieldset>
</form>
{{end}}`
pageShare = `{{define "body"}}
<div class="page-header">
<div class="row">
<div class="col-xs-4 col-xs-offset-4">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">Share {{.Data}}</h3>
</div>
<div class="panel-body text-center">
<a href="/view/{{.Key}}">Share Link</a>
</div>
</div>
</div>
</div>
</div>
{{end}}`
pageView = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
</div>
</div>
<div class="row">
<strong>Created by:</strong> {{.Data.Created}}<br>
{{if .Data.Updated}}
<strong>Updated by:</strong> {{.Data.Updated}}{{end}}
<br><br>
</div>
<div class="row">
<div class="col-xs-6">
{{.Data.PageIndex}}
</div>
<div class="col-xs-6">
<div class="row">
<div class="col-xs-6 col-xs-offset-6">
<a href="/view/{{.Key}}/md" class="btn btn-sm btn-primary lg-pull-right">Markdown</a>
</div>
</div>
</div>
</div>
{{.Data.HTML}}
{{end}}`
search = `{{define "body"}}
<div class="page-header">
@ -202,8 +411,9 @@ const (
</form>
</div>
<div class="row col-xs-12">
{{if .Data}}
{{.Data}}
{{range $item := .Data}}
<a href="/{{$item.StireTitle}}"><b>{{$item.Title}}</b></a>
<pre style="white-space:pre-wrap">{{$item.Text}}</pre><br>
{{end}}
</div>
{{end}}`
@ -294,48 +504,7 @@ const (
{{end}}
{{end}}
{{end}}`
userNew = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
</div>
</div>
<form class="form-horizontal" action="/user/new" method="post">
<input type="hidden" name="token" value="{{.Token}}">
<fieldset>
<div class="form-group">
<label class="col-lg-3 control-label">Username</label>
<div class="col-lg-6">
<input class="form-control input-sm" type="text" name="user" value required>
</div>
</div>
<div class="form-group">
<label class="col-lg-3 control-label">Password</label>
<div class="col-lg-6">
<input class="form-control input-sm" type="password" name="password" value required>
</div>
</div>
<div class="form-group">
<label class="col-lg-3 control-label">Repeat</label>
<div class="col-lg-6">
<input class="form-control input-sm" type="password" name="repeat" value required>
</div>
</div>
<div class="form-group">
<label class="col-lg-3 control-label">Admin Privileges</label>
<div class="col-lg-6">
<input type="checkbox" name="admin" value="0">
</div>
</div>
<div class="form-group">
<div class="col-lg-6 col-lg-offset-3">
<button class="btn btn-sm btn-primary" type="submit" name="submit" value="Submit">Submit</button>
</div>
</div>
</fieldset>
</form>
{{end}}`
users = `{{define "body"}}
user = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
@ -386,151 +555,45 @@ const (
{{end}}
</div>
{{end}}`
wikiEdit = `{{define "body"}}
{{if .Editor}}
<div class="alert alert-warning" style="margin-top:30px">
<h4>Warning!</h4>
<p><strong>{{.Editor.Username}}</strong> is editing this page since {{.Editor.Time}}</p>
</div>
{{end}}
userNew = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
</div>
</div>
<form class="form-horizontal" action="/wiki/{{.Data.LinkTitle}}/edit" method="post">
<input type="hidden" name="token" value="{{.Token}}">
<input type="hidden" name="title" value="{{if .Data}}{{.Data.Title}}{{end}}">
<fieldset>
<div class="form-group">
<label class="col-xs-1 control-label">Title</label>
<div class="col-xs-11">
<input class="form-control input-sm" type="text" value="{{if .Data}}{{.Data.Title}}{{end}}" spellcheck="false" disabled>
</div>
</div>
<div class="form-group">
<label class="col-xs-1 control-label">Text</label>
<div class="col-xs-11">
<textarea class="form-control input-sm md-text" rows="30" name="text" spellcheck="false" autofocus>{{if .Data}}{{.Data.MD}}{{end}}</textarea>
</div>
</div>
<div class="form-group">
<div class="col-xs-11">
<div class="custom-control custom-radio">
<input type="radio" id="perm1" name="perm" value="0" class="custom-control-input" checked="">
<label class="custom-control-label" for="perm1">Public</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="perm2" name="perm" value="1" class="custom-control-input">
<label class="custom-control-label" for="perm2">Internal</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="perm3" name="perm" value="2" class="custom-control-input">
<label class="custom-control-label" for="perm3">Private</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-11 col-xs-offset-1">
<button class="btn btn-sm btn-primary" type="submit" name="submit" value="Submit">Submit</button>
<button class="btn btn-sm btn-default" type="submit" name="submit" value="Back">Back</button>
</div>
</div>
</fieldset>
</form>
{{end}}`
wiki = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
</div>
</div>
<div class="row">
<strong>Created by:</strong> {{.Data.Created}}<br>
{{if .Data.Updated}}
<strong>Updated by:</strong> {{.Data.Updated}}{{end}}
<br><br>
</div>
<div class="row">
<div class="col-xs-6">
{{.Data.Index}}
</div>
<div class="col-xs-6">
{{if .Login}}
<div class="row" style="padding-bottom: 14px">
<div class="col-xs-6 {{if ne .Data.LinkTitle "Index"}}col-xs-offset-4{{else}}col-xs-offset-6{{end}}">
<a href="/wiki/{{.Data.LinkTitle}}/edit" class="btn btn-sm btn-primary lg-pull-right">Edit</a>
</div>
{{if ne .Data.LinkTitle "Index"}}
<div class="col-xs-2">
<form class="form-horizontal" action="/wiki/{{.Data.LinkTitle}}/del" method="post">
<input type="hidden" name="token" value="{{.Token}}">
<button class="btn btn-sm btn-danger lg-pull-right" type="submit" name="submit" value="Delete">Delete</button>
</form>
</div>
{{end}}
</div>
{{end}}
<div class="row">
<div class="col-xs-6 col-xs-offset-6">
<a href="/wiki/{{.Data.LinkTitle}}/md" class="btn btn-sm btn-primary lg-pull-right">Markdown</a>
</div>
<form class="form-horizontal" action="/user/new" method="post">
<input type="hidden" name="token" value="{{.Token}}">
<fieldset>
<div class="form-group">
<label class="col-lg-3 control-label">Username</label>
<div class="col-lg-6">
<input class="form-control input-sm" type="text" name="user" value required>
</div>
</div>
</div>
{{.Data.Text}}
{{end}}`
wikiMD = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
<div class="form-group">
<label class="col-lg-3 control-label">Password</label>
<div class="col-lg-6">
<input class="form-control input-sm" type="password" name="password" value required>
</div>
</div>
</div>
<textarea class="form-control input-sm md-text" rows="30" spellcheck="false" autofocus>{{if .Data}}{{.Data.MD}}{{end}}</textarea>
{{end}}`
wikiNew = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
<div class="form-group">
<label class="col-lg-3 control-label">Repeat</label>
<div class="col-lg-6">
<input class="form-control input-sm" type="password" name="repeat" value required>
</div>
</div>
</div>
<form class="form-horizontal" action="/new" method="post">
<input type="hidden" name="token" value="{{.Token}}">
<fieldset>
<div class="form-group">
<label class="col-xs-1 control-label">Title</label>
<div class="col-xs-11">
<input class="form-control input-sm" type="text" placeholder="Title" name="title" value="{{if .Data}}{{.Data.Title}}{{end}}" spellcheck="false" autofocus required>
</div>
<div class="form-group">
<label class="col-lg-3 control-label">Admin Privileges</label>
<div class="col-lg-6">
<input type="checkbox" name="admin" value="0">
</div>
<div class="form-group">
<label class="col-xs-1 control-label">Text</label>
<div class="col-xs-11">
<textarea class="form-control input-sm md-text" rows="30" name="text" spellcheck="false">{{if .Data}}{{.Data.MD}}{{end}}</textarea>
</div>
</div>
<div class="form-group">
<div class="col-lg-6 col-lg-offset-3">
<button class="btn btn-sm btn-primary" type="submit" name="submit" value="Submit">Submit</button>
</div>
<div class="form-group">
<div class="col-xs-11">
<div class="custom-control custom-radio">
<input type="radio" id="perm1" name="perm" value="0" class="custom-control-input" checked="">
<label class="custom-control-label" for="perm1">Public</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="perm2" name="perm" value="1" class="custom-control-input">
<label class="custom-control-label" for="perm2">Internal</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="perm3" name="perm" value="2" class="custom-control-input">
<label class="custom-control-label" for="perm3">Private</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-11 col-xs-offset-1">
<button class="btn btn-sm btn-primary" type="submit" name="submit" value="Submit">Submit</button>
</div>
</div>
</fieldset>
</div>
</fieldset>
</form>
{{end}}`
bootstrapCSS = `@import url("https://fonts.googleapis.com/css?family=Lato:400,700,400italic");/*!
@ -693,12 +756,15 @@ func (s *HTTPServer) loadTemplates() {
s.templ["loginHandler"] = parse(index, menu, login)
s.templ["searchHandler"] = parse(index, menu, search)
s.templ["allHandler"] = parse(index, menu, all)
s.templ["wikiNewHandler"] = parse(index, menu, wikiNew)
s.templ["wikiEditHandler"] = parse(index, menu, wikiEdit)
s.templ["wikiHandler"] = parse(index, menu, wiki)
s.templ["wikiMDHandler"] = parse(index, menu, wikiMD)
s.templ["pageHandler"] = parse(index, menu, page)
s.templ["pageNewHandler"] = parse(index, menu, pageNew)
s.templ["pageEditHandler"] = parse(index, menu, pageEdit)
s.templ["pageViewHandler"] = parse(index, menu, pageView)
s.templ["pageMDHandler"] = parse(index, menu, pageMD)
s.templ["pageShareHandler"] = parse(index, menu, pageShare)
s.templ["pageDelHandler"] = parse(index, menu, pageDel)
// users.go
s.templ["usersHandler"] = parse(index, menu, users)
s.templ["userHandler"] = parse(index, menu, user)
s.templ["userNewHandler"] = parse(index, menu, userNew)
s.templ["userEditHandler"] = parse(index, menu, userEdit)
s.templ["userDelHandler"] = parse(index, menu, userDel)