Quasar is a popular Vue UI library for developing good looking Vue apps.
In this article, we’ll take a look at how to create Vue apps with the Quasar UI library.
Add Our Own Editor Features
We can add our own features to the Quasar WYSIWYG editor.
To add our own dropdown that lets us add preset text, we can write:
<!DOCTYPE html>
<html>
<head>
<link
href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons"
rel="stylesheet"
type="text/css"
/>
<link
href="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.min.css"
rel="stylesheet"
type="text/css"
/>
</head>
<body class="body--dark">
<script src="https://cdn.jsdelivr.net/npm/vue@^2.0.0/dist/vue.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.umd.min.js"></script>
<div id="q-app">
<q-layout
view="lHh Lpr lFf"
container
style="height: 100vh;"
class="shadow-2 rounded-borders"
>
<q-editor
v-model="editor"
ref="editor"
toolbar-text-color="white"
toolbar-toggle-color="yellow-8"
toolbar-bg="primary"
:toolbar="[
['token'],
['bold', 'italic', 'underline'],
[{
label: $q.lang.editor.formatting,
icon: $q.iconSet.editor.formatting,
list: 'no-icons',
options: ['p', 'h3', 'h4', 'h5', 'h6', 'code']
}]
]"
>
<template v-slot:token>
<q-btn-dropdown
dense
no-caps
ref="token"
no-wrap
unelevated
color="white"
text-color="primary"
label="Token"
size="sm"
>
<q-list dense>
<q-item tag="label" clickable @click="add('email')">
<q-item-section side>
<q-icon name="mail" />
</q-item-section>
<q-item-section>Email</q-item-section>
</q-item>
<q-item tag="label" clickable @click="add('title')">
<q-item-section side>
<q-icon name="title" />
</q-item-section>
<q-item-section>Title</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
</template>
</q-editor>
<q-card flat bordered>
<q-card-section>
<pre style="white-space: pre-line;">{{ editor }}</pre>
</q-card-section>
</q-card>
<q-card flat bordered>
<q-card-section v-html="editor"></q-card-section>
</q-card>
</q-layout>
</div>
<script>
new Vue({
el: "#q-app",
data: {
editor: ""
},
methods: {
add(name) {
const edit = this.$refs.editor;
this.$refs.token.hide();
edit.caret.restore();
edit.runCmd(
"insertHTML",
` <div class="editor_token row inline items-center" contenteditable="false"> <span>${name}</span> <i class="q-icon material-icons cursor-pointer" onclick="this.parentNode.parentNode.removeChild(this.parentNode)">close</i></div> `
);
edit.focus();
}
}
});
</script>
</body>
</html>
We populate the token slot with a dropdown.
Then dropdown options run the add method.
The method calls runCmd to add our own HTML into the editor box.
It’ll also be added to the editor reactive property that we bound to the editor.
The insertHTML command inserts HTML into our editor.
Expansion Item
The q-expansion-item component lets us display more items when we click on it.
To use it, we write:
<!DOCTYPE html>
<html>
<head>
<link
href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons"
rel="stylesheet"
type="text/css"
/>
<link
href="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.min.css"
rel="stylesheet"
type="text/css"
/>
</head>
<body class="body--dark">
<script src="https://cdn.jsdelivr.net/npm/vue@^2.0.0/dist/vue.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.umd.min.js"></script>
<div id="q-app">
<q-layout
view="lHh Lpr lFf"
container
style="height: 100vh;"
class="shadow-2 rounded-borders"
>
<q-expansion-item
v-model="expanded"
icon="perm_identity"
label="Settings"
caption="James"
>
<q-card>
<q-card-section>
Lorem ipsum dolor sit amet
</q-card-section>
</q-card>
</q-expansion-item>
</q-layout>
</div>
<script>
new Vue({
el: "#q-app",
data: {
expanded: false
}
});
</script>
</body>
</html>
We add the q-expansion-item component with the v-model directive to bind to its open state.
icon has the name of the icon displayed on the left,.
label has the label displayed on the top.
caption is displayed below the label and it’s smaller than it.
When we click on it, the text in the q-card will be toggled on and off.
Conclusion
We can add extra editor features to the Quasar WYSIWYG editor.
Also, we can add a component to toggle more content into our Vue app with the q-expansion-item component.