From c563caef1ccc7a7759e21e170feef063085242d3 Mon Sep 17 00:00:00 2001 From: saunders Date: Tue, 28 Jul 2026 12:48:14 +0100 Subject: [PATCH] Start building emissary templates We're learning emissary as we go here, figuring out what can be reused and in the process determining what tweaks or additions might be necessary for the emissary codebase itself. --- makinghistory-eventfeed/template.hjson | 56 ++++++++++++++ makinghistory-eventfeed/view-events.html | 12 +++ makinghistory-eventfeed/view.html | 15 ++++ templates/events/events.html | 10 +++ templates/events/inbox.html | 65 +++++++++++++++++ templates/events/template.hjson | 93 ++++++++++++++++++++++++ 6 files changed, 251 insertions(+) create mode 100644 makinghistory-eventfeed/template.hjson create mode 100644 makinghistory-eventfeed/view-events.html create mode 100644 makinghistory-eventfeed/view.html create mode 100644 templates/events/events.html create mode 100644 templates/events/inbox.html create mode 100644 templates/events/template.hjson diff --git a/makinghistory-eventfeed/template.hjson b/makinghistory-eventfeed/template.hjson new file mode 100644 index 0000000..5f1940b --- /dev/null +++ b/makinghistory-eventfeed/template.hjson @@ -0,0 +1,56 @@ +{ + templateId: makinghistory-eventfeed + templateRole: eventfeed + extends: [] + containedBy: [] + model: Stream + + label: MakingHistory Event Feed + description: View and/or Edit Sources of Events for MakingHistory + + schema: { + type: object + properties: { + icon: {type: "string"} + label: {type: "string"} + summary: {type: "string"} + data: { + type: object + properties: { + searchText: {type: "string"} + content: {type: "string"} + } + } + } + } + states: { + default: { + label: "Default State" + description: "Event feed templates do not use other states [true?]" + } + } + roles: {} + + bundles: {} + + actions: { + create: { + roles: ["owner", "mod"] + steps: [] + } + edit: { + roles: ["owner", "mod"] + steps: [] + } + delete: { + roles: ["owner", "mod"] + steps: [] + } + view: { + roles: ["anonymous"] + steps: [ + {do: "view-html"} + ] + } + } +} diff --git a/makinghistory-eventfeed/view-events.html b/makinghistory-eventfeed/view-events.html new file mode 100644 index 0000000..d8254cd --- /dev/null +++ b/makinghistory-eventfeed/view-events.html @@ -0,0 +1,12 @@ +{{- $results := .Events.Slice -}} + +
+ + {{- range $result := $results -}} +
+
{{- $result | jsonIndent -}}
+
+ {{- end -}} + +
+ diff --git a/makinghistory-eventfeed/view.html b/makinghistory-eventfeed/view.html new file mode 100644 index 0000000..2c6e6b3 --- /dev/null +++ b/makinghistory-eventfeed/view.html @@ -0,0 +1,15 @@ +
+ + + +
+ +
+
+ {{- template "view-events" . -}} +
+
+ +
+ +
diff --git a/templates/events/events.html b/templates/events/events.html new file mode 100644 index 0000000..480459c --- /dev/null +++ b/templates/events/events.html @@ -0,0 +1,10 @@ +{{- $folders := .FoldersWithSelection}} +{{- $folder := $folders.Selected -}} +{{- $filter := .FilteredByFollowing -}} + +{{- $folderID := $folder.FolderID.Hex -}} +{{- $followingID := .QueryParam "origin.followingId" -}} + +
+ {{- template "sidebar" $folders -}} +
diff --git a/templates/events/inbox.html b/templates/events/inbox.html new file mode 100644 index 0000000..c7da78b --- /dev/null +++ b/templates/events/inbox.html @@ -0,0 +1,65 @@ +{{- $folders := .FoldersWithSelection}} +{{- $folder := $folders.Selected -}} +{{- $filter := .FilteredByFollowing -}} + +{{- $folderID := $folder.FolderID.Hex -}} +{{- $followingID := .QueryParam "origin.followingId" -}} + +
+ + + + + {{- template "sidebar" $folders -}} + + +
+ +
+ + {{- if $filter.NotZero -}} + {{- $following := .FollowingByToken $followingID -}} +
+ +
+ {{- if ne "" $following.IconURL -}} +
+ +
+ {{- end -}} + +
+

+ {{$following.Label}} +

+
+ {{$following.URL}} + · {{$following.LastPolled | tinyDate}} ago +   + +
+
+
+
+ {{- else -}} +

{{icon $folder.Icon}} {{$folder.Label}}

+ {{- end -}} +
+ +
+ + {{- if $filter.IsZero -}} + + {{- else -}} + + {{- end -}} + +
+ + {{- template "list" . -}} + +
+ + + +
\ No newline at end of file diff --git a/templates/events/template.hjson b/templates/events/template.hjson new file mode 100644 index 0000000..68cf8d3 --- /dev/null +++ b/templates/events/template.hjson @@ -0,0 +1,93 @@ +{ + templateId: events + // This role makes the template eligible to be displayed as a UI choice for user inbox + templateRole: user-inbox + // The model sets which go builder to use with this template + model: inbox + label: Events + description: A simple inbox with a sidebar for folders and several feed layouts + icon: inbox + // Extends inherits from other templates + extends: ["user-inbox"] + // A schema sets up the data structure that will be used inside a template + // Reflected in mongodb + // Based on json, without linking between schemas; all rules must be defined herein + schema: { + title: Events + type: object + properties: { + feeds: { + description: Array of news sources to render on the page + type: array + items: { + type: object + properties: { + uri: { + type: string + } + name: { + type: string + } + trust-level: { + type: string + } + } + } + } + } + } + states: { + published: { + label: Publically viewable events item + } + for-review: { + label: Events item to be reviewed before publishing or not + } + } + roles: { + mod: { + label: Events Moderator + decription: Full control + } + reader: { + label: Events Reader + description: Read only + } + } + /* + bundles: { + stylesheet: { + content-type: text/css + } + hyperscript: { + content-type: text/hyperscript + } + } + */ + actions: { + view: { + roles: ["mod"] + stateRoles: { + published: ["reader"] + } + steps: [ + {do: "view-html"} + ] + } + inbox: { + roles: ["self"] + do: "view-html" + file: "events" + } + events: { + roles: ["self"] + do: "view-html" + } + /* + sidebar-events: { + roles: ["self"] + do: "view-html" + } + */ + } +}