Merge branch 'convert'
This commit is contained in:
commit
69bfb3d395
4 changed files with 136 additions and 34 deletions
2
Makefile
2
Makefile
|
@ -9,6 +9,8 @@ install:
|
|||
mkdir -p $(DESTDIR)$(PREFIX)/bin
|
||||
sed '/^source/d' inc/* kb > $(DESTDIR)$(PREFIX)/bin/kb
|
||||
chmod +x $(DESTDIR)$(PREFIX)/bin/kb
|
||||
mkdir -p $(DESTDIR)$(PREFIX)/share/kb
|
||||
cp -r templates $(DESTDIR)$(PREFIX)/share/kb
|
||||
|
||||
|
||||
uninstall:
|
||||
|
|
60
inc/to-html
Normal file
60
inc/to-html
Normal file
|
@ -0,0 +1,60 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# This file is responsible for generating an html structure of documents
|
||||
# All md files will be converted to html
|
||||
# Everything else will be copied exactly
|
||||
|
||||
# The table of contents will be a nested ul structure
|
||||
# The top level will be the tags, under each tag there will be a list of documents that are tagged with that tag
|
||||
# This will result in doucuments being listed multiple times, once for each tag they are in
|
||||
generate-html-toc(){
|
||||
echo "<nav><ul>"
|
||||
# Loop through each tag
|
||||
listTags --noheader | while read item; do
|
||||
local tag="$(echo "$item" | awk -F ' +' '{print $1}')"
|
||||
local count="$(echo "$item" | awk -F ' +' '{print $2}')"
|
||||
echo "<li>"
|
||||
echo "$tag ($count)"
|
||||
echo "<ul>"
|
||||
echo "SELECT items.filename,items.title
|
||||
FROM items LEFT JOIN links ON items.id = links.itemID
|
||||
LEFT JOIN tags ON links.tagID = tags.id
|
||||
WHERE tags.name = '$(safeSQL "$tag")'
|
||||
GROUP BY items.id;" |
|
||||
sqlite3 "${sqliteFile}" |
|
||||
awk -F '|' '{sub(/\.md/,".html",$1);print "<li><a href=\"" $1 "\">" $2 "</a></li>"}'
|
||||
echo "</ul>"
|
||||
echo "</li>"
|
||||
done
|
||||
echo "</ul></nav>"
|
||||
}
|
||||
|
||||
to-html(){
|
||||
local destination="$1"
|
||||
local preTemplate="/usr/local/share/kb/templates/main.html"
|
||||
local tocFile="$(mktemp)"
|
||||
local templateFile="$(mktemp)"
|
||||
generate-html-toc > "$tocFile"
|
||||
|
||||
# If there is a template in the users .local/share directory, use that
|
||||
[ -e "${XDG_CONFIG_HOME:-$HOME/.config}/kb/templates/main.html" ] &&
|
||||
preTemplate="${XDG_CONFIG_HOME:-$HOME/.config}/kb/templates/main.html"
|
||||
|
||||
# If there is a template in the data directory, use that
|
||||
[ -e "${dataDir}templates/main.html" ] &&
|
||||
preTemplate="${dataDir}templates/main.html"
|
||||
|
||||
|
||||
sed "s#\#TOC\##\${ $tocFile() }#" "$preTemplate" > "$templateFile"
|
||||
|
||||
|
||||
find "$dataDir" -name "*.md" | while read file; do
|
||||
local newFile="${file##*/}"
|
||||
newFile="${newFile/.md/.html}"
|
||||
sed -E 's/\.md( *)\)/.html\1\)/' "$file" |
|
||||
pandoc -f markdown -t html --template "$templateFile" > "$destination/$newFile"
|
||||
done
|
||||
|
||||
rm "$tocFile" "$templateFile"
|
||||
|
||||
}
|
90
kb
90
kb
|
@ -22,7 +22,7 @@ WHITE='\033[1;37m'
|
|||
NC='\033[0m'
|
||||
|
||||
# Provide a variable with the location of this script.
|
||||
#scriptPath="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
scriptPath="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
# Source files
|
||||
# ##################################################
|
||||
|
@ -32,6 +32,7 @@ source "inc/tag-management"
|
|||
source "inc/file-management"
|
||||
source "inc/yaml"
|
||||
source "inc/fzf"
|
||||
source "inc/to-html"
|
||||
|
||||
# Utility functions
|
||||
# ##################################################
|
||||
|
@ -304,6 +305,26 @@ indexFolder(){
|
|||
|
||||
}
|
||||
|
||||
convert(){
|
||||
local destination
|
||||
local method
|
||||
|
||||
while [[ $1 = -?* ]]; do
|
||||
case "$1" in
|
||||
--to-html) method="to-html"; destination="html" ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
[ -n "$1" ] && destination="$1"
|
||||
|
||||
[ -z "$method" ] && die "You must specify a conversion method"
|
||||
[ -z "$destination" ] && die "You must specify a destination"
|
||||
[ -d "$destination" ] || die "$destination must be a directory"
|
||||
|
||||
"$method" "$destination"
|
||||
}
|
||||
|
||||
|
||||
mainScript() {
|
||||
############## Begin Script Here ###################
|
||||
|
@ -319,6 +340,7 @@ mainScript() {
|
|||
|
||||
case "${args[0]}" in
|
||||
add) addFile "${args[@]:1}"; safeExit ;;
|
||||
convert) convert "${args[@]:1}"; safeExit ;;
|
||||
deepsearch) deepSearch "${args[@]:1}"; safeExit ;;
|
||||
del|delete) deleteFile "${args[@]:1}"; safeExit ;;
|
||||
edit) editFile "${args[@]:1}"; safeExit ;;
|
||||
|
@ -354,41 +376,41 @@ usage() {
|
|||
This tool helps manage my personal knowledge base
|
||||
|
||||
Options:
|
||||
-q, --quiet Quiet (no output)
|
||||
-v, --verbose Output more information. (Items echoed to 'verbose')
|
||||
-d, --debug Runs script in BASH debug mode (set -x)
|
||||
-h, --help Display this help and exit
|
||||
--data <directory> The knowledgebase data dir
|
||||
--sqlite <file> The sqlite file (default to <data>/knowledgebase.sqlite3
|
||||
--editor <editor> The editor to use (default $EDITOR or vim)
|
||||
--pager <editor> The pager to use (default bat or $PAGER or cat)
|
||||
--nogit Don't run git commands
|
||||
--version Output version information and exit
|
||||
-q, --quiet Quiet (no output)
|
||||
-v, --verbose Output more information. (Items echoed to 'verbose')
|
||||
-d, --debug Runs script in BASH debug mode (set -x)
|
||||
-h, --help Display this help and exit
|
||||
--data <directory> The knowledgebase data dir
|
||||
--sqlite <file> The sqlite file (default to <data>/knowledgebase.sqlite3
|
||||
--editor <editor> The editor to use (default $EDITOR or vim)
|
||||
--pager <editor> The pager to use (default bat or $PAGER or cat)
|
||||
--nogit Don't run git commands
|
||||
--version Output version information and exit
|
||||
|
||||
Commands:
|
||||
init Initialise a new knowledgebase
|
||||
new [options] [title] Create new entry
|
||||
--filetype <type> Type of file ( default md)
|
||||
edit [title] Edit a file
|
||||
list List all files
|
||||
--noheader Don't include the header
|
||||
--normal List items of type \"normal\"
|
||||
list-tags Lists tags with the number of times its used
|
||||
--noheader Don't include the header
|
||||
purge-tags Deletes any unused tags
|
||||
update <file> [<file>] Updates the database and git repo of a changed file
|
||||
If 2 files are given, it assumes a move
|
||||
view View a file
|
||||
add [options] <file> Adds a file
|
||||
--asset Adds the file as an asset
|
||||
--yaml-header Adds a yaml header (default for markdown files)
|
||||
--yaml-file Adds a yaml file (default for non-markdown files)
|
||||
fuzzy [command] Fuzzy select a file
|
||||
command is what to do with the selected file
|
||||
edit or view
|
||||
git [options] Run arbitary git commands on the kb repository
|
||||
del [title] Delete a file
|
||||
index Indexes the folder (usful after a clone etc)
|
||||
init Initialise a new knowledgebase
|
||||
new [options] [title] Create new entry
|
||||
--filetype <type> Type of file ( default md)
|
||||
edit [title] Edit a file
|
||||
list List all files
|
||||
--noheader Don't include the header
|
||||
--normal List items of type \"normal\"
|
||||
list-tags Lists tags with the number of times its used
|
||||
--noheader Don't include the header
|
||||
purge-tags Deletes any unused tags
|
||||
update <file> [<file>] Updates the database and git repo of a changed file
|
||||
If 2 files are given, it assumes a move
|
||||
view View a file
|
||||
add [options] <file> Adds a file
|
||||
--asset Adds the file as an asset
|
||||
--yaml-header Adds a yaml header (default for markdown files)
|
||||
--yaml-file Adds a yaml file (default for non-markdown files)
|
||||
fuzzy [default] Fuzzy select a file
|
||||
git [options] Run arbitary git commands on the kb repository
|
||||
del [title] Delete a file
|
||||
index Indexes the folder (usful after a clone etc)
|
||||
convert [options] [dest] Converts the notes into a different format and puts it in dest
|
||||
--to-html Converts to html
|
||||
"
|
||||
}
|
||||
|
||||
|
|
18
templates/main.html
Normal file
18
templates/main.html
Normal file
|
@ -0,0 +1,18 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="$lang$" xml:lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="generator" content="KB" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
||||
$if(Tags)$
|
||||
<meta name="keywords" content="$for(Tags)$$Tags$, $endfor$" />
|
||||
$endif$
|
||||
<title>$Title$</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
#TOC#
|
||||
|
||||
$body$
|
||||
</body>
|
||||
</html>
|
Loading…
Add table
Add a link
Reference in a new issue