From e005cc96e9258451ceccd6aac3de6669dd8c0b95 Mon Sep 17 00:00:00 2001 From: Pranshu Sharma Date: Sat, 31 May 2025 17:20:34 +1000 Subject: [PATCH] Added toml config plus fixed some stuff --- app.rb | 56 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/app.rb b/app.rb index 16e4cbd..7289fbf 100644 --- a/app.rb +++ b/app.rb @@ -3,13 +3,31 @@ require 'sinatra' require 'erb' require 'nokogiri' require 'redcarpet' +require 'tomlib' $root = "/home/pranshu/Documents/proj/perc/test" Dir.chdir $root; + +class Config + attr_reader :approved_regex, :layout + def initialize + approved_files = [/\.md$/, /\.erb$/] + @approved_regex = Regexp.union(approved_files) + toml = Tomlib.load(File.read "config.toml") + + @layout = toml["layout"] || "layout" + @layout = @layout.to_sym + # @layout = :layout + + end +end + +$config = Config.new(); + class Sidebar - FileNode = Struct.new(:type, :name) - DirNode = Struct.new(:type, :name, :files) + FileNode = Struct.new(:type, :path, :name) + DirNode = Struct.new(:type, :path, :name, :files) def initialize @tree = process_dir "." @@ -17,12 +35,12 @@ class Sidebar def show(n=@tree, indent="") if n.type == :dir - print indent, n.name, "\n" + print indent, n.path, "\n" n.files.each do |r| show r, " " + indent end else - print indent, n.name, "\n" + print indent, n.path, "\n" end end @@ -30,14 +48,14 @@ class Sidebar builder = Nokogiri::HTML::Builder.new do |doc| def deal_with_dir (doc, dir, path) doc.li { - doc.text dir.name + doc.text dir.path doc.ul { dir.files.each do |f| - fpath = File.join(path, f.name) + fpath = File.join(path, f.path) if f.type == :dir deal_with_dir doc, f, fpath else - doc.a(:href => fpath) { + doc.a(:href => "/#{fpath}") { doc.li { doc.text f.name } } end @@ -46,7 +64,7 @@ class Sidebar } end doc.div { - deal_with_dir doc, @tree, @tree.name + deal_with_dir doc, @tree, @tree.path } end builder.to_html().split(/\n/)[1..-1].join @@ -54,17 +72,27 @@ class Sidebar private + def getname(file) + File.basename(file, File.extname(file)) + end + def dir_files() # Remove "." and ".." from file list - Dir.entries(".").filter {|f| f !~ /^\.\.?$/ } + Dir.entries(".").filter {|f| f !~ /^\./ }.filter do |f| + if File.file? f + f =~ $config.approved_regex + else + true + end + end end def process_dir(dir) - DirNode.new(:dir, dir, + DirNode.new(:dir, dir, getname(dir), Dir.chdir(dir) do dir_files.map do |f| if File.file? f - FileNode.new(:file, f) + FileNode.new(:file, f, getname(f)) else process_dir f end @@ -83,15 +111,15 @@ class Perc < Sinatra::Application # @sidebar = Sidebar.new get "/" do - erb :main + erb :main, layout: $config.layout end get "/*.*" do |path, ext| if ext == "md" - md = markdown File.read(path + ".md") + md = markdown File.read(path + ".md"), layout: $config.layout else - erb path.to_sym + erb path.to_sym, layout: $config.layout end end