diff --git a/README.md b/README.md index 0c22047..8a5e362 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,14 @@ I created it because I wanted a very, very simple way to post entries to a blog *How simple? Just type `./bb.sh post` and start writing your blogpost.* -You can see it live here: [read the initial blog post](https://web.archive.org/web/20130520204024/http://mmb.pcb.ub.es/~carlesfe/blog/creating-a-simple-blog-system-with-a-500-line-bash-script.html). That page was 100% generated using bashblog, no additional tweaking. +[![asciinema](https://asciinema.org/a/4nr44km9ipow4s7u2w2eabeik.png)](https://asciinema.org/a/4nr44km9ipow4s7u2w2eabeik) + +You can see a sample here: [read the initial blog post](https://web.archive.org/web/20130520204024/http://mmb.pcb.ub.es/~carlesfe/blog/creating-a-simple-blog-system-with-a-500-line-bash-script.html). That page was 100% generated using bashblog, no additional tweaking. [![demo](https://raw.githubusercontent.com/cfenollosa/bashblog/gh-pages/images/demo_thumb.png)](https://raw.githubusercontent.com/cfenollosa/bashblog/gh-pages/images/demo.png) +Check out [other bashblog users](https://www.google.com/search?q=%22Generated+with+bashblog,+a+single+bash+script+to+easily+create+blogs+like+this+one%22) + Usage ----- @@ -128,6 +132,8 @@ As a guideline, pull requests should: Changelog --------- +- 2.7 Store post date on a comment in the html file (#96). + On rebuild, the post date will be synchronised between comment date and file date, with precedence for comment date. - 2.6 Support for multiple authors, use a different `.config` for each one - 2.5 Massive code cleanup by Martijn Dekker
'tags' command
diff --git a/bb.sh b/bb.sh index 144f9b9..23bdab6 100755 --- a/bb.sh +++ b/bb.sh @@ -29,7 +29,7 @@ global_config=".config" # by the 'global_config' file contents global_variables() { global_software_name="BashBlog" - global_software_version="2.6" + global_software_version="2.7" # Blog title global_title="My fancy blog" @@ -136,10 +136,14 @@ global_variables() { template_twitter_button="Tweet" template_twitter_comment="<Type your comment here but please leave the URL so that other people can follow the comments>" - # The locale to use for the dates displayed on screen (not for the timestamps) + # The locale to use for the dates displayed on screen date_format="%B %d, %Y" - date_allposts_header="%B %Y" date_locale="C" + date_inpost="bashblog_timestamp" + # Don't change these dates + date_format_full="%a, %d %b %Y %H:%M:%S %z" + date_format_timestamp="%Y%m%d%H%M.%S" + date_allposts_header="%B %Y" # Perform the post title -> filename conversion # Experts only. You may need to tune the locales too @@ -285,9 +289,10 @@ invoke_editor() { # "full" to edit full HTML, and not only text part (keeps old filename) # leave empty for default behavior (edit only text part and change name) edit() { + [[ ! -f "${1%%.*}.html" ]] && echo "Can't edit post "${1%%.*}.html", did you mean to use \"bb.sh post \"?" && exit -1 # Original post timestamp - edit_timestamp=$(LC_ALL=C date -r "${1%%.*}.html" +"%a, %d %b %Y %H:%M:%S %z" ) - touch_timestamp=$(LC_ALL=C date -r "${1%%.*}.html" +'%Y%m%d%H%M') + edit_timestamp=$(LC_ALL=C date -r "${1%%.*}.html" +"$date_format_full" ) + touch_timestamp=$(LC_ALL=C date -r "${1%%.*}.html" +"$date_format_timestamp") tags_before=$(tags_in_post "${1%%.*}.html") if [[ $2 == full ]]; then invoke_editor "$1" @@ -323,6 +328,7 @@ edit() { rm "$TMPFILE" fi touch -t "$touch_timestamp" "$filename" + touch -t "$touch_timestamp" "$1" chmod 644 "$filename" echo "Posted $filename" tags_after=$(tags_in_post "$filename") @@ -454,11 +460,17 @@ create_html_page() { echo "$title" echo '' if [[ -z $timestamp ]]; then - echo "
$(LC_ALL=$date_locale date +"$date_format") — " + echo "" else - echo "
$(LC_ALL=$date_locale date +"$date_format" --date="$timestamp") — " + echo "" fi - echo "$author
" + if [[ -z $timestamp ]]; then + echo -n "
$(LC_ALL=$date_locale date +"$date_format")" + else + echo -n "
$(LC_ALL=$date_locale date +"$date_format" --date="$timestamp")" + fi + [[ -n $author ]] && echo -e " — \n$author" + echo "
" echo '' # This marks the text body, after the title, date... fi cat "$content" # Actual content @@ -900,7 +912,7 @@ make_rss() { while [[ -f $rssfile ]]; do rssfile=$blog_feed.$RANDOM; done { - pubdate=$(LC_ALL=C date +"%a, %d %b %Y %H:%M:%S %z") + pubdate=$(LC_ALL=C date +"$date_format_full") echo '' echo '' echo "$global_title$global_url/$index_file" @@ -921,7 +933,7 @@ make_rss() { echo "]]>$global_url/${i#./}" echo "$global_url/$i" echo "$(get_post_author "$i")" - echo "$(LC_ALL=C date -r "$i" +"%a, %d %b %Y %H:%M:%S %z")" + echo "$(LC_ALL=C date -r "$i" +"$date_format_full")" n=$(( n + 1 )) done @@ -989,6 +1001,7 @@ create_css() { #description{font-size:large;margin-bottom:12px;} h3{margin-top:42px;margin-bottom:8px;} h4{margin-left:24px;margin-right:24px;} + img{max-width:100%;} #twitter{line-height:20px;vertical-align:top;text-align:right;font-style:italic;color:#333;margin-top:24px;font-size:14px;}' > blog.css fi @@ -1022,8 +1035,7 @@ create_css() { rebuild_all_entries() { echo -n "Rebuilding all entries " - for i in $(set +f; printf '%s\n' *.html) # no need to sort - do + for i in $(set +f; printf '%s\n' *.html); do is_boilerplate_file "$i" && continue; contentfile=.tmp.$RANDOM while [[ -f $contentfile ]]; do contentfile=.tmp.$RANDOM; done @@ -1034,12 +1046,15 @@ rebuild_all_entries() { get_html_file_content 'text' 'text' <"$i" >> "$contentfile" - # Original post timestamp - timestamp=$(LC_ALL=C date -r "$i" +"%a, %d %b %Y %H:%M:%S %z" ) + # Read timestamp from post, if present, and sync file timestamp + timestamp=$(awk '// { print }' "$i" | cut -d '#' -f 2) + [[ -n $timestamp ]] && touch -t "$timestamp" "$i" + # Read timestamp from file in correct format for 'create_html_page' + timestamp=$(LC_ALL=C date -r "$i" +"$date_format_full") create_html_page "$contentfile" "$i.rebuilt" no "$title" "$timestamp" "$(get_post_author "$i")" # keep the original timestamp! - timestamp=$(LC_ALL=C date -r "$i" +'%Y%m%d%H%M') + timestamp=$(LC_ALL=C date -r "$i" +"$date_format_timestamp") mv "$i.rebuilt" "$i" chmod 644 "$i" touch -t "$timestamp" "$i" @@ -1103,7 +1118,7 @@ date_version_detect() { stat -f "%Sm" -t "$format" "$2" elif [[ $2 == --date* ]]; then # convert between dates using BSD date syntax - command date -j -f "%a, %d %b %Y %H:%M:%S %z" "${2#--date=}" "$1" + command date -j -f "$date_format_full" "${2#--date=}" "$1" else # acceptable format for BSD date command date -j "$@"