Skip to content

Commit

Permalink
fix loading contents on dashboard
Browse files Browse the repository at this point in the history
  • Loading branch information
zshipko committed Nov 21, 2022
1 parent 8abfbe3 commit b034337
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 33 deletions.
30 changes: 19 additions & 11 deletions src/irmin-server/unix/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,9 @@
#path, #branch {
padding: 5px;
margin: 5px;
font-size: 110%%;
font-size: 110%;
border: 1px solid #ddd;
width: 75%%;
width: 75%;
background: #222;
color: #ddd;
}
Expand All @@ -76,7 +76,7 @@
padding: 5px;
margin: 5px;
font-family: monospace;
font-size: 130%%;
font-size: 130%;
}

h1, h2 {
Expand Down Expand Up @@ -118,7 +118,7 @@
}

.content-hash {
font-size: 115%%;
font-size: 115%;
border: 1px solid #ddd;
padding: 10px;
margin-bottom: 20px;
Expand All @@ -133,7 +133,7 @@
vertical-align: middle;
width: 30px;
padding-bottom: 5px;
filter: invert(100%%);
filter: invert(100%);
}
</style>
</head>
Expand All @@ -143,11 +143,11 @@
</a>
<h2 class="branch-area">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAACgklEQVRIS8WXTUgVURiGtVVQ1EKTIktrkVBi1CZw46KiP5KkBItAbGFE0Z8IRpvaVdSi0gha5MJ+FhaEhqBJ5iJaiKkVVCi1CBEtMCkrjfR54QyM071n5s6dwQ8ezpl7zvneme/8fOdmZsyTZQbQVZ8VMA6TAfoH6uInvBcv9bAa/sI9OG1eIpBAsk424W0MaocZGICVsAy6YCv8S0fZJtyL402wHx7DIuiELVAKLXEJ/8bxD8h2CZykfh3OwaUEwupbYqL0gvJbmFAPMmgNbID3xsEDygo4DJpvtx3i4RYsNT9+pzwGGvOf2UJ9lt7XYBQeQgHsgGFTVzQc20zlFWg9NIH86uVkmprXXmWb8AI6K6wnXIO+UNdK7/M4auS5Eqrhjmk7Snkb7sKRVITVNx8+uQZJoMrrhOc22AlF8Ma0q95v2nbHJXwFx7VwE04ZkRuUitZlqItLOBfHCn8WDIGmcC18BW1JTdEc8zu58ukdJNRyqtX/EpYYhQnKYnjnFdVzlMLyNwbOvpdgYSLRqIU3mnA7Wk+o7ItbWFuvGcpcQkom2o4JLZ1QL8TjKtDBoqN0u0thyrTp8IlEuBsvH0FJIieZU36/CBcs7SkvLpsvp01Z6wDoq5NaqqG2+fpj5vQ8pS4NVgsr/AuvCrsShg6Jt/AUkqZB71v4JQkde8c9g3p4VqIY8fuqsKGuYeBV0MpUTl0Hu+Az6GD4GZewcxFYj8AHI3Kf8iCUg/ZtaLOF2nb1UbZR1gltQS572hqPYDE8A90oNMetoVUZaBPWFbbDOHeut0oAz0FX39iut9LcAw2QB9OgC94Z0L+KtMxvH8u5+iw3Ytq/kVgQ4UiEvE5mARsShR+0flsNAAAAAElFTkSuQmCC">
<input id="branch" value="%s" />
<input id="branch" value="" />
</div>
<h2 class="path-area">
<img alt="svgImg" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjBweCIgeT0iMHB4Igp3aWR0aD0iNTAiIGhlaWdodD0iNTAiCnZpZXdCb3g9IjAgMCA1MCA1MCIKc3R5bGU9IiBmaWxsOiMwMDAwMDA7Ij48cGF0aCBkPSJNIDMgNCBDIDEuMzU1NDY5IDQgMCA1LjM1NTQ2OSAwIDcgTCAwIDQzLjkwNjI1IEMgLTAuMDYyNSA0NC4xMzY3MTkgLTAuMDM5MDYyNSA0NC4zNzg5MDYgMC4wNjI1IDQ0LjU5Mzc1IEMgMC4zNDM3NSA0NS45NTcwMzEgMS41NjI1IDQ3IDMgNDcgTCA0MiA0NyBDIDQzLjQ5MjE4OCA0NyA0NC43MTg3NSA0NS44NzUgNDQuOTM3NSA0NC40Mzc1IEMgNDQuOTQ1MzEzIDQ0LjM3NSA0NC45NjQ4NDQgNDQuMzEyNSA0NC45Njg3NSA0NC4yNSBDIDQ0Ljk2ODc1IDQ0LjIzMDQ2OSA0NC45Njg3NSA0NC4yMDcwMzEgNDQuOTY4NzUgNDQuMTg3NSBMIDQ1IDQ0LjAzMTI1IEMgNDUgNDQuMDE5NTMxIDQ1IDQ0LjAxMTcxOSA0NSA0NCBMIDQ5Ljk2ODc1IDE3LjE4NzUgTCA1MCAxNy4wOTM3NSBMIDUwIDE3IEMgNTAgMTUuMzU1NDY5IDQ4LjY0NDUzMSAxNCA0NyAxNCBMIDQ3IDExIEMgNDcgOS4zNTU0NjkgNDUuNjQ0NTMxIDggNDQgOCBMIDE4LjAzMTI1IDggQyAxOC4wMzUxNTYgOC4wMDM5MDYgMTguMDIzNDM4IDggMTggOCBDIDE3Ljk2ODc1IDcuOTc2NTYzIDE3Ljg3ODkwNiA3LjkwMjM0NCAxNy43MTg3NSA3LjcxODc1IEMgMTcuNDcyNjU2IDcuNDM3NSAxNy4xODc1IDYuOTY4NzUgMTYuODc1IDYuNDY4NzUgQyAxNi41NjI1IDUuOTY4NzUgMTYuMjI2NTYzIDUuNDM3NSAxNS44MTI1IDQuOTY4NzUgQyAxNS4zOTg0MzggNC41IDE0LjgyMDMxMyA0IDE0IDQgWiBNIDMgNiBMIDE0IDYgQyAxMy45Mzc1IDYgMTQuMDY2NDA2IDYgMTQuMzEyNSA2LjI4MTI1IEMgMTQuNTU4NTk0IDYuNTYyNSAxNC44NDM3NSA3LjAzMTI1IDE1LjE1NjI1IDcuNTMxMjUgQyAxNS40Njg3NSA4LjAzMTI1IDE1LjgxMjUgOC41NjI1IDE2LjIxODc1IDkuMDMxMjUgQyAxNi42MjUgOS41IDE3LjE3OTY4OCAxMCAxOCAxMCBMIDQ0IDEwIEMgNDQuNTYyNSAxMCA0NSAxMC40Mzc1IDQ1IDExIEwgNDUgMTQgTCA4IDE0IEMgNi40MjU3ODEgMTQgNS4xNzE4NzUgMTUuMjY1NjI1IDUuMDYyNSAxNi44MTI1IEwgNS4wMzEyNSAxNi44MTI1IEwgNSAxNyBMIDIgMzMuMTg3NSBMIDIgNyBDIDIgNi40Mzc1IDIuNDM3NSA2IDMgNiBaIE0gOCAxNiBMIDQ3IDE2IEMgNDcuNTYyNSAxNiA0OCAxNi40Mzc1IDQ4IDE3IEwgNDMuMDkzNzUgNDMuNTMxMjUgTCA0My4wNjI1IDQzLjU5Mzc1IEMgNDMuMDUwNzgxIDQzLjYzMjgxMyA0My4wMzkwNjMgNDMuNjc1NzgxIDQzLjAzMTI1IDQzLjcxODc1IEMgNDMuMDE5NTMxIDQzLjc1NzgxMyA0My4wMDc4MTMgNDMuODAwNzgxIDQzIDQzLjg0Mzc1IEMgNDMgNDMuODYzMjgxIDQzIDQzLjg4NjcxOSA0MyA0My45MDYyNSBDIDQzIDQzLjkxNzk2OSA0MyA0My45MjU3ODEgNDMgNDMuOTM3NSBDIDQyLjk4NDM3NSA0My45ODgyODEgNDIuOTc2NTYzIDQ0LjAzOTA2MyA0Mi45Njg3NSA0NC4wOTM3NSBDIDQyLjk2NDg0NCA0NC4xMjUgNDIuOTcyNjU2IDQ0LjE1NjI1IDQyLjk2ODc1IDQ0LjE4NzUgQyA0Mi45NjQ4NDQgNDQuMjMwNDY5IDQyLjk2NDg0NCA0NC4yNjk1MzEgNDIuOTY4NzUgNDQuMzEyNSBDIDQyLjg0Mzc1IDQ0LjcxODc1IDQyLjQ1NzAzMSA0NSA0MiA0NSBMIDMgNDUgQyAyLjQzNzUgNDUgMiA0NC41NjI1IDIgNDQgTCA2Ljk2ODc1IDE3LjE4NzUgTCA3IDE3LjA5Mzc1IEwgNyAxNyBDIDcgMTYuNDM3NSA3LjQzNzUgMTYgOCAxNiBaIj48L3BhdGg+PC9zdmc+"/>
<input id="path" value="%s"/>
<input id="path" value=""/>
<span class="no-select" id="up">&uarr;</span>
<span class="no-select" id="refresh">&#8635;</span>
</h2>
Expand Down Expand Up @@ -201,9 +201,9 @@ <h2 class="path-area">
}
return lines.join("<br>");
}

+ "</pre>"
function getContents(data) {
if (typeof data.contents === "string") return data.contents;
if (typeof data.contents === "string") return "<pre>" + data.contents + "</pre>";

if (data.contents.base64){
let b = atob(data.contents.base64);
Expand All @@ -219,13 +219,15 @@ <h2 class="path-area">
if (state.path !== path || state.branch !== branch){
history.pushState({path: path, branch: branch}, '');
}

pathInput.value = path;

fetch(path + "?branch=" + branch, {method: 'POST'})
.then(r => r.json())
.then(data => {
list.innerHTML = "";
document.getElementById("contents").innerHTML = "";
if (data.contents !== undefined){
if (data.contents){
let html = "<div class='content-hash'>" + data.hash + "</div>";
html += getContents(data);
document.getElementById("contents").innerHTML = html;
Expand All @@ -237,7 +239,6 @@ <h2 class="path-area">
});
}

update(pathInput.value, branchInput.value);

pathInput.onkeydown = function(e){
if (e.keyCode == 13){
Expand Down Expand Up @@ -265,6 +266,13 @@ <h2 class="path-area">
update(event.state.path, event.state.branch);
}
}

window.onload = function() {
let params = new URLSearchParams(window.location.search);
pathInput.value = window.location.pathname;
branchInput.value = params.get("branch") || "main";
update(pathInput.value, branchInput.value);
}
</script>
</body>
</html>
35 changes: 13 additions & 22 deletions src/irmin-server/unix/server.ml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ open Lwt.Infix
open Irmin_server
include Server_intf

let html = [%blob "index.html"]

module Make (Codec : Conn.Codec.S) (Store : Irmin.Generic_key.S) = struct
module Command = Command.Make (IO) (Codec) (Store)
module Store = Store
Expand Down Expand Up @@ -283,28 +285,20 @@ module Make (Codec : Conn.Codec.S) (Store : Irmin.Generic_key.S) = struct
| `Branch branch -> Store.of_branch t.repo branch
in
let* is_contents =
Store.kind store prefix >|= fun x -> x = Some `Contents
Store.kind store prefix >|= function
| Some `Contents -> true
| _ -> false
in
let res = Cohttp_lwt_unix.Response.make () in
let res = Cohttp_lwt_unix.Response.make ~status:`OK () in
if is_contents then
let* contents = Store.get store prefix in
let contents' = Irmin.Type.to_json_string Store.contents_t contents in
let* last_mod = Store.last_modified store prefix in
let last_mod =
String.concat ", "
(List.map
(fun c ->
Store.Commit.hash c |> Irmin.Type.to_json_string Store.hash_t)
last_mod)
in
let body =
Cohttp_lwt.Body.of_string
(Printf.sprintf
{|{"contents": %s, "hash": %s, "last_modified": [%s]}|} contents'
(Irmin.Type.to_json_string Store.hash_t
(Store.Contents.hash contents))
last_mod)
Printf.sprintf {|{"contents": %s, "hash": %s }|} contents'
(Irmin.Type.to_json_string Store.hash_t
(Store.Contents.hash contents))
in
let body = Cohttp_lwt.Body.of_string body in
Lwt.return (res, body)
else
let* keys = list store prefix in
Expand All @@ -319,6 +313,7 @@ module Make (Codec : Conn.Codec.S) (Store : Irmin.Generic_key.S) = struct
keys
in
let keys = String.concat "," keys in

let body = Cohttp_lwt.Body.of_string (Printf.sprintf "[%s]" keys) in
Lwt.return (res, body)
in
Expand All @@ -342,14 +337,10 @@ module Make (Codec : Conn.Codec.S) (Store : Irmin.Generic_key.S) = struct
| `POST -> data_callback prefix branch
| `GET ->
let res = Cohttp_lwt_unix.Response.make () in
let body =
Cohttp_lwt.Body.of_string
@@ Printf.sprintf [%blob "index.html"] branch_name path
in
let body = Cohttp_lwt.Body.of_string html in
Lwt.return (res, body)
| _ ->
let status = `Not_found in
let res = Cohttp_lwt_unix.Response.make ~status () in
let res = Cohttp_lwt_unix.Response.make ~status:`Not_found () in
let body = Cohttp_lwt.Body.of_string "Not found" in
Lwt.return (res, body)
in
Expand Down

0 comments on commit b034337

Please sign in to comment.