jekyll-google-calendar 0.1.1 → 0.2.0
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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8639a693d7678ca5a0d13b964f91cc48e5f19290cefadba6464b0d449d6444c5
|
4
|
+
data.tar.gz: 2d4417316d13393970fc4112917eecc6390c3ca41a363692b6f079f4e26c727a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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.
|
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-
|
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
|