merge of Gadgetoid changes 151108
This commit is contained in:
parent
3d14aafcb9
commit
efce2b5d50
|
@ -9,19 +9,43 @@ import sys
|
|||
import pinout
|
||||
import yaml
|
||||
import markjaml
|
||||
import urlmapper
|
||||
|
||||
reload(sys)
|
||||
sys.setdefaultencoding('utf8')
|
||||
|
||||
lang = "en-GB"
|
||||
default_strings = {
|
||||
'made_by': '* Made by {manufacturer}',
|
||||
'type_hat': '* HAT form-factor',
|
||||
'type_classic': '* Classic form-factor',
|
||||
'pin_header': '* {} pin header',
|
||||
'uses_i2c': '* Uses I2C',
|
||||
'wiring_pi_pin': 'Wiring Pi pin {}'
|
||||
}
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
lang = sys.argv[1]
|
||||
|
||||
alternate_urls = urlmapper.generate_urls(lang)
|
||||
|
||||
pinout.load(lang)
|
||||
|
||||
overlays = pinout.settings['overlays']
|
||||
|
||||
strings = pinout.get_setting('strings',{})
|
||||
|
||||
if type(strings) == list:
|
||||
_strings = {}
|
||||
for item in strings:
|
||||
_strings[item.keys()[0]] = item.values()[0]
|
||||
strings = _strings
|
||||
|
||||
for key, val in default_strings.items():
|
||||
if key not in strings:
|
||||
strings[key] = val
|
||||
|
||||
|
||||
base_url = pinout.get_setting('base_url','/pinout/') # '/pinout-tr/pinout/'
|
||||
resource_url = pinout.get_setting('resource_url','/resources/') # '/pinout-tr/resources/'
|
||||
url_suffix = pinout.get_setting('url_suffix','') # '.html'
|
||||
|
@ -81,16 +105,16 @@ def load_overlay(overlay):
|
|||
details = []
|
||||
|
||||
if 'manufacturer' in loaded:
|
||||
details.append('* Made by ' + loaded['manufacturer'])
|
||||
details.append(strings['made_by'].format(manufacturer=loaded['manufacturer']))
|
||||
|
||||
if 'pincount' in loaded:
|
||||
pincount = int(loaded['pincount'])
|
||||
if pincount == 40:
|
||||
details.append('* HAT form-factor')
|
||||
details.append(strings['type_hat'])
|
||||
elif pincount == 26:
|
||||
details.append('* Classic 26-pin')
|
||||
details.append(strings['type_classic'])
|
||||
else:
|
||||
details.append('* {} pin header'.format(pincount))
|
||||
details.append(strings['pin_header'].format(pincount))
|
||||
|
||||
if 'pin' in loaded:
|
||||
uses_5v = False
|
||||
|
@ -120,7 +144,7 @@ def load_overlay(overlay):
|
|||
pin_5 = loaded['pin']['5']
|
||||
if 'mode' in pin_3 and 'mode' in pin_5:
|
||||
if pin_3['mode'] == 'i2c' and pin_5['mode'] == 'i2c':
|
||||
details.append('* Uses I2C')
|
||||
details.append(strings['uses_i2c'])
|
||||
|
||||
if 'url' in loaded:
|
||||
details.append('* [More Information]({url})'.format(url=loaded['url']))
|
||||
|
@ -138,6 +162,7 @@ def load_overlay(overlay):
|
|||
loaded['page_url'] = slugify(loaded['name'])
|
||||
|
||||
loaded['rendered_html'] = render_overlay_page(loaded)
|
||||
loaded['src'] = overlay
|
||||
pages[loaded['page_url']] = loaded
|
||||
navs[loaded['page_url']] = render_nav(loaded['page_url'], overlay=loaded)
|
||||
select_overlays.append((loaded['page_url'], loaded['name']))
|
||||
|
@ -293,7 +318,7 @@ def render_pin(pin_num, selected_url, overlay=None):
|
|||
pin_name = 'BCM {} {}'.format(bcm, pin_subname)
|
||||
if 'wiringpi' in pin['scheme']:
|
||||
wiringpi = pin['scheme']['wiringpi']
|
||||
pin_link_title.append('Wiring Pi pin {}'.format(wiringpi))
|
||||
pin_link_title.append(strings['wiring_pi_pin'].format(wiringpi))
|
||||
|
||||
pin_url = base_url + slugify('pin{}_{}'.format(pin_num,pin_url))
|
||||
|
||||
|
@ -345,9 +370,9 @@ and all other pages in /pinout/
|
|||
|
||||
serve.py will mirror this structure for testing.
|
||||
'''
|
||||
pages['pinout'] = {}
|
||||
pages['pinout']['rendered_html'] = render_overlay_page({'name':'Index','long_description':load_md('index.md')})
|
||||
navs['pinout'] = render_nav('pinout')
|
||||
pages['index'] = {}
|
||||
pages['index']['rendered_html'] = render_overlay_page({'name':'Index','long_description':load_md('index.md')})
|
||||
navs['index'] = render_nav('pinout')
|
||||
|
||||
print('Rendering pin pages...')
|
||||
|
||||
|
@ -355,8 +380,26 @@ for pin in range(1,len(pinout.pins)+1):
|
|||
(pin_url, pin_html, pin_title) = render_pin_page(pin)
|
||||
if pin_url == None:
|
||||
continue
|
||||
|
||||
hreflang = []
|
||||
|
||||
src = 'pin{}'.format(pin)
|
||||
|
||||
for code in alternate_urls:
|
||||
if src in alternate_urls[code]:
|
||||
alt = alternate_urls[code][src]
|
||||
code_lang = code.split('-')[0] + '.'
|
||||
if code_lang == 'en.':
|
||||
code_lang = ''
|
||||
hreflang.append('<link rel="alternate" src="//{lang}pinout.xyz/pinout/{alt}" hreflang="{code}"/>'.format(
|
||||
lang=code_lang,
|
||||
alt=alt,
|
||||
code=code
|
||||
))
|
||||
|
||||
pin_nav = render_nav(pin_url)
|
||||
pin_html = pinout.render_html(template,
|
||||
hreflang = "\n\t\t".join(hreflang),
|
||||
nav = pin_nav,
|
||||
content = pin_html,
|
||||
resource_url = resource_url,
|
||||
|
@ -376,6 +419,33 @@ print('Rendering overlay and index pages...')
|
|||
for url in pages:
|
||||
content = pages[url]['rendered_html']
|
||||
nav = navs[url]
|
||||
hreflang = []
|
||||
|
||||
if url == 'index':
|
||||
for code in alternate_urls:
|
||||
code_lang = code.split('-')[0] + '.'
|
||||
if code_lang == 'en.':
|
||||
code_lang = ''
|
||||
hreflang.append('<link rel="alternate" src="//{lang}pinout.xyz" hreflang="{code}"/>'.format(
|
||||
lang=code_lang,
|
||||
alt=alt,
|
||||
code=code
|
||||
))
|
||||
|
||||
if 'src' in pages[url]:
|
||||
src = pages[url]['src']
|
||||
|
||||
for code in alternate_urls:
|
||||
if src in alternate_urls[code]:
|
||||
alt = alternate_urls[code][src]
|
||||
code_lang = code.split('-')[0] + '.'
|
||||
if code_lang == 'en.':
|
||||
code_lang = ''
|
||||
hreflang.append('<link rel="alternate" src="//{lang}pinout.xyz/pinout/{alt}" hreflang="{code}"/>'.format(
|
||||
lang=code_lang,
|
||||
alt=alt,
|
||||
code=code
|
||||
))
|
||||
|
||||
if not 'description' in pages[url]:
|
||||
pages[url]['description'] = pinout.settings['default_desc']
|
||||
|
@ -386,6 +456,7 @@ for url in pages:
|
|||
pages[url]['name'] = pinout.settings['default_title']
|
||||
|
||||
html = pinout.render_html(template,
|
||||
hreflang = "\n\t\t".join(hreflang),
|
||||
nav = nav,
|
||||
content = content,
|
||||
overlays = overlays_html,
|
||||
|
@ -395,7 +466,7 @@ for url in pages:
|
|||
)
|
||||
print('Outputting page {}'.format(url))
|
||||
|
||||
if url != 'pinout':
|
||||
if url != 'index':
|
||||
url = os.path.join('pinout',url)
|
||||
|
||||
with open(os.path.join('output',lang,'{}.html'.format(url)),'w') as f:
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 599 B |
|
@ -16,10 +16,15 @@ h2 {font-size:18px;margin-top:20px;}
|
|||
.drop-down {
|
||||
float: right;
|
||||
display: block;
|
||||
width: 250px;
|
||||
width: 500px;
|
||||
border:2px solid #D6264E;
|
||||
margin-left:20px;
|
||||
}
|
||||
img.grayscale {
|
||||
filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 10+, Firefox on Android */
|
||||
filter: gray; /* IE6-9 */
|
||||
-webkit-filter: grayscale(100%); /* Chrome 19+, Safari 6+, Safari 6+ iOS */
|
||||
}
|
||||
.overlay {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
@ -28,6 +33,7 @@ h2 {font-size:18px;margin-top:20px;}
|
|||
background:rgba(255,255,255,0.95);
|
||||
padding:10px 0px;
|
||||
clear:both;
|
||||
overflow:hidden;
|
||||
}
|
||||
.overlay-container span {
|
||||
display:block;
|
||||
|
@ -36,8 +42,12 @@ h2 {font-size:18px;margin-top:20px;}
|
|||
.overlay li {
|
||||
display:block;
|
||||
width:250px;
|
||||
float:left;
|
||||
}
|
||||
.overlay li:nth-child(odd) a {
|
||||
border-right:2px solid #D6264E;
|
||||
}
|
||||
.overlay li:nth-child(4n+1) a,.overlay li:nth-child(4n+2) a {
|
||||
background:rgba(214, 38, 78, 0.05);
|
||||
}
|
||||
.overlay li a, .drop-down span {
|
||||
|
@ -49,6 +59,7 @@ h2 {font-size:18px;margin-top:20px;}
|
|||
cursor:pointer;
|
||||
width:230px;
|
||||
}
|
||||
.drop-down span {width:60px;}
|
||||
.drop-down span:hover, .drop-down:hover span {
|
||||
background:#D6264E;
|
||||
color:#FFFFFF;
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 492 B |
6
serve.py
6
serve.py
|
@ -5,9 +5,9 @@ app = Flask(__name__)
|
|||
|
||||
lang = 'en-GB'
|
||||
|
||||
@app.route("/")
|
||||
def redirect_to_pinout():
|
||||
return redirect('/pinout')
|
||||
@app.route('/')
|
||||
def show_index():
|
||||
return send_from_directory(basedir,'index.html')
|
||||
|
||||
@app.route("/resources/<path:filename>")
|
||||
def custom_static(filename):
|
||||
|
|
|
@ -8,6 +8,13 @@ resource_url: /resources/
|
|||
url_suffix:
|
||||
urls:
|
||||
GND: ground
|
||||
strings:
|
||||
- made_by: '* Made by {manufacturer}'
|
||||
- type_hat: '* HAT form-factor'
|
||||
- type_classic: '* Classic form-factor'
|
||||
- pin_header: '* {} pin header'
|
||||
- uses_i2c: '* Uses I2C'
|
||||
- wiring_pi_pin: 'Wiring Pi pin {}'
|
||||
overlays:
|
||||
- ground
|
||||
- spi
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
#!/usr/bin/env python
|
||||
import json
|
||||
import unicodedata
|
||||
import re
|
||||
import os
|
||||
import time
|
||||
import sys
|
||||
import pinout
|
||||
import yaml
|
||||
import markjaml
|
||||
import glob
|
||||
|
||||
reload(sys)
|
||||
sys.setdefaultencoding('utf8')
|
||||
|
||||
def url_slugify(value):
|
||||
"""
|
||||
Normalizes string, converts to lowercase, removes non-alpha characters,
|
||||
and converts spaces to hyphens.
|
||||
"""
|
||||
value = unicode(value)
|
||||
value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
|
||||
value = re.sub('[^\w\s-]', '', value).strip().lower()
|
||||
return re.sub('[-\s]+', '_', value)
|
||||
|
||||
def load_overlay_url(overlay, lang):
|
||||
try:
|
||||
data = markjaml.load('src/{}/overlay/{}.md'.format(lang,overlay))
|
||||
|
||||
loaded = data['data']
|
||||
except IOError:
|
||||
return None
|
||||
|
||||
if not 'page_url' in loaded:
|
||||
loaded['page_url'] = url_slugify(loaded['name'])
|
||||
|
||||
return overlay, loaded['page_url']
|
||||
|
||||
def get_pin_url(pin_num,pinout):
|
||||
pin = pinout.pins[str(pin_num)]
|
||||
pin_url = pin['name']
|
||||
|
||||
if pin_url == 'Ground':
|
||||
return None
|
||||
|
||||
if 'scheme' in pin:
|
||||
if 'bcm' in pin['scheme']:
|
||||
bcm = pin['scheme']['bcm']
|
||||
pin_url = 'gpio{}'.format(bcm)
|
||||
|
||||
return url_slugify('pin{}_{}'.format(pin_num,pin_url))
|
||||
|
||||
def generate_for_lang(lang="en-GB"):
|
||||
url_lookup = {}
|
||||
|
||||
pinout.load(lang)
|
||||
|
||||
overlays = pinout.settings['overlays']
|
||||
|
||||
overlays_html = ''
|
||||
|
||||
overlays = map(lambda overlay: load_overlay_url(overlay, lang),overlays)
|
||||
|
||||
for pin in range(1,len(pinout.pins)+1):
|
||||
pin_url = get_pin_url(pin,pinout)
|
||||
if pin_url is None:
|
||||
continue
|
||||
|
||||
url_lookup['pin{}'.format(pin)] = '{}'.format(pin_url)
|
||||
|
||||
for url in overlays:
|
||||
if url is None:
|
||||
continue
|
||||
|
||||
url_lookup['{}'.format(url[0])] = '{}'.format(url[1])
|
||||
|
||||
return url_lookup
|
||||
|
||||
def generate_urls(lang="en-GB"):
|
||||
languages = [l.replace('src/','') for l in glob.glob('src/*')] # if not l == 'src/'+lang
|
||||
urls = {}
|
||||
for lang in languages:
|
||||
urls[lang] = generate_for_lang(lang)
|
||||
return urls
|
||||
|
Loading…
Reference in New Issue