UNPKG

8.39 kBPlain TextView Raw
1# ---------------- Works, but deprecated-----------#
2# -------------------------------------------------#
3# BOOKIZA SUPERBOOK WRITERS #
4# -------------------------------------------------#
5
6
7# ---------- main() class --------- #
8
9bookiza() {
10 case "$1" in
11 new)
12 new "$@"
13 ;;
14 insert)
15 insert "$@"
16 ;;
17 add)
18 add "$@"
19 ;;
20 remove)
21 remove "$@"
22 ;;
23 clip)
24 clip "$@"
25 ;;
26 length)
27 length
28 ;;
29 status)
30 status
31 ;;
32 push)
33 push
34 ;;
35 publish)
36 publish
37 ;;
38 server)
39 server
40 ;;
41 help)
42 help
43 ;;
44 update)
45 update
46 ;;
47 -v)
48 version
49 ;;
50 *)
51 echo $"Usage: $0 { new | insert | length | remove | clip | status | push | publish | server | help | update | -v }"
52 echo $"Try: $ bookiza help "
53 esac
54}
55
56#--------- NEW PROJECT ---------#
57
58new() {
59 args=("$@")
60
61 echo "Setting up project ........"
62
63 PROJECTNAME=${args[1]}
64
65 readValidProjectName "$PROJECTNAME"
66
67 setupProject "$PROJECTNAME"
68
69 BOOKLENGTH=${args[2]}
70
71 readValidBookLength "$BOOKLENGTH"
72
73 (pickUpTemplate; cd manuscript || exit; START_AT=1; createPages "$START_AT" "$BOOKLENGTH")
74
75 setupNPM
76
77 setupRepo
78}
79
80#-------- project name ------ ##
81
82isValidArgument() {
83 test "$1"
84}
85
86readValidProjectName() {
87 PROJECTNAME=$1
88 while ! isValidArgument "$PROJECTNAME"; do
89 echo -e "Project name?: \c"
90 read -r PROJECTNAME
91 done
92}
93
94setupProject() {
95 mkdir -p "$1" && cd "$1" && touch README.md license.txt .gitignore && mkdir -p "trash" "cover" "templates" "assets" "manuscript" || return $?
96 echo "# $1" >> README.md
97 (cd templates || exit;
98 touch template.html head.html template.css template.js;
99 echo "body{background:rgba(200, 235, 255, 0.99); margin:0 0; overflow:hidden;}" >> template.css)
100 (cd assets || exit; mkdir -p "css" "javascript" "images")
101}
102
103## ------ Book length ------ ##
104
105readValidBookLength() {
106 BOOKLENGTH=$1
107
108 while ! { isValidArgument "$BOOKLENGTH" && isArgumentNumeric "$BOOKLENGTH" && isArgumentEvenNumber "$BOOKLENGTH"; }; do
109 echo -e 'Book length?: \c'
110 read -r BOOKLENGTH
111 done
112
113}
114
115isArgumentNumeric() {
116 ARGUMENT=$1
117 reg='^[0-9]+$'
118 if ! [[ $ARGUMENT =~ $reg ]] ; then
119 return 1
120 else
121 return 0
122 fi
123}
124
125isArgumentEvenNumber() {
126 ARGUMENT=$1
127 if [ $((ARGUMENT%2)) -eq 0 ] ; then
128 return 0
129 else
130 return 1
131 fi
132}
133
134createPages() {
135 args=("$@")
136
137 START_AT=${args[0]}
138
139 END_AT=${args[1]}
140
141 q=0
142 while [ "$q" -lt "$END_AT" ]; do
143 mkdir -p "page-$((START_AT+q))"
144 (cd "page-$((START_AT+q))" || exit; touch "body.html" && touch "style.css"; echo "$HTML_TEMPLATE" >> body.html)
145 q=$((q+1))
146 done
147}
148
149pickUpTemplate() {
150 HTML_TEMPLATE=$(cd "templates" || exit; cat template.html)
151}
152
153setupNPM() {
154 cp -R "$HOME/.bookiza/source" "."
155}
156
157setupRepo() {
158 git init
159 git add . -A
160 git commit -am "First commit: Setup new book project" --quiet
161 readValidRepoURL "$REPO_URL"
162 git remote add origin "$REPO_URL"
163 git push -u origin master
164 echo "Project is ready!"
165}
166
167readValidRepoURL() {
168 REPO_URL=$1
169 while ! isValidArgument "$REPO_URL"; do
170 echo -e "Repository URL?: \c"
171 read -r REPO_URL
172 done
173}
174
175
176# ---------- INSERT PAGES --------- #
177
178insert() {
179 args=("$@")
180
181 INSERT_AT=${args[1]}
182
183 readValidInsertAt "$INSERT_AT"
184
185 NUMBER_OF_PAGES=${args[2]}
186
187 readValidNumberOfPages "$NUMBER_OF_PAGES"
188
189 (cd manuscript || exit; pushStackDown "$INSERT_AT" "$NUMBER_OF_PAGES")
190
191 (pickUpTemplate; cd manuscript || exit; createPages "$INSERT_AT" "$NUMBER_OF_PAGES")
192
193}
194
195readValidInsertAt() {
196 INSERT_AT=$1
197
198 while ! { isValidArgument "$INSERT_AT" && isArgumentNumeric "$INSERT_AT" && isArgumentInRange "$INSERT_AT"; }; do
199 echo -e 'Insert at?: \c'
200 read -r INSERT_AT
201 done
202}
203
204isArgumentInRange() {
205 ARGUMENT=$1
206
207 BOOKLENGTH=$(cd manuscript || exit; getLength; echo $BOOKLENGTH)
208
209 if [[ "$ARGUMENT" -le "$BOOKLENGTH" ]] && [[ "$ARGUMENT" -gt 0 ]] ; then
210 return 0
211 else
212 return 1
213 fi
214
215}
216
217readValidNumberOfPages() {
218 NUMBER_OF_PAGES=$1
219 while ! { isValidArgument "$NUMBER_OF_PAGES" && isArgumentNumeric "$NUMBER_OF_PAGES" && isArgumentEvenNumber "$NUMBER_OF_PAGES"; }; do
220 echo -e 'Number of pages?: \c'
221 read -r NUMBER_OF_PAGES
222 done
223}
224
225
226pushStackDown() {
227 args=("$@")
228 echo INSERT_AT: "${args[0]}", [ NUMBER_OF_PAGES: "${args[1]}" ]
229
230 p="$INSERT_AT"
231
232 if [ -d "page-$p" ]; then
233 getLength
234 q="$BOOKLENGTH"
235
236 while [ "$q" -ge "$p" ]; do
237 mv "page-$((q))" "page-$((q+NUMBER_OF_PAGES))"
238 q=$((q-1))
239 done
240 fi
241}
242
243
244# ---------- ADD PAGES --------- #
245
246add() {
247 args=("$@")
248
249 NUMBER_OF_PAGES=${args[1]}
250
251 readValidNumberOfPages "$NUMBER_OF_PAGES"
252
253 (pickUpTemplate; cd manuscript || exit; getLength; createPages "$((BOOKLENGTH+1))" "$NUMBER_OF_PAGES")
254}
255
256
257# --------- REMOVE PAGE_No ----------#
258
259
260remove() {
261 args=("$@")
262
263 REMOVE_AT="${args[1]}"
264
265 readValidRemoveAt "$REMOVE_AT"
266
267 (cd manuscript || exit; deletePage "$REMOVE_AT")
268
269}
270
271readValidRemoveAt() {
272 REMOVE_AT=$1
273 while ! { isValidArgument "$REMOVE_AT" && isArgumentNumeric "$REMOVE_AT" && isArgumentInRange "$REMOVE_AT"; }; do
274 echo -e 'Remove page at?: \c'
275 read -r REMOVE_AT
276 done
277}
278
279deletePage() {
280 PAGE_NO=$1
281 if [ -d "page-$PAGE_NO" ]; then
282 (mv "page-$PAGE_NO" "../trash/page-$PAGE_NO-$(timestamp)";)
283
284 m="$PAGE_NO"
285 m=$((m+1))
286
287 until [ ! -d "page-$m" ]; do
288 mv "page-$((m))" "page-$((m-1))"
289 m=$((m+1))
290 done
291
292 (getLength; createPages "$((BOOKLENGTH+1))" 1)
293 fi
294
295}
296
297timestamp() {
298 date +"%T"
299}
300
301
302# --------- CLIP PAGE_No ----------#
303
304
305clip() {
306 echo "
307 Clip statement not ready. This will remove the page from the manuscript and lower the length of the book by 1"
308}
309
310
311# ---------- BOOKLENGTH --------- #
312
313length() {
314 if [ -d manuscript/ ] ; then
315 (cd manuscript || exit; getLength; echo "Book length is: ${BOOKLENGTH} pages.")
316 else
317 echo "Manuscript not found, probably not in project root!"
318 fi
319}
320
321getLength() {
322 BOOKLENGTH=1
323 until [ ! -d "page-$((BOOKLENGTH+1))" ]; do
324 BOOKLENGTH=$((BOOKLENGTH+1))
325 done
326}
327
328# --------- PROJECT STATUS ----------#
329
330status() {
331 git status
332}
333
334
335# --------- PUSH TO REPO ----------#
336
337push() {
338 readValidGitMessage "$MESSAGE"
339 git commit -am "${MESSAGE}"
340 git push
341}
342
343readValidGitMessage() {
344 MESSAGE=$1
345 while ! isValidArgument "$MESSAGE"; do
346 echo -e "Message: \c"
347 read -r MESSAGE
348 done
349}
350
351# --------- PUBLISH TO BUBBLIN ----------#
352
353publish() {
354 echo "# TODO: Expose authenticated POST API on https://bubblin.io"
355 readValidHostURL "$HOST_URL" # TODO: HOST_URL can be constructed using hyphenated $projectname & author-full-name
356 git remote add origin "$HOST_URL"
357 git push -u origin master
358}
359
360readValidHostURL() {
361 HOST_URL=$1
362 while ! isValidArgument "$HOST_URL"; do
363 echo -e "Bubblin URL?: \c"
364 read -r HOST_URL
365 done
366}
367
368# ---------- LOCAL SERVER --------- #
369
370server() {
371 gulp
372}
373
374# --------- FRAMEWORK GUIDE --------#
375
376help() {
377
378echo "
379# -------------------------------------------------#
380# BOOKIZA SUPERBOOK FRAMEWORK #
381# -------------------------------------------------#
382"
383echo "
384
385Usage: $ bookiza <command> [<args>]
386
387Commands glossary: $0 { new | insert | length | remove | status | push | publish | server | help | update | -v }
388
389"
390
391echo "
392 $ bookiza new <hyphenated-project-name> [expected number of pages]
393 Examples:
394 1. Project/book name: My-Awesome-Book-Name i.e. use hyphens!
395 2. Book length: 24, 100 (Must be even number. Here's why: https://bubblin.io/book/official-handbook-by-marvin-danig/36)
396 3. Github URL: https://github.com/username/my-new-book.git
397"
398
399echo "
400 $ bookiza insert [insert_at] [number_of_pages]
401 Examples:
402 1. insert_at: 31, 44 (Must be integer)
403 2. number_of_pages: 4, 8 (Must be even number)
404"
405
406echo "
407 $ bookiza add [number_of_pages]
408 Examples:
409 1. number_of_pages: 4, 8 (Must be even number)
410"
411
412echo "
413 $ bookiza remove [page_number]
414 Examples:
415 1. Removes page at [page_number]: 4, 17 (Must be integer)
416 2. And appends a blank page at the end of the book.
417"
418}
419
420
421# ---------- UPDATE SCRIPT --------- #
422
423update() {
424 (cd ~/.bookiza || exit; git pull; source ~/.bash_profile; version)
425}
426
427
428# ---------- VERSION --------- #
429
430version() {
431 echo "bookiza 0.0.1"
432}
\No newline at end of file