Template makefile and status template

FossilOrigin-Name: 9a4b3c391855b099fa68f157ce655fd95532c602d954a3e6d8974fe46f29f988
This commit is contained in:
nekobit 2022-05-30 07:46:19 +00:00
parent 0e71de0ba6
commit 8d5f9eb269
7 changed files with 114 additions and 205 deletions

126
Makefile
View file

@ -8,8 +8,8 @@ SRC = $(wildcard src/*.c)
OBJ = $(patsubst %.c,%.o,$(SRC))
HEADERS = $(wildcard src/*.h)
PAGES_DIR = static
PAGES = $(wildcard $(PAGES_DIR)/*.html)
PAGES_CMP = $(patsubst %.html,%.chtml,$(PAGES))
PAGES = $(wildcard $(PAGES_DIR)/*.tmpl)
PAGES_CMP = $(patsubst %.tmpl,%.ctmpl,$(PAGES))
DIST = dist/
PREFIX ?= /usr/local
TARGET = treebird
@ -23,7 +23,7 @@ $(TARGET): filec template $(PAGES_CMP) $(OBJ) $(HEADERS)
$(CC) -o $(TARGET) $(OBJ) $(LDFLAGS)
template: src/template/main.o
$(CC) $(LDFLATS) -o template $<
$(CC) $(LDFLAGS) -o template $<
filec: src/file-to-c/main.o
$(CC) -o filec $<
@ -32,124 +32,8 @@ emojitoc: scripts/emoji-to.o
$(CC) -o emojitoc $< $(LDFLAGS)
./emojitoc meta/emoji.json > src/emoji_codes.h
# PAGES
$(PAGES_DIR)/index.chtml: $(PAGES_DIR)/index.html
./filec $< data_index_html > $@
$(PAGES_DIR)/status.chtml: $(PAGES_DIR)/status.html
./filec $< data_status_html > $@
$(PAGES_DIR)/account.chtml: $(PAGES_DIR)/account.html
./filec $< data_account_html > $@
$(PAGES_DIR)/login.chtml: $(PAGES_DIR)/login.html
./filec $< data_login_html > $@
$(PAGES_DIR)/post.chtml: $(PAGES_DIR)/post.html
./filec $< data_post_html > $@
$(PAGES_DIR)/list.chtml: $(PAGES_DIR)/list.html
./filec $< data_list_html > $@
$(PAGES_DIR)/lists.chtml: $(PAGES_DIR)/lists.html
./filec $< data_lists_html > $@
$(PAGES_DIR)/error.chtml: $(PAGES_DIR)/error.html
./filec $< data_error_html > $@
$(PAGES_DIR)/attachments.chtml: $(PAGES_DIR)/attachments.html
./filec $< data_attachments_html > $@
$(PAGES_DIR)/attachment_image.chtml: $(PAGES_DIR)/attachment_image.html
./filec $< data_attachment_image_html > $@
$(PAGES_DIR)/attachment_video.chtml: $(PAGES_DIR)/attachment_video.html
./filec $< data_attachment_video_html > $@
$(PAGES_DIR)/attachment_link.chtml: $(PAGES_DIR)/attachment_link.html
./filec $< data_attachment_link_html > $@
$(PAGES_DIR)/attachment_audio.chtml: $(PAGES_DIR)/attachment_audio.html
./filec $< data_attachment_audio_html > $@
$(PAGES_DIR)/attachment_gifv.chtml: $(PAGES_DIR)/attachment_gifv.html
./filec $< data_attachment_gifv_html > $@
$(PAGES_DIR)/emoji_reactions.chtml: $(PAGES_DIR)/emoji_reactions.html
./filec $< data_emoji_reactions_html > $@
$(PAGES_DIR)/emoji_reaction.chtml: $(PAGES_DIR)/emoji_reaction.html
./filec $< data_emoji_reaction_html > $@
$(PAGES_DIR)/menu_item.chtml: $(PAGES_DIR)/menu_item.html
./filec $< data_menu_item_html > $@
$(PAGES_DIR)/test.chtml: $(PAGES_DIR)/test.html
./filec $< data_test_html > $@
$(PAGES_DIR)/notifications_page.chtml: $(PAGES_DIR)/notifications_page.html
./filec $< data_notifications_page_html > $@
$(PAGES_DIR)/notifications_embed.chtml: $(PAGES_DIR)/notifications_embed.html
./filec $< data_notifications_embed_html > $@
$(PAGES_DIR)/notifications.chtml: $(PAGES_DIR)/notifications.html
./filec $< data_notifications_html > $@
$(PAGES_DIR)/notification.chtml: $(PAGES_DIR)/notification.html
./filec $< data_notification_html > $@
$(PAGES_DIR)/notification_compact.chtml: $(PAGES_DIR)/notification_compact.html
./filec $< data_notification_compact_html > $@
$(PAGES_DIR)/error_404.chtml: $(PAGES_DIR)/error_404.html
./filec $< data_error_404_html > $@
$(PAGES_DIR)/navigation.chtml: $(PAGES_DIR)/navigation.html
./filec $< data_navigation_html > $@
$(PAGES_DIR)/config_sidebar.chtml: $(PAGES_DIR)/config_sidebar.html
./filec $< data_config_sidebar_html > $@
$(PAGES_DIR)/like_svg.chtml: $(PAGES_DIR)/like_svg.html
./filec $< data_like_svg_html > $@
$(PAGES_DIR)/repeat_svg.chtml: $(PAGES_DIR)/repeat_svg.html
./filec $< data_repeat_svg_html > $@
$(PAGES_DIR)/follow_svg.chtml: $(PAGES_DIR)/follow_svg.html
./filec $< data_follow_svg_html > $@
$(PAGES_DIR)/notification_action.chtml: $(PAGES_DIR)/notification_action.html
./filec $< data_notification_action_html > $@
$(PAGES_DIR)/config_general.chtml: $(PAGES_DIR)/config_general.html
./filec $< data_config_general_html > $@
$(PAGES_DIR)/config_appearance.chtml: $(PAGES_DIR)/config_appearance.html
./filec $< data_config_appearance_html > $@
$(PAGES_DIR)/in_reply_to.chtml: $(PAGES_DIR)/in_reply_to.html
./filec $< data_in_reply_to_html > $@
$(PAGES_DIR)/account_info.chtml: $(PAGES_DIR)/account_info.html
./filec $< data_account_info_html > $@
$(PAGES_DIR)/search.chtml: $(PAGES_DIR)/search.html
./filec $< data_search_html > $@
$(PAGES_DIR)/scrobble.chtml: $(PAGES_DIR)/scrobble.html
./filec $< data_scrobble_html > $@
$(PAGES_DIR)/directs_page.chtml: $(PAGES_DIR)/directs_page.html
./filec $< data_directs_page_html > $@
$(PAGES_DIR)/status_interactions.chtml: $(PAGES_DIR)/status_interactions.html
./filec $< data_status_interactions_html > $@
$(PAGES_DIR)/status_interactions_label.chtml: $(PAGES_DIR)/status_interactions_label.html
./filec $< data_status_interactions_label_html > $@
$(PAGES_DIR)/status_interaction_profile.chtml: $(PAGES_DIR)/status_interaction_profile.html
./filec $< data_status_interaction_profile_html > $@
$(PAGES_DIR)/account_follow_btn.chtml: $(PAGES_DIR)/account_follow_btn.html
./filec $< data_account_follow_btn_html > $@
$(PAGES_DIR)/bookmarks_page.chtml: $(PAGES_DIR)/bookmarks_page.html
./filec $< data_bookmarks_page_html > $@
$(PAGES_DIR)/favourites_page.chtml: $(PAGES_DIR)/favourites_page.html
./filec $< data_favourites_page_html > $@
$(PAGES_DIR)/account_stub.chtml: $(PAGES_DIR)/account_stub.html
./filec $< data_account_stub_html > $@
$(PAGES_DIR)/hashtag.chtml: $(PAGES_DIR)/hashtag.html
./filec $< data_hashtag_html > $@
$(PAGES_DIR)/hashtag_page.chtml: $(PAGES_DIR)/hashtag_page.html
./filec $< data_hashtag_page_html > $@
$(PAGES_DIR)/bar_graph.chtml: $(PAGES_DIR)/bar_graph.html
./filec $< data_bar_graph_html > $@
$(PAGES_DIR)/bar.chtml: $(PAGES_DIR)/bar.html
./filec $< data_bar_html > $@
$(PAGES_DIR)/emoji_picker.chtml: $(PAGES_DIR)/emoji_picker.html
./filec $< data_emoji_picker_html > $@
$(PAGES_DIR)/emoji.chtml: $(PAGES_DIR)/emoji.html
./filec $< data_emoji_html > $@
$(PAGES_DIR)/likeboost.chtml: $(PAGES_DIR)/likeboost.html
./filec $< data_likeboost_html > $@
$(PAGES_DIR)/reactions_btn.chtml: $(PAGES_DIR)/reactions_btn.html
./filec $< data_reactions_btn_html > $@
$(PAGES_DIR)/interaction_buttons.chtml: $(PAGES_DIR)/interaction_buttons.html
./filec $< data_interaction_buttons_html > $@
$(PAGES_DIR)/license.chtml: $(PAGES_DIR)/license.html
./filec $< data_license_html > $@
# Login panel
$(PAGES_DIR)/quick_login.chtml: $(PAGES_DIR)/quick_login.html
./filec $< data_quick_login_html > $@
$(PAGES_DIR)/account_sidebar.chtml: $(PAGES_DIR)/account_sidebar.html
./filec $< data_account_sidebar_html > $@
$(PAGES_DIR)/about.chtml: $(PAGES_DIR)/about.html
./filec $< data_about_html > $@
$(PAGES_DIR)/instance.chtml: $(PAGES_DIR)/instance.html
./filec $< data_instance_html > $@
$(PAGES_DIR)/%.ctmpl: $(PAGES_DIR)/%.tmpl
./template $< $(notdir $*) > $@
$(MASTODONT_DIR):
cd ..; fossil clone $(MASTODONT_URL) || true

View file

@ -27,7 +27,6 @@
#include "string_helpers.h"
// Files
#include "../static/index.chtml"
#include "../static/account.chtml"
#include "../static/list.chtml"
#include "../static/lists.chtml"

View file

@ -31,7 +31,6 @@
#include "l10n.h"
// Pages
#include "../static/index.chtml"
#include "../static/config_general.chtml"
#include "../static/config_appearance.chtml"
#include "../static/config_sidebar.chtml"

View file

@ -36,7 +36,7 @@
#include "emoji.h"
// Pages
#include "../static/status.chtml"
#include "../static/status.ctmpl"
#include "../static/notification.chtml"
#include "../static/in_reply_to.chtml"
#include "../static/status_interactions_label.chtml"
@ -581,38 +581,33 @@ char* construct_status(struct session* ssn,
if (status->in_reply_to_id && status->in_reply_to_account_id)
in_reply_to_str = get_in_reply_to(api, status, NULL);
size_t s = easprintf(&stat_html, data_status_html,
status->id,
(flags & STATUS_FOCUSED) == STATUS_FOCUSED ?
"focused" : "",
notif_info ? notif_info : "",
status->account.avatar,
formatted_display_name, /* Username */
config_url_prefix,
status->account.acct,
status->account.acct, /* Account */
status->visibility, /* visibility */
config_url_prefix,
status->id,
status->muted ? "un" : "",
status->muted ? "Unmute thread" : "Mute thread",
config_url_prefix,
status->id,
status->pinned ? "un" : "",
status->pinned ? "Unpin" : "Pin",
config_url_prefix,
status->id,
status->bookmarked ? "un" : "",
status->bookmarked ? "Remove Bookmark" : "Bookmark",
delete_status ? delete_status : "",
in_reply_to_str ? in_reply_to_str : "",
parse_content,
attachments ? attachments : "",
interactions_html ? interactions_html : "",
emoji_reactions ? emoji_reactions : "",
interaction_btns);
struct status_template tmpl = {
.status_id = status->id,
.focused = ((flags & STATUS_FOCUSED) == STATUS_FOCUSED ?
"focused" : ""),
.notif_info = notif_info,
.avatar = status->account.avatar,
.username = formatted_display_name,
.prefix = config_url_prefix,
.acct = status->account.acct,
.visibility = status->visibility,
.unmute = status->muted ? "un" : "",
.unmute_btn = status->muted ? "Unmute thread" : "Mute thread",
.unpin = status->pinned ? "un" : "",
.unpin_btn = status->pinned ? "Unpin" : "Pin",
.unbookmark = status->bookmarked ? "un" : "",
.unbookmark_btn = status->bookmarked ? "Remove Bookmark" : "Bookmark"
.delete_status = delete_status,
.in_reply_to_str = in_reply_to_str,
.status_content = parse_content,
.attachments = attachments,
.interactions = interactions_html,
.emoji_reactions = emoji_reactions,
.interaction_btns = interaction_btns
};
stat_html = tmpl_gen_status(&tmpl, size);
if (size) *size = s;
// Cleanup
if (formatted_display_name != status->account.display_name &&
formatted_display_name) free(formatted_display_name);

32
static/status.ctmpl Normal file

File diff suppressed because one or more lines are too long

View file

@ -1,50 +0,0 @@
<table id="%s" class="status %s ui-table">
%s
<tr>
<td class="pfp-td">
<img src="%s">
</td>
<td class="status-info">
<div class="poster-stats">
<span class="username">%s</span>
<a class="instance-info" href="%s/@%s">%s</a>
<span class="alignend">
<div class="menu-container status-visibility">
%s
<div class="menu">
<ul>
<li>
<form action="%s/status/%s/interact" method="post">
<input type="hidden" name="itype" value="%smute">
<input type="submit" class="btn-menu" value="%s">
</form>
</li>
<li>
<form action="%s/status/%s/interact" method="post">
<input type="hidden" name="itype" value="%spin">
<input type="submit" class="btn-menu" value="%s">
</form>
</li>
<li>
<form action="%s/status/%s/interact" method="post">
<input type="hidden" name="itype" value="%sbookmark">
<input type="submit" class="btn-menu" value="%s">
</form>
</li>
%s
</ul>
</div>
</div>
</span>
</div>
%s
<span class="status-content">
%s
</span>
%s
%s
%s
%s
</td>
</tr>
</table>

50
static/status.tmpl Normal file
View file

@ -0,0 +1,50 @@
<table id="{{%s:status_id}}" class="status {{%s:focused}} ui-table">
{{ %s : notif_info }}
<tr>
<td class="pfp-td">
<img src="{{%s:avatar}}">
</td>
<td class="status-info">
<div class="poster-stats">
<span class="username">{{%s:username}}</span>
<a class="instance-info" href="{{%s:prefix}}/@{{%s:acct}}">{{%s:acct}}</a>
<span class="alignend">
<div class="menu-container status-visibility">
{{%s:visibility}}
<div class="menu">
<ul>
<li>
<form action="{{%s:prefix}}/status/{{%s:status_id}}/interact" method="post">
<input type="hidden" name="itype" value="{{%s:unmute}}mute">
<input type="submit" class="btn-menu" value="{{%s:unmute_btn}}">
</form>
</li>
<li>
<form action="{{%s:prefix}}/status/{{%s:status_id}}/interact" method="post">
<input type="hidden" name="itype" value="{{%s:unpin}}pin">
<input type="submit" class="btn-menu" value="{{%s:unpin_btn}}">
</form>
</li>
<li>
<form action="{{%s:prefix}}/status/{{%s:status_id}/interact" method="post">
<input type="hidden" name="itype" value="{{%s:unbookmark}}bookmark">
<input type="submit" class="btn-menu" value="{{%s:unbookmark_btn}}">
</form>
</li>
{{%s:delete_status}}
</ul>
</div>
</div>
</span>
</div>
{{%s:in_reply_to_str}}
<span class="status-content">
{{%s:status_content}}
</span>
{{%s:attachments}}
{{%s:interactions}}
{{%s:emoji_reactions}}
{{%s:interaction_btns}}
</td>
</tr>
</table>