mirror of
https://github.com/derfenix/webarchive.git
synced 2026-03-11 12:41:54 +03:00
web ui: index and basic details page, api refactoring
This commit is contained in:
47
ui/basic/index.html
Normal file
47
ui/basic/index.html
Normal file
@@ -0,0 +1,47 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>WebArchive</title>
|
||||
<link rel="stylesheet" href="/static/style.css">
|
||||
<script src="/static/lib.js"></script>
|
||||
<script src="/static/main.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<template id="pages_tmpl">
|
||||
<div class="page_item">
|
||||
<a class="url link"><span class="title"></span><span class="status"></span></a>
|
||||
<div class="description"></div>
|
||||
<div class="created"></div>
|
||||
<hr>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template id="page_tmpl">
|
||||
<a onclick="history.back()" class="link">Back</a>
|
||||
<div class="page">
|
||||
<h2 id="page_title"></h2>
|
||||
<h3 id="page_description"></h3>
|
||||
<h5 id="page_url" class="link" onclick="window.open(this.innerHTML, '_blank')"></h5>
|
||||
<h4>Results</h4>
|
||||
<div id="results"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template id="result_tmpl">
|
||||
<div class="result_item">
|
||||
<span class="format"></span>
|
||||
<span class="result_link link"></span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<h1 id="site_title"></h1>
|
||||
|
||||
<div id="data">
|
||||
None
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
2
ui/basic/lib.js
Normal file
2
ui/basic/lib.js
Normal file
File diff suppressed because one or more lines are too long
90
ui/basic/main.js
Normal file
90
ui/basic/main.js
Normal file
@@ -0,0 +1,90 @@
|
||||
function index() {
|
||||
$.ajax({
|
||||
url: "/api/v1/pages", success: function (data, status, xhr) {
|
||||
if (status !== "success") {
|
||||
gotError(status);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
let elem = document.getElementById("data");
|
||||
elem.innerHTML = "";
|
||||
// elem.attachShadow({mode: 'open'});
|
||||
|
||||
data.forEach(function (v) {
|
||||
let page_elem = pages_tmpl.content.cloneNode(true);
|
||||
$(page_elem).find(".url").attr("onclick", "goToPage('" + v.id + "');");
|
||||
$(page_elem).find(".status").addClass(v.status);
|
||||
$(page_elem).find(".status").attr("title", v.status);
|
||||
$(page_elem).find(".created").html(v.created);
|
||||
$(page_elem).find(".title").html(v.meta.title);
|
||||
$(page_elem).find(".description").html(v.meta.description);
|
||||
elem.append(page_elem); // (*)
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function goToPage(id) {
|
||||
history.pushState({"page": id}, null, id);
|
||||
page(id);
|
||||
}
|
||||
|
||||
function page(id) {
|
||||
$.ajax({
|
||||
url: "/api/v1/pages/" + id, success: function (data, status, xhr) {
|
||||
if (status !== "success") {
|
||||
gotError(status);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
let elem = document.getElementById("data");
|
||||
elem.innerHTML = "";
|
||||
let page_elem = page_tmpl.content.cloneNode(true);
|
||||
$(page_elem).find("#page_title").html(data.meta.title);
|
||||
$(page_elem).find("#page_description").html(data.meta.description);
|
||||
$(page_elem).find("#page_url").html(data.url);
|
||||
|
||||
data.results.forEach(function (result) {
|
||||
let result_elem = result_tmpl.content.cloneNode(true);
|
||||
$(result_elem).find(".format").html(result.format);
|
||||
if (result.error !== "" && result.error !== undefined) {
|
||||
$(result_elem).find(".format").addClass("error");
|
||||
$(result_elem).find(".result_link").html("⚠");
|
||||
$(result_elem).find(".result_link").attr("title", result.error);
|
||||
} else {
|
||||
result.files.forEach(function (file) {
|
||||
$(result_elem).find(".result_link").attr("onclick", "window.open('/api/v1/pages/" + data.id + "/file/" + file.id + "', '_blank');");
|
||||
$(result_elem).find(".result_link").html(file.name);
|
||||
})
|
||||
}
|
||||
|
||||
$(page_elem).find("#results").append(result_elem);
|
||||
})
|
||||
|
||||
elem.append(page_elem); // (*)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function gotError(err) {
|
||||
console.log(err);
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$("#site_title").html("WebArchive " + window.location.hostname);
|
||||
document.title = "WebArchive " + window.location.hostname;
|
||||
if (window.location.pathname.endsWith("/")) {
|
||||
index();
|
||||
} else {
|
||||
page(window.location.pathname.slice(1));
|
||||
}
|
||||
});
|
||||
window.addEventListener('popstate', function (event) {
|
||||
if (event.state === null) {
|
||||
index();
|
||||
} else {
|
||||
page(event.state.page);
|
||||
}
|
||||
});
|
||||
61
ui/basic/style.css
Normal file
61
ui/basic/style.css
Normal file
File diff suppressed because one or more lines are too long
@@ -4,5 +4,5 @@ import (
|
||||
"embed"
|
||||
)
|
||||
|
||||
//go:embed static/*
|
||||
//go:embed */*.html */*.css */*.js
|
||||
var StaticFiles embed.FS
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>Document</title>
|
||||
<link rel="stylesheet" href="/static/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello World!</h1>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
h1 {
|
||||
background-color: azure;
|
||||
}
|
||||
Reference in New Issue
Block a user