|
@@ -1,6 +1,6 @@
|
|
<template lang='pug'>
|
|
<template lang='pug'>
|
|
.editor-markdown
|
|
.editor-markdown
|
|
- v-toolbar.editor-markdown-toolbar(dense, color='primary', dark)
|
|
|
|
|
|
+ v-toolbar.editor-markdown-toolbar(dense, color='primary', dark, flat)
|
|
v-tooltip(top)
|
|
v-tooltip(top)
|
|
v-btn(icon, slot='activator').mx-0
|
|
v-btn(icon, slot='activator').mx-0
|
|
v-icon format_bold
|
|
v-icon format_bold
|
|
@@ -49,8 +49,33 @@
|
|
v-btn(icon, slot='activator').mx-0
|
|
v-btn(icon, slot='activator').mx-0
|
|
v-icon remove
|
|
v-icon remove
|
|
span Horizontal Bar
|
|
span Horizontal Bar
|
|
-
|
|
|
|
.editor-markdown-main
|
|
.editor-markdown-main
|
|
|
|
+ .editor-markdown-sidebar
|
|
|
|
+ v-tooltip(right)
|
|
|
|
+ v-btn(icon, slot='activator', dark, @click='toggleModal(`editorModalMedia`)').mx-0
|
|
|
|
+ v-icon(:color='activeModal === `editorModalMedia` ? `teal` : ``') image
|
|
|
|
+ span Insert Media
|
|
|
|
+ v-tooltip(right)
|
|
|
|
+ v-btn(icon, slot='activator', dark).mx-0
|
|
|
|
+ v-icon insert_drive_file
|
|
|
|
+ span Insert File
|
|
|
|
+ v-tooltip(right)
|
|
|
|
+ v-btn(icon, slot='activator', dark).mx-0
|
|
|
|
+ v-icon play_circle_outline
|
|
|
|
+ span Insert Video
|
|
|
|
+ v-tooltip(right)
|
|
|
|
+ v-btn(icon, slot='activator', dark).mx-0
|
|
|
|
+ v-icon multiline_chart
|
|
|
|
+ span Insert Diagram
|
|
|
|
+ v-tooltip(right)
|
|
|
|
+ v-btn(icon, slot='activator', dark).mx-0
|
|
|
|
+ v-icon functions
|
|
|
|
+ span Insert Math Expression
|
|
|
|
+ v-spacer
|
|
|
|
+ v-tooltip(right)
|
|
|
|
+ v-btn(icon, slot='activator', dark).mx-0
|
|
|
|
+ v-icon border_outer
|
|
|
|
+ span Table Helper
|
|
.editor-markdown-editor
|
|
.editor-markdown-editor
|
|
.editor-markdown-editor-title(v-if='previewShown', @click='previewShown = false') Editor
|
|
.editor-markdown-editor-title(v-if='previewShown', @click='previewShown = false') Editor
|
|
.editor-markdown-editor-title(v-else='previewShown', @click='previewShown = true'): v-icon(dark) drag_indicator
|
|
.editor-markdown-editor-title(v-else='previewShown', @click='previewShown = true'): v-icon(dark) drag_indicator
|
|
@@ -60,19 +85,16 @@
|
|
.editor-markdown-preview-title(@click='previewShown = false') Preview
|
|
.editor-markdown-preview-title(@click='previewShown = false') Preview
|
|
.editor-markdown-preview-content.contents(ref='editorPreview', v-html='previewHTML')
|
|
.editor-markdown-preview-content.contents(ref='editorPreview', v-html='previewHTML')
|
|
|
|
|
|
- //- v-speed-dial.editor-markdown-insert(v-model='fabInsertMenu', :open-on-hover='true', direction='top', transition='slide-y-reverse-transition', fixed, bottom, :right='!previewShown || $vuetify.breakpoint.smAndDown')
|
|
|
|
- //- v-btn(color='blue', fab, dark, v-model='fabInsertMenu', slot='activator')
|
|
|
|
- //- v-icon add_circle
|
|
|
|
- //- v-icon close
|
|
|
|
- //- v-btn(color='teal', fab, dark): v-icon image
|
|
|
|
- //- v-btn(color='pink', fab, dark): v-icon insert_drive_file
|
|
|
|
- //- v-btn(color='red', fab, dark): v-icon play_circle_outline
|
|
|
|
- //- v-btn(color='purple', fab, dark): v-icon multiline_chart
|
|
|
|
- //- v-btn(color='indigo', fab, dark): v-icon functions
|
|
|
|
|
|
+ v-system-bar.editor-markdown-sysbar(dark, status, color='grey darken-3')
|
|
|
|
+ .caption.editor-markdown-sysbar-locale {{locale.toUpperCase()}}
|
|
|
|
+ .caption.px-3 /{{path}}
|
|
|
|
+ v-spacer
|
|
|
|
+ .caption Markdown
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script>
|
|
<script>
|
|
import _ from 'lodash'
|
|
import _ from 'lodash'
|
|
|
|
+import { get, sync } from 'vuex-pathify'
|
|
|
|
|
|
// ========================================
|
|
// ========================================
|
|
// IMPORTS
|
|
// IMPORTS
|
|
@@ -191,9 +213,15 @@ export default {
|
|
},
|
|
},
|
|
isMobile() {
|
|
isMobile() {
|
|
return this.$vuetify.breakpoint.smAndDown
|
|
return this.$vuetify.breakpoint.smAndDown
|
|
- }
|
|
|
|
|
|
+ },
|
|
|
|
+ locale: get('page/locale'),
|
|
|
|
+ path: get('page/path'),
|
|
|
|
+ activeModal: sync('editor/activeModal')
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
|
|
+ toggleModal(key) {
|
|
|
|
+ this.activeModal = (this.activeModal === key) ? '' : key
|
|
|
|
+ },
|
|
onCmReady(cm) {
|
|
onCmReady(cm) {
|
|
let self = this
|
|
let self = this
|
|
const keyBindings = {
|
|
const keyBindings = {
|
|
@@ -208,7 +236,7 @@ export default {
|
|
self.$parent.save()
|
|
self.$parent.save()
|
|
})
|
|
})
|
|
|
|
|
|
- cm.setSize(null, 'calc(100vh - 112px)')
|
|
|
|
|
|
+ cm.setSize(null, 'calc(100vh - 112px - 24px)')
|
|
cm.setOption('extraKeys', keyBindings)
|
|
cm.setOption('extraKeys', keyBindings)
|
|
cm.on('cursorActivity', cm => {
|
|
cm.on('cursorActivity', cm => {
|
|
this.toolbarSync(cm)
|
|
this.toolbarSync(cm)
|
|
@@ -262,6 +290,9 @@ export default {
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style lang='scss'>
|
|
<style lang='scss'>
|
|
|
|
+
|
|
|
|
+$editor-height: calc(100vh - 112px - 24px);
|
|
|
|
+
|
|
.editor-markdown {
|
|
.editor-markdown {
|
|
&-main {
|
|
&-main {
|
|
display: flex;
|
|
display: flex;
|
|
@@ -272,7 +303,7 @@ export default {
|
|
background-color: darken(mc('grey', '900'), 4.5%);
|
|
background-color: darken(mc('grey', '900'), 4.5%);
|
|
flex: 1 1 50%;
|
|
flex: 1 1 50%;
|
|
display: block;
|
|
display: block;
|
|
- height: calc(100vh - 112px);
|
|
|
|
|
|
+ height: $editor-height;
|
|
position: relative;
|
|
position: relative;
|
|
|
|
|
|
&-title {
|
|
&-title {
|
|
@@ -302,7 +333,7 @@ export default {
|
|
flex: 1 1 50%;
|
|
flex: 1 1 50%;
|
|
background-color: mc('grey', '100');
|
|
background-color: mc('grey', '100');
|
|
position: relative;
|
|
position: relative;
|
|
- height: calc(100vh - 112px);
|
|
|
|
|
|
+ height: $editor-height;
|
|
overflow: hidden;
|
|
overflow: hidden;
|
|
|
|
|
|
@at-root .theme--dark & {
|
|
@at-root .theme--dark & {
|
|
@@ -327,7 +358,7 @@ export default {
|
|
}
|
|
}
|
|
|
|
|
|
&-content {
|
|
&-content {
|
|
- height: calc(100vh - 112px);
|
|
|
|
|
|
+ height: $editor-height;
|
|
overflow-y: scroll;
|
|
overflow-y: scroll;
|
|
padding: 1rem 1rem 1rem 0;
|
|
padding: 1rem 1rem 1rem 0;
|
|
width: calc(100% + 1rem + 17px)
|
|
width: calc(100% + 1rem + 17px)
|
|
@@ -364,7 +395,7 @@ export default {
|
|
color: #FFF;
|
|
color: #FFF;
|
|
|
|
|
|
.v-toolbar__content {
|
|
.v-toolbar__content {
|
|
- padding-left: 16px;
|
|
|
|
|
|
+ padding-left: 78px;
|
|
|
|
|
|
@include until($tablet) {
|
|
@include until($tablet) {
|
|
padding-left: 8px;
|
|
padding-left: 8px;
|
|
@@ -379,6 +410,30 @@ export default {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ &-sidebar {
|
|
|
|
+ background-color: mc('grey', '900');
|
|
|
|
+ width: 64px;
|
|
|
|
+ display: flex;
|
|
|
|
+ flex-direction: column;
|
|
|
|
+ justify-content: flex-start;
|
|
|
|
+ align-items: center;
|
|
|
|
+ padding: 24px 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ &-sysbar {
|
|
|
|
+ padding-left: 0;
|
|
|
|
+
|
|
|
|
+ &-locale {
|
|
|
|
+ background-color: rgba(255,255,255,.25);
|
|
|
|
+ display:inline-flex;
|
|
|
|
+ padding: 0 12px;
|
|
|
|
+ height: 24px;
|
|
|
|
+ width: 63px;
|
|
|
|
+ justify-content: center;
|
|
|
|
+ align-items: center;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
// ==========================================
|
|
// ==========================================
|
|
// Fix FAB revealing under codemirror
|
|
// Fix FAB revealing under codemirror
|
|
// ==========================================
|
|
// ==========================================
|