diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b844b14 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +Gemfile.lock diff --git a/Gemfile b/Gemfile index fd4099b..af46db7 100644 --- a/Gemfile +++ b/Gemfile @@ -1 +1,5 @@ gem 'erb' +gem 'rackup' + +gem 'nokogiri' +gem 'redcarpet' diff --git a/app.rb b/app.rb new file mode 100644 index 0000000..16e4cbd --- /dev/null +++ b/app.rb @@ -0,0 +1,105 @@ + +require 'sinatra' +require 'erb' +require 'nokogiri' +require 'redcarpet' + +$root = "/home/pranshu/Documents/proj/perc/test" +Dir.chdir $root; + +class Sidebar + FileNode = Struct.new(:type, :name) + DirNode = Struct.new(:type, :name, :files) + + def initialize + @tree = process_dir "." + end + + def show(n=@tree, indent="") + if n.type == :dir + print indent, n.name, "\n" + n.files.each do |r| + show r, " " + indent + end + else + print indent, n.name, "\n" + end + end + + def html + builder = Nokogiri::HTML::Builder.new do |doc| + def deal_with_dir (doc, dir, path) + doc.li { + doc.text dir.name + doc.ul { + dir.files.each do |f| + fpath = File.join(path, f.name) + if f.type == :dir + deal_with_dir doc, f, fpath + else + doc.a(:href => fpath) { + doc.li { doc.text f.name } + } + end + end + } + } + end + doc.div { + deal_with_dir doc, @tree, @tree.name + } + end + builder.to_html().split(/\n/)[1..-1].join + end + + private + + def dir_files() + # Remove "." and ".." from file list + Dir.entries(".").filter {|f| f !~ /^\.\.?$/ } + end + + def process_dir(dir) + DirNode.new(:dir, dir, + Dir.chdir(dir) do + dir_files.map do |f| + if File.file? f + FileNode.new(:file, f) + else + process_dir f + end + end + end) + end + +end + +$sidebar = Sidebar.new + + +class Perc < Sinatra::Application + set :views, "." + set :markdown, :layout_engine => :erb + # @sidebar = Sidebar.new + + get "/" do + erb :main + end + + get "/*.*" do |path, ext| + if ext == "md" + md = markdown File.read(path + ".md") + + else + erb path.to_sym + end + end + + helpers do + def tree + $sidebar.html + end + end + +end + diff --git a/config.ru b/config.ru new file mode 100644 index 0000000..33d7cb7 --- /dev/null +++ b/config.ru @@ -0,0 +1,2 @@ +require './app' +run Perc