1 | # ---------------- Works, but deprecated-----------#
|
2 | # -------------------------------------------------#
|
3 | # BOOKIZA SUPERBOOK WRITERS #
|
4 | # -------------------------------------------------#
|
5 |
|
6 |
|
7 | # ---------- main() class --------- #
|
8 |
|
9 | bookiza() {
|
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 |
|
58 | new() {
|
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 |
|
82 | isValidArgument() {
|
83 | test "$1"
|
84 | }
|
85 |
|
86 | readValidProjectName() {
|
87 | PROJECTNAME=$1
|
88 | while ! isValidArgument "$PROJECTNAME"; do
|
89 | echo -e "Project name?: \c"
|
90 | read -r PROJECTNAME
|
91 | done
|
92 | }
|
93 |
|
94 | setupProject() {
|
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 |
|
105 | readValidBookLength() {
|
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 |
|
115 | isArgumentNumeric() {
|
116 | ARGUMENT=$1
|
117 | reg='^[0-9]+$'
|
118 | if ! [[ $ARGUMENT =~ $reg ]] ; then
|
119 | return 1
|
120 | else
|
121 | return 0
|
122 | fi
|
123 | }
|
124 |
|
125 | isArgumentEvenNumber() {
|
126 | ARGUMENT=$1
|
127 | if [ $((ARGUMENT%2)) -eq 0 ] ; then
|
128 | return 0
|
129 | else
|
130 | return 1
|
131 | fi
|
132 | }
|
133 |
|
134 | createPages() {
|
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 |
|
149 | pickUpTemplate() {
|
150 | HTML_TEMPLATE=$(cd "templates" || exit; cat template.html)
|
151 | }
|
152 |
|
153 | setupNPM() {
|
154 | cp -R "$HOME/.bookiza/source" "."
|
155 | }
|
156 |
|
157 | setupRepo() {
|
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 |
|
167 | readValidRepoURL() {
|
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 |
|
178 | insert() {
|
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 |
|
195 | readValidInsertAt() {
|
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 |
|
204 | isArgumentInRange() {
|
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 |
|
217 | readValidNumberOfPages() {
|
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 |
|
226 | pushStackDown() {
|
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 |
|
246 | add() {
|
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 |
|
260 | remove() {
|
261 | args=("$@")
|
262 |
|
263 | REMOVE_AT="${args[1]}"
|
264 |
|
265 | readValidRemoveAt "$REMOVE_AT"
|
266 |
|
267 | (cd manuscript || exit; deletePage "$REMOVE_AT")
|
268 |
|
269 | }
|
270 |
|
271 | readValidRemoveAt() {
|
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 |
|
279 | deletePage() {
|
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 |
|
297 | timestamp() {
|
298 | date +"%T"
|
299 | }
|
300 |
|
301 |
|
302 | # --------- CLIP PAGE_No ----------#
|
303 |
|
304 |
|
305 | clip() {
|
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 |
|
313 | length() {
|
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 |
|
321 | getLength() {
|
322 | BOOKLENGTH=1
|
323 | until [ ! -d "page-$((BOOKLENGTH+1))" ]; do
|
324 | BOOKLENGTH=$((BOOKLENGTH+1))
|
325 | done
|
326 | }
|
327 |
|
328 | # --------- PROJECT STATUS ----------#
|
329 |
|
330 | status() {
|
331 | git status
|
332 | }
|
333 |
|
334 |
|
335 | # --------- PUSH TO REPO ----------#
|
336 |
|
337 | push() {
|
338 | readValidGitMessage "$MESSAGE"
|
339 | git commit -am "${MESSAGE}"
|
340 | git push
|
341 | }
|
342 |
|
343 | readValidGitMessage() {
|
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 |
|
353 | publish() {
|
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 |
|
360 | readValidHostURL() {
|
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 |
|
370 | server() {
|
371 | gulp
|
372 | }
|
373 |
|
374 | # --------- FRAMEWORK GUIDE --------#
|
375 |
|
376 | help() {
|
377 |
|
378 | echo "
|
379 | # -------------------------------------------------#
|
380 | # BOOKIZA SUPERBOOK FRAMEWORK #
|
381 | # -------------------------------------------------#
|
382 | "
|
383 | echo "
|
384 |
|
385 | Usage: $ bookiza <command> [<args>]
|
386 |
|
387 | Commands glossary: $0 { new | insert | length | remove | status | push | publish | server | help | update | -v }
|
388 |
|
389 | "
|
390 |
|
391 | echo "
|
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 |
|
399 | echo "
|
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 |
|
406 | echo "
|
407 | $ bookiza add [number_of_pages]
|
408 | Examples:
|
409 | 1. number_of_pages: 4, 8 (Must be even number)
|
410 | "
|
411 |
|
412 | echo "
|
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 |
|
423 | update() {
|
424 | (cd ~/.bookiza || exit; git pull; source ~/.bash_profile; version)
|
425 | }
|
426 |
|
427 |
|
428 | # ---------- VERSION --------- #
|
429 |
|
430 | version() {
|
431 | echo "bookiza 0.0.1"
|
432 | } |
\ | No newline at end of file |