diff --git a/baker b/baker
index bf1f5a3..41c7864 100755
--- a/baker
+++ b/baker
@@ -10,6 +10,9 @@ readonly POST_DIR=post
# OUTPUT_DIR stores all compiled html
readonly OUTPUT_DIR=out
+# DRAFT_DIR stores all compiled html
+readonly DRAFT_DIR=draft
+
# LAYOUT_DIR stores all layout markdown files
readonly LAYOUT_DIR=layout
@@ -56,7 +59,7 @@ body() {
# slug creates a friendly URL like 'hello-world'
slug() {
- tr -cs '[:alnum:]\n' - | tr '[:upper:]' '[:lower:]' | sed 's|^-*||;s|-*$||'
+ iconv -f utf8 -t ascii//TRANSLIT | tr -cs '[:alnum:]\n' - | tr '[:upper:]' '[:lower:]' | sed 's|^-*||;s|-*$||'
}
#
@@ -271,6 +274,8 @@ usage() {
baker
post [title] draft a post
bake ship all posts
+ list list all posts with state
+ toggle [post] toggle the draft status of a post
EOF
exit 1
}
@@ -279,27 +284,61 @@ usage() {
case "$1" in
bake)
+ rm -rf "$DRAFT_DIR"
+ mkdir -p "$DRAFT_DIR"
rm -rf "$OUTPUT_DIR"
mkdir -p "$OUTPUT_DIR"
[[ -d "$POST_DIR" ]] || usage
[[ -d "$PUBLIC_DIR" ]] && cp -r "$PUBLIC_DIR"/. "$OUTPUT_DIR"
+ [[ -d "$PUBLIC_DIR" ]] && cp -r "$PUBLIC_DIR"/. "$DRAFT_DIR"
+ touch "$DRAFT_DIR/index.html"
readarray -t posts < <(find "$POST_DIR" -name '*.md' | sort -r)
-
+ echo "Rendering Posts..." >&2
idx=0
+ id_all=0
time for post in "${posts[@]}"; do
+ idx_prev=1;idx_next=1
id="$(basename "$post" .md)"
# skip drafts
- [[ "$(header draft < "$post")" == false ]] || continue
+ if [ "$(header draft < "$post")" != false ]; then
+ (( id_all++ ))
+ POST_PREV='index.html';POST_NEXT='index.html'; render_file "$post" > "$DRAFT_DIR/$id.html"; continue;
+ fi
+ if [ ${idx} -eq 0 ]; then # It's the first post, so the newer one is index
+ id_prev=0
+ else # search for the previous post not draft
+ while [ -f "${posts[$((id_all-idx_prev))]}" -a "$(header draft < "${posts[$((id_all-idx_prev))]}" 2>/dev/null)" != false ]; do
+ (( idx_prev++ ))
+ if [ ${idx_prev} -gt ${id_all} ]; then idx_prev=${id_all}; break; fi
+ done 2>/dev/null
+ fi
+ # look for the next older post not draft
+ while [ -f "${posts[$((id_all+idx_next))]}" -a "$(header draft < "${posts[$((id_all+idx_next))]}" 2>/dev/null)" != false ]; do
+ (( idx_next++ ))
+ done 2>/dev/null
+
+ if [ ${idx} -eq 0 -o $((idx_all-idx_prev)) -eq 0 -a ${id_all} -eq 0 ]; then
+ POST_PREV="index.html"
+ else
+ POST_PREV="$( basename "${posts[$((id_all-idx_prev))]}" )"
+ POST_PREV="${POST_PREV%*.md}.html"
+ fi
+ POST_NEXT="$( basename "${posts[$((id_all+idx_next))]}" )"
+ [[ -z "${POST_PREV:=}" ]] && POST_PREV='index.html'
+ [[ -z "${POST_NEXT:=}" ]] && POST_NEXT='index.md'
+ echo "$idx - $idx_next - $id [Prev:${POST_PREV}][Next:${POST_NEXT}]"
+ POST_NEXT="${POST_NEXT%*.md}.html"
- echo "$id"
render_file "$post" > "$OUTPUT_DIR/$id.html" &
declare "posts_${idx}_id"="$id"
export_headers "$post" "posts_${idx}_"
+ POST_PREV="$id.html"
+ (( id_all++ ))
(( idx++ ))
done
-
+ echo "Rendering Index..." >&2
render_file "$LAYOUT_DIR/index.md" > "$OUTPUT_DIR/index.html" &
wait
;;
@@ -322,6 +361,45 @@ post)
echo "$post_file"
[[ "$EDITOR" ]] && $EDITOR "$post_file"
;;
+list)
+ idx=0
+ readarray -t posts < <(find "$POST_DIR" -name '*.md' | sort -r)
+ (
+ echo "id title status"
+ for post in "${posts[@]}"; do
+ id="$(basename "$post" .md)"
+ # skip drafts
+ if [ "$(header draft < "$post")" == 'false' ]; then
+ echo "${idx} $id [Published]"
+ else
+ echo "${idx} $id [Draft]"
+ fi
+ ((idx++))
+ done
+ ) | column -t
+ ;;
+toggle)
+ _fname=''
+ readarray -t posts < <(find "$POST_DIR" -name '*.md' | sort -r)
+ if [ -z "${2:-}" ]; then
+ usage
+ elif [ -z "${2//[0-9]/}" ]; then
+ if [ ${2} -lt ${#posts[@]} ]; then
+ _fname="${posts[${2}]}"
+ fi
+ elif [ -f "${POST_DIR}/${2}" -o -f "${POST_DIR}/${2}.md" ]; then
+ _fname="${POST_DIR}/${2//\.md/}.md"
+ fi
+ if [ -z "${_fname}" ]; then
+ echo "This post doesn't exist"
+ exit 1
+ fi
+ if [ "$(header draft < "${_fname}")" == 'false' ]; then
+ sed -i -e 's;^[[:space:]]*draft:[[:space:]]*false[[:space:]]*$;draft: true;g' "${_fname}"
+ else
+ sed -i -e 's;^[[:space:]]*draft:[[:space:]]*.*[[:space:]]*$;draft: false;g' "${_fname}"
+ fi
+ ;;
*)
usage
;;
diff --git a/layout/post.md b/layout/post.md
index 23f19d9..e5a926f 100644
--- a/layout/post.md
+++ b/layout/post.md
@@ -12,6 +12,8 @@
diff --git a/post/2015-11-20-welcome-to-baker.md b/post/2015-11-20-welcome-to-baker.md
new file mode 100644
index 0000000..7ba852f
--- /dev/null
+++ b/post/2015-11-20-welcome-to-baker.md
@@ -0,0 +1,11 @@
+---
+title: Welcome to Baker!
+date: 2015-11-20T11:06:07Z
+layout: post
+draft: false
+summary: This is your second post.
+---
+
+With the **Markdown** syntax, expect more readbility. Be prepared to start blogging!
+
+