diff options
-rw-r--r-- | app/assets/javascripts/blob/notebook/index.js | 3 | ||||
-rw-r--r-- | vendor/assets/javascripts/notebooklab.js | 2358 |
2 files changed, 1029 insertions, 1332 deletions
diff --git a/app/assets/javascripts/blob/notebook/index.js b/app/assets/javascripts/blob/notebook/index.js index c910ed5b76b..6e07105471c 100644 --- a/app/assets/javascripts/blob/notebook/index.js +++ b/app/assets/javascripts/blob/notebook/index.js @@ -32,7 +32,8 @@ export default () => { </div> <notebook-lab v-if="!loading && !error" - :notebook="json" /> + :notebook="json" + code-css-class="code white" /> <p class="text-center" v-if="error"> diff --git a/vendor/assets/javascripts/notebooklab.js b/vendor/assets/javascripts/notebooklab.js index 9d2aea18c5b..e6865f51040 100644 --- a/vendor/assets/javascripts/notebooklab.js +++ b/vendor/assets/javascripts/notebooklab.js @@ -73,7 +73,7 @@ return /******/ (function(modules) { // webpackBootstrap /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 32); +/******/ return __webpack_require__(__webpack_require__.s = 30); /******/ }) /************************************************************************/ /******/ ([ @@ -136,9 +136,9 @@ module.exports = function normalizeComponent ( var Component = __webpack_require__(0)( /* script */ - __webpack_require__(10), + __webpack_require__(11), /* template */ - __webpack_require__(28), + __webpack_require__(27), /* scopeId */ null, /* cssModules */ @@ -170,9 +170,9 @@ module.exports = Component.exports var Component = __webpack_require__(0)( /* script */ - __webpack_require__(5), + __webpack_require__(6), /* template */ - __webpack_require__(30), + __webpack_require__(29), /* scopeId */ null, /* cssModules */ @@ -200,13 +200,40 @@ module.exports = Component.exports /***/ }), /* 3 */ +/***/ (function(module, exports) { + +var g;
+
+// This works in non-strict mode
+g = (function() {
+ return this;
+})();
+
+try {
+ // This works if eval is allowed (see CSP)
+ g = g || Function("return this")() || (1,eval)("this");
+} catch(e) {
+ // This works if the window reference is available
+ if(typeof window === "object")
+ g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
+ + +/***/ }), +/* 4 */ /***/ (function(module, exports, __webpack_require__) { var Component = __webpack_require__(0)( /* script */ - __webpack_require__(11), + __webpack_require__(12), /* template */ - __webpack_require__(27), + __webpack_require__(26), /* scopeId */ null, /* cssModules */ @@ -233,7 +260,7 @@ module.exports = Component.exports /***/ }), -/* 4 */ +/* 5 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -247,7 +274,7 @@ var _index = __webpack_require__(2); var _index2 = _interopRequireDefault(_index); -var _index3 = __webpack_require__(22); +var _index3 = __webpack_require__(21); var _index4 = _interopRequireDefault(_index3); @@ -266,6 +293,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de // // // +// +// exports.default = { components: { @@ -276,6 +305,11 @@ exports.default = { cell: { type: Object, required: true + }, + codeCssClass: { + type: String, + required: false, + default: '' } }, computed: { @@ -292,7 +326,7 @@ exports.default = { }; /***/ }), -/* 5 */ +/* 6 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -302,29 +336,16 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _highlight = __webpack_require__(13); +var _highlight = __webpack_require__(32); var _highlight2 = _interopRequireDefault(_highlight); -var _xml = __webpack_require__(16); - -var _xml2 = _interopRequireDefault(_xml); - -var _javascript = __webpack_require__(14); - -var _javascript2 = _interopRequireDefault(_javascript); - -var _python = __webpack_require__(15); - -var _python2 = _interopRequireDefault(_python); - var _prompt = __webpack_require__(1); var _prompt2 = _interopRequireDefault(_prompt); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -_highlight2.default.registerLanguage('xml', _xml2.default); // // // // @@ -336,9 +357,9 @@ _highlight2.default.registerLanguage('xml', _xml2.default); // // // // - -_highlight2.default.registerLanguage('javascript', _javascript2.default); -_highlight2.default.registerLanguage('python', _python2.default); +// +// +// exports.default = { components: { @@ -349,6 +370,11 @@ exports.default = { type: Number, required: false }, + codeCssClass: { + type: String, + required: false, + default: '' + }, type: { type: String, required: true @@ -369,12 +395,12 @@ exports.default = { } }, mounted: function mounted() { - _highlight2.default.highlightBlock(this.$refs.code); + _highlight2.default.highlightElement(this.$refs.code); } }; /***/ }), -/* 6 */ +/* 7 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -384,7 +410,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _marked = __webpack_require__(17); +var _marked = __webpack_require__(14); var _marked2 = _interopRequireDefault(_marked); @@ -433,7 +459,7 @@ exports.default = { }; /***/ }), -/* 7 */ +/* 8 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -468,7 +494,7 @@ exports.default = { // /***/ }), -/* 8 */ +/* 9 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -508,7 +534,7 @@ exports.default = { // /***/ }), -/* 9 */ +/* 10 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -526,16 +552,17 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol // // // +// var _index = __webpack_require__(2); var _index2 = _interopRequireDefault(_index); -var _html = __webpack_require__(20); +var _html = __webpack_require__(19); var _html2 = _interopRequireDefault(_html); -var _image = __webpack_require__(21); +var _image = __webpack_require__(20); var _image2 = _interopRequireDefault(_image); @@ -543,6 +570,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de exports.default = { props: { + codeCssClass: { + type: String, + required: false, + default: '' + }, count: { type: Number, required: false, @@ -608,7 +640,7 @@ exports.default = { }; /***/ }), -/* 10 */ +/* 11 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -640,7 +672,7 @@ exports.default = { }; /***/ }), -/* 11 */ +/* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -650,7 +682,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _cells = __webpack_require__(12); +var _cells = __webpack_require__(13); exports.default = { components: { @@ -661,6 +693,11 @@ exports.default = { notebook: { type: Object, required: true + }, + codeCssClass: { + type: String, + required: false, + default: '' } }, methods: { @@ -683,9 +720,10 @@ exports.default = { // // // +// /***/ }), -/* 12 */ +/* 13 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -695,7 +733,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _markdown = __webpack_require__(19); +var _markdown = __webpack_require__(18); Object.defineProperty(exports, 'MarkdownCell', { enumerable: true, @@ -704,7 +742,7 @@ Object.defineProperty(exports, 'MarkdownCell', { } }); -var _code = __webpack_require__(18); +var _code = __webpack_require__(17); Object.defineProperty(exports, 'CodeCell', { enumerable: true, @@ -716,1239 +754,7 @@ Object.defineProperty(exports, 'CodeCell', { function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /***/ }), -/* 13 */ -/***/ (function(module, exports, __webpack_require__) { - -/* -Syntax highlighting with language autodetection. -https://highlightjs.org/ -*/ - -(function(factory) { - - // Find the global object for export to both the browser and web workers. - var globalObject = typeof window === 'object' && window || - typeof self === 'object' && self; - - // Setup highlight.js for different environments. First is Node.js or - // CommonJS. - if(true) { - factory(exports); - } else if(globalObject) { - // Export hljs globally even when using AMD for cases when this script - // is loaded with others that may still expect a global hljs. - globalObject.hljs = factory({}); - - // Finally register the global hljs with AMD. - if(typeof define === 'function' && define.amd) { - define([], function() { - return globalObject.hljs; - }); - } - } - -}(function(hljs) { - // Convenience variables for build-in objects - var ArrayProto = [], - objectKeys = Object.keys; - - // Global internal variables used within the highlight.js library. - var languages = {}, - aliases = {}; - - // Regular expressions used throughout the highlight.js library. - var noHighlightRe = /^(no-?highlight|plain|text)$/i, - languagePrefixRe = /\blang(?:uage)?-([\w-]+)\b/i, - fixMarkupRe = /((^(<[^>]+>|\t|)+|(?:\n)))/gm; - - var spanEndTag = '</span>'; - - // Global options used when within external APIs. This is modified when - // calling the `hljs.configure` function. - var options = { - classPrefix: 'hljs-', - tabReplace: null, - useBR: false, - languages: undefined - }; - - // Object map that is used to escape some common HTML characters. - var escapeRegexMap = { - '&': '&', - '<': '<', - '>': '>' - }; - - /* Utility functions */ - - function escape(value) { - return value.replace(/[&<>]/gm, function(character) { - return escapeRegexMap[character]; - }); - } - - function tag(node) { - return node.nodeName.toLowerCase(); - } - - function testRe(re, lexeme) { - var match = re && re.exec(lexeme); - return match && match.index === 0; - } - - function isNotHighlighted(language) { - return noHighlightRe.test(language); - } - - function blockLanguage(block) { - var i, match, length, _class; - var classes = block.className + ' '; - - classes += block.parentNode ? block.parentNode.className : ''; - - // language-* takes precedence over non-prefixed class names. - match = languagePrefixRe.exec(classes); - if (match) { - return getLanguage(match[1]) ? match[1] : 'no-highlight'; - } - - classes = classes.split(/\s+/); - - for (i = 0, length = classes.length; i < length; i++) { - _class = classes[i] - - if (isNotHighlighted(_class) || getLanguage(_class)) { - return _class; - } - } - } - - function inherit(parent) { // inherit(parent, override_obj, override_obj, ...) - var key; - var result = {}; - var objects = Array.prototype.slice.call(arguments, 1); - - for (key in parent) - result[key] = parent[key]; - objects.forEach(function(obj) { - for (key in obj) - result[key] = obj[key]; - }); - return result; - } - - /* Stream merging */ - - function nodeStream(node) { - var result = []; - (function _nodeStream(node, offset) { - for (var child = node.firstChild; child; child = child.nextSibling) { - if (child.nodeType === 3) - offset += child.nodeValue.length; - else if (child.nodeType === 1) { - result.push({ - event: 'start', - offset: offset, - node: child - }); - offset = _nodeStream(child, offset); - // Prevent void elements from having an end tag that would actually - // double them in the output. There are more void elements in HTML - // but we list only those realistically expected in code display. - if (!tag(child).match(/br|hr|img|input/)) { - result.push({ - event: 'stop', - offset: offset, - node: child - }); - } - } - } - return offset; - })(node, 0); - return result; - } - - function mergeStreams(original, highlighted, value) { - var processed = 0; - var result = ''; - var nodeStack = []; - - function selectStream() { - if (!original.length || !highlighted.length) { - return original.length ? original : highlighted; - } - if (original[0].offset !== highlighted[0].offset) { - return (original[0].offset < highlighted[0].offset) ? original : highlighted; - } - - /* - To avoid starting the stream just before it should stop the order is - ensured that original always starts first and closes last: - - if (event1 == 'start' && event2 == 'start') - return original; - if (event1 == 'start' && event2 == 'stop') - return highlighted; - if (event1 == 'stop' && event2 == 'start') - return original; - if (event1 == 'stop' && event2 == 'stop') - return highlighted; - - ... which is collapsed to: - */ - return highlighted[0].event === 'start' ? original : highlighted; - } - - function open(node) { - function attr_str(a) {return ' ' + a.nodeName + '="' + escape(a.value) + '"';} - result += '<' + tag(node) + ArrayProto.map.call(node.attributes, attr_str).join('') + '>'; - } - - function close(node) { - result += '</' + tag(node) + '>'; - } - - function render(event) { - (event.event === 'start' ? open : close)(event.node); - } - - while (original.length || highlighted.length) { - var stream = selectStream(); - result += escape(value.substring(processed, stream[0].offset)); - processed = stream[0].offset; - if (stream === original) { - /* - On any opening or closing tag of the original markup we first close - the entire highlighted node stack, then render the original tag along - with all the following original tags at the same offset and then - reopen all the tags on the highlighted stack. - */ - nodeStack.reverse().forEach(close); - do { - render(stream.splice(0, 1)[0]); - stream = selectStream(); - } while (stream === original && stream.length && stream[0].offset === processed); - nodeStack.reverse().forEach(open); - } else { - if (stream[0].event === 'start') { - nodeStack.push(stream[0].node); - } else { - nodeStack.pop(); - } - render(stream.splice(0, 1)[0]); - } - } - return result + escape(value.substr(processed)); - } - - /* Initialization */ - - function expand_mode(mode) { - if (mode.variants && !mode.cached_variants) { - mode.cached_variants = mode.variants.map(function(variant) { - return inherit(mode, {variants: null}, variant); - }); - } - return mode.cached_variants || (mode.endsWithParent && [inherit(mode)]) || [mode]; - } - - function compileLanguage(language) { - - function reStr(re) { - return (re && re.source) || re; - } - - function langRe(value, global) { - return new RegExp( - reStr(value), - 'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '') - ); - } - - function compileMode(mode, parent) { - if (mode.compiled) - return; - mode.compiled = true; - - mode.keywords = mode.keywords || mode.beginKeywords; - if (mode.keywords) { - var compiled_keywords = {}; - - var flatten = function(className, str) { - if (language.case_insensitive) { - str = str.toLowerCase(); - } - str.split(' ').forEach(function(kw) { - var pair = kw.split('|'); - compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1]; - }); - }; - - if (typeof mode.keywords === 'string') { // string - flatten('keyword', mode.keywords); - } else { - objectKeys(mode.keywords).forEach(function (className) { - flatten(className, mode.keywords[className]); - }); - } - mode.keywords = compiled_keywords; - } - mode.lexemesRe = langRe(mode.lexemes || /\w+/, true); - - if (parent) { - if (mode.beginKeywords) { - mode.begin = '\\b(' + mode.beginKeywords.split(' ').join('|') + ')\\b'; - } - if (!mode.begin) - mode.begin = /\B|\b/; - mode.beginRe = langRe(mode.begin); - if (!mode.end && !mode.endsWithParent) - mode.end = /\B|\b/; - if (mode.end) - mode.endRe = langRe(mode.end); - mode.terminator_end = reStr(mode.end) || ''; - if (mode.endsWithParent && parent.terminator_end) - mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end; - } - if (mode.illegal) - mode.illegalRe = langRe(mode.illegal); - if (mode.relevance == null) - mode.relevance = 1; - if (!mode.contains) { - mode.contains = []; - } - mode.contains = Array.prototype.concat.apply([], mode.contains.map(function(c) { - return expand_mode(c === 'self' ? mode : c) - })); - mode.contains.forEach(function(c) {compileMode(c, mode);}); - - if (mode.starts) { - compileMode(mode.starts, parent); - } - - var terminators = - mode.contains.map(function(c) { - return c.beginKeywords ? '\\.?(' + c.begin + ')\\.?' : c.begin; - }) - .concat([mode.terminator_end, mode.illegal]) - .map(reStr) - .filter(Boolean); - mode.terminators = terminators.length ? langRe(terminators.join('|'), true) : {exec: function(/*s*/) {return null;}}; - } - - compileMode(language); - } - - /* - Core highlighting function. Accepts a language name, or an alias, and a - string with the code to highlight. Returns an object with the following - properties: - - - relevance (int) - - value (an HTML string with highlighting markup) - - */ - function highlight(name, value, ignore_illegals, continuation) { - - function subMode(lexeme, mode) { - var i, length; - - for (i = 0, length = mode.contains.length; i < length; i++) { - if (testRe(mode.contains[i].beginRe, lexeme)) { - return mode.contains[i]; - } - } - } - - function endOfMode(mode, lexeme) { - if (testRe(mode.endRe, lexeme)) { - while (mode.endsParent && mode.parent) { - mode = mode.parent; - } - return mode; - } - if (mode.endsWithParent) { - return endOfMode(mode.parent, lexeme); - } - } - - function isIllegal(lexeme, mode) { - return !ignore_illegals && testRe(mode.illegalRe, lexeme); - } - - function keywordMatch(mode, match) { - var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0]; - return mode.keywords.hasOwnProperty(match_str) && mode.keywords[match_str]; - } - - function buildSpan(classname, insideSpan, leaveOpen, noPrefix) { - var classPrefix = noPrefix ? '' : options.classPrefix, - openSpan = '<span class="' + classPrefix, - closeSpan = leaveOpen ? '' : spanEndTag - - openSpan += classname + '">'; - - return openSpan + insideSpan + closeSpan; - } - - function processKeywords() { - var keyword_match, last_index, match, result; - - if (!top.keywords) - return escape(mode_buffer); - - result = ''; - last_index = 0; - top.lexemesRe.lastIndex = 0; - match = top.lexemesRe.exec(mode_buffer); - - while (match) { - result += escape(mode_buffer.substring(last_index, match.index)); - keyword_match = keywordMatch(top, match); - if (keyword_match) { - relevance += keyword_match[1]; - result += buildSpan(keyword_match[0], escape(match[0])); - } else { - result += escape(match[0]); - } - last_index = top.lexemesRe.lastIndex; - match = top.lexemesRe.exec(mode_buffer); - } - return result + escape(mode_buffer.substr(last_index)); - } - - function processSubLanguage() { - var explicit = typeof top.subLanguage === 'string'; - if (explicit && !languages[top.subLanguage]) { - return escape(mode_buffer); - } - - var result = explicit ? - highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) : - highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined); - - // Counting embedded language score towards the host language may be disabled - // with zeroing the containing mode relevance. Usecase in point is Markdown that - // allows XML everywhere and makes every XML snippet to have a much larger Markdown - // score. - if (top.relevance > 0) { - relevance += result.relevance; - } - if (explicit) { - continuations[top.subLanguage] = result.top; - } - return buildSpan(result.language, result.value, false, true); - } - - function processBuffer() { - result += (top.subLanguage != null ? processSubLanguage() : processKeywords()); - mode_buffer = ''; - } - - function startNewMode(mode) { - result += mode.className? buildSpan(mode.className, '', true): ''; - top = Object.create(mode, {parent: {value: top}}); - } - - function processLexeme(buffer, lexeme) { - - mode_buffer += buffer; - - if (lexeme == null) { - processBuffer(); - return 0; - } - - var new_mode = subMode(lexeme, top); - if (new_mode) { - if (new_mode.skip) { - mode_buffer += lexeme; - } else { - if (new_mode.excludeBegin) { - mode_buffer += lexeme; - } - processBuffer(); - if (!new_mode.returnBegin && !new_mode.excludeBegin) { - mode_buffer = lexeme; - } - } - startNewMode(new_mode, lexeme); - return new_mode.returnBegin ? 0 : lexeme.length; - } - - var end_mode = endOfMode(top, lexeme); - if (end_mode) { - var origin = top; - if (origin.skip) { - mode_buffer += lexeme; - } else { - if (!(origin.returnEnd || origin.excludeEnd)) { - mode_buffer += lexeme; - } - processBuffer(); - if (origin.excludeEnd) { - mode_buffer = lexeme; - } - } - do { - if (top.className) { - result += spanEndTag; - } - if (!top.skip) { - relevance += top.relevance; - } - top = top.parent; - } while (top !== end_mode.parent); - if (end_mode.starts) { - startNewMode(end_mode.starts, ''); - } - return origin.returnEnd ? 0 : lexeme.length; - } - - if (isIllegal(lexeme, top)) - throw new Error('Illegal lexeme "' + lexeme + '" for mode "' + (top.className || '<unnamed>') + '"'); - - /* - Parser should not reach this point as all types of lexemes should be caught - earlier, but if it does due to some bug make sure it advances at least one - character forward to prevent infinite looping. - */ - mode_buffer += lexeme; - return lexeme.length || 1; - } - - var language = getLanguage(name); - if (!language) { - throw new Error('Unknown language: "' + name + '"'); - } - - compileLanguage(language); - var top = continuation || language; - var continuations = {}; // keep continuations for sub-languages - var result = '', current; - for(current = top; current !== language; current = current.parent) { - if (current.className) { - result = buildSpan(current.className, '', true) + result; - } - } - var mode_buffer = ''; - var relevance = 0; - try { - var match, count, index = 0; - while (true) { - top.terminators.lastIndex = index; - match = top.terminators.exec(value); - if (!match) - break; - count = processLexeme(value.substring(index, match.index), match[0]); - index = match.index + count; - } - processLexeme(value.substr(index)); - for(current = top; current.parent; current = current.parent) { // close dangling modes - if (current.className) { - result += spanEndTag; - } - } - return { - relevance: relevance, - value: result, - language: name, - top: top - }; - } catch (e) { - if (e.message && e.message.indexOf('Illegal') !== -1) { - return { - relevance: 0, - value: escape(value) - }; - } else { - throw e; - } - } - } - - /* - Highlighting with language detection. Accepts a string with the code to - highlight. Returns an object with the following properties: - - - language (detected language) - - relevance (int) - - value (an HTML string with highlighting markup) - - second_best (object with the same structure for second-best heuristically - detected language, may be absent) - - */ - function highlightAuto(text, languageSubset) { - languageSubset = languageSubset || options.languages || objectKeys(languages); - var result = { - relevance: 0, - value: escape(text) - }; - var second_best = result; - languageSubset.filter(getLanguage).forEach(function(name) { - var current = highlight(name, text, false); - current.language = name; - if (current.relevance > second_best.relevance) { - second_best = current; - } - if (current.relevance > result.relevance) { - second_best = result; - result = current; - } - }); - if (second_best.language) { - result.second_best = second_best; - } - return result; - } - - /* - Post-processing of the highlighted markup: - - - replace TABs with something more useful - - replace real line-breaks with '<br>' for non-pre containers - - */ - function fixMarkup(value) { - return !(options.tabReplace || options.useBR) - ? value - : value.replace(fixMarkupRe, function(match, p1) { - if (options.useBR && match === '\n') { - return '<br>'; - } else if (options.tabReplace) { - return p1.replace(/\t/g, options.tabReplace); - } - return ''; - }); - } - - function buildClassName(prevClassName, currentLang, resultLang) { - var language = currentLang ? aliases[currentLang] : resultLang, - result = [prevClassName.trim()]; - - if (!prevClassName.match(/\bhljs\b/)) { - result.push('hljs'); - } - - if (prevClassName.indexOf(language) === -1) { - result.push(language); - } - - return result.join(' ').trim(); - } - - /* - Applies highlighting to a DOM node containing code. Accepts a DOM node and - two optional parameters for fixMarkup. - */ - function highlightBlock(block) { - var node, originalStream, result, resultNode, text; - var language = blockLanguage(block); - - if (isNotHighlighted(language)) - return; - - if (options.useBR) { - node = document.createElementNS('http://www.w3.org/1999/xhtml', 'div'); - node.innerHTML = block.innerHTML.replace(/\n/g, '').replace(/<br[ \/]*>/g, '\n'); - } else { - node = block; - } - text = node.textContent; - result = language ? highlight(language, text, true) : highlightAuto(text); - - originalStream = nodeStream(node); - if (originalStream.length) { - resultNode = document.createElementNS('http://www.w3.org/1999/xhtml', 'div'); - resultNode.innerHTML = result.value; - result.value = mergeStreams(originalStream, nodeStream(resultNode), text); - } - result.value = fixMarkup(result.value); - - block.innerHTML = result.value; - block.className = buildClassName(block.className, language, result.language); - block.result = { - language: result.language, - re: result.relevance - }; - if (result.second_best) { - block.second_best = { - language: result.second_best.language, - re: result.second_best.relevance - }; - } - } - - /* - Updates highlight.js global options with values passed in the form of an object. - */ - function configure(user_options) { - options = inherit(options, user_options); - } - - /* - Applies highlighting to all <pre><code>..</code></pre> blocks on a page. - */ - function initHighlighting() { - if (initHighlighting.called) - return; - initHighlighting.called = true; - - var blocks = document.querySelectorAll('pre code'); - ArrayProto.forEach.call(blocks, highlightBlock); - } - - /* - Attaches highlighting to the page load event. - */ - function initHighlightingOnLoad() { - addEventListener('DOMContentLoaded', initHighlighting, false); - addEventListener('load', initHighlighting, false); - } - - function registerLanguage(name, language) { - var lang = languages[name] = language(hljs); - if (lang.aliases) { - lang.aliases.forEach(function(alias) {aliases[alias] = name;}); - } - } - - function listLanguages() { - return objectKeys(languages); - } - - function getLanguage(name) { - name = (name || '').toLowerCase(); - return languages[name] || languages[aliases[name]]; - } - - /* Interface definition */ - - hljs.highlight = highlight; - hljs.highlightAuto = highlightAuto; - hljs.fixMarkup = fixMarkup; - hljs.highlightBlock = highlightBlock; - hljs.configure = configure; - hljs.initHighlighting = initHighlighting; - hljs.initHighlightingOnLoad = initHighlightingOnLoad; - hljs.registerLanguage = registerLanguage; - hljs.listLanguages = listLanguages; - hljs.getLanguage = getLanguage; - hljs.inherit = inherit; - - // Common regexps - hljs.IDENT_RE = '[a-zA-Z]\\w*'; - hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\w*'; - hljs.NUMBER_RE = '\\b\\d+(\\.\\d+)?'; - hljs.C_NUMBER_RE = '(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)'; // 0x..., 0..., decimal, float - hljs.BINARY_NUMBER_RE = '\\b(0b[01]+)'; // 0b... - hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~'; - - // Common modes - hljs.BACKSLASH_ESCAPE = { - begin: '\\\\[\\s\\S]', relevance: 0 - }; - hljs.APOS_STRING_MODE = { - className: 'string', - begin: '\'', end: '\'', - illegal: '\\n', - contains: [hljs.BACKSLASH_ESCAPE] - }; - hljs.QUOTE_STRING_MODE = { - className: 'string', - begin: '"', end: '"', - illegal: '\\n', - contains: [hljs.BACKSLASH_ESCAPE] - }; - hljs.PHRASAL_WORDS_MODE = { - begin: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/ - }; - hljs.COMMENT = function (begin, end, inherits) { - var mode = hljs.inherit( - { - className: 'comment', - begin: begin, end: end, - contains: [] - }, - inherits || {} - ); - mode.contains.push(hljs.PHRASAL_WORDS_MODE); - mode.contains.push({ - className: 'doctag', - begin: '(?:TODO|FIXME|NOTE|BUG|XXX):', - relevance: 0 - }); - return mode; - }; - hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$'); - hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\*', '\\*/'); - hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$'); - hljs.NUMBER_MODE = { - className: 'number', - begin: hljs.NUMBER_RE, - relevance: 0 - }; - hljs.C_NUMBER_MODE = { - className: 'number', - begin: hljs.C_NUMBER_RE, - relevance: 0 - }; - hljs.BINARY_NUMBER_MODE = { - className: 'number', - begin: hljs.BINARY_NUMBER_RE, - relevance: 0 - }; - hljs.CSS_NUMBER_MODE = { - className: 'number', - begin: hljs.NUMBER_RE + '(' + - '%|em|ex|ch|rem' + - '|vw|vh|vmin|vmax' + - '|cm|mm|in|pt|pc|px' + - '|deg|grad|rad|turn' + - '|s|ms' + - '|Hz|kHz' + - '|dpi|dpcm|dppx' + - ')?', - relevance: 0 - }; - hljs.REGEXP_MODE = { - className: 'regexp', - begin: /\//, end: /\/[gimuy]*/, - illegal: /\n/, - contains: [ - hljs.BACKSLASH_ESCAPE, - { - begin: /\[/, end: /\]/, - relevance: 0, - contains: [hljs.BACKSLASH_ESCAPE] - } - ] - }; - hljs.TITLE_MODE = { - className: 'title', - begin: hljs.IDENT_RE, - relevance: 0 - }; - hljs.UNDERSCORE_TITLE_MODE = { - className: 'title', - begin: hljs.UNDERSCORE_IDENT_RE, - relevance: 0 - }; - hljs.METHOD_GUARD = { - // excludes method names from keyword processing - begin: '\\.\\s*' + hljs.UNDERSCORE_IDENT_RE, - relevance: 0 - }; - - return hljs; -})); - - -/***/ }), /* 14 */ -/***/ (function(module, exports) { - -module.exports = function(hljs) { - var IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*'; - var KEYWORDS = { - keyword: - 'in of if for while finally var new function do return void else break catch ' + - 'instanceof with throw case default try this switch continue typeof delete ' + - 'let yield const export super debugger as async await static ' + - // ECMAScript 6 modules import - 'import from as' - , - literal: - 'true false null undefined NaN Infinity', - built_in: - 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' + - 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' + - 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' + - 'TypeError URIError Number Math Date String RegExp Array Float32Array ' + - 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' + - 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' + - 'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' + - 'Promise' - }; - var EXPRESSIONS; - var NUMBER = { - className: 'number', - variants: [ - { begin: '\\b(0[bB][01]+)' }, - { begin: '\\b(0[oO][0-7]+)' }, - { begin: hljs.C_NUMBER_RE } - ], - relevance: 0 - }; - var SUBST = { - className: 'subst', - begin: '\\$\\{', end: '\\}', - keywords: KEYWORDS, - contains: [] // defined later - }; - var TEMPLATE_STRING = { - className: 'string', - begin: '`', end: '`', - contains: [ - hljs.BACKSLASH_ESCAPE, - SUBST - ] - }; - SUBST.contains = [ - hljs.APOS_STRING_MODE, - hljs.QUOTE_STRING_MODE, - TEMPLATE_STRING, - NUMBER, - hljs.REGEXP_MODE - ] - var PARAMS_CONTAINS = SUBST.contains.concat([ - hljs.C_BLOCK_COMMENT_MODE, - hljs.C_LINE_COMMENT_MODE - ]); - - return { - aliases: ['js', 'jsx'], - keywords: KEYWORDS, - contains: [ - { - className: 'meta', - relevance: 10, - begin: /^\s*['"]use (strict|asm)['"]/ - }, - { - className: 'meta', - begin: /^#!/, end: /$/ - }, - hljs.APOS_STRING_MODE, - hljs.QUOTE_STRING_MODE, - TEMPLATE_STRING, - hljs.C_LINE_COMMENT_MODE, - hljs.C_BLOCK_COMMENT_MODE, - NUMBER, - { // object attr container - begin: /[{,]\s*/, relevance: 0, - contains: [ - { - begin: IDENT_RE + '\\s*:', returnBegin: true, - relevance: 0, - contains: [{className: 'attr', begin: IDENT_RE, relevance: 0}] - } - ] - }, - { // "value" container - begin: '(' + hljs.RE_STARTERS_RE + '|\\b(case|return|throw)\\b)\\s*', - keywords: 'return throw case', - contains: [ - hljs.C_LINE_COMMENT_MODE, - hljs.C_BLOCK_COMMENT_MODE, - hljs.REGEXP_MODE, - { - className: 'function', - begin: '(\\(.*?\\)|' + IDENT_RE + ')\\s*=>', returnBegin: true, - end: '\\s*=>', - contains: [ - { - className: 'params', - variants: [ - { - begin: IDENT_RE - }, - { - begin: /\(\s*\)/, - }, - { - begin: /\(/, end: /\)/, - excludeBegin: true, excludeEnd: true, - keywords: KEYWORDS, - contains: PARAMS_CONTAINS - } - ] - } - ] - }, - { // E4X / JSX - begin: /</, end: /(\/\w+|\w+\/)>/, - subLanguage: 'xml', - contains: [ - {begin: /<\w+\s*\/>/, skip: true}, - { - begin: /<\w+/, end: /(\/\w+|\w+\/)>/, skip: true, - contains: [ - {begin: /<\w+\s*\/>/, skip: true}, - 'self' - ] - } - ] - } - ], - relevance: 0 - }, - { - className: 'function', - beginKeywords: 'function', end: /\{/, excludeEnd: true, - contains: [ - hljs.inherit(hljs.TITLE_MODE, {begin: IDENT_RE}), - { - className: 'params', - begin: /\(/, end: /\)/, - excludeBegin: true, - excludeEnd: true, - contains: PARAMS_CONTAINS - } - ], - illegal: /\[|%/ - }, - { - begin: /\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something` - }, - hljs.METHOD_GUARD, - { // ES6 class - className: 'class', - beginKeywords: 'class', end: /[{;=]/, excludeEnd: true, - illegal: /[:"\[\]]/, - contains: [ - {beginKeywords: 'extends'}, - hljs.UNDERSCORE_TITLE_MODE - ] - }, - { - beginKeywords: 'constructor', end: /\{/, excludeEnd: true - } - ], - illegal: /#(?!!)/ - }; -}; - -/***/ }), -/* 15 */ -/***/ (function(module, exports) { - -module.exports = function(hljs) { - var KEYWORDS = { - keyword: - 'and elif is global as in if from raise for except finally print import pass return ' + - 'exec else break not with class assert yield try while continue del or def lambda ' + - 'async await nonlocal|10 None True False', - built_in: - 'Ellipsis NotImplemented' - }; - var PROMPT = { - className: 'meta', begin: /^(>>>|\.\.\.) / - }; - var SUBST = { - className: 'subst', - begin: /\{/, end: /\}/, - keywords: KEYWORDS, - illegal: /#/ - }; - var STRING = { - className: 'string', - contains: [hljs.BACKSLASH_ESCAPE], - variants: [ - { - begin: /(u|b)?r?'''/, end: /'''/, - contains: [PROMPT], - relevance: 10 - }, - { - begin: /(u|b)?r?"""/, end: /"""/, - contains: [PROMPT], - relevance: 10 - }, - { - begin: /(fr|rf|f)'''/, end: /'''/, - contains: [PROMPT, SUBST] - }, - { - begin: /(fr|rf|f)"""/, end: /"""/, - contains: [PROMPT, SUBST] - }, - { - begin: /(u|r|ur)'/, end: /'/, - relevance: 10 - }, - { - begin: /(u|r|ur)"/, end: /"/, - relevance: 10 - }, - { - begin: /(b|br)'/, end: /'/ - }, - { - begin: /(b|br)"/, end: /"/ - }, - { - begin: /(fr|rf|f)'/, end: /'/, - contains: [SUBST] - }, - { - begin: /(fr|rf|f)"/, end: /"/, - contains: [SUBST] - }, - hljs.APOS_STRING_MODE, - hljs.QUOTE_STRING_MODE - ] - }; - var NUMBER = { - className: 'number', relevance: 0, - variants: [ - {begin: hljs.BINARY_NUMBER_RE + '[lLjJ]?'}, - {begin: '\\b(0o[0-7]+)[lLjJ]?'}, - {begin: hljs.C_NUMBER_RE + '[lLjJ]?'} - ] - }; - var PARAMS = { - className: 'params', - begin: /\(/, end: /\)/, - contains: ['self', PROMPT, NUMBER, STRING] - }; - SUBST.contains = [STRING, NUMBER, PROMPT]; - return { - aliases: ['py', 'gyp'], - keywords: KEYWORDS, - illegal: /(<\/|->|\?)|=>/, - contains: [ - PROMPT, - NUMBER, - STRING, - hljs.HASH_COMMENT_MODE, - { - variants: [ - {className: 'function', beginKeywords: 'def'}, - {className: 'class', beginKeywords: 'class'} - ], - end: /:/, - illegal: /[${=;\n,]/, - contains: [ - hljs.UNDERSCORE_TITLE_MODE, - PARAMS, - { - begin: /->/, endsWithParent: true, - keywords: 'None' - } - ] - }, - { - className: 'meta', - begin: /^[\t ]*@/, end: /$/ - }, - { - begin: /\b(print|exec)\(/ // don’t highlight keywords-turned-functions in Python 3 - } - ] - }; -}; - -/***/ }), -/* 16 */ -/***/ (function(module, exports) { - -module.exports = function(hljs) { - var XML_IDENT_RE = '[A-Za-z0-9\\._:-]+'; - var TAG_INTERNALS = { - endsWithParent: true, - illegal: /</, - relevance: 0, - contains: [ - { - className: 'attr', - begin: XML_IDENT_RE, - relevance: 0 - }, - { - begin: /=\s*/, - relevance: 0, - contains: [ - { - className: 'string', - endsParent: true, - variants: [ - {begin: /"/, end: /"/}, - {begin: /'/, end: /'/}, - {begin: /[^\s"'=<>`]+/} - ] - } - ] - } - ] - }; - return { - aliases: ['html', 'xhtml', 'rss', 'atom', 'xjb', 'xsd', 'xsl', 'plist'], - case_insensitive: true, - contains: [ - { - className: 'meta', - begin: '<!DOCTYPE', end: '>', - relevance: 10, - contains: [{begin: '\\[', end: '\\]'}] - }, - hljs.COMMENT( - '<!--', - '-->', - { - relevance: 10 - } - ), - { - begin: '<\\!\\[CDATA\\[', end: '\\]\\]>', - relevance: 10 - }, - { - begin: /<\?(php)?/, end: /\?>/, - subLanguage: 'php', - contains: [{begin: '/\\*', end: '\\*/', skip: true}] - }, - { - className: 'tag', - /* - The lookahead pattern (?=...) ensures that 'begin' only matches - '<style' as a single word, followed by a whitespace or an - ending braket. The '$' is needed for the lexeme to be recognized - by hljs.subMode() that tests lexemes outside the stream. - */ - begin: '<style(?=\\s|>|$)', end: '>', - keywords: {name: 'style'}, - contains: [TAG_INTERNALS], - starts: { - end: '</style>', returnEnd: true, - subLanguage: ['css', 'xml'] - } - }, - { - className: 'tag', - // See the comment in the <style tag about the lookahead pattern - begin: '<script(?=\\s|>|$)', end: '>', - keywords: {name: 'script'}, - contains: [TAG_INTERNALS], - starts: { - end: '\<\/script\>', returnEnd: true, - subLanguage: ['actionscript', 'javascript', 'handlebars', 'xml'] - } - }, - { - className: 'meta', - variants: [ - {begin: /<\?xml/, end: /\?>/, relevance: 10}, - {begin: /<\?\w+/, end: /\?>/} - ] - }, - { - className: 'tag', - begin: '</?', end: '/?>', - contains: [ - { - className: 'name', begin: /[^\/><\s]+/, relevance: 0 - }, - TAG_INTERNALS - ] - } - ] - }; -}; - -/***/ }), -/* 17 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/** @@ -3047,7 +1853,7 @@ function escape(html, encode) { } function unescape(html) { - // explicitly match decimal, hex, and named HTML entities + // explicitly match decimal, hex, and named HTML entities return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/g, function(_, n) { n = n.toLowerCase(); if (n === 'colon') return ':'; @@ -3238,17 +2044,852 @@ if (true) { return this || (typeof window !== 'undefined' ? window : global); }()); -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(31))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) /***/ }), -/* 18 */ +/* 15 */ +/***/ (function(module, exports) { + +Prism.languages.python= { + 'triple-quoted-string': { + pattern: /"""[\s\S]+?"""|'''[\s\S]+?'''/, + alias: 'string' + }, + 'comment': { + pattern: /(^|[^\\])#.*/, + lookbehind: true + }, + 'string': { + pattern: /("|')(?:\\\\|\\?[^\\\r\n])*?\1/, + greedy: true + }, + 'function' : { + pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g, + lookbehind: true + }, + 'class-name': { + pattern: /(\bclass\s+)[a-z0-9_]+/i, + lookbehind: true + }, + 'keyword' : /\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/, + 'boolean' : /\b(?:True|False)\b/, + 'number' : /\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i, + 'operator' : /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/, + 'punctuation' : /[{}[\];(),.:]/ +}; + + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) { +/* ********************************************** + Begin prism-core.js +********************************************** */ + +var _self = (typeof window !== 'undefined') + ? window // if in browser + : ( + (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) + ? self // if in worker + : {} // if in node js + ); + +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * MIT license http://www.opensource.org/licenses/mit-license.php/ + * @author Lea Verou http://lea.verou.me + */ + +var Prism = (function(){ + +// Private helper vars +var lang = /\blang(?:uage)?-(\w+)\b/i; +var uniqueId = 0; + +var _ = _self.Prism = { + util: { + encode: function (tokens) { + if (tokens instanceof Token) { + return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias); + } else if (_.util.type(tokens) === 'Array') { + return tokens.map(_.util.encode); + } else { + return tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\u00a0/g, ' '); + } + }, + + type: function (o) { + return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1]; + }, + + objId: function (obj) { + if (!obj['__id']) { + Object.defineProperty(obj, '__id', { value: ++uniqueId }); + } + return obj['__id']; + }, + + // Deep clone a language definition (e.g. to extend it) + clone: function (o) { + var type = _.util.type(o); + + switch (type) { + case 'Object': + var clone = {}; + + for (var key in o) { + if (o.hasOwnProperty(key)) { + clone[key] = _.util.clone(o[key]); + } + } + + return clone; + + case 'Array': + // Check for existence for IE8 + return o.map && o.map(function(v) { return _.util.clone(v); }); + } + + return o; + } + }, + + languages: { + extend: function (id, redef) { + var lang = _.util.clone(_.languages[id]); + + for (var key in redef) { + lang[key] = redef[key]; + } + + return lang; + }, + + /** + * Insert a token before another token in a language literal + * As this needs to recreate the object (we cannot actually insert before keys in object literals), + * we cannot just provide an object, we need anobject and a key. + * @param inside The key (or language id) of the parent + * @param before The key to insert before. If not provided, the function appends instead. + * @param insert Object with the key/value pairs to insert + * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted. + */ + insertBefore: function (inside, before, insert, root) { + root = root || _.languages; + var grammar = root[inside]; + + if (arguments.length == 2) { + insert = arguments[1]; + + for (var newToken in insert) { + if (insert.hasOwnProperty(newToken)) { + grammar[newToken] = insert[newToken]; + } + } + + return grammar; + } + + var ret = {}; + + for (var token in grammar) { + + if (grammar.hasOwnProperty(token)) { + + if (token == before) { + + for (var newToken in insert) { + + if (insert.hasOwnProperty(newToken)) { + ret[newToken] = insert[newToken]; + } + } + } + + ret[token] = grammar[token]; + } + } + + // Update references in other language definitions + _.languages.DFS(_.languages, function(key, value) { + if (value === root[inside] && key != inside) { + this[key] = ret; + } + }); + + return root[inside] = ret; + }, + + // Traverse a language definition with Depth First Search + DFS: function(o, callback, type, visited) { + visited = visited || {}; + for (var i in o) { + if (o.hasOwnProperty(i)) { + callback.call(o, i, o[i], type || i); + + if (_.util.type(o[i]) === 'Object' && !visited[_.util.objId(o[i])]) { + visited[_.util.objId(o[i])] = true; + _.languages.DFS(o[i], callback, null, visited); + } + else if (_.util.type(o[i]) === 'Array' && !visited[_.util.objId(o[i])]) { + visited[_.util.objId(o[i])] = true; + _.languages.DFS(o[i], callback, i, visited); + } + } + } + } + }, + plugins: {}, + + highlightAll: function(async, callback) { + var env = { + callback: callback, + selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code' + }; + + _.hooks.run("before-highlightall", env); + + var elements = env.elements || document.querySelectorAll(env.selector); + + for (var i=0, element; element = elements[i++];) { + _.highlightElement(element, async === true, env.callback); + } + }, + + highlightElement: function(element, async, callback) { + // Find language + var language, grammar, parent = element; + + while (parent && !lang.test(parent.className)) { + parent = parent.parentNode; + } + + if (parent) { + language = (parent.className.match(lang) || [,''])[1].toLowerCase(); + grammar = _.languages[language]; + } + + // 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 (/pre/i.test(parent.nodeName)) { + parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language; + } + + var code = element.textContent; + + var env = { + element: element, + language: language, + grammar: grammar, + code: code + }; + + _.hooks.run('before-sanity-check', env); + + if (!env.code || !env.grammar) { + if (env.code) { + env.element.textContent = env.code; + } + _.hooks.run('complete', env); + return; + } + + _.hooks.run('before-highlight', env); + + if (async && _self.Worker) { + var worker = new Worker(_.filename); + + worker.onmessage = function(evt) { + env.highlightedCode = evt.data; + + _.hooks.run('before-insert', env); + + env.element.innerHTML = env.highlightedCode; + + callback && callback.call(env.element); + _.hooks.run('after-highlight', env); + _.hooks.run('complete', env); + }; + + worker.postMessage(JSON.stringify({ + language: env.language, + code: env.code, + immediateClose: true + })); + } + else { + env.highlightedCode = _.highlight(env.code, env.grammar, env.language); + + _.hooks.run('before-insert', env); + + env.element.innerHTML = env.highlightedCode; + + callback && callback.call(element); + + _.hooks.run('after-highlight', env); + _.hooks.run('complete', env); + } + }, + + highlight: function (text, grammar, language) { + var tokens = _.tokenize(text, grammar); + return Token.stringify(_.util.encode(tokens), language); + }, + + tokenize: function(text, grammar, language) { + var Token = _.Token; + + var strarr = [text]; + + var rest = grammar.rest; + + if (rest) { + for (var token in rest) { + grammar[token] = rest[token]; + } + + delete grammar.rest; + } + + tokenloop: for (var token in grammar) { + if(!grammar.hasOwnProperty(token) || !grammar[token]) { + continue; + } + + var patterns = grammar[token]; + patterns = (_.util.type(patterns) === "Array") ? patterns : [patterns]; + + for (var j = 0; j < patterns.length; ++j) { + var pattern = patterns[j], + inside = pattern.inside, + lookbehind = !!pattern.lookbehind, + greedy = !!pattern.greedy, + lookbehindLength = 0, + alias = pattern.alias; + + if (greedy && !pattern.pattern.global) { + // Without the global flag, lastIndex won't work + var flags = pattern.pattern.toString().match(/[imuy]*$/)[0]; + pattern.pattern = RegExp(pattern.pattern.source, flags + "g"); + } + + pattern = pattern.pattern || pattern; + + // Don’t cache length as it changes during the loop + for (var i=0, pos = 0; i<strarr.length; pos += strarr[i].length, ++i) { + + var str = strarr[i]; + + if (strarr.length > text.length) { + // Something went terribly wrong, ABORT, ABORT! + break tokenloop; + } + + if (str instanceof Token) { + 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) { + pattern.lastIndex = pos; + match = pattern.exec(text); + if (!match) { + break; + } + + var from = match.index + (lookbehind ? match[1].length : 0), + to = match.index + match[0].length, + k = i, + p = pos; + + for (var len = strarr.length; k < len && p < to; ++k) { + p += strarr[k].length; + // Move the index i to the element in strarr that is closest to from + if (from >= p) { + ++i; + pos = p; + } + } + + /* + * 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) { + continue; + } + + // Number of tokens to delete and replace with the new match + delNum = k - i; + str = text.slice(pos, p); + match.index -= pos; + } + + if (!match) { + continue; + } + + if(lookbehind) { + lookbehindLength = match[1].length; + } + + var from = match.index + lookbehindLength, + match = match[0].slice(lookbehindLength), + to = from + match.length, + before = str.slice(0, from), + after = str.slice(to); + + var args = [i, delNum]; + + if (before) { + args.push(before); + } + + var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy); + + args.push(wrapped); + + if (after) { + args.push(after); + } + + Array.prototype.splice.apply(strarr, args); + } + } + } + + return strarr; + }, + + hooks: { + all: {}, + + add: function (name, callback) { + var hooks = _.hooks.all; + + hooks[name] = hooks[name] || []; + + hooks[name].push(callback); + }, + + run: function (name, env) { + var callbacks = _.hooks.all[name]; + + if (!callbacks || !callbacks.length) { + return; + } + + for (var i=0, callback; callback = callbacks[i++];) { + callback(env); + } + } + } +}; + +var Token = _.Token = function(type, content, alias, matchedStr, greedy) { + this.type = type; + this.content = content; + this.alias = alias; + // Copy of the full string this token was created from + this.length = (matchedStr || "").length|0; + this.greedy = !!greedy; +}; + +Token.stringify = function(o, language, parent) { + if (typeof o == 'string') { + return o; + } + + if (_.util.type(o) === 'Array') { + return o.map(function(element) { + return Token.stringify(element, language, o); + }).join(''); + } + + var env = { + type: o.type, + content: Token.stringify(o.content, language, parent), + tag: 'span', + classes: ['token', o.type], + attributes: {}, + language: language, + parent: parent + }; + + if (env.type == 'comment') { + env.attributes['spellcheck'] = 'true'; + } + + if (o.alias) { + var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias]; + Array.prototype.push.apply(env.classes, aliases); + } + + _.hooks.run('wrap', env); + + var attributes = Object.keys(env.attributes).map(function(name) { + return name + '="' + (env.attributes[name] || '').replace(/"/g, '"') + '"'; + }).join(' '); + + return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + (attributes ? ' ' + attributes : '') + '>' + env.content + '</' + env.tag + '>'; + +}; + +if (!_self.document) { + if (!_self.addEventListener) { + // 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); + + return _self.Prism; +} + +//Get current script and highlight +var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop(); + +if (script) { + _.filename = script.src; + + if (document.addEventListener && !script.hasAttribute('data-manual')) { + if(document.readyState !== "loading") { + if (window.requestAnimationFrame) { + window.requestAnimationFrame(_.highlightAll); + } else { + window.setTimeout(_.highlightAll, 16); + } + } + else { + document.addEventListener('DOMContentLoaded', _.highlightAll); + } + } +} + +return _self.Prism; + +})(); + +if (typeof module !== 'undefined' && module.exports) { + module.exports = Prism; +} + +// hack for components to work correctly in node.js +if (typeof global !== 'undefined') { + global.Prism = Prism; +} + + +/* ********************************************** + Begin prism-markup.js +********************************************** */ + +Prism.languages.markup = { + 'comment': /<!--[\w\W]*?-->/, + 'prolog': /<\?[\w\W]+?\?>/, + 'doctype': /<!DOCTYPE[\w\W]+?>/i, + 'cdata': /<!\[CDATA\[[\w\W]*?]]>/i, + 'tag': { + pattern: /<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i, + inside: { + 'tag': { + pattern: /^<\/?[^\s>\/]+/i, + inside: { + 'punctuation': /^<\/?/, + 'namespace': /^[^\s>\/:]+:/ + } + }, + 'attr-value': { + pattern: /=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i, + inside: { + 'punctuation': /[=>"']/ + } + }, + 'punctuation': /\/?>/, + 'attr-name': { + pattern: /[^\s>\/]+/, + inside: { + 'namespace': /^[^\s>\/:]+:/ + } + } + + } + }, + 'entity': /&#?[\da-z]{1,8};/i +}; + +// Plugin to make entity title show the real entity, idea by Roman Komarov +Prism.hooks.add('wrap', function(env) { + + if (env.type === 'entity') { + env.attributes['title'] = env.content.replace(/&/, '&'); + } +}); + +Prism.languages.xml = Prism.languages.markup; +Prism.languages.html = Prism.languages.markup; +Prism.languages.mathml = Prism.languages.markup; +Prism.languages.svg = Prism.languages.markup; + + +/* ********************************************** + Begin prism-css.js +********************************************** */ + +Prism.languages.css = { + 'comment': /\/\*[\w\W]*?\*\//, + 'atrule': { + pattern: /@[\w-]+?.*?(;|(?=\s*\{))/i, + inside: { + 'rule': /@[\w-]+/ + // See rest below + } + }, + 'url': /url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i, + 'selector': /[^\{\}\s][^\{\};]*?(?=\s*\{)/, + 'string': { + pattern: /("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/, + greedy: true + }, + 'property': /(\b|\B)[\w-]+(?=\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); + +if (Prism.languages.markup) { + Prism.languages.insertBefore('markup', 'tag', { + 'style': { + pattern: /(<style[\w\W]*?>)[\w\W]*?(?=<\/style>)/i, + lookbehind: true, + inside: Prism.languages.css, + alias: 'language-css' + } + }); + + Prism.languages.insertBefore('inside', 'attr-value', { + 'style-attr': { + pattern: /\s*style=("|').*?\1/i, + inside: { + 'attr-name': { + pattern: /^\s*style/i, + inside: Prism.languages.markup.tag.inside + }, + 'punctuation': /^\s*=\s*['"]|['"]\s*$/, + 'attr-value': { + pattern: /.+/i, + inside: Prism.languages.css + } + }, + alias: 'language-css' + } + }, Prism.languages.markup.tag); +} + +/* ********************************************** + Begin prism-clike.js +********************************************** */ + +Prism.languages.clike = { + 'comment': [ + { + pattern: /(^|[^\\])\/\*[\w\W]*?\*\//, + lookbehind: true + }, + { + pattern: /(^|[^\\:])\/\/.*/, + lookbehind: true + } + ], + 'string': { + pattern: /(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, + greedy: true + }, + 'class-name': { + pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i, + lookbehind: true, + inside: { + punctuation: /(\.|\\)/ + } + }, + 'keyword': /\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, + 'boolean': /\b(true|false)\b/, + 'function': /[a-z0-9_]+(?=\()/i, + 'number': /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i, + 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/, + 'punctuation': /[{}[\];(),.:]/ +}; + + +/* ********************************************** + Begin prism-javascript.js +********************************************** */ + +Prism.languages.javascript = Prism.languages.extend('clike', { + 'keyword': /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/, + 'number': /\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/, + // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444) + 'function': /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i, + 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/ +}); + +Prism.languages.insertBefore('javascript', 'keyword', { + 'regex': { + pattern: /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/, + lookbehind: true, + greedy: true + } +}); + +Prism.languages.insertBefore('javascript', 'string', { + 'template-string': { + pattern: /`(?:\\\\|\\?[^\\])*?`/, + greedy: true, + inside: { + 'interpolation': { + pattern: /\$\{[^}]+\}/, + inside: { + 'interpolation-punctuation': { + pattern: /^\$\{|\}$/, + alias: 'punctuation' + }, + rest: Prism.languages.javascript + } + }, + 'string': /[\s\S]+/ + } + } +}); + +if (Prism.languages.markup) { + Prism.languages.insertBefore('markup', 'tag', { + 'script': { + pattern: /(<script[\w\W]*?>)[\w\W]*?(?=<\/script>)/i, + lookbehind: true, + inside: Prism.languages.javascript, + alias: 'language-javascript' + } + }); +} + +Prism.languages.js = Prism.languages.javascript; + +/* ********************************************** + Begin prism-file-highlight.js +********************************************** */ + +(function () { + if (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) { + return; + } + + self.Prism.fileHighlight = function() { + + var Extensions = { + 'js': 'javascript', + 'py': 'python', + 'rb': 'ruby', + 'ps1': 'powershell', + 'psm1': 'powershell', + 'sh': 'bash', + 'bat': 'batch', + 'h': 'c', + 'tex': 'latex' + }; + + if(Array.prototype.forEach) { // Check to prevent error in IE8 + Array.prototype.slice.call(document.querySelectorAll('pre[data-src]')).forEach(function (pre) { + var src = pre.getAttribute('data-src'); + + var language, parent = pre; + var lang = /\blang(?:uage)?-(?!\*)(\w+)\b/i; + while (parent && !lang.test(parent.className)) { + parent = parent.parentNode; + } + + if (parent) { + language = (pre.className.match(lang) || [, ''])[1]; + } + + if (!language) { + var extension = (src.match(/\.(\w+)$/) || [, ''])[1]; + language = Extensions[extension] || extension; + } + + var code = document.createElement('code'); + code.className = 'language-' + language; + + pre.textContent = ''; + + code.textContent = 'Loading…'; + + pre.appendChild(code); + + var xhr = new XMLHttpRequest(); + + xhr.open('GET', src, true); + + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + + if (xhr.status < 400 && xhr.responseText) { + code.textContent = xhr.responseText; + + Prism.highlightElement(code); + } + else if (xhr.status >= 400) { + code.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText; + } + else { + code.textContent = '✖ Error: File does not exist or is empty'; + } + } + }; + + xhr.send(null); + }); + } + + }; + + document.addEventListener('DOMContentLoaded', self.Prism.fileHighlight); + +})(); + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }), +/* 17 */ /***/ (function(module, exports, __webpack_require__) { var Component = __webpack_require__(0)( /* script */ - __webpack_require__(4), + __webpack_require__(5), /* template */ - __webpack_require__(25), + __webpack_require__(24), /* scopeId */ null, /* cssModules */ @@ -3275,14 +2916,14 @@ module.exports = Component.exports /***/ }), -/* 19 */ +/* 18 */ /***/ (function(module, exports, __webpack_require__) { var Component = __webpack_require__(0)( /* script */ - __webpack_require__(6), + __webpack_require__(7), /* template */ - __webpack_require__(29), + __webpack_require__(28), /* scopeId */ null, /* cssModules */ @@ -3309,14 +2950,14 @@ module.exports = Component.exports /***/ }), -/* 20 */ +/* 19 */ /***/ (function(module, exports, __webpack_require__) { var Component = __webpack_require__(0)( /* script */ - __webpack_require__(7), + __webpack_require__(8), /* template */ - __webpack_require__(26), + __webpack_require__(25), /* scopeId */ null, /* cssModules */ @@ -3343,14 +2984,14 @@ module.exports = Component.exports /***/ }), -/* 21 */ +/* 20 */ /***/ (function(module, exports, __webpack_require__) { var Component = __webpack_require__(0)( /* script */ - __webpack_require__(8), + __webpack_require__(9), /* template */ - __webpack_require__(23), + __webpack_require__(22), /* scopeId */ null, /* cssModules */ @@ -3377,14 +3018,14 @@ module.exports = Component.exports /***/ }), -/* 22 */ +/* 21 */ /***/ (function(module, exports, __webpack_require__) { var Component = __webpack_require__(0)( /* script */ - __webpack_require__(9), + __webpack_require__(10), /* template */ - __webpack_require__(24), + __webpack_require__(23), /* scopeId */ null, /* cssModules */ @@ -3411,7 +3052,7 @@ module.exports = Component.exports /***/ }), -/* 23 */ +/* 22 */ /***/ (function(module, exports, __webpack_require__) { module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; @@ -3432,7 +3073,7 @@ if (false) { } /***/ }), -/* 24 */ +/* 23 */ /***/ (function(module, exports, __webpack_require__) { module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; @@ -3442,7 +3083,8 @@ module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c "type": "output", "outputType": _vm.outputType, "count": _vm.count, - "raw-code": _vm.rawCode + "raw-code": _vm.rawCode, + "code-css-class": _vm.codeCssClass } }) },staticRenderFns: []} @@ -3455,7 +3097,7 @@ if (false) { } /***/ }), -/* 25 */ +/* 24 */ /***/ (function(module, exports, __webpack_require__) { module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; @@ -3465,12 +3107,14 @@ module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c attrs: { "type": "input", "raw-code": _vm.rawInputCode, - "count": _vm.cell.execution_count + "count": _vm.cell.execution_count, + "code-css-class": _vm.codeCssClass } }), _vm._v(" "), (_vm.hasOutput) ? _c('output-cell', { attrs: { "count": _vm.cell.execution_count, - "output": _vm.output + "output": _vm.output, + "code-css-class": _vm.codeCssClass } }) : _vm._e()], 1) },staticRenderFns: []} @@ -3483,7 +3127,7 @@ if (false) { } /***/ }), -/* 26 */ +/* 25 */ /***/ (function(module, exports, __webpack_require__) { module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; @@ -3504,7 +3148,7 @@ if (false) { } /***/ }), -/* 27 */ +/* 26 */ /***/ (function(module, exports, __webpack_require__) { module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; @@ -3513,7 +3157,8 @@ module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c key: index, tag: "component", attrs: { - "cell": cell + "cell": cell, + "code-css-class": _vm.codeCssClass } }) })) : _vm._e() @@ -3527,7 +3172,7 @@ if (false) { } /***/ }), -/* 28 */ +/* 27 */ /***/ (function(module, exports, __webpack_require__) { module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; @@ -3544,7 +3189,7 @@ if (false) { } /***/ }), -/* 29 */ +/* 28 */ /***/ (function(module, exports, __webpack_require__) { module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; @@ -3566,7 +3211,7 @@ if (false) { } /***/ }), -/* 30 */ +/* 29 */ /***/ (function(module, exports, __webpack_require__) { module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; @@ -3579,6 +3224,8 @@ module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c } }), _vm._v(" "), _c('pre', { ref: "code", + staticClass: "language-python", + class: _vm.codeCssClass, domProps: { "textContent": _vm._s(_vm.code) } @@ -3593,31 +3240,55 @@ if (false) { } /***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Notebook = __webpack_require__(4); + +module.exports = { + install: function install(_vue) { + _vue.component('notebook-lab', Notebook); + } +}; + +/***/ }), /* 31 */ -/***/ (function(module, exports) { +/***/ (function(module, exports, __webpack_require__) { -var g;
-
-// This works in non-strict mode
-g = (function() {
- return this;
-})();
-
-try {
- // This works if eval is allowed (see CSP)
- g = g || Function("return this")() || (1,eval)("this");
-} catch(e) {
- // This works if the window reference is available
- if(typeof window === "object")
- g = window;
-}
-
-// g can still be undefined, but nothing to do about it...
-// We return undefined, instead of nothing here, so it's
-// easier to handle this case. if(!global) { ...}
-
-module.exports = g;
+/* WEBPACK VAR INJECTION */(function(global) {(function(){ +if ( + (typeof self === 'undefined' || !self.Prism) && + (typeof global === 'undefined' || !global.Prism) +) { + return; +} + +var options = {}; +Prism.plugins.customClass = { + map: function map(cm) { + options.classMap = cm; + }, + prefix: function prefix(string) { + options.prefixString = string; + } +} + +Prism.hooks.add('wrap', function (env) { + if (!options.classMap && !options.prefixString) { + return; + } + env.classes = env.classes.map(function(c) { + return (options.prefixString || '') + (options.classMap[c] || c); + }); +}); + +})(); + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) /***/ }), /* 32 */ @@ -3626,14 +3297,39 @@ module.exports = g; "use strict"; -var Notebook = __webpack_require__(3); +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _Prism$plugins$custom; -module.exports = { - install: function install(_vue) { - _vue.component('notebook-lab', Notebook); - } -}; +var _prismjs = __webpack_require__(16); + +var _prismjs2 = _interopRequireDefault(_prismjs); + +__webpack_require__(15); + +__webpack_require__(31); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +_prismjs2.default.plugins.customClass.map((_Prism$plugins$custom = { + comment: 'c', + error: 'err', + operator: 'o', + constant: 'kc', + namespace: 'kn', + keyword: 'k', + string: 's', + number: 'm', + 'attr-name': 'na', + builtin: 'nb' +}, _defineProperty(_Prism$plugins$custom, 'constant', 'no'), _defineProperty(_Prism$plugins$custom, 'entity', 'ni'), _defineProperty(_Prism$plugins$custom, 'function', 'nf'), _defineProperty(_Prism$plugins$custom, 'tag', 'nt'), _defineProperty(_Prism$plugins$custom, 'variable', 'nv'), _Prism$plugins$custom)); + +exports.default = _prismjs2.default; /***/ }) /******/ ]); -}); +});
\ No newline at end of file |