_plugins/setup.rb (34 lines of code) (raw):
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#--------------------------------------------------------
#
# Performs any extra setup - e.g. downloading data files
#
module Setup
require 'uri'
require 'net/http'
# Hash: key: target file, value: source
CACHES = {
'_data/git-repositories.json' => 'https://gitbox.apache.org/repositories.json',
'_data/committee-retired.json' => 'https://whimsy.apache.org/public/committee-retired.json',
}
AGE = 3600 # seconds => 1 hour
Jekyll::Hooks.register :site, :after_init do |site, _payload|
CACHES.each do |data_file, data_src|
begin
mtime = File.mtime(data_file)
rescue Errno::ENOENT
mtime = Time.gm(0)
end
if Time.now - mtime > AGE
puts "Setup: #{data_file} is old or missing"
uri = URI.parse(data_src)
response = Net::HTTP.get_response uri
File.write(data_file, response.body)
else
puts "Setup: #{data_file} is recent"
end
end
end
# Massage page to insert acevent class
Jekyll::Hooks.register :pages, :post_render do |page|
if page.relative_path =~ %r{\.(md|html)$}
page.output.gsub!(
%r{<a href="http://localhost/#acevent" class="nav-list-link external"},
'<a class="nav-list-link acevent" data-format="square"'
)
end
end
end