From 5ef81108448557905cf56853b4ff26fa97cbc1c1 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 11:47:48 -0400 Subject: [PATCH 01/82] docs(playground): fix playground issues --- docs/pages/play.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index a988f1d8550..e0f39707e1a 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -280,9 +280,6 @@ export default { } }, run () { - // Commit latest changes - this.commit() - // Destroy old VM if exists this.destroyVM() @@ -309,6 +306,9 @@ export default { options.el = '#result' options.template = `
${this.html}
` this.vm = new Vue(options) + + // Commit latest changes + this.commit() } catch (err) { console.error(err) } From 5a92829f806d2fa82594b3b492d797a780eced0b Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 12:30:22 -0400 Subject: [PATCH 02/82] add render error handlers --- docs/pages/play.vue | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index e0f39707e1a..fd063d14373 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -305,6 +305,19 @@ export default { options.router = this.$router options.el = '#result' options.template = `
${this.html}
` + options.renderError = (h, err) => { + const title = h('h4', {}, 'Render Error') + const message = h('pre', { staticClass: 'text-small' }, err.stack) + return h( + 'div', + { + staticClass: 'alert alert-danger' + }, + [ title, message ] + ) + } + options.errorCaptured = (err, vm, info) => { + } this.vm = new Vue(options) // Commit latest changes From f9ca160df26dd0d6ca280a65c835743fbfa19229 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 14:12:25 -0400 Subject: [PATCH 03/82] move console overrides to before run during mount --- docs/pages/play.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index fd063d14373..a999208949c 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -221,9 +221,6 @@ export default { } }, mounted () { - this.load() - this.run() - if (typeof window !== 'undefined') { this.originalLog = console.log this.originalWarn = console.warn @@ -242,6 +239,9 @@ export default { self.log('danger', arguments) } } + + this.load() + this.run() }, beforeDestroy () { if (typeof window !== 'undefined') { From 0b2d00c788a620df9463e0e28ad1f2c9aeab4f75 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 15:50:41 -0400 Subject: [PATCH 04/82] Update play.vue --- docs/pages/play.vue | 79 ++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 33 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index a999208949c..e4c293ad947 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -180,8 +180,7 @@ export default { originalWarn: null, originalError: null, vertical: false, - full: false, - lazy_run_: null + full: false } }, head () { @@ -204,22 +203,20 @@ export default { }, html_fiddle () { return `
\r\n${this.html}\r\n
`.trim() - }, - lazy_run () { - if (!this.lazy_run_) { - this.lazy_run_ = debounce(this.run.bind(this), 500) - } - return this.lazy_run_ } }, watch: { html () { - this.lazy_run() + this.run() }, js () { - this.lazy_run() + this.run() } }, + created () { + // Create our debounced runner + this.run = debounce(this._run, 500) + }, mounted () { if (typeof window !== 'undefined') { this.originalLog = console.log @@ -241,7 +238,7 @@ export default { } this.load() - this.run() + this.$nextTick(this.run) }, beforeDestroy () { if (typeof window !== 'undefined') { @@ -263,7 +260,13 @@ export default { argsArr.push(args[i]) } - this.originalLog.apply(console, argsArr) + oLog = this.originalLog + if (tag === 'danger') { + oLog = this.originalError + } else if (tag === 'warning') { + oLog = this.originalWarn + } + oLog.apply(console, argsArr) if (this.messages.length > 10) { this.messages.splice(10) @@ -279,51 +282,61 @@ export default { this.vm = null } }, - run () { + _run () { // Destroy old VM if exists this.destroyVM() // Set HTML - this.$refs.result.innerHTML = `
` + this.$refs.result.innerHTML = '' + const el = document.createElement('div') + this.$refs.result.appendChild(el) // Clear messages this.clear() + // Build template + const template = `
${this.html}
` + // Try Create new VM try { - let options + let options = {} + // Try to compile js try { /* eslint-disable no-eval */ let js = this.js.trim() if (js.indexOf('{') !== 0) { js = `{${js}}` } - eval(`options= ${js}`) + eval(`options = ${js}`) } catch (err) { - throw new Error(`Compiling JS: ${err}`) + throw new Error(`Compiling JS: ${err.message}`) + } + // Try to compile template + try { + let result = Vue.compile(template) + } catch (err) { + throw new Error(`Compiling template: ${err.message}`) } options.router = this.$router - options.el = '#result' - options.template = `
${this.html}
` + options.template = template options.renderError = (h, err) => { const title = h('h4', {}, 'Render Error') - const message = h('pre', { staticClass: 'text-small' }, err.stack) - return h( - 'div', - { - staticClass: 'alert alert-danger' - }, - [ title, message ] - ) + const message = h('pre', {staticClass: 'text-small'}, err.toString()) + return h('div', {staticClass: 'alert alert-danger'}, [title, message]) } - options.errorCaptured = (err, vm, info) => { + delete options.el + const vm = new Vue(options) + if (vm) { + this.vm = vm + vm.$mount(el) + // commit latest changes to localStorage + this.commit() + } else { + this.destroyVM() + this.log('danger', 'Unable to create Vue instance') } - this.vm = new Vue(options) - - // Commit latest changes - this.commit() } catch (err) { - console.error(err) + this.log('danger', err.message) } }, toggleVertical () { From 83201d3761ab95a5c2eada6cd03eb448bc5effa2 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 15:56:13 -0400 Subject: [PATCH 05/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index e4c293ad947..98037a10c01 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -260,7 +260,7 @@ export default { argsArr.push(args[i]) } - oLog = this.originalLog + let oLog = this.originalLog if (tag === 'danger') { oLog = this.originalError } else if (tag === 'warning') { From 662d0855786ad0b06a9c544eb461329a46930da9 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 17:44:25 -0400 Subject: [PATCH 06/82] revert to default if local storage data is older than 7 days --- docs/pages/play.vue | 70 +++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 98037a10c01..e84ed458b95 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -169,12 +169,15 @@ const defaultJS = `{ }` const defaultHTML = ` Hello {{ name }}! ` +// Maximum age of localstorage before we revert back to defaults +// 7 days +const maxRetention = 7 * 24 * 60 * 60 * 1000 + export default { data () { return { html: '', js: '', - vm: null, messages: [], originalLog: null, originalWarn: null, @@ -198,11 +201,11 @@ export default { ] }, js_fiddle () { - const js = `new Vue({el:'#app',\r\n${this.js.trim()}})`.trim() + const js = `new Vue({el:'#app',\r\n${this.js.trim()}})` return `window.onload = function() {${js}}` }, html_fiddle () { - return `
\r\n${this.html}\r\n
`.trim() + return `
\r\n${this.html.trim()}\r\n
` } }, watch: { @@ -214,6 +217,8 @@ export default { } }, created () { + // Non reactive property to store the playground vm + this.playVM = null // Create our debounced runner this.run = debounce(this._run, 500) }, @@ -238,7 +243,8 @@ export default { } this.load() - this.$nextTick(this.run) + // not really needed as loading will trigger the watchers + // this.$nextTick(this.run) }, beforeDestroy () { if (typeof window !== 'undefined') { @@ -255,7 +261,7 @@ export default { return } - const argsArr = [tag] + const argsArr = [] for (let i = 0; i < args.length; i++) { argsArr.push(args[i]) } @@ -271,22 +277,22 @@ export default { if (this.messages.length > 10) { this.messages.splice(10) } - this.messages.unshift([argsArr.shift(), argsArr.map(String).join(' ')]) + this.messages.unshift([tag, argsArr.map(String).join(' ')]) }, destroyVM () { - if (this.vm) { + if (this.playVM) { try { - this.vm.$destroy() + this.playVM.$destroy() } catch (err) { } - this.vm = null + this.playVM = null } }, _run () { // Destroy old VM if exists this.destroyVM() - // Set HTML + // Prepare result area this.$refs.result.innerHTML = '' const el = document.createElement('div') this.$refs.result.appendChild(el) @@ -295,30 +301,31 @@ export default { this.clear() // Build template - const template = `
${this.html}
` + let js = this.js.trim() + const html = this.html.trim() + if (is.indexOf('{') !== 0) { + js = `{${js}}` + } - // Try Create new VM + // Try to create new VM try { let options = {} // Try to compile js try { /* eslint-disable no-eval */ - let js = this.js.trim() - if (js.indexOf('{') !== 0) { - js = `{${js}}` - } eval(`options = ${js}`) + /* eslint-enable no-eval */ } catch (err) { throw new Error(`Compiling JS: ${err.message}`) } // Try to compile template try { - let result = Vue.compile(template) + const result = Vue.compile(html) } catch (err) { throw new Error(`Compiling template: ${err.message}`) } options.router = this.$router - options.template = template + options.template = `
${html}
` options.renderError = (h, err) => { const title = h('h4', {}, 'Render Error') const message = h('pre', {staticClass: 'text-small'}, err.toString()) @@ -327,7 +334,7 @@ export default { delete options.el const vm = new Vue(options) if (vm) { - this.vm = vm + this.playVM = vm vm.$mount(el) // commit latest changes to localStorage this.commit() @@ -349,18 +356,33 @@ export default { this.messages.splice(0) }, load () { - if (typeof window === 'undefined' || !window.localStorage) { + const ls = window && window.localStorage + if (!ls) { + this.js = defaultJS.trim() + this.html = defaultHTML.trim() return } - this.js = window.localStorage.getItem('playground_js') || defaultJS.trim() - this.html = window.localStorage.getItem('playground_html') || defaultHTML.trim() + const ts = parseInt(ls.getItem('playground_ts'), 10) || 0 + if (Date.now() - ts > maxRetention) { + // clear local storage if it is old + ls.removeItem('playground_js') + ls.removeItem('playground_html') + ls.removeItem('playground_ts') + } + this.js = ls.getItem('playground_js') || defaultJS.trim() + this.html = ls.getItem('playground_html') || defaultHTML.trim() }, commit () { if (typeof window === 'undefined' || !window.localStorage) { return } - window.localStorage.setItem('playground_js', this.js) - window.localStorage.setItem('playground_html', this.html) + try { + window.localStorage.setItem('playground_js', this.js) + window.localStorage.setItem('playground_html', this.html) + window.localStorage.setItem('playground_ts', String(Date.now())) + } catch (err) { + // silently ignore errors on safari iOS private mode + } } } } From d9b2b96fc472526e53cbdfbd7e22440f0af77c3c Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 18:07:45 -0400 Subject: [PATCH 07/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index e84ed458b95..5c8d9685219 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -303,7 +303,7 @@ export default { // Build template let js = this.js.trim() const html = this.html.trim() - if (is.indexOf('{') !== 0) { + if (js.indexOf('{') !== 0) { js = `{${js}}` } From 94a33c66e131b0c124f860107649ad2f55443db5 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 18:25:42 -0400 Subject: [PATCH 08/82] Update play.vue --- docs/pages/play.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 5c8d9685219..059989d7d09 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -272,7 +272,7 @@ export default { } else if (tag === 'warning') { oLog = this.originalWarn } - oLog.apply(console, argsArr) + oLog.apply(console, [].concat(tag, argsArr)) if (this.messages.length > 10) { this.messages.splice(10) @@ -325,7 +325,7 @@ export default { throw new Error(`Compiling template: ${err.message}`) } options.router = this.$router - options.template = `
${html}
` + options.template = html options.renderError = (h, err) => { const title = h('h4', {}, 'Render Error') const message = h('pre', {staticClass: 'text-small'}, err.toString()) @@ -340,10 +340,10 @@ export default { this.commit() } else { this.destroyVM() - this.log('danger', 'Unable to create Vue instance') + throw new Error('Unable to create Vue instance') } } catch (err) { - this.log('danger', err.message) + this.log('danger', [err.message]) } }, toggleVertical () { From ad6a62284aa83f50549ab99e2a3122496ee8f7d9 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 18:38:41 -0400 Subject: [PATCH 09/82] Update play.vue --- docs/pages/play.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 059989d7d09..441bb4211b5 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -320,7 +320,7 @@ export default { } // Try to compile template try { - const result = Vue.compile(html) + let result = Vue.compile(html.replace(/\s{2,}/g, '') } catch (err) { throw new Error(`Compiling template: ${err.message}`) } @@ -328,7 +328,7 @@ export default { options.template = html options.renderError = (h, err) => { const title = h('h4', {}, 'Render Error') - const message = h('pre', {staticClass: 'text-small'}, err.toString()) + const message = h('pre', {staticClass: 'text-small'}, err.message) return h('div', {staticClass: 'alert alert-danger'}, [title, message]) } delete options.el From 6718dfc31193fcb5444ed3873a4190ef3781b136 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 18:45:40 -0400 Subject: [PATCH 10/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 441bb4211b5..20a1e88bc75 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -320,7 +320,7 @@ export default { } // Try to compile template try { - let result = Vue.compile(html.replace(/\s{2,}/g, '') + let result = Vue.compile(html.replace(/\s{2,}/g, '')) } catch (err) { throw new Error(`Compiling template: ${err.message}`) } From 1439bd6b2c6c4c759447cf2faee461bba65f8dd0 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 19:00:57 -0400 Subject: [PATCH 11/82] Update play.vue --- docs/pages/play.vue | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 20a1e88bc75..e188050e2fc 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -167,7 +167,9 @@ const defaultJS = `{ name: 'Zeus' }, }` -const defaultHTML = ` Hello {{ name }}! ` +const defaultHTML = `
+ Hello {{ name }}! +
` // Maximum age of localstorage before we revert back to defaults // 7 days @@ -316,13 +318,14 @@ export default { eval(`options = ${js}`) /* eslint-enable no-eval */ } catch (err) { - throw new Error(`Compiling JS: ${err.message}`) + throw new Error(`compiling JS: ${err.message}`) } // Try to compile template try { let result = Vue.compile(html.replace(/\s{2,}/g, '')) + this.log('info', ['compile result', result]) } catch (err) { - throw new Error(`Compiling template: ${err.message}`) + throw new Error(`compiling template: ${err.message}`) } options.router = this.$router options.template = html @@ -340,10 +343,10 @@ export default { this.commit() } else { this.destroyVM() - throw new Error('Unable to create Vue instance') + throw new Error('unable to create Vue instance') } } catch (err) { - this.log('danger', [err.message]) + this.log('danger', `${err}`]) } }, toggleVertical () { From 04220d910ac32d9a5b3a498bc3464e2a3df2dd6b Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 19:04:46 -0400 Subject: [PATCH 12/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index e188050e2fc..315c9b7cc7a 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -346,7 +346,7 @@ export default { throw new Error('unable to create Vue instance') } } catch (err) { - this.log('danger', `${err}`]) + this.log('danger', [err.toString()]) } }, toggleVertical () { From 19264bdb905afde8900bbed558db05227b84439e Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 19:16:27 -0400 Subject: [PATCH 13/82] Update play.vue --- docs/pages/play.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 315c9b7cc7a..355475c77a5 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -288,6 +288,7 @@ export default { } catch (err) { } this.playVM = null + this.$refs.result.innerHTML = '' } }, _run () { @@ -334,11 +335,10 @@ export default { const message = h('pre', {staticClass: 'text-small'}, err.message) return h('div', {staticClass: 'alert alert-danger'}, [title, message]) } - delete options.el + options.el = el const vm = new Vue(options) if (vm) { this.playVM = vm - vm.$mount(el) // commit latest changes to localStorage this.commit() } else { From 34169127e3c0f524d1fb048667114ed2be3e2f5a Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 19:18:33 -0400 Subject: [PATCH 14/82] Update play.vue --- docs/pages/play.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 355475c77a5..158da305a03 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -242,6 +242,8 @@ export default { console.error = function () { self.log('danger', arguments) } + // temp for debugging + window.Vue = Vue } this.load() From 19becbc720659d8f3f87bd91df8863c97c308537 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 19:41:08 -0400 Subject: [PATCH 15/82] Update play.vue --- docs/pages/play.vue | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 158da305a03..dbb910683a2 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -162,6 +162,11 @@ import Vue from 'vue' import debounce from 'lodash/debounce' +// temp for debugging compile +if (type of window !== 'undefined') { + window.Vue = Vue +} + const defaultJS = `{ data: { name: 'Zeus' @@ -242,8 +247,6 @@ export default { console.error = function () { self.log('danger', arguments) } - // temp for debugging - window.Vue = Vue } this.load() From 36ae51a9a3328558d145730c77439ef1460aa1bc Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 19:44:11 -0400 Subject: [PATCH 16/82] fix autocorrect typo --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index dbb910683a2..71a30057701 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -163,7 +163,7 @@ import Vue from 'vue' import debounce from 'lodash/debounce' // temp for debugging compile -if (type of window !== 'undefined') { +if (typeof window !== 'undefined') { window.Vue = Vue } From 15bc886e6b8f45b3b07a8811f60511ad90d260f9 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 20:12:55 -0400 Subject: [PATCH 17/82] Update play.vue --- docs/pages/play.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 71a30057701..72660a62889 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -316,6 +316,9 @@ export default { } // Try to create new VM + const eh = Vue.config.errorHnaddler + Vue.config.errorHandler = (err, vm, info) => {} + try { let options = {} // Try to compile js @@ -353,6 +356,7 @@ export default { } catch (err) { this.log('danger', [err.toString()]) } + Vue.config.errorHandler = eh }, toggleVertical () { this.vertical = !this.vertical From d70adf01c66f3d30ba2c14fd6fa08f6acbd230a7 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 20:46:04 -0400 Subject: [PATCH 18/82] Update play.vue --- docs/pages/play.vue | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 72660a62889..4188c788a11 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -154,7 +154,7 @@ @@ -162,11 +162,6 @@ import Vue from 'vue' import debounce from 'lodash/debounce' -// temp for debugging compile -if (typeof window !== 'undefined') { - window.Vue = Vue -} - const defaultJS = `{ data: { name: 'Zeus' @@ -180,7 +175,26 @@ const defaultHTML = `
// 7 days const maxRetention = 7 * 24 * 60 * 60 * 1000 +// Helper wrapper component +const playErrorBoundary = { + name: 'playErrorBoundary', + data () { + return { error: flase } + }, + errorCaptured (err, vm, info) { + this.error = true + console.error(err, info) + return false + }, + render (h) { + return this.error ? h('p', 'whoops!') : this.slots.default[0] + } +} + export default { + components: { + playErrorBoundary + }, data () { return { html: '', @@ -315,10 +329,6 @@ export default { js = `{${js}}` } - // Try to create new VM - const eh = Vue.config.errorHnaddler - Vue.config.errorHandler = (err, vm, info) => {} - try { let options = {} // Try to compile js @@ -329,15 +339,9 @@ export default { } catch (err) { throw new Error(`compiling JS: ${err.message}`) } - // Try to compile template - try { - let result = Vue.compile(html.replace(/\s{2,}/g, '')) - this.log('info', ['compile result', result]) - } catch (err) { - throw new Error(`compiling template: ${err.message}`) - } + options.components = { playErrorBoundary } options.router = this.$router - options.template = html + options.template = `
${html}
` options.renderError = (h, err) => { const title = h('h4', {}, 'Render Error') const message = h('pre', {staticClass: 'text-small'}, err.message) @@ -356,7 +360,6 @@ export default { } catch (err) { this.log('danger', [err.toString()]) } - Vue.config.errorHandler = eh }, toggleVertical () { this.vertical = !this.vertical From cf8a06f240ce417a20876b7aafe2a6f5839d3c5e Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 20:53:00 -0400 Subject: [PATCH 19/82] Update play.vue --- docs/pages/play.vue | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 4188c788a11..ccfcaaad01a 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -115,9 +115,9 @@
-
+ +
+
@@ -179,7 +179,7 @@ const maxRetention = 7 * 24 * 60 * 60 * 1000 const playErrorBoundary = { name: 'playErrorBoundary', data () { - return { error: flase } + return { error: false } }, errorCaptured (err, vm, info) { this.error = true @@ -339,7 +339,6 @@ export default { } catch (err) { throw new Error(`compiling JS: ${err.message}`) } - options.components = { playErrorBoundary } options.router = this.$router options.template = `
${html}
` options.renderError = (h, err) => { From ff0b9900d76ca15640e605d13b75eedf6330ca44 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 20:59:27 -0400 Subject: [PATCH 20/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index ccfcaaad01a..3c4641570c3 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -187,7 +187,7 @@ const playErrorBoundary = { return false }, render (h) { - return this.error ? h('p', 'whoops!') : this.slots.default[0] + return this.error ? h('p', 'whoops!') : this.$slots.default[0] } } From 5cfc781ae4c6cbb044d700744623d6094009091b Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 21:03:16 -0400 Subject: [PATCH 21/82] Update play.vue --- docs/pages/play.vue | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 3c4641570c3..9abdd41b93d 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -230,11 +230,15 @@ export default { } }, watch: { - html () { - this.run() + html (newVal, oldVal) { + if (newVal! === oldVal) { + this.run() + } }, - js () { - this.run() + js (newVal, oldVal) { + if (newVal !== oldVal) { + this.run() + } } }, created () { From eeddad05cce55c393fde00a389a036d04a86c6ac Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 21:07:09 -0400 Subject: [PATCH 22/82] fix autocorrect --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 9abdd41b93d..e506ac4c04b 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -231,7 +231,7 @@ export default { }, watch: { html (newVal, oldVal) { - if (newVal! === oldVal) { + if (newVal !== oldVal) { this.run() } }, From 5ade36d1bf7f4f4f03cebddf2d4e4c8605500333 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 23:05:19 -0400 Subject: [PATCH 23/82] Update play.vue --- docs/pages/play.vue | 90 ++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 41 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index e506ac4c04b..3eefcf84e07 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -167,6 +167,7 @@ const defaultJS = `{ name: 'Zeus' }, }` + const defaultHTML = `
Hello {{ name }}!
` @@ -175,6 +176,8 @@ const defaultHTML = `
// 7 days const maxRetention = 7 * 24 * 60 * 60 * 1000 +const removeNode = node => node && node.parentNode && node.parentNode.removeChild(node) + // Helper wrapper component const playErrorBoundary = { name: 'playErrorBoundary', @@ -310,59 +313,64 @@ export default { this.playVM.$destroy() } catch (err) { } + removeNode(this.playVM) + this.playVM.$el.innerHTML = '' this.playVM = null this.$refs.result.innerHTML = '' } - }, - _run () { - // Destroy old VM if exists - this.destroyVM() - - // Prepare result area this.$refs.result.innerHTML = '' - const el = document.createElement('div') - this.$refs.result.appendChild(el) - - // Clear messages - this.clear() - - // Build template + }, + createVM () { + let options = {} let js = this.js.trim() - const html = this.html.trim() if (js.indexOf('{') !== 0) { js = `{${js}}` } + // Test javascript try { - let options = {} - // Try to compile js - try { - /* eslint-disable no-eval */ - eval(`options = ${js}`) - /* eslint-enable no-eval */ - } catch (err) { - throw new Error(`compiling JS: ${err.message}`) - } - options.router = this.$router - options.template = `
${html}
` - options.renderError = (h, err) => { - const title = h('h4', {}, 'Render Error') - const message = h('pre', {staticClass: 'text-small'}, err.message) - return h('div', {staticClass: 'alert alert-danger'}, [title, message]) - } - options.el = el - const vm = new Vue(options) - if (vm) { - this.playVM = vm - // commit latest changes to localStorage - this.commit() - } else { - this.destroyVM() - throw new Error('unable to create Vue instance') + /* eslint-disable no-eval */ + eval(`options = ${js}`) + /* eslint-enable no-eval */ + } catch (err) { + this.log('danger', [`Error compiling JS: ${err.message}`]) + this.playVM = null + return + } + + const holder = document.createElement('div') + this.$refs.result.appendChild(holder) + const self = this + + options = Object.assign({}, options, { + template = `
${this.html,trim()}
`, + el: holder, + router: this.$router, + errorCaptured (err, vm, info) { + self.log('danger', [err, info]) + return false + }, + renderError (h, err) { + self.log('danger', [err]) + return h('div', ['Whoops!`, h('br'), err.message]) } + }) + + try { + this.playVM = new Vue(options) } catch (err) { - this.log('danger', [err.toString()]) + this.log('danger', [`Error creating Vue instance: ${err.message}`]) + this.playVM = null + return } + + this.save() + }, + _run () { + // Destroy old VM if exists + this.destroyVM() + this.clear() + this.createVM() }, toggleVertical () { this.vertical = !this.vertical @@ -390,7 +398,7 @@ export default { this.js = ls.getItem('playground_js') || defaultJS.trim() this.html = ls.getItem('playground_html') || defaultHTML.trim() }, - commit () { + save () { if (typeof window === 'undefined' || !window.localStorage) { return } From 61f7a6420f9b28c450bf1f3441284caf505d540d Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 23:06:53 -0400 Subject: [PATCH 24/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 3eefcf84e07..930072a7e41 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -352,7 +352,7 @@ export default { }, renderError (h, err) { self.log('danger', [err]) - return h('div', ['Whoops!`, h('br'), err.message]) + return h('div', ['Whoops!', h('br'), err.message]) } }) From 1689d8b8d58b377151cbb1514a437106bbd8440d Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 23:16:42 -0400 Subject: [PATCH 25/82] Update play.vue --- docs/pages/play.vue | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 930072a7e41..e916f8c35bc 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -343,14 +343,15 @@ export default { const self = this options = Object.assign({}, options, { - template = `
${this.html,trim()}
`, + template = `
${this.html.trim()}
`, el: holder, - router: this.$router, + router: self.$router, errorCaptured (err, vm, info) { self.log('danger', [err, info]) return false }, renderError (h, err) { + // Only works in dev mode self.log('danger', [err]) return h('div', ['Whoops!', h('br'), err.message]) } @@ -369,7 +370,9 @@ export default { _run () { // Destroy old VM if exists this.destroyVM() + // clear the log this.clear() + // create and render the instance this.createVM() }, toggleVertical () { From 509398ea3229367d867166f853adb4adf32f4b2b Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 23:21:41 -0400 Subject: [PATCH 26/82] Update play.vue --- docs/pages/play.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index e916f8c35bc..cbc0f20e3a8 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -343,9 +343,9 @@ export default { const self = this options = Object.assign({}, options, { - template = `
${this.html.trim()}
`, + template: `
${this.html.trim()}
`, el: holder, - router: self.$router, + router: this.$router, errorCaptured (err, vm, info) { self.log('danger', [err, info]) return false From 565e10e883c5a2f1ef3435ebb779d8fbbdda525e Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 23:32:24 -0400 Subject: [PATCH 27/82] debugging... --- docs/pages/play.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index cbc0f20e3a8..bbb19141fae 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -308,6 +308,7 @@ export default { this.messages.unshift([tag, argsArr.map(String).join(' ')]) }, destroyVM () { + console.log('destroyVM...') if (this.playVM) { try { this.playVM.$destroy() @@ -321,6 +322,7 @@ export default { this.$refs.result.innerHTML = '' }, createVM () { + console.log('createVM...') let options = {} let js = this.js.trim() if (js.indexOf('{') !== 0) { From 92b91998d626221307daae73a1125950e0f95f9e Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 14 Nov 2018 23:51:47 -0400 Subject: [PATCH 28/82] Update play.vue --- docs/pages/play.vue | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index bbb19141fae..902304a9d91 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -308,21 +308,18 @@ export default { this.messages.unshift([tag, argsArr.map(String).join(' ')]) }, destroyVM () { - console.log('destroyVM...') if (this.playVM) { try { this.playVM.$destroy() } catch (err) { } - removeNode(this.playVM) + removeNode(this.playVM.$el) this.playVM.$el.innerHTML = '' - this.playVM = null - this.$refs.result.innerHTML = '' } + this.playVM = null this.$refs.result.innerHTML = '' }, createVM () { - console.log('createVM...') let options = {} let js = this.js.trim() if (js.indexOf('{') !== 0) { From 5c3713c6d9d3b3d78d6514a84b9fb0fce8d43305 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 01:40:01 -0400 Subject: [PATCH 29/82] Update play.vue --- docs/pages/play.vue | 83 +++++++++++++++------------------------------ 1 file changed, 27 insertions(+), 56 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 902304a9d91..04cbcb0c143 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -115,9 +115,7 @@
- -
- +
@@ -163,9 +161,9 @@ import Vue from 'vue' import debounce from 'lodash/debounce' const defaultJS = `{ - data: { - name: 'Zeus' - }, + data: { + name: 'Zeus' + }, }` const defaultHTML = `
@@ -178,26 +176,7 @@ const maxRetention = 7 * 24 * 60 * 60 * 1000 const removeNode = node => node && node.parentNode && node.parentNode.removeChild(node) -// Helper wrapper component -const playErrorBoundary = { - name: 'playErrorBoundary', - data () { - return { error: false } - }, - errorCaptured (err, vm, info) { - this.error = true - console.error(err, info) - return false - }, - render (h) { - return this.error ? h('p', 'whoops!') : this.$slots.default[0] - } -} - export default { - components: { - playErrorBoundary - }, data () { return { html: '', @@ -260,19 +239,15 @@ export default { console.warn = function () { self.log('warning', arguments) } - console.log = function () { self.log('info', arguments) } - console.error = function () { self.log('danger', arguments) } } - this.load() - // not really needed as loading will trigger the watchers - // this.$nextTick(this.run) + this.$nextTick(this.load) }, beforeDestroy () { if (typeof window !== 'undefined') { @@ -320,14 +295,15 @@ export default { this.$refs.result.innerHTML = '' }, createVM () { - let options = {} + let options let js = this.js.trim() - if (js.indexOf('{') !== 0) { - js = `{${js}}` - } + let html = this.html.trim() - // Test javascript + // Test JavaScript try { + if (js.indexOf('{') !== 0) { + js = `{${js}}` + } /* eslint-disable no-eval */ eval(`options = ${js}`) /* eslint-enable no-eval */ @@ -337,30 +313,25 @@ export default { return } - const holder = document.createElement('div') - this.$refs.result.appendChild(holder) - const self = this - - options = Object.assign({}, options, { - template: `
${this.html.trim()}
`, - el: holder, - router: this.$router, - errorCaptured (err, vm, info) { - self.log('danger', [err, info]) - return false - }, - renderError (h, err) { - // Only works in dev mode - self.log('danger', [err]) - return h('div', ['Whoops!', h('br'), err.message]) - } - }) - + // Build vm and mount it try { - this.playVM = new Vue(options) + const holder = document.createElement('div') + this.$refs.result.appendChild(holder) + const self = this + html = `
${html}
` + thiss.playVM = new Vue(Object.assign({}, options, { + template: html, + // router: this.$router, + el: holder, + renderError (h, err) { + // Only works in dev mode + self.log('danger', [err]) + return h('div', {class: 'text-danger'}, [h('h5', 'Whoops!'], h('pre', err.toString())]) + } + })) } catch (err) { + this.destroyVM() this.log('danger', [`Error creating Vue instance: ${err.message}`]) - this.playVM = null return } From eec9be716137a81ac802331cc5890673371e59af Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 01:50:27 -0400 Subject: [PATCH 30/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 04cbcb0c143..9cc5c94ac6b 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -326,7 +326,7 @@ export default { renderError (h, err) { // Only works in dev mode self.log('danger', [err]) - return h('div', {class: 'text-danger'}, [h('h5', 'Whoops!'], h('pre', err.toString())]) + return h('div', {class: 'text-danger'}, [h('h5', 'Whoops!']), h('pre', err.toString())]) } })) } catch (err) { From e2bb65d20f0aa04ce1786901719764c517e6f02d Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 02:27:45 -0400 Subject: [PATCH 31/82] Update play.vue --- docs/pages/play.vue | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 9cc5c94ac6b..43e584d39a6 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -314,26 +314,36 @@ export default { } // Build vm and mount it + const self = this + const oldErrHandler = Vue.config.errorHandler + Vue.config.errorHandler = (err, vm, info) => { + self.log('danger', [err.toString()]) + } try { const holder = document.createElement('div') this.$refs.result.appendChild(holder) - const self = this html = `
${html}
` - thiss.playVM = new Vue(Object.assign({}, options, { + this.playVM = new Vue(Object.assign({}, options, { template: html, // router: this.$router, el: holder, renderError (h, err) { // Only works in dev mode self.log('danger', [err]) - return h('div', {class: 'text-danger'}, [h('h5', 'Whoops!']), h('pre', err.toString())]) + return h( + 'div', + {class: 'text-danger'}, + [h('h5', 'Whoops!']), h('pre', err.toString())] + ) } })) } catch (err) { this.destroyVM() this.log('danger', [`Error creating Vue instance: ${err.message}`]) + Vue.config.errorHandler = oldErrHandler return } + Vue.config.errorHandler = oldErrHandler this.save() }, From f282ec9553c059452b20420cd09765dcb6372082 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 02:36:16 -0400 Subject: [PATCH 32/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 43e584d39a6..4bd49b3b250 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -333,7 +333,7 @@ export default { return h( 'div', {class: 'text-danger'}, - [h('h5', 'Whoops!']), h('pre', err.toString())] + [h('h5', 'Whoops!'), h('pre', err.toString())] ) } })) From 64d21c8090c64ce8f572879105b3e40104833016 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 03:02:32 -0400 Subject: [PATCH 33/82] Update play.vue --- docs/pages/play.vue | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 4bd49b3b250..337e7ed1377 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -259,28 +259,32 @@ export default { }, methods: { log (tag, args) { + let skipConsole = false // We have to ignore props mutation warning due to vue bug when we have two instances if (String(args[0]).indexOf('Avoid mutating a prop directly') !== -1) { return } - - const argsArr = [] - for (let i = 0; i < args.length; i++) { - argsArr.push(args[i]) + if (String(args[0]).indexOf('is not defined') !== -1) { + skipConsole = true + } + if (String(args[0]).indexOf('Illegal invocation') !== -1) { + skipConsole = true } - let oLog = this.originalLog - if (tag === 'danger') { - oLog = this.originalError - } else if (tag === 'warning') { - oLog = this.originalWarn + if (!skipConsole) { + let oLog = this.originalLog + if (tag === 'danger') { + oLog = this.originalError + } else if (tag === 'warning') { + oLog = this.originalWarn + } + oLog.apply(console, [].concat(tag, args)) } - oLog.apply(console, [].concat(tag, argsArr)) if (this.messages.length > 10) { this.messages.splice(10) } - this.messages.unshift([tag, argsArr.map(String).join(' ')]) + this.messages.unshift([tag, args.map(String).join(' ')]) }, destroyVM () { if (this.playVM) { @@ -314,8 +318,6 @@ export default { } // Build vm and mount it - const self = this - const oldErrHandler = Vue.config.errorHandler Vue.config.errorHandler = (err, vm, info) => { self.log('danger', [err.toString()]) } @@ -340,10 +342,8 @@ export default { } catch (err) { this.destroyVM() this.log('danger', [`Error creating Vue instance: ${err.message}`]) - Vue.config.errorHandler = oldErrHandler return } - Vue.config.errorHandler = oldErrHandler this.save() }, From 262520529e6f32533022fd34e77717312da9279b Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 03:11:26 -0400 Subject: [PATCH 34/82] Update play.vue --- docs/pages/play.vue | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 337e7ed1377..33c143ce4ac 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -284,7 +284,7 @@ export default { if (this.messages.length > 10) { this.messages.splice(10) } - this.messages.unshift([tag, args.map(String).join(' ')]) + this.messages.unshift([tag, [].concat(args).map(String).join(' ')]) }, destroyVM () { if (this.playVM) { @@ -318,10 +318,8 @@ export default { } // Build vm and mount it - Vue.config.errorHandler = (err, vm, info) => { - self.log('danger', [err.toString()]) - } try { + const self = this const holder = document.createElement('div') this.$refs.result.appendChild(holder) html = `
${html}
` From e31ab2313093bd51771d6042e9a104a4a7deeed3 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 03:25:11 -0400 Subject: [PATCH 35/82] Update play.vue --- docs/pages/play.vue | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 33c143ce4ac..2e65371c18a 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -236,6 +236,7 @@ export default { this.originalError = console.error const self = this + if (false) { console.warn = function () { self.log('warning', arguments) } @@ -245,6 +246,7 @@ export default { console.error = function () { self.log('danger', arguments) } + } } this.$nextTick(this.load) @@ -259,27 +261,11 @@ export default { }, methods: { log (tag, args) { - let skipConsole = false // We have to ignore props mutation warning due to vue bug when we have two instances if (String(args[0]).indexOf('Avoid mutating a prop directly') !== -1) { return } - if (String(args[0]).indexOf('is not defined') !== -1) { - skipConsole = true - } - if (String(args[0]).indexOf('Illegal invocation') !== -1) { - skipConsole = true - } - - if (!skipConsole) { - let oLog = this.originalLog - if (tag === 'danger') { - oLog = this.originalError - } else if (tag === 'warning') { - oLog = this.originalWarn - } - oLog.apply(console, [].concat(tag, args)) - } + this.originalLog.apply(console, [].concat(tag, args)) if (this.messages.length > 10) { this.messages.splice(10) From b3b2ea53d308e9b514e314fef2b2b33f1982d0a2 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 03:50:40 -0400 Subject: [PATCH 36/82] store orignal loggers on non reactive props --- docs/pages/play.vue | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 2e65371c18a..43659a0d8cc 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -182,9 +182,6 @@ export default { html: '', js: '', messages: [], - originalLog: null, - originalWarn: null, - originalError: null, vertical: false, full: false } @@ -226,17 +223,12 @@ export default { created () { // Non reactive property to store the playground vm this.playVM = null - // Create our debounced runner - this.run = debounce(this._run, 500) - }, - mounted () { + // original console loggers if (typeof window !== 'undefined') { this.originalLog = console.log this.originalWarn = console.warn this.originalError = console.error const self = this - - if (false) { console.warn = function () { self.log('warning', arguments) } @@ -246,9 +238,11 @@ export default { console.error = function () { self.log('danger', arguments) } - } } - + // Create our debounced runner + this.run = debounce(this._run, 500) + }, + mounted () { this.$nextTick(this.load) }, beforeDestroy () { @@ -265,7 +259,7 @@ export default { if (String(args[0]).indexOf('Avoid mutating a prop directly') !== -1) { return } - this.originalLog.apply(console, [].concat(tag, args)) + // this.originalLog.apply(console, [].concat(tag, args)) if (this.messages.length > 10) { this.messages.splice(10) From 5079e0138dc0cd5d0de6186afe45d3e073a3e36f Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 03:58:24 -0400 Subject: [PATCH 37/82] commenting out console overrides --- docs/pages/play.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 43659a0d8cc..d8badc6370e 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -229,6 +229,7 @@ export default { this.originalWarn = console.warn this.originalError = console.error const self = this +/* console.warn = function () { self.log('warning', arguments) } @@ -238,6 +239,7 @@ export default { console.error = function () { self.log('danger', arguments) } +*/ } // Create our debounced runner this.run = debounce(this._run, 500) From 209b17e8fffacf05c952212d5de23fdfcf0b7e11 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 13:46:26 -0400 Subject: [PATCH 38/82] disable global error handler --- docs/pages/play.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index d8badc6370e..63418705043 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -223,6 +223,9 @@ export default { created () { // Non reactive property to store the playground vm this.playVM = null + // disable global error handler + this.oldErrorHandler = Vue.config.errorHandler + Vue.config.errorHandler = null // original console loggers if (typeof window !== 'undefined') { this.originalLog = console.log @@ -253,6 +256,7 @@ export default { console.warn = this.originalWarn console.error = this.originalError } + Vue.config.errorHandler = this.oldErrorHandler this.destroyVM() }, methods: { From c87ed349963382b856bd978985e93925f6bb108c Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 15:00:49 -0400 Subject: [PATCH 39/82] only override console.log --- docs/pages/play.vue | 87 +++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 54 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 63418705043..6d3cd554a9e 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -70,9 +70,11 @@ {{ full ? 'Split' : 'Full' }}
+ <div> + </div>
@@ -179,8 +181,10 @@ const removeNode = node => node && node.parentNode && node.parentNode.removeChil export default { data () { return { - html: '', - js: '', + ctx: { + html: '', + js: '' + }, messages: [], vertical: false, full: false @@ -201,60 +205,45 @@ export default { ] }, js_fiddle () { - const js = `new Vue({el:'#app',\r\n${this.js.trim()}})` + const js = `new Vue({el:'#app',\r\n${this.ctx.js.trim()}})` return `window.onload = function() {${js}}` }, html_fiddle () { - return `
\r\n${this.html.trim()}\r\n
` + return `
\r\n${this.ctx.html.trim()}\r\n
` } }, watch: { - html (newVal, oldVal) { - if (newVal !== oldVal) { - this.run() - } - }, - js (newVal, oldVal) { - if (newVal !== oldVal) { - this.run() - } + ctx () { + this.run() } }, created () { + const self = this // Non reactive property to store the playground vm this.playVM = null // disable global error handler this.oldErrorHandler = Vue.config.errorHandler - Vue.config.errorHandler = null - // original console loggers + Vue.config.errorHandler = (err, vm, info) => { + self.log('danger', [`Error in ${info}: [${err.name}] ${err.message}`]) + } + // original console logger if (typeof window !== 'undefined') { this.originalLog = console.log - this.originalWarn = console.warn - this.originalError = console.error - const self = this -/* - console.warn = function () { - self.log('warning', arguments) - } console.log = function () { self.log('info', arguments) + this.originalLog.apply(console, arguements) } - console.error = function () { - self.log('danger', arguments) - } -*/ } // Create our debounced runner this.run = debounce(this._run, 500) }, mounted () { + // load our content into the editors after dom updated this.$nextTick(this.load) }, beforeDestroy () { - if (typeof window !== 'undefined') { + if (typeof window !== 'undefined' && this.originalLog) { console.log = this.originalLog - console.warn = this.originalWarn - console.error = this.originalError } Vue.config.errorHandler = this.oldErrorHandler this.destroyVM() @@ -265,8 +254,6 @@ export default { if (String(args[0]).indexOf('Avoid mutating a prop directly') !== -1) { return } - // this.originalLog.apply(console, [].concat(tag, args)) - if (this.messages.length > 10) { this.messages.splice(10) } @@ -276,18 +263,18 @@ export default { if (this.playVM) { try { this.playVM.$destroy() + removeNode(this.playVM.$el) + this.playVM.$el.innerHTML = '' } catch (err) { } - removeNode(this.playVM.$el) - this.playVM.$el.innerHTML = '' } this.playVM = null this.$refs.result.innerHTML = '' }, createVM () { let options - let js = this.js.trim() - let html = this.html.trim() + let js = this.ctx.js.trim() + let html = this.ctx.html.trim() // Test JavaScript try { @@ -311,17 +298,9 @@ export default { html = `
${html}
` this.playVM = new Vue(Object.assign({}, options, { template: html, - // router: this.$router, - el: holder, - renderError (h, err) { - // Only works in dev mode - self.log('danger', [err]) - return h( - 'div', - {class: 'text-danger'}, - [h('h5', 'Whoops!'), h('pre', err.toString())] - ) - } + el.holder, + // router needed for tooltips and popovers so they hide when route changes + router: this.$router })) } catch (err) { this.destroyVM() @@ -351,8 +330,8 @@ export default { load () { const ls = window && window.localStorage if (!ls) { - this.js = defaultJS.trim() - this.html = defaultHTML.trim() + this.ctx.js = defaultJS.trim() + this.ctx.html = defaultHTML.trim() return } const ts = parseInt(ls.getItem('playground_ts'), 10) || 0 @@ -362,16 +341,16 @@ export default { ls.removeItem('playground_html') ls.removeItem('playground_ts') } - this.js = ls.getItem('playground_js') || defaultJS.trim() - this.html = ls.getItem('playground_html') || defaultHTML.trim() + this.ctx.js = ls.getItem('playground_js') || defaultJS.trim() + this.ctx.html = ls.getItem('playground_html') || defaultHTML.trim() }, save () { if (typeof window === 'undefined' || !window.localStorage) { return } try { - window.localStorage.setItem('playground_js', this.js) - window.localStorage.setItem('playground_html', this.html) + window.localStorage.setItem('playground_js', this.ctx.js) + window.localStorage.setItem('playground_html', this.ctx.html) window.localStorage.setItem('playground_ts', String(Date.now())) } catch (err) { // silently ignore errors on safari iOS private mode From 7973e9e1f0a56a44a52cdbc4dfb53a917d2256f1 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 15:04:52 -0400 Subject: [PATCH 40/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 6d3cd554a9e..2168f37b313 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -298,7 +298,7 @@ export default { html = `
${html}
` this.playVM = new Vue(Object.assign({}, options, { template: html, - el.holder, + el: holder, // router needed for tooltips and popovers so they hide when route changes router: this.$router })) From 983137b3ee7de2887208c471a6ba8951d3a7deb3 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 15:49:02 -0400 Subject: [PATCH 41/82] Update play.vue --- docs/pages/play.vue | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 2168f37b313..a603514cdbf 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -70,11 +70,9 @@ {{ full ? 'Split' : 'Full' }} - <div> - </div>
{ - self.log('danger', [`Error in ${info}: [${err.name}] ${err.message}`]) + self.log('danger', `Error in ${info}: [${err.name}] ${err.message}`) } // original console logger - if (typeof window !== 'undefined') { + if (typeof window !== 'undefined' && console) { this.originalLog = console.log console.log = function () { - self.log('info', arguments) - this.originalLog.apply(console, arguements) + self.log('info', ...arguments) + self.originalLog.apply(console, arguments) } } // Create our debounced runner @@ -249,7 +247,7 @@ export default { this.destroyVM() }, methods: { - log (tag, args) { + log (tag, ...args) { // We have to ignore props mutation warning due to vue bug when we have two instances if (String(args[0]).indexOf('Avoid mutating a prop directly') !== -1) { return @@ -257,7 +255,7 @@ export default { if (this.messages.length > 10) { this.messages.splice(10) } - this.messages.unshift([tag, [].concat(args).map(String).join(' ')]) + this.messages.unshift([tag, args.map(String).join(' ')]) }, destroyVM () { if (this.playVM) { @@ -273,38 +271,33 @@ export default { }, createVM () { let options - let js = this.ctx.js.trim() - let html = this.ctx.html.trim() + const js = this.ctx.js.trim() + const html = this.ctx.html.trim() // Test JavaScript try { - if (js.indexOf('{') !== 0) { - js = `{${js}}` - } /* eslint-disable no-eval */ eval(`options = ${js}`) /* eslint-enable no-eval */ } catch (err) { - this.log('danger', [`Error compiling JS: ${err.message}`]) + this.log('danger', `Error compiling JS: ${err.message}`) this.playVM = null return } // Build vm and mount it try { - const self = this const holder = document.createElement('div') this.$refs.result.appendChild(holder) - html = `
${html}
` this.playVM = new Vue(Object.assign({}, options, { - template: html, + template: `
${html}
`, el: holder, // router needed for tooltips and popovers so they hide when route changes - router: this.$router + router: self.$router })) } catch (err) { this.destroyVM() - this.log('danger', [`Error creating Vue instance: ${err.message}`]) + this.log('danger', `Error creating Vue instance: ${err.message}`) return } From cf65c5db720a43e3cd8880ca50cd858fdab24917 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 16:05:05 -0400 Subject: [PATCH 42/82] Update play.vue --- docs/pages/play.vue | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index a603514cdbf..16c02483953 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -71,7 +71,7 @@
@@ -91,7 +91,7 @@ @@ -137,7 +137,9 @@
- {{ message[0] }} + {{ + message[0] === 'danger' ? 'X' : '?' + }} {{ message[1] }}
@@ -179,10 +181,8 @@ const removeNode = node => node && node.parentNode && node.parentNode.removeChil export default { data () { return { - ctx: { - html: '', - js: '' - }, + html: '', + js: '', messages: [], vertical: false, full: false @@ -203,15 +203,18 @@ export default { ] }, js_fiddle () { - const js = `new Vue({el:'#app',\r\n${this.ctx.js.trim()}})` + const js = `new Vue({el:'#app',\r\n${this.js.trim()}})` return `window.onload = function() {${js}}` }, html_fiddle () { - return `
\r\n${this.ctx.html.trim()}\r\n
` + return `
\r\n${this.html.trim()}\r\n
` } }, watch: { - ctx () { + html () { + this.run() + }, + js () { this.run() } }, @@ -223,6 +226,7 @@ export default { this.oldErrorHandler = Vue.config.errorHandler Vue.config.errorHandler = (err, vm, info) => { self.log('danger', `Error in ${info}: [${err.name}] ${err.message}`) + // Note Vue still sends original error to console.error() } // original console logger if (typeof window !== 'undefined' && console) { @@ -271,8 +275,8 @@ export default { }, createVM () { let options - const js = this.ctx.js.trim() - const html = this.ctx.html.trim() + const js = this.js.trim() + const html = this.html.trim() // Test JavaScript try { @@ -323,8 +327,8 @@ export default { load () { const ls = window && window.localStorage if (!ls) { - this.ctx.js = defaultJS.trim() - this.ctx.html = defaultHTML.trim() + this.js = defaultJS.trim() + this.html = defaultHTML.trim() return } const ts = parseInt(ls.getItem('playground_ts'), 10) || 0 @@ -334,16 +338,16 @@ export default { ls.removeItem('playground_html') ls.removeItem('playground_ts') } - this.ctx.js = ls.getItem('playground_js') || defaultJS.trim() - this.ctx.html = ls.getItem('playground_html') || defaultHTML.trim() + this.js = ls.getItem('playground_js') || defaultJS.trim() + this.html = ls.getItem('playground_html') || defaultHTML.trim() }, save () { if (typeof window === 'undefined' || !window.localStorage) { return } try { - window.localStorage.setItem('playground_js', this.ctx.js) - window.localStorage.setItem('playground_html', this.ctx.html) + window.localStorage.setItem('playground_js', this.js) + window.localStorage.setItem('playground_html', this.html) window.localStorage.setItem('playground_ts', String(Date.now())) } catch (err) { // silently ignore errors on safari iOS private mode From 37c646cada902790e147e981636619cc8dd4cdf6 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 16:22:11 -0400 Subject: [PATCH 43/82] Update play.vue --- docs/pages/play.vue | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 16c02483953..05f716f2860 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -162,6 +162,11 @@ import Vue from 'vue' import debounce from 'lodash/debounce' +// for temp debugging +if (typeof window !== 'undefined') { + window.Vue = Vue +} + const defaultJS = `{ data: { name: 'Zeus' @@ -226,14 +231,14 @@ export default { this.oldErrorHandler = Vue.config.errorHandler Vue.config.errorHandler = (err, vm, info) => { self.log('danger', `Error in ${info}: [${err.name}] ${err.message}`) - // Note Vue still sends original error to console.error() + // Note Vue still sends original error to console.error()!!! } // original console logger if (typeof window !== 'undefined' && console) { this.originalLog = console.log console.log = function () { self.log('info', ...arguments) - self.originalLog.apply(console, arguments) + // self.originalLog.apply(console, arguments) } } // Create our debounced runner @@ -301,7 +306,8 @@ export default { })) } catch (err) { this.destroyVM() - this.log('danger', `Error creating Vue instance: ${err.message}`) + // send to errorHandler + throw err return } From 5a42b2d883b4f907bdfaed03f7d377bf87e222f7 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 16:48:17 -0400 Subject: [PATCH 44/82] Update play.vue --- docs/pages/play.vue | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 05f716f2860..bf81d869b85 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -229,10 +229,13 @@ export default { this.playVM = null // disable global error handler this.oldErrorHandler = Vue.config.errorHandler + Vue.config.errorHandler = null +/* Vue.config.errorHandler = (err, vm, info) => { self.log('danger', `Error in ${info}: [${err.name}] ${err.message}`) // Note Vue still sends original error to console.error()!!! } +*/ // original console logger if (typeof window !== 'undefined' && console) { this.originalLog = console.log @@ -293,21 +296,26 @@ export default { this.playVM = null return } + + if (!html) { + this.log('danger', 'No template provided') + return + } // Build vm and mount it + let holder = document.createElement('div') + this.$refs.result.appendChild(holder) try { - const holder = document.createElement('div') - this.$refs.result.appendChild(holder) this.playVM = new Vue(Object.assign({}, options, { - template: `
${html}
`, + template: `
${html}
`, el: holder, // router needed for tooltips and popovers so they hide when route changes - router: self.$router + router: this.$router })) } catch (err) { + holder = null this.destroyVM() - // send to errorHandler - throw err + self.log('danger', `Error in render: [${err.name}] ${err.message}`) return } From 24cc8e987c0a7d8fb69b29be93d48d2275a0a3ac Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 17:16:37 -0400 Subject: [PATCH 45/82] Update play.vue --- docs/pages/play.vue | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index bf81d869b85..1f3792e9220 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -162,11 +162,6 @@ import Vue from 'vue' import debounce from 'lodash/debounce' -// for temp debugging -if (typeof window !== 'undefined') { - window.Vue = Vue -} - const defaultJS = `{ data: { name: 'Zeus' @@ -230,18 +225,21 @@ export default { // disable global error handler this.oldErrorHandler = Vue.config.errorHandler Vue.config.errorHandler = null -/* Vue.config.errorHandler = (err, vm, info) => { - self.log('danger', `Error in ${info}: [${err.name}] ${err.message}`) - // Note Vue still sends original error to console.error()!!! + try { + self.log.call(self, 'danger', `Error in ${info}: [${err.name}] ${err.message}`) + // Note Vue still sends original error to console.error()!!! + } catch (err) { + // prevent possible endless loops + } } -*/ // original console logger if (typeof window !== 'undefined' && console) { + that = console this.originalLog = console.log console.log = function () { - self.log('info', ...arguments) - // self.originalLog.apply(console, arguments) + self.log.call(self, 'info', ...arguments) + // self.originalLog.apply(that, arguments) } } // Create our debounced runner From ac3e2e6223b067a8d366ba3e2da4a7613bcfc3f3 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 17:48:14 -0400 Subject: [PATCH 46/82] Update play.vue --- docs/pages/play.vue | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 1f3792e9220..76da23e2f1e 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -114,9 +114,7 @@ {{ vertical ? 'Horizontal' : 'Vertical' }} -
-
-
+
@@ -133,17 +131,17 @@ Clear -
-
+
  • {{ message[0] === 'danger' ? 'X' : '?' }} {{ message[1] }} -
    -
  • -
    + + @@ -235,7 +233,7 @@ export default { } // original console logger if (typeof window !== 'undefined' && console) { - that = console + const that = console this.originalLog = console.log console.log = function () { self.log.call(self, 'info', ...arguments) @@ -320,6 +318,9 @@ export default { this.save() }, _run () { + if (this.$isServer) { + return + } // Destroy old VM if exists this.destroyVM() // clear the log From b18f3f4e410ba9a5c9cf77c1987d8566d3aa38be Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 19:15:05 -0400 Subject: [PATCH 47/82] Update play.vue --- docs/pages/play.vue | 69 ++++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 26 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 76da23e2f1e..c26cf9b3c55 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -118,31 +118,30 @@ -
    -
    -
    - Console - - Clear - -
    -
      -
    • - {{ - message[0] === 'danger' ? 'X' : '?' - }} - {{ message[1] }} -
    • -
    +
    +
    + Console + + Clear +
    +
      +
    • + {{ + message[0] === 'danger' ? 'X' : '?' + }} + {{ message[1] }} +
    • +
    +
     
    @@ -222,15 +221,17 @@ export default { this.playVM = null // disable global error handler this.oldErrorHandler = Vue.config.errorHandler +/* Vue.config.errorHandler = null Vue.config.errorHandler = (err, vm, info) => { try { - self.log.call(self, 'danger', `Error in ${info}: [${err.name}] ${err.message}`) + self.log.call(self, 'danger', `Error in ${info}: ${String(err)}`) // Note Vue still sends original error to console.error()!!! } catch (err) { // prevent possible endless loops } } +*/ // original console logger if (typeof window !== 'undefined' && console) { const that = console @@ -267,12 +268,18 @@ export default { }, destroyVM () { if (this.playVM) { + let parent try { + parent = this.playVM.$parent this.playVM.$destroy() removeNode(this.playVM.$el) this.playVM.$el.innerHTML = '' } catch (err) { } + try { + parent.$destroy() + } catch (err) { + } } this.playVM = null this.$refs.result.innerHTML = '' @@ -302,16 +309,26 @@ export default { let holder = document.createElement('div') this.$refs.result.appendChild(holder) try { + const fakeParent = new Vue({ + template: '
    ', + errorCaptured(err, vm, info) { + self.log.call(self, 'danger', `Error in ${info}: ${err.message}`) + // return false so we don't propagate to global error handler + return false + }, + }) this.playVM = new Vue(Object.assign({}, options, { template: `
    ${html}
    `, el: holder, + // we set a fake parent so we can capture errors + parent: fakeParent, // router needed for tooltips and popovers so they hide when route changes router: this.$router })) } catch (err) { holder = null this.destroyVM() - self.log('danger', `Error in render: [${err.name}] ${err.message}`) + self.log('danger', `Error in render: ${err.message}`) return } From 2f8099f8bf1acbbbad321c6f84dcbacf22759765 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 20:09:36 -0400 Subject: [PATCH 48/82] Update play.vue --- docs/pages/play.vue | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index c26cf9b3c55..95cae3f0dfe 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -306,16 +306,18 @@ export default { } // Build vm and mount it + log = this.log let holder = document.createElement('div') this.$refs.result.appendChild(holder) + const errHandler = (err, vm, info) => { + log('danger', `Error in ${info}: ${err.message}`) + return false + } + try { const fakeParent = new Vue({ template: '
    ', - errorCaptured(err, vm, info) { - self.log.call(self, 'danger', `Error in ${info}: ${err.message}`) - // return false so we don't propagate to global error handler - return false - }, + errorCaptured: errHandler }) this.playVM = new Vue(Object.assign({}, options, { template: `
    ${html}
    `, @@ -328,7 +330,7 @@ export default { } catch (err) { holder = null this.destroyVM() - self.log('danger', `Error in render: ${err.message}`) + errhandler(err, null, 'vm create') return } From ef32e27770894154e77436c1eacdb91a5fb6c565 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 20:13:48 -0400 Subject: [PATCH 49/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 95cae3f0dfe..cce894b91dd 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -306,7 +306,7 @@ export default { } // Build vm and mount it - log = this.log + const log = this.log let holder = document.createElement('div') this.$refs.result.appendChild(holder) const errHandler = (err, vm, info) => { From cfdde3a698678a3a632afe0b62f103fba5387323 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 21:30:43 -0400 Subject: [PATCH 50/82] Update play.vue --- docs/pages/play.vue | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index cce894b91dd..ddcd23bf065 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -13,12 +13,12 @@ Docs for more info about available tags and usage.
    -
    +
    + v-if="html || js"> { + log('danger', `Error in ${info}: ${err.message}`) + return false + } // Test JavaScript try { @@ -295,32 +301,42 @@ export default { eval(`options = ${js}`) /* eslint-enable no-eval */ } catch (err) { - this.log('danger', `Error compiling JS: ${err.message}`) + errHandler(err, null, 'javascript') this.playVM = null return } - if (!html) { - this.log('danger', 'No template provided') + if (!html && !options.template && !options.render && !(options.staticRenderFns && options.render)) { + this.log('danger', 'No template or render function provided') return } - // Build vm and mount it - const log = this.log + const res + if (html) { + try { + res = Vue.compile(`
    ${html}
    `) + } catch (err) { + errHandler(err, null, 'compiling template') + return + } + } + + if (html && res) { + delete options.template + // we use render functions so that we can trap errors in the templates + options.render = res.render + options.staticRenderFns = res.staticRenderFns + } + let holder = document.createElement('div') this.$refs.result.appendChild(holder) - const errHandler = (err, vm, info) => { - log('danger', `Error in ${info}: ${err.message}`) - return false - } - + try { const fakeParent = new Vue({ template: '
    ', errorCaptured: errHandler }) this.playVM = new Vue(Object.assign({}, options, { - template: `
    ${html}
    `, el: holder, // we set a fake parent so we can capture errors parent: fakeParent, From daf046e43bc1c71a2bbd1e29d783011707d8c371 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 21:35:49 -0400 Subject: [PATCH 51/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index ddcd23bf065..9cdc0f88ea4 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -311,7 +311,7 @@ export default { return } - const res + let res if (html) { try { res = Vue.compile(`
    ${html}
    `) From 96abdf88bc8692b24e204ed2432ac197a7140e51 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Thu, 15 Nov 2018 21:47:47 -0400 Subject: [PATCH 52/82] Update play.vue --- docs/pages/play.vue | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 9cdc0f88ea4..1284fba9a5c 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -221,8 +221,8 @@ export default { this.playVM = null // disable global error handler this.oldErrorHandler = Vue.config.errorHandler -/* Vue.config.errorHandler = null +/* Vue.config.errorHandler = (err, vm, info) => { try { self.log.call(self, 'danger', `Error in ${info}: ${String(err)}`) @@ -288,10 +288,11 @@ export default { let options const js = this.js.trim() const html = this.html.trim() - const log = this.log + const self = this const errHandler = (err, vm, info) => { - log('danger', `Error in ${info}: ${err.message}`) + self.log('danger', `Error in ${info}: ${err.message}`) + self.destroyVM() return false } @@ -312,22 +313,18 @@ export default { } let res - if (html) { + if (html || options.template) { try { - res = Vue.compile(`
    ${html}
    `) + res = Vue.compile(`
    ${html || options.template}
    `) + options.render = res.render + options.staticRenderFns = res.staticRenderFns + delete options.template } catch (err) { errHandler(err, null, 'compiling template') return } } - if (html && res) { - delete options.template - // we use render functions so that we can trap errors in the templates - options.render = res.render - options.staticRenderFns = res.staticRenderFns - } - let holder = document.createElement('div') this.$refs.result.appendChild(holder) From e50178b815f80671afef0eeef8ce1ef15421771d Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 00:13:03 -0400 Subject: [PATCH 53/82] Update play.vue --- docs/pages/play.vue | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 1284fba9a5c..41274ae42b2 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -200,7 +200,11 @@ export default { ] }, js_fiddle () { - const js = `new Vue({el:'#app',\r\n${this.js.trim()}})` + let js = this.js.trim() + if (!js) { + js = `{${js}}` + } + js = `new Vue(${js}).$mount('#app')` return `window.onload = function() {${js}}` }, html_fiddle () { @@ -219,20 +223,20 @@ export default { const self = this // Non reactive property to store the playground vm this.playVM = null - // disable global error handler + + if (this.$isServer) { + this.run = () => {} + return + } + + // Create our debounced runner + this.run = debounce(this._run, 500) + + // Disable global error handler as it screws up out log capture this.oldErrorHandler = Vue.config.errorHandler Vue.config.errorHandler = null -/* - Vue.config.errorHandler = (err, vm, info) => { - try { - self.log.call(self, 'danger', `Error in ${info}: ${String(err)}`) - // Note Vue still sends original error to console.error()!!! - } catch (err) { - // prevent possible endless loops - } - } -*/ - // original console logger + + // Override console.log if (typeof window !== 'undefined' && console) { const that = console this.originalLog = console.log @@ -241,8 +245,6 @@ export default { // self.originalLog.apply(that, arguments) } } - // Create our debounced runner - this.run = debounce(this._run, 500) }, mounted () { // load our content into the editors after dom updated @@ -252,8 +254,12 @@ export default { if (typeof window !== 'undefined' && this.originalLog) { console.log = this.originalLog } - Vue.config.errorHandler = this.oldErrorHandler - this.destroyVM() + if (this.oldErrorHandler) { + Vue.config.errorHandler = this.oldErrorHandler + } + if (!this.$isServer) { + this.destroyVM() + } }, methods: { log (tag, ...args) { @@ -311,7 +317,7 @@ export default { this.log('danger', 'No template or render function provided') return } - +/* let res if (html || options.template) { try { @@ -324,7 +330,7 @@ export default { return } } - +*/ let holder = document.createElement('div') this.$refs.result.appendChild(holder) @@ -335,6 +341,7 @@ export default { }) this.playVM = new Vue(Object.assign({}, options, { el: holder, + template: `
    ${options.template || html}
    ` // we set a fake parent so we can capture errors parent: fakeParent, // router needed for tooltips and popovers so they hide when route changes From cd8d5cda1b9fb04a362d6517b6e8b4de23a386e5 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 00:44:28 -0400 Subject: [PATCH 54/82] Update play.vue --- docs/pages/play.vue | 49 +++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 41274ae42b2..54f8b15ba61 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -2,7 +2,7 @@
    -
    +
    Here you can interactively play and test components with a fresh vue instance.
    TIP: @@ -13,34 +13,22 @@ Docs for more info about available tags and usage.
    -
    +
    - - - - - - Export to JSFiddle + + + + + + Export to JSFiddle + Reset to default
    @@ -135,8 +123,8 @@ v-for="(message, idx) in messages" class="list-group-item" :key="`console-${idx}`"> - {{ - message[0] === 'danger' ? 'X' : '?' + {{ + message[0] === 'danger' ? '!' : '?' }} {{ message[1] }} @@ -242,7 +230,7 @@ export default { this.originalLog = console.log console.log = function () { self.log.call(self, 'info', ...arguments) - // self.originalLog.apply(that, arguments) + self.originalLog.apply(that, arguments) } } }, @@ -313,7 +301,7 @@ export default { return } - if (!html && !options.template && !options.render && !(options.staticRenderFns && options.render)) { + if (!html && !options.template && !options.render)) { this.log('danger', 'No template or render function provided') return } @@ -331,6 +319,11 @@ export default { } } */ + + if (!options.render) { + options.template = `
    ${options.template || html}
    ` + } + let holder = document.createElement('div') this.$refs.result.appendChild(holder) @@ -376,6 +369,10 @@ export default { clear () { this.messages.splice(0) }, + reset() { + this.js = defaultJS.trim() + this.html = defaultHTML.trim() + }, load () { const ls = window && window.localStorage if (!ls) { From aa501aa9ded944fc7d6b167d88b3a2ec8bcd391a Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 00:50:12 -0400 Subject: [PATCH 55/82] lint --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 54f8b15ba61..ccd6700b403 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -301,7 +301,7 @@ export default { return } - if (!html && !options.template && !options.render)) { + if (!html && !options.template && !options.render) { this.log('danger', 'No template or render function provided') return } From e2bcdafd4fb91d505e6c437111a32cbfa9f23201 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 00:56:11 -0400 Subject: [PATCH 56/82] Update play.vue --- docs/pages/play.vue | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index ccd6700b403..2592ed84f78 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -300,7 +300,8 @@ export default { this.playVM = null return } - + options = Object.assign({}, options) + if (!html && !options.template && !options.render) { this.log('danger', 'No template or render function provided') return @@ -322,6 +323,8 @@ export default { if (!options.render) { options.template = `
    ${options.template || html}
    ` + } else ( + delete options.template } let holder = document.createElement('div') @@ -334,7 +337,6 @@ export default { }) this.playVM = new Vue(Object.assign({}, options, { el: holder, - template: `
    ${options.template || html}
    ` // we set a fake parent so we can capture errors parent: fakeParent, // router needed for tooltips and popovers so they hide when route changes From 077118202559166d44a1c0a9f066008f1a1b87cd Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 01:20:34 -0400 Subject: [PATCH 57/82] Update play.vue --- docs/pages/play.vue | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 2592ed84f78..8b9cd29f6ec 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -19,7 +19,7 @@ method="post" action="https://jsfiddle.net/api/post/library/pure/" target="_blank" - v-if="html || js"> + v-if="isOk"> @@ -149,8 +149,8 @@ import debounce from 'lodash/debounce' const defaultJS = `{ data: { - name: 'Zeus' - }, + name: 'Bootstrap-Vue' + } }` const defaultHTML = `
    @@ -187,13 +187,25 @@ export default { '//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js' ] }, - js_fiddle () { - let js = this.js.trim() - if (!js) { - js = `{${js}}` + is ok () { + let o + const js = this.js.trim() || '{}' + try { + /* eslint-disable no-eval */ + eval(`o = ${js}`) + /* eslint-enable no-eval */ + } catch (err) { + return false + } + if (!this.html && !o.template && typeof o.render !== 'function') { + return false } + return true + }, + js_fiddle () { + let js = this.js.trim() || '{}' js = `new Vue(${js}).$mount('#app')` - return `window.onload = function() {${js}}` + return `window.onload = function() {\r\n${js}\r\n}` }, html_fiddle () { return `
    \r\n${this.html.trim()}\r\n
    ` @@ -280,7 +292,7 @@ export default { }, createVM () { let options - const js = this.js.trim() + const js = this.js.trim() || '{}' const html = this.html.trim() const self = this @@ -302,7 +314,7 @@ export default { } options = Object.assign({}, options) - if (!html && !options.template && !options.render) { + if (!html && !options.template && typeof options.render !== 'function') { this.log('danger', 'No template or render function provided') return } From be0e374f9a36440d64e51068a4bb2d723f23d034 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 01:25:33 -0400 Subject: [PATCH 58/82] Update play.vue --- docs/pages/play.vue | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 8b9cd29f6ec..ce9903ec5fa 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -18,13 +18,12 @@ class="d-inline-block ml-2 mr-0 p-0 float-right" method="post" action="https://jsfiddle.net/api/post/library/pure/" - target="_blank" - v-if="isOk"> + target="_blank"> - + Export to JSFiddle @@ -187,7 +186,7 @@ export default { '//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js' ] }, - is ok () { + isOk () { let o const js = this.js.trim() || '{}' try { From 7908c1cc1c762db812187cf38a8912824ecc07ff Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 01:29:15 -0400 Subject: [PATCH 59/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index ce9903ec5fa..87327f917d7 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -334,7 +334,7 @@ export default { if (!options.render) { options.template = `
    ${options.template || html}
    ` - } else ( + } else { delete options.template } From 0aea932b51a56dbd91bc0ff78a15153275c68ea6 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 01:44:56 -0400 Subject: [PATCH 60/82] Update play.vue --- docs/pages/play.vue | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 87327f917d7..2530c8a707d 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -2,7 +2,7 @@
    -
    +
    Here you can interactively play and test components with a fresh vue instance.
    TIP: @@ -13,7 +13,7 @@ Docs for more info about available tags and usage.
    -
    +
    - {{ + {{ message[0] === 'danger' ? '!' : '?' }} {{ message[1] }} @@ -311,26 +311,11 @@ export default { this.playVM = null return } - options = Object.assign({}, options) if (!html && !options.template && typeof options.render !== 'function') { this.log('danger', 'No template or render function provided') return } -/* - let res - if (html || options.template) { - try { - res = Vue.compile(`
    ${html || options.template}
    `) - options.render = res.render - options.staticRenderFns = res.staticRenderFns - delete options.template - } catch (err) { - errHandler(err, null, 'compiling template') - return - } - } -*/ if (!options.render) { options.template = `
    ${options.template || html}
    ` @@ -385,6 +370,9 @@ export default { reset() { this.js = defaultJS.trim() this.html = defaultHTML.trim() + this.save() + // needed to get code mirror to use new values + this.$forceReload() }, load () { const ls = window && window.localStorage From 1782125cd38f61e70eb914b0ecf343c7929cc5fa Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 01:58:42 -0400 Subject: [PATCH 61/82] Update codemirror.vue Minor updates --- docs/components/codemirror.vue | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/components/codemirror.vue b/docs/components/codemirror.vue index 6b18341b8be..1fcc8d2c3aa 100755 --- a/docs/components/codemirror.vue +++ b/docs/components/codemirror.vue @@ -44,6 +44,10 @@ export default { type: String, default: 'indent' }, + tabSize: { + type: [Number, String], + default: 2 + }, lineWrapping: { type: Boolean, default: true @@ -64,7 +68,7 @@ export default { }, watch: { value (new_val, old_val) { - if (!old_val || old_val === '') { + if (!old_val || old_val === '' || newVal !== oldVal) { this.CM.setValue(new_val) } } @@ -74,6 +78,7 @@ export default { mode: this.mode, theme: this.theme, tabMode: this.tabMode, + tabSize: parseInt(this.tabSize, 10) || 2 lineWrapping: this.lineWrapping, lineNumbers: this.lineNumbers, autoCloseTags: true, From 5b714e32d4766539b041dceb99d5e6b1b9391f96 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 02:00:41 -0400 Subject: [PATCH 62/82] Update play.vue --- docs/pages/play.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 2530c8a707d..6a9d8910423 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -371,8 +371,6 @@ export default { this.js = defaultJS.trim() this.html = defaultHTML.trim() this.save() - // needed to get code mirror to use new values - this.$forceReload() }, load () { const ls = window && window.localStorage From 4dd2b9fd00793eaba5d7a847e0415313b3e67ab0 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 02:03:58 -0400 Subject: [PATCH 63/82] lint --- docs/components/codemirror.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/components/codemirror.vue b/docs/components/codemirror.vue index 1fcc8d2c3aa..82ee47ab9d3 100755 --- a/docs/components/codemirror.vue +++ b/docs/components/codemirror.vue @@ -78,7 +78,7 @@ export default { mode: this.mode, theme: this.theme, tabMode: this.tabMode, - tabSize: parseInt(this.tabSize, 10) || 2 + tabSize: parseInt(this.tabSize, 10) || 2, lineWrapping: this.lineWrapping, lineNumbers: this.lineNumbers, autoCloseTags: true, From bac4619e49a8747a0cb942e790790a2db7e87bbc Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 02:08:01 -0400 Subject: [PATCH 64/82] Update codemirror.vue --- docs/components/codemirror.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/components/codemirror.vue b/docs/components/codemirror.vue index 82ee47ab9d3..bc0c9cab5f5 100755 --- a/docs/components/codemirror.vue +++ b/docs/components/codemirror.vue @@ -68,7 +68,7 @@ export default { }, watch: { value (new_val, old_val) { - if (!old_val || old_val === '' || newVal !== oldVal) { + if (!old_val || old_val === '' || new_val !== old_val) { this.CM.setValue(new_val) } } From 9e12bb7bd24e44cf4b5a85aab3a4758c094bd6e7 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 02:28:56 -0400 Subject: [PATCH 65/82] Update codemirror.vue --- docs/components/codemirror.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/components/codemirror.vue b/docs/components/codemirror.vue index bc0c9cab5f5..4a5b0f73458 100755 --- a/docs/components/codemirror.vue +++ b/docs/components/codemirror.vue @@ -68,7 +68,7 @@ export default { }, watch: { value (new_val, old_val) { - if (!old_val || old_val === '' || new_val !== old_val) { + if (!old_val || old_val === '') { this.CM.setValue(new_val) } } From 173b42a74bd8575083233723960de4bdf0332c12 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 02:31:56 -0400 Subject: [PATCH 66/82] Update play.vue --- docs/pages/play.vue | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 6a9d8910423..2a82797db8e 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -368,9 +368,13 @@ export default { this.messages.splice(0) }, reset() { - this.js = defaultJS.trim() - this.html = defaultHTML.trim() - this.save() + // Needed to trick codemirror component to reload contents + this.js = this.html = '' + this.$nextTick(() => { + this.js = defaultJS.trim() + this.html = defaultHTML.trim() + this.save() + }) }, load () { const ls = window && window.localStorage From c8e316e6446f8f00bd4aca597fdbd6b3ee494581 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 03:20:37 -0400 Subject: [PATCH 67/82] Update play.vue --- docs/pages/play.vue | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 2a82797db8e..fdc6e69a198 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -117,17 +117,17 @@ Clear
    -
      +
    • - {{ - message[0] === 'danger' ? '!' : '?' + :class="['list-group-item','list-group-item-${message[0]}']" + :key="`console-${messages.length - idx}`"> + {{ + message[0] === 'danger' ? 'error' : 'log' }} {{ message[1] }}
    • -
    +
     
    @@ -148,12 +148,25 @@ import debounce from 'lodash/debounce' const defaultJS = `{ data: { - name: 'Bootstrap-Vue' + name: 'Bootstrap-Vue', + show: true + }, + watch: { + show(newVal, oldVal) { + console.log( + 'Alert is ' + (this.show ? 'visible : 'hidden') + ) + } } }` const defaultHTML = `
    - Hello {{ name }}! + + Hello {{ name }}! + + + Show Alert +
    ` // Maximum age of localstorage before we revert back to defaults @@ -266,10 +279,15 @@ export default { if (String(args[0]).indexOf('Avoid mutating a prop directly') !== -1) { return } + const msg = args.map(String).join(' ') + if (this.messages.length && msg.indexOf('Error in render') !== -1 && msg === this.messages[0][1]) { + // prevent duplicate render errors + return + } if (this.messages.length > 10) { this.messages.splice(10) } - this.messages.unshift([tag, args.map(String).join(' ')]) + this.messages.unshift([tag, msg]) }, destroyVM () { if (this.playVM) { From 080da1794b85446b864dbe8777f41b7b661948c0 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 03:37:28 -0400 Subject: [PATCH 68/82] Update play.vue --- docs/pages/play.vue | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index fdc6e69a198..3f9fe7851b2 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -121,7 +121,7 @@
  • + :key="`console-${message[2]}`"> {{ message[0] === 'danger' ? 'error' : 'log' }} @@ -181,6 +181,7 @@ export default { html: '', js: '', messages: [], + mesgIdx: 0, vertical: false, full: false } @@ -284,10 +285,11 @@ export default { // prevent duplicate render errors return } + this.msgIdx++ if (this.messages.length > 10) { this.messages.splice(10) } - this.messages.unshift([tag, msg]) + this.messages.unshift([tag, msg, msgIdx]) }, destroyVM () { if (this.playVM) { From 03d3bafd7ee5170034d3aac2ab6366315dcce99d Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 03:38:15 -0400 Subject: [PATCH 69/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 3f9fe7851b2..a82112e9f79 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -154,7 +154,7 @@ const defaultJS = `{ watch: { show(newVal, oldVal) { console.log( - 'Alert is ' + (this.show ? 'visible : 'hidden') + 'Alert is ' + (this.show ? 'visible' : 'hidden') ) } } From 035e420ecbb0f11210884df11248229785691777 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 03:45:22 -0400 Subject: [PATCH 70/82] Update play.vue --- docs/pages/play.vue | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index a82112e9f79..065ea7904ab 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -3,15 +3,16 @@
    - Here you can interactively play and test components with a fresh vue instance. -
    - TIP: - You can clone docs repo, to hack and develop components. - changes will be reflected and hot-reloaded instantly. -
    - Please refer to - Docs - for more info about available tags and usage. +

    + Here you can interactively play and test components with a fresh vue instance. +

    +

    + TIP: + You can clone docs repo, to hack and develop components. + changes will be reflected and hot-reloaded instantly. + Please refer to the Docs + section for more info about available tags and usage. +

    Date: Fri, 16 Nov 2018 03:53:26 -0400 Subject: [PATCH 71/82] Update play.vue --- docs/pages/play.vue | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 065ea7904ab..2b19043bf13 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -286,11 +286,10 @@ export default { // prevent duplicate render errors return } - this.msgIdx++ if (this.messages.length > 10) { this.messages.splice(10) } - this.messages.unshift([tag, msg, msgIdx]) + this.messages.unshift([tag, msg, this.msgIdx++]) }, destroyVM () { if (this.playVM) { From a59ee6a2794a1c9abec3a8f8da0de5545f9cf42d Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 04:00:15 -0400 Subject: [PATCH 72/82] Update play.vue --- docs/pages/play.vue | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 2b19043bf13..cba7f97af7d 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -5,13 +5,13 @@

    Here you can interactively play and test components with a fresh vue instance. + Please refer to the Docs + section for more info about available tags and usage.

    TIP: You can clone docs repo, to hack and develop components. changes will be reflected and hot-reloaded instantly. - Please refer to the Docs - section for more info about available tags and usage.

    @@ -122,7 +122,7 @@
  • + :key="`console-${messages.length - idx}`"> {{ message[0] === 'danger' ? 'error' : 'log' }} @@ -182,7 +182,6 @@ export default { html: '', js: '', messages: [], - mesgIdx: 0, vertical: false, full: false } @@ -289,7 +288,7 @@ export default { if (this.messages.length > 10) { this.messages.splice(10) } - this.messages.unshift([tag, msg, this.msgIdx++]) + this.messages.unshift([tag, msg]) }, destroyVM () { if (this.playVM) { From 7eb31cf1b0d5577b48fac0f4b856885355dbcec5 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 04:11:08 -0400 Subject: [PATCH 73/82] Update play.vue --- docs/pages/play.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index cba7f97af7d..628f53829ec 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -217,7 +217,9 @@ export default { }, js_fiddle () { let js = this.js.trim() || '{}' - js = `new Vue(${js}).$mount('#app')` + const comma = js === '{}' ? '', ',' + js = js.replace(/^\{/, `{\r\n el: '#app'${comma}\r\n`) + js = `new Vue(${js})` return `window.onload = function() {\r\n${js}\r\n}` }, html_fiddle () { From 9f0cf47871df6382b8f0791b18ca52ade4fbc4b1 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 04:15:21 -0400 Subject: [PATCH 74/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 628f53829ec..5dceceaab98 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -217,7 +217,7 @@ export default { }, js_fiddle () { let js = this.js.trim() || '{}' - const comma = js === '{}' ? '', ',' + const comma = js === '{}' ? '' : ',' js = js.replace(/^\{/, `{\r\n el: '#app'${comma}\r\n`) js = `new Vue(${js})` return `window.onload = function() {\r\n${js}\r\n}` From d12683c1653543b8d7d9d02e9c8c64bcc64a1be5 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 04:21:03 -0400 Subject: [PATCH 75/82] Update play.vue --- docs/pages/play.vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 5dceceaab98..c3a0ecb4dfd 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -28,7 +28,7 @@ Export to JSFiddle - Reset to default + Reset to default
  • @@ -200,6 +200,10 @@ export default { '//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js' ] }, + isDefault () { + return this.js.trim() === defaultJS.trim() && + this.html.trim() === defaultHTML.trim() + }, isOk () { let o const js = this.js.trim() || '{}' From 398944761cd06d64a104df8585a52f48ac02f096 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 04:24:29 -0400 Subject: [PATCH 76/82] Update play.vue --- docs/pages/play.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index c3a0ecb4dfd..66b45c7545f 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -28,7 +28,7 @@ Export to JSFiddle
    - Reset to default + Reset to default
    From b49ed7695ca4d16732c38032c022c55eae9a0c48 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 16 Nov 2018 04:39:13 -0400 Subject: [PATCH 77/82] Update play.vue --- docs/pages/play.vue | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/pages/play.vue b/docs/pages/play.vue index 66b45c7545f..22e6abe5c1b 100755 --- a/docs/pages/play.vue +++ b/docs/pages/play.vue @@ -122,7 +122,7 @@
  • + :key="`console-${messag[2]}`"> {{ message[0] === 'danger' ? 'error' : 'log' }} @@ -141,6 +141,9 @@ .flip-move { transition: all .3s; } +.flip-list-move { + transform: .3s +}