1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports["default"] = void 0;
|
7 |
|
8 | var _vue2AceEditor = _interopRequireDefault(require("vue2-ace-editor"));
|
9 |
|
10 | var _underscore = _interopRequireDefault(require("underscore"));
|
11 |
|
12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
13 |
|
14 | var _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');
|
38 |
|
39 |
|
40 | require('brace/mode/jsx');
|
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) {
|
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 |
|
79 | code: function code(newCode, oldCode) {
|
80 | this.debounceRenderComponent(newCode);
|
81 | }
|
82 | }
|
83 | };
|
84 | exports["default"] = _default; |
\ | No newline at end of file |