Skip to content
Snippets Groups Projects
Commit b7406152 authored by Phil Hughes's avatar Phil Hughes
Browse files

Moved to pre-compiled templates

parent bf1dc1d5
No related branches found
No related tags found
No related merge requests found
Pipeline #
Loading
Loading
@@ -63,7 +63,7 @@
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 8);
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
Loading
Loading
@@ -71,90 +71,130 @@
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
/* harmony default export */ __webpack_exports__["a"] = {
template: `
<div class="prompt">
<span v-if="type && count">
{{ type }} [{{ count }}]:
</span>
</div>
`,
props: {
type: {
type: String,
required: false
},
count: {
type: Number,
required: false
}
}
};
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_index_vue__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_index_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__src_index_vue__);
// import Vue from 'vue';
Vue.component('notebook-lab', __WEBPACK_IMPORTED_MODULE_0__src_index_vue___default.a);
 
/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
/***/ (function(module, exports) {
 
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cells__ = __webpack_require__(4);
/* harmony default export */ __webpack_exports__["a"] = {
template: `
<div v-if="hasNotebook">
<component
v-for="(cell, index) in notebook.cells"
:is="cellType(cell.cell_type)"
:cell="cell"
:key="index" />
</div>
`,
components: {
'code-cell': __WEBPACK_IMPORTED_MODULE_0__cells__["a" /* CodeCell */],
'markdown-cell': __WEBPACK_IMPORTED_MODULE_0__cells__["b" /* MarkdownCell */]
},
props: {
notebook: {
type: Object,
required: true
}
},
methods: {
cellType(type) {
return `${type}-cell`;
}
},
computed: {
hasNotebook() {
return Object.keys(this.notebook).length;
}
module.exports = function normalizeComponent (
rawScriptExports,
compiledTemplate,
scopeId,
cssModules
) {
var esModule
var scriptExports = rawScriptExports = rawScriptExports || {}
// ES6 modules interop
var type = typeof rawScriptExports.default
if (type === 'object' || type === 'function') {
esModule = rawScriptExports
scriptExports = rawScriptExports.default
}
};
// Vue.extend constructor export interop
var options = typeof scriptExports === 'function'
? scriptExports.options
: scriptExports
// render functions
if (compiledTemplate) {
options.render = compiledTemplate.render
options.staticRenderFns = compiledTemplate.staticRenderFns
}
// scopedId
if (scopeId) {
options._scopeId = scopeId
}
// inject cssModules
if (cssModules) {
var computed = Object.create(options.computed || null)
Object.keys(cssModules).forEach(function (key) {
var module = cssModules[key]
computed[key] = function () { return module }
})
options.computed = computed
}
return {
esModule: esModule,
exports: scriptExports,
options: options
}
}
 
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
var Component = __webpack_require__(1)(
/* script */
__webpack_require__(6),
/* template */
__webpack_require__(13),
/* scopeId */
null,
/* cssModules */
null
)
Component.options.__file = "/Users/phil/Projects/notebooklab/src/index.vue"
if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")}
if (Component.options.functional) {console.error("[vue-loader] index.vue: functional components are not supported with templates, they should use render functions.")}
/* hot reload */
if (false) {(function () {
var hotAPI = require("vue-hot-reload-api")
hotAPI.install(require("vue"), false)
if (!hotAPI.compatible) return
module.hot.accept()
if (!module.hot.data) {
hotAPI.createRecord("data-v-4cb2b168", Component.options)
} else {
hotAPI.reload("data-v-4cb2b168", Component.options)
}
})()}
module.exports = Component.exports
/***/ }),
/* 3 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__code_index__ = __webpack_require__(3);
/* harmony default export */ __webpack_exports__["a"] = {
template: `
<div class="cell">
<code-cell
type="input"
:raw-code="rawInputCode"
:count="cell.execution_count" />
<code-cell
v-if="hasOutput"
type="output"
:raw-code="outputText"
:count="output.execution_count" />
</div>
`,
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__code_index_vue__ = __webpack_require__(18);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__code_index_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__code_index_vue__);
//
//
//
//
//
//
//
//
//
//
//
//
//
//
/* harmony default export */ __webpack_exports__["default"] = {
components: {
'code-cell': __WEBPACK_IMPORTED_MODULE_0__code_index__["a" /* default */]
'code-cell': __WEBPACK_IMPORTED_MODULE_0__code_index_vue___default.a
},
props: {
cell: {
Loading
Loading
@@ -183,116 +223,143 @@
};
 
/***/ }),
/* 3 */
/* 4 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__prompt__ = __webpack_require__(0);
/* harmony default export */ __webpack_exports__["a"] = {
template: `
<div :class="type">
<prompt
:type="promptType"
:count="count" />
<pre v-html="code"></pre>
</div>
`,
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_marked__ = __webpack_require__(8);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_marked___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_marked__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__prompt_vue__ = __webpack_require__(11);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__prompt_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__prompt_vue__);
//
//
//
//
//
//
//
/* harmony default export */ __webpack_exports__["default"] = {
components: {
'prompt': __WEBPACK_IMPORTED_MODULE_0__prompt__["a" /* default */]
'prompt': __WEBPACK_IMPORTED_MODULE_1__prompt_vue___default.a
},
props: {
count: {
type: Number,
required: false
},
type: {
type: String,
required: true
},
rawCode: {
type: String,
cell: {
type: Object,
required: true
}
},
computed: {
code() {
if (this.promptType === 'In') {
return hljs.highlightAuto(this.rawCode).value;
} else {
return this.rawCode;
}
},
promptType() {
const type = this.type.split('put')[0];
markdown() {
const regex = new RegExp(/^\$\$(.*)\$\$$/, 'g');
 
return type.charAt(0).toUpperCase() + type.slice(1);;
const source = this.cell.source.map(line => {
const matches = regex.exec(line.trim());
// Only render use the Katex library if it is actually loaded
if (matches && matches.length > 0 && katex) {
return katex.renderToString(matches[1]);
} else {
return line;
}
});
return __WEBPACK_IMPORTED_MODULE_0_marked___default()(source.join(''));
}
}
};
 
/***/ }),
/* 4 */
/* 5 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__markdown__ = __webpack_require__(5);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_0__markdown__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__code__ = __webpack_require__(2);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_1__code__["a"]; });
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
//
//
//
//
//
//
//
//
/* harmony default export */ __webpack_exports__["default"] = {
props: {
type: {
type: String,
required: false
},
count: {
type: Number,
required: false
}
}
};
 
/***/ }),
/* 5 */
/* 6 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_marked__ = __webpack_require__(6);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_marked___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_marked__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__prompt__ = __webpack_require__(0);
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cells__ = __webpack_require__(7);
//
//
//
//
//
//
//
//
//
//
 
 
 
/* harmony default export */ __webpack_exports__["a"] = {
template: `
<div class="cell text-cell">
<prompt />
<div class="markdown" v-html="markdown"></div>
</div>
`,
/* harmony default export */ __webpack_exports__["default"] = {
components: {
'prompt': __WEBPACK_IMPORTED_MODULE_1__prompt__["a" /* default */]
'code-cell': __WEBPACK_IMPORTED_MODULE_0__cells__["a" /* CodeCell */],
'markdown-cell': __WEBPACK_IMPORTED_MODULE_0__cells__["b" /* MarkdownCell */]
},
props: {
cell: {
notebook: {
type: Object,
required: true
}
},
methods: {
cellType(type) {
return `${type}-cell`;
}
},
computed: {
markdown() {
const regex = new RegExp(/^\$\$(.*)\$\$$/, 'g');
const source = this.cell.source.map(line => {
const matches = regex.exec(line.trim());
// Only render use the Katex library if it is actually loaded
if (matches && matches.length > 0 && katex) {
return katex.renderToString(matches[1]);
} else {
return line;
}
});
return __WEBPACK_IMPORTED_MODULE_0_marked___default()(source.join(''));
hasNotebook() {
return Object.keys(this.notebook).length;
}
}
};
 
/***/ }),
/* 6 */
/* 7 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__markdown_vue__ = __webpack_require__(10);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__markdown_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__markdown_vue__);
/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_0__markdown_vue___default.a; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__code_vue__ = __webpack_require__(9);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__code_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__code_vue__);
/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_1__code_vue___default.a; });
/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {
 
/* WEBPACK VAR INJECTION */(function(global) {/**
Loading
Loading
@@ -1582,10 +1649,203 @@ if (true) {
return this || (typeof window !== 'undefined' ? window : global);
}());
 
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)))
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(16)))
 
/***/ }),
/* 7 */
/* 9 */
/***/ (function(module, exports, __webpack_require__) {
var Component = __webpack_require__(1)(
/* script */
__webpack_require__(3),
/* template */
__webpack_require__(12),
/* scopeId */
null,
/* cssModules */
null
)
Component.options.__file = "/Users/phil/Projects/notebooklab/src/cells/code.vue"
if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")}
if (Component.options.functional) {console.error("[vue-loader] code.vue: functional components are not supported with templates, they should use render functions.")}
/* hot reload */
if (false) {(function () {
var hotAPI = require("vue-hot-reload-api")
hotAPI.install(require("vue"), false)
if (!hotAPI.compatible) return
module.hot.accept()
if (!module.hot.data) {
hotAPI.createRecord("data-v-3ac4c361", Component.options)
} else {
hotAPI.reload("data-v-3ac4c361", Component.options)
}
})()}
module.exports = Component.exports
/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {
var Component = __webpack_require__(1)(
/* script */
__webpack_require__(4),
/* template */
__webpack_require__(15),
/* scopeId */
null,
/* cssModules */
null
)
Component.options.__file = "/Users/phil/Projects/notebooklab/src/cells/markdown.vue"
if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")}
if (Component.options.functional) {console.error("[vue-loader] markdown.vue: functional components are not supported with templates, they should use render functions.")}
/* hot reload */
if (false) {(function () {
var hotAPI = require("vue-hot-reload-api")
hotAPI.install(require("vue"), false)
if (!hotAPI.compatible) return
module.hot.accept()
if (!module.hot.data) {
hotAPI.createRecord("data-v-7342b363", Component.options)
} else {
hotAPI.reload("data-v-7342b363", Component.options)
}
})()}
module.exports = Component.exports
/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {
var Component = __webpack_require__(1)(
/* script */
__webpack_require__(5),
/* template */
__webpack_require__(14),
/* scopeId */
null,
/* cssModules */
null
)
Component.options.__file = "/Users/phil/Projects/notebooklab/src/cells/prompt.vue"
if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")}
if (Component.options.functional) {console.error("[vue-loader] prompt.vue: functional components are not supported with templates, they should use render functions.")}
/* hot reload */
if (false) {(function () {
var hotAPI = require("vue-hot-reload-api")
hotAPI.install(require("vue"), false)
if (!hotAPI.compatible) return
module.hot.accept()
if (!module.hot.data) {
hotAPI.createRecord("data-v-4f6bf458", Component.options)
} else {
hotAPI.reload("data-v-4f6bf458", Component.options)
}
})()}
module.exports = Component.exports
/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {
module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
return _c('div', {
staticClass: "cell"
}, [_c('code-cell', {
attrs: {
"type": "input",
"raw-code": _vm.rawInputCode,
"count": _vm.cell.execution_count
}
}), _vm._v(" "), (_vm.hasOutput) ? _c('code-cell', {
attrs: {
"type": "output",
"raw-code": _vm.outputText,
"count": _vm.output.execution_count
}
}) : _vm._e()], 1)
},staticRenderFns: []}
module.exports.render._withStripped = true
if (false) {
module.hot.accept()
if (module.hot.data) {
require("vue-hot-reload-api").rerender("data-v-3ac4c361", module.exports)
}
}
/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {
module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
return (_vm.hasNotebook) ? _c('div', _vm._l((_vm.notebook.cells), function(cell, index) {
return _c(_vm.cellType(cell.cell_type), {
key: index,
tag: "component",
attrs: {
"cell": cell
}
})
})) : _vm._e()
},staticRenderFns: []}
module.exports.render._withStripped = true
if (false) {
module.hot.accept()
if (module.hot.data) {
require("vue-hot-reload-api").rerender("data-v-4cb2b168", module.exports)
}
}
/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {
module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
return _c('div', {
staticClass: "prompt"
}, [(_vm.type && _vm.count) ? _c('span', [_vm._v("\n " + _vm._s(_vm.type) + " [" + _vm._s(_vm.count) + "]:\n ")]) : _vm._e()])
},staticRenderFns: []}
module.exports.render._withStripped = true
if (false) {
module.hot.accept()
if (module.hot.data) {
require("vue-hot-reload-api").rerender("data-v-4f6bf458", module.exports)
}
}
/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {
module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
return _c('div', {
staticClass: "cell text-cell"
}, [_c('prompt'), _vm._v(" "), _c('div', {
staticClass: "markdown",
domProps: {
"innerHTML": _vm._s(_vm.markdown)
}
})], 1)
},staticRenderFns: []}
module.exports.render._withStripped = true
if (false) {
module.hot.accept()
if (module.hot.data) {
require("vue-hot-reload-api").rerender("data-v-7342b363", module.exports)
}
}
/***/ }),
/* 16 */
/***/ (function(module, exports) {
 
var g;
Loading
Loading
@@ -1612,16 +1872,118 @@ module.exports = g;
 
 
/***/ }),
/* 8 */
/* 17 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src__ = __webpack_require__(1);
// import Vue from 'vue';
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__prompt_vue__ = __webpack_require__(11);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__prompt_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__prompt_vue__);
//
//
//
//
//
//
//
//
//
/* harmony default export */ __webpack_exports__["default"] = {
components: {
'prompt': __WEBPACK_IMPORTED_MODULE_0__prompt_vue___default.a
},
props: {
count: {
type: Number,
required: false
},
type: {
type: String,
required: true
},
rawCode: {
type: String,
required: true
}
},
computed: {
code() {
if (this.promptType === 'In') {
return hljs.highlightAuto(this.rawCode).value;
} else {
return this.rawCode;
}
},
promptType() {
const type = this.type.split('put')[0];
return type.charAt(0).toUpperCase() + type.slice(1);;
}
}
};
/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {
var Component = __webpack_require__(1)(
/* script */
__webpack_require__(17),
/* template */
__webpack_require__(19),
/* scopeId */
null,
/* cssModules */
null
)
Component.options.__file = "/Users/phil/Projects/notebooklab/src/cells/code/index.vue"
if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")}
if (Component.options.functional) {console.error("[vue-loader] index.vue: functional components are not supported with templates, they should use render functions.")}
/* hot reload */
if (false) {(function () {
var hotAPI = require("vue-hot-reload-api")
hotAPI.install(require("vue"), false)
if (!hotAPI.compatible) return
module.hot.accept()
if (!module.hot.data) {
hotAPI.createRecord("data-v-d42105b8", Component.options)
} else {
hotAPI.reload("data-v-d42105b8", Component.options)
}
})()}
 
module.exports = Component.exports
 
Vue.component('notebook-lab', __WEBPACK_IMPORTED_MODULE_0__src__["a" /* default */]);
/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {
module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
return _c('div', {
class: _vm.type
}, [_c('prompt', {
attrs: {
"type": _vm.promptType,
"count": _vm.count
}
}), _vm._v(" "), _c('pre', {
domProps: {
"innerHTML": _vm._s(_vm.code)
}
})], 1)
},staticRenderFns: []}
module.exports.render._withStripped = true
if (false) {
module.hot.accept()
if (module.hot.data) {
require("vue-hot-reload-api").rerender("data-v-d42105b8", module.exports)
}
}
 
/***/ })
/******/ ]);
\ No newline at end of file
// import Vue from 'vue';
import Notebook from './src';
import Notebook from './src/index.vue';
 
Vue.component('notebook-lab', Notebook);
Loading
Loading
@@ -25,7 +25,10 @@
"webpack": "^2.2.1"
},
"dependencies": {
"css-loader": "^0.27.3",
"marked": "^0.3.6",
"vue": "^2.2.4"
"vue": "^2.2.4",
"vue-loader": "^11.1.4",
"vue-template-compiler": "^2.2.4"
}
}
import CodeCell from './code/index';
<template>
<div class="cell">
<code-cell
type="input"
:raw-code="rawInputCode"
:count="cell.execution_count" />
<code-cell
v-if="hasOutput"
type="output"
:raw-code="outputText"
:count="output.execution_count" />
</div>
</template>
<script>
import CodeCell from './code/index.vue';
 
export default {
template: `
<div class="cell">
<code-cell
type="input"
:raw-code="rawInputCode"
:count="cell.execution_count" />
<code-cell
v-if="hasOutput"
type="output"
:raw-code="outputText"
:count="output.execution_count" />
</div>
`,
components: {
'code-cell': CodeCell,
},
Loading
Loading
@@ -42,3 +44,4 @@ export default {
},
},
};
</script>
import Prompt from '../prompt';
export default {
template: `
<div :class="type">
<prompt
:type="promptType"
:count="count" />
<pre v-html="code"></pre>
</div>
`,
components: {
'prompt': Prompt,
},
props: {
count: {
type: Number,
required: false,
},
type: {
type: String,
required: true,
},
rawCode: {
type: String,
required: true,
},
},
computed: {
code() {
if (this.promptType === 'In') {
return hljs.highlightAuto(this.rawCode).value;
} else {
return this.rawCode;
}
},
promptType() {
const type = this.type.split('put')[0];
return type.charAt(0).toUpperCase() + type.slice(1);;
},
},
};
<template>
<div :class="type">
<prompt
:type="promptType"
:count="count" />
<pre v-html="code"></pre>
</div>
</template>
<script>
import Prompt from '../prompt.vue';
export default {
components: {
'prompt': Prompt,
},
props: {
count: {
type: Number,
required: false,
},
type: {
type: String,
required: true,
},
rawCode: {
type: String,
required: true,
},
},
computed: {
code() {
if (this.promptType === 'In') {
return hljs.highlightAuto(this.rawCode).value;
} else {
return this.rawCode;
}
},
promptType() {
const type = this.type.split('put')[0];
return type.charAt(0).toUpperCase() + type.slice(1);;
},
},
};
</script>
export { default as MarkdownCell } from './markdown';
export { default as CodeCell } from './code';
export { default as MarkdownCell } from './markdown.vue';
export { default as CodeCell } from './code.vue';
import marked from 'marked';
import Prompt from './prompt';
export default {
template: `
<div class="cell text-cell">
<prompt />
<div class="markdown" v-html="markdown"></div>
</div>
`,
components: {
'prompt': Prompt,
},
props: {
cell: {
type: Object,
required: true,
},
},
computed: {
markdown() {
const regex = new RegExp(/^\$\$(.*)\$\$$/, 'g');
const source = this.cell.source.map((line) => {
const matches = regex.exec(line.trim());
// Only render use the Katex library if it is actually loaded
if (matches && matches.length > 0 && katex) {
return katex.renderToString(matches[1]);
} else {
return line;
}
});
return marked(source.join(''));
},
},
};
<template>
<div class="cell text-cell">
<prompt />
<div class="markdown" v-html="markdown"></div>
</div>
</template>
<script>
import marked from 'marked';
import Prompt from './prompt.vue';
export default {
components: {
'prompt': Prompt,
},
props: {
cell: {
type: Object,
required: true,
},
},
computed: {
markdown() {
const regex = new RegExp(/^\$\$(.*)\$\$$/, 'g');
const source = this.cell.source.map((line) => {
const matches = regex.exec(line.trim());
// Only render use the Katex library if it is actually loaded
if (matches && matches.length > 0 && katex) {
return katex.renderToString(matches[1]);
} else {
return line;
}
});
return marked(source.join(''));
},
},
};
</script>
export default {
template: `
<div class="prompt">
<span v-if="type && count">
{{ type }} [{{ count }}]:
</span>
</div>
`,
props: {
type: {
type: String,
required: false,
},
count: {
type: Number,
required: false,
},
},
};
<template>
<div class="prompt">
<span v-if="type && count">
{{ type }} [{{ count }}]:
</span>
</div>
</template>
<script>
export default {
props: {
type: {
type: String,
required: false,
},
count: {
type: Number,
required: false,
},
},
};
</script>
import {
MarkdownCell,
CodeCell,
} from './cells';
export default {
template: `
<div v-if="hasNotebook">
<component
v-for="(cell, index) in notebook.cells"
:is="cellType(cell.cell_type)"
:cell="cell"
:key="index" />
</div>
`,
components: {
'code-cell': CodeCell,
'markdown-cell': MarkdownCell,
},
props: {
notebook: {
type: Object,
required: true,
},
},
methods: {
cellType(type) {
return `${type}-cell`;
},
},
computed: {
hasNotebook() {
return Object.keys(this.notebook).length;
},
},
};
<template>
<div v-if="hasNotebook">
<component
v-for="(cell, index) in notebook.cells"
:is="cellType(cell.cell_type)"
:cell="cell"
:key="index" />
</div>
</template>
<script>
import {
MarkdownCell,
CodeCell,
} from './cells';
export default {
components: {
'code-cell': CodeCell,
'markdown-cell': MarkdownCell,
},
props: {
notebook: {
type: Object,
required: true,
},
},
methods: {
cellType(type) {
return `${type}-cell`;
},
},
computed: {
hasNotebook() {
return Object.keys(this.notebook).length;
},
},
};
</script>
Loading
Loading
@@ -8,6 +8,10 @@ module.exports = {
},
module: {
loaders: [{
test: /\.vue$/,
use: ['vue-loader'],
exclude: /node_modules/,
}, {
test: /\.js$/,
use: ['babel-loader'],
exclude: /node_modules/,
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment