Skip to content

Commit

Permalink
Moved Lesson Markdown rendering later, and moved the renderer classes…
Browse files Browse the repository at this point in the history
… into app/ui/lessons.rb, which seems closer to where they belong.
  • Loading branch information
danbernier committed Sep 28, 2011
1 parent 04f0293 commit 7b026ef
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 98 deletions.
13 changes: 5 additions & 8 deletions app/boot.rb
Expand Up @@ -12,23 +12,20 @@ def HH.anonymous_binding
bind
end

Shoes.setup do
gem "redcarpet ~> 2.0.0b5"
end
require 'redcarpet'

require 'lib/all'
require 'app/syntax/markup'

require 'app/db/sequel'

require 'app/ui/lessons'
require 'app/ui/widgets'
require 'app/ui/completion'
require 'app/ui/tabs/sidetabs'



Shoes.setup do
gem "redcarpet ~> 2.0.0b5"
end
require 'redcarpet'

#let's give them a simple program to start off with!
if HH::PREFS['first_run'].nil?
File.open(File.join(HH::USER, "Hello World.rb"), "w") do |f|
Expand Down
91 changes: 91 additions & 0 deletions app/ui/lessons.rb
Expand Up @@ -345,3 +345,94 @@ def add_action(&blk)
@actions << blk
end
end

class HH::LessonLoader
def initialize
@lesson_cache = {}
end

def load_lesson(lesson_file)
unless @lesson_cache.has_key?(lesson_file)

lesson_src = File.read(lesson_file)
renderer = HH::LessonRenderer.new
markdown = Redcarpet::Markdown.new(renderer)
markdown.render(lesson_src)

@lesson_cache[lesson_file] = renderer.lesson_set
end

@lesson_cache[lesson_file]
end
end

class HH::LessonRenderer < Redcarpet::Render::Base
attr_reader :lesson_set

def header(text, level)
case level
when 1
@lesson_set = HH::LessonSet.new(text)
when 2
@lesson_set.add_lesson(text)
when 3
@current_page = @lesson_set.add_page(text)
end
''
end

def paragraph(text)
@current_page.add_action { para(text) }
''
end

def emphasis(text)
@current_page.add_action { em(text) }
''
end

def double_emphasis(text)
@current_page.add_action { strong(text) }
''
end

def codespan(src)
@current_page.add_action { code(src) }
''
end

# TODO do something useful w/ language, like add 'run now'
def block_code(src, language)
@current_page.add_action { embed_code(src) }
''
end

def image(path, title, alt_text)

# HH::STATIC -> HH::HOME + "/static" -> Dir.pwd + "/static"
# HH::STATIC -> /home/dan/projects/hacketyhack/static
# #{HH::STATIC}/tab-home.png -> /home/dan/projects/hacketyhack/static/tab-home.png

# This is a good example of the kind of necessary-muck I want to minimize.
block = if alt_text.nil? || alt_text.empty?
Proc.new {}
else
Proc.new { alert(alt_text) }
end

if path.start_with? "/icon_button/"
path.sub! '/icon_button/', ''
@current_page.add_action do
icon_button(path.to_sym, nil, &block)
end

else
path = File.join(HH::HOME, path) # TODO unless it's a URL
@current_page.add_action do
image(path, {}, &block)
end
end

''
end
end
5 changes: 4 additions & 1 deletion app/ui/mainwindow.rb
Expand Up @@ -8,10 +8,13 @@ module HH::App
# returns only once the lesson gets closed
include HH::Markup

def start_lesson_set(lesson_set)
def start_lesson_set(lesson_file)
@main_content.style(:width => -400)
@lesson_stack.show

@lesson_loader ||= HH::LessonLoader.new
lesson_set = @lesson_loader.load_lesson(lesson_file)

lesson_set.execute_in @lesson_stack
lesson_set.on_event :close do hide_lesson end
end
Expand Down
98 changes: 9 additions & 89 deletions app/ui/tabs/lessons.rb
Expand Up @@ -9,49 +9,40 @@ def content

lessons_by_level['About Hackety'] = []
Dir["#{HH::LESSONS}/*.md"].each do |f|
src = File.read(f)
lessons_by_level['About Hackety'].push src
lessons_by_level['About Hackety'].push f
end

%w[beginner intermediate advanced expert].each do |level|
lessons_by_level[level.capitalize] = []
Dir["#{HH::LESSONS}/#{level}/*.md"].each do |f|
src = File.read(f)
lessons_by_level[level.capitalize].push src
lessons_by_level[level.capitalize].push f
end
end

title_getter = LessonTitleGetter.new
title_getter = HH::LessonTitleGetter.new
markdown = Redcarpet::Markdown.new(title_getter)

lessons_by_level.each do |level, srcs|
unless srcs.empty?
lessons_by_level.each do |level, lesson_files|
unless lesson_files.empty?
para level
srcs.each do |src|
lesson_files.each do |lesson_file|
src = File.read(lesson_file)
markdown.render(src)
lesson_title = title_getter.title

stack do
britelink "icon-file.png", lesson_title do
#HH::APP.start_lesson_set lesson # TODO really call this now.
HH::APP.start_lesson_set(lesson_file)
end
end
end
end
end
end
end

def mark_up(f)
mdp = MDP.new
md = Redcarpet::Markdown.new(mdp)
src = File.read(f)
md.render(src)
return mdp.lesson_set
end
end

class LessonTitleGetter < Redcarpet::Render::Base
class HH::LessonTitleGetter < Redcarpet::Render::Base

attr_reader :title

Expand All @@ -60,74 +51,3 @@ def header(text, level)
end

end

class LessonRenderer < Redcarpet::Render::Base
attr_reader :lesson_set

def header(text, level)
case level
when 1
@lesson_set = HH::LessonSet.new(text)
when 2
@lesson_set.add_lesson(text)
when 3
@current_page = @lesson_set.add_page(text)
end
''
end

def paragraph(text)
@current_page.add_action { para(text) }
''
end

def emphasis(text)
@current_page.add_action { em(text) }
''
end

def double_emphasis(text)
@current_page.add_action { strong(text) }
''
end

def codespan(src)
@current_page.add_action { code(src) }
''
end

# TODO do something useful w/ language, like add 'run now'
def block_code(src, language)
@current_page.add_action { embed_code(src) }
''
end

def image(path, title, alt_text)

# HH::STATIC -> HH::HOME + "/static" -> Dir.pwd + "/static"
# HH::STATIC -> /home/dan/projects/hacketyhack/static
# #{HH::STATIC}/tab-home.png -> /home/dan/projects/hacketyhack/static/tab-home.png

# This is a good example of the kind of necessary-muck I want to minimize.
block = if alt_text.nil? || alt_text.empty?
Proc.new {}
else
Proc.new { alert(alt_text) }
end

if path.start_with? "/icon_button/"
path.sub! '/icon_button/', ''
@current_page.add_action do
icon_button(path.to_sym, nil, &block)
end

else
path = File.join(HH::HOME, path) # TODO unless it's a URL
@current_page.add_action do
image(path, {}, &block)
end
end

''
end
end

0 comments on commit 7b026ef

Please sign in to comment.