diff --git a/Dockerfile b/Dockerfile index 7a2efbbc..2c216e96 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ FROM ruby:2.5.1 +ENV LANG=C.UTF-8 + WORKDIR /devdocs RUN apt-get update && \ diff --git a/assets/images/docs-2.png b/assets/images/docs-2.png index 2bd5bdbe..2af0f5b9 100644 Binary files a/assets/images/docs-2.png and b/assets/images/docs-2.png differ diff --git a/assets/images/docs-2@2x.png b/assets/images/docs-2@2x.png index ed34377a..c781b248 100644 Binary files a/assets/images/docs-2@2x.png and b/assets/images/docs-2@2x.png differ diff --git a/assets/javascripts/app/shortcuts.coffee b/assets/javascripts/app/shortcuts.coffee index 5bc24806..5755a71d 100644 --- a/assets/javascripts/app/shortcuts.coffee +++ b/assets/javascripts/app/shortcuts.coffee @@ -149,6 +149,9 @@ class app.Shortcuts when 40 @trigger 'altDown' false + when 68 + @trigger 'altD' + false when 70 @trigger 'altF', event when 71 diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index 435913f6..aff770f4 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,5 +1,8 @@ [ [ + "2018-08-12", + "New documentations: Dart and Qt" + ], [ "2018-07-29", "New documentations: Bash, Graphite and Pygame" ], [ diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index 60ed00c2..96febbc2 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -215,6 +215,11 @@ credits = [ '2010-2018 Michael Bostock', 'BSD', 'https://raw.githubusercontent.com/d3/d3/master/LICENSE' + ], [ + 'Dart', + '2012 the Dart project authors', + 'CC BY-SA', + 'https://creativecommons.org/licenses/by-sa/4.0/' ], [ 'Django', 'Django Software Foundation and individual contributors', @@ -570,6 +575,11 @@ credits = [ '2009-2017 Kristopher Michael Kowal', 'MIT', 'https://raw.githubusercontent.com/kriskowal/q/master/LICENSE' + ], [ + 'Qt', + '2012-2018 The Qt Company Ltd', + 'GFDL', + 'https://doc.qt.io/qt-5/licensing.html' ], [ 'Ramda', '2013-2016 Scott Sauyet and Michael Hurley', diff --git a/assets/javascripts/templates/pages/help_tmpl.coffee b/assets/javascripts/templates/pages/help_tmpl.coffee index 3997528d..9fb4ed48 100644 --- a/assets/javascripts/templates/pages/help_tmpl.coffee +++ b/assets/javascripts/templates/pages/help_tmpl.coffee @@ -131,6 +131,9 @@ app.templates.helpPage = ->
alt + s
alt + d
+
Tip: If the cursor is no longer in the search field, press /
or
diff --git a/assets/javascripts/vendor/prism.js b/assets/javascripts/vendor/prism.js
index 3dc04a14..09d6df87 100644
--- a/assets/javascripts/vendor/prism.js
+++ b/assets/javascripts/vendor/prism.js
@@ -1,4 +1,5 @@
-/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+bash+cpp+coffeescript+ruby+d+django+elixir+erlang+go+java+json+kotlin+lua+nginx+nim+perl+php+python+jsx+crystal+rust+scss+sql+typescript+yaml */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+c+bash+cpp+coffeescript+ruby+d+dart+django+elixir+markup-templating+erlang+go+java+json+kotlin+lua+crystal+nginx+nim+perl+php+sql+scss+python+jsx+typescript+rust+yaml */
var _self = (typeof window !== 'undefined')
? window // if in browser
: (
@@ -16,11 +17,12 @@ var _self = (typeof window !== 'undefined')
var Prism = (function(){
// Private helper vars
-var lang = /\blang(?:uage)?-(\w+)\b/i;
+var lang = /\blang(?:uage)?-([\w-]+)\b/i;
var uniqueId = 0;
var _ = _self.Prism = {
manual: _self.Prism && _self.Prism.manual,
+ disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,
util: {
encode: function (tokens) {
if (tokens instanceof Token) {
@@ -44,23 +46,38 @@ var _ = _self.Prism = {
},
// Deep clone a language definition (e.g. to extend it)
- clone: function (o) {
+ clone: function (o, visited) {
var type = _.util.type(o);
+ visited = visited || {};
switch (type) {
case 'Object':
+ if (visited[_.util.objId(o)]) {
+ return visited[_.util.objId(o)];
+ }
var clone = {};
+ visited[_.util.objId(o)] = clone;
for (var key in o) {
if (o.hasOwnProperty(key)) {
- clone[key] = _.util.clone(o[key]);
+ clone[key] = _.util.clone(o[key], visited);
}
}
return clone;
case 'Array':
- return o.map(function(v) { return _.util.clone(v); });
+ if (visited[_.util.objId(o)]) {
+ return visited[_.util.objId(o)];
+ }
+ var clone = [];
+ visited[_.util.objId(o)] = clone;
+
+ o.forEach(function (v, i) {
+ clone[i] = _.util.clone(v, visited);
+ });
+
+ return clone;
}
return o;
@@ -155,6 +172,10 @@ var _ = _self.Prism = {
plugins: {},
highlightAll: function(async, callback) {
+ _.highlightAllUnder(document, async, callback);
+ },
+
+ highlightAllUnder: function(container, async, callback) {
var env = {
callback: callback,
selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
@@ -162,7 +183,7 @@ var _ = _self.Prism = {
_.hooks.run("before-highlightall", env);
- var elements = env.elements || document.querySelectorAll(env.selector);
+ var elements = env.elements || container.querySelectorAll(env.selector);
for (var i=0, element; element = elements[i++];) {
_.highlightElement(element, async === true, env.callback);
@@ -185,11 +206,13 @@ var _ = _self.Prism = {
// Set language on the element, if not present
element.className = element.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
- // Set language on the parent, for styling
- parent = element.parentNode;
+ if (element.parentNode) {
+ // Set language on the parent, for styling
+ parent = element.parentNode;
- if (/pre/i.test(parent.nodeName)) {
- parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
+ if (/pre/i.test(parent.nodeName)) {
+ parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
+ }
}
var code = element.textContent;
@@ -251,8 +274,15 @@ var _ = _self.Prism = {
},
highlight: function (text, grammar, language) {
- var tokens = _.tokenize(text, grammar);
- return Token.stringify(_.util.encode(tokens), language);
+ var env = {
+ code: text,
+ grammar: grammar,
+ language: language
+ };
+ _.hooks.run('before-tokenize', env);
+ env.tokens = _.tokenize(env.code, env.grammar);
+ _.hooks.run('after-tokenize', env);
+ return Token.stringify(_.util.encode(env.tokens), env.language);
},
matchGrammar: function (text, strarr, grammar, index, startPos, oneshot, target) {
@@ -300,15 +330,9 @@ var _ = _self.Prism = {
continue;
}
- pattern.lastIndex = 0;
-
- var match = pattern.exec(str),
- delNum = 1;
-
- // Greedy patterns can override/remove up to two previously matched tokens
- if (!match && greedy && i != strarr.length - 1) {
+ if (greedy && i != strarr.length - 1) {
pattern.lastIndex = pos;
- match = pattern.exec(text);
+ var match = pattern.exec(text);
if (!match) {
break;
}
@@ -327,11 +351,8 @@ var _ = _self.Prism = {
}
}
- /*
- * If strarr[i] is a Token, then the match starts inside another Token, which is invalid
- * If strarr[k - 1] is greedy we are in conflict with another greedy pattern
- */
- if (strarr[i] instanceof Token || strarr[k - 1].greedy) {
+ // If strarr[i] is a Token, then the match starts inside another Token, which is invalid
+ if (strarr[i] instanceof Token) {
continue;
}
@@ -339,6 +360,11 @@ var _ = _self.Prism = {
delNum = k - i;
str = text.slice(pos, p);
match.index -= pos;
+ } else {
+ pattern.lastIndex = 0;
+
+ var match = pattern.exec(str),
+ delNum = 1;
}
if (!match) {
@@ -350,7 +376,7 @@ var _ = _self.Prism = {
}
if(lookbehind) {
- lookbehindLength = match[1].length;
+ lookbehindLength = match[1] ? match[1].length : 0;
}
var from = match.index + lookbehindLength,
@@ -480,18 +506,21 @@ Token.stringify = function(o, language, parent) {
// // in Node.js
// return _self.Prism;
// }
-// // In worker
-// _self.addEventListener('message', function(evt) {
-// var message = JSON.parse(evt.data),
-// lang = message.language,
-// code = message.code,
-// immediateClose = message.immediateClose;
-
-// _self.postMessage(_.highlight(code, _.languages[lang], lang));
-// if (immediateClose) {
-// _self.close();
-// }
-// }, false);
+
+// if (!_.disableWorkerMessageHandler) {
+// // In worker
+// _self.addEventListener('message', function (evt) {
+// var message = JSON.parse(evt.data),
+// lang = message.language,
+// code = message.code,
+// immediateClose = message.immediateClose;
+
+// _self.postMessage(_.highlight(code, _.languages[lang], lang));
+// if (immediateClose) {
+// _self.close();
+// }
+// }, false);
+// }
// return _self.Prism;
// }
@@ -535,7 +564,8 @@ Prism.languages.markup = {
'doctype': //i,
'cdata': //i,
'tag': {
- pattern: /<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,
+ pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,
+ greedy: true,
inside: {
'tag': {
pattern: /^<\/?[^\s>\/]+/i,
@@ -600,13 +630,13 @@ Prism.languages.css = {
pattern: /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
greedy: true
},
- 'property': /[\w-]+(?=\s*:)/i,
+ 'property': /[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,
'important': /\B!important\b/i,
'function': /[-a-z0-9]+(?=\()/i,
'punctuation': /[(){};:]/
};
-Prism.languages.css['atrule'].inside.rest = Prism.util.clone(Prism.languages.css);
+Prism.languages.css['atrule'].inside.rest = Prism.languages.css;
if (Prism.languages.markup) {
Prism.languages.insertBefore('markup', 'tag', {
@@ -614,10 +644,11 @@ if (Prism.languages.markup) {
pattern: /(