finished tag implementation

This commit is contained in:
ston1th 2019-08-24 14:27:58 +02:00
commit c3076c328a
28 changed files with 396 additions and 296 deletions

View file

@ -60,6 +60,7 @@ const (
<tr>
<th>Path</th>
<th>Type</th>
<th>Tags</th>
<th>Options</th>
</tr>
</thead>
@ -69,6 +70,7 @@ const (
<tr>
<th><a href="{{$item.Abs}}">{{$item.Name}}</a></th>
<td>Directory</td>
<td></td>
<td><div class="btn-group">
<a href="/move{{$item.Abs}}" class="btn btn-sm btn-primary">Move</a>
<a href="/delete{{$item.Abs}}" class="btn btn-sm btn-danger">Delete</a>
@ -79,6 +81,11 @@ const (
<tr>
<th><a href="{{$item.Abs}}">{{$item.Name}}</a></th>
<td>File</td>
<td>
{{range $t := $item.Tags}}
<code>{{$t}}</code>
{{end}}
</td>
<td><div class="btn-group">
{{if $item.Scan}}
<a href="#" class="btn btn-sm btn-warning">Scanning</a>
@ -160,7 +167,7 @@ const (
<title>DocStore | {{.Title}}</title>
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" integrity="sha256-bgotk/IPq4Yvt6s8AQGPTM5ZjPjQ6rrBRa2EyxpnFSc="></link>
<link rel="stylesheet" type="text/css" href="/bootstrap.css" media="screen" integrity="sha256-3YeveuySvBgp2GItUS8eV1R/9T1zcPMyvw22SyVf8qo="></link>
<link rel="stylesheet" type="text/css" href="/custom.css" media="screen" integrity="sha256-NLGEBzpF8t2UDEPzWyOYGGP/HWLNb29ar1MdYlwJroQ="></link>
<link rel="stylesheet" type="text/css" href="/custom.css" media="screen" integrity="sha256-TjpqFXPvQzoakyE489hpNO1YK+wUAVd/AdwqpNz1gwc="></link>
<meta name="theme-color" content="#375a7f">
<meta name="description" content="{{.Title}}">
</head>
@ -262,19 +269,32 @@ const (
</div>
</div>
</div>
{{end}}`
logs = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
</div>
</div>
<div class="row mt-3">
<textarea class="form-control input-sm md-text mono" rows="30" spellcheck="false" autofocus>{{.Data}}</textarea>
</div>
{{end}}`
menu = `{{define "menu"}}
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" href="/">Root</a></li>
{{if .Login}}
<li class="nav-item"><a class="nav-link" href="/tags">Tags</a></li>
<li class="nav-item"><a class="nav-link" href="/logs">Logs</a></li>
{{end}}
</ul>
{{if .Login}}
<form class="form-inline" method="post" action="/search">
<input type="hidden" name="token" value="{{.Token}}">
<input type="text" class="form-control mr-sm-2 menu" placeholder="Search" name="search" value="{{.Search}}" autocomplete="off">
<button class="btn btn-sm btn-info" type="submit">Search</button>
</form>
{{end}}
<ul class="nav navbar-nav ml-auto">
{{if .Login}}
<li class="nav-item"><a class="nav-link" href="/user/edit">Profile</a></li>
@ -327,9 +347,10 @@ const (
<input type="hidden" name="token" value="{{.Token}}">
<div class="form-group">
<label class="col-form-label" for="name">Name</label>
<input class="form-control input-sm" type="text" id="name" name="name" autocomplete="off" value="{{.Data}}">
<input class="form-control input-sm" type="text" id="name" name="name" autocomplete="off" value="{{.Data}}" autofocus required>
</div>
<button class="btn btn-sm btn-primary" type="submit">Create</button>
<a href="/" class="btn btn-sm btn-primary">Back</a>
</form>
</div>
</div>
@ -409,7 +430,7 @@ const (
<thead>
<tr>
<th>File</th>
<th>Keyword</th>
<th>Tags</th>
</tr>
</thead>
<tbody>
@ -421,7 +442,7 @@ const (
<br><pre class="wrap">{{$item.HTML}}</pre>
{{end}}
</td>
<td>{{$item.Keyword}}</td>
<td>{{$item.Tags}}</td>
</tr>
{{end}}
{{else}}
@ -439,17 +460,11 @@ const (
<strong>{{.BodyTitle}}</strong>
</div>
<div class="card-body">
<form class="form-horizontal" action="/tags/{{.Data.Name}}/edit" method="post">
<p>You are about to delete the tag
<a href="/tags/edit/{{.Data}}">{{.Data}}</a>.
<form class="form-horizontal" action="/tags/del/{{.Data}}" method="post">
<input type="hidden" name="token" value="{{.Token}}">
<div class="form-group">
<label class="col-form-label" for="name">Name</label>
<input class="form-control input-sm" type="text" id="name" name="name" disabled>
</div>
<div class="form-group">
<label class="col-form-label" for="regex">Regex</label>
<input class="form-control input-sm" type="text" id="regex" name="regex" value="{{.Data.Regex}}">
</div>
<button class="btn btn-sm btn-primary" type="submit">Update</button>
<button class="btn btn-sm btn-danger" type="submit">Delete</button>
<a href="/tags" class="btn btn-sm btn-primary">Back</a>
</form>
</div>
@ -459,21 +474,25 @@ const (
{{end}}`
tagsEdit = `{{define "body"}}
<div class="row">
<div class="col-xs-4 offset-4">
<div class="col-8 offset-2">
<div class="card border-primary mx-auto">
<div class="card-header">
<strong>{{.BodyTitle}}</strong>
</div>
<div class="card-body">
<form class="form-horizontal" action="/tags/{{.Data.Name}}/edit" method="post">
<div class="alert alert-dismissible alert-primary">
<strong>Note</strong> Editing a tag does not update tags already assigned to a document.
You need to reindex all documents to avoid false-positive searches.
</div>
<form class="form-horizontal" action="/tags/edit/{{.Data.Name}}" method="post">
<input type="hidden" name="token" value="{{.Token}}">
<div class="form-group">
<label class="col-form-label" for="name">Name</label>
<input class="form-control input-sm" type="text" id="name" name="name" disabled>
<input class="form-control input-sm" type="text" id="name" name="name" value="{{.Data.Name}}" disabled>
</div>
<div class="form-group">
<label class="col-form-label" for="regex">Regex</label>
<input class="form-control input-sm" type="text" id="regex" name="regex" value="{{.Data.Regex}}">
<input class="form-control input-sm mono" type="text" id="regex" name="regex" value="{{.Data.Regex}}" autofocus required>
</div>
<button class="btn btn-sm btn-primary" type="submit">Update</button>
<a href="/tags" class="btn btn-sm btn-primary">Back</a>
@ -484,6 +503,16 @@ const (
</div>
{{end}}`
tagsList = `{{define "body"}}
<div class="page-header">
<div class="row">
<h2>{{.BodyTitle}}</h2>
</div>
</div>
<div class="row mb-3">
<div class="col-xs-5">
<a class="btn btn-sm btn-primary" href="/tags/new"><b>New Tag</b></a>
</div>
</div>
<div class="row">
<table class="table table-stripped table-hover">
<thead>
@ -501,8 +530,8 @@ const (
<td>{{$item.Name}}</td>
<td><code>{{printf "%.50s" $item.Regex}}{{if gt $len 50}}...{{end}}</code></td>
<td><div class="btn-group">
<a href="/tags/{{$item.Name}}/edit" class="btn btn-sm btn-primary">Edit</a>
<a href="/tags/{{$item.Name}}/del" class="btn btn-sm btn-danger">Delete</a>
<a href="/tags/edit/{{$item.Name}}" class="btn btn-sm btn-primary">Edit</a>
<a href="/tags/del/{{$item.Name}}" class="btn btn-sm btn-danger">Delete</a>
</div></td>
</tr>
{{end}}
@ -510,6 +539,32 @@ const (
</tbody>
</table>
</div>
{{end}}`
tagsNew = `{{define "body"}}
<div class="row">
<div class="col-8 offset-2">
<div class="card border-primary mx-auto">
<div class="card-header">
<strong>{{.BodyTitle}}</strong>
</div>
<div class="card-body">
<form class="form-horizontal" action="/tags/new" method="post">
<input type="hidden" name="token" value="{{.Token}}">
<div class="form-group">
<label class="col-form-label" for="name">Name</label>
<input class="form-control input-sm" type="text" id="name" name="name" value="{{.Data.Name}}" autofocus required>
</div>
<div class="form-group">
<label class="col-form-label" for="regex">Regex</label>
<input class="form-control input-sm mono" type="text" id="regex" name="regex" value="{{.Data.Regex}}" required>
</div>
<button class="btn btn-sm btn-primary" type="submit">Create</button>
<a href="/tags" class="btn btn-sm btn-primary">Back</a>
</form>
</div>
</div>
</div>
</div>
{{end}}`
upload = `{{define "body"}}
<div class="row">
@ -723,6 +778,9 @@ code {
background-color: #444444;
border-radius: 2px;
}
embed {
background-color: #999999;
}
textarea,input,select {
color: #e2e2e2 !important;
background-color: #444444 !important;
@ -830,8 +888,11 @@ func (s *HTTPServer) loadTemplates() {
s.templ["userTotpHandler"] = parse(index, menu, userTotp)
// tags
s.templ["tagsHandler"] = parse(index, menu, tagsList)
s.templ["tagsNewHandler"] = parse(index, menu, tagsNew)
s.templ["tagsEditHandler"] = parse(index, menu, tagsEdit)
s.templ["tagsDelHandler"] = parse(index, menu, tagsDel)
// logs
s.templ["logsHandler"] = parse(index, menu, logs)
if fatal {
log.Fatal("parse: ", errors.New("parsing templates failed"))