## Panda: a simple blog engine in Haskell ### Features #### simple file structure db |---- blog | |---- 08-09-01 first post | |---- 09-09-02 learn javascript.html | |---- tag | |---- programming | |---- funny | |---- static |---- About #### simple config file blog_title = C大调 blog_subtitle = 野猫不吃薯片 host_name = jinjing.blog.easymic.com author_email = nfjinjing@gmail.com navigation = About per_page = 7 sidebar = Blogroll.md favicon = panda_icon.png #### standard web technology extend/customize with pure css and javascript ( note the custom part in css and js from the last section ) #### hacker friendly * posts are in plain text * SCM for publishing / data managing ( not really a feature, but a design goal from the beginning ) * blindly follows the KISS principle from code to UI: be a simple blog, no more no less ## Demo ### blog [My blog](http://jinjing.easymic.com) source is available as a git repo: git clone git://github.com/nfjinjing/jinjing-blog.git Or [browser](http://github.com/nfjinjing/jinjing-blog/tree/master) online ### config [jinjing's blog config file](http://github.com/nfjinjing/jinjing-blog/blob/401a541443d88bbf8d844874c1473d4b3bc81784/config/site.txt) ## Install ### Quick setup #### install [lighttpd](http://www.lighttpd.net/ ) Note: only version 1.4.19 has been successfully tested, 1.4.20 is bugged for reasons unknown. #### install [ghc](http://www.haskell.org/ghc/download.html) #### install [darcs](http://www.darcs.net/) for `cabal-install` #### install [cabal-install](http://hackage.haskell.org/trac/hackage/wiki/CabalInstall) darcs get --partial http://darcs.haskell.org/cabal-install/ cd cabal-install sh bootstrap.sh #### install panda cabal update; cabal install panda #### bootstrap # panda is a kibro project kibro new myblog cd myblog # get a template to start git clone git://github.com/nfjinjing/panda-template.git db sh db/extra/scripts/bootstrap.sh #### run kibro start It should be running on [http://127.0.0.1:3000](http://127.0.0.1:3000) now. Since Panda is based on Kibro, it helps to read how [Kibro](http://chrisdone.com/blog/tag/Kibro) works. ### Goodies Install `Ruby` / `Rake`, then `rake -T` to see a list of helper commands. ### Config Edit `db/config/site.txt` blog_title = My shiny blog host_name = yourhost.com author_email = your_mail@yourhost.com Restart required. (hint: `rake r`) ## User's guide ### posts All posts are placed in `db/blog` folder, with naming convention [yy-mm-dd title], in Markdown format by default. Markdown supports embedding HTML snippets, so embedding youtube video is a peace of cake. You can create static pages, in `db/static`, and link to them via `/static/static_file_name` inside your blogs. For example `db/static/About`, where you can put some profile in. ### tagging Create a file in `db/tag`, the name of the file will be the name of the new tag. edit the tag file, insert the full name of a blog post, e.g. `08-09-04 Welcome to Panda` ### html / tex / restructured text format Just create the file in blog as usual with an extension (e.g. html, rst, tex ), and you are all set. ### customize navigation bar see example in `config/site`: navigation = About, Gallery Multiple renderer supported, use extension as hints. Note, the navigation configuration requires the full name of your static page, so you should include extension in configuration as well. ### customize sidebar see example in `config/site`, `config/sidebar/Blogroll.md` sidebar = Blogroll.md Sidebar items are html snippets plugged into view. You can create these plugins in multiple formats, use extension. ### styling Styling is done by editing `public/theme/blueprint/css/custom.css`, see the default `custom.css` for inspiration. ### theming New theme can be created without touching `Panda` code, example blueprint theme in `db/config/theme/blueprint.txt` container = container header = column span-12 first navigation = column span-12 first large main = column span-9 first sidebar = column span-3 last footer = footer css = screen, blueprint-wp, custom js = jquery-1.2.6.min, jquery.getUrlParam, jquery.highlight-2, custom These are custom class names for each element block. You can create new themes by adding theme definition files in `db/config/theme`, put theme resources under `db/public/theme/your_theme_name` and place theme = your_new_theme inside `site.txt`. note: `css` and `js` are required to be placed under `db/public/theme/your_theme_name/css` and `db/public/theme/your_theme_name/js`, leave out the file extensions in `site.txt`. ### syntax highlighting Highlight for `HTML` is enabled by default, see `public/theme/blueprint/js/custom.js` for more language support. Highlight style is configured at `config/theme/blueprint.txt`, just change `highlight/default` to any css inside `theme/blueprint/css/highlight`. ### analytics Google analytics is available, put your `tracker_id` in `site.txt`, if you don't want analytics, ignore the setting. Once site module is introduced, those `js` code could be configured to be gone forever, but not yet in the current release. ### final note try to use `

` for heading in your posts, at least `wordpress` is using this convention. `

` is not styled in the blueprint theme, so they look kind of unfitted. But this does not stop anyone from styling `

,

` if wished. ### Links * [Kibro](http://chrisdone.com/blog/tag/Kibro) * [Panda on Jinjing's blog](http://jinjing.easymic.com/tag/Panda) * [Source](http://github.com/nfjinjing/panda/tree)