Air-gap fixes + in-app /docs (README/DEPLOYMENT/api.md/docs/*)
Air-gap:
- DynamicRecord.refreshAll() called getPublicIp() (api.ipify.org,
icanhazip.com, ifconfig.me) every 4h on a timer regardless of
whether any dynamic records were configured -- the one background
call in the repo not actually gated by feature use. Now skips the
lookup entirely when there's nothing to refresh.
- Removed the stray, unauthenticated GET /test page (a leftover
jq-repeat demo) that loaded jQuery + Mustache from external CDNs.
- Removed a dead IE<9-only html5shim script tag pointing at a domain
that no longer resolves.
Docs:
- New GET /docs (index) and /docs/:slug routes render this project's
own README, DEPLOYMENT, api.md, and docs/*.md server-side via
marked (new dependency) -- so the documentation is readable from
the running app with no route to GitHub Pages, where it otherwise
only lives. Public, no auth, same tier as the health endpoint.
- .dockerignore/Dockerfile updated: docs/, DEPLOYMENT.md, and
nodejs/api.md were previously excluded from the image entirely
("served via GitHub Pages, not from the image") -- now copied in
alongside README.md/tos.md-style, since they're needed at runtime.
This commit is contained in:
@@ -10,6 +10,9 @@
|
||||
<a href="https://github.com/theta42/proxy/blob/master/LICENSE" target="_blank" class="text-light">MIT License</a>
|
||||
</span>
|
||||
<span class="d-flex align-items-center gap-3">
|
||||
<a href="/docs" class="text-light text-decoration-none">
|
||||
<i class="fa-solid fa-book"></i> Docs
|
||||
</a>
|
||||
<a href="https://github.com/theta42/proxy" target="_blank" class="text-light text-decoration-none">
|
||||
<i class="fa-brands fa-github"></i> GitHub
|
||||
</a>
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<%- include('top') %>
|
||||
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card shadow-lg mt-4 mb-4">
|
||||
<div class="card-header shadow">
|
||||
<i class="fa-solid fa-book"></i> Documentation
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="text-muted">
|
||||
A local copy of this project's documentation, readable from the
|
||||
running app -- no internet access required.
|
||||
</p>
|
||||
<ul class="list-group">
|
||||
<% docs.forEach(function(doc){ %>
|
||||
<li class="list-group-item">
|
||||
<a href="/docs/<%= doc.slug %>"><%= doc.title %></a>
|
||||
</li>
|
||||
<% }) %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%- include('bottom') %>
|
||||
@@ -0,0 +1,31 @@
|
||||
<%- include('top') %>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3 d-none d-md-block">
|
||||
<div class="card shadow-lg mt-4 mb-4">
|
||||
<div class="card-header shadow">
|
||||
<i class="fa-solid fa-book"></i> Documentation
|
||||
</div>
|
||||
<div class="list-group list-group-flush">
|
||||
<% docs.forEach(function(doc){ %>
|
||||
<a href="/docs/<%= doc.slug %>"
|
||||
class="list-group-item list-group-item-action<%= doc.slug === currentSlug ? ' active' : '' %>">
|
||||
<%= doc.title %>
|
||||
</a>
|
||||
<% }) %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<div class="card shadow-lg mt-4 mb-4">
|
||||
<div class="card-header shadow">
|
||||
<i class="fa-solid fa-file-lines"></i> <%= docTitle %>
|
||||
</div>
|
||||
<div class="card-body markdown-body">
|
||||
<%- docHtml %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%- include('bottom') %>
|
||||
@@ -1,74 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<!-- need to load jq-query cdn or file. -->
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.min.js"
|
||||
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
|
||||
|
||||
<!-- need to load mustache cdn or file. -->
|
||||
<script src="
|
||||
https://cdn.jsdelivr.net/npm/mustache@4.2.0/mustache.min.js
|
||||
"></script>
|
||||
|
||||
<!-- need to load jq-repeat cdn or file -->
|
||||
<script type="text/javascript" src='/static/lib/js/jq-repeat_new.js'></script>
|
||||
<script>
|
||||
//on document ready. the logic would execute.
|
||||
$(document).ready(function () {
|
||||
$.scope.toDo.__setPut(function($el, item, list){
|
||||
$el.slideDown('slow');
|
||||
})
|
||||
|
||||
// $.scope.toDo.__setUpdate(function($el, $render, item, list){
|
||||
// $el.fadeOut(2000, function() {
|
||||
// $(this).html($render.html()).fadeIn(2000);
|
||||
// });
|
||||
// });
|
||||
|
||||
// $.scope.toDo.__setUpdate(function($el, $render, item, list){
|
||||
// $el.animate({'opacity': 0}, 400, function(){
|
||||
// $(this).html($render.html()).animate({'opacity': 1}, 400);
|
||||
// });
|
||||
// });
|
||||
|
||||
$.scope.toDo.__setUpdate(function($el, $render, item, list){
|
||||
$el.slideUp(function(){
|
||||
$(this).replaceWith($render)
|
||||
$render.slideDown()
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
$.scope.toDo.push({ item: "Get milk", done: "Yes" }); // 0
|
||||
$.scope.toDo.push({ item: "Do laundry", done: "No" }); // 1
|
||||
//should take array id or array key
|
||||
|
||||
// - **howMany** _Type: Number_
|
||||
// Number of repeat objects that will be removed. If there are non to be removed, it is not required to use this argument.
|
||||
// - **update** _Type: Array_
|
||||
// This is the array of repeat objects to add. If there are none to this is not required.
|
||||
|
||||
//remove works
|
||||
// $.scope.toDo.splice("Get milk" , "1")
|
||||
|
||||
//update
|
||||
$.scope.toDo.splice(-1,0, { item: "Get Bread", done: "Yes" })
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Document</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<ul>
|
||||
<li jq-repeat="toDo" jq-repeat-index="item" style="display:none;"><span class="item">{{ item }}</span>: {{ done }}</li>
|
||||
</ul>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -24,12 +24,6 @@
|
||||
<script type="text/javascript" src="/static-modules/moment/moment.js"></script>
|
||||
<script type="text/javascript" src="/static/lib/js/app-base.js"></script>
|
||||
<script type="text/javascript" src="/static/js/app.js"></script>
|
||||
|
||||
|
||||
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user