-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkarat-cli
executable file
·143 lines (123 loc) · 5.55 KB
/
karat-cli
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/usr/bin/make -f
# KARAT-CLI =-=-=-=-=-=-=-=-=
# requires sponge (from moreutils) and jq
## config variables
SITEURL:=https://karatsubascans.com
## overwrite variables for local build
ifneq (,./config.mk)
include config.mk
endif
## no trailing slash in dirs
CONTENT_DIR:=content
MANGA_CONTENT_DIR:=$(CONTENT_DIR)/manga
BLOG_CONTENT_DIR:=$(CONTENT_DIR)/blog
TEMPLATE_DIR:=templates
OUT_DIR:=build
RSS_DIR:=$(OUT_DIR)/feeds
## misc vars
MANGA_LIST=$(subst .json,,$(shell ls $(MANGA_CONTENT_DIR) | grep .*\.json))
.PHONY: help init build clean new-manga new-chapter new-blog edit-blog
help:
@echo 'karat-cli help|build|clean|new-manga|new-chapter|new-blog|edit-blog'
build: $(OUT_DIR)/index.html $(OUT_DIR)/blog.html $(OUT_DIR)/team.html $(addprefix $(OUT_DIR)/manga/,$(addsuffix .html,$(MANGA_LIST))) $(addprefix $(RSS_DIR)/,$(addsuffix .xml,$(MANGA_LIST)))
init:
mkdir -p $(MANGA_CONTENT_DIR) $(BLOG_CONTENT_DIR)
new-manga:
@if [ -z "$(name)" ]; then \
echo "Missing name field."; exit 1; \
fi; \
echo "Creating new manga page for '$(name)'"; \
export KS_MANGATITLE="$(name)"; \
content_file="$(MANGA_CONTENT_DIR)/$$KS_MANGATITLE.json"; \
envsubst < "$(TEMPLATE_DIR)/mangainfo.template.json" > "$$content_file"; \
"$$EDITOR" "$$content_file"; \
echo "Once you are satisfied with your changes, you can rebuild to generate the html page."
new-chapter:
@if [ -z "$(name)" ]; then \
echo "Missing name field."; exit 1; \
fi; \
chapter_info=`mktemp --suffix=.json`; \
cat "$(TEMPLATE_DIR)/mangachapter.template.json" > "$$chapter_info"; \
"$$EDITOR" "$$chapter_info"; \
sed -i '1s/^/.chapters += /' "$$chapter_info"; \
jq -f "$$chapter_info" "$(MANGA_CONTENT_DIR)/$(name).json" | sponge "$(CONTENT_DIR)/$(name).json"; \
rm "$$chapter_info"
new-blog:
@echo "new blog"
edit-blog:
@echo "edit blog"
clean:
@echo "cleaning..."; \
rm $(OUT_DIR)/index.html $(OUT_DIR)/blog.html $(OUT_DIR)/team.html $(OUT_DIR)/manga/*.html $(RSS_DIR)/*.xml
$(OUT_DIR)/index.html: $(MANGA_CONTENT_DIR)/
@echo "building index..."; \
mkdir -p "$(OUT_DIR)/manga/"; \
export KS_SITEURL="$(SITEURL)"; \
cp $(TEMPLATE_DIR)/body.template.html "$@"; \
sed -i "/<!-- KS_PAGEMOUNT -->/r $(TEMPLATE_DIR)/homepage.template.html" "$@"; \
envsubst < "$@" | sponge "$@"; \
manga_html=`mktemp`; \
for manga_file in `ls $(MANGA_CONTENT_DIR)/`; do \
export KS_MANGATITLE=`jq -r '.name' "$(MANGA_CONTENT_DIR)/$$manga_file"`; \
export KS_BANNERURL=`jq -r '.banner_url' "$(MANGA_CONTENT_DIR)/$$manga_file"`; \
export KS_MANGAPAGE=manga/`echo "$$manga_file" | sed 's/.json/.html/'`; \
envsubst < "$(TEMPLATE_DIR)/main_manga.html" > "$$manga_html"; \
sed -i "/<!-- KS_MANGALIST -->/r $$manga_html" "$@"; \
done; \
rm "$$manga_html"
$(OUT_DIR)/blog.html:
@echo "building blog..."; \
export KS_SITEURL="$(SITEURL)"; \
cp $(TEMPLATE_DIR)/body.template.html "$@"; \
sed -i "/<!-- KS_PAGEMOUNT -->/r $(TEMPLATE_DIR)/blogpage.template.html" "$@"; \
envsubst < "$@" | sponge "$@"; \
$(OUT_DIR)/team.html:
@echo "building team page..."; \
export KS_SITEURL="$(SITEURL)"; \
cp $(TEMPLATE_DIR)/body.template.html "$@"; \
sed -i "/<!-- KS_PAGEMOUNT -->/r $(TEMPLATE_DIR)/teampage.template.html" "$@"; \
envsubst < "$@" | sponge "$@"; \
$(OUT_DIR)/manga/%.html: $(MANGA_CONTENT_DIR)/%.json
@echo "building manga page: $@"; \
export mangafile=$(notdir $(basename $@)); \
export KS_SITEURL="$(SITEURL)"; \
export KS_MANGATITLE=`jq -r '.name' "$^"`; \
export KS_DESCRIPTION=`jq -r '.description' "$^"`; \
export KS_COVERURL=`jq -r '.cover_url' "$(MANGA_CONTENT_DIR)/$$mangafile.json"`; \
export KS_RSSURL="$(SITEURL)/feeds/$$mangafile.xml"; \
cp $(TEMPLATE_DIR)/body.template.html "$@"; \
sed -i "/<!-- KS_HEAD -->/r $(TEMPLATE_DIR)/mangapage_head.template.html" "$@"; \
sed -i "/<!-- KS_PAGEMOUNT -->/r $(TEMPLATE_DIR)/mangapage.template.html" "$@"; \
envsubst < "$@" | sponge "$@"; \
chapter_html=`mktemp`; \
for k in `jq -c '.chapters | keys | .[]' "$(MANGA_CONTENT_DIR)/$$mangafile.json"`; do \
chapter=`jq -rc ".chapters[$$k]" "$(MANGA_CONTENT_DIR)/$$mangafile.json"`; \
export KS_CHAPTERNAME=`echo "$$chapter" | jq -r '.chapter_name'`; \
export KS_PNGLINK=`echo "$$chapter" | jq -r '.png_link'`; \
export KS_PDFLINK=`echo "$$chapter" | jq -r '.pdf_link'`; \
export KS_MESSAGE=`echo "$$chapter" | jq -r '.message'`; \
export KS_TIMEPUBLISHED=`echo "$$chapter" | jq -r '.time_published'`; \
envsubst < $(TEMPLATE_DIR)/mangapage_chapter.template.html > "$$chapter_html"; \
sed -i "/<!-- KS_CHAPTERLIST -->/r $$chapter_html" "$@"; \
done; \
rm "$$chapter_html";
# this is pretty similar to manga page, maybe abstract somehow
$(RSS_DIR)/%.xml: $(MANGA_CONTENT_DIR)/%.json
@echo "building feed: $@"; \
export mangafile=$(notdir $(basename $@)); \
export KS_MANGATITLE=`jq -r '.name' "$^"`; \
export KS_MANGAURL="$(SITEURL)/manga/$$mangafile.html"; \
export KS_DESCRIPTION=`jq -r '.description' "$^"`; \
envsubst < $(TEMPLATE_DIR)/feed.template.xml > "$@"; \
chapter_xml=`mktemp`; \
for k in `jq -c '.chapters | keys | .[]' "$(MANGA_CONTENT_DIR)/$$mangafile.json"`; do \
chapter=`jq -rc ".chapters[$$k]" "$(MANGA_CONTENT_DIR)/$$mangafile.json"`; \
export KS_CHAPTERNAME=`echo "$$chapter" | jq -r '.chapter_name'`; \
export KS_PNGLINK=`echo "$$chapter" | jq -r '.png_link'`; \
export KS_PDFLINK=`echo "$$chapter" | jq -r '.pdf_link'`; \
export KS_MESSAGE=`echo "$$chapter" | jq -r '.message'`; \
export KS_TIMEPUBLISHED=`echo "$$chapter" | jq -r '.time_published'`; \
envsubst < $(TEMPLATE_DIR)/feed_chapter.template.xml > "$$chapter_xml"; \
sed -i "/<!-- KS_FEED -->/r $$chapter_xml" "$@"; \
done; \
rm "$$chapter_xml";