1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-23 07:09:43 +02:00

Draw.io integration WIP

This commit is contained in:
Harvey Kandola 2018-05-02 14:55:02 +01:00
parent 2b8a7921ad
commit d746c90624
16 changed files with 955 additions and 14 deletions

View file

@ -0,0 +1,54 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
//
// This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
//
// You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>.
//
// https://documize.com
package flowchart
import (
"net/http"
"github.com/documize/community/core/env"
"github.com/documize/community/domain"
"github.com/documize/community/domain/section/provider"
)
// Provider represents Draw.io
type Provider struct {
Runtime *env.Runtime
Store *domain.Store
}
// Meta describes us
func (*Provider) Meta() provider.TypeMeta {
section := provider.TypeMeta{}
section.ID = "d46a18f6-49fb-11e8-842f-0ed5f89f718b"
section.Title = "Graphical Diagram"
section.Description = "Draw.io powered flowcharts and diagrams"
section.ContentType = "flowchart"
section.PageType = "tab"
section.Order = 9991
return section
}
// Command stub.
func (p *Provider) Command(ctx *provider.Context, w http.ResponseWriter, r *http.Request) {
}
// Render returns data as-is (HTML).
func (p *Provider) Render(ctx *provider.Context, config, data string) string {
return data
}
// Refresh just sends back data as-is.
func (*Provider) Refresh(ctx *provider.Context, config, data string) string {
return data
}

View file

@ -25,7 +25,7 @@ import (
"github.com/documize/community/domain/section/provider" "github.com/documize/community/domain/section/provider"
) )
// Provider represents Mermaid Diagram // Provider represents PlantUML Text Diagram
type Provider struct { type Provider struct {
Runtime *env.Runtime Runtime *env.Runtime
Store *domain.Store Store *domain.Store

View file

@ -18,6 +18,7 @@ import (
"github.com/documize/community/domain" "github.com/documize/community/domain"
"github.com/documize/community/domain/section/airtable" "github.com/documize/community/domain/section/airtable"
"github.com/documize/community/domain/section/code" "github.com/documize/community/domain/section/code"
"github.com/documize/community/domain/section/flowchart"
"github.com/documize/community/domain/section/gemini" "github.com/documize/community/domain/section/gemini"
"github.com/documize/community/domain/section/markdown" "github.com/documize/community/domain/section/markdown"
"github.com/documize/community/domain/section/papertrail" "github.com/documize/community/domain/section/papertrail"
@ -41,6 +42,7 @@ func Register(rt *env.Runtime, s *domain.Store) {
provider.Register("wysiwyg", &wysiwyg.Provider{Runtime: rt, Store: s}) provider.Register("wysiwyg", &wysiwyg.Provider{Runtime: rt, Store: s})
provider.Register("airtable", &airtable.Provider{Runtime: rt, Store: s}) provider.Register("airtable", &airtable.Provider{Runtime: rt, Store: s})
provider.Register("plantuml", &plantuml.Provider{Runtime: rt, Store: s}) provider.Register("plantuml", &plantuml.Provider{Runtime: rt, Store: s})
provider.Register("flowchart", &flowchart.Provider{Runtime: rt, Store: s})
p := provider.List() p := provider.List()
rt.Log.Info(fmt.Sprintf("Registered %d sections", len(p))) rt.Log.Info(fmt.Sprintf("Registered %d sections", len(p)))

Binary file not shown.

View file

@ -0,0 +1,138 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
//
// This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
//
// You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>.
//
// https://documize.com
import { schedule } from '@ember/runloop';
import { inject as service } from '@ember/service';
import { computed, observer } from '@ember/object';
import Component from '@ember/component';
export default Component.extend({
appMeta: service(),
sectionSvc: service('section'),
isDirty: false,
waiting: false,
diagram: '',
diagramXML: '',
title: '',
readyToSave: false,
previewButtonCaption: 'Preview',
flowCallback: null,
editorId: computed('page', function () {
let page = this.get('page');
return `flowchart-editor-${page.id}`;
}),
goSave: observer('readyToSave', function() {
if (this.get('readyToSave')) {
let page = this.get('page');
let meta = this.get('meta');
meta.set('rawBody', this.get('diagram'));
page.set('title', this.get('title'));
this.set('waiting', false);
this.teardownEditor();
this.get('onAction')(page, meta);
}
}),
didReceiveAttrs() {
this._super(...arguments);
this.set('waiting', false);
this.set('diagram', this.get('meta.rawBody'));
this.set('title', this.get('page.title'));
},
didInsertElement() {
this._super(...arguments);
schedule('afterRender', () => {
this.setupEditor();
});
},
willDestroyElement() {
this._super(...arguments);
this.teardownEditor();
},
setupEditor() {
let self = this;
let flowCallback = function(evt) {
if (self.get('isDestroyed') || self.get('isDestroying')) return;
if (evt.origin !== 'https://www.draw.io') return;
if (evt.data.length === 0) return;
let editorFrame = document.getElementById(self.get('editorId'));
var msg = JSON.parse(evt.data);
switch (msg.event) {
case 'init':
editorFrame.contentWindow.postMessage(
JSON.stringify({action: 'load', autosave: 1, xmlpng: self.get('diagram')}), '*');
break;
case 'save':
self.set('diagramXML', msg.xml);
// Trigger onAction() callback using sneaky trick.
Mousetrap.trigger('ctrl+s');
break;
case 'autosave':
self.set('diagramXML', msg.xml);
break;
case 'load':
break;
case 'exit':
self.sendAction('onCancel');
break;
case 'export':
self.set('diagram', msg.data);
self.set('readyToSave', true);
break;
}
};
window.addEventListener('message', flowCallback);
this.set('flowCallback', flowCallback);
},
teardownEditor() {
window.removeEventListener('message', this.get('flowCallback'));
},
actions: {
isDirty() {
return this.get('isDirty') || (this.get('diagram') !== this.get('meta.rawBody'));
},
onCancel() {
this.teardownEditor();
this.get('onCancel')();
},
onAction(title) {
this.set('waiting', true);
this.set('title', title);
let editorFrame = document.getElementById(this.get('editorId'));
editorFrame.contentWindow.postMessage(JSON.stringify({action: 'export', format: 'xmlpng', xml: this.get('diagramXML'), spin: 'Updating'}), '*');
}
}
});
// https://github.com/jgraph/drawio-html5/blob/master/localstorage.html
// https://desk.draw.io/support/solutions/articles/16000042546-what-url-parameters-are-supported-
// https://desk.draw.io/support/solutions/articles/16000042544-how-does-embed-mode-work-
// https://jgraph.github.io/mxgraph/docs/js-api/files/editor/mxEditor-js.html

View file

@ -0,0 +1,15 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
//
// This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
//
// You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>.
//
// https://documize.com
import Component from '@ember/component';
export default Component.extend({
});

View file

@ -26,7 +26,6 @@ export function initialize(application) {
application.register('constants:main', cs); application.register('constants:main', cs);
Dropzone.autoDiscover = false; Dropzone.autoDiscover = false;
CodeMirror.modeURL = "/codemirror/mode/%N/%N.js";
} }
export default { export default {

View file

@ -9,14 +9,14 @@
// //
// https://documize.com // https://documize.com
import Model from 'ember-data/model';
import attr from 'ember-data/attr'; import attr from 'ember-data/attr';
// import { belongsTo } from 'ember-data/relationships'; import Model from 'ember-data/model';
export default Model.extend({ export default Model.extend({
pageId: attr('string'), pageId: attr('string'),
documentId: attr('string'), documentId: attr('string'),
orgId: attr('string'), orgId: attr('string'),
userId: attr('string'),
rawBody: attr(), rawBody: attr(),
config: attr(), config: attr(),
externalSource: attr('boolean', { defaultValue: false }), externalSource: attr('boolean', { defaultValue: false }),

View file

@ -10,7 +10,6 @@
// https://documize.com // https://documize.com
import { hash } from 'rsvp'; import { hash } from 'rsvp';
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import Route from '@ember/routing/route'; import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';

View file

@ -22,16 +22,8 @@
@import "vendor.scss"; @import "vendor.scss";
@import "print.scss"; @import "print.scss";
@import "section/trello.scss";
@import "section/gemini.scss";
@import "section/github.scss";
@import "section/markdown.scss";
@import "section/table.scss";
@import "section/code.scss";
@import "section/plantuml.scss";
@import "section/papertrail.scss";
@import "section/wysiwyg.scss";
@import "news.scss"; @import "news.scss";
@import "section/all.scss";
@import "enterprise/all.scss"; @import "enterprise/all.scss";
// Bootstrap override that removes gutter space on smaller screens // Bootstrap override that removes gutter space on smaller screens

View file

@ -0,0 +1,10 @@
@import "trello.scss";
@import "gemini.scss";
@import "github.scss";
@import "markdown.scss";
@import "table.scss";
@import "code.scss";
@import "plantuml.scss";
@import "papertrail.scss";
@import "wysiwyg.scss";
@import "flowchart.scss";

View file

@ -0,0 +1,715 @@
.geEditor {
font-family:Helvetica Neue,Helvetica,Arial Unicode MS,Arial !important;
font-size:10pt;
border:none;
margin:0px;
color:#000000 !important;
}
.geEditor input[type=text]::-ms-clear {
display: none;
}
.geMenubarContainer .geItem, .geToolbar .geButton, .geToolbar .geLabel, .geSidebarContainer .geTitle {
cursor:pointer !important;
}
.geBackgroundPage {
-webkit-box-shadow:0px 0px 3px 0px #d9d9d9;
-moz-box-shadow:0px 0px 3px 0px #d9d9d9;
box-shadow:0px 0px 3px 0px #d9d9d9;
}
.geSidebarContainer a, .geMenubarContainer a, .geToolbar a {
color:#000000 !important;
text-decoration:none;
}
.geMenubarContainer, .geToolbarContainer, .geDiagramContainer, .geSidebarContainer, .geFooterContainer, .geHsplit, .geVsplit {
overflow:hidden;
position:absolute;
cursor:default;
}
.geFormatContainer {
background-color:whiteSmoke;
overflow-x: hidden !important;
overflow-y: auto !important;
font-size:12px;
}
.geDiagramContainer {
background-color:#ffffff;
outline:none;
}
.geMenubar, .geToolbar {
white-space:nowrap;
display:block;
width:100%;
}
.geMenubarContainer .geItem, .geToolbar .geButton, .geToolbar .geLabel, .geSidebar, .geSidebarContainer .geTitle, .geSidebar .geItem, .mxPopupMenuItem {
-webkit-transition: all 0.1s ease-in-out;
-moz-transition: all 0.1s ease-in-out;
-o-transition: all 0.1s ease-in-out;
-ms-transition: all 0.1s ease-in-out;
transition: all 0.1s ease-in-out;
}
.geHint {
background-color: #ffffff;
border: 1px solid gray;
padding: 4px 16px 4px 16px;
border-radius:3px;
-webkit-box-shadow: 1px 1px 2px 0px #ddd;
-moz-box-shadow: 1px 1px 2px 0px #ddd;
box-shadow: 1px 1px 2px 0px #ddd;
opacity:0.8;
filter:alpha(opacity=80);
}
.geStatusAlert {
white-space:nowrap;
margin-top:-5px;
font-size:12px;
padding:4px 6px 4px 6px;
background-color:#f2dede;
border:1px solid #ebccd1;
color:#a94442 !important;
border-radius:3px;
}
.geStatusAlert:hover {
background-color:#f1d8d8;
border-color:#d6b2b8;
}
.geStatusMessage {
white-space:nowrap;
margin-top:-5px;
padding:4px 6px 4px 6px;
font-size:12px;
background-image: -webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);
background-image: -o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);
background-image: -webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));
background-image: linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
border:1px solid #b2dba1;
border-radius:3px;
color:#3c763d !important;
}
.geStatusMessage:hover {
background:#c8e5bc;
border-color:#b2dba1;
}
.geAlert {
position:absolute;
white-space:nowrap;
padding:14px;
background-color:#f2dede;
border:1px solid #ebccd1;
color:#a94442;
border-radius:3px;
-webkit-box-shadow: 2px 2px 3px 0px #ddd;
-moz-box-shadow: 2px 2px 3px 0px #ddd;
box-shadow: 2px 2px 3px 0px #ddd;
}
.geBtn {
background-color: #f5f5f5;
border-radius: 2px;
border: 1px solid #d8d8d8;
color: #333;
cursor: default;
font-size: 11px;
font-weight: bold;
height: 29px;
line-height: 27px;
margin: 0 0 0 8px;
min-width: 72px;
outline: 0;
padding: 0 8px;
cursor: pointer;
}
.geBtn:hover, .geBtn:focus {
-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
-moz-box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
border: 1px solid #c6c6c6;
background-color: #f8f8f8;
background-image: linear-gradient(#f8f8f8 0px,#f1f1f1 100%);
color: #111;
}
.geBtn:disabled {
opacity: .5;
}
.geBtnUp {
background-image: url(data:image/gif;base64,R0lGODlhCgAGAJECAGZmZtXV1f///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0QzM3ODJERjg4NUQxMUU0OTFEQ0E2MzRGQzcwNUY3NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0QzM3ODJFMDg4NUQxMUU0OTFEQ0E2MzRGQzcwNUY3NCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRDMzc4MkREODg1RDExRTQ5MURDQTYzNEZDNzA1Rjc0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjRDMzc4MkRFODg1RDExRTQ5MURDQTYzNEZDNzA1Rjc0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAAgAsAAAAAAoABgAAAg6UjwiQBhGYglCKhXFLBQA7);
_background-image: url(up.gif);
background-position: center center;
background-repeat: no-repeat;
}
.geBtnUp:active {
background-color: #4d90fe;
background-image: linear-gradient(#4d90fe 0px,#357ae8 100%);
}
.geBtnDown {
background-image: url(data:image/gif;base64,R0lGODlhCgAGAJECANXV1WZmZv///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0QzM3ODJEQjg4NUQxMUU0OTFEQ0E2MzRGQzcwNUY3NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0QzM3ODJEQzg4NUQxMUU0OTFEQ0E2MzRGQzcwNUY3NCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRDMzc4MkQ5ODg1RDExRTQ5MURDQTYzNEZDNzA1Rjc0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjRDMzc4MkRBODg1RDExRTQ5MURDQTYzNEZDNzA1Rjc0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAAgAsAAAAAAoABgAAAg6UjxLLewEiCAnOZBzeBQA7);
_background-image: url(down.gif);
background-position: center center;
background-repeat: no-repeat;
}
.geBtnDown:active {
background-color: #4d90fe;
background-image: linear-gradient(#4d90fe 0px,#357ae8 100%);
}
.geColorBtn {
background-color: #f5f5f5;
background-image: linear-gradient(#f5f5f5 0px,#e1e1e1 100%);
border-radius: 4px;
border: 1px solid rgba(0,0,0,0.5);
color: #333;
cursor: default;
margin: 0px;
outline: 0;
padding: 0px;
cursor: pointer;
}
.geColorBtn:hover {
-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
-moz-box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
border: 1px solid rgba(0,0,0,0.7);
}
.geColorBtn:active {
background-color: #4d90fe;
background-image: linear-gradient(#4d90fe 0px,#357ae8 100%);
border: 1px solid #2f5bb7;
color: #fff;
}
.geColorBtn:disabled {
opacity: .5;
}
.gePrimaryBtn {
background-color: #4d90fe;
background-image: linear-gradient(#4d90fe 0px,#4787ed 100%);
border: 1px solid #3079ed;
color: #fff;
}
.gePrimaryBtn:hover, .gePrimaryBtn:focus {
background-color: #357ae8;
background-image: linear-gradient(#4d90fe 0px,#357ae8 100%);
border: 1px solid #2f5bb7;
color: #fff;
}
.gePrimaryBtn:disabled {
opacity: .5;
}
.geAlertLink {
color:#843534;
font-weight:700;
text-decoration:none;
}
.geMenubarContainer {
background-color:#ffffff;
}
.geMenubar {
padding:0px 2px 0px 2px;
vertical-align:middle;
}
.geMenubarContainer .geItem, .geToolbar .geItem {
padding:6px 8px 6px 8px;
cursor:default;
}
.geMenubarContainer .geItem:hover {
background:#eeeeee;
}
.mxDisabled:hover {
background:inherit !important;
}
.geMenubar a.geStatus {
color:#b3b3b3;
padding-left:6px;
display:inline-block;
cursor:default !important;
}
.geMenubar a.geStatus:hover {
background:transparent;
}
.geMenubarMenu {
border:1px solid #d5d5d5 !important;
}
.geToolbarContainer {
background:whiteSmoke;
border-bottom:1px solid #e0e0e0;
}
.geSidebarContainer .geToolbarContainer {
background:transparent;
border-bottom:none;
}
.geSidebarContainer button {
text-overflow:ellipsis;
overflow:hidden;
}
.geToolbar {
padding:1px 0px 0px 6px;
border-top:1px solid #e0e0e0;
-webkit-box-shadow: inset 0 1px 0 0 #fff;
-moz-box-shadow: inset 0 1px 0 0 #fff;
box-shadow: inset 0 1px 0 0 #fff;
}
.geToolbarContainer .geSeparator {
float:left;
width:1px;
height:34px;
background:#e5e5e5;
margin-left:6px;
margin-right:6px;
margin-top:-2px;
}
.geToolbarContainer .geButton {
float:left;
width:20px;
height:20px;
padding:0px 2px 4px 2px;
margin:2px;
border:1px solid transparent;
cursor:pointer;
opacity:0.6;
filter:alpha(opacity=60);
}
.geToolbarContainer .geButton:hover {
border:1px solid gray;
border-radius:2px;
opacity:1;
filter:none !important;
}
.geToolbarContainer .geButton:active {
border:1px solid black;
}
div.mxWindow .geButton {
margin: -1px 2px 2px 2px;
padding: 1px 2px 2px 1px;
}
.geToolbarContainer .geLabel {
float:left;
margin:2px;
cursor:pointer;
padding:3px 5px 3px 5px;
border:1px solid transparent;
opacity:0.6;
filter:alpha(opacity=60);
}
.geToolbarContainer .geLabel:hover {
border:1px solid gray;
border-radius:2px;
opacity:0.9;
filter:alpha(opacity=90) !important;
}
.geToolbarContainer .geLabel:active {
border:1px solid black;
opacity:1;
filter:none !important;
}
.geToolbarContainer .mxDisabled:hover {
border:1px solid transparent !important;
opacity:0.2 !important;
filter:alpha(opacity=20) !important;
}
.geToolbarMenu {
border:3px solid #e0e0e0 !important;
-webkit-box-shadow:none !important;
-moz-box-shadow:none !important;
box-shadow:none !important;
filter:none !important;
}
.geDiagramBackdrop {
background-color: #ebebeb;
border: 1px solid #e5e5e5;
}
.geSidebarContainer {
background:#ffffff;
overflow:hidden;
position:absolute;
border-top:1px solid #e5e5e5;
overflow:auto;
}
.geSidebar {
background:whiteSmoke;
border-bottom:1px solid #e5e5e5;
padding:5px;
_padding:1px;
padding-bottom:12px;
overflow:hidden;
}
.geSidebarContainer .geTitle {
display:block;
font-size:9pt;
border-bottom:1px solid #e5e5e5;
font-weight:normal;
padding:6px 0px 6px 14px;
margin:0px;
cursor:default;
background:#eeeeee;
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;
line-height:1.4em;
}
.geSidebarContainer .geTitle:hover {
background:#e5e5e5;
}
.geTitle img {
opacity:0.5;
_filter:alpha(opacity=50);
}
.geTitle img:hover {
opacity:1;
_filter:alpha(opacity=100);
}
.geTitle .geButton {
border:1px solid transparent;
padding:3px;
border-radius:2px;
}
.geTitle .geButton:hover {
border:1px solid gray;
}
.geSidebar .geItem {
display:inline-block;
background-repeat:no-repeat;
background-position:50% 50%;
border:1px solid transparent;
border-radius:2px;
cursor: move;
}
.geSidebar .geItem:hover {
border:1px solid gray !important;
}
.geItem {
vertical-align: top;
display: inline-block;
}
.geSidebarTooltip {
position:absolute;
background:white;
overflow:hidden;
border:1px solid gray;
border-radius:8px;
-webkit-box-shadow:0px 0px 2px 2px #d5d5d5;
-moz-box-shadow:0px 0px 2px 2px #d5d5d5;
box-shadow:0px 0px 2px 2px #d5d5d5;
_filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=2, OffY=2, Color='#d5d5d5', Positive='true');
}
.geFooterContainer {
background:#e5e5e5;
border-top:1px solid #c0c0c0;
}
.geFooterContainer a {
display:inline-block;
box-sizing:border-box;
width:100%;
white-space:nowrap;
font-size:14px;
color:#235695;
font-weight:bold;
text-decoration:none;
}
.geFooterContainer table {
border-collapse:collapse;
margin:0 auto;
}
.geFooterContainer td {
border-left:1px solid #c0c0c0;
border-right:1px solid #c0c0c0;
}
.geFooterContainer td:hover {
background-color: #b3b3b3;
}
.geHsplit {
cursor:col-resize;
background-color:#e5e5e5;
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAHBAMAAADdS/HjAAAAGFBMVEUzMzP///9tbW1QUFCKiopBQUF8fHxfX1/IXlmXAAAAHUlEQVQImWMQEGAQFWUQFmYQF2cQEmIQE2MQEQEACy4BF67hpEwAAAAASUVORK5CYII=);
_background-image:url('thumb_vertical.png');
background-repeat:no-repeat;
background-position:center center;
}
.geVsplit {
font-size:1pt;
cursor:row-resize;
background-color:#e5e5e5;
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAEBAMAAACw6DhOAAAAGFBMVEUzMzP///9tbW1QUFCKiopBQUF8fHxfX1/IXlmXAAAAFElEQVQImWNgNVdzYBAUFBRggLMAEzYBy29kEPgAAAAASUVORK5CYII=);
_background-image:url('thumb_horz.png');
background-repeat:no-repeat;
background-position:center center;
}
.geHsplit:hover, .geVsplit:hover {
background-color:#d5d5d5;
}
.geDialog {
position:absolute;
background:white;
overflow:hidden;
padding:30px;
border:1px solid #acacac;
-webkit-box-shadow:0px 0px 2px 2px #d5d5d5;
-moz-box-shadow:0px 0px 2px 2px #d5d5d5;
box-shadow:0px 0px 2px 2px #d5d5d5;
_filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=2, OffY=2, Color='#d5d5d5', Positive='true');
z-index: 2;
}
.geDialogClose {
position:absolute;
width:9px;
height:9px;
opacity:0.5;
cursor:pointer;
_filter:alpha(opacity=50);
}
.geDialogClose:hover {
opacity:1;
}
.geDialogTitle {
box-sizing:border-box;
white-space:nowrap;
background:rgb(229, 229, 229);
border-bottom:1px solid rgb(192, 192, 192);
font-size:15px;
font-weight:bold;
text-align:center;
color:rgb(35, 86, 149);
}
.geDialogFooter {
background:whiteSmoke;
white-space:nowrap;
text-align:right;
box-sizing:border-box;
border-top:1px solid #e5e5e5;
color:darkGray;
}
.geSprite {
background:url('data:image/png;base64,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') no-repeat;
_background:url('sprites.png') no-repeat top left;
width:21px;
height:21px;
}
.geBaseButton {
padding:10px;
border-radius:6px;
border:1px solid #c0c0c0;
cursor:pointer;
background-color:#ececec;
background-image:linear-gradient(#ececec 0%, #fcfcfc 100%);
}
.geBaseButton:hover {
background:#ececec;
}
.geBigButton {
color:#ffffff;
border: none;
padding:10px;
font-size:14pt;
white-space: nowrap;
border-radius:6px;
text-shadow: rgb(41, 89, 137) 0px 1px 0px;
background-color:#428bca;
background-image:linear-gradient(rgb(70, 135, 206) 0px, rgb(48, 104, 162) 100%);
-webkit-box-shadow: rgba(255, 255, 255, 0.0980392) 0px 1px 0px 0px inset, rgba(0, 0, 0, 0.2) 0px 1px 1px 0px;
-moz-box-shadow: rgba(255, 255, 255, 0.0980392) 0px 1px 0px 0px inset, rgba(0, 0, 0, 0.2) 0px 1px 1px 0px;
box-shadow: rgba(255, 255, 255, 0.0980392) 0px 1px 0px 0px inset, rgba(0, 0, 0, 0.2) 0px 1px 1px 0px;
}
.geBigButton:hover {
background-color:#2d6ca2;
background-image: linear-gradient(rgb(90, 148, 211) 0px, rgb(54, 115, 181) 100%);
}
.geBigButton:active {
background-color: rgb(54, 115, 181);
background-image: none;
}
@media print {
div.geNoPrint { display: none !important; }
}
.geSprite-actualsize { background-position: 0 0; }
.geSprite-bold { background-position: 0 -46px; }
.geSprite-bottom { background-position: 0 -92px; }
.geSprite-center { background-position: 0 -138px; }
.geSprite-delete { background-position: 0 -184px; }
.geSprite-fillcolor { background-position: 0 -229px; }
.geSprite-fit { background-position: 0 -277px; }
.geSprite-fontcolor { background-position: 0 -322px; }
.geSprite-gradientcolor { background-position: 0 -368px; }
.geSprite-image { background-position: 0 -414px; }
.geSprite-italic { background-position: 0 -460px; }
.geSprite-left { background-position: 0 -505px; }
.geSprite-middle { background-position: 0 -552px; }
.geSprite-print { background-position: 0 -598px; }
.geSprite-redo { background-position: 0 -644px; }
.geSprite-right { background-position: 0 -689px; }
.geSprite-shadow { background-position: 0 -735px; }
.geSprite-strokecolor { background-position: 0 -782px; }
.geSprite-top { background-position: 0 -828px; }
.geSprite-underline { background-position: 0 -874px; }
.geSprite-undo { background-position: 0 -920px; }
.geSprite-zoomin { background-position: 0 -966px; }
.geSprite-zoomout { background-position: 0 -1012px; }
.geSprite-arrow { background-position: 0 -1059px; }
.geSprite-linkedge { background-position: 0 -1105px; }
.geSprite-straight { background-position: 0 -1150px; }
.geSprite-entity { background-position: 0 -1196px; }
.geSprite-orthogonal { background-position: 0 -1242px; }
.geSprite-curved { background-position: 0 -1288px; }
.geSprite-noarrow { background-position: 0 -1334px; }
.geSprite-endclassic { background-position: 0 -1380px; }
.geSprite-endopen { background-position: 0 -1426px; }
.geSprite-endblock { background-position: 0 -1472px; }
.geSprite-endoval { background-position: 0 -1518px; }
.geSprite-enddiamond { background-position: 0 -1564px; }
.geSprite-endthindiamond { background-position: 0 -1610px; }
.geSprite-endclassictrans { background-position: 0 -1656px; }
.geSprite-endblocktrans { background-position: 0 -1702px; }
.geSprite-endovaltrans { background-position: 0 -1748px; }
.geSprite-enddiamondtrans { background-position: 0 -1794px; }
.geSprite-endthindiamondtrans { background-position: 0 -1840px; }
.geSprite-startclassic { background-position: 0 -1886px; }
.geSprite-startopen { background-position: 0 -1932px; }
.geSprite-startblock { background-position: 0 -1978px; }
.geSprite-startoval { background-position: 0 -2024px; }
.geSprite-startdiamond { background-position: 0 -2070px; }
.geSprite-startthindiamond { background-position: 0 -2116px; }
.geSprite-startclassictrans { background-position: 0 -2162px; }
.geSprite-startblocktrans { background-position: 0 -2208px; }
.geSprite-startovaltrans { background-position: 0 -2254px; }
.geSprite-startdiamondtrans { background-position: 0 -2300px; }
.geSprite-startthindiamondtrans { background-position: 0 -2346px; }
.geSprite-globe { background-position: 0 -2392px; }
.geSprite-orderedlist { background-position: 0 -2438px; }
.geSprite-unorderedlist { background-position: 0 -2484px; }
.geSprite-horizontalrule { background-position: 0 -2530px; }
.geSprite-link { background-position: 0 -2576px; }
.geSprite-indent { background-position: 0 -2622px; }
.geSprite-outdent { background-position: 0 -2668px; }
.geSprite-code { background-position: 0 -2714px; }
.geSprite-fontbackground { background-position: 0 -2760px; }
.geSprite-removeformat { background-position: 0 -2806px; }
.geSprite-superscript { background-position: 0 -2852px; }
.geSprite-subscript { background-position: 0 -2898px; }
.geSprite-table { background-position: 0 -2944px; }
.geSprite-deletecolumn { background-position: 0 -2990px; }
.geSprite-deleterow { background-position: 0 -3036px; }
.geSprite-insertcolumnafter { background-position: 0 -3082px; }
.geSprite-insertcolumnbefore { background-position: 0 -3128px; }
.geSprite-insertrowafter { background-position: 0 -3174px; }
.geSprite-insertrowbefore { background-position: 0 -3220px; }
.geSprite-grid { background-position: 0 -3272px; }
.geSprite-guides { background-position: 0 -3324px; }
.geSprite-dots { background-position: 0 -3370px; }
.geSprite-alignleft { background-position: 0 -3416px; }
.geSprite-alignright { background-position: 0 -3462px; }
.geSprite-aligncenter { background-position: 0 -3508px; }
.geSprite-aligntop { background-position: 0 -3554px; }
.geSprite-alignbottom { background-position: 0 -3600px; }
.geSprite-alignmiddle { background-position: 0 -3646px; }
.geSprite-justifyfull { background-position: 0 -3692px; }
.geSprite-formatpanel { background-position: 0 -3738px; }
.geSprite-connection { background-position: 0 -3784px; }
.geSprite-vertical { background-position: 0 -3830px; }
.geSprite-simplearrow { background-position: 0 -3876px; }
.geSprite-plus { background-position: 0 -3922px; }
.geSprite-rounded { background-position: 0 -3968px; }
.geSprite-toback { background-position: 0 -4014px; }
.geSprite-tofront { background-position: 0 -4060px; }
.geSprite-duplicate { background-position: 0 -4106px; }
.geSprite-insert { background-position: 0 -4152px; }
.geSprite-endblockthin { background-position: 0 -4201px; }
.geSprite-endblockthintrans { background-position: 0 -4247px; }
.geSprite-enderone { background-position: 0 -4293px; }
.geSprite-enderonetoone { background-position: 0 -4339px; }
.geSprite-enderonetomany { background-position: 0 -4385px; }
.geSprite-endermany { background-position: 0 -4431px; }
.geSprite-enderoneopt { background-position: 0 -4477px; }
.geSprite-endermanyopt { background-position: 0 -4523px; }
.geSprite-endclassicthin { background-position: 0 -4938px; }
.geSprite-endclassicthintrans { background-position: 0 -4984px; }
.geSprite-enddash { background-position: 0 -5029px; }
.geSprite-endcircleplus { background-position: 0 -5075px; }
.geSprite-endcircle { background-position: 0 -5121px; }
.geSprite-endasync { background-position: 0 -5167px; }
.geSprite-endasynctrans { background-position: 0 -5213px; }
.geSprite-startblockthin { background-position: 0 -4569px; }
.geSprite-startblockthintrans { background-position: 0 -4615px; }
.geSprite-starterone { background-position: 0 -4661px; }
.geSprite-starteronetoone { background-position: 0 -4707px; }
.geSprite-starteronetomany { background-position: 0 -4753px; }
.geSprite-startermany { background-position: 0 -4799px; }
.geSprite-starteroneopt { background-position: 0 -4845px; }
.geSprite-startermanyopt { background-position: 0 -4891px; }
.geSprite-startclassicthin { background-position: 0 -5259px; }
.geSprite-startclassicthintrans { background-position: 0 -5305px; }
.geSprite-startdash { background-position: 0 -5351px; }
.geSprite-startcircleplus { background-position: 0 -5397px; }
.geSprite-startcircle { background-position: 0 -5443px; }
.geSprite-startasync { background-position: 0 -5489px; }
.geSprite-startasynctrans { background-position: 0 -5535px; }
.geSprite-startcross { background-position: 0 -5581px; }
.geSprite-startopenthin { background-position: 0 -5627px; }
.geSprite-startopenasync { background-position: 0 -5673px; }
.geSprite-endcross { background-position: 0 -5719px; }
.geSprite-endopenthin { background-position: 0 -5765px; }
.geSprite-endopenasync { background-position: 0 -5811px; }
.geSprite-verticalelbow { background-position: 0 -5857px; }
.geSprite-horizontalelbow { background-position: 0 -5903px; }
.geSprite-horizontalisometric { background-position: 0 -5949px; }
.geSprite-verticalisometric { background-position: 0 -5995px; }
html div.mxRubberband {
border-color:#0000DD;
background:#99ccff;
}
td.mxPopupMenuIcon div {
width:16px;
height:16px;
}
html div.mxPopupMenu {
-webkit-box-shadow:2px 2px 3px #d5d5d5;
-moz-box-shadow:2px 2px 3px #d5d5d5;
box-shadow:2px 2px 3px #d5d5d5;
_filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=2, OffY=2, Color='#d0d0d0', Positive='true');
background:white;
position:absolute;
border:3px solid #e7e7e7;
padding:3px;
}
html table.mxPopupMenu {
border-collapse:collapse;
margin:0px;
}
html td.mxPopupMenuItem {
padding:7px 30px 7px 30px;
font-family:Helvetica Neue,Helvetica,Arial Unicode MS,Arial;
font-size:10pt;
}
html td.mxPopupMenuIcon {
background-color:white;
padding:0px;
}
td.mxPopupMenuIcon .geIcon {
padding:2px;
padding-bottom:4px;
margin:2px;
border:1px solid transparent;
opacity:0.5;
_width:26px;
_height:26px;
}
td.mxPopupMenuIcon .geIcon:hover {
border:1px solid gray;
border-radius:2px;
opacity:1;
}
html tr.mxPopupMenuItemHover {
background-color: #eeeeee;
color: black;
}
table.mxPopupMenu hr {
color:#cccccc;
background-color:#cccccc;
border:none;
height:1px;
}
table.mxPopupMenu tr {
font-size:4pt;
}
html td.mxWindowTitle {
font-family:Helvetica Neue,Helvetica,Arial Unicode MS,Arial;
text-align:left;
font-size:12px;
color:rgb(112, 112, 112);
padding:4px;
}

View file

@ -0,0 +1,14 @@
{{#section/base-editor document=document folder=folder page=page busy=waiting tip="Concise name that describes the diagram" isDirty=(action 'isDirty') onCancel=(action 'onCancel') onAction=(action 'onAction')}}
<div class="section-flowchart-diagram">
<div class="container">
<div class="row">
<div class="col-12">
<iframe id={{editorId}}
src="https://www.draw.io/?embed=1&ui=Kennedy&spin=0&proto=json&splash=0"
style="frameborder:0; border: 0; width: 100%; height: 1000px;">
</iframe>
</div>
</div>
</div>
</div>
{{/section/base-editor}}

View file

@ -0,0 +1,3 @@
<div class="text-center">
<img src="{{page.body}}" />
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 630 B