|
@@ -0,0 +1,120 @@
|
|
|
+<template lang='pug'>
|
|
|
+ v-card.editor-modal-drawio.animated.fadeIn(flat, tile)
|
|
|
+ iframe(
|
|
|
+ ref='drawio'
|
|
|
+ src='https://embed.diagrams.net/?embed=1&proto=json&spin=1&saveAndExit=0'
|
|
|
+ frameborder='0'
|
|
|
+ )
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import { sync, get } from 'vuex-pathify'
|
|
|
+
|
|
|
+const xmlTest = `<?xml version="1.0" encoding="UTF-8"?>
|
|
|
+<mxfile host="app.diagrams.net" modified="2020-07-10T23:41:09.492Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.61" etag="nuFLQDTKlZwSpOz4sG5q" version="13.4.2">
|
|
|
+ <diagram id="SgbkCjxR32CZT1FvBvkp" name="Page-1">
|
|
|
+ <mxGraphModel dx="2062" dy="1123" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
|
|
+ <root>
|
|
|
+ <mxCell id="0" />
|
|
|
+ <mxCell id="1" parent="0" />
|
|
|
+ <mxCell id="5gE3BTvRYS_8FoJnOusC-1" value="" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
|
|
|
+ <mxGeometry x="380" y="530" width="80" height="80" as="geometry" />
|
|
|
+ </mxCell>
|
|
|
+ </root>
|
|
|
+ </mxGraphModel>
|
|
|
+ </diagram>
|
|
|
+</mxfile>
|
|
|
+`
|
|
|
+
|
|
|
+export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ editorKey: get('editor/editorKey'),
|
|
|
+ activeModal: sync('editor/activeModal')
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ close () {
|
|
|
+ this.activeModal = ''
|
|
|
+ },
|
|
|
+ overwriteAndClose() {
|
|
|
+ this.$root.$emit('overwriteEditorContent')
|
|
|
+ this.$root.$emit('resetEditorConflict')
|
|
|
+ this.close()
|
|
|
+ },
|
|
|
+ send (msg) {
|
|
|
+ this.$refs.drawio.contentWindow.postMessage(JSON.stringify(msg), '*')
|
|
|
+ },
|
|
|
+ receive (evt) {
|
|
|
+ if (evt.frame === null || evt.source !== this.$refs.drawio.contentWindow || evt.data.length < 1) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ const msg = JSON.parse(evt.data)
|
|
|
+ switch (msg.event) {
|
|
|
+ case 'init': {
|
|
|
+ this.send({
|
|
|
+ action: 'load',
|
|
|
+ autosave: 0,
|
|
|
+ saveAndExit: '0',
|
|
|
+ modified: 'unsavedChanges',
|
|
|
+ xml: xmlTest,
|
|
|
+ title: this.$store.get('page/title')
|
|
|
+ })
|
|
|
+ break
|
|
|
+ }
|
|
|
+ case 'save': {
|
|
|
+ console.info(msg)
|
|
|
+ if (msg.exit) {
|
|
|
+ this.close()
|
|
|
+ } else {
|
|
|
+ this.send({
|
|
|
+ action: 'status',
|
|
|
+ messageKey: 'allChangesSaved',
|
|
|
+ modified: false
|
|
|
+ })
|
|
|
+ }
|
|
|
+ break
|
|
|
+ }
|
|
|
+ case 'exit': {
|
|
|
+ this.close()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ console.error(err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async mounted () {
|
|
|
+ window.addEventListener('message', this.receive)
|
|
|
+ },
|
|
|
+ beforeDestroy () {
|
|
|
+ window.removeEventListener('message', this.receive)
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang='scss'>
|
|
|
+.editor-modal-drawio {
|
|
|
+ position: fixed !important;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ z-index: 10;
|
|
|
+ width: 100%;
|
|
|
+ height: 100vh;
|
|
|
+ background-color: rgba(255,255,255, 1) !important;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ > iframe {
|
|
|
+ width: 100%;
|
|
|
+ height: 100vh;
|
|
|
+ border: 0;
|
|
|
+ padding: 0;
|
|
|
+ background-color: #FFF;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|