html: Embed the catalogue XML in JS.

The is to work around a security issue with Chrome on Windows. This
patches let the cover page load on Chrome and Edge on Windows 10.
This commit is contained in:
Chris Johns 2017-01-11 17:04:02 +11:00
parent ecf82d1b3d
commit 2591ca6390
4 changed files with 81 additions and 43 deletions

View File

@ -55,7 +55,8 @@
</div>
<!-- Load the catalogues and generate the content -->
<script type="text/javascript" src="static/rtems/js/catalogue.js"></script>
<script> loadCatalogue('catalogue.xml'); </script>
<script type="text/javascript" src="coverpage.js"></script>
<script> coverPageCatalogue(); </script>
<!-- current-bottom -->
</div>
<!-- layout-bottom -->

View File

@ -0,0 +1,13 @@
/*!
* Copyright 2017 Chris Johns <chrisj@rtems.org>
*/
/*
* Embed the XML catalogue in this JS code to get around the Chrome on Windows
* security "feature" where loading of a local disk file under the same path as
* the HTML Chrome just loaded from disk is not allowed.
*/
function coverPageCatalogue() {
xml = '@CATALOGUE';
paintCatalogue($.parseXML(xml));
}

View File

@ -29,11 +29,9 @@ function catalogueFooter() {
'</table>\n';
}
function loadCatalogue(path) {
function paintCatalogue(xml) {
var el_cat_title = $('#rtems-catalogue-title');
var el_cat = $('#rtems-catalogue');
var f = $.get(path, function(xml) {
/*
* Use jquery as XMLDocument is consider not stable on Firefox's web site.
*/
@ -72,5 +70,10 @@ function loadCatalogue(path) {
table += catalogueFooter();
el_cat_title.html('<h3>' + $(title).text() + '</h3>');
el_cat.html(table);
}
function loadCatalogue(path) {
var f = $.get(path, function(xml) {
paintCatalogue(xml);
}, 'xml');
}

27
wscript
View File

@ -9,7 +9,7 @@ path.append(abspath('common'))
import waflib
import waf as docs_waf
version = '4.11 (4.11.2)'
version = 'Master (4.11.99)'
build_all = ['user',
'rsb',
@ -36,18 +36,39 @@ def configure(conf):
def catalogue(ctx):
docs_waf.xml_catalogue(ctx, building, version)
def coverpage_js(ctx):
js = None
xml = None
for f in ctx.inputs:
if f.abspath().endswith('.js'):
with open(f.abspath()) as i:
js = i.read()
elif f.abspath().endswith('.xml'):
with open(f.abspath()) as i:
xml = i.read()
xml = xml.replace('\n', ' \\\n');
with open(ctx.outputs[0].abspath(), 'w') as o:
o.write(js.replace('@CATALOGUE', xml))
def build(ctx):
for b in building:
ctx.recurse(b)
#
# Build the catalogue and install with the coverpage and static content.
# Build the catalogue, coverpage.js and install.
#
ctx(rule = catalogue,
target = 'catalogue.xml',
source = ['wscript', 'common/waf.py'])
ctx.install_files('${PREFIX}', 'catalogue.xml')
ctx.install_files('${PREFIX}', 'common/html-coverpage/index.html')
ctx(rule = coverpage_js,
target = 'coverpage.js',
source = ['wscript', 'catalogue.xml', 'common/html-coverpage/coverpage.js'])
ctx.install_as('${PREFIX}/coverpage.js', 'coverpage.js')
#
# Install the static content.
#
ctx.install_as('${PREFIX}/index.html', 'common/html-coverpage/coverpage.html')
static_dir = ctx.path.find_dir('common/html-coverpage/static')
ctx.install_files('${PREFIX}/static',
static_dir.ant_glob('**'),