Update LiveEditor

pull/880/head
Tuğçe Küçükoğlu 2021-01-21 11:13:00 +03:00
parent 1c2a064aa3
commit c5d7dd06a9
2 changed files with 60 additions and 10 deletions

View File

@ -158,6 +158,16 @@
text-decoration: underline; text-decoration: underline;
} }
} }
.liveEditorButton a,
.liveEditorSplitButton a {
padding: 0.75rem 0.5rem;
font-weight: normal;
&:hover {
text-decoration: none;
}
}
} }
} }
} }

View File

@ -1,6 +1,11 @@
<template> <template>
<span v-if="showEditor"> <span v-if="showEditor">
<Button @click="postSandboxParameters()" label="Edit in CodeSandbox" class="liveEditorButton" /> <template v-if="!editComposition">
<Button @click="postSandboxParameters('core')" label="Edit in CodeSandbox" class="liveEditorButton" />
</template>
<template v-else>
<SplitButton :model="items" label="Edit in CodeSandbox" class="liveEditorSplitButton" />
</template>
</span> </span>
</template> </template>
@ -10,9 +15,18 @@ export default {
data() { data() {
return { return {
sandbox_id: null, sandbox_id: null,
showCodeHighlight: false showCodeHighlight: false,
items: [
{label: "Core", command: () => { this.postSandboxParameters('core') }},
{label: "Composition API", command: () => { this.postSandboxParameters('api') }}
],
editComposition: false
} }
}, },
mounted() {
if(this.sources.api) this.editComposition = true;
else this.editComposition = false;
},
props: { props: {
name: { name: {
type: String, type: String,
@ -48,14 +62,14 @@ export default {
} }
}, },
methods: { methods: {
postSandboxParameters() { postSandboxParameters(sourceType) {
fetch('https://codesandbox.io/api/v1/sandboxes/define?json=1', { fetch('https://codesandbox.io/api/v1/sandboxes/define?json=1', {
method: "POST", method: "POST",
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'Accept': 'application/json' 'Accept': 'application/json'
}, },
body: JSON.stringify(this.getSandboxParameters()) body: JSON.stringify(this.getSandboxParameters(sourceType))
}) })
.then(response => response.json()) .then(response => response.json())
.then(data => window.open(`https://codesandbox.io/s/${data.sandbox_id}`, '_blank')) .then(data => window.open(`https://codesandbox.io/s/${data.sandbox_id}`, '_blank'))
@ -79,11 +93,16 @@ export default {
'primeflex': dependencies['primeflex'], 'primeflex': dependencies['primeflex'],
'primeicons': 'latest', 'primeicons': 'latest',
'@babel/cli': dependencies['@babel/cli'], '@babel/cli': dependencies['@babel/cli'],
'@vue/cli-plugin-babel': dependencies['@vue/cli-plugin-babel'],
'@vue/cli-service': dependencies['@vue/cli-service'],
'@vue/compiler-sfc': dependencies['@vue/compiler-sfc'],
'core-js': dependencies['core-js'] 'core-js': dependencies['core-js']
}, },
devDependencies: {
'@vue/cli-plugin-babel': dependencies['@vue/cli-plugin-babel'],
'@vue/cli-plugin-eslint': dependencies['@vue/cli-plugin-eslint'],
'@vue/cli-service': dependencies['@vue/cli-service'],
'@vue/compiler-sfc': dependencies['@vue/compiler-sfc'],
'eslint': dependencies['eslint'],
'eslint-plugin-vue': dependencies['eslint-plugin-vue']
}
} }
}, },
'babel.config.js': { 'babel.config.js': {
@ -114,22 +133,34 @@ export default {
} }
}, },
getSandboxParameters() { getSandboxParameters(sourceType) {
let name = this.name; let name = this.name;
let extension = '.vue'; let extension = '.vue';
let extDependencies = this.dependencies || {}; let extDependencies = this.dependencies || {};
let content = this.sources.template.content; let content = this.sources.template.content;
let style = this.sources.template.style || ''; let style = this.sources.template.style || '';
let api = this.sources.api ? this.sources.api.content : '';
let scriptText = 'script'; let scriptText = 'script';
let _files = {}, importElement = '', element = '', components = '', imports = '', directives = ''; let _files = {}, importElement = '', element = '', components = '', imports = '', directives = '';
_files[`src/components/${name}${extension}`] = { if(sourceType === 'core') {
_files[`src/components/${name}${extension}`] = {
content: `${content} content: `${content}
</${scriptText}> </${scriptText}>
${style}` ${style}`
}
} }
else if(sourceType === 'api') {
_files[`src/components/${name}${extension}`] = {
content: `${api}
</${scriptText}>
`
}
}
let mittComponents = ['ToastDemo', 'OrganizationChartDemo', 'ConfirmDialogDemo', 'ConfirmPopupDemo', 'TerminalDemo', 'SplitButtonDemo', 'DeferredContentDemo', 'OverlayPanelDemo', 'FileUploadDemo']; let mittComponents = ['ToastDemo', 'OrganizationChartDemo', 'ConfirmDialogDemo', 'ConfirmPopupDemo', 'TerminalDemo', 'SplitButtonDemo', 'DeferredContentDemo', 'OverlayPanelDemo', 'FileUploadDemo'];
mittComponents.forEach(cmp => { mittComponents.forEach(cmp => {
@ -530,4 +561,13 @@ ${services[this.service]}
} }
} }
} }
</script> </script>
<style lang="scss" scoped>
.liveEditorSplitButton {
color: red;
a:hover {
text-decoration: none;
}
}
</style>