jekyll-google-calendar 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1946582c3cf64cd533e2375fadeb22cdfdc7730cec110103f9cfa693ce7eb802
4
- data.tar.gz: 3f3e2ec49bf29c049afa1185cddefebe106927da32c48d6aff2ae2fd42b62f4b
3
+ metadata.gz: 8639a693d7678ca5a0d13b964f91cc48e5f19290cefadba6464b0d449d6444c5
4
+ data.tar.gz: 2d4417316d13393970fc4112917eecc6390c3ca41a363692b6f079f4e26c727a
5
5
  SHA512:
6
- metadata.gz: 6d2861a5331541ebed48c88a7430188f073c966d1c10154daddd5cc64bd0d697322c0fa1625322c7880d5f844436e30f5e2ba3a0ed78ad34bb1a3d58ac25b07b
7
- data.tar.gz: 8326822b153152c8e32f51b2fcf5a50256b3c4d7c226dfbc0f21666a641d778222b89b120e56549cf8e23bad47d63b90d32a2c702ef0124617fba79b6cf17100
6
+ metadata.gz: 9657bc9d551096a5442b58164dcb9fe1ca30cbab0212d54b3a2fe28c9cf03dea6abd585fd4a5ad9c14b4f971b42373ca92cf6476737b52d2e77b41f1162788fb
7
+ data.tar.gz: b3634adee7ede9facbccbc2a635b89af94696049dff96177fc150ac76cb4181c97268c3207c00ea8418c4c5eea7c1bb5ac2038f4f5851b7933bac4a55a1c8831
@@ -0,0 +1,41 @@
1
+ require 'date'
2
+
3
+ module Jekyll
4
+ module Google
5
+ module Calendar
6
+ module EventListFilter
7
+ def get_google_calendar_events_by_date_offset(events, startOffset, endOffset, soft_max)
8
+ i = 0
9
+ newEvents = []
10
+ unless events.nil?
11
+ for event in events
12
+ date = event["start"]["date"] || event["start"]["dateTime"]
13
+ date = date.to_time
14
+
15
+ start_of_day = Time.new(Time.now.year, Time.now.month, Time.now.day) + 60*60*24 * startOffset
16
+ end_of_range = nil
17
+ if endOffset >= 0
18
+ end_of_range = Time.new(Time.now.year, Time.now.month, Time.now.day) + 60*60*24 * (endOffset + 1)
19
+ end
20
+
21
+ today = date < start_of_day + 60*60*24
22
+
23
+
24
+ if (date >= start_of_day.utc) && (!end_of_range || date < end_of_range)
25
+ if (today || i < soft_max)
26
+ newEvents.push(event)
27
+ i = i + 1
28
+ else
29
+ return newEvents
30
+ end
31
+ end
32
+ end
33
+ end
34
+ newEvents
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ Liquid::Template.register_filter(Jekyll::Google::Calendar::EventListFilter)
@@ -1,12 +1,10 @@
1
1
  require 'google/apis/calendar_v3'
2
2
  require 'googleauth'
3
+ require_relative "event_list"
4
+ include Jekyll::Google::Calendar::EventListFilter
3
5
 
4
6
  GoogleCalendar = ::Google::Apis::CalendarV3
5
7
 
6
- #TODO: Handle case where calendar doesn't exist or is not readable
7
- #TODO: Add conference data to hash
8
- #TODO: Add remaining calendar response data to hash
9
-
10
8
  module Jekyll
11
9
  module Google
12
10
  module Calendar
@@ -31,6 +29,7 @@ module Jekyll
31
29
  end
32
30
  end
33
31
 
32
+
34
33
  ##
35
34
  # This class is a Generator that Jekyll will call to generate events from our Google Calendars
36
35
 
@@ -47,13 +46,70 @@ module Jekyll
47
46
  @gcallendar_config = site.config['gcalendar']
48
47
  raise 'Missing Google Calendar configuration in _config.yml' unless @gcallendar_config
49
48
  service = setup_calendar()
49
+ site.data["calendars"] = Hash.new
50
50
  @gcallendar_config['calendars'].each do |calendar|
51
51
  process_calendar(site, service, calendar['id'], calendar['look_ahead'], calendar['directory'], calendar['date_format'], calendar['layout'])
52
52
  end
53
+
54
+ unless @gcallendar_config["event_list_name"].nil?
55
+ events = []
56
+ unless site.data["calendars"].nil?
57
+ site.data["calendars"].each do |calendar|
58
+ events = events.concat(calendar[1])
59
+ end
60
+ events = get_google_calendar_events_by_date_offset(events,0,-1,1000)
61
+
62
+ page_size = @gcallendar_config['event_list_per_page']
63
+ pages = (events.length / page_size).ceil
64
+ for i in 0..(pages-1)
65
+ create_event_list_page(site, events.slice(i*page_size, page_size), @gcallendar_config['event_list_page_layout'], i+1, pages, events.length)
66
+ end
67
+ end
68
+ end
53
69
  end
54
70
 
55
71
  private
56
72
 
73
+ def create_event_list_page(site, event_list, layout, event_list_page, event_list_pages, total_events)
74
+ dir = @gcallendar_config["event_list_name"]
75
+ path = "/" + (dir[-1] == "/" ? dir : dir + "/") + event_list_page .to_s
76
+ if (event_list_page == 1)
77
+ path = "/" + (dir[-1] == "/" ? dir : dir + "/")
78
+ end
79
+
80
+ prev_path = nil
81
+ prev_page = nil
82
+ if (event_list_page > 1)
83
+ prev_page = event_list_page-1
84
+ prev_path = "/" + (dir[-1] == "/" ? dir : dir + "/") + (event_list_page-1).to_s
85
+ if (event_list_page == 2)
86
+ prev_path = "/" + (dir[-1] == "/" ? dir : dir + "/")
87
+ end
88
+ end
89
+
90
+ next_path = nil
91
+ next_page = nil
92
+ if (event_list_page <= event_list_pages)
93
+ next_page = event_list_page+1
94
+ next_path = "/" + (dir[-1] == "/" ? dir : dir + "/") + (event_list_page+1).to_s
95
+ if (event_list_page == 2)
96
+ next_path = "/" + (dir[-1] == "/" ? dir : dir + "/")
97
+ end
98
+ end
99
+
100
+ paginator = {"page" => event_list_page,
101
+ "per_page" => @gcallendar_config['event_list_per_page'],
102
+ "events" => event_list,
103
+ "total_events" => total_events,
104
+ "total_pages" => event_list_pages,
105
+ "previous_page" => prev_page,
106
+ "previous_page_path" => prev_path,
107
+ "next_page" => next_page,
108
+ "next_page_path" => next_path}
109
+
110
+ site.pages << EventListPage.new(site, site.source, path, 'index.html', layout, paginator)
111
+ end
112
+
57
113
  def setup_calendar()
58
114
  scope = 'https://www.googleapis.com/auth/calendar'
59
115
  calendar = GoogleCalendar::CalendarService.new
@@ -69,6 +125,7 @@ module Jekyll
69
125
  page_token = nil
70
126
  calendar_data = nil
71
127
  end_time = DateTime.now + look_ahead
128
+ site.data["calendars"][calendar_id] = []
72
129
  begin
73
130
  response = get_events(calendar, calendar_id, page_token, end_time)
74
131
  calendar_data = calendar_data ? calendar_data : hash_calendar_data(response)
@@ -106,6 +163,7 @@ module Jekyll
106
163
  path += "-" + overlap.length.to_s
107
164
  end
108
165
  site.pages << EventPage.new(site, site.source, path, 'index.html', layout, hash, calendar_data, calendar_id)
166
+ site.data["calendars"][calendar_id].push(hash);
109
167
  end
110
168
 
111
169
  def hash_calendar_data(response)
@@ -205,6 +263,21 @@ module Jekyll
205
263
  hash
206
264
  end
207
265
  end
266
+
267
+ class EventListPage < Page
268
+ def initialize(site, base, dir, name, layout, paginator)
269
+ @site = site
270
+ @base = base
271
+ @dir = dir
272
+ @name = name
273
+ self.process(@name)
274
+ self.data = site.layouts[layout].data.dup
275
+ self.content = site.layouts[layout].content.dup
276
+ self.data['layout'] = layout
277
+ self.data['events'] = paginator
278
+ end
279
+ end
280
+
208
281
  end
209
282
  end
210
283
  end
@@ -1,7 +1,7 @@
1
1
  module Jekyll
2
2
  module Google
3
3
  module Calendar
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
6
6
  end
7
7
  end
@@ -1,2 +1,3 @@
1
1
  require "jekyll/google/calendar/version"
2
2
  require "jekyll/google/calendar/generator"
3
+ require "jekyll/google/calendar/event_list"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-google-calendar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Gundry
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-04 00:00:00.000000000 Z
11
+ date: 2019-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -61,6 +61,7 @@ extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
63
  - lib/jekyll-google-calendar.rb
64
+ - lib/jekyll/google/calendar/event_list.rb
64
65
  - lib/jekyll/google/calendar/generator.rb
65
66
  - lib/jekyll/google/calendar/version.rb
66
67
  homepage: https://github.com/davidgundry/jekyll-google-calendar