Added tag support
This commit is contained in:
parent
7476780742
commit
948150ed92
1 changed files with 65 additions and 13 deletions
78
bb.sh
78
bb.sh
|
@ -64,6 +64,7 @@
|
||||||
#
|
#
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
#
|
#
|
||||||
|
# 2.1 Support for tags/categories
|
||||||
# 2.0.3 Support for other analytics code, via external file
|
# 2.0.3 Support for other analytics code, via external file
|
||||||
# 2.0.2 Fixed bug when $body_begin_file was empty
|
# 2.0.2 Fixed bug when $body_begin_file was empty
|
||||||
# Added extra line in the footer linking to the github project
|
# Added extra line in the footer linking to the github project
|
||||||
|
@ -110,7 +111,7 @@ global_config=".config"
|
||||||
# by the 'global_config' file contents
|
# by the 'global_config' file contents
|
||||||
global_variables() {
|
global_variables() {
|
||||||
global_software_name="BashBlog"
|
global_software_name="BashBlog"
|
||||||
global_software_version="2.0.3"
|
global_software_version="2.1"
|
||||||
|
|
||||||
# Blog title
|
# Blog title
|
||||||
global_title="My fancy blog"
|
global_title="My fancy blog"
|
||||||
|
@ -156,7 +157,7 @@ global_variables() {
|
||||||
# feed file (rss in this case)
|
# feed file (rss in this case)
|
||||||
blog_feed="feed.rss"
|
blog_feed="feed.rss"
|
||||||
number_of_feed_articles="10"
|
number_of_feed_articles="10"
|
||||||
# prefix for category/tag files
|
# prefix for tags/categories files
|
||||||
# please make sure that no other html file starts with this prefix
|
# please make sure that no other html file starts with this prefix
|
||||||
prefix_tags="tag_"
|
prefix_tags="tag_"
|
||||||
# personalized header and footer (only if you know what you're doing)
|
# personalized header and footer (only if you know what you're doing)
|
||||||
|
@ -301,7 +302,7 @@ disqus_footer() {
|
||||||
# Please note that this function does not automatically republish anything, as
|
# Please note that this function does not automatically republish anything, as
|
||||||
# it is usually called from 'main'.
|
# it is usually called from 'main'.
|
||||||
#
|
#
|
||||||
# 'edit' is kind of an advanced function, as it leaves to the user the responsibility
|
# 'edit' is kind of an advanced feature, as it leaves to the user the responsibility
|
||||||
# of editing an html file
|
# of editing an html file
|
||||||
#
|
#
|
||||||
# $1 the file to edit
|
# $1 the file to edit
|
||||||
|
@ -340,7 +341,7 @@ twitter() {
|
||||||
# Return 0 (bash return value 'true') if the input file is am index, feed, etc
|
# Return 0 (bash return value 'true') if the input file is am index, feed, etc
|
||||||
# or 1 (bash return value 'false') if it is a blogpost
|
# or 1 (bash return value 'false') if it is a blogpost
|
||||||
is_boilerplate_file() {
|
is_boilerplate_file() {
|
||||||
if [[ "$i" == "$index_file" ]] || [[ "$i" == "$archive_index" ]] || [[ "$i" == "$footer_file" ]] || [[ "$i" == "$header_file" ]] || [[ "$i" == "global_analytics_file" ]] || [[ "$1" = "$prefix_tags"* ]] ; then return 0
|
if [[ "$1" == "$index_file" ]] || [[ "$1" == "$archive_index" ]] || [[ "$1" == "$footer_file" ]] || [[ "$1" == "$header_file" ]] || [[ "$1" == "$global_analytics_file" ]] || [[ "$1" = "$prefix_tags"* ]] ; then return 0
|
||||||
else return 1
|
else return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -475,14 +476,20 @@ write_entry() {
|
||||||
[[ "$extension" == "md" ]] && fmt="md"
|
[[ "$extension" == "md" ]] && fmt="md"
|
||||||
else
|
else
|
||||||
TMPFILE=".entry-$RANDOM.$fmt"
|
TMPFILE=".entry-$RANDOM.$fmt"
|
||||||
echo "Title on this line" >> "$TMPFILE"
|
echo -e "Title on this line\n" >> "$TMPFILE"
|
||||||
echo "" >> "$TMPFILE"
|
|
||||||
[[ "$fmt" == "html" ]] && echo -n "<p>" >> "$TMPFILE"
|
[[ "$fmt" == "html" ]] && cat << EOF >> "$TMPFILE"
|
||||||
echo -n "The rest of the text file is " >> "$TMPFILE"
|
<p>The rest of the text file is an <b>html</b> blog post. The process will continue as soon
|
||||||
[[ "$fmt" == "html" ]] && echo -n "an <b>html</b> " >> "$TMPFILE"
|
as you exit your editor.</p>
|
||||||
[[ "$fmt" == "md" ]] && echo -n "a **Markdown** " >> "$TMPFILE"
|
|
||||||
echo -n "blog post. The process will continue as soon as you exit your editor" >> "$TMPFILE"
|
<p>Tags: keep-this-tag-format, tags-are-optional, example</p>
|
||||||
[[ "$fmt" == "html" ]] && echo "</p>" >> "$TMPFILE"
|
EOF
|
||||||
|
[[ "$fmt" == "md" ]] && cat << EOF >> "$TMPFILE"
|
||||||
|
The rest of the text file is a **Markdown** blog post. The process will continue
|
||||||
|
as soon as you exit your editor.
|
||||||
|
|
||||||
|
Tags: keep-this-tag-format, tags-are-optional, beware-with-underscores-in-markdown, example
|
||||||
|
EOF
|
||||||
fi
|
fi
|
||||||
chmod 600 "$TMPFILE"
|
chmod 600 "$TMPFILE"
|
||||||
|
|
||||||
|
@ -531,6 +538,23 @@ write_entry() {
|
||||||
done
|
done
|
||||||
|
|
||||||
rm "$TMPFILE"
|
rm "$TMPFILE"
|
||||||
|
# Parse possible tags
|
||||||
|
cp "$filename" "$filename.bak"
|
||||||
|
while read line; do
|
||||||
|
if [[ "$line" = "<p>Tags:"* ]]; then
|
||||||
|
tags="$(echo "$line" | cut -d ":" -f 2- | sed -e 's/<\/p>//g' -e 's/^ *//' -e 's/ *$//' -e 's/, /,/g')"
|
||||||
|
IFS=, read -r -a array <<< "$tags"
|
||||||
|
|
||||||
|
echo -n "<p>Tags: "
|
||||||
|
(for item in "${array[@]}"; do
|
||||||
|
echo -n "<a href='$prefix_tags$item.html'>$item</a>, "
|
||||||
|
done ) | sed 's/, $//g'
|
||||||
|
echo -e "</p>"
|
||||||
|
else echo "$line"
|
||||||
|
fi
|
||||||
|
done < "$filename.bak" > "$filename"
|
||||||
|
rm "$filename.bak"
|
||||||
|
|
||||||
chmod 644 "$filename"
|
chmod 644 "$filename"
|
||||||
echo "Posted $filename"
|
echo "Posted $filename"
|
||||||
}
|
}
|
||||||
|
@ -599,12 +623,39 @@ rebuild_index() {
|
||||||
chmod 644 "$index_file"
|
chmod 644 "$index_file"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Rebuilds all tag_*.html files
|
||||||
rebuild_tags() {
|
rebuild_tags() {
|
||||||
echo -n "Rebuilding tag pages "
|
echo -n "Rebuilding tag pages "
|
||||||
n=0
|
n=0
|
||||||
|
rm $prefix_tags*.tmp.html &> /dev/null
|
||||||
|
# First we will process all files and create temporal tag files
|
||||||
|
# with just the content of the posts
|
||||||
for i in $(ls -t *.html); do
|
for i in $(ls -t *.html); do
|
||||||
echo
|
is_boilerplate_file "$i" && continue;
|
||||||
|
echo -n "."
|
||||||
|
tmpfile="$(mktemp tmp.XXX)"
|
||||||
|
awk '/<!-- entry begin -->/, /<!-- entry end -->/' "$i" >> "$tmpfile"
|
||||||
|
while read line; do
|
||||||
|
if [[ "$line" = "<p>Tags:"* ]]; then
|
||||||
|
# 'split' tags by commas
|
||||||
|
echo "$line" | cut -c 10- | while IFS="," read -a tags; do
|
||||||
|
for dirty_tag in "${tags[@]}"; do # extract html around it
|
||||||
|
tag="$(echo $dirty_tag | grep -o ">.*</a>" | awk '{print substr($0, 2, length($0)-5)}' | tr " " "_")"
|
||||||
|
# Add the content of this post to the tag file
|
||||||
|
cat "$tmpfile" >> "$prefix_tags$tag".tmp.html
|
||||||
|
done
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
done < "$tmpfile"
|
||||||
|
rm "$tmpfile"
|
||||||
done
|
done
|
||||||
|
# Now generate the tag files with headers, footers, etc
|
||||||
|
for i in $(ls -t $prefix_tags*.tmp.html); do
|
||||||
|
tagname="$(echo $i | cut -c $((${#prefix_tags}+1))- | sed 's/\.tmp\.html//g')"
|
||||||
|
create_html_page "$i" "$prefix_tags$tagname.html" yes "$global_title — Posts tagged \"$tagname\""
|
||||||
|
rm "$i"
|
||||||
|
done
|
||||||
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
# Return the post title
|
# Return the post title
|
||||||
|
@ -890,6 +941,7 @@ do_main() {
|
||||||
rebuild_index
|
rebuild_index
|
||||||
all_posts
|
all_posts
|
||||||
make_rss
|
make_rss
|
||||||
|
rebuild_tags
|
||||||
delete_includes
|
delete_includes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue