Skip to content
This repository was archived by the owner on Sep 6, 2021. It is now read-only.

Commit c1aa04d

Browse files
author
Marcel Gerber
committed
Multiple fixes
1 parent f315f25 commit c1aa04d

File tree

4 files changed

+23
-17
lines changed

4 files changed

+23
-17
lines changed

src/extensions/default/WebPlatformDocs/InlineDocsViewer.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ <h1>{{propName}}</h1>
1010
<div class="scroller" tabIndex="0"> <!-- tabIndex needed: otherwise can't be focused on open or via click -->
1111
<dl>
1212
{{#propValues}}
13-
<dt>{{value}}</dt>
13+
<dt>{{{value}}}</dt>
1414
<dd>{{{description}}}</dd>
1515
{{/propValues}}
1616
</dl>

src/extensions/default/WebPlatformDocs/css.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

src/extensions/default/WebPlatformDocs/update-docs/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
}
1212
],
1313
"devDependencies": {
14-
"instaview": "0.6.3",
15-
"lodash.unescape": "2.4.1"
14+
"instaview": "0.6.3"
1615
},
1716
"repository": {
1817
"type": "git",

src/extensions/default/WebPlatformDocs/update-docs/update-docs.js

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,17 @@
2121
*
2222
*/
2323
/*global require*/
24+
/*jslint regexp:true */
2425

2526
(function () {
2627
"use strict";
2728

2829
var fs = require("fs"),
2930
https = require("https"),
30-
instaview = require("instaview"),
31-
unescape = require("lodash.unescape");
31+
instaview = require("instaview"); // Wikitext > HTML
3232

33-
instaview.conf.paths.articles = "https://docs.webplatform.org/wiki/";
33+
instaview.conf.paths.articles = "https://docs.webplatform.org/wiki/"; // base URL for every link
34+
instaview.conf.locale.image = "__Image__"; // disable <img> tags
3435

3536
var propertiesURL = "https://docs.webplatform.org/w/api.php?action=ask&format=json&query=%20%5B%5BPath%3A%3A~css%2Fproperties%2F*%5D%5D%7C%3FSummary%7Cprettyprint%3Dno%7Climit%3D100000", // #ask: [[Path::~css/properties/*]]|?Summary|prettyprint=no|limit=100000
3637
valuesURL = "https://docs.webplatform.org/w/api.php?action=ask&format=json&query=%5B%5BValue%20for%20property%3A%3A~css%2Fproperties%2F*%5D%5D%7C%3FProperty%20value%7C%3FProperty%20value%20description%7C%3FValue%20for%20property%7Cprettyprint%3Dno%7Climit%3D100000"; // #ask: [[Value for property::~css/properties/*]]|?Property value|?Property value description|?Value for property|prettyprint=no|limit=100000
@@ -39,6 +40,15 @@
3940
outputFile = "../css.json",
4041
propertiesResponse = "",
4142
valuesResponse = "";
43+
44+
function htmlEscape(str) {
45+
return str.replace(/<(\/?)([^>]*)>/g, function (match, slash, inner) {
46+
if (["code", "div", "tt"].indexOf(inner) === -1) { // escape all tags except <code>, <div>, <tt>
47+
return "&lt;" + slash + inner + "&gt;";
48+
}
49+
return match;
50+
});
51+
}
4252

4353
console.log("Getting properties");
4454
https.get(propertiesURL, function (res) {
@@ -53,7 +63,7 @@
5363
var data = propertiesResponse[propertyName];
5464
var propertyData = {};
5565
if (data.printouts.Summary.length) {
56-
propertyData.SUMMARY = instaview.convert(data.printouts.Summary[0]);
66+
propertyData.SUMMARY = instaview.convert(htmlEscape(data.printouts.Summary[0]));
5767
propertyData.URL = data.fullurl;
5868
propertyData.VALUES = [];
5969

@@ -67,27 +77,24 @@
6777
});
6878

6979
res.on("end", function () {
70-
function parseHTMLEntities(str) {
71-
return str.replace(/&#([0-9]{1,4});/g, function (match, numStr) {
72-
var num = parseInt(numStr, 10);
73-
return String.fromCharCode(num);
74-
});
75-
}
76-
7780
console.log("Parsing values");
7881
valuesResponse = JSON.parse(valuesResponse).query.results;
7982

8083
Object.keys(valuesResponse).forEach(function (valueIdentifier) {
8184
var data = valuesResponse[valueIdentifier].printouts;
8285
var forProperty = data["Value for property"].length && data["Value for property"][0].fulltext;
8386
var valueData = {};
87+
var description;
8488
if (data["Property value"].length && forProperty && result.hasOwnProperty(forProperty)) {
8589
valueData.DESCRIPTION = "";
8690
if (data["Property value description"].length) {
87-
valueData.DESCRIPTION = instaview.convert(data["Property value description"][0]);
91+
// Remove possible "alt=...;" (image Wikitext)
92+
description = htmlEscape(data["Property value description"][0].replace(/\|alt=([^;]*);/, "|$1"));
93+
valueData.DESCRIPTION = instaview.convert(description);
8894
}
89-
valueData.TITLE = parseHTMLEntities(unescape(data["Property value"][0]));
95+
valueData.TITLE = instaview.convert(htmlEscape(data["Property value"][0])).substr(3); // trim <p> tag
9096

97+
// FUTURE: Currently, there's no deterministic order for the value listing
9198
result[forProperty].VALUES.push(valueData);
9299
}
93100
});

0 commit comments

Comments
 (0)