coursegen 0.8.3 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/pr.yml +19 -0
  3. data/.gitignore +3 -0
  4. data/Gemfile.lock +60 -35
  5. data/README.md +285 -69
  6. data/Rakefile +10 -1
  7. data/coursegen.gemspec +26 -26
  8. data/lib/coursegen.rb +5 -2
  9. data/lib/coursegen/cli.rb +49 -14
  10. data/lib/coursegen/course/data/citem.rb +10 -1
  11. data/lib/coursegen/course/data/data_adaptor.rb +16 -6
  12. data/lib/coursegen/course/data/section.rb +1 -1
  13. data/lib/coursegen/course/helpers/bootstrap_markup.rb +15 -15
  14. data/lib/coursegen/course/helpers/content_helpers.rb +86 -71
  15. data/lib/coursegen/course/helpers/formatting_helpers.rb +6 -10
  16. data/lib/coursegen/course/helpers/ical_feed_helpers.rb +2 -1
  17. data/lib/coursegen/course/helpers/lecture_helpers.rb +3 -2
  18. data/lib/coursegen/course/helpers/list_of.rb +40 -20
  19. data/lib/coursegen/course/helpers/list_of_helpers.rb +20 -14
  20. data/lib/coursegen/course/helpers/logging_helpers.rb +13 -12
  21. data/lib/coursegen/course/helpers/navigation_helpers.rb +62 -23
  22. data/lib/coursegen/course/helpers/sidebar_helpers.rb +19 -18
  23. data/lib/coursegen/course/helpers/table_helpers.rb +5 -4
  24. data/lib/coursegen/course/schedule/scheduler.rb +52 -19
  25. data/lib/coursegen/templates.rb +30 -23
  26. data/lib/coursegen/version.rb +3 -1
  27. data/spec/lectures_spec.rb +60 -50
  28. data/spec/play_spec.rb +24 -12
  29. data/spec/scheduler_spec.rb +87 -27
  30. data/tech_debt.md +5 -0
  31. data/templates/Rules +14 -19
  32. data/templates/cg_config.rb +105 -21
  33. data/templates/content/bootstrap/css/custom.css +87 -151
  34. data/templates/content/bootstrap/css/full-width-pics.css +8 -64
  35. data/templates/content/bootstrap/css/postit.css +7 -0
  36. data/templates/content/bootstrap/css/toasty.css +3 -0
  37. data/templates/content/content/index.md.erb +1 -1
  38. data/templates/content/content/intro/course_toc.md.erb +0 -1
  39. data/templates/content/content/intro/welcome.md.erb +1 -3
  40. data/templates/content/content/lectures/part1/02_here_we_go.md.erb +22 -1
  41. data/templates/content/content/lectures/part2/01_start_part2.md.erb +2 -1
  42. data/templates/content/content/lectures/part2/02_continue_part2.md.erb +3 -2
  43. data/templates/layouts/banner.html.erb +4 -4
  44. data/templates/layouts/body_footer.html +3 -4
  45. data/templates/layouts/body_header.html.erb +25 -7
  46. data/templates/layouts/bottom_includes.html.erb +21 -10
  47. data/templates/layouts/course.html.erb +7 -21
  48. data/templates/layouts/helpful_box.html +1 -1
  49. data/templates/layouts/nav-menus.html.erb +16 -36
  50. data/templates/layouts/sidebar.html.erb +9 -8
  51. data/templates/layouts/slides.html.erb +69 -0
  52. data/templates/layouts/top_includes.html.erb +24 -23
  53. metadata +32 -24
  54. data/.DS_Store +0 -0
  55. data/.vscode/settings.json +0 -2
  56. data/templates/.DS_Store +0 -0
  57. data/templates/Guardfile +0 -9
  58. data/templates/content/bootstrap/css/tipuesearch.css +0 -163
  59. data/templates/content/bootstrap/js/tipuesearch.js +0 -379
  60. data/templates/content/bootstrap/js/tipuesearch.min.js +0 -12
  61. data/templates/content/bootstrap/js/tipuesearch_content.js +0 -13
  62. data/templates/content/bootstrap/js/tipuesearch_set.js +0 -23
  63. data/templates/layouts/main_navbar.html.erb +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 193bc70f31c3ec3619227c3013d0daacfa6ca097dbf6e3c48b3770b4323520e7
4
- data.tar.gz: be195c77f63bf0ec888e538a17aeae4f295b48ab1131afe38d0540f92ffb2b66
3
+ metadata.gz: 2c8c20c18654bed952a0b1f5e488977f54e613bb0a0c6934e472d028a4abed89
4
+ data.tar.gz: 8db99fc9a6fa6aea08b9b6dd4d1f6de1a1e3a9b7e1757f1305482ac781bccd89
5
5
  SHA512:
6
- metadata.gz: 9148e0625c30a5b78b73174890a603fa2d17d6d9df676f206510bc2d72b209b542529294942d513f67c894fc705dec67611ac9a576bf7b0276b13564c9e5ba80
7
- data.tar.gz: 428fc6c4b5be13d3c229da992a3cbe985e62afae45b73562884022ea5992e0173a606e0133c1304b0af9fe8073deab496829ed9286f619b4eafbbb117fbfb1e8
6
+ metadata.gz: 4ab21fdc5c79763690101f1ddd93ff37ec94d26033e6d6f0f35f20ce65bee9d4e7294b2ee5bb667d6319455662fa9b258c231bba79e1b181d072f577049f962f
7
+ data.tar.gz: 981f8abcb7940b83582b8dbb998449871acf2d8a8704d7b575cd8b1b6a072287916850a0187bf0e3dc45f6a50deec36b8843f1b1f8ea7039813b0dabc265e46e
@@ -0,0 +1,19 @@
1
+ env:
2
+ RUBY_VERSION: 2.6
3
+ name: Gem build
4
+ on: [pull_request]
5
+ jobs:
6
+ rspec-test:
7
+ name: RSpec
8
+ runs-on: ubuntu-18.04
9
+ steps:
10
+ - uses: actions/checkout@v1
11
+ - uses: actions/setup-ruby@v1
12
+ with:
13
+ ruby-version: ${{ env.RUBY_VERSION }}
14
+ - name: Install dependencies
15
+ run: |
16
+ gem install bundler
17
+ bundler install
18
+ - name: Run tests
19
+ run: bundler exec rake spec
data/.gitignore CHANGED
@@ -2,3 +2,6 @@ pkg/*
2
2
  *.gem
3
3
  .idea/*
4
4
  *.log
5
+ *.iml
6
+ .byebug_history
7
+ test_course
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- coursegen (0.8.3)
4
+ coursegen (0.9.1)
5
5
  activesupport
6
6
  adsf
7
7
  byebug
@@ -19,31 +19,31 @@ PATH
19
19
  GEM
20
20
  remote: https://rubygems.org/
21
21
  specs:
22
- activesupport (6.0.2.1)
22
+ activesupport (6.0.3.1)
23
23
  concurrent-ruby (~> 1.0, >= 1.0.2)
24
24
  i18n (>= 0.7, < 2)
25
25
  minitest (~> 5.1)
26
26
  tzinfo (~> 1.1)
27
- zeitwerk (~> 2.2)
27
+ zeitwerk (~> 2.2, >= 2.2.2)
28
28
  addressable (2.7.0)
29
29
  public_suffix (>= 2.0.2, < 5.0)
30
30
  adsf (1.4.3)
31
31
  rack (>= 1.0.0, < 3.0.0)
32
- byebug (11.1.1)
33
- coderay (1.1.2)
32
+ byebug (11.1.3)
33
+ coderay (1.1.3)
34
34
  colored (1.2)
35
35
  concurrent-ruby (1.1.6)
36
- cri (2.15.9)
36
+ cri (2.15.10)
37
37
  ddmemoize (1.0.0)
38
38
  ddmetrics (~> 1.0)
39
39
  ref (~> 2.0)
40
40
  ddmetrics (1.0.1)
41
41
  ddplugin (1.0.2)
42
- diff-lcs (1.3)
42
+ diff-lcs (1.4.4)
43
43
  equatable (0.6.1)
44
- ffi (1.12.2)
44
+ ffi (1.13.1)
45
45
  formatador (0.2.5)
46
- guard (2.16.1)
46
+ guard (2.16.2)
47
47
  formatador (>= 0.2.4)
48
48
  listen (>= 2.7, < 4.0)
49
49
  lumberjack (>= 1.0.12, < 2.0)
@@ -58,35 +58,41 @@ GEM
58
58
  guard-compat (~> 1.0)
59
59
  hamster (3.0.0)
60
60
  concurrent-ruby (~> 1.0)
61
- i18n (1.8.2)
61
+ i18n (1.8.3)
62
62
  concurrent-ruby (~> 1.0)
63
63
  icalendar (2.6.1)
64
64
  ice_cube (~> 0.16)
65
65
  ice_cube (0.16.3)
66
- json (2.1.0)
66
+ json (2.3.0)
67
67
  json_schema (0.20.8)
68
- kramdown (2.1.0)
68
+ kramdown (2.2.1)
69
+ rexml
69
70
  listen (3.2.1)
70
71
  rb-fsevent (~> 0.10, >= 0.10.3)
71
72
  rb-inotify (~> 0.9, >= 0.9.10)
72
- lumberjack (1.1.1)
73
- method_source (0.9.2)
73
+ lumberjack (1.2.5)
74
+ method_source (1.0.0)
74
75
  mini_portile2 (2.4.0)
75
- minitest (5.14.0)
76
- nanoc (4.11.14)
76
+ minitest (5.14.1)
77
+ nanoc (4.11.16)
77
78
  addressable (~> 2.5)
78
79
  colored (~> 1.2)
79
- nanoc-cli (= 4.11.14)
80
- nanoc-core (= 4.11.14)
80
+ nanoc-checking (~> 1.0)
81
+ nanoc-cli (= 4.11.16)
82
+ nanoc-core (= 4.11.16)
83
+ nanoc-deploying (~> 1.0)
81
84
  parallel (~> 1.12)
82
85
  tty-command (~> 0.8)
83
86
  tty-which (~> 0.4)
84
- nanoc-cli (4.11.14)
87
+ nanoc-checking (1.0.0)
88
+ nanoc-cli (~> 4.11, >= 4.11.15)
89
+ nanoc-core (~> 4.11, >= 4.11.15)
90
+ nanoc-cli (4.11.16)
85
91
  cri (~> 2.15)
86
92
  diff-lcs (~> 1.3)
87
- nanoc-core (= 4.11.14)
93
+ nanoc-core (= 4.11.16)
88
94
  zeitwerk (~> 2.1)
89
- nanoc-core (4.11.14)
95
+ nanoc-core (4.11.16)
90
96
  ddmemoize (~> 1.0)
91
97
  ddmetrics (~> 1.0)
92
98
  ddplugin (~> 1.0)
@@ -96,26 +102,44 @@ GEM
96
102
  tomlrb (~> 1.2)
97
103
  tty-platform (~> 0.2)
98
104
  zeitwerk (~> 2.1)
105
+ nanoc-deploying (1.0.0)
106
+ nanoc-checking (~> 1.0)
107
+ nanoc-cli (~> 4.11, >= 4.11.15)
108
+ nanoc-core (~> 4.11, >= 4.11.15)
99
109
  nenv (0.3.0)
100
- nokogiri (1.10.8)
110
+ nokogiri (1.10.9)
101
111
  mini_portile2 (~> 2.4.0)
102
112
  notiffany (0.1.3)
103
113
  nenv (~> 0.1)
104
114
  shellany (~> 0.0)
105
115
  parallel (1.19.1)
106
- pastel (0.7.3)
116
+ pastel (0.7.4)
107
117
  equatable (~> 0.6)
108
118
  tty-color (~> 0.5)
109
- pry (0.12.2)
110
- coderay (~> 1.1.0)
111
- method_source (~> 0.9.0)
112
- public_suffix (4.0.3)
119
+ pry (0.13.1)
120
+ coderay (~> 1.1)
121
+ method_source (~> 1.0)
122
+ public_suffix (4.0.5)
113
123
  rack (2.2.2)
114
- rake (13.0.0)
115
- rb-fsevent (0.10.3)
124
+ rake (13.0.1)
125
+ rb-fsevent (0.10.4)
116
126
  rb-inotify (0.10.1)
117
127
  ffi (~> 1.0)
118
128
  ref (2.0.0)
129
+ rexml (3.2.4)
130
+ rspec (3.9.0)
131
+ rspec-core (~> 3.9.0)
132
+ rspec-expectations (~> 3.9.0)
133
+ rspec-mocks (~> 3.9.0)
134
+ rspec-core (3.9.2)
135
+ rspec-support (~> 3.9.3)
136
+ rspec-expectations (3.9.2)
137
+ diff-lcs (>= 1.2.0, < 2.0)
138
+ rspec-support (~> 3.9.0)
139
+ rspec-mocks (3.9.1)
140
+ diff-lcs (>= 1.2.0, < 2.0)
141
+ rspec-support (~> 3.9.0)
142
+ rspec-support (3.9.3)
119
143
  rubytree (1.0.0)
120
144
  json (~> 2.1)
121
145
  structured_warnings (~> 0.3)
@@ -124,15 +148,15 @@ GEM
124
148
  structured_warnings (0.4.0)
125
149
  thor (1.0.1)
126
150
  thread_safe (0.3.6)
127
- tomlrb (1.2.9)
128
- tty-color (0.5.0)
151
+ tomlrb (1.3.0)
152
+ tty-color (0.5.1)
129
153
  tty-command (0.9.0)
130
154
  pastel (~> 0.7.0)
131
- tty-platform (0.2.1)
132
- tty-which (0.4.1)
133
- tzinfo (1.2.6)
155
+ tty-platform (0.3.0)
156
+ tty-which (0.4.2)
157
+ tzinfo (1.2.7)
134
158
  thread_safe (~> 0.1)
135
- zeitwerk (2.2.2)
159
+ zeitwerk (2.3.0)
136
160
 
137
161
  PLATFORMS
138
162
  ruby
@@ -141,6 +165,7 @@ DEPENDENCIES
141
165
  bundler
142
166
  coursegen!
143
167
  rake
168
+ rspec
144
169
 
145
170
  BUNDLED WITH
146
171
  2.1.4
data/README.md CHANGED
@@ -1,79 +1,295 @@
1
1
  # Coursegen
2
2
 
3
- Generates course curriculum web sites with support for sections, lectures, code examples, homeworks, course calendar and lots more.
3
+ Coursegen is a course curriculum site generator based on [nanoc](https://github.com/nanoc/nanoc), with support for sections, lectures, code examples, homeworks, course calendar and lots more.
4
4
 
5
- # Work in progress
5
+ ## Work in progress
6
6
 
7
7
  This gem is still under development. In the current form it can already be used but I will be adding more convenience features in the near future.
8
8
 
9
- # Steps to building a new course
10
-
11
- ### Install
12
- * install the gem, `gem install coursegen`
13
-
14
- ### Generate Blank Course
15
- * generate a blank course site `gem new MYCOURSE`. This will create a local directory called MYCOURSE containing the skeleton
16
- * `cd MYCOURSE`
17
- * Load up the template and basics into the newly created directory `cg prepare`
18
- * Modify the configuration of the course by editing the file `cg_config.rb`. You can look at a complicated example to see some of the things that are possible: `cg_config.rb_sample`
19
-
20
- ### Add it to github (optional)
21
- * Create a new github repo with the course name
22
- * `cd MYCOURSE; git init`
23
- * Follow Github instructions to push the first commit up to github
24
-
25
- ### Steps to develop the course
26
- * Add your course content as new files into the content/ directory
27
- * Rebuild the course static html: `cg compile`
28
- * Start a local server for testing: `cg serve`
29
- * Open your web browser to look at the course: `cg view`
30
- * Rinse, dry and repeat
31
-
32
- ### Steps for deploying the course
33
- * The /output directory is a complete self-contained static html site. You can deploy it anywhere.
34
- * I recommend Amazon S3 for a free site
35
-
36
- ### Create an S3 instance to host the site (optional)
37
- * Log into aws.amazon.com and look for the management console for S3
38
- * Create a new bucket. Call it whatever you want.
39
- * Look in the properties and choose "Static Website Hosting". Enable it and set index.html as your index document
40
- * Make a note of the "endpoint url"
41
- * Click on permissions/add more permissions
42
- * Choose Grantee: Everyone; And "list" and no others
43
- * Click "Edit Bucket Policy". Paste this into your bucket policy and save. Notice you have to edit "yourbucketname" to be your bucket name
44
-
45
- {
46
- "Version": "2008-10-17",
47
- "Id": "Policy1",
48
- "Statement": [
49
- {
50
- "Sid": "Stmt1",
51
- "Effect": "Allow",
52
- "Principal": {
53
- "AWS": "*"
54
- },
55
- "Action": "s3:GetObject",
56
- "Resource": "arn:aws:s3:::yourbucketname/*"
57
- }
58
- ]
59
- }
60
-
61
- ### Deploy to S3 (optional)
62
- * I've used `s3cmd` with great success. You can find it at s3tools.org. Follow their instructions to install it.
63
- * Configure your course to point to the bucket you just created. Notice, we are using the bucket name not the url: `AWS_BUCKET = "cosi165-2014"`
64
-
65
- ### Examples
66
- * A simple example: https://github.com/pitosalas/jbscosi2014
67
- * A complex example (but based on a previous version): https://github.com/pitosalas/cosi236b
68
- * The resultant web site: bit.ly/cosi236b
9
+ # Table of Contents
10
+
11
+ - [Install](#install)
12
+ - [Prerequisites](#prerequisites)
13
+ - [Getting Started](#getting-started)
14
+ - [Generating a blank course](#generating-a-blank-course)
15
+ - [Adding course to Github (Optional)](#adding-course-to-github-optional)
16
+ - [Adding a lecture](#adding-a-lecture)
17
+ - [Developing locally](#developing-locally)
18
+ - [Deploying to S3](#deploying-to-s3)
19
+ - [Search](#search)
20
+ - [Configuration](#configuration)
21
+ - [Examples](#examples)
22
+ - [Lectures](#lectures)
23
+ - [Course Sites](#course-sites)
24
+ - [Features](#features)
25
+ - [Slides](#slides)
26
+ - [Open Source Catalog of Topics](#open-source-catalog-of-topics)
27
+ - [Using course contents from another folder](#using-course-contents-from-another-folder)
28
+ - [License](#license)
29
+
30
+ ## Install
31
+
32
+ ### Prerequisites
33
+
34
+ Before installing Coursegen, make sure the following tools are installed.
35
+
36
+ - [Ruby >= 2.6](https://www.ruby-lang.org/en/documentation/installation/)
37
+ - [s3cmd](https://github.com/s3tools/s3cmd) (for deploying to AWS S3)
38
+
39
+ Using Coursegen is easy. Install the gem using rubygem.
40
+
41
+ ```bash
42
+ gem install coursegen
43
+ ```
44
+
45
+ ## Getting Started
46
+
47
+ While you are welcome to provide your own organization, typically a Coursegen-based application will follow the following organizational structure:
48
+
49
+ ```bash
50
+ ├── Guardfile
51
+ ├── Rules
52
+ ├── cg_config.rb
53
+ ├── cg_config.rb_sample
54
+ ├── content
55
+ │ ├── bootstrap
56
+ │ ├── content
57
+ │ └── images
58
+ ├── layouts
59
+ │ ├── banner.html.erb
60
+ │ ├── body_footer.html
61
+ │ ├── body_header.html.erb
62
+ │ └── ...
63
+ ├── lib
64
+ │ └── default.rb
65
+ ├── nanoc.yaml
66
+ └── output
67
+ ```
68
+
69
+ ### Generating a blank course
70
+
71
+ First, use `cg new` to create a new course named "MYCOURSE" locally containing the course skeleton.
72
+
73
+ ```bash
74
+ cg new MYCOURSE
75
+ ```
76
+
77
+ Next, go into the newly created directory and use `cg prepare` to load up the template and basics.
78
+
79
+ ```bash
80
+ cd MYCOURSE; cg prepare
81
+ ```
82
+
83
+ ### Adding course to Github (Optional)
84
+
85
+ Follow [Github's instructions](https://help.github.com/en/github/importing-your-projects-to-github/adding-an-existing-project-to-github-using-the-command-line) to create a Github repo for the site.
86
+
87
+ ### Adding a lecture
88
+
89
+ All the course's materials are located under `content/content`.
90
+
91
+ ```bash
92
+ content
93
+ └── content
94
+ ├── extras
95
+ ├── index.md.erb
96
+ ├── intro
97
+ └── lectures
98
+ ```
99
+
100
+ And inside of `lectures` you can find files named like this: `01_first_lecture.md.erb`. These are the lecture files. Each lecture is a erb file with a markdown syntax, here's a lecture example.
101
+
102
+ ```erb
103
+ ---
104
+ title: Second Lecture - Here we go
105
+ ---
106
+ ### Continuing
107
+ This page is the second one in the first part. It is the second lecture of the Sample Course.
108
+ ```
109
+
110
+ See [Examples](#examples) for more details.
111
+
112
+ ### Developing locally
113
+
114
+ Coursegen gives you the ability to see your changes on the fly using a combination of `cg compile`, `cg serve`, and `cg view`.
115
+
116
+ First, `cg compile` rebuilds the course static html, and save to `/output` based on the newest changes:
117
+
118
+ ```bash
119
+ cg compile
120
+ ```
121
+
122
+ Then, `cg serve` starts a local webserver running the compiled course site:
123
+
124
+ ```bash
125
+ cg serve
126
+ ```
127
+
128
+ Lastly, `cg view` opens up your web browser to see the latest change:
129
+
130
+ ```bash
131
+ cg view
132
+ ```
133
+
134
+ ### Deploying to S3
135
+
136
+ Coursegen natively supports deploying the course site to AWS S3 service. Before proceeding, makes sure `s3cmd` is installed and correctly configured ([Instructions for setting up](https://github.com/s3tools/s3cmd#simple-s3cmd-howto)).
137
+
138
+ To host the course site on S3, you need to create a S3 bucket. Follow [this guide](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/static-website-hosting.html) for creating a S3 bucket.
139
+
140
+ After the S3 bucket is created, you can deploy the course site using `cg deploy`. `AWS_BUCKET` is the name of the S3 bucket.
141
+
142
+ ```bash
143
+ AWS_BUCKET="cosi165-2014" cg deploy
144
+ ```
145
+
146
+ ### Search
147
+
148
+ Coursegen uses [DocSearch by Algolia](https://docsearch.algolia.com/) to power its search. DocSearch is an external service that indexes the site, and provides search functionality through their API.
149
+
150
+ 1. Create an application on Algolia (Community Plan is enough for our use case), note the `Application ID`.
151
+ 2. Create an index named "search", `Indices -> Create Index`.
152
+ 3. Note the Search-Only API Key `API Keys -> Your API Keys`.
153
+
154
+ Update the following block in `cg_config.rb`,
155
+
156
+ ```ruby
157
+ SEARCH_CONFIG = {
158
+ api_key: '<API_KEY>',
159
+ index_name: 'search',
160
+ app_id: '<APP_ID>',
161
+ debug: false
162
+ }
163
+ ```
164
+
165
+ ## Configuration
166
+
167
+ The list of configuration directives, and their meaning and intended usage is available in the self documented `cg_config.rb`.
168
+
169
+ ## Examples
170
+
171
+ ### Lectures
172
+
173
+ ```erb
174
+ ---
175
+ title: Plan of Attack
176
+ ---
177
+ <%= homework_hdr %>
178
+ * How does a browser process a URL? When I type http://www.salas.com:8080/toplevel?p=1 what happens inside the browser, what actions does it take, what messages does it send out, what messages does it receive? <%= deliverable "Research this on the web or in books and come up with a numbered list of actions, with each step in the list being a link to a source on the web that you used to figure that out." %>
179
+ * <%= deliverable "Programming Assignment 2" %> (Look at <%= link_to_pa :PA2 %> for details) <%= nb ": Extension! Post wherever you are so far, indicate whether you are done or not (to let us know to look at it) but you have until Monday Feb 3 to hand this in." %>
180
+
181
+ #### Discussion
182
+ * Ruby Homework tips
183
+ * Narrate your screencasts
184
+ * Run from the command line, not irb or pry
185
+ * Try to make the output legible not just a screen full of numbers!
186
+ * 1 or 2 Ruby Questions
187
+ * How 'require' works, and require_relative
188
+
189
+ #### Products: Plan of Attack
190
+
191
+ ##### Iter2 - "Hello World"
192
+ * Prepare "dossier" for reviewer as a Google Drive
193
+ * Paper prototype
194
+ * Screen Flows
195
+ * Schema in detail
196
+ * Pivotal tracker with lots of stories, prioritized
197
+ * Identify and research 'difficult tech issues'
198
+ * Complete Model
199
+ * Initial set of controller and views
200
+ * authentication
201
+ * Initial build
202
+
203
+ ##### Iter 3 - "Pre-Alpha"
204
+ * Update "dossier", meet with reviewer
205
+ * Cloud deployment
206
+ * Unit testing
207
+ * Feature work
208
+ * Prettier html, css, javascript
209
+ * Integration testing
210
+ * Continuous integration
211
+
212
+ ##### Iter 4 - "MVP"
213
+ * Update "dossier", meet with reviewer
214
+ * Initial beta users, get feedback
215
+ * Complete MVP feature set
216
+ * Beautiful user interface
217
+
218
+ ##### Iter 4 - "Unveiling"
219
+ * Update "dossier", meet with reviewer
220
+ * Final touches
221
+ * Presentations
222
+
223
+ #### Iter2: In more detail
224
+ * Each team tee up a discussion about your product
225
+ * <%= discussion "What are \"difficult technical issues?\"" %>
226
+ * <%= discussion "Reviewers" %> (<%= link_to_incubator :reviewer %>)
227
+
228
+ #### Look at next class
229
+ * Review Paper Prototyping homework for: <%= link_to_lecture :dossier %>
230
+ ```
231
+
232
+ For more complex example of lectures see [here](https://github.com/pitosalas/cosi236b/tree/master/lectures).
233
+
234
+ ### Course sites
235
+
236
+ - An simple example: <https://github.com/pitosalas/jbscosi2014>
237
+ - A complex example (but based on a previous version): <https://github.com/pitosalas/cosi236b>
238
+ - The resultant web site: <https://bit.ly/cosi236b>
239
+
240
+ ## Features
241
+
242
+ ### Slides
243
+
244
+ *!!! Slides generation is currently in preview stage !!!*
245
+
246
+ To enable slides generation in a specific lecture, add `slides: true` to the header of the markdown file.
247
+
248
+ ```markdown
249
+ ---
250
+ title: Some Lecture
251
+ slides: true
252
+ ---
253
+ ...
254
+ ```
255
+
256
+ Coursegen uses the tag `<%= slide %>` to properly separate each slide.
257
+
258
+ ```erb
259
+ # Slide 1
260
+ * some lines
261
+ * some lines
262
+
263
+ <%= slide %>
264
+
265
+ # Slide 2
266
+ * some lines
267
+ ```
268
+
269
+ To disregard some content from rendering into the slides, add the html element into `cg_config.rb`.
270
+
271
+ ```ruby
272
+ SLIDES_CONFIG = {
273
+ # This ignores any element that is <h4>
274
+ ignore_selector: ['h4']
275
+ }
276
+ ```
69
277
 
70
278
  ## Open Source Catalog of Topics
71
- CourseGen comes with a large, shared catalog of topics. Depending on what you teach you may or may not find useful content there. Over time we hope to broaden this catalog. You can review the current set of topics here: https://github.com/pitosalas/coursegen-topics
72
279
 
73
- ### Step by step
74
- * First clone the topic directory to your local drive: `git clone git@github.com:pitosalas/coursegen-topics.git`
75
- * Add a symbolic link between your course and the newly cloned directory. For example you might do this:
76
- cd MYCOURSE/content
77
- ln -s TOPICDIR .
78
-
280
+ Coursegen comes with a large, shared catalog of topics. Depending on what you teach you may or may not find useful content there. Over time we hope to broaden this catalog. You can review the current set of topics here: <https://github.com/pitosalas/coursegen-topics>
281
+
282
+ ## Using course contents from another folder
283
+
284
+ Coursegen allows course contents to be located outside of the site folder. This is the preferred pattern, used by most coursegen courses.
285
+
286
+ To connect them together, simply add a symbolic link between the course and the contents:
287
+
288
+ ```bash
289
+ cd MYCOURSE/content
290
+ ln -s TOPICDIR .
291
+ ```
292
+
293
+ ## License
79
294
 
295
+ Coursegen is released under the MIT license. See [LICENSE.txt](LICENSE.txt)