coursegen 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/Gemfile.lock +3 -3
  4. data/coursegen.gemspec +7 -2
  5. data/lib/coursegen.rb +12 -9
  6. data/lib/coursegen/cli.rb +2 -1
  7. data/lib/coursegen/course/{lib → data}/citem.rb +4 -2
  8. data/lib/coursegen/course/data/data_adaptor.rb +37 -0
  9. data/lib/coursegen/course/{lib → data}/lectures.rb +0 -0
  10. data/lib/coursegen/course/{lib → data}/section.rb +0 -0
  11. data/lib/coursegen/course/{lib → data}/section_def.rb +0 -0
  12. data/lib/coursegen/course/data/toc.rb +160 -0
  13. data/lib/coursegen/course/helpers/bootstrap_markup.rb +64 -0
  14. data/lib/coursegen/course/helpers/content_helpers.rb +10 -5
  15. data/lib/coursegen/course/helpers/list_of.rb +89 -0
  16. data/lib/coursegen/course/helpers/list_of_helpers.rb +19 -0
  17. data/lib/coursegen/course/helpers/navigation_helpers.rb +0 -1
  18. data/lib/coursegen/course/lib/helpers_.rb +1 -1
  19. data/lib/coursegen/course/lib/search_data_generator.rb +9 -3
  20. data/lib/coursegen/course/{lib → schedule}/schedule_def.rb +0 -0
  21. data/lib/coursegen/course/{lib → schedule}/scheduler.rb +0 -0
  22. data/lib/coursegen/templates.rb +10 -0
  23. data/lib/coursegen/version.rb +1 -1
  24. data/templates/Rules +18 -10
  25. data/templates/cg_config.rb +2 -1
  26. data/templates/content/bootstrap/css/custom.css +6 -0
  27. data/templates/content/chalkmark/chalkmark.js +30 -0
  28. data/templates/content/tipuesearch/img/loader.gif +0 -0
  29. data/templates/content/tipuesearch/img/search.png +0 -0
  30. data/templates/content/tipuesearch/tipuesearch_set.js +22 -0
  31. data/templates/content/tipuesearch/tipuesearchmin.js +14 -0
  32. data/templates/content/tipuesearch/tipuesearchnomin.js +444 -0
  33. data/templates/content/tipuesearch_logic/search.md.erb +8 -0
  34. data/templates/content/tipuesearch_logic/tipuesearch_content.js.erb +6 -0
  35. data/templates/layouts/course.html +15 -16
  36. data/templates/layouts/helpful_box.html +3 -0
  37. data/templates/layouts/main_navbar.html.erb +5 -5
  38. metadata +94 -26
  39. data/pkg/coursegen-0.0.1.gem +0 -0
  40. data/pkg/coursegen-0.0.2.gem +0 -0
  41. data/pkg/coursegen-0.0.3.gem +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 641c6b409ee8a797f79248602e2addc7b025ef63
4
- data.tar.gz: 1088e150d540207edb0e717c2b8319841bb0ec75
3
+ metadata.gz: 4f6fafa449aaa1c612bd2ceee93620309658a577
4
+ data.tar.gz: 3944ddf885fdc20f3981aafc64f5eda9e5f68fa8
5
5
  SHA512:
6
- metadata.gz: 5e8731511aa5626696c28882bffe886de272b5f2b1c1061c53bda28f24c3134dc3b4b35ca1e714e05214ee92e059fb91439b83c15ed8f3485ba7ded02af01a8c
7
- data.tar.gz: f94af8c16f907a600feb17cc5fffd514d47cea493100b6f54fa4bc14c250452acad148e5eacd874b1f75b66281adb4dccd36cafdeaca6d07dc1e1dc847bbdd65
6
+ metadata.gz: a51af70545c7dad4360845bc63c04fe211c2742988cb2295d8ac4ca2fe8daba44ff383df733e582bb2d44ded1d760937c68fc0816abae5a2938dbc70cfa958a4
7
+ data.tar.gz: 885fbdf8a783e77379114d906b573a4a2761e6896b69f127877000a9e8a00cb4783b2ddb586bb44fa96a2cea32ef430473f39a444f3a6788474364d04979d3c1
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .idea/*
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- coursegen (0.0.1)
4
+ coursegen (0.0.5)
5
5
  nanoc
6
6
  thor
7
7
 
@@ -9,9 +9,9 @@ GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
11
  colored (1.2)
12
- cri (2.6.0)
12
+ cri (2.6.1)
13
13
  colored (~> 1.2)
14
- nanoc (3.6.11)
14
+ nanoc (3.7.1)
15
15
  cri (~> 2.3)
16
16
  rake (10.3.2)
17
17
  thor (0.19.1)
data/coursegen.gemspec CHANGED
@@ -22,8 +22,13 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "bundler", "~> 1.6"
23
23
  spec.add_development_dependency "rake"
24
24
 
25
- spec.add_dependency "nanoc"
25
+
26
+ spec.add_dependency "nanoc", "~>3.6.11"
26
27
  spec.add_dependency "thor"
27
- spec.add_dependency "nanoc-toolbox"
28
+ spec.add_dependency "rubytree"
29
+ spec.add_dependency "cri"
30
+ spec.add_dependency "pry"
31
+ spec.add_dependency "nokogiri"
32
+ spec.add_dependency "activesupport"
28
33
 
29
34
  end
data/lib/coursegen.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'nanoc/toolbox'
2
- require 'pry'
3
1
  require 'nokogiri'
4
2
 
5
3
  require "coursegen/version"
@@ -7,16 +5,21 @@ require "coursegen/course/helpers/sidebar_helpers"
7
5
  require "coursegen/course/helpers/lecture_helpers"
8
6
  require "coursegen/course/helpers/content_helpers"
9
7
  require "coursegen/course/helpers/logging_helpers"
8
+ require "coursegen/course/helpers/list_of_helpers"
9
+ require 'coursegen/course/helpers/bootstrap_markup'
10
10
  require "coursegen/course/helpers/navigation_helpers"
11
- require 'coursegen/course/lib/section'
12
- require "coursegen/course/lib/toc"
13
- require 'coursegen/course/lib/citem'
11
+ require "coursegen/course/data/section"
12
+ require "coursegen/course/data/toc"
13
+ require 'coursegen/course/data/citem'
14
14
  require 'coursegen/course/lib/helpers_'
15
- require 'coursegen/course/lib/schedule_def'
16
- require 'coursegen/course/lib/section_def'
17
- require 'coursegen/course/lib/scheduler'
18
- require 'coursegen/course/lib/lectures'
15
+ require 'coursegen/course/schedule/schedule_def'
16
+ require 'coursegen/course/data/section_def'
17
+ require 'coursegen/course/schedule/scheduler'
18
+ require 'coursegen/course/data/lectures'
19
19
  require 'coursegen/course/lib/search_data_generator'
20
+ require 'coursegen/course/data/data_adaptor'
21
+ require 'coursegen/course/helpers/list_of'
22
+
20
23
 
21
24
  module Coursegen
22
25
  # Your code goes here...
data/lib/coursegen/cli.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'thor'
2
2
  require 'coursegen/templates'
3
- require './cg_config.rb'
3
+ require 'nanoc'
4
+ require './cg_config.rb' if File.exists? 'cg_config.rb'
4
5
 
5
6
  module CourseGen
6
7
  class CLI < Thor
@@ -6,7 +6,7 @@ require 'active_support/inflector'
6
6
  class CItem
7
7
 
8
8
  attr_reader :order, :section, :subsection, :subsection_citem, :title,
9
- :type, :identifier, :short_name, :status, :nitem, :css_class
9
+ :type, :identifier, :short_name, :status, :nitem, :css_class, :homework, :desc
10
10
  attr_accessor :lecture_number, :lecture_date
11
11
 
12
12
  # Callable with nitem=nil to create a mock
@@ -25,7 +25,7 @@ class CItem
25
25
  @order = order
26
26
  @title = ident
27
27
  @style = nil
28
- parse_identifier ident
28
+ parse_identifier(ident)
29
29
  end
30
30
  end
31
31
 
@@ -70,6 +70,8 @@ class CItem
70
70
  @section = @nitem[:section]
71
71
  @title = @nitem[:title]
72
72
  @css_class = @nitem[:css_class]
73
+ @homework = @nitem[:homework]
74
+ @desc = @nitem[:desc]
73
75
  end
74
76
 
75
77
  def parse_identifier ident
@@ -0,0 +1,37 @@
1
+ class DataAdaptor
2
+ def initialize(source)
3
+ @section = Toc.instance.section(source)
4
+ end
5
+
6
+ # column_selector is one of: :number, :date, :title, :homework
7
+ COL_NAMES = { number: "#", date: "lecture date", title: "title", homework: "homework", desc: "description"}
8
+
9
+ def column_name(column_selector)
10
+ COL_NAMES[column_selector]
11
+ end
12
+
13
+ def rows
14
+ @section.each do |citem|
15
+ yield citem
16
+ end
17
+ end
18
+
19
+ def cell_value(citem, col_selector)
20
+ case col_selector
21
+ when :number
22
+ citem.lecture_number
23
+ when :date
24
+ citem.lecture_date
25
+ when :title
26
+ citem.title
27
+ when :url
28
+ citem.identifier
29
+ when :desc
30
+ citem.desc
31
+ when :homework
32
+ citem.homework
33
+ else
34
+ "error!"
35
+ end
36
+ end
37
+ end
File without changes
File without changes
File without changes
@@ -0,0 +1,160 @@
1
+ require 'singleton'
2
+ class Toc
3
+
4
+ include Enumerable
5
+ include Singleton
6
+
7
+ def prepare items, config
8
+ raise "Toc.prepare called twice!" unless @sections.nil?
9
+ @section_config = config
10
+ build_mapping_table items
11
+ build_citem_table
12
+ build_sections @citems
13
+ @info = {}
14
+ end
15
+
16
+ def build_sections items
17
+ @sections = {}
18
+ @section_config.each do
19
+ |sect|
20
+ selector = sect.selector.to_s
21
+ if sect.options[:type] == :lecture
22
+ schedule = Scheduler.new
23
+ schedule.setup_from_schedule_def(sect.options[:schedule])
24
+ @sections[selector] = Lectures.new(selector, items, schedule, sect.options[:collapsed])
25
+ elsif sect.options[:type] == :section
26
+ @sections[selector] = Section.new(selector, items, sect.options[:collapsed])
27
+ else
28
+ raise ArgumentError.new("Invalid section option")
29
+ end
30
+ end
31
+ end
32
+
33
+ def build_mapping_table items
34
+ @map_n2c = {}
35
+ items.each do
36
+ |nitem|
37
+ citem = CItem.new(nitem)
38
+ @map_n2c[nitem] = citem
39
+ end
40
+ end
41
+
42
+ def build_citem_table
43
+ @citems = @map_n2c.map { |k, v| v}
44
+ end
45
+
46
+ def n2c nitem
47
+ @map_n2c[nitem]
48
+ end
49
+
50
+ def lookup_citem the_sect, item_short_name
51
+ section(the_sect).find_by_short_name(item_short_name)
52
+ end
53
+
54
+ def reset
55
+ @sections = nil
56
+ end
57
+
58
+ def section selector
59
+ section = @sections[selector]
60
+ raise RuntimeError, "Invalid Section: #{selector}" if section.nil?
61
+ section
62
+ end
63
+
64
+
65
+ def find_next_forn(nitem)
66
+ p = find_next_for(n2c(nitem))
67
+ binding.pry if p.nil?
68
+ p
69
+ end
70
+
71
+ def find_previous_forn(nitem)
72
+ p = find_previous_for(n2c(nitem))
73
+ binding.pry if p.nil?
74
+ p
75
+ end
76
+
77
+ def find_next_for(citem)
78
+ section(citem.section).next_for(citem)
79
+ end
80
+
81
+ def find_previous_for(citem)
82
+ section(citem.section).previous_for(citem)
83
+ end
84
+
85
+ # def section_for nitem
86
+ # sec = @sections[n2c(nitem).section]
87
+ # binding.pry if sec.nil?
88
+ # sec
89
+ # end
90
+
91
+ def citem_section citem
92
+ @sections[citem.section]
93
+ end
94
+
95
+ def record_inclusion host_item, included_item
96
+ @info[included_item.identifier] = host_item
97
+ end
98
+
99
+ private
100
+
101
+ def subsections(section, &block)
102
+ items = sort_section_by_subsection_name section
103
+ item_iterator = items.chunk do |item|
104
+ subsection_name section.to_s, item.identifier
105
+ end
106
+ item_iterator.each do |subsection_item|
107
+ block.call(subsection_item)
108
+ end
109
+ end
110
+
111
+
112
+
113
+ def index_in_section item
114
+ section_for(item).find_index(item)
115
+ end
116
+
117
+ def each_by(section_selector, &block)
118
+ sub_toc = @sections[section_selector]
119
+ sub_toc.sort! { |a,b| a[:order] <=> b[:order] }.each do |member|
120
+ block.call(member)
121
+ end
122
+ end
123
+
124
+ def sort_section_by_order sect
125
+ @sections[sect].sort! { |a,b| a[:order] <=> b[:order] }
126
+ end
127
+
128
+ def sort_section_by_subsection_name(sect)
129
+ items = @sections[sect]
130
+ items.sort! do
131
+ |item1, item2|
132
+ subsection_name(sect.to_s, item1.identifier) <=> subsection_name(sect.to_s, item2.identifier)
133
+ end
134
+ items
135
+ end
136
+
137
+ def subsection_name section_name, item_name
138
+ item_matcher = item_name.match('\A/'+section_name+'/([^/]*)/([^/]*)/\z')
139
+ if !item_matcher.nil?
140
+ item_matcher[1]
141
+ else
142
+ ""
143
+ end
144
+ end
145
+
146
+ def lookup_inclusion included_item
147
+ @info[included_item.identifier]
148
+ end
149
+
150
+ def lookup_by_index section, index
151
+ sect = section.section
152
+ if index >= @sections[sect].count
153
+ index = @sections[sect].count-1
154
+ elsif index < 0
155
+ index = 0
156
+ end
157
+ @sections[sect][index]
158
+ end
159
+
160
+ end
@@ -0,0 +1,64 @@
1
+ class BootstrapMarkup
2
+ def initialize
3
+ @str = ""
4
+ end
5
+ def table_begin
6
+ @str << "<table class=\"table table-condensed\">"
7
+ end
8
+
9
+ def table_end
10
+ @str << "</table>"
11
+ end
12
+
13
+ def headers_begin
14
+ @str << "<thead><tr>"
15
+ end
16
+
17
+ def headers_end
18
+ @str << "</tr></thead>"
19
+ end
20
+
21
+ def header_begin
22
+ @str << "<th>"
23
+ end
24
+
25
+ def header_end
26
+ @str << "</th>"
27
+ end
28
+
29
+ def header_content(str)
30
+ @str << str
31
+ end
32
+
33
+ def row_begin
34
+ @str << "<tr>"
35
+ end
36
+
37
+ def row_end
38
+ @str << "</tr>"
39
+ end
40
+
41
+ def cell_begin
42
+ @str << "<td>"
43
+ end
44
+
45
+ def cell_end
46
+ @str << "</td>"
47
+ end
48
+
49
+ def bigcell_begin
50
+ @str << "<td colspan=\"3\"><h5>"
51
+ end
52
+
53
+ def bigcell_end
54
+ @str << "</h5></td>"
55
+ end
56
+
57
+ def cell_content(str)
58
+ @str << str
59
+ end
60
+
61
+ def render
62
+ @str
63
+ end
64
+ end
@@ -1,7 +1,4 @@
1
1
  module ContentHelpers
2
- def generate_detailed_schedule section
3
- # binding.pry
4
- end
5
2
 
6
3
  def include_topic item_symbol
7
4
  incorporated_topic = lookup_nitem("topics", item_symbol.to_s)
@@ -22,7 +19,7 @@ module ContentHelpers
22
19
  end
23
20
 
24
21
  def bold_red string
25
- "<span style=\"color: red; font-style: italic;\">\#{string}</span>"
22
+ "<span style=\"color: red; font-style: italic;\">#{string}</span>"
26
23
  end
27
24
 
28
25
  def italic_red string
@@ -31,6 +28,14 @@ module ContentHelpers
31
28
 
32
29
  def ir string; italic_red(string); end
33
30
 
31
+ def callout title, body, format=nil
32
+ template_string = <<-HTMLSTRING
33
+ <div class="well well-sm">
34
+ <span class="label label-primary">#{title}</span>#{body}
35
+ </div>
36
+ HTMLSTRING
37
+ end
38
+
34
39
  def include_image_old string, extra_class: nil
35
40
  css_class = "img-responsive"
36
41
  css_class += " img-"+extra_class unless extra_class.nil?
@@ -42,7 +47,7 @@ module ContentHelpers
42
47
  template_string = <<-HTMLSTRING
43
48
  <div class="row">
44
49
  <div class="col-md-offset-2 col-md-#{width}">
45
- <img src="/content/images/#{filename_string}" class="img-responsive img-thumbnail" />
50
+ <img src="../#{filename_string}" class="img-responsive img-thumbnail" />
46
51
  </div>
47
52
  </div>
48
53
  HTMLSTRING
@@ -0,0 +1,89 @@
1
+ class ListOf
2
+
3
+ # source: name of a section as a string
4
+ # rows: array with one or more of:
5
+ # "pages"
6
+ # "subsections"
7
+ # cols: array with one or more of:
8
+ # :date
9
+ # :number
10
+ # :title
11
+ # :homeworks
12
+
13
+ def initialize(markup_adaptor, data_adaptor, rows, cols)
14
+ @mark = markup_adaptor
15
+ @rows = rows
16
+ @cols = cols
17
+ @data = data_adaptor
18
+ end
19
+
20
+ def render
21
+ @mark.table_begin
22
+ generate_headers
23
+ generate_rows
24
+ @mark.table_end
25
+ @mark.render
26
+ end
27
+
28
+ private
29
+
30
+ def generate_headers
31
+ @mark.headers_begin
32
+
33
+ @cols.each do |col|
34
+ @mark.header_begin
35
+ @mark.header_content(@data.column_name(col))
36
+ @mark.header_end
37
+ end
38
+
39
+ @mark.headers_end
40
+ end
41
+
42
+ def generate_rows
43
+ @data.rows do |row_id|
44
+ next unless include_row?(row_id)
45
+ if subsection_hdr?(row_id)
46
+ generate_summary_row(row_id)
47
+ else
48
+ generate_detail_row(row_id)
49
+ end
50
+ end
51
+ end
52
+
53
+ def generate_detail_row(row_id)
54
+ @mark.row_begin
55
+ @cols.each do |col_selector|
56
+ @mark.cell_begin
57
+ @mark.cell_content(cell_content_string(row_id, col_selector, detail: true))
58
+ @mark.cell_end
59
+ end
60
+ @mark.row_end
61
+ end
62
+
63
+ def generate_summary_row(row_id)
64
+ @mark.row_begin
65
+ @mark.bigcell_begin
66
+ @mark.cell_content(cell_content_string(row_id, :title, detail: false))
67
+ @mark.bigcell_end
68
+ @mark.row_end
69
+ end
70
+
71
+ def cell_content_string(row_id, col_selector, detail:)
72
+ if (col_selector == :title && detail)
73
+ link_to_unless_current(row_id.nitem[:title], row_id.identifier)
74
+ elsif (col_selector == :date)
75
+ @data.cell_value(row_id, col_selector).strftime("%b %-d")
76
+ else
77
+ @data.cell_value(row_id, col_selector).to_s
78
+ end
79
+ end
80
+
81
+ def include_row?(row_id)
82
+ @rows.include?(row_id.type)
83
+ end
84
+
85
+ def subsection_hdr?(row_id)
86
+ row_id.type == "subsection"
87
+ end
88
+
89
+ end