chore: more examples
This commit is contained in:
63
packages/vue/examples/composition/markdown.html
Normal file
63
packages/vue/examples/composition/markdown.html
Normal file
@@ -0,0 +1,63 @@
|
||||
<script src="https://unpkg.com/marked@0.3.6"></script>
|
||||
<script src="https://unpkg.com/lodash@4.16.0"></script>
|
||||
<script src="../../dist/vue.global.js"></script>
|
||||
|
||||
<div id="editor">
|
||||
<textarea :value="input" @input="update"></textarea>
|
||||
<div v-html="output"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const { ref, computed } = Vue
|
||||
|
||||
const App = {
|
||||
setup() {
|
||||
const input = ref('# hello')
|
||||
const output = computed(() => marked(input.value, { sanitize: true }))
|
||||
const update = _.debounce(e => { input.value = e.target.value })
|
||||
|
||||
return {
|
||||
input,
|
||||
output,
|
||||
update
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vue.createApp().mount(App, '#editor')
|
||||
</script>
|
||||
|
||||
<style>
|
||||
html, body, #editor {
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
font-family: 'Helvetica Neue', Arial, sans-serif;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
textarea, #editor div {
|
||||
display: inline-block;
|
||||
width: 49%;
|
||||
height: 100%;
|
||||
vertical-align: top;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
textarea {
|
||||
border: none;
|
||||
border-right: 1px solid #ccc;
|
||||
resize: none;
|
||||
outline: none;
|
||||
background-color: #f6f6f6;
|
||||
font-size: 14px;
|
||||
font-family: 'Monaco', courier, monospace;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
code {
|
||||
color: #f66;
|
||||
}
|
||||
</style>
|
||||
@@ -1,5 +1,7 @@
|
||||
<script src="../../dist/vue.global.js"></script>
|
||||
<script>
|
||||
const { ref, reactive, computed, createApp } = Vue
|
||||
|
||||
// math helper...
|
||||
function valueToPoint (value, index, total) {
|
||||
var x = 0
|
||||
@@ -24,7 +26,7 @@ const AxisLabel = {
|
||||
},
|
||||
setup(props) {
|
||||
return {
|
||||
point: Vue.computed(() => valueToPoint(
|
||||
point: computed(() => valueToPoint(
|
||||
+props.stat.value + 10,
|
||||
props.index,
|
||||
props.total
|
||||
@@ -54,7 +56,7 @@ const Polygraph = {
|
||||
template: '#polygraph-template',
|
||||
setup(props) {
|
||||
return {
|
||||
points: Vue.computed(() => {
|
||||
points: computed(() => {
|
||||
const total = props.stats.length
|
||||
return props.stats.map((stat, i) => {
|
||||
const point = valueToPoint(stat.value, i, total)
|
||||
@@ -95,8 +97,8 @@ const App = {
|
||||
Polygraph
|
||||
},
|
||||
setup() {
|
||||
const newLabel = Vue.ref('')
|
||||
const stats = Vue.reactive([
|
||||
const newLabel = ref('')
|
||||
const stats = reactive([
|
||||
{ label: 'A', value: 100 },
|
||||
{ label: 'B', value: 100 },
|
||||
{ label: 'C', value: 100 },
|
||||
@@ -132,7 +134,7 @@ const App = {
|
||||
}
|
||||
}
|
||||
|
||||
Vue.createApp().mount(App, '#demo')
|
||||
createApp().mount(App, '#demo')
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
130
packages/vue/examples/composition/tree.html
Normal file
130
packages/vue/examples/composition/tree.html
Normal file
@@ -0,0 +1,130 @@
|
||||
<script src="../../dist/vue.global.js"></script>
|
||||
|
||||
<!-- item template -->
|
||||
<script type="text/x-template" id="item-template">
|
||||
<li>
|
||||
<div
|
||||
:class="{bold: isFolder}"
|
||||
@click="toggle"
|
||||
@dblclick="changeType">
|
||||
{{model.name}}
|
||||
<span v-if="isFolder">[{{open ? '-' : '+'}}]</span>
|
||||
</div>
|
||||
<ul v-if="isFolder" v-show="open">
|
||||
<tree-item
|
||||
class="item"
|
||||
v-for="model in model.children"
|
||||
:model="model">
|
||||
</tree-item>
|
||||
<li class="add" @click="addChild">+</li>
|
||||
</ul>
|
||||
</li>
|
||||
</script>
|
||||
<!-- item script -->
|
||||
<script>
|
||||
const { reactive, computed, toRefs } = Vue
|
||||
|
||||
const TreeItem = {
|
||||
name: 'TreeItem', // necessary for self-reference
|
||||
template: '#item-template',
|
||||
props: {
|
||||
model: Object
|
||||
},
|
||||
setup(props) {
|
||||
const state = reactive({
|
||||
open: false,
|
||||
isFolder: computed(() => {
|
||||
return props.model.children && props.model.children.length
|
||||
})
|
||||
})
|
||||
|
||||
function toggle() {
|
||||
state.open = !state.open
|
||||
}
|
||||
|
||||
function changeType() {
|
||||
if (!state.isFolder) {
|
||||
props.model.children = []
|
||||
addChild()
|
||||
state.open = true
|
||||
}
|
||||
}
|
||||
|
||||
function addChild() {
|
||||
props.model.children.push({ name: 'new stuff' })
|
||||
}
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
toggle,
|
||||
changeType,
|
||||
addChild
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<p>(You can double click on an item to turn it into a folder.)</p>
|
||||
|
||||
<!-- the app root element -->
|
||||
<ul id="demo">
|
||||
<tree-item class="item" :model="treeData"></tree-item>
|
||||
</ul>
|
||||
|
||||
<script>
|
||||
const App = {
|
||||
components: {
|
||||
TreeItem
|
||||
},
|
||||
data: {
|
||||
treeData: {
|
||||
name: 'My Tree',
|
||||
children: [
|
||||
{ name: 'hello' },
|
||||
{ name: 'wat' },
|
||||
{
|
||||
name: 'child folder',
|
||||
children: [
|
||||
{
|
||||
name: 'child folder',
|
||||
children: [
|
||||
{ name: 'hello' },
|
||||
{ name: 'wat' }
|
||||
]
|
||||
},
|
||||
{ name: 'hello' },
|
||||
{ name: 'wat' },
|
||||
{
|
||||
name: 'child folder',
|
||||
children: [
|
||||
{ name: 'hello' },
|
||||
{ name: 'wat' }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vue.createApp().mount(App, '#demo')
|
||||
</script>
|
||||
|
||||
<style>
|
||||
body {
|
||||
font-family: Menlo, Consolas, monospace;
|
||||
color: #444;
|
||||
}
|
||||
.item {
|
||||
cursor: pointer;
|
||||
}
|
||||
.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
ul {
|
||||
padding-left: 1em;
|
||||
line-height: 1.5em;
|
||||
list-style-type: dot;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user