clean action scripts

This commit is contained in:
Benjamin Bärthlein 2020-04-27 08:10:56 +02:00
parent 77c174adf0
commit 890ffed035
5 changed files with 67 additions and 35 deletions

View File

@ -4,6 +4,7 @@
![Docker build status](https://img.shields.io/docker/cloud/build/bbaerthlein/docker-ddns-server) ![Docker build status](https://img.shields.io/docker/cloud/build/bbaerthlein/docker-ddns-server)
![Docker build automated](https://img.shields.io/docker/cloud/automated/bbaerthlein/docker-ddns-server) ![Docker build automated](https://img.shields.io/docker/cloud/automated/bbaerthlein/docker-ddns-server)
![GitHub release (latest by date)](https://img.shields.io/github/v/release/benjaminbear/docker-ddns-server)
![Go version](https://img.shields.io/github/go-mod/go-version/benjaminbear/docker-ddns-server?filename=dyndns%2Fgo.mod) ![Go version](https://img.shields.io/github/go-mod/go-version/benjaminbear/docker-ddns-server?filename=dyndns%2Fgo.mod)
![License](https://img.shields.io/github/license/benjaminbear/docker-ddns-server) ![License](https://img.shields.io/github/license/benjaminbear/docker-ddns-server)

View File

@ -1,28 +1,48 @@
function deleteHost(id) { $("button.addHost").click(function () {
location.href='/hosts/add';
});
$("button.editHost").click(function () {
location.href='/hosts/edit/' + $(this).attr('id');
});
$("button.deleteHost").click(function () {
$.ajax({ $.ajax({
contentType: 'application/x-www-form-urlencoded; charset=UTF-8', contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
type: 'GET', type: 'GET',
url: "/hosts/delete/" + id url: "/hosts/delete/" + $(this).attr('id')
}).done(function(data, textStatus, jqXHR) { }).done(function(data, textStatus, jqXHR) {
location.href="/hosts"; location.href="/hosts";
}).fail(function(jqXHR, textStatus, errorThrown) { }).fail(function(jqXHR, textStatus, errorThrown) {
alert("Error: " + $.parseJSON(jqXHR.responseText).message); alert("Error: " + $.parseJSON(jqXHR.responseText).message);
location.reload() location.reload()
}); });
} });
function addEditHost(id, addedit) { $("button.showHostLog").click(function () {
if (id == null) { location.href='/logs/host/' + $(this).attr('id');
id = "" });
} else {
$("button.add, button.edit").click(function () {
let id = $(this).attr('id');
if (id !== "") {
id = "/"+id id = "/"+id
} }
let action;
if ($(this).hasClass("add")) {
action = "add";
}
if ($(this).hasClass("edit")) {
action = "edit";
}
$.ajax({ $.ajax({
contentType: 'application/x-www-form-urlencoded; charset=UTF-8', contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
data: $('#edithostform').serialize(), data: $('#editHostForm').serialize(),
type: 'POST', type: 'POST',
url: '/hosts/'+addedit+id, url: '/hosts/'+action+id,
}).done(function(data, textStatus, jqXHR) { }).done(function(data, textStatus, jqXHR) {
location.href="/hosts"; location.href="/hosts";
}).fail(function(jqXHR, textStatus, errorThrown) { }).fail(function(jqXHR, textStatus, errorThrown) {
@ -30,7 +50,7 @@ function addEditHost(id, addedit) {
}); });
return false; return false;
} });
function logOut(){ function logOut(){
try { try {
@ -58,26 +78,37 @@ function logOut(){
} }
function randomHash() { function randomHash() {
var chars = "abcdefghijklmnopqrstuvwxyz!@#$%^&*()-+<>ABCDEFGHIJKLMNOP1234567890"; let chars = "abcdefghijklmnopqrstuvwxyz!@#$%^&*()-+<>ABCDEFGHIJKLMNOP1234567890";
var pass = ""; let pass = "";
for (var x = 0; x < 32; x++) { for (let x = 0; x < 32; x++) {
var i = Math.floor(Math.random() * chars.length); let i = Math.floor(Math.random() * chars.length);
pass += chars.charAt(i); pass += chars.charAt(i);
} }
return pass; return pass;
} }
function generateUsername() { $("button.copyToClipboard").click(function () {
edithostform.username.value = randomHash(); let id;
} if ($(this).hasClass('username')) {
id = "username";
} else if ($(this).hasClass('password')) {
id = "password";
}
function generatePassword() { let copyText = document.getElementById(id);
edithostform.password.value = randomHash();
}
function copyToClipboard(inputId) {
var copyText = document.getElementById(inputId);
copyText.select(); copyText.select();
copyText.setSelectionRange(0, 99999); copyText.setSelectionRange(0, 99999);
document.execCommand("copy"); document.execCommand("copy");
} });
$("button.generateHash").click(function () {
let id;
if ($(this).hasClass('username')) {
id = "username";
} else if ($(this).hasClass('password')) {
id = "password";
}
let input = document.getElementById(id);
input.value = randomHash();
});

View File

@ -1,7 +1,7 @@
{{define "content"}} {{define "content"}}
<div class="p-4" style="background-color: #e9ecef"> <div class="p-4" style="background-color: #e9ecef">
<h3 class="text-center mb-4">{{if eq .addEdit "edit" }}Edit{{else if eq .addEdit "add" }}Add{{end}} Host Entry</h3> <h3 class="text-center mb-4">{{if eq .addEdit "edit" }}Edit{{else if eq .addEdit "add" }}Add{{end}} Host Entry</h3>
<form id="edithostform" action="javascript:void(0);"> <form id="editHostForm" action="javascript:void(0);">
<div class="row mt-3"> <div class="row mt-3">
<div class="col-1"></div> <div class="col-1"></div>
<div class="col-2 text-right">Hostname:</div> <div class="col-2 text-right">Hostname:</div>
@ -37,11 +37,11 @@
<div class="col-2 text-right">Username:</div> <div class="col-2 text-right">Username:</div>
<div class="col-8 input-group"> <div class="col-8 input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<button class="btn btn-outline-secondary" type="button" onclick="copyToClipboard('username')"><img src="/static/icons/clipboard.svg" style="vertical-align: baseline" alt="" width="16" height="16" title="Copy"></button> <button class="username copyToClipboard btn btn-outline-secondary" type="button"><img src="/static/icons/clipboard.svg" style="vertical-align: baseline" alt="" width="16" height="16" title="Copy"></button>
</div> </div>
<input type="text" class="form-control" placeholder="Enter username" name="username" id="username" value="{{.host.UserName}}"> <input type="text" class="username form-control" placeholder="Enter username" name="username" id="username" value="{{.host.UserName}}">
<div class="input-group-append"> <div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="generateUsername()">Generate</button> <button class="username generateHash btn btn-outline-secondary" type="button">Generate</button>
</div> </div>
</div> </div>
<div class="col-1"></div> <div class="col-1"></div>
@ -51,17 +51,17 @@
<div class="col-2 text-right">Password:</div> <div class="col-2 text-right">Password:</div>
<div class="col-8 input-group"> <div class="col-8 input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<button class="btn btn-outline-secondary" type="button" onclick="copyToClipboard('password')"><img src="/static/icons/clipboard.svg" style="vertical-align: baseline" alt="" width="16" height="16" title="Copy"></button> <button class="password copyToClipboard btn btn-outline-secondary" type="button"><img src="/static/icons/clipboard.svg" style="vertical-align: baseline" alt="" width="16" height="16" title="Copy"></button>
</div> </div>
<input type="text" class="form-control" placeholder="Enter password" name="password" id="password" value="{{.host.Password}}"> <input type="text" class="password form-control" placeholder="Enter password" name="password" id="password" value="{{.host.Password}}">
<div class="input-group-append"> <div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="generatePassword()">Generate</button> <button class="password generateHash btn btn-outline-secondary" type="button">Generate</button>
</div> </div>
</div> </div>
<div class="col-1"></div> <div class="col-1"></div>
</div> </div>
<div class="row mt-3"> <div class="row mt-3">
<div class="col-11 d-flex justify-content-end"><button class="btn btn-primary" onclick="addEditHost({{.host.ID}}, {{.addEdit}})">{{if eq .addEdit "edit" }}Edit{{else if eq .addEdit "add" }}Add{{end}} Host Entry</button></div> <div class="col-11 d-flex justify-content-end"><button id="{{.host.ID}}" class="{{.addEdit}} btn btn-primary">{{if eq .addEdit "edit" }}Edit{{else if eq .addEdit "add" }}Add{{end}} Host Entry</button></div>
<div class="col-1"></div> <div class="col-1"></div>
</div> </div>
</form> </form>

View File

@ -53,6 +53,6 @@
<script src="/static/js/ie10-viewport-bug-workaround.js"></script> <script src="/static/js/ie10-viewport-bug-workaround.js"></script>
<script src="/static/js/jquery-3.4.1.min.js"></script> <script src="/static/js/jquery-3.4.1.min.js"></script>
<script src="/static/js/bootstrap.min.js"></script> <script src="/static/js/bootstrap.min.js"></script>
<script src="/static/js/additional.js"></script> <script src="/static/js/actions.js"></script>
</body> </body>
</html> </html>

View File

@ -8,7 +8,7 @@
<th>IP</th> <th>IP</th>
<th>TTL</th> <th>TTL</th>
<th>LastUpdate</th> <th>LastUpdate</th>
<th><button class="btn btn-primary" onclick="location.href='/hosts/add'">Add Host Entry</button></th> <th><button class="addHost btn btn-primary">Add Host Entry</button></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -18,7 +18,7 @@
<td>{{.Ip}}</td> <td>{{.Ip}}</td>
<td>{{.Ttl}}</td> <td>{{.Ttl}}</td>
<td>{{.LastUpdate.Format "01/02/2006 15:04 MEZ"}}</td> <td>{{.LastUpdate.Format "01/02/2006 15:04 MEZ"}}</td>
<td><button onclick="location.href='/hosts/edit/{{.ID}}'" class="btn btn-outline-secondary btn-sm"><img src="/static/icons/pencil.svg" alt="" width="16" height="16" title="Edit"></button>&nbsp;<button class="btn btn-outline-secondary btn-sm" onclick="deleteHost('{{.ID}}')"><img src="/static/icons/trash.svg" alt="" width="16" height="16" title="Delete"></button> <button class="btn btn-outline-secondary btn-sm" onclick="location.href='/logs/host/{{.ID}}'"><img src="/static/icons/table.svg" alt="" width="16" height="16" title="Logs"></button></td> <td><button id="{{.ID}}" class="editHost btn btn-outline-secondary btn-sm"><img src="/static/icons/pencil.svg" alt="" width="16" height="16" title="Edit"></button>&nbsp;<button id="{{.ID}}" class="deleteHost btn btn-outline-secondary btn-sm"><img src="/static/icons/trash.svg" alt="" width="16" height="16" title="Delete"></button> <button id="{{.ID}}" class="showHostLog btn btn-outline-secondary btn-sm"><img src="/static/icons/table.svg" alt="" width="16" height="16" title="Logs"></button></td>
</tr> </tr>
{{end}} {{end}}
</tbody> </tbody>