From deec2b8707de10d8b131cb6e3f3ae3016726412a Mon Sep 17 00:00:00 2001 From: Pranshu Sharma Date: Sat, 31 May 2025 11:49:29 +1000 Subject: [PATCH 1/3] start with ruby code added rackup support, good. Also now use sinatra and all to get started. --- Gemfile | 6 ++++++ app.rb | 14 ++++++++++++++ config.ru | 2 ++ 3 files changed, 22 insertions(+) create mode 100644 app.rb create mode 100644 config.ru diff --git a/Gemfile b/Gemfile index fd4099b..39966be 100644 --- a/Gemfile +++ b/Gemfile @@ -1 +1,7 @@ gem 'erb' +gem 'rackup' +gem 'erb' + +# For devlopment +gem 'pry' +gem 'pry-doc' diff --git a/app.rb b/app.rb new file mode 100644 index 0000000..fd9847a --- /dev/null +++ b/app.rb @@ -0,0 +1,14 @@ + +require 'sinatra' +require 'erb' + +$root = "/home/pranshu/Documents/proj/perc/test" + +class Perc < Sinatra::Application + set :views, $root + + get "/" do + erb :main + 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 From e1c2687cdf2efb6623f1d5d0dafd21d30bb87b5f Mon Sep 17 00:00:00 2001 From: Pranshu Sharma Date: Sat, 31 May 2025 14:39:22 +1000 Subject: [PATCH 2/3] basic tree and navigation work now very basic functioning model --- .gitignore | 1 + Gemfile | 5 +--- app.rb | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 .gitignore 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 39966be..3ef1557 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,4 @@ gem 'erb' gem 'rackup' -gem 'erb' -# For devlopment -gem 'pry' -gem 'pry-doc' +gem 'nokogiri' diff --git a/app.rb b/app.rb index fd9847a..9ab1c69 100644 --- a/app.rb +++ b/app.rb @@ -1,14 +1,99 @@ require 'sinatra' require 'erb' +require 'nokogiri' $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, $root + set :views, "." + # @sidebar = Sidebar.new get "/" do erb :main end + + get "/*.*" do |path, ext| + erb path.to_sym + # path + "
" + ext + end + + helpers do + def tree + $sidebar.html + end + end end + From 4fd0725169cc9ffff24ff77bca00f125c7ea5c87 Mon Sep 17 00:00:00 2001 From: Pranshu Sharma Date: Sat, 31 May 2025 14:57:44 +1000 Subject: [PATCH 3/3] Added markdown support --- Gemfile | 1 + app.rb | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 3ef1557..af46db7 100644 --- a/Gemfile +++ b/Gemfile @@ -2,3 +2,4 @@ gem 'erb' gem 'rackup' gem 'nokogiri' +gem 'redcarpet' diff --git a/app.rb b/app.rb index 9ab1c69..16e4cbd 100644 --- a/app.rb +++ b/app.rb @@ -2,6 +2,7 @@ require 'sinatra' require 'erb' require 'nokogiri' +require 'redcarpet' $root = "/home/pranshu/Documents/proj/perc/test" Dir.chdir $root; @@ -78,6 +79,7 @@ $sidebar = Sidebar.new class Perc < Sinatra::Application set :views, "." + set :markdown, :layout_engine => :erb # @sidebar = Sidebar.new get "/" do @@ -85,8 +87,12 @@ class Perc < Sinatra::Application end get "/*.*" do |path, ext| - erb path.to_sym - # path + "
" + ext + if ext == "md" + md = markdown File.read(path + ".md") + + else + erb path.to_sym + end end helpers do