Port the web to bootstrap5

So it is responsive in phones.
This commit is contained in:
Las Zenow 2017-06-08 00:44:35 +00:00
parent 8af2ad3758
commit 6a3da59c75
40 changed files with 1131 additions and 849 deletions

View file

@ -5,111 +5,165 @@
{{with .Book}}
<script>
function delBook(){
var div = document.getElementById('delete');
div.innerHTML =
'<div class="alert alert-error fade in"> \
<a class="close" data-dismiss="alert">×</a> \
<h4 class="alert-heading">Do you really want to delete it?</h4> \
<p>Remove a book is permanent, you won\'t be able to get it back</p> \
<a class="btn btn-danger" href="/delete/{{.ID}}/">Remove it</a> \
<a class="btn" href="#" data-dismiss="alert">Cancel</a> \
</div>';
const div = document.getElementById('delete');
div.classList.remove("visually-hidden");
}
function closeAlert() {
const div = document.getElementById('delete');
div.classList.add("visually-hidden");
}
</script>
<div id="delete"></div>
<div id="delete" class="alert alert-danger fade visually-hidden show" role="alert">
<div class="row">
<div class="col-11">
<h4 class="alert-heading">Do you really want to delete it?</h4>
<p>Remove a book is permanent, you won't be able to get it back</p>
<a class="btn btn-danger" href="/delete/{{.ID}}/">Remove it</a>
<a class="btn" href="#" onClick="closeAlert();">Cancel</a>
</div>
<div class="col-1 justify-content-end">
<button type="button" class="btn-close" onClick="closeAlert();"></button>
</div>
</div>
</div>
<header class="row">
<div class="span8 offset4">
<header class="row justify-content-end">
<h1>{{.Title}}
{{if not .Active}}
<span class="label label-warning">waiting for moderation</span>
<span class="badge label-warning text-dark">waiting for moderation</span>
{{end}}
</h1>
</div>
</header>
<div class="row">
{{if .Cover}}
<div class="span4">
<img src="/cover/{{.ID}}/big/{{.Title}}.jpg" alt="{{.Title}}" class="pull-right" />
{{if .Cover}}
<div class="col-sm-4 text-center">
<img src="/cover/{{.ID}}/big/{{.Title}}.jpg" alt="{{.Title}}" class="float-sm-end img-fluid" />
</div>
{{end}}
{{end}}
<div class="span8">
<div class="row"><p></p></div>
<div class="row">
<div class="span5">
<dl class="dl-horizontal">
{{if .Authors}}<dt>Authors</dt> <dd>{{range .Authors}}<a href="/search/?q=author:{{.}}">{{.}}</a>, {{end}}</dd>{{end}}
{{if .Publisher}}<dt>Publisher</dt> <dd><a href="/search/?q=publisher:{{.Publisher}}">{{.Publisher}}</a></dd>{{end}}
{{if .Tags}}<dt>Tags</dt> <dd>{{range .Tags}}<a href="/search/?q=tag:{{.}}">{{.}}</a>, {{end}}</dd>{{end}}
{{if .Isbn}}<dt>ISBN</dt> <dd>{{.Isbn}}</dd>{{end}}
{{if .Date}}<dt>Date</dt> <dd>{{.Date}}</dd>{{end}}
{{if .FileSize}}<dt>Size</dt> <dd>{{printf "%.2f" (size2mb .FileSize)}} MB</dd>{{end}}
{{if .Lang}}<dt>Lang</dt> <dd><a href="/search/?q=lang:{{.Lang}}">{{.Lang}}</a> </dd>{{end}}
</dl>
</div>
<div class="span3">
<div class="row">
<div class="btn-group pull-right">
<a href="{{download_url .}}" class="btn btn-large btn-inverse"><i class="icon-download-alt icon-white"></i> download</a>
<a href="/read/{{.ID}}" class="btn btn-large btn-warning"><i class="icon-eye-open icon-white"></i> read it!</a>
<div class="col-sm-8">
<div class="row">
<div class="col-md-8">
<dl class="row">
{{if .Authors}}
<dt class="col-sm-3 text-sm-end">Authors</dt>
<dd class="col-sm-9 text-start">{{range .Authors}}<a href="/search/?q=author:{{.}}">{{.}}</a>, {{end}}</dd>
{{end}}
{{if .Publisher}}
<dt class="col-sm-3 text-sm-end">Publisher</dt>
<dd class="col-sm-9 text-start"><a href="/search/?q=publisher:{{.Publisher}}">{{.Publisher}}</a></dd>
{{end}}
{{if .Tags}}
<dt class="col-sm-3 text-sm-end">Tags</dt>
<dd class="col-sm-9 text-start">{{range .Tags}}<a href="/search/?q=tag:{{.}}">{{.}}</a>, {{end}}</dd>
{{end}}
{{if .Isbn}}
<dt class="col-sm-3 text-sm-end">ISBN</dt>
<dd class="col-sm-9 text-start">{{.Isbn}}</dd>
{{end}}
{{if .Date}}
<dt class="col-sm-3 text-sm-end">Date</dt>
<dd class="col-sm-9 text-start">{{.Date}}</dd>
{{end}}
{{if .FileSize}}
<dt class="col-sm-3 text-sm-end">Size</dt>
<dd class="col-sm-9 text-start">{{printf "%.2f" (size2mb .FileSize)}} MB</dd>
{{end}}
{{if .Lang}}
<dt class="col-sm-3 text-sm-end">Lang</dt>
<dd class="col-sm-9 text-start"><a href="/search/?q=lang:{{.Lang}}">{{.Lang}}</a> </dd>
{{end}}
</dl>
</div>
<div class="col-md-4">
<div class="btn-group d-flex justify-content-end">
<a href="{{download_url .}}" class="btn btn-dark btn-sm">
<svg class="bi" width="1em" height="1em" fill="currentColor">
<use xlink:href="/img/bootstrap-icons.svg#file-earmark-arrow-down"/>
</svg>
download
</a>
<a href="/read/{{.ID}}" class="btn btn-warning btn-sm">
<svg class="bi" width="1em" height="1em" fill="currentColor">
<use xlink:href="/img/bootstrap-icons.svg#eyeglasses"/>
</svg>
read it!
</a>
</div>
<div class="pull-right">
<small>Downloaded: {{$downloadCounter}} times</small>
</div>
</div>
{{if eq $role "admin" "moderator"}}
<div class="row"><p></p></div>
<div class="row">
<div class="btn-group pull-right">
<a href="/edit/{{.ID}}" class="btn btn-primary"><i class="icon-pencil"></i> Edit</a>
<a href="#" onClick="delBook();" class="btn btn-danger"><i class="icon-trash"></i> Delete</a>
</div>
</div>
{{end}}
</div>
</div>
<div class="text-end">
<small>Downloaded: {{$downloadCounter}} times</small>
</div>
{{if eq $role "admin" "moderator"}}
<div class="row"><p></p></div>
<div class="btn-group d-flex justify-content-end">
<a href="/edit/{{.ID}}" class="btn btn-primary btn-sm">
<svg class="bi" width="1em" height="1em" fill="currentColor">
<use xlink:href="/img/bootstrap-icons.svg#pencil"/>
</svg>
edit
</a>
<a href="#" onClick="delBook();" class="btn btn-danger btn-sm">
<svg class="bi" width="1em" height="1em" fill="currentColor">
<use xlink:href="/img/bootstrap-icons.svg#trash"/>
</svg>
delete
</a>
</div>
{{end}}
</div>
</div>
{{end}}
<div class="row">
<div class="span8">
{{range .Description}}
<p>{{.}}</p>
{{end}}
</div>
</div>
</div>
</div>
</div>
{{if .Lists}}
<br />
<div class="row">
<div class="span10 offset1">
<h4>Book in lists:</h4>
<ul class="nav nav-tabs nav-stacked">
{{range .Lists}}
<li><a href="/list/{{.ListID}}">{{.Title}} ({{len .Books}})
<span class="pull-right">By {{.User.Username}}</span></a>
</li>
{{end}}
</ul>
</div>
<div class="row justify-content-center">
<div class="col-10">
<h4>Book in lists:</h4>
<ul class="nav flex-column">
{{range .Lists}}
<li class="nav-item">
<a class="nav-link" href="/list/{{.ListID}}">
<div class="row">
<div class="col">{{.Title}} ({{len .Books}})</div>
<div class="col text-end">By {{.User.Username}}</div>
</div>
</a>
</li>
{{end}}
</ul>
</div>
</div>
{{else}}
<br />
{{end}}
<br />
{{if .S.User}}
<div class="row">
<h5 class="offset1 span2">Add book to a list:</h5>
<form class="form-inline" method="POST" action="/list/">
<form method="POST" action="/list/">
<div class="row g-3 align-items-start">
<h6 class="col-sm-2 text-sm-end col-form-label">Add book to a list:</h6>
<input type="hidden" id="book_id" name="book_id" value="{{.Book.ID}}">
<div class="input-append">
<input type="text" data-provide="typeahead" data-source='["{{strings_join .UserLists}}"]' data-items="4" id="list" name="list" autocomplete="off">
<button type="submit" class="btn btn-primary">Add</button>
<div class="col-sm-5">
<div class="input-group">
<input class="form-control" list="bookListOptions" id="list" name="list" placeholder="Write a name of a list to create or add">
<datalist id="bookListOptions">
{{range .UserLists}}
<option value="{{.}}">
{{end}}
</datalist>
<button type="submit" class="btn btn-primary">Add</button>
</div>
</div>
</form>
</div>
</div>
</form>
{{end}}
{{template "footer.html" .S}}