dash-docs/_plugins/contributors.rb
David A. Harding ec343d54d1 QA: Check HTML Correctness & Fix Existing Errors
- _contrib/bco-htmlproof: check HTML for correctness; fail on any errors

- _contrib/bco-htmlproof: accept path for individual page to help debug
  page problems

- (Many files) Convert `&` in numerous elements to `&`

- _templates/download.html: use Liquid filter to automatically escape
  `&` in magnet links.  Also premptively tell HTML not to check the
  magnet link when checking external links (this check is not currently
  enabled)

- _releases/*: Escape `<parameter>` used in multiple Bitcoin Core
  release notes

- _templates/choose-you-wallet.html: change mSigna URL from
  .../coinvault&referer=bitcoin.org to .../coinvault?referer=bitcoin.org

- _templates/community.html: fix duplicate anchors by renaming one
  anchor

- _templates/events.html: move Javascript to separate file because it
  contains forbidden HTML close tags within the `<script></script>`
  tags.

- (Many files, mostly in _translations/) Fix many broken open tags or
  missing close tags.

- _translatios/zh_TW.yml & ko.yml: fix a total of three invalid
  characters (control characters)
2015-04-27 09:12:11 -04:00

117 lines
4.1 KiB
Ruby

# This file is licensed under the MIT License (MIT) available on
# http://opensource.org/licenses/MIT.
#contributors.rb fetches Bitcoin Core contributors list and set
#site.contributors array. This is later used to display the
#list of contributors on the "Development" page.
require 'open-uri'
require 'json'
module Jekyll
class CategoryGenerator < Generator
def contributors(repo, aliases)
contributors = []
# Call GitHub API with 100 results per page
page = 1
data = []
while page < 10 do
begin
ar = JSON.parse(open("https://api.github.com/repos/"+repo+"/contributors?page=#{page}&per_page=100","User-Agent"=>"Ruby/#{RUBY_VERSION}").read)
# Prevent any error to stop the build process, return an empty array instead
rescue
print 'GitHub API Call Failed!'
break
end
if !ar.is_a?(Array)
print 'GitHub API Call Failed!'
return contributors
end
if ar.length > 100
print 'GitHub API exceeding the 100 results limit!'
return contributors
end
# Stop calling GitHub API when no new results are returned
break if (ar.length == 0)
# Merge contributors into a single array
data.push(*ar)
page += 1
end
# Loop in returned results array
result = {}
for c in data
# Skip incomplete / invalid data and set contributor's name
next if !c.is_a?(Hash)
next if !c.has_key?('contributions') or !c['contributions'].is_a?(Integer) or c['contributions'] > 1000000
if c.has_key?('name') and c['name'].is_a?(String) and /^[A-Za-z0-9\-]{1,150}$/.match(c['name'])
name = c['name']
elsif c.has_key?('login') and c['login'].is_a?(String) and /^[A-Za-z0-9\-]{1,150}$/.match(c['login'])
name = c['login']
else
next
end
# Replace name by its corresponding alias if defined in _config.yml
name = aliases[name] if aliases.has_key?(name)
# Assign variables
x = {}
x['name'] = name
x['contributions'] = c['contributions']
# Set avatar_url when available
if c.has_key?('avatar_url') and c['avatar_url'].is_a?(String) and /^https:\/\/avatars\.githubusercontent\.com\/u\/[0-9]{1,10}\?v=[0-9]{1,2}$/.match(c['avatar_url'])
x['avatar_url'] = c['avatar_url'] + '&amp;size=16'
end
# Set login when available
if c.has_key?('login') and c['login'].is_a?(String) and /^[A-Za-z0-9\-]{1,150}$/.match(c['login'])
x['login'] = c['login']
end
# Add new contributor to the array, or increase contributions if it already exists
if result.has_key?(name)
result[name]['contributions'] += x['contributions']
else
result[name] = x
end
end
# Generate final ordered contributors array
result.each do |key, value|
contributors.push(value)
end
contributors.sort_by{|c| - c['contributions']}
end
def generate(site)
# Set site.contributors global variables for liquid/jekyll
class << site
attr_accessor :corecontributors
attr_accessor :sitecontributors
alias contrib_site_payload site_payload
def site_payload
h = contrib_site_payload
payload = h["site"]
payload["corecontributors"] = self.corecontributors
payload["sitecontributors"] = self.sitecontributors
h["site"] = payload
h
end
end
# Set site.corecontributors and site.sitecontributors arrays
site.corecontributors = {}
site.sitecontributors = {}
#Do nothing if plugin is disabled
if !ENV['ENABLED_PLUGINS'].nil? and ENV['ENABLED_PLUGINS'].index('contributors').nil?
print 'Contributors disabled' + "\n"
return
end
# Populate site.corecontributors and site.sitecontributors arrays
site.corecontributors = contributors('bitcoin/bitcoin',site.config['aliases'])
site.sitecontributors = contributors('bitcoin/bitcoin.org',site.config['aliases'])
end
end
end