diff options
author | Martijn Dekker <martijn@inlv.org> | 2016-09-06 03:45:35 +0200 |
---|---|---|
committer | Martijn Dekker <martijn@inlv.org> | 2016-09-06 03:45:35 +0200 |
commit | 62a26bb5759fa74277178a98cc2d45b0c404322a (patch) | |
tree | 2dcf1cc94567f1956ed4aeae2684818504ab5693 | |
parent | 54cc0c80600035b3ac09f2a50a60f1cfb33b3942 (diff) | |
parent | a36566a90cef64e18eabc693ca27eb4c12d775cd (diff) |
Merge remote-tracking branch 'upstream/master'
Resolve minor editing 2.6-to-2.7 editing conflict in bb.sh
-rw-r--r-- | README.md | 8 | ||||
-rwxr-xr-x | bb.sh | 47 |
2 files changed, 38 insertions, 17 deletions
@@ -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. +[](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. [](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<br/> 'tags' command<br/> @@ -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 <draft_file>\"?" && 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 '</a></h3>' if [[ -z $timestamp ]]; then - echo "<div class=\"subtitle\">$(LC_ALL=$date_locale date +"$date_format") — " + echo "<!-- $date_inpost: #$(LC_ALL=$date_locale date +"$date_format_timestamp")# -->" + else + echo "<!-- $date_inpost: #$(LC_ALL=$date_locale date +"$date_format_timestamp" --date="$timestamp")# -->" + fi + if [[ -z $timestamp ]]; then + echo -n "<div class=\"subtitle\">$(LC_ALL=$date_locale date +"$date_format")" else - echo "<div class=\"subtitle\">$(LC_ALL=$date_locale date +"$date_format" --date="$timestamp") — " + echo -n "<div class=\"subtitle\">$(LC_ALL=$date_locale date +"$date_format" --date="$timestamp")" fi - echo "$author</div>" + [[ -n $author ]] && echo -e " — \n$author" + echo "</div>" echo '<!-- text begin -->' # 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 '<?xml version="1.0" encoding="UTF-8" ?>' echo '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">' echo "<channel><title>$global_title</title><link>$global_url/$index_file</link>" @@ -921,7 +933,7 @@ make_rss() { echo "]]></description><link>$global_url/${i#./}</link>" echo "<guid>$global_url/$i</guid>" echo "<dc:creator>$(get_post_author "$i")</dc:creator>" - echo "<pubDate>$(LC_ALL=C date -r "$i" +"%a, %d %b %Y %H:%M:%S %z")</pubDate></item>" + echo "<pubDate>$(LC_ALL=C date -r "$i" +"$date_format_full")</pubDate></item>" 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 '/<!-- '$date_inpost': .+ -->/ { 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 "$@" |