basic tree and navigation work now
very basic functioning model
This commit is contained in:
parent
deec2b8707
commit
e1c2687cdf
3 changed files with 88 additions and 5 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
Gemfile.lock
|
5
Gemfile
5
Gemfile
|
@ -1,7 +1,4 @@
|
|||
gem 'erb'
|
||||
gem 'rackup'
|
||||
gem 'erb'
|
||||
|
||||
# For devlopment
|
||||
gem 'pry'
|
||||
gem 'pry-doc'
|
||||
gem 'nokogiri'
|
||||
|
|
87
app.rb
87
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 + "<br>" + ext
|
||||
end
|
||||
|
||||
helpers do
|
||||
def tree
|
||||
$sidebar.html
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue