summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2017-01-11 17:04:02 +1100
committerChris Johns <chrisj@rtems.org>2017-01-11 17:04:02 +1100
commit2591ca639056db4f6abe294cc7a81bb831c8f7f9 (patch)
tree30ba1d0a11d4e097fe5750e2024630bdfbea8036
parentecf82d1b3d3a825f0340fd12f0bbe49a5139c31e (diff)
downloadrtems-docs-2591ca639056db4f6abe294cc7a81bb831c8f7f9.tar.bz2
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.
-rw-r--r--common/html-coverpage/coverpage.html (renamed from common/html-coverpage/index.html)3
-rw-r--r--common/html-coverpage/coverpage.js13
-rw-r--r--common/html-coverpage/static/rtems/js/catalogue.js81
-rw-r--r--wscript27
4 files changed, 81 insertions, 43 deletions
diff --git a/common/html-coverpage/index.html b/common/html-coverpage/coverpage.html
index 301196d..dc13f88 100644
--- a/common/html-coverpage/index.html
+++ b/common/html-coverpage/coverpage.html
@@ -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 -->
diff --git a/common/html-coverpage/coverpage.js b/common/html-coverpage/coverpage.js
new file mode 100644
index 0000000..4655c29
--- /dev/null
+++ b/common/html-coverpage/coverpage.js
@@ -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));
+}
diff --git a/common/html-coverpage/static/rtems/js/catalogue.js b/common/html-coverpage/static/rtems/js/catalogue.js
index d54def2..ae32aed 100644
--- a/common/html-coverpage/static/rtems/js/catalogue.js
+++ b/common/html-coverpage/static/rtems/js/catalogue.js
@@ -29,48 +29,51 @@ function catalogueFooter() {
'</table>\n';
}
-function loadCatalogue(path) {
+function paintCatalogue(xml) {
var el_cat_title = $('#rtems-catalogue-title');
var el_cat = $('#rtems-catalogue');
+ /*
+ * Use jquery as XMLDocument is consider not stable on Firefox's web site.
+ */
+ var pdfIcon = 'static/images/Adobe_PDF_file_icon_32x32.png';
+ var htmlIcon = 'static/images/html-xxl.png';
+ var docs = $(xml).find('rtems-docs');
+ var date = $(docs).attr('date');
+ var title = $(docs).find('catalogue');
+ var table = catalogueHeader(date);
+ $(docs).find('doc').each(function() {
+ var name = $(this).find('name').text();
+ var title = $(this).find('title').text();
+ var release = $(this).find('release').text();
+ var version = $(this).find('version').text();
+ var html = $(this).find('html').text();
+ var pdf = $(this).find('pdf').text();
+ var singlehtml = $(this).find('singlehtml').text();
+ var empty = '<td></a></td>\n';
+ table += '<tr>\n';
+ if (html)
+ table += '<td><a href="' + html + '">' + title + '</a></td>\n';
+ else
+ table += empty;
+ if (pdf)
+ table += '<td><a href="' + '/' + pdf + '">' +
+ '<img src="' + pdfIcon + '" width="20" height="20"></a></td>\n';
+ else
+ table += empty;
+ if (singlehtml)
+ table += '<td><a href="' + '/' + singlehtml + '">' +
+ '<img src="' + htmlIcon + '" width="20" height="20"></a></td>\n';
+ else
+ table += empty;
+ table += '</tr>\n';
+ });
+ table += catalogueFooter();
+ el_cat_title.html('<h3>' + $(title).text() + '</h3>');
+ el_cat.html(table);
+}
+function loadCatalogue(path) {
var f = $.get(path, function(xml) {
- /*
- * Use jquery as XMLDocument is consider not stable on Firefox's web site.
- */
- var pdfIcon = 'static/images/Adobe_PDF_file_icon_32x32.png';
- var htmlIcon = 'static/images/html-xxl.png';
- var docs = $(xml).find('rtems-docs');
- var date = $(docs).attr('date');
- var title = $(docs).find('catalogue');
- var table = catalogueHeader(date);
- $(docs).find('doc').each(function() {
- var name = $(this).find('name').text();
- var title = $(this).find('title').text();
- var release = $(this).find('release').text();
- var version = $(this).find('version').text();
- var html = $(this).find('html').text();
- var pdf = $(this).find('pdf').text();
- var singlehtml = $(this).find('singlehtml').text();
- var empty = '<td></a></td>\n';
- table += '<tr>\n';
- if (html)
- table += '<td><a href="' + html + '">' + title + '</a></td>\n';
- else
- table += empty;
- if (pdf)
- table += '<td><a href="' + '/' + pdf + '">' +
- '<img src="' + pdfIcon + '" width="20" height="20"></a></td>\n';
- else
- table += empty;
- if (singlehtml)
- table += '<td><a href="' + '/' + singlehtml + '">' +
- '<img src="' + htmlIcon + '" width="20" height="20"></a></td>\n';
- else
- table += empty;
- table += '</tr>\n';
- });
- table += catalogueFooter();
- el_cat_title.html('<h3>' + $(title).text() + '</h3>');
- el_cat.html(table);
+ paintCatalogue(xml);
}, 'xml');
}
diff --git a/wscript b/wscript
index 96a8574..955e68f 100644
--- a/wscript
+++ b/wscript
@@ -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('**'),