mirror of
https://github.com/seigler/dash-docs
synced 2025-07-27 01:36:13 +00:00
100 lines
3.2 KiB
Ruby
100 lines
3.2 KiB
Ruby
# This file is licensed under the MIT License (MIT) available on
|
|
# http://opensource.org/licenses/MIT.
|
|
|
|
#events.rb sets the site.conferences array based
|
|
#on events in _events/
|
|
#This is later used to populate the events map and display the
|
|
#list in chronological order, in the RSS file and events pages.
|
|
|
|
require 'open-uri'
|
|
require 'json'
|
|
require 'date'
|
|
require 'yaml'
|
|
require 'cgi'
|
|
|
|
module Jekyll
|
|
|
|
class EventPageGenerator < Generator
|
|
|
|
def conferences
|
|
conferences = []
|
|
# Loop in _events.yml
|
|
YAML.load_file('_events.yml').each do |data|
|
|
# Skip event if it has started more than five days ago
|
|
date = data['date'].to_s.split('-')
|
|
next if Time.new.to_i > (Time.new(date[0].to_i,date[1].to_i,date[2].to_i).to_i + 432000)
|
|
# Get geolocalisation data from Google Maps
|
|
if data.has_key?('address')
|
|
begin
|
|
geoloc = JSON.parse(open("https://maps.googleapis.com/maps/api/geocode/json?address=" + CGI::escape(data['address'] + ', ' + data['city'] + ', ' + data['country']) + "&sensor=false","User-Agent"=>"Ruby/#{RUBY_VERSION}").read)
|
|
if geoloc['status'] == 'OK'
|
|
data['geoloc'] = {'lat' => geoloc['results'][0]['geometry']['location']['lat'].to_s, 'lon' => geoloc['results'][0]['geometry']['location']['lng'].to_s}
|
|
end
|
|
rescue
|
|
print 'Google Maps API Call Failed!'
|
|
end
|
|
end
|
|
# Populate conferences array
|
|
conferences.push(data)
|
|
end
|
|
return conferences
|
|
end
|
|
|
|
def generate(site)
|
|
# Set site.meetups and site.conferences global variables for liquid/jekyll
|
|
class << site
|
|
attr_accessor :conferences
|
|
alias event_site_payload site_payload
|
|
def site_payload
|
|
h = event_site_payload
|
|
payload = h["site"]
|
|
payload["conferences"] = self.conferences
|
|
h["site"] = payload
|
|
h
|
|
end
|
|
end
|
|
|
|
# Set site.conferences array
|
|
site.conferences = {}
|
|
|
|
#Do nothing if plugin is disabled
|
|
if !ENV['ENABLED_PLUGINS'].nil? and ENV['ENABLED_PLUGINS'].index('events').nil?
|
|
print 'Events disabled' + "\n"
|
|
return
|
|
end
|
|
|
|
## Create cache directory if it doesn't exist
|
|
if !File.exists?('_cache')
|
|
Dir.mkdir('_cache')
|
|
end
|
|
|
|
## Populate site.conferences with conferences from _events.yml
|
|
## plus geodata from Google. Store data in the cache and only
|
|
## re-retrieve the geodata if _events.yml is edited or the cache
|
|
## file is deleted.
|
|
conferences_cache = '_cache/conferences.marshall'
|
|
events_file = '_events.yml'
|
|
|
|
events_file_unix_time = File.stat(events_file).mtime.to_i
|
|
if File.exists?(conferences_cache)
|
|
conferences_cache_unix_time = File.stat(conferences_cache).mtime.to_i
|
|
else
|
|
conferences_cache_unix_time = 0
|
|
end
|
|
|
|
if events_file_unix_time >= conferences_cache_unix_time
|
|
site.conferences = conferences()
|
|
File.open(conferences_cache,'w') do |file|
|
|
Marshal.dump(site.conferences, file)
|
|
end
|
|
else
|
|
File.open(conferences_cache,'r') do |file|
|
|
site.conferences = Marshal.load(file)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|