jekyll-attendease 0.4.0 → 0.4.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7a4e8e229431f137cc9a5e5d13e0d1b8d54bd818
4
- data.tar.gz: 8a90821d278b7c5808185b0d0bcf914801f3fe94
3
+ metadata.gz: 75b3ac6437c60cf1f0e8ff306bbe434f5579a0ed
4
+ data.tar.gz: 3332793ac437f20cb1410d4a6b0e137159704459
5
5
  SHA512:
6
- metadata.gz: 6df9c2d6992f2a4c49579c837811fcb149f4131480a28f135e0035dc8ac82bce5647f63c62c442a8dc8463fb8ac4d74237f1a38c34cd6bd0aab8f6c7723aa9ef
7
- data.tar.gz: 98ce3da058b7370ece11ab03b3152a0618554d673f2bddb112b7e447ab635a35ef31d20b7976a918007d5f8306cba07226dab79434e86428596a46e0edf3e942
6
+ metadata.gz: 0574338faeb230b0e75c5d0819fa230a50cb046a35333cedc12db1f9979ab21fb6a767cb7d58ad83080a092938b01ba2c4718d49a67f359eff3a88a87edd6a6c
7
+ data.tar.gz: 141efa54efae2155d2ca03a8a8720152e5e8efd571ef14dec857023d85cd251b7cb561ae8db418cede98c0f5fa477af34d6d3a2ffb07ee58a5167feb8498dfd8
data/README.md CHANGED
@@ -32,16 +32,18 @@ You will need to configure by editing your `_config.yml`:
32
32
  # Plugin: jekyll-attendease
33
33
  #
34
34
  attendease:
35
+ # Required
35
36
  api_host: https://your-event-subdomain.attendease.com/
36
- test_mode: true # this generates pages for /regsister, /schedule, and /presenters for local development and styling.
37
+
38
+ # Optional
39
+ access_token: secret_access_token_for_access_to_private_events # Delete this if you don't have one or need one.
40
+ cache_expiry: 3600 # The number of seconds until we regerenate the data from the api. Otherwise data will be cached for speed.
41
+ generate_schedule_pages: false # Set to true if you want to generate static schedule pages.
42
+ schedule_path_name: 'schedule' # Set to the path your want your schedule pages to live at.
37
43
  ```
38
44
 
39
45
  Remember to replace `https://your-event-subdomain.attendease.com/` with your actual event url, or crazy things will happen!
40
46
 
41
- Setting `test_mode` will create pages for /register, /schedule and
42
- /presenters. You may style these pages, but they are non-functional.
43
- When the site is deployed to Attendease these will function.
44
-
45
47
  ## Usage
46
48
 
47
49
  Now the event name can easily be used in your site like so:
@@ -92,6 +94,20 @@ JekyllAttendease.onLoginCheck(function(e)
92
94
  });
93
95
  ```
94
96
 
97
+
98
+ ## Static Schedule Pages
99
+
100
+ In your `_config.yml` if you add the `generate_schedule_pages` set to `true` under `attendease` it will generate static schedule pages from the Attendease public API.
101
+
102
+ You can customize the look/structure of each page as well as widgets within the pages. These pages will be automatically generated for you when you build your site.
103
+
104
+ For Session Day pages:
105
+
106
+ - `_layouts/attendease_schedule_day_sessions.html` - The layout for the generate session day page. It will list all instances on that day
107
+ - `_includes/attendease/session_instance_item.html` - The instance item on the page
108
+ - `_includes/attendease/filter.html` - A filter and its items in the instance
109
+ - `_includes/attendease/presenter_item.html` - A presenter item in the instance
110
+
95
111
  ## Contributing
96
112
 
97
113
  1. Fork it
@@ -7,6 +7,8 @@ module Jekyll
7
7
  class EventData < Generator
8
8
  safe true
9
9
 
10
+ priority :highest
11
+
10
12
  include HTTParty
11
13
 
12
14
  def get(url, options = {})
@@ -29,220 +31,515 @@ module Jekyll
29
31
  @attendease_config['api_host'] += '/'
30
32
  end
31
33
 
32
- @attendease_data_path = "#{site.config['source']}/_attendease_data"
34
+ @attendease_data_path = "#{site.source}/_attendease_data"
33
35
 
34
36
  FileUtils.mkdir_p(@attendease_data_path)
35
37
 
36
- update_data = true
37
-
38
- if File.exists?("#{@attendease_data_path}/site.json")
39
- if (Time.now.to_i - File.mtime("#{@attendease_data_path}/site.json").to_i) <= (@attendease_config['cache_expiry'].nil? ? 30 : @attendease_config['cache_expiry']) # file is less than 30 seconds old
40
- update_data = false
38
+ data_files = ['site.json', 'event.json', 'sessions.json', 'presenters.json', 'rooms.json', 'filters.json', 'venues.json']
41
39
 
42
- site_json = File.read("#{@attendease_data_path}/site.json")
40
+ data_files.each do |file_name|
41
+ update_data = true
43
42
 
44
- event_data = JSON.parse(site_json)
45
- end
46
- end
43
+ if File.exists?("#{@attendease_data_path}/#{file_name}")
44
+ if (Time.now.to_i - File.mtime("#{@attendease_data_path}/#{file_name}").to_i) <= (@attendease_config['cache_expiry'].nil? ? 30 : @attendease_config['cache_expiry']) # file is less than 30 seconds old
45
+ update_data = false
47
46
 
48
- if update_data
49
- event_data = get("#{@attendease_config['api_host']}api/site.json")
47
+ json = File.read("#{@attendease_data_path}/#{file_name}")
50
48
 
51
- if !event_data['error']
52
- puts "[Attendease] Saving event data..."
53
-
54
- File.open("#{@attendease_data_path}/site.json", 'w+') { |file| file.write(event_data.parsed_response.to_json) }
55
- else
56
- raise "Event data not found, is your Attendease api_host site properly in _config.yml?"
49
+ data = JSON.parse(json)
50
+ end
57
51
  end
58
52
 
59
- if @attendease_config['test_mode']
53
+ if update_data
54
+ options = {}
55
+ options.merge!(:headers => {'X-Event-Token' => @attendease_config['access_token']}) if @attendease_config['access_token']
56
+
57
+ data = get("#{@attendease_config['api_host']}api/#{file_name}", options)
60
58
 
61
- #pages_to_fetch = ['choose_pass', 'checkout', 'dashboard']
59
+ if (data.is_a?(Hash) && !data['error']) || data.is_a?(Array)
60
+ puts "" if file_name == 'site.json' # leading space, that's all.
61
+ puts " [Attendease] Saving #{file_name} data..."
62
62
 
63
- # Registration test pages, so we can style the forms!
64
- fetch_pages ['choose_pass', 'checkout', 'dashboard'], 'register'
63
+ File.open("#{@attendease_data_path}/#{file_name}", 'w+') { |file| file.write(data.parsed_response.to_json) }
64
+ else
65
+ raise "Event data not found, is your Attendease api_host site properly in _config.yml?"
66
+ end
67
+ end
65
68
 
66
- # Schedule test pages, so we can style the forms!
67
- fetch_pages ['schedule', 'session', 'session_instance']
69
+ if file_name == 'site.json'
70
+ # Adding to site config so we can access these variables globally wihtout using a Liquid Tag so we can use if/else
71
+ site.config['attendease']['data'] = {}
68
72
 
69
- # Presenter test pages, so we can style the forms!
70
- fetch_pages ['presenters', 'presenter']
73
+ data.keys.each do |tag|
74
+ site.config['attendease']['data'][tag] = data[tag]
75
+ end
71
76
  end
72
77
  end
73
-
74
- # Adding to site config so we can access these variables globally wihtout using a Liquid Tag so we can use if/else
75
- site.config['attendease']['data'] = {} if site.config['attendease']['data'].nil?
76
- site.config['attendease']['data'].merge!(event_data)
77
78
  end
78
79
 
79
80
  else
80
81
  raise "Please set the Attendease event data in your _config.yml"
81
82
  end
82
83
  end
83
-
84
- private
85
-
86
- def fetch_pages(pages_to_fetch, prefix = nil)
87
-
88
- pages_to_fetch.each do |page|
89
- url = "#{@attendease_config['api_host']}attendease/preview/#{page}.html"
90
- page_data = get(url)
91
-
92
- if page_data.response.code.to_i == 200
93
- puts " [Attendease] Saving test data for #{page} page..."
94
-
95
- filename = []
96
- filename << prefix unless prefix.nil?
97
- filename << page
98
-
99
- File.open("#{@attendease_data_path}/attendease_test_#{filename.join('_')}.html", 'w') { |file| file.write(page_data.parsed_response) }
100
- else
101
- raise "Could not retrieve #{url}. Is your Attendease api_host site properly in _config.yml?"
102
- end
103
- end
104
-
105
- end
106
84
  end
107
85
 
108
-
109
86
  class EventThemes < Generator
110
87
  safe true
111
88
 
89
+ priority :high
90
+
112
91
  def generate(site)
113
92
  puts " [Attendease] Generating theme layouts..."
114
93
 
115
- attendease_precompiled_theme_layouts_path = "#{site.config['source']}/attendease_layouts"
94
+ attendease_precompiled_theme_layouts_path = "#{site.source}/attendease_layouts"
116
95
 
117
96
  FileUtils.mkdir_p(attendease_precompiled_theme_layouts_path)
118
97
 
98
+ base_layout = (site.config['attendease'] && site.config['attendease']['base_layout']) ? site.config['attendease']['base_layout'] : 'layout'
99
+
119
100
  layouts_to_precompile = ['layout', 'register', 'schedule', 'presenters']
120
101
 
121
102
  # Precompiled layout for website sections.
122
103
  layouts_to_precompile.each do |layout|
123
- if File.exists?("#{site.config['source']}/_layouts/layout.html")
104
+ if File.exists?("#{site.source}/_layouts/#{base_layout}.html")
124
105
 
125
- # create a layout file if is already doesn't exist.
106
+ # create a layout file if it already doesn't exist.
126
107
  # the layout file will be used by attendease to wrap /register, /schedule, /presnters in the
127
108
  # look the compiled file defines.
128
109
  # ensure {{ content }} is in the file so we can render content in there!
129
- if !File.exists?("#{site.config['source']}/attendease_layouts/#{layout}.html")
130
- theme_layout_content = <<-eos
131
- ---
132
- layout: layout
133
- ---
134
-
135
- {% attendease_content %}
136
- eos
137
-
138
- File.open("#{site.config['source']}/attendease_layouts/#{layout}.html", 'w+') { |file| file.write(theme_layout_content) }
139
-
110
+ if !File.exists?("#{attendease_precompiled_theme_layouts_path}/#{layout}.html")
111
+ site.pages << AttendeaseLayoutPage.new(site, site.source, 'attendease_layouts', "#{layout}.html", base_layout)
140
112
  end
141
113
  end
142
114
  end
143
115
  end
144
116
  end
145
117
 
118
+ class AttendeaseLayoutPage < Page
119
+ def initialize(site, base, dir, name, base_layout)
120
+ @site = site
121
+ @base = base
122
+ @dir = dir
123
+ @name = name
146
124
 
147
- class TestPages < Generator
148
- safe true
125
+ self.process(name)
149
126
 
150
- def generate(site)
151
- if @attendease_config = site.config['attendease']
127
+ self.read_yaml(File.dirname(__FILE__) + "/../templates", 'layout') # a template for the layout.
128
+
129
+ self.data['layout'] = base_layout
130
+ end
131
+ end
132
+
133
+ class AttendeaseAuthScriptTag < Liquid::Tag
134
+ def render(context)
135
+ api_host = context.registers[:site].config['attendease']['api_host']
136
+ '<script type="text/javascript" src="' + api_host + 'assets/attendease_event/auth.js"></script>'
137
+ end
138
+ end
139
+
140
+ class AttendeaseSchedulerScriptTag < Liquid::Tag
141
+ def render(context)
142
+ api_host = context.registers[:site].config['attendease']['api_host']
143
+ '<script type="text/javascript" src="' + api_host + 'assets/attendease_event/schedule.js"></script>'
144
+ end
145
+ end
146
+
147
+ class AttendeaseLocalesScriptTag < Liquid::Tag
148
+ def render(context)
149
+ '<script type="text/javascript">String.locale="en";String.toLocaleString("/api/lingo.json");</script>'
150
+ end
151
+ end
152
+
153
+ class AttendeaseAuthAccountTag < Liquid::Tag
154
+ def render(context)
155
+ '<div id="attendease-auth-account"></div>'
156
+ end
157
+ end
158
+
159
+ class AttendeaseAuthActionTag < Liquid::Tag
160
+ def render(context)
161
+ '<div id="attendease-auth-action"></div>'
162
+ end
163
+ end
164
+
165
+ class AttendeaseContent < Liquid::Tag
166
+ def render(context)
167
+ "{{ content }}"
168
+ end
169
+ end
170
+
171
+
172
+ class ScheduleIndexPage < Page
173
+ def initialize(site, base, dir, dates)
174
+ @site = site
175
+ @base = base
176
+ @dir = dir
177
+ @name = 'index.html'
178
+
179
+ self.process(@name)
180
+
181
+ self.read_yaml(File.join(base, 'attendease_layouts'), 'schedule.html')
182
+
183
+ self.data['title'] = site.config['schedule_index_title_prefix'] || 'Schedule'
184
+
185
+ self.data['dates'] = dates
152
186
 
153
- if @attendease_config['test_mode']
154
- puts " [Attendease] Generating pages to test the layouts..."
187
+ if File.exists?(File.join(base, '_includes', 'attendease', 'schedule', 'index.html'))
188
+ self.content = File.read(File.join(base, '_includes', 'attendease', 'schedule', 'index.html')) # Use theme specific layout
189
+ else
190
+ self.content = File.read(File.join(File.dirname(__FILE__), '..', '/templates/_includes/attendease/', 'schedule/index.html')) # Use template
191
+ end
192
+ end
193
+ end
155
194
 
156
- puts " [Attendease] Generating /register/index.html"
157
- site.pages << RegisterTestPage.new(site, site.source, File.join('register'), {:name => 'index.html', :liquid_tag => 'attendease_test_register_choose_pass'})
195
+ class ScheduleDayPage < Page
196
+ def initialize(site, base, dir, day, sessions, dates)
197
+ @site = site
198
+ @base = base
199
+ @dir = dir
200
+ @name = 'index.html'
158
201
 
159
- puts " [Attendease] Generating /register/checkout.html"
160
- site.pages << RegisterTestPage.new(site, site.source, File.join('register'), {:name => 'checkout.html', :liquid_tag => 'attendease_test_register_checkout'})
202
+ self.process(@name)
161
203
 
162
- puts " [Attendease] Generating /register/dashboard.html"
163
- site.pages << RegisterTestPage.new(site, site.source, File.join('register'), {:name => 'dashboard.html', :liquid_tag => 'attendease_test_register_dashboard'})
204
+ self.read_yaml(File.join(base, 'attendease_layouts'), 'schedule.html')
164
205
 
165
- puts " [Attendease] Generating /presenters/index.html"
166
- site.pages << RegisterTestPage.new(site, site.source, File.join('presenters'), {:name => 'index.html', :liquid_tag => 'attendease_test_presenters'})
206
+ session_day_title_prefix = site.config['schedule_day_title_prefix'] || 'Schedule: '
207
+ self.data['title'] = "#{session_day_title_prefix}#{day['date_formatted']}"
167
208
 
168
- puts " [Attendease] Generating /presenters/presenter.html"
169
- site.pages << RegisterTestPage.new(site, site.source, File.join('presenters'), {:name => 'presenter.html', :liquid_tag => 'attendease_test_presenter'})
209
+ self.data['day'] = day
210
+ self.data['dates'] = dates
170
211
 
171
- puts " [Attendease] Generating /schedule/index.html"
172
- site.pages << RegisterTestPage.new(site, site.source, File.join('schedule'), {:name => 'index.html', :liquid_tag => 'attendease_test_schedule'})
212
+ instances = []
173
213
 
174
- puts " [Attendease] Generating /schedule/session.html"
175
- site.pages << RegisterTestPage.new(site, site.source, File.join('schedule'), {:name => 'session.html', :liquid_tag => 'attendease_test_session'})
214
+ sessions.each do |s|
215
+ s['instances'].each do |instance|
216
+ if instance['date'] == day['date']
217
+ instance['session'] = s
176
218
 
177
- puts " [Attendease] Generating /schedule/session_instance.html"
178
- site.pages << RegisterTestPage.new(site, site.source, File.join('schedule'), {:name => 'session_instance.html', :liquid_tag => 'attendease_test_session_instance'})
219
+ instances << instance
220
+ end
179
221
  end
222
+ end
180
223
 
224
+ self.data['instances'] = instances.sort{|x,y| x['time'] <=> y['time'] }
225
+
226
+ if File.exists?(File.join(base, '_includes', 'attendease', 'schedule', 'day.html'))
227
+ self.content = File.read(File.join(base, '_includes', 'attendease', 'schedule', 'day.html')) # Use theme specific layout
228
+ else
229
+ self.content = File.read(File.join(File.dirname(__FILE__), '..', '/templates/_includes/attendease/', 'schedule/day.html')) # Use template
181
230
  end
182
231
  end
183
232
  end
184
233
 
185
- class RegisterTestPage < Page
186
- def initialize(site, base, dir, page_data)
234
+ class ScheduleSessionsPage < Page
235
+ def initialize(site, base, dir, sessions)
187
236
  @site = site
188
237
  @base = base
189
238
  @dir = dir
190
- @name = page_data[:name]
239
+ @name = 'index.html'
191
240
 
192
241
  self.process(@name)
193
242
 
194
- if File.exists?(File.join(base, 'attendease_layouts', 'register.html'))
195
- self.read_yaml(File.join(base, 'attendease_layouts'), 'register.html')
243
+ self.read_yaml(File.join(base, 'attendease_layouts'), 'schedule.html')
244
+
245
+ self.data['title'] = site.config['schedule_sessions_title_prefix'] || 'Schedule: Sessions'
246
+
247
+ sessionsData = []
248
+
249
+ self.data['sessions'] = sessions
250
+
251
+ if File.exists?(File.join(base, '_includes', 'attendease', 'schedule', 'sessions.html'))
252
+ self.content = File.read(File.join(base, '_includes', 'attendease', 'schedule', 'sessions.html')) # Use theme specific layout
196
253
  else
197
- self.read_yaml(File.join(base, 'attendease_layouts'), 'layout.html')
254
+ self.content = File.read(File.join(File.dirname(__FILE__), '..', '/templates/_includes/attendease/', 'schedule/sessions.html')) # Use template
198
255
  end
256
+ end
257
+ end
258
+
259
+ class ScheduleSessionPage < Page
260
+ def initialize(site, base, dir, session)
261
+ @site = site
262
+ @base = base
263
+ @dir = dir
264
+ @name = 'index.html'
265
+
266
+ self.process(@name)
267
+
268
+ self.read_yaml(File.join(base, 'attendease_layouts'), 'schedule.html')
199
269
 
200
- self.content.gsub! /\{\% attendease_content \%\}/, "{% #{page_data[:liquid_tag]} %}"
270
+ schedule_session_title_prefix = site.config['schedule_session_title_prefix'] || 'Schedule: '
271
+ self.data['title'] = "#{schedule_session_title_prefix}#{session['name']}"
272
+
273
+ self.data['session'] = session
274
+
275
+ if File.exists?(File.join(base, '_includes', 'attendease', 'schedule', 'session.html'))
276
+ self.content = File.read(File.join(base, '_includes', 'attendease', 'schedule', 'session.html')) # Use theme specific layout
277
+ else
278
+ self.content = File.read(File.join(File.dirname(__FILE__), '..', '/templates/_includes/attendease/', 'schedule/session.html')) # Use template
279
+ end
201
280
  end
202
281
  end
203
282
 
283
+ class PresentersIndexPage < Page
284
+ def initialize(site, base, dir, presenters)
285
+ @site = site
286
+ @base = base
287
+ @dir = dir
288
+ @name = 'index.html'
204
289
 
205
- class AttendeaseTest < Liquid::Tag
206
- def initialize(tag_name, text, tokens)
207
- super
208
- @tag_name = tag_name
290
+ self.process(@name)
291
+
292
+ self.read_yaml(File.join(base, 'attendease_layouts'), 'presenters.html')
293
+
294
+ self.data['title'] = site.config['presenters_index_title_prefix'] || 'Presenters'
295
+
296
+ self.data['presenters'] = presenters
297
+
298
+ if File.exists?(File.join(base, '_includes', 'attendease', 'presenters', 'index.html'))
299
+ self.content = File.read(File.join(base, '_includes', 'attendease', 'presenters', 'index.html')) # Use theme specific layout
300
+ else
301
+ self.content = File.read(File.join(File.dirname(__FILE__), '..', '/templates/_includes/attendease/', 'presenters/index.html')) # Use template
302
+ end
209
303
  end
304
+ end
210
305
 
211
- def render(context)
212
- @attendease_data_path = "#{context['site']['source']}/_attendease_data"
306
+ class PresenterPage < Page
307
+ def initialize(site, base, dir, presenter, sessions)
308
+ @site = site
309
+ @base = base
310
+ @dir = dir
311
+ @name = 'index.html'
312
+
313
+ self.process(@name)
314
+
315
+ self.read_yaml(File.join(base, 'attendease_layouts'), 'presenters.html')
316
+
317
+ self.data['title'] = site.config['presenter_title_prefix'] || presenter['first_name'] + ' ' + presenter['last_name']
318
+
319
+ presenter['sessions'] = []
320
+
321
+ sessions.each do |session|
322
+ if session['speaker_ids'].include?(presenter['id'])
323
+ presenter['sessions'] << session
324
+ end
325
+ end
213
326
 
214
- if File.exists?("#{@attendease_data_path}/#{@tag_name}.html")
215
- File.read("#{@attendease_data_path}/#{@tag_name}.html")
327
+ self.data['presenter'] = presenter
328
+
329
+ if File.exists?(File.join(base, '_includes', 'attendease', 'presenters', 'presenter.html'))
330
+ self.content = File.read(File.join(base, '_includes', 'attendease', 'presenters', 'presenter.html')) # Use theme specific layout
216
331
  else
217
- raise "#{@attendease_data_path}/#{@tag_name}.html not found."
332
+ self.content = File.read(File.join(File.dirname(__FILE__), '..', '/templates/_includes/attendease/', 'presenters/presenter.html')) # Use template
218
333
  end
219
334
  end
220
335
  end
221
336
 
222
- class AttendeaseAuthScriptTag < Liquid::Tag
223
- def render(context)
224
- @attendease_data_path = "#{context['site']['source']}/_attendease_data"
225
337
 
226
- "<script type=\"text/javascript\">#{File.open(File.expand_path(File.dirname(__FILE__) + "/../assets/auth_check.js")).read}</script>"
338
+ class VenuesIndexPage < Page
339
+ def initialize(site, base, dir, venues)
340
+ @site = site
341
+ @base = base
342
+ @dir = dir
343
+ @name = 'index.html'
344
+
345
+ self.process(@name)
346
+
347
+ self.read_yaml(File.join(base, 'attendease_layouts'), 'schedule.html')
348
+
349
+ self.data['title'] = site.config['venues_index_title_prefix'] || 'Venues'
350
+
351
+ self.data['venues'] = venues
352
+
353
+ if File.exists?(File.join(base, '_includes', 'attendease', 'venues', 'index.html'))
354
+ self.content = File.read(File.join(base, '_includes', 'attendease', 'venues', 'index.html')) # Use theme specific layout
355
+ else
356
+ self.content = File.read(File.join(File.dirname(__FILE__), '..', '/templates/_includes/attendease/', 'venues/index.html')) # Use template
357
+ end
227
358
  end
228
359
  end
229
360
 
230
- class AttendeaseAuthAccountTag < Liquid::Tag
231
- def render(context)
232
- '<div id="attendease-auth-account"></div>'
361
+ class VenuePage < Page
362
+ def initialize(site, base, dir, venue)
363
+ @site = site
364
+ @base = base
365
+ @dir = dir
366
+ @name = 'index.html'
367
+
368
+ self.process(@name)
369
+
370
+ self.read_yaml(File.join(base, 'attendease_layouts'), 'schedule.html')
371
+
372
+ self.data['title'] = site.config['venue_title_prefix'] || 'Venue'
373
+
374
+ self.data['venue'] = venue
375
+
376
+ if File.exists?(File.join(base, '_includes', 'attendease', 'venues', 'venue.html'))
377
+ self.content = File.read(File.join(base, '_includes', 'attendease', 'venues', 'venue.html')) # Use theme specific layout
378
+ else
379
+ self.content = File.read(File.join(File.dirname(__FILE__), '..', '/templates/_includes/attendease/', 'venues/venue.html')) # Use template
380
+ end
233
381
  end
234
382
  end
235
383
 
236
- class AttendeaseAuthActionTag < Liquid::Tag
237
- def render(context)
238
- '<div id="attendease-auth-action"></div>'
384
+ class AttendeaseScheduleGenerator < Generator
385
+ safe true
386
+
387
+ def generate(site)
388
+ if site.config['attendease'] && site.config['attendease']['api_host'] && site.config['attendease']['generate_schedule_pages']
389
+
390
+ # Fetch all the session data!
391
+ attendease_api_host = site.config['attendease']['api_host']
392
+ attendease_access_token = site.config['attendease']['access_token']
393
+
394
+ attendease_data_path = "#{site.source}/_attendease_data"
395
+
396
+ event = JSON.parse(File.read("#{attendease_data_path}/event.json"))
397
+ sessions = JSON.parse(File.read("#{attendease_data_path}/sessions.json"))
398
+ presenters = JSON.parse(File.read("#{attendease_data_path}/presenters.json"))
399
+ rooms = JSON.parse(File.read("#{attendease_data_path}/rooms.json"))
400
+ filters = JSON.parse(File.read("#{attendease_data_path}/filters.json"))
401
+ venues = JSON.parse(File.read("#{attendease_data_path}/venues.json"))
402
+
403
+ # Generate the template files if they don't yet exist.
404
+ files_to_create_if_they_dont_exist = [
405
+ 'schedule/index.html', 'schedule/day.html', 'schedule/sessions.html', 'schedule/session.html',
406
+ 'presenters/index.html', 'presenters/presenter.html',
407
+ 'venues/index.html', 'venues/venue.html',
408
+ ]
409
+
410
+ files_to_create_if_they_dont_exist.each do |file|
411
+ FileUtils.mkdir_p("#{site.source}/_includes/attendease/schedule")
412
+ FileUtils.mkdir_p("#{site.source}/_includes/attendease/presenters")
413
+ FileUtils.mkdir_p("#{site.source}/_includes/attendease/venues")
414
+
415
+ if !File.exists?(File.join(site.source, '_includes/attendease/', file))
416
+ include_file = File.read(File.join(File.dirname(__FILE__), '..', '/templates/_includes/attendease/', file))
417
+ File.open(File.join(site.source, '_includes/attendease/', file), 'w+') { |out_file| out_file.write(include_file) }
418
+ end
419
+ end
420
+
421
+ sessions = Jekyll::Attendease::sessions_with_all_data(sessions, presenters, rooms, venues, filters)
422
+
423
+ # /schedule pages.
424
+ dir = (site.config['attendease'] && site.config['attendease']['schedule_path_name']) ? site.config['attendease']['schedule_path_name'] : 'schedule'
425
+
426
+ if (site.config['attendease'] && site.config['attendease']['show_day_index'])
427
+ site.pages << ScheduleIndexPage.new(site, site.source, File.join(dir), event['dates'])
428
+ else
429
+ site.pages << ScheduleDayPage.new(site, site.source, File.join(dir), event['dates'].first, sessions, event['dates'])
430
+ end
431
+
432
+ site.pages << ScheduleSessionsPage.new(site, site.source, File.join(dir, 'sessions'), sessions)
433
+
434
+ event['dates'].each do |day|
435
+ site.pages << ScheduleDayPage.new(site, site.source, File.join(dir, day['date']), day, sessions, event['dates'])
436
+ end
437
+
438
+ sessions.each do |session|
439
+ site.pages << ScheduleSessionPage.new(site, site.source, File.join(dir, session['code']), session)
440
+ end
441
+
442
+ # /presenters pages.
443
+ dir = (site.config['attendease'] && site.config['attendease']['presenters_path_name']) ? site.config['attendease']['presenters_path_name'] : 'presenters'
444
+
445
+ site.pages << PresentersIndexPage.new(site, site.source, File.join(dir), presenters)
446
+
447
+ presenters.each do |presenter|
448
+ site.pages << PresenterPage.new(site, site.source, File.join(dir, presenter['id']), presenter, sessions)
449
+ end
450
+
451
+ # /venue pages.
452
+ dir = (site.config['attendease'] && site.config['attendease']['venues_path_name']) ? site.config['attendease']['venues_path_name'] : 'venues'
453
+
454
+ site.pages << VenuesIndexPage.new(site, site.source, File.join(dir), venues)
455
+
456
+ venues.each do |venue|
457
+ site.pages << VenuePage.new(site, site.source, File.join(dir, venue['id']), venue)
458
+ end
459
+ end
239
460
  end
461
+
240
462
  end
241
463
 
242
- class AttendeaseContent < Liquid::Tag
243
- def render(context)
244
- "{{ content }}"
464
+ def self.sessions_with_all_data(sessions, presenters, rooms, venues, filters)
465
+ sessionsData = []
466
+
467
+ sessions.each do |s|
468
+ session = {
469
+ 'id' => s['id'],
470
+ 'name' => s['name'],
471
+ 'description' => s['description'],
472
+ 'code' => s['code'],
473
+ 'speaker_ids' => s['speaker_ids']
474
+ }
475
+
476
+ session['presenters'] = []
477
+ presenters.select{|presenter| s['speaker_ids'].include?(presenter['id'])}.each do |presenter|
478
+ session['presenters'] << {
479
+ 'id' => presenter['id'],
480
+ 'first_name' => presenter['first_name'],
481
+ 'last_name' => presenter['last_name'],
482
+ 'company' => presenter['company'],
483
+ 'title' => presenter['title'],
484
+ 'profile_url' => presenter['profile_url'],
485
+ }
486
+ end
487
+
488
+ filters_for_session_hash = {}
489
+ filters.each do |filter|
490
+ filter['filter_items'].each do |filter_item|
491
+ if s['filters'].include?(filter_item['id'])
492
+ filters_for_session_hash[filter['name']] = [] unless filters_for_session_hash[filter['name']]
493
+ filters_for_session_hash[filter['name']] << {
494
+ 'name' => filter_item['name']
495
+ }
496
+ end
497
+ end
498
+ end
499
+
500
+ filters_for_session = filters_for_session_hash.map do |key, value|
501
+ {
502
+ 'name' => key,
503
+ 'items' => value
504
+ }
505
+ end
506
+
507
+ session['filters'] = filters_for_session
508
+
509
+ if s['instances']
510
+ instances = []
511
+ s['instances'].each do |i|
512
+ instance = {
513
+ 'id' => i['id'],
514
+ 'time' => i['time'],
515
+ 'date' => i['date'],
516
+ 'time_formatted' => i['time_formatted'],
517
+ 'date_formatted' => i['date_formatted'],
518
+ 'duration' => i['duration'],
519
+ 'room_id' => i['room_id'],
520
+ }
521
+
522
+ room = rooms.select{|room| room['id'] == i['room_id'] }.first
523
+ venue = venues.select{|venue| venue['id'] == room['venue_id'] }.first
524
+
525
+ instance['room'] = {
526
+ 'name' => room['name'],
527
+ 'venue_id' => room['venue_id'],
528
+ 'venue_name' => venue['name'],
529
+ 'capacity' => room['capacity']
530
+ }
531
+
532
+ instances << instance
533
+ end
534
+ session['instances'] = instances
535
+ else
536
+ session['instances'] = []
537
+ end
538
+
539
+ sessionsData << session
245
540
  end
541
+
542
+ sessionsData
246
543
  end
247
544
 
248
545
  end
@@ -250,13 +547,7 @@ end
250
547
 
251
548
  Liquid::Template.register_tag('attendease_content', Jekyll::Attendease::AttendeaseContent)
252
549
  Liquid::Template.register_tag('attendease_auth_script', Jekyll::Attendease::AttendeaseAuthScriptTag)
550
+ Liquid::Template.register_tag('attendease_scheduler_script', Jekyll::Attendease::AttendeaseSchedulerScriptTag)
551
+ Liquid::Template.register_tag('attendease_locales_script', Jekyll::Attendease::AttendeaseLocalesScriptTag)
253
552
  Liquid::Template.register_tag('attendease_auth_account', Jekyll::Attendease::AttendeaseAuthAccountTag)
254
553
  Liquid::Template.register_tag('attendease_auth_action', Jekyll::Attendease::AttendeaseAuthActionTag)
255
- Liquid::Template.register_tag('attendease_test_register_choose_pass', Jekyll::Attendease::AttendeaseTest)
256
- Liquid::Template.register_tag('attendease_test_register_checkout', Jekyll::Attendease::AttendeaseTest)
257
- Liquid::Template.register_tag('attendease_test_register_dashboard', Jekyll::Attendease::AttendeaseTest)
258
- Liquid::Template.register_tag('attendease_test_schedule', Jekyll::Attendease::AttendeaseTest)
259
- Liquid::Template.register_tag('attendease_test_session', Jekyll::Attendease::AttendeaseTest)
260
- Liquid::Template.register_tag('attendease_test_session_instance', Jekyll::Attendease::AttendeaseTest)
261
- Liquid::Template.register_tag('attendease_test_presenters', Jekyll::Attendease::AttendeaseTest)
262
- Liquid::Template.register_tag('attendease_test_presenter', Jekyll::Attendease::AttendeaseTest)