Compare commits
No commits in common. '46d51dbdaf4ab14d128cfa6518a05c1b31cff9d1' and 'f2ee2ceb2c7d5ba1b3e0c8f03a3b2d03939a2252' have entirely different histories.
46d51dbdaf
...
f2ee2ceb2c
14 changed files with 10 additions and 6686 deletions
@ -1,5 +1,4 @@ |
|||||||
ssg/dist-newstyle |
ssg/dist-newstyle |
||||||
src/_cache |
src/_cache |
||||||
src/_site |
src/_site |
||||||
src/elm-stuff |
|
||||||
result |
result |
||||||
|
@ -1,52 +0,0 @@ |
|||||||
{ |
|
||||||
|
|
||||||
"elm/browser" = { |
|
||||||
sha256 = "0nagb9ajacxbbg985r4k9h0jadqpp0gp84nm94kcgbr5sf8i9x13"; |
|
||||||
version = "1.0.2"; |
|
||||||
}; |
|
||||||
|
|
||||||
"elm/bytes" = { |
|
||||||
sha256 = "02ywbf52akvxclpxwj9n04jydajcbsbcbsnjs53yjc5lwck3abwj"; |
|
||||||
version = "1.0.8"; |
|
||||||
}; |
|
||||||
|
|
||||||
"elm/core" = { |
|
||||||
sha256 = "19w0iisdd66ywjayyga4kv2p1v9rxzqjaxhckp8ni6n8i0fb2dvf"; |
|
||||||
version = "1.0.5"; |
|
||||||
}; |
|
||||||
|
|
||||||
"elm/file" = { |
|
||||||
sha256 = "1rljcb41dl97myidyjih2yliyzddkr2m7n74x7gg46rcw4jl0ny8"; |
|
||||||
version = "1.0.5"; |
|
||||||
}; |
|
||||||
|
|
||||||
"elm/html" = { |
|
||||||
sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k"; |
|
||||||
version = "1.0.0"; |
|
||||||
}; |
|
||||||
|
|
||||||
"elm/http" = { |
|
||||||
sha256 = "008bs76mnp48b4dw8qwjj4fyvzbxvlrl4xpa2qh1gg2kfwyw56v1"; |
|
||||||
version = "2.0.0"; |
|
||||||
}; |
|
||||||
|
|
||||||
"elm/json" = { |
|
||||||
sha256 = "0kjwrz195z84kwywaxhhlnpl3p251qlbm5iz6byd6jky2crmyqyh"; |
|
||||||
version = "1.1.3"; |
|
||||||
}; |
|
||||||
|
|
||||||
"elm/time" = { |
|
||||||
sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1"; |
|
||||||
version = "1.0.0"; |
|
||||||
}; |
|
||||||
|
|
||||||
"elm/url" = { |
|
||||||
sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4"; |
|
||||||
version = "1.0.0"; |
|
||||||
}; |
|
||||||
|
|
||||||
"elm/virtual-dom" = { |
|
||||||
sha256 = "1yvb8px2z62xd578ag2q0r5hd1vkz9y7dfkx05355iiy1d7jwq4v"; |
|
||||||
version = "1.0.3"; |
|
||||||
}; |
|
||||||
} |
|
Binary file not shown.
@ -1,99 +0,0 @@ |
|||||||
|
|
||||||
module ServicesTable exposing (main) |
|
||||||
|
|
||||||
import List |
|
||||||
import Browser |
|
||||||
import Html exposing (Html, div, span, text, table, thead, tbody, tr, th, td) |
|
||||||
import Html.Attributes exposing (class) |
|
||||||
import Http |
|
||||||
import Dict exposing (Dict) |
|
||||||
import Json.Decode exposing (Decoder, map, map3, field, list, string, dict, keyValuePairs) |
|
||||||
|
|
||||||
type alias ServiceInfo = |
|
||||||
{ fields : List String |
|
||||||
, tests : List String |
|
||||||
, mod : String } |
|
||||||
|
|
||||||
type alias Info = List |
|
||||||
{ name : String |
|
||||||
, fields : List String |
|
||||||
, tests : List String |
|
||||||
, mod : String } |
|
||||||
|
|
||||||
type Model |
|
||||||
= Failure |
|
||||||
| Loading |
|
||||||
| Success Info |
|
||||||
|
|
||||||
type Msg = GotInfo (Result Http.Error Info) |
|
||||||
|
|
||||||
main = Browser.element |
|
||||||
{ init = init |
|
||||||
, update = update |
|
||||||
, subscriptions = subscriptions |
|
||||||
, view = view } |
|
||||||
|
|
||||||
init : () -> (Model, Cmd Msg) |
|
||||||
init _ = |
|
||||||
( Loading |
|
||||||
, Http.get |
|
||||||
{ url = "https://share.recursor.wf/systemd-services-tests.json" |
|
||||||
, expect = Http.expectJson GotInfo dataDecoder } ) |
|
||||||
|
|
||||||
dataDecoder : Decoder Info |
|
||||||
dataDecoder = map (List.map (\(name, (fields, tests, mod)) -> { name = name, fields = fields, tests = tests, mod = mod })) |
|
||||||
<| keyValuePairs (map3 (\x y z -> (x, y, z)) (field "fields" <| list string) (field "tests" <| list string) (field "module" string)) |
|
||||||
|
|
||||||
update : Msg -> Model -> (Model, Cmd Msg) |
|
||||||
update msg model = |
|
||||||
case msg of |
|
||||||
GotInfo result -> |
|
||||||
case result of |
|
||||||
Ok info -> (Success info, Cmd.none) |
|
||||||
Err _ -> (Failure, Cmd.none) |
|
||||||
|
|
||||||
subscriptions : Model -> Sub Msg |
|
||||||
subscriptions model = Sub.none |
|
||||||
|
|
||||||
-- Render |
|
||||||
|
|
||||||
watchedFields = |
|
||||||
[ "PrivateDevices" |
|
||||||
, "PrivateMounts" |
|
||||||
, "PrivateNetwork" |
|
||||||
, "PrivateTmp" |
|
||||||
, "PrivateUsers" |
|
||||||
, "ProtectControlGroups" |
|
||||||
, "ProtectKernelModules" |
|
||||||
, "ProtectKernelTunables" |
|
||||||
, "ProtectKernelLogs" |
|
||||||
, "ProtectClock" |
|
||||||
, "ProtectHostname" |
|
||||||
, "LockPersonality" |
|
||||||
, "MemoryDenyWriteExecute" |
|
||||||
, "NoNewPrivileges" |
|
||||||
, "RestrictRealtime" |
|
||||||
, "RestrictSUIDSGID" ] |
|
||||||
|
|
||||||
view : Model -> Html Msg |
|
||||||
view model = case model of |
|
||||||
Failure -> text "Unable to load data." |
|
||||||
Loading -> text "Loading..." |
|
||||||
Success info -> renderTable info |
|
||||||
|
|
||||||
headers : Html Msg |
|
||||||
headers = tr [] |
|
||||||
<| [ th [] [ text "source" ], th [] [ text "module" ] ] |
|
||||||
++ List.map (\name -> th [ class "rotate-45" ] [ div [] [ span [] [ text name ] ] ]) watchedFields |
|
||||||
|
|
||||||
renderTable : Info -> Html Msg |
|
||||||
renderTable info = table [ class "services-table", class "table-header-rotated" ] |
|
||||||
[ thead [ class "info-thead" ] [ headers ] |
|
||||||
, tbody [] (List.map renderLine info) ] |
|
||||||
|
|
||||||
renderLine : { name : String, fields : List String, tests : List String, mod : String } -> Html Msg |
|
||||||
renderLine {name, fields, tests, mod} = tr [] |
|
||||||
<| [ th [] [ text mod ], th [] [ text name ] ] |
|
||||||
++ (List.map (\b -> td [class (if b then "cell-good" else "cell-bad")] [text (if b then "✓" else "✗")]) |
|
||||||
<| List.map (\field -> not <| List.member field fields) watchedFields) |
|
||||||
|
|
@ -1,27 +0,0 @@ |
|||||||
{ |
|
||||||
"type": "application", |
|
||||||
"source-directories": [ |
|
||||||
"./" |
|
||||||
], |
|
||||||
"elm-version": "0.19.1", |
|
||||||
"dependencies": { |
|
||||||
"direct": { |
|
||||||
"elm/browser": "1.0.2", |
|
||||||
"elm/core": "1.0.5", |
|
||||||
"elm/html": "1.0.0", |
|
||||||
"elm/http": "2.0.0", |
|
||||||
"elm/json": "1.1.3" |
|
||||||
}, |
|
||||||
"indirect": { |
|
||||||
"elm/bytes": "1.0.8", |
|
||||||
"elm/file": "1.0.5", |
|
||||||
"elm/time": "1.0.0", |
|
||||||
"elm/url": "1.0.0", |
|
||||||
"elm/virtual-dom": "1.0.3" |
|
||||||
} |
|
||||||
}, |
|
||||||
"test-dependencies": { |
|
||||||
"direct": {}, |
|
||||||
"indirect": {} |
|
||||||
} |
|
||||||
} |
|
@ -1,94 +0,0 @@ |
|||||||
<!DOCTYPE html> |
|
||||||
<html> |
|
||||||
<head> |
|
||||||
<meta charset="utf-8"> |
|
||||||
<title>Packages info</title> |
|
||||||
</head> |
|
||||||
<body> |
|
||||||
<div id="app"></div> |
|
||||||
</body> |
|
||||||
<style> |
|
||||||
.info-thead { |
|
||||||
position: sticky; |
|
||||||
top: 0; |
|
||||||
} |
|
||||||
.cell-good { |
|
||||||
color: green; |
|
||||||
} |
|
||||||
.cell-bad { |
|
||||||
color: red; |
|
||||||
} |
|
||||||
.services-table { |
|
||||||
white-space: nowrap; |
|
||||||
} |
|
||||||
.services-table thead { |
|
||||||
background-color: white; |
|
||||||
} |
|
||||||
.services-table thead th { |
|
||||||
vertical-align: bottom; |
|
||||||
} |
|
||||||
.services-table td { |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
.services-table tbody th { |
|
||||||
text-align: left; |
|
||||||
} |
|
||||||
|
|
||||||
/* Rotated table headers, borrowed from http://jimmybonney.com/articles/column_header_rotation_css */ |
|
||||||
/* Adapted by me, without a calculator */ |
|
||||||
|
|
||||||
.tab-content { |
|
||||||
margin-right: 5em; |
|
||||||
overflow: visible; |
|
||||||
} |
|
||||||
|
|
||||||
td.centered { |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
|
|
||||||
.table-header-rotated th.rotate-45 { |
|
||||||
height: 200px; |
|
||||||
width: 40px; |
|
||||||
min-width: 40px; |
|
||||||
max-width: 40px; |
|
||||||
position: relative; |
|
||||||
vertical-align: bottom; |
|
||||||
padding: 0; |
|
||||||
font-size: 100%; |
|
||||||
line-height: 0.9; |
|
||||||
} |
|
||||||
|
|
||||||
.table-header-rotated th.rotate-45 > div { |
|
||||||
position: relative; |
|
||||||
top: 0px; |
|
||||||
left: 100px; |
|
||||||
height: 100%; |
|
||||||
-ms-transform:skew(-45deg,0deg); |
|
||||||
-moz-transform:skew(-45deg,0deg); |
|
||||||
-webkit-transform:skew(-45deg,0deg); |
|
||||||
-o-transform:skew(-45deg,0deg); |
|
||||||
transform:skew(-45deg,0deg); |
|
||||||
overflow: hidden; |
|
||||||
border-left: 1px solid #dddddd; |
|
||||||
z-index: 1; |
|
||||||
} |
|
||||||
|
|
||||||
.table-header-rotated th.rotate-45 span { |
|
||||||
-ms-transform:skew(45deg,0deg) rotate(315deg); |
|
||||||
-moz-transform:skew(45deg,0deg) rotate(315deg); |
|
||||||
-webkit-transform:skew(45deg,0deg) rotate(315deg); |
|
||||||
-o-transform:skew(45deg,0deg) rotate(315deg); |
|
||||||
transform:skew(45deg,0deg) rotate(315deg); |
|
||||||
position: absolute; |
|
||||||
bottom: 85px; left: -107px; display: inline-block; |
|
||||||
width: 254px; text-align: left; |
|
||||||
} |
|
||||||
|
|
||||||
</style> |
|
||||||
<script src="/ServicesTable.js"></script> |
|
||||||
<script> |
|
||||||
Elm.ServicesTable.init({ |
|
||||||
node: document.getElementById("app"), |
|
||||||
}); |
|
||||||
</script> |
|
||||||
</html> |
|
@ -1,11 +1,11 @@ |
|||||||
{ mkDerivation, base, hakyll, hakyll-process, lib, pandoc }: |
{ mkDerivation, base, hakyll, lib, pandoc }: |
||||||
mkDerivation { |
mkDerivation { |
||||||
pname = "ssg"; |
pname = "ssg"; |
||||||
version = "0.1.0.0"; |
version = "0.1.0.0"; |
||||||
src = ./.; |
src = ./.; |
||||||
isLibrary = false; |
isLibrary = false; |
||||||
isExecutable = true; |
isExecutable = true; |
||||||
executableHaskellDepends = [ base hakyll hakyll-process pandoc ]; |
executableHaskellDepends = [ base hakyll pandoc ]; |
||||||
license = "unknown"; |
license = "unknown"; |
||||||
hydraPlatforms = lib.platforms.none; |
hydraPlatforms = lib.platforms.none; |
||||||
} |
} |
||||||
|
Loading…
Reference in new issue