From 89957c8278ec8ba9450c818c6df19d88d2e8d40b Mon Sep 17 00:00:00 2001 From: Harvey Kandola Date: Thu, 20 Dec 2018 18:12:17 +0000 Subject: [PATCH] Change add-ons to use new UI framework --- domain/section/gemini/gemini.go | 10 +- gui/app/constants/constants.js | 12 ++- gui/app/pods/document/section/template.hbs | 33 +++---- gui/app/styles/core/icon.scss | 26 +++++- gui/app/styles/core/layout/grid.scss | 4 + .../core/view/document/section-editor.scss | 6 +- .../section/airtable/type-editor.hbs | 5 + .../components/section/base-editor-inline.hbs | 87 +++++++++--------- .../components/section/base-editor.hbs | 43 ++++----- .../section/flowchart/type-editor.hbs | 21 ++--- .../components/section/gemini/type-editor.hbs | 78 ++++++++-------- .../components/section/jira/type-editor.hbs | 63 ++++++------- .../section/papertrail/type-editor.hbs | 75 ++++++++------- .../section/plantuml/type-editor.hbs | 67 +++++++------- .../components/section/trello/type-editor.hbs | 9 +- gui/public/assets/font/dmzui.eot | Bin 16900 -> 17984 bytes gui/public/assets/font/dmzui.svg | 20 +++- gui/public/assets/font/dmzui.ttf | Bin 16744 -> 17828 bytes gui/public/assets/font/dmzui.woff | Bin 8856 -> 9432 bytes gui/public/assets/font/dmzui.woff2 | Bin 7292 -> 7784 bytes 20 files changed, 301 insertions(+), 258 deletions(-) diff --git a/domain/section/gemini/gemini.go b/domain/section/gemini/gemini.go index cdc99637..23c60444 100644 --- a/domain/section/gemini/gemini.go +++ b/domain/section/gemini/gemini.go @@ -157,7 +157,6 @@ func (p *Provider) Refresh(ctx *provider.Context, config, data string) (newData func auth(ctx *provider.Context, store *store.Store, w http.ResponseWriter, r *http.Request) { defer r.Body.Close() body, err := ioutil.ReadAll(r.Body) - if err != nil { provider.WriteMessage(w, "gemini", "Bad payload") return @@ -165,7 +164,6 @@ func auth(ctx *provider.Context, store *store.Store, w http.ResponseWriter, r *h var config = geminiConfig{} err = json.Unmarshal(body, &config) - if err != nil { provider.WriteMessage(w, "gemini", "Bad payload") return @@ -177,30 +175,26 @@ func auth(ctx *provider.Context, store *store.Store, w http.ResponseWriter, r *h provider.WriteMessage(w, "gemini", "Missing URL value") return } - if len(config.Username) == 0 { provider.WriteMessage(w, "gemini", "Missing Username value") return } - if len(config.APIKey) == 0 { provider.WriteMessage(w, "gemini", "Missing APIKey value") return } creds := []byte(fmt.Sprintf("%s:%s", config.Username, config.APIKey)) - req, err := http.NewRequest("GET", fmt.Sprintf("%s/api/users/username/%s", config.URL, config.Username), nil) req.Header.Set("Authorization", "Basic "+base64.StdEncoding.EncodeToString(creds)) client := &http.Client{} res, err := client.Do(req) - if err != nil { provider.WriteError(w, "gemini", err) + fmt.Println(err) return } - if res.StatusCode != http.StatusOK { provider.WriteForbidden(w) return @@ -213,9 +207,9 @@ func auth(ctx *provider.Context, store *store.Store, w http.ResponseWriter, r *h dec := json.NewDecoder(res.Body) err = dec.Decode(&g) - if err != nil { provider.WriteError(w, "gemini", err) + fmt.Println(err) return } diff --git a/gui/app/constants/constants.js b/gui/app/constants/constants.js index 1242bda7..68a3b9fc 100644 --- a/gui/app/constants/constants.js +++ b/gui/app/constants/constants.js @@ -217,7 +217,8 @@ let constants = EmberObject.extend({ Category: 'dicon-flag', Checkbox: 'dicon-shape-rectangle', CheckboxChecked: 'dicon-i-check', - Copy: 'dicon-single-copy-04', + Copy: 'dicon-copy', + Cross: 'dicon-i-remove', Database: 'dicon-database', Download: 'dicon-download', Delete: 'dicon-bin', @@ -227,9 +228,10 @@ let constants = EmberObject.extend({ Export2: 'dicon-upload', Filter: 'dicon-sort-tool', Grid1: 'dicon-grid-interface', - Handshake: 'handshake', + Handshake: 'dicon-handshake', Index: 'dicon-align-justify', Integrations: 'dicon-geometry', + Link: 'dicon-link', ListBullet: 'dicon-list-bullet-2', Locked: 'dicon-lock', NotAllowed: 'dicon-ban', @@ -238,12 +240,17 @@ let constants = EmberObject.extend({ Plus: 'dicon-e-add', Person: 'dicon-single-01', People: 'dicon-multiple-19', + Preview: 'dicon-preview', Remove: 'dicon-i-remove', RemoveUser: 'dicon-delete-28', Search: 'dicon-magnifier', Send: 'dicon-send', Settings: 'dicon-settings-gear', Tag: 'dicon-delete-key', + TickSmall: 'dicon-d-check', + Tick: 'dicon-check', + TickSingle: 'dicon-check-single', + TickDouble: 'dicon-check-double', TimeBack: 'dicon-time', TriangleSmallUp: 'dicon-small-triangle-up', TriangleSmallDown: 'dicon-small-triangle-down', @@ -263,6 +270,7 @@ let constants = EmberObject.extend({ Label: { // eslint-disable-line ember/avoid-leaking-state-in-ember-objects Add: 'Add', Activate: "Activate", + Authenticate: 'Authenticate', Cancel: 'Cancel', Close: 'Close', Delete: 'Delete', diff --git a/gui/app/pods/document/section/template.hbs b/gui/app/pods/document/section/template.hbs index cb420a84..1bd42bef 100644 --- a/gui/app/pods/document/section/template.hbs +++ b/gui/app/pods/document/section/template.hbs @@ -1,25 +1,14 @@ -{{#layout/top-bar}} -
  • - {{#link-to "folder.index" model.folder.id model.folder.slug class="link"}} - {{model.folder.name}} - {{/link-to}} -
  • -
  • - {{#link-to "document.index" model.folder.id model.folder.slug model.document.id model.document.slug class="link selected"}} - {{model.document.name}} - {{/link-to}} -
  • -{{/layout/top-bar}} +{{#layout/master-sidebar}} + {{ui/ui-spacer size=300}} -
    -
    -
    -
    - {{document/document-editor document=model.document folder=model.folder page=model.page meta=model.meta onCancel=(action "onCancel") onAction=(action "onAction")}} -
    -
    +
    + {{#link-to "document.index" model.folder.id model.folder.slug model.document.id model.document.slug}} + {{ui/ui-button color=constants.Color.Yellow light=true icon=constants.Icon.ArrowLeft label="Document"}} + {{/link-to}}
    -
    +{{/layout/master-sidebar}} -{{#layout/bottom-bar}} -{{/layout/bottom-bar}} \ No newline at end of file +{{#layout/master-content}} + {{document/document-editor document=model.document folder=model.folder page=model.page meta=model.meta + onCancel=(action "onCancel") onAction=(action "onAction")}} +{{/layout/master-content}} diff --git a/gui/app/styles/core/icon.scss b/gui/app/styles/core/icon.scss index e32da72a..d97f1dd9 100644 --- a/gui/app/styles/core/icon.scss +++ b/gui/app/styles/core/icon.scss @@ -379,7 +379,7 @@ icons content: "\ea42"; } - .dicon-single-copy-04::before { + .dicon-copy::before { content: "\ea43"; } @@ -438,3 +438,27 @@ icons .dicon-ban::before { content: "\ea53"; } + + .dicon-check-single::before { + content: "\ea54"; + } + + .dicon-check-double::before { + content: "\ea55"; + } + + .dicon-check::before { + content: "\ea56"; + } + + .dicon-d-check::before { + content: "\ea57"; + } + + .dicon-preview::before { + content: "\ea58"; + } + + .dicon-link::before { + content: "\ea59"; + } diff --git a/gui/app/styles/core/layout/grid.scss b/gui/app/styles/core/layout/grid.scss index 3bcedaa8..e99137e5 100644 --- a/gui/app/styles/core/layout/grid.scss +++ b/gui/app/styles/core/layout/grid.scss @@ -25,6 +25,10 @@ $display-break-5: 1800px; justify-self: self-start; } + .grid-cell-width-100 { + width: 100%; + } + // X-axis alignment .grid-cell-left { justify-self: self-end; diff --git a/gui/app/styles/core/view/document/section-editor.scss b/gui/app/styles/core/view/document/section-editor.scss index 559e170e..b283bcdf 100644 --- a/gui/app/styles/core/view/document/section-editor.scss +++ b/gui/app/styles/core/view/document/section-editor.scss @@ -1,12 +1,8 @@ .section-editor { - > .edit-title { - margin: 16px 0; - } - > .canvas { - // margin: 34px 0 0 0; padding: 30px 20px; box-shadow: 0 0 0 0.75pt map-get($gray-shades, 200),0 0 3pt 0.75pt map-get($gray-shades, 200); + border: 1px solid map-get($gray-shades, 200); } } diff --git a/gui/app/templates/components/section/airtable/type-editor.hbs b/gui/app/templates/components/section/airtable/type-editor.hbs index 74bb0130..f20cf253 100644 --- a/gui/app/templates/components/section/airtable/type-editor.hbs +++ b/gui/app/templates/components/section/airtable/type-editor.hbs @@ -1,3 +1,8 @@ +{{layout/logo-heading + title="Airtable" + desc="Part spreadsheet, part database, and entirely flexible (https://airtable.com)" + icon=constants.Icon.Integrations}} + {{#section/base-editor document=document folder=folder page=page isDirty=(action "isDirty") onCancel=(action "onCancel") onAction=(action "onAction")}}
    diff --git a/gui/app/templates/components/section/base-editor-inline.hbs b/gui/app/templates/components/section/base-editor-inline.hbs index 6ffbd839..1a12de52 100644 --- a/gui/app/templates/components/section/base-editor-inline.hbs +++ b/gui/app/templates/components/section/base-editor-inline.hbs @@ -1,47 +1,46 @@
    -
    -
    - {{#if blockMode}} -
    - {{focus-input id="page-id-{{pageId}}" value=pageTitle class=(if hasNameError "form-control mousetrap form-control-lg edit-title is-invalid" "form-control form-control-lg edit-title mousetrap") placeholder="Enter name"}} -
    -
    - {{textarea id="page-excerpt-{{pageId}}" value=page.excerpt rows="2" class=(if hasDescError "form-control mousetrap form-control-lg edit-title is-invalid" "form-control form-control-lg edit-title mousetrap") placeholder="Enter description"}} -
    - {{else}} -
    - {{focus-input type="text" id=pageId value=pageTitle class=(if hasNameError "form-control mousetrap form-control-lg edit-title is-invalid" "form-control form-control-lg edit-title mousetrap") placeholder="Enter name"}} -
    - {{/if}} -
    -
    -
    - {{#if busy}} - - {{/if}} - - {{#if contentLinkerButton}} - - {{/if}} - - {{#if previewButton}} -
    {{previewText}}
    - {{/if}} - -
    Save
    -
    Cancel
    +
    +
    +
    +
    + {{#if blockMode}} +
    + {{focus-input id="page-id-{{pageId}}" value=pageTitle placeholder="Enter name" + class=(if hasNameError "form-control mousetrap form-control-lg is-invalid" "form-control form-control-lg mousetrap")}} +
    +
    + {{textarea id="page-excerpt-{{pageId}}" value=page.excerpt rows="2" class=(if hasDescError "form-control mousetrap form-control-lg is-invalid" "form-control form-control-lg mousetrap") placeholder="Enter description"}} +
    + {{else}} +
    + {{focus-input type="text" id=pageId value=pageTitle class=(if hasNameError "form-control mousetrap form-control-lg is-invalid" "form-control form-control-lg mousetrap") placeholder="Enter name"}} +
    + {{/if}} +
    -
    -
    -
    -
    -
    - {{yield}} -
    -
    +
    +
    + {{#if busy}} + + {{/if}} + {{#ui/ui-toolbar dark=false light=true raised=true large=true bordered=true}} + {{#if contentLinkerButton}} + {{ui/ui-toolbar-icon icon=constants.Icon.Link color=constants.Color.Gray + tooltip="Insert Link" onClick=(action "onShowLinkModal")}} + {{/if}} + {{#if previewButton}} + {{ui/ui-toolbar-icon icon=constants.Icon.Preview color=constants.Color.Gray + tooltip="Preview changes" onClick=(action "onPreview")}} + {{/if}} + {{ui/ui-toolbar-icon icon=constants.Icon.Tick color=constants.Color.Green tooltip="Save changes" onClick=(action "onAction")}} + {{ui/ui-toolbar-icon icon=constants.Icon.Cross color=constants.Color.Red tooltip="Cancel editing" onClick=(action "onCancel")}} + {{/ui/ui-toolbar}} +
    +
    +
    +
    + {{yield}} +
    @@ -53,8 +52,8 @@

    You have made changes to the section - continue editing or discard changes?

    diff --git a/gui/app/templates/components/section/base-editor.hbs b/gui/app/templates/components/section/base-editor.hbs index e3798186..727714e0 100644 --- a/gui/app/templates/components/section/base-editor.hbs +++ b/gui/app/templates/components/section/base-editor.hbs @@ -1,32 +1,29 @@ -
    -
    -
    +
    +
    +
    - {{focus-input type="text" id="page-title" value=page.title class=(if hasNameError "form-control mousetrap form-control-lg edit-title is-invalid" "form-control form-control-lg edit-title mousetrap") placeholder="Enter name"}} + {{focus-input type="text" id="page-title" value=page.title class=(if hasNameError "form-control mousetrap form-control-lg is-invalid" "form-control form-control-lg mousetrap") placeholder="Enter name"}}
    {{#if hasExcerpt}}
    - {{textarea id="page-excerpt" value=page.excerpt rows="2" class=(if hasDescError "form-control mousetrap form-control-lg edit-title is-invalid" "form-control form-control-lg edit-title mousetrap") placeholder="Enter description"}} + {{textarea id="page-excerpt" value=page.excerpt rows="2" class=(if hasDescError "form-control mousetrap form-control-lg is-invalid" "form-control form-control-lg mousetrap") placeholder="Enter description"}}
    {{/if}} -
    -
    -
    - {{#if busy}} - - {{/if}} - -
    {{actionLabel}}
    -
    {{cancelLabel}}
    -
    -
    -
    -
    - {{yield}} -
    -
    +
    + {{#if busy}} + + {{/if}} + {{ui/ui-button color=constants.Color.Gray light=true label=cancelLabel onClick=(action "onCancel")}} + {{ui/ui-button-gap}} + {{ui/ui-button color=constants.Color.Green light=true label=actionLabel onClick=(action "onAction")}} +
    +
    + +
    +
    + {{yield}}
    @@ -38,8 +35,8 @@

    You have made changes - continue editing or discard changes?

    diff --git a/gui/app/templates/components/section/flowchart/type-editor.hbs b/gui/app/templates/components/section/flowchart/type-editor.hbs index 3dce12a0..271ea7ef 100644 --- a/gui/app/templates/components/section/flowchart/type-editor.hbs +++ b/gui/app/templates/components/section/flowchart/type-editor.hbs @@ -1,14 +1,13 @@ -{{#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")}} +{{layout/logo-heading + title="Draw.io" + desc="For making flowcharts, process diagrams, org charts, UML, ER diagrams, network diagrams and much more (https://about.draw.io)" + icon=constants.Icon.Integrations}} + +{{#section/base-editor document=document folder=folder page=page busy=waiting isDirty=(action "isDirty") onCancel=(action "onCancel") onAction=(action "onAction")}}
    -
    -
    -
    - -
    -
    -
    +
    {{/section/base-editor}} diff --git a/gui/app/templates/components/section/gemini/type-editor.hbs b/gui/app/templates/components/section/gemini/type-editor.hbs index 8b4f411c..40c754c3 100644 --- a/gui/app/templates/components/section/gemini/type-editor.hbs +++ b/gui/app/templates/components/section/gemini/type-editor.hbs @@ -1,43 +1,45 @@ -{{#section/base-editor document=document folder=folder page=page busy=waiting tip="Gemini enterprise issue and ticketing software (https://www.countersoft.com)" isDirty=(action "isDirty") onCancel=(action "onCancel") onAction=(action "onAction")}} +{{layout/logo-heading + title="Gemini" + desc="Gemini enterprise issue and ticketing software (https://www.countersoft.com)" + icon=constants.Icon.Integrations}} -
    -
    -
    - - {{focus-input id="gemini-url" type="text" value=config.url class="form-control"}} - e.g. http://helpdesk.countersoft.com -
    -
    - - {{input id="gemini-username" type="text" value=config.username class="form-control"}} - Gemini Username -
    -
    - - {{input id="gemini-apikey" type="password" value=config.APIKey class="form-control"}} - Gemini user API key (from user profile) -
    -
    Authenticate
    -
    - -
    - {{#if authenticated}} +{{#section/base-editor document=document folder=folder page=page busy=waiting isDirty=(action "isDirty") onCancel=(action "onCancel") onAction=(action "onAction")}} +
    +
    - -
      - {{#each workspaces as |card|}} -
    • - {{#attach-tooltip showDelay=1000}}{{card.Title}}{{/attach-tooltip}} -
      {{card.Key}}
      - {{#if card.selected}} -
      - {{/if}} -
    • - {{/each}} -
    + + {{focus-input id="gemini-url" type="text" value=config.url class="form-control"}} + e.g. http://helpdesk.countersoft.com
    - {{/if}} +
    + + {{input id="gemini-username" type="text" value=config.username class="form-control"}} + Gemini Username +
    +
    + + {{input id="gemini-apikey" type="password" value=config.APIKey class="form-control"}} + Gemini user API key (from user profile) +
    + {{ui/ui-button color=constants.Color.Green light=true label=constants.Label.Authenticate onClick=(action "auth")}} +
    +
    + {{#if authenticated}} +
    + +
      + {{#each workspaces as |card|}} +
    • + {{#attach-tooltip showDelay=1000}}{{card.Title}}{{/attach-tooltip}} +
      {{card.Key}}
      + {{#if card.selected}} +
      + {{/if}} +
    • + {{/each}} +
    +
    + {{/if}} +
    -
    - {{/section/base-editor}} diff --git a/gui/app/templates/components/section/jira/type-editor.hbs b/gui/app/templates/components/section/jira/type-editor.hbs index 5fd4098d..3b765fc0 100644 --- a/gui/app/templates/components/section/jira/type-editor.hbs +++ b/gui/app/templates/components/section/jira/type-editor.hbs @@ -1,39 +1,32 @@ -{{#section/base-editor document=document folder=folder page=page busy=waiting tip="Jira issue tracking" isDirty=(action "isDirty") onCancel=(action "onCancel") onAction=(action "onAction")}} +{{layout/logo-heading + title="Jira Software" + desc="Jira provides issue tracking and agile software" + icon=constants.Icon.Integrations}} -
    -
    - {{#if session.isAdmin}} - {{#link-to "customize.integrations" class="btn btn-outline-secondary bold-700"}} - Configure Jira Connector - {{/link-to}} - {{else}} - {{#unless authenticated}} -

    Your Documize administrator needs to provide Jira connection details before usage.

    - {{/unless}} - {{/if}} -
    -
    -{{#if authenticated}} -
    -
    -
    -
    - - {{focus-input id="jira-jql" type="text" value=config.jql class="form-control" placeholder="e.g. (status = resolved AND project = SysAdmin) OR assignee = bobsmith"}} -
    - -
    -
    -
    - -
    -
    - {{{issuesGrid}}} -
    -
    -{{else}} -

    Jira connector not authenticated

    -{{/if}} +{{#section/base-editor document=document folder=folder page=page busy=waiting isDirty=(action "isDirty") onCancel=(action "onCancel") onAction=(action "onAction")}} + {{#if session.isAdmin}} + {{#link-to "customize.integrations"}} + {{ui/ui-button color=constants.Color.Green light=true label="Configure Jira Connector"}} + {{/link-to}} + {{else}} + {{#unless authenticated}} +

    Your Documize administrator needs to provide Jira connection details before usage.

    + {{/unless}} + {{/if}} + {{#if authenticated}} +
    +
    + + {{focus-input id="jira-jql" type="text" value=config.jql class="form-control" placeholder="e.g. (status = resolved AND project = SysAdmin) OR assignee = bobsmith"}} +
    + {{ui/ui-button color=constants.Color.Green light=true label=constants.Label.Preview submit=true onClick=(action "onPreview")}} +
    + {{ui/ui-spacer size=300}} + {{{issuesGrid}}} + {{else}} + {{ui/ui-spacer size=300}} +

    Jira connector not authenticated

    + {{/if}} {{/section/base-editor}} diff --git a/gui/app/templates/components/section/papertrail/type-editor.hbs b/gui/app/templates/components/section/papertrail/type-editor.hbs index 573c2806..dcca381b 100644 --- a/gui/app/templates/components/section/papertrail/type-editor.hbs +++ b/gui/app/templates/components/section/papertrail/type-editor.hbs @@ -1,44 +1,49 @@ -{{#section/base-editor document=document folder=folder page=page busy=waiting tip="Papertrail cloud logging service (https://papertrailapp.com)" isDirty=(action "isDirty") onCancel=(action "onCancel") onAction=(action "onAction")}} +{{layout/logo-heading + title="Papertrail" + desc="Display your cloud-based logs (https://papertrailapp.com)" + icon=constants.Icon.Integrations}} -
    -
    -
    -
    - - {{focus-input id="papertrail-apitoken" type="password" value=config.APIToken class="form-control"}} - API Token (from your profile) -
    -
    - {{#if authenticated}} - Re-Authenticate - {{else}} - Authenticate - {{/if}} -
    -
    -
    +{{#section/base-editor document=document folder=folder page=page busy=waiting + isDirty=(action "isDirty") onCancel=(action "onCancel") onAction=(action "onAction")}} - {{#if authenticated}} -
    -
    +
    +
    +
    - - {{input id="papertrail-query" type="text" class="form-control mousetrap" value=config.query}} - Determine which log entries you want to display e.g. bob OR ("some phrase" AND sally) + + {{focus-input id="papertrail-apitoken" type="password" value=config.APIToken class="form-control"}} + API Token (from your profile)
    -
    - - {{input id="papertrail-max" type="number" class="form-control mousetrap" value=config.max}} - How many log entries do you want? -
    -
    - - {{ui/ui-select id="group-dropdown" prompt="" content=options.groups action=(action "onGroupsChange") optionValuePath="id" optionLabelPath="name" selection=config.group}} - Optional Papertrail group +
    + {{#if authenticated}} + Re-Authenticate + {{else}} + Authenticate + {{/if}}
    - {{/if}} -
    +
    + {{#if authenticated}} +
    +
    + + {{input id="papertrail-query" type="text" class="form-control mousetrap" value=config.query}} + Determine which log entries you want to display e.g. bob OR ("some phrase" AND sally) +
    +
    + + {{input id="papertrail-max" type="number" class="form-control mousetrap" value=config.max}} + How many log entries do you want? +
    +
    + + {{ui/ui-select id="group-dropdown" prompt="" content=options.groups action=(action "onGroupsChange") optionValuePath="id" optionLabelPath="name" selection=config.group}} + Optional Papertrail group +
    +
    + {{/if}} +
    +
    {{/section/base-editor}} diff --git a/gui/app/templates/components/section/plantuml/type-editor.hbs b/gui/app/templates/components/section/plantuml/type-editor.hbs index c3afe0fb..1ddfdeef 100644 --- a/gui/app/templates/components/section/plantuml/type-editor.hbs +++ b/gui/app/templates/components/section/plantuml/type-editor.hbs @@ -1,36 +1,41 @@ -{{#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")}} +{{layout/logo-heading + title="PlantUML" + desc="Create UML diagrams from a plain text language (http://plantuml.com)" + icon=constants.Icon.Integrations}} + +{{#section/base-editor document=document folder=folder page=page busy=waiting + isDirty=(action "isDirty") onCancel=(action "onCancel") onAction=(action "onAction")}} +
    -
    -
    -
    -
    - -
    -

    Insert sample diagrams:

    -

    - - - - - - - -

    -
    - {{focus-textarea value=diagramText rows=30 id=editorId class="diagram-editor form-control mousetrap"}} -
    -
    -
    -
    -
    -
    - -
    - -
    -
    -
    +
    + + {{ui/ui-spacer size=200}} +
    +

    Insert sample diagrams:

    +

    + {{ui/ui-button color=constants.Color.Gray light=true label="Sequence" onClick=(action "onInsertSequence")}} + {{ui/ui-button color=constants.Color.Gray light=true label="Use Case" onClick=(action "onInsertUseCase")}} + {{ui/ui-button color=constants.Color.Gray light=true label="Class" onClick=(action "onInsertClass")}} + {{ui/ui-button color=constants.Color.Gray light=true label="Activity" onClick=(action "onInsertActivity")}} + {{ui/ui-button color=constants.Color.Gray light=true label="Activity (new syntax)" onClick=(action "onInsertActivityNew")}} + {{ui/ui-button color=constants.Color.Gray light=true label="Component" onClick=(action "onInsertComponent")}} + {{ui/ui-button color=constants.Color.Gray light=true label="State" onClick=(action "onInsertState")}} +

    + {{focus-textarea value=diagramText rows=30 id=editorId class="diagram-editor form-control mousetrap"}}
    + + {{ui/ui-spacer size=200}} + + {{ui/ui-button color=constants.Color.Yellow light=true label=previewButtonCaption onClick=(action "onPreview")}} + + {{ui/ui-spacer size=200}} + +
    + +
    + + {{ui/ui-spacer size=200}} + {{/section/base-editor}} diff --git a/gui/app/templates/components/section/trello/type-editor.hbs b/gui/app/templates/components/section/trello/type-editor.hbs index 17860fb3..2bb5fa75 100644 --- a/gui/app/templates/components/section/trello/type-editor.hbs +++ b/gui/app/templates/components/section/trello/type-editor.hbs @@ -1,5 +1,9 @@ +{{layout/logo-heading + title="Trello" + desc="Trello is the visual way to manage your projects and organize anything (https://trello.com)" + icon=constants.Icon.Integrations}} + {{#section/base-editor document=document folder=folder page=page busy=busy - tip="Trello is the visual way to manage your projects and organize anything (https://trello.com)" isDirty=(action "isDirty") onCancel=(action "onCancel") onAction=(action "onAction")}} {{#if trelloConfigured}} @@ -30,7 +34,8 @@
    {{/if}} {{else}} -
    Authenticate
    + {{ui/ui-button color=constants.Color.Green light=true + label=constants.Label.Authenticate onClick=(action "auth")}} {{/if}} {{else}} {{#if session.isGlobalAdmin}} diff --git a/gui/public/assets/font/dmzui.eot b/gui/public/assets/font/dmzui.eot index 86644037d0a958bdbb3bdabb8e3979c197070fa1..3a6480d6ecd6c5682ccaeb2b30c3bc290bdf02f4 100644 GIT binary patch delta 1495 zcmY*YO>7%Q6n<}Zes(KrWy8vt;&wmh@;_Q#jE0JKg3u`|DPW$vrd zCjtP*8bD!Vp*}O~+^|oQ_7_57fe6O1O5-mGeGAK%)+gn`9{JrR3@@$LX6}9P_qPE0 zceMV|^33`gF2K*UM*fglnOUxv6Ul8Ip!_e9duyu~FGVL#y$?|NgAVa|^Bf+_O#zaa zaOc{b_EKo{PY8Gfzz>!A50Cohbxhz?a|bWr{pJ8GjfX=2`&0O9>^V9 z(>`Fb$&7cc#LdL7Ntx_Ve%3X<{ho1usNtu!4|~u7P_!|70`plJOJfQPWh{(5KAgYD zwlLcxg^-y%7Zaxq<9FQ6b_*d?CXZNq(L&*s2AKDPefS0BoYnR_Q z+J)PPMn}gz^4ZMWre~B;+)f=+6#q`%Hs~mNrwsP=>9hp=-~pWo;U|c}2`B-5y`oe$ zbK@y2QYlJQ7^*`&)xfwLld9daZEmx$VK9bNT|C*6CE)Xb&L>a4MZm6 zwn;;8)cL(gni<#GFzDY4D(gNJVAi{3OxYSGm%@0%9rE(?GHlm{QRB$z2yCD zmGtC9hmclf-Y;T4>rYdxSQ5j7{1el1oTyHx|Zi#l@BRrTXDycJ=Zr bOLfs+QM1SWe(lxzYm4>Q`O@Obd4T@_TXo~{ delta 403 zcmX@m!`RZo$j0Ktz>wiMk*GlK}D+@)C1X?Ioo)b1*PigEW0A$S*Ew z*VXvNz+n3V=!n|M5sb>J?hK4T#X#J9d+)z^ew(ih+#mr4h8vcp2VwN&1&or6?vr;h z7Bc>stixo_7`!=$$$-%VD9;MSApht9F$)6&6Cc<-21X8`D99ikAk769XJNPl+Od2#{g zgv~r$e~mWJbP!^7CoK)T9{DMkd1Cz;}t_>hZF)#oCa1CbW diff --git a/gui/public/assets/font/dmzui.svg b/gui/public/assets/font/dmzui.svg index f5069a24..9d9bcfd1 100644 --- a/gui/public/assets/font/dmzui.svg +++ b/gui/public/assets/font/dmzui.svg @@ -172,7 +172,7 @@ - + + + + + + diff --git a/gui/public/assets/font/dmzui.ttf b/gui/public/assets/font/dmzui.ttf index 4a0864ed909f84c4ce89a5ae790ff03f142a504f..905d88b07106737d5291af21904536834048c164 100644 GIT binary patch delta 1467 zcmY*ZOKcle6utM&`^|Vf9)B{9on-7du?eV6Lz>t^M0T@j(tKFaLN=g~xJlLgN?S-* zMo1t5Rn%Y>1+hSFcT`9ytWXzW!w&Hg5+H$ufJK!`2t`7)qHVb2Nf6A;)tfo*+;iW# z@7cFs#T#$om7d140C*VyPR%XPuDx;n;wFI64j?{VSh{rji;*WH0OlG%`SN0YcHX__ z3=sEcit-`>jNt^m-=gSUT)wbACHHno?>CB}rPaCFJMZ5820(vH^Y1UuuCL)D{6ur4 z5BZhZ<$5iX-O>QH`vmT;t)9P-oIH9JVDt}K#3!4#dTP^v#HINBo!a&1VzbHGUBOmp1$EH(z?Z~`V^5~irEY{vP+<~E9EOi1$s$_uWk zEniF+$9J9v2m;1vJQ)UM!_KKNNC$SF34;`2hju3j(uSRxFkq^ATEA^)Ze)JR%4}cu zqmJWSclCq8Mrh+6>_Qtr#lgZ6EEQxbhd!2TSRQ_SsC0*IVxdb4A@e0JCdW+kcib*? z3L#X!ggEz{jUs5nei!e-*N}iBsmT~Vav)a4O1U4?0o0FFz-NP1){l*wYsttlvcSpo@*QuHvxCn)|;p2UwgXJFRY?K@;5Xva- z_&tj9-z+&MEk(D>XjiYMDd2k#NeJObNWl@P0_|Q!Du;P#A1l;~Dm8}skoFsx_EJ){ z?m`P2Dp%4=vku zlbTk^MKZ#LVHi5DISOVa+^DJAdj-=`m(D1UMU>$N81IyRQDrkWM^dIduPm`2|l;F zcB%R6u~#bg++uz1?BVlgRu-1(`ycbG7hhPai`I;qKOBy0FV6fq~-(1B20@ zjMT&wfk|3*K*Zm& z`3bp+6$Ok*40nNY5s zJb}@kF?jO@Mgv9@=`VYmb23jiTd{VR@F zJg*d9S-o<8<@PFgasu-~pmMg&hAd2s0t`GrbqvfAAQA}NHaoF;F;Bk2F=2B7=U=1E sf9*w>7~LleIrVK`<7C6c&sUt8m!6ZVo19-zscT>|`K?O>$WaUo0Df^`X8-^I diff --git a/gui/public/assets/font/dmzui.woff b/gui/public/assets/font/dmzui.woff index 7141380cdcf2bce28bf258eaae82fb5baebd856f..a7b6956a1ba6177d105fffa42e3ad47eea90f43f 100644 GIT binary patch delta 8831 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 BASD0* delta 8257 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 literal 7292 zcmV-?9E0O`Pew8T0RR91033V(3jhEB06}N~030g-0RR9100000000000000000000 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 WRNK%_556kNXauc-?i#m{1^@uCl?z+|