mirror of
https://github.com/seigler/dash-docs
synced 2025-07-27 01:36:13 +00:00
Disable unnecessary plugins (alerts, contrib, events, wallets)
- Remove related files to ensure successful build
This commit is contained in:
parent
5c22586e02
commit
89da1af838
8 changed files with 0 additions and 613 deletions
|
@ -1,87 +0,0 @@
|
||||||
# This file is licensed under the MIT License (MIT) available on
|
|
||||||
# http://opensource.org/licenses/MIT.
|
|
||||||
|
|
||||||
#alerts.rb generates alert pages using files in _alerts
|
|
||||||
#and assign them the 'alert' category.
|
|
||||||
|
|
||||||
#This is later used to loop through site.pages in order
|
|
||||||
#to display the alert's list in chronological order, both
|
|
||||||
#on the "Alerts" page and RSS file.
|
|
||||||
|
|
||||||
#If "banner" variable is set in one alert file, site.ALERT
|
|
||||||
#variable is set, allowing a clickable alert banner to be
|
|
||||||
#displayed in _layouts/base.html .
|
|
||||||
|
|
||||||
#If "shorturl" variable is set in one alert file, a short alias
|
|
||||||
#file for the alert (like /android.html) is generated for
|
|
||||||
#Bitcoin Core non-clickable alerts.
|
|
||||||
|
|
||||||
require 'yaml'
|
|
||||||
|
|
||||||
module Jekyll
|
|
||||||
|
|
||||||
class AlertPage < Page
|
|
||||||
def initialize(site, base, lang, srcdir, src, dstdir, dst, date)
|
|
||||||
@site = site
|
|
||||||
@base = base
|
|
||||||
@dir = '/'+dstdir
|
|
||||||
@name = dst
|
|
||||||
extension = dst.split('.')[-1]
|
|
||||||
self.process(dst)
|
|
||||||
self.read_yaml(File.join(base, srcdir), src)
|
|
||||||
self.data['lang'] = lang
|
|
||||||
self.data['date'] = date
|
|
||||||
self.data['path'] = srcdir+'/'+src
|
|
||||||
self.data['layout'] = 'alert'
|
|
||||||
if dstdir == ''
|
|
||||||
self.data['canonical'] = '/en/alert/' + src.split('.')[0]
|
|
||||||
else
|
|
||||||
self.data['category'] = 'alert'
|
|
||||||
if self.data.has_key?('banner') and !self.data['banner'].nil? and self.data['banner'].length>0
|
|
||||||
site.config['ALERT']=self.data['banner']
|
|
||||||
site.config['ALERTURL']='/'+dstdir+'/'+dst.gsub('.html','').gsub('.md','')
|
|
||||||
if self.data.has_key?('bannerclass') and !self.data['bannerclass'].nil? and self.data['bannerclass'].length>0
|
|
||||||
site.config['ALERTCLASS'] = self.data['bannerclass']
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if self.data.has_key?('active') and !self.data['active'].nil? and self.data['active'] == true
|
|
||||||
site.config['STATUS'] = 1
|
|
||||||
end
|
|
||||||
if self.data.has_key?('shorturl')
|
|
||||||
site.pages << AlertPage.new(site, base, lang, srcdir, src, '', self.data['shorturl']+'.'+extension, date)
|
|
||||||
site.pages << AlertPage.new(site, base, lang, srcdir, src, '', self.data['shorturl']+'/index.'+extension, date)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class AlertPageGenerator < Generator
|
|
||||||
def generate(site)
|
|
||||||
#Generate each alert based on templates
|
|
||||||
site.config['STATUS'] = 0
|
|
||||||
site.config['ALERTCLASS'] = 'alert'
|
|
||||||
#Do nothing if plugin is disabled
|
|
||||||
if !ENV['ENABLED_PLUGINS'].nil? and ENV['ENABLED_PLUGINS'].index('alerts').nil?
|
|
||||||
print 'Alerts disabled' + "\n"
|
|
||||||
return
|
|
||||||
end
|
|
||||||
Dir.foreach('_alerts') do |file|
|
|
||||||
next if file == '.' or file == '..'
|
|
||||||
lang = 'en'
|
|
||||||
src = file
|
|
||||||
dst = file
|
|
||||||
srcdir = '_alerts'
|
|
||||||
dstdir = lang + '/alert'
|
|
||||||
date = dst.split('-')
|
|
||||||
next if date.length < 4
|
|
||||||
date = date[0] + '-' + date[1] + '-' + date[2]
|
|
||||||
next if !/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.match(date)
|
|
||||||
site.pages << AlertPage.new(site, site.source, lang, '_alerts', src, dstdir, dst, date)
|
|
||||||
end
|
|
||||||
#TODO alerts are only generated for english language,
|
|
||||||
#but they could also be translated at some point. They would however
|
|
||||||
#need to fallback to english when no translation is available.
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,150 +0,0 @@
|
||||||
# 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 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
|
|
||||||
if ! site.respond_to?('corecontributors')
|
|
||||||
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
|
|
||||||
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
|
|
||||||
|
|
||||||
## Create cache directory if it doesn't exist
|
|
||||||
if !File.exists?('_cache')
|
|
||||||
Dir.mkdir('_cache')
|
|
||||||
end
|
|
||||||
|
|
||||||
# Populate site.corecontributors and site.sitecontributors with
|
|
||||||
# data from GitHub.com. Store data in the cache and only
|
|
||||||
# re-retrieve the data if 86,400 seconds (24 hours) passes from
|
|
||||||
# the retrieval date or if the cache file is deleted. For
|
|
||||||
# simplicity, updates on the two cache files are linked, so if one
|
|
||||||
# file has to be updated, they both get updated.
|
|
||||||
corecontributors_cache = '_cache/corecontributors.marshall'
|
|
||||||
sitecontributors_cache = '_cache/sitecontributors.marshall'
|
|
||||||
if File.exists?(corecontributors_cache) && File.exists?(sitecontributors_cache)
|
|
||||||
corecontributors_cache_age = (Time.now - File.stat(corecontributors_cache).mtime).to_i
|
|
||||||
sitecontributors_cache_age = (Time.now - File.stat(sitecontributors_cache).mtime).to_i
|
|
||||||
else
|
|
||||||
corecontributors_cache_age = Time.now.to_i
|
|
||||||
sitecontributors_cache_age = Time.now.to_i
|
|
||||||
end
|
|
||||||
|
|
||||||
if corecontributors_cache_age > 86400 || sitecontributors_cache_age > 86400
|
|
||||||
site.corecontributors = contributors('bitcoin/bitcoin',site.config['aliases'])
|
|
||||||
File.open(corecontributors_cache,'w') do |file|
|
|
||||||
Marshal.dump(site.corecontributors, file)
|
|
||||||
end
|
|
||||||
site.sitecontributors = contributors('bitcoin-dot-org/bitcoin.org',site.config['aliases'])
|
|
||||||
File.open(sitecontributors_cache,'w') do |file|
|
|
||||||
Marshal.dump(site.sitecontributors, file)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
File.open(corecontributors_cache,'r') do |file|
|
|
||||||
site.corecontributors = Marshal.load(file)
|
|
||||||
end
|
|
||||||
File.open(sitecontributors_cache,'r') do |file|
|
|
||||||
site.sitecontributors = Marshal.load(file)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,102 +0,0 @@
|
||||||
# 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
|
|
||||||
if ! site.respond_to?('conferences')
|
|
||||||
class << site
|
|
||||||
attr_accessor :meetups, :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
|
|
||||||
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
|
|
|
@ -1,137 +0,0 @@
|
||||||
# This file is licensed under the MIT License (MIT) available on
|
|
||||||
# http://opensource.org/licenses/MIT.
|
|
||||||
|
|
||||||
require 'yaml'
|
|
||||||
|
|
||||||
module Jekyll
|
|
||||||
|
|
||||||
class WalletPage < Page
|
|
||||||
def initialize(site, base, dir, wallet, platform, os, title, lang)
|
|
||||||
@site = site
|
|
||||||
@base = base
|
|
||||||
@dir = dir
|
|
||||||
@name = 'index.html'
|
|
||||||
|
|
||||||
self.process(@name)
|
|
||||||
self.read_yaml(File.join(base, '_layouts'), 'wallet-container.html')
|
|
||||||
self.data['wallet'] = wallet
|
|
||||||
self.data['platform'] = platform
|
|
||||||
self.data['os'] = os
|
|
||||||
self.data['id'] = ['wallets', platform['name'], os['name'], wallet['id']].join('-')
|
|
||||||
self.data['lang'] = lang
|
|
||||||
self.data['title'] = title
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class PlatformPage < Page
|
|
||||||
def initialize(site, base, dir, platform, os, title, lang)
|
|
||||||
@site = site
|
|
||||||
@base = base
|
|
||||||
@dir = dir
|
|
||||||
@name = 'index.html'
|
|
||||||
|
|
||||||
self.process(@name)
|
|
||||||
self.read_yaml(File.join(base, '_layouts'), 'wallet-platform.html')
|
|
||||||
self.data['platform'] = platform
|
|
||||||
self.data['os'] = os
|
|
||||||
self.data['id'] = ['wallets', platform['name'], os['name']].join('-')
|
|
||||||
self.data['lang'] = lang
|
|
||||||
self.data['title'] = title
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class WalletsPageGenerator < Generator
|
|
||||||
safe true
|
|
||||||
|
|
||||||
def generate(site)
|
|
||||||
# Get the collection of wallets from _wallets
|
|
||||||
walletsCol = site.collections['wallets'];
|
|
||||||
|
|
||||||
# Get the collection of wallets from _wallets
|
|
||||||
platformsCol = site.collections['platforms'];
|
|
||||||
|
|
||||||
# Output dir
|
|
||||||
# TODO: Make this configurable and "translatable"
|
|
||||||
walletsDir = 'wallets'
|
|
||||||
|
|
||||||
# Loading translations.
|
|
||||||
# Copy-paste from _plugins/templates.rb
|
|
||||||
locs = {}
|
|
||||||
enabled = ENV['ENABLED_LANGS'];
|
|
||||||
enabled = enabled.split(' ') if !enabled.nil?
|
|
||||||
Dir.foreach('_translations') do |file|
|
|
||||||
next if file == '.' or file == '..' or file == 'COPYING'
|
|
||||||
lang = file.split('.')[0]
|
|
||||||
# Ignore language if it's disabled
|
|
||||||
if lang != 'en' and !enabled.nil? and !enabled.include?(lang)
|
|
||||||
puts('Lang ' + lang + ' disabled')
|
|
||||||
next
|
|
||||||
end
|
|
||||||
locs[lang] = YAML.load_file("_translations/"+file)[lang]
|
|
||||||
end
|
|
||||||
|
|
||||||
# Getting information about each found wallet
|
|
||||||
locs.each do |lang,value|
|
|
||||||
title = locs[lang]['choose-your-wallet']['title']
|
|
||||||
|
|
||||||
platformsCol.docs.each do |doc|
|
|
||||||
file = doc.path
|
|
||||||
data = YAML.load_file(file)
|
|
||||||
platform = data['platform']
|
|
||||||
os = data['os']
|
|
||||||
if platform['name'] == os['name']
|
|
||||||
dir = File.join(platform['name'])
|
|
||||||
else
|
|
||||||
dir = File.join(platform['name'], os['name'])
|
|
||||||
end
|
|
||||||
|
|
||||||
platformTitle = locs[lang]['choose-your-wallet']['walletcat' + platform['name']]
|
|
||||||
osTitle = locs[lang]['choose-your-wallet']['platform' + os['name']]
|
|
||||||
if osTitle.nil?
|
|
||||||
fullTitle = [platformTitle, title].join(' - ')
|
|
||||||
else
|
|
||||||
fullTitle = [platformTitle, osTitle, title].join(' - ')
|
|
||||||
end
|
|
||||||
site.pages << PlatformPage.new(site, site.source, File.join(lang, walletsDir, dir), platform, os, fullTitle, lang)
|
|
||||||
end
|
|
||||||
|
|
||||||
walletsCol.docs.each do |doc|
|
|
||||||
file = doc.path
|
|
||||||
wallet = YAML.load_file(file)
|
|
||||||
walletPlatforms = wallet['platform']
|
|
||||||
|
|
||||||
# Going through all available combinations of
|
|
||||||
# platforms and OSes
|
|
||||||
walletPlatforms.each do |platform|
|
|
||||||
platform['os'].each do |os|
|
|
||||||
|
|
||||||
# This allows generation only of valid wallet pages
|
|
||||||
if platform['name']
|
|
||||||
if platform['name'] == os['name']
|
|
||||||
dir = File.join(platform['name'], wallet['id'])
|
|
||||||
else
|
|
||||||
dir = File.join(platform['name'], os['name'], wallet['id'])
|
|
||||||
end
|
|
||||||
|
|
||||||
platformTitle = locs[lang]['choose-your-wallet']['walletcat' + platform['name']]
|
|
||||||
osTitle = locs[lang]['choose-your-wallet']['platform' + os['name']]
|
|
||||||
walletTitle = wallet['title']
|
|
||||||
|
|
||||||
if osTitle.nil?
|
|
||||||
fullTitle = [walletTitle, platformTitle, title].join(' - ')
|
|
||||||
else
|
|
||||||
fullTitle = [walletTitle, platformTitle, osTitle, title].join(' - ')
|
|
||||||
end
|
|
||||||
|
|
||||||
site.pages << WalletPage.new(site, site.source, File.join(lang, walletsDir, dir), wallet, platform, os, fullTitle, lang)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,38 +0,0 @@
|
||||||
---
|
|
||||||
# This file is licensed under the MIT License (MIT) available on
|
|
||||||
# http://opensource.org/licenses/MIT.
|
|
||||||
|
|
||||||
layout: base
|
|
||||||
id: events
|
|
||||||
---
|
|
||||||
{% assign date_sorted_conferences = site.conferences | sort: 'date' %}
|
|
||||||
<!-- Note: this file is built non-deterministically -->
|
|
||||||
<link rel="alternate" type="application/rss+xml" href="/en/rss/events.rss" title="Bitcoin conferences and events">
|
|
||||||
<h1>{% translate pagetitle %}<a type="application/rss+xml" href="/en/rss/events.rss"><img src="/img/icons/icon_rss.svg" alt="rss" class="rssicon"></a></h1>
|
|
||||||
<p class="summary">{% translate pagedesc %}</p>
|
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="/js/leaflet/leaflet.css" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="/js/leaflet-markercluster/MarkerCluster.css" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="/js/leaflet-markercluster/MarkerCluster.Default.css" />
|
|
||||||
<script src="/js/leaflet/leaflet.js"></script>
|
|
||||||
<script src="/js/leaflet-markercluster/leaflet.markercluster.js"></script>
|
|
||||||
<div id="eventmap" class="eventmap"></div>
|
|
||||||
<div id="eventdata" class="eventdata">
|
|
||||||
|
|
||||||
{% for p in date_sorted_conferences %}{% if p.geoloc %}
|
|
||||||
<div data-lat="{{ p.geoloc.lat }}" data-lon="{{ p.geoloc.lon }}"><b><a href="{{ p.link | htmlescape }}">{{ p.title | htmlescape }}</a></b><br>{{ p.date }}<br>{{ p.venue | htmlescape }}<br>{{ p.address | htmlescape }}<br>{{ p.city | htmlescape }}, {{ p.country | htmlescape }}</div>
|
|
||||||
{% endif %}{% endfor %}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script src="/js/events.js"></script>
|
|
||||||
<h2 id="upcoming">{% translate upcoming %}</h2>
|
|
||||||
<div class="listtable eventtable">
|
|
||||||
{% for p in date_sorted_conferences %}
|
|
||||||
<div><div>{{ p.date | date:"%Y-%m-%d" }}</div><div><a href="{{ p.link | htmlescape }}">{{ p.title | htmlescape }}</a></div><div>{{ p.city | htmlescape }}, {{ p.country | htmlescape }}</div></div>
|
|
||||||
{% endfor %}
|
|
||||||
<span><a href="https://github.com/thephez/dash.org/issues/new?title=New%20event&body=%20%20%20%20-%20date%3A%20YYYY-MM-DD%0A%20%20%20%20%20%20title%3A%20%22%22%0A%20%20%20%20%20%20venue%3A%20%22%22%0A%20%20%20%20%20%20address%3A%20%22%22%0A%20%20%20%20%20%20city%3A%20%22%22%0A%20%20%20%20%20%20country%3A%20%22%22%0A%20%20%20%20%20%20link%3A%20%22%22">{% translate eventsubmit %}</a></span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>{% translate meetupgroup %}</p>
|
|
||||||
<p>{% translate meetupbitcointalk %}</p>
|
|
||||||
<p>{% translate meetupwiki %}</p>
|
|
|
@ -1,42 +0,0 @@
|
||||||
---
|
|
||||||
# This file is licensed under the MIT License (MIT) available on
|
|
||||||
# http://opensource.org/licenses/MIT.
|
|
||||||
|
|
||||||
layout: base
|
|
||||||
lang: en
|
|
||||||
id: alerts
|
|
||||||
title: Network status and alerts - Bitcoin
|
|
||||||
---
|
|
||||||
{% assign date_sorted_alerts = site.alerts | sort: 'date' %}
|
|
||||||
<link rel="alternate" type="application/rss+xml" href="/en/rss/alerts.rss" title="Bitcoin network status and alerts">
|
|
||||||
|
|
||||||
|
|
||||||
<h1>Network status and alerts</h1>
|
|
||||||
|
|
||||||
<p class="summary">Stay aware of network alerts by <a type="application/rss+xml" href="/en/rss/alerts.rss">subscribing to the RSS feed <img src="/img/icons/icon_rss.svg" alt="rss" class="rssicon"></a></p>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
{% if site.STATUS == 0 %}
|
|
||||||
<div class="alertstatusinactive">There is no ongoing event on the Bitcoin network.</div>
|
|
||||||
{% else %}
|
|
||||||
<div class="alertstatusactive">The following network event is ongoing.</div>
|
|
||||||
<ul class="alertsactive">
|
|
||||||
{% for p in date_sorted_alerts reversed %}{% if p.active == true %}
|
|
||||||
<li>
|
|
||||||
{{ p.date | date:"%Y-%m-%d" }} - <a href="{{ p.url | replace:'.html','' }}">{{ p.title }}</a>
|
|
||||||
</li>
|
|
||||||
{% endif %}{% endfor %}
|
|
||||||
</ul>
|
|
||||||
{% endif %}
|
|
||||||
<ul class="alertsinactive">
|
|
||||||
{% for p in date_sorted_alerts reversed %}{% if p.active == false %}
|
|
||||||
<li>
|
|
||||||
{{ p.date | date:"%Y-%m-%d" }} - <a href="{{ p.url | replace:'.html','' }}">{{ p.title }}</a>
|
|
||||||
</li>
|
|
||||||
{% endif %}{% endfor %}
|
|
||||||
</ul>
|
|
||||||
<p><a href="http://getaddr.bitnodes.io/">Status and distribution of Bitcoin nodes</a></p>
|
|
||||||
<p><a href="http://bitcoinstats.com/network/propagation/">Propagation time on the network</a></p>
|
|
||||||
<p><a href="https://en.bitcoin.it/wiki/Common_Vulnerabilities_and_Exposures">Complete CVE list</a></p>
|
|
||||||
<p>Please refer to the <a href="/en/development">development</a> page if you want to report a vulnerability.</p>
|
|
||||||
</div>
|
|
|
@ -1,28 +0,0 @@
|
||||||
---
|
|
||||||
# This file is licensed under the MIT License (MIT) available on
|
|
||||||
# http://opensource.org/licenses/MIT.
|
|
||||||
|
|
||||||
lang: en
|
|
||||||
---
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<rss version="2.0">
|
|
||||||
<channel>
|
|
||||||
<title>Bitcoin network status and alerts</title>
|
|
||||||
<link>https://bitcoin.org/en/alerts</link>
|
|
||||||
<description>This RSS feed allows to follow events and alerts surrounding the Bitcoin network and software.</description>
|
|
||||||
<image>
|
|
||||||
<title>Bitcoin network status and alerts</title>
|
|
||||||
<url>https://bitcoin.org/img/icons/logo_rss.png</url>
|
|
||||||
<link>https://bitcoin.org/en/alerts</link>
|
|
||||||
</image>
|
|
||||||
{% assign date_sorted_alerts = site.alerts | sort: 'date' %}
|
|
||||||
{% for p in date_sorted_alerts reversed %}
|
|
||||||
<item>
|
|
||||||
<title>{{ p.title | htmlescape }}</title>
|
|
||||||
<link>https://bitcoin.org{{ p.url }}</link>
|
|
||||||
<guid>https://bitcoin.org{{ p.url }}</guid>
|
|
||||||
<pubDate>{{ p.date | date: "%a, %d %b %Y" }} 00:00:00 GMT</pubDate>
|
|
||||||
</item>
|
|
||||||
{% endfor %}
|
|
||||||
</channel>
|
|
||||||
</rss>
|
|
|
@ -1,29 +0,0 @@
|
||||||
---
|
|
||||||
# This file is licensed under the MIT License (MIT) available on
|
|
||||||
# http://opensource.org/licenses/MIT.
|
|
||||||
|
|
||||||
lang: en
|
|
||||||
---
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<rss version="2.0">
|
|
||||||
<!-- Note: this file is built non-deterministically -->
|
|
||||||
<channel>
|
|
||||||
<title>Bitcoin conferences and events</title>
|
|
||||||
<link>https://bitcoin.org/en/events</link>
|
|
||||||
<description>This RSS feed allows to follow Bitcoin events and conferences.</description>
|
|
||||||
<image>
|
|
||||||
<title>Bitcoin conferences and events</title>
|
|
||||||
<url>https://bitcoin.org/img/icons/logo_rss.png</url>
|
|
||||||
<link>https://bitcoin.org/en/events</link>
|
|
||||||
</image>
|
|
||||||
{% assign date_sorted_conferences = site.conferences | sort: 'date' %}
|
|
||||||
{% for p in date_sorted_conferences %}
|
|
||||||
<item>
|
|
||||||
<title>{{ p.title | htmlescape }}, {{ p.city | htmlescape }} - {{ p.country | htmlescape }}</title>
|
|
||||||
<link>{{p.link}}</link>
|
|
||||||
<guid>{{p.link}}</guid>
|
|
||||||
<pubDate>{{ p.date | date: "%a, %d %b %Y" }} 00:00:00 GMT</pubDate>
|
|
||||||
</item>
|
|
||||||
{% endfor %}
|
|
||||||
</channel>
|
|
||||||
</rss>
|
|
Loading…
Add table
Add a link
Reference in a new issue