UNPKG

2.71 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports["default"] = void 0;
7
8var _vue2AceEditor = _interopRequireDefault(require("vue2-ace-editor"));
9
10var _underscore = _interopRequireDefault(require("underscore"));
11
12function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
14var _default = {
15 template: "\n <div ref=\"wrapperBox\">\n <component :is=\"userComponent\"></component>\n <p class=\"bd__button\"><a href=\"#\" @click.prevent=\"toggleEditor\">Modify Example Code</a></p>\n <div style=\"margin-bottom: 20px\" v-show=\"isActive\">\n <editor\n v-model=\"code\"\n @init=\"editorInit\"\n lang=\"jsx\"\n theme=\"monokai\"\n width=\"100%\"\n height=\"200\"\n mode=\"jsx\">\n </editor>\n </div>\n </div>\n ",
16 props: {
17 defaultCode: String
18 },
19 data: function data() {
20 return {
21 code: this.defaultCode,
22 userComponent: this.renderComponent(this.defaultCode),
23 isActive: false
24 };
25 },
26 components: {
27 editor: _vue2AceEditor["default"]
28 },
29 created: function created() {
30 this.debounceRenderComponent = _underscore["default"].debounce(this.renderComponent, 500).bind(this);
31 },
32 methods: {
33 toggleEditor: function toggleEditor() {
34 this.isActive = !this.isActive;
35 },
36 editorInit: function editorInit() {
37 require('brace/ext/language_tools'); //language extension prerequsite...
38
39
40 require('brace/mode/jsx'); //language
41
42
43 require('brace/theme/monokai');
44 },
45 renderComponent: function renderComponent(originalCode) {
46 var code = originalCode || this.code;
47 var json = {};
48
49 try {
50 if (code && code.length && code[0] === '{') {
51 json = eval('(' + code + ')');
52 }
53 } catch (e) {// simply example is not a json object
54 }
55
56 try {
57 json.components = vueComponents;
58 json.template = json.template || code;
59 var component = Vue.component('user-component', json);
60 this.userComponent = component;
61 return component;
62 } catch (error) {
63 console.log(error);
64 }
65 }
66 },
67 updated: function updated() {
68 this.$nextTick(function () {
69 window.updateHeight(this.$refs.wrapperBox.clientHeight);
70 });
71 },
72 mounted: function mounted() {
73 this.$nextTick(function () {
74 window.updateHeight(this.$refs.wrapperBox.clientHeight);
75 });
76 },
77 watch: {
78 // whenever question changes, this function will run
79 code: function code(newCode, oldCode) {
80 this.debounceRenderComponent(newCode);
81 }
82 }
83};
84exports["default"] = _default;
\No newline at end of file