From 6d45bb72d1733359fd9e8730eac77463842c432c Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Thu, 26 Mar 2015 17:27:30 +0000 Subject: [PATCH] Tidying up build process --- .gitignore | 1 + generate-html.py | 100 ++++++++++++++++------------------------ pinout.py | 57 +++++++++++++++++++++++ resources/pinout.js | 95 ++------------------------------------ serve.py | 7 ++- src/en-GB/settings.json | 5 ++ 6 files changed, 114 insertions(+), 151 deletions(-) create mode 100644 pinout.py create mode 100644 src/en-GB/settings.json diff --git a/.gitignore b/.gitignore index ea1472e..e22ea2e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ output/ +*.py[cod] diff --git a/generate-html.py b/generate-html.py index 976abfd..05852fb 100755 --- a/generate-html.py +++ b/generate-html.py @@ -6,6 +6,7 @@ import re import os import time import sys +import pinout lang = "en-GB" base_url = '/pinout/' @@ -14,11 +15,7 @@ resource_url = '/resources/' if len(sys.argv) > 1: lang = sys.argv[1] -default_desc = 'The comprehensive Raspberry Pi GPIO Pinout guide for the original Raspberry Pi, B+ and Pi 2' -default_title = 'Raspberry Pi GPIO Pinout - Pi 1, B+, Pi 2' -title_suffix = ' at Raspberry Pi GPIO Pinout' - -pins = None +pinout.load(lang) overlays = [ 'spi', @@ -86,7 +83,7 @@ def load_overlay(overlay): except IOError: return None - loaded['long_description'] = load_md('src/{}/description/overlay/{}.md'.format(lang,overlay)) + loaded['long_description'] = load_md('description/overlay/{}.md'.format(overlay)) details = [] @@ -103,25 +100,16 @@ def load_overlay(overlay): details.append('* {} pin header'.format(pincount)) if 'pin' in loaded: - #uses = len(loaded['pin']) uses_5v = False uses_3v = False uses = 0 for pin in loaded['pin']: if pin.startswith('bcm'): - pin = pin[3:] - for idx in pins: - compare_pin = pins[idx] - #print(compare_pin) - if 'scheme' in compare_pin: - if 'bcm' in compare_pin['scheme']: - if compare_pin['scheme']['bcm'] == int(pin): - print("Mapping BCM{} to {}".format(pin, str(idx))) - pin = str(idx) - break + pin = pinout.bcm_to_physical(pin[3:]) + + if pin in pinout.pins: + actual_pin = pinout.pins[pin] - if pin in pins: - actual_pin = pins[pin] if actual_pin['type'] in ['+3v3','+5v','GND']: if actual_pin['type'] == '+3v3': uses_3v = True @@ -160,12 +148,13 @@ def load_overlay(overlay): return loaded def load_md(filename): + filename = 'src/{}/{}'.format(lang, filename) try: html = markdown.markdown(open(filename).read(), extensions=['fenced_code']) return html - #return markdown.markdown(open(filename).read(), extensions=[gfm.HiddenHiliteExtension([]),'fenced_code']) except IOError: + print('Unable to load markdown from {}'.format(filename)) return '' def render_pin_text(pin_num, pin_url, pin_name, pin_functions, pin_subtext): @@ -174,21 +163,20 @@ def render_pin_text(pin_num, pin_url, pin_name, pin_functions, pin_subtext): pin_name=pin_name, pin_functions=pin_functions, pin_subtext=pin_subtext, - pin_text=load_md('src/{}/description/pins/pin-{}.md'.format(lang,pin_num))) + pin_text=load_md('description/pins/pin-{}.md'.format(pin_num))) def render_overlay_page(overlay): if overlay == None: return '' return '
{}
'.format(slugify(overlay['name']),overlay['long_description']) -#pages += map(render_overlay_page,overlays) def render_alternate(handle, name): handle = slugify(handle.lower()) return '{}'.format(handle,name) def render_pin_page(pin_num): - pin = pins[str(pin_num)] + pin = pinout.pins[str(pin_num)] pin_url = pin['name'] pin_text_name = pin['name'] @@ -202,8 +190,6 @@ def render_pin_page(pin_num): bcm = pin['scheme']['bcm'] pin_url = 'gpio{}'.format(bcm) - #pin_subname_text = '' - #pin_text_name = 'BCM {} {}'.format(bcm, pin_subname_text) pin_text_name = 'BCM {}'.format(bcm) if pin['name'] != '': @@ -262,7 +248,7 @@ def render_pin_page(pin_num): def render_pin(pin_num, selected_url, overlay=None): - pin = pins[str(pin_num)] + pin = pinout.pins[str(pin_num)] pin_type = list([x.strip() for x in pin['type'].lower().split('/')]) @@ -289,12 +275,6 @@ def render_pin(pin_num, selected_url, overlay=None): if 'description' in overlay_pin: pin_link_title.append(overlay_pin['description']) - #alternates = [] - - #for overlay in overlays: - # if overlay != None: - # if str(pin_num) in overlay['pin']: - # alternates.append(render_alternate(overlay['name'],overlay['pin'][str(pin_num)]['name'])) if 'scheme' in pin: if 'bcm' in pin['scheme']: @@ -305,19 +285,13 @@ def render_pin(pin_num, selected_url, overlay=None): pin_url = 'gpio{}'.format(bcm) if pin_name != '': #pin['name'] != '': pin_subname = '({})'.format(pin_name) #pin['name']) - # pin_subname_text = '({})'.format(pin['name']) pin_name = 'BCM {} {}'.format(bcm, pin_subname) - # pin_text_name = 'BCM {} {}'.format(bcm, pin_subname_text) if 'wiringpi' in pin['scheme']: wiringpi = pin['scheme']['wiringpi'] pin_link_title.append('Wiring Pi pin {}'.format(wiringpi)) - # alternates.append(render_alternate('wiringpi','Wiring Pi pin {}'.format(wiringpi))) - - #print(pin_type) pin_url = base_url + slugify('pin{}_{}'.format(pin_num,pin_url)) - #print(selected_url) selected = '' if base_url + selected_url == pin_url: @@ -337,7 +311,7 @@ def render_pin(pin_num, selected_url, overlay=None): def render_nav(url, overlay=None): html_odd = '' html_even = '' - for odd in range(1,len(pins),2): + for odd in range(1,len(pinout.pins),2): html_odd += render_pin(odd, url,overlay) html_even += render_pin(odd+1,url,overlay) @@ -347,33 +321,36 @@ def render_nav(url, overlay=None): {}'''.format(html_odd, html_even) - - -db = json.load(open('src/{}/pi-pinout.json'.format(lang))) - -pins = db['pins'] - overlays = map(load_overlay,overlays) for url, name in select_overlays: overlays_html += ''.format(url, name) +''' +Manually add the index page as 'pinout', this is due to how the +website is currently structured with /pinout as the index +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('description/index.md')}) navs['pinout'] = render_nav('pinout') print('Rendering pin pages...') -for pin in range(1,len(pins)+1): +for pin in range(1,len(pinout.pins)+1): (pin_url, pin_html, pin_title) = render_pin_page(pin) pin_nav = render_nav(pin_url) - pin_html = template.replace('{{nav}}',pin_nav).replace('{{content}}',pin_html) - pin_html = pin_html.replace('{{resource_url}}',resource_url) - pin_html = pin_html.replace('{{overlays}}',overlays_html).replace('{{v}}',str(int(time.time()))) - pin_html = pin_html.replace('{{description}}',default_desc) - pin_html = pin_html.replace('{{title}}',pin_title + title_suffix) - + pin_html = pinout.render_html(template, + nav = pin_nav, + content = pin_html, + resource_url = resource_url, + overlays = overlays_html, + description = pinout.settings['default_desc'], + title = pin_title + pinout.settings['title_suffix'] + ) print('Outputting page {}'.format(pin_url)) with open(os.path.join('output',lang,'pinout','{}.html'.format(pin_url)),'w') as f: @@ -388,19 +365,22 @@ for url in pages: nav = navs[url] if not 'description' in pages[url]: - pages[url]['description'] = default_desc + pages[url]['description'] = pinout.settings['default_desc'] if 'name' in pages[url]: - pages[url]['name'] = pages[url]['name'] + title_suffix + pages[url]['name'] = pages[url]['name'] + pinout.settings['title_suffix'] else: - pages[url]['name'] = default_title + pages[url]['name'] = pinout.settings['default_title'] + html = pinout.render_html(template, + nav = nav, + content = content, + overlays = overlays_html, + resource_url = resource_url, + description = pages[url]['description'], + title = pages[url]['name'] + ) print('Outputting page {}'.format(url)) - html = template.replace('{{nav}}',nav).replace('{{content}}',content) - html = html.replace('{{resource_url}}',resource_url).replace('{{overlays}}',overlays_html) - html = html.replace('{{v}}',str(int(time.time()))) - html = html.replace('{{description}}',pages[url]['description']) - html = html.replace('{{title}}',pages[url]['name']) if url != 'pinout': url = os.path.join('pinout',url) diff --git a/pinout.py b/pinout.py new file mode 100644 index 0000000..c36c7fd --- /dev/null +++ b/pinout.py @@ -0,0 +1,57 @@ +import json +import time +import markdown + +DB_FILE = 'pi-pinout.json' +SETTINGS_FILE = 'settings.json' + +pins = None +settings = None + +def render_html(*args, **kwargs): + html = args[0] + kwargs['v'] = str(int(time.time())) + for key in kwargs: + html = html.replace('{{' + key + '}}', kwargs[key]) + return html + +def bcm_to_physical(pin): + for idx in pins: + compare_pin = pins[idx] + if 'scheme' in compare_pin: + if 'bcm' in compare_pin['scheme']: + if compare_pin['scheme']['bcm'] == int(pin): + #print("Mapping BCM{} to {}".format(pin, str(idx))) + return str(idx) + +def physical_to_bcm(pin): + pin = pins[pin] + if 'scheme' in pin: + if 'bcm' in pin['scheme']: + return str(pin['scheme']['bcm']) + return None + +def physical_to_wiringpi(pin): + pin = pins[pin] + if 'scheme' in pin: + if 'wiringpi' in pin['scheme']: + return str(pin['scheme']['wiringpi']) + return None + +def physical_to(pin, scheme='bcm'): + if scheme in ['bcm','wiringpi']: + pin = pins[pin] + if 'scheme' in pin: + if scheme in pin['scheme']: + return str(pin['scheme'][scheme]) + elif scheme == 'physical': + return pin + return None + +def load(lang='en-GB'): + global pins, settings + db = json.load(open('src/{}/{}'.format(lang,DB_FILE))) + settings = json.load(open('src/{}/{}'.format(lang,SETTINGS_FILE))) + pins = db['pins'] + + diff --git a/resources/pinout.js b/resources/pinout.js index 4840c04..fb02a19 100644 --- a/resources/pinout.js +++ b/resources/pinout.js @@ -1,23 +1,4 @@ jQuery(document).ready(function(){ - /*var History = window.History; - - var homepage = jQuery('article.page_index').index(); - var pincount = 40; - - History.Adapter.bind(window,'statechange',function(){ - var State = History.getState(); - var url = State.url.replace('http://pi.gadgetoid.com',''); - - console.log(State); - if( url == '/pinout' ) - { - jQuery('h1').click(); - } - else - { - jQuery('a[href="' + url + '"]').click(); - } - })*/ $('pre').addClass('prettyprint').addClass('linenums'); @@ -30,76 +11,10 @@ jQuery(document).ready(function(){ } }) - /*jQuery('#pages').cycle({ - timeout:0, - slideExpr:'article', - startingSlide:homepage, - speed:200, - containerResize:0 - });*/ + $.gaat({ + trackExternal: true, + trackDownload: false, + trackFTP: false + }) - /*jQuery('.legend li a').on('click',function(e){ - e.preventDefault(); - jQuery('nav#gpio li').removeClass('legend active'); - var title = jQuery(this).attr('title'); - var url = jQuery(this).attr('href'); - - jQuery('span.default').show(); - jQuery('span.alternate').hide(); - - var legend = jQuery(this).parent().attr('class'); - var page = jQuery('article.page_' + legend).index(); - var pins = []; - if( jQuery(this).parent().data('pins') ){ - pins = jQuery(this).parent().data('pins').split(','); - } - - jQuery('span.' + legend).show().parent().parent().addClass('legend').find('span.default').hide(); - - var x = pins.length; - while(x--){ - jQuery('.pin' + pins[x]).addClass('legend'); - } - jQuery('#pages').cycle(page); - - History.pushState({legend:jQuery(this).attr('class'),url:jQuery(this).attr('href')}, 'Raspberry Pi Pinout - ' + title, url) - }); - - function showPage(object){ - var url; - var page; - - jQuery('span.default').show(); - jQuery('span.alternate').hide(); - jQuery('nav#gpio li').removeClass('legend active'); - - url = object.attr('href').split('/'); - url = url[url.length-1]; - - page = jQuery('article.' + url).index(); - - jQuery('#pages').cycle(page); - - object.parent().addClass('active'); - title = 'Pin ' + object.find('span.default').text().replace(' ',': '); - History.pushState({pin:page,url:object.attr('href')}, title, object.attr('href')); - } - - jQuery('nav#gpio ul.bottom a').on('click',function(e){ - e.preventDefault();showPage(jQuery(this));}); - jQuery('nav#gpio ul.top a').on('click',function(e){ - e.preventDefault();showPage(jQuery(this));}); - - jQuery('h1').on('click',function(){ - jQuery('span.default').show(); - jQuery('span.alternate').hide(); - jQuery('nav#gpio li').removeClass('legend active'); - jQuery('#pages').cycle(homepage); - History.pushState({pin:homepage,url:'http://pi.gadgetoid.com/pinout'}, 'Raspberry Pi Pinout', '/pinout'); - }); - - url = window.location.href.replace('http://pi.gadgetoid.com/','/'); - - jQuery('a[href="' + url + '"]').click(); - */ }); diff --git a/serve.py b/serve.py index 3360ee1..816d5fb 100755 --- a/serve.py +++ b/serve.py @@ -1,10 +1,15 @@ #!/usr/bin/env python -from flask import Flask, send_from_directory +from flask import Flask, redirect, send_from_directory import sys app = Flask(__name__) lang = 'en-GB' +@app.route("/") +def redirect_to_pinout(): + return redirect('/pinout') + + @app.route("/resources/") def custom_static(filename): return send_from_directory(basedir + 'resources/', filename) diff --git a/src/en-GB/settings.json b/src/en-GB/settings.json new file mode 100644 index 0000000..74a3ac5 --- /dev/null +++ b/src/en-GB/settings.json @@ -0,0 +1,5 @@ +{ + "default_desc":"The comprehensive Raspberry Pi GPIO Pinout guide for the original Raspberry Pi, B+ and Pi 2", + "default_title":"Raspberry Pi GPIO Pinout - Pi 1, B+, Pi 2", + "title_suffix":" at Raspberry Pi GPIO Pinout" +}