Initial commit

This commit is contained in:
root
2026-01-19 17:44:46 +01:00
commit 823af8b11d
8721 changed files with 1130846 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
.panel {
&:has(> .panel-body > .report-container .chart-container) {
//overflow: hidden;
}
}
.chart-container[data-type="line"] {
margin-right: var(--16px);
margin-left: var(--2px);
}

View File

@@ -0,0 +1,40 @@
@font-face {
font-family: 'bpmn';
src: url('../fonts/bpmn.eot?w7in3t');
src: url('../fonts/bpmn.eot?w7in3t#iefix') format('embedded-opentype'),
url('../fonts/bpmn.ttf?w7in3t') format('truetype'),
url('../fonts/bpmn.woff?w7in3t') format('woff'),
url('../fonts/bpmn.svg?w7in3t#bpmn') format('svg');
font-weight: normal;
font-style: normal;
}
[class^="bpmn-icon-"], [class*=" bpmn-icon-"] {
font-family: 'bpmn' !important;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.bpmn-icon-event:before {
content: "\e900";
}
.bpmn-icon-gateway:before {
content: "\e901";
}
.bpmn-icon-hand:before {
content: "\e902";
}
.bpmn-icon-task:before {
content: "\e903";
}

Binary file not shown.

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="event" d="M456.824 888.284c-312.412-39.596-484.524-382.884-330.486-659.164 112.018-200.909 367.132-280.714 576.891-180.462 277.571 132.662 338.296 499.615 118.531 716.25-94.072 92.733-233.856 139.991-364.936 123.377zM579.904 797.476c283.433-57.388 386.237-405.732 178.737-605.64-203.090-195.661-539.922-89.285-596.116 188.26-49.585 244.89 172.49 466.964 417.38 417.38z" />
<glyph unicode="&#xe901;" glyph-name="gateway" d="M278.395 681.595l-232.315-232.325 465.92-465.9 465.92 465.9-232.315 232.325c-127.772 127.78-232.896 232.325-233.605 232.325s-105.833-104.545-233.605-232.325zM683.489 620.831l170.194-170.209-17.882-18.127c-100.076-101.455-321.58-321.134-323.802-321.134s-223.726 219.679-323.802 321.134l-17.882 18.127 170.194 170.209c93.606 93.614 170.778 170.209 171.489 170.209s77.883-76.595 171.489-170.209z" />
<glyph unicode="&#xe902;" glyph-name="hand" d="M502.857 886.857q-26.286 0-45.143-18.857t-18.857-45.143v-374.857h-18.286v301.714q0 26.286-18.857 45.143t-45.143 18.857-45.143-18.857-18.857-45.143v-448l-88 117.143q-21.714 29.143-58.286 29.143-30.286 0-51.714-21.429t-21.429-51.714q0-24.571 14.857-44l219.429-292.571q21.714-29.143 58.286-29.143h393.143q19.429 0 34.857 12.571t19.429 32l43.429 231.429q2.857 18.286 2.857 33.714v284.571q0 26.286-18.857 45.143t-45.143 18.857-45.143-18.857-18.857-45.143v-155.429h-18.286v301.714q0 26.286-18.857 45.143t-45.143 18.857-45.143-18.857-18.857-45.143v-301.714h-18.286v374.857q0 26.286-18.857 45.143t-45.143 18.857zM502.857 960q38.857 0 71.714-20.286t50.571-55.143q10.857 2.286 24 2.286 56.571 0 96.857-40.286t40.286-96.857v-9.714q60 3.429 103.143-36.571t43.143-100v-284.571q0-22.857-4.571-47.429l-43.429-230.857q-8-45.143-43.714-74.857t-82-29.714h-393.143q-34.286 0-65.429 15.714t-51.714 42.571l-219.429 292.571q-29.143 38.857-29.143 88 0 60.571 42.857 103.429t103.429 42.857q44.571 0 73.143-19.429v248q0 56.571 40.286 96.857t96.857 40.286q13.143 0 24-2.286 17.714 34.857 50.571 55.143t71.714 20.286z" />
<glyph unicode="&#xe903;" glyph-name="task" d="M749.714 813.714h-475.429q-37.714 0-64.571-26.857t-26.857-64.571v-475.429q0-37.714 26.857-64.571t64.571-26.857h475.429q37.714 0 64.571 26.857t26.857 64.571v475.429q0 37.714-26.857 64.571t-64.571 26.857zM914.286 722.286v-475.429q0-68-48.286-116.286t-116.286-48.286h-475.429q-68 0-116.286 48.286t-48.286 116.286v475.429q0 68 48.286 116.286t116.286 48.286h475.429q68 0 116.286-48.286t48.286-116.286z" />
</font></defs></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
<div class="actions-container">{{{actions}}}</div>

View File

@@ -0,0 +1 @@
<div class="conditions-container">{{{conditions}}}</div>

View File

@@ -0,0 +1,24 @@
<div class="flow-list-container list-group">
{{#each flowDataList}}
<div class="list-group-item" data-id="{{id}}">
<div>
{{#if ../isEditMode}}
<div class="btn-group pull-right">
<button
class="btn btn-default {{#if isTop}} hidden {{/if}} {{#if isBottom}} radius-right {{/if}}"
data-action="moveUp"
data-id="{{id}}"
><span class="fas fa-arrow-up"></span></button>
<button
class="btn btn-default {{#if isBottom}} hidden {{/if}} {{#if isTop}} radius-left {{/if}} "
data-action="moveDown"
data-id="{{id}}"
><span class="fas fa-arrow-down"></span></button>
</div>
{{/if}}
<h5>{{label}}</h5>
</div>
<div class="flow" data-id="{{id}}" style="margin-top: 20px;">{{{var id ../this}}}</div>
</div>
{{/each}}
</div>

View File

@@ -0,0 +1,12 @@
<div>
<span>{{{timerBaseTranslatedValue}}}</span>
{{#if hasShift}}
<span class="text-italic">{{{timerShiftOperatorTranslatedValue}}}</span>
<span>{{{timerShiftValue}}}</span>
<span>{{{timerShiftUnitsTranslatedValue}}}</span>
{{/if}}
</div>
{{#if hasFormula}}
<div class="form-group"></div>
{{/if}}
<div class="formula-container">{{{timerFormula}}}</div>

View File

@@ -0,0 +1,28 @@
<div class="row">
<div class="col-md-4">
<select data-name="timerBase" class="form-control">
{{#each timerBaseOptionDataList}}
<option value="{{value}}"{{#if isSelected}} selected{{/if}}>{{label}}</option>
{{/each}}
</select>
</div>
<div class="col-md-2">
<select data-name="timerShiftOperator" class="form-control hidden">
{{#each timerShiftOperatorOptionDataList}}
<option value="{{value}}"{{#if isSelected}} selected{{/if}}>{{label}}</option>
{{/each}}
</select>
</div>
<div class="col-md-3">
<input data-name="timerShift" class="form-control hidden" value="{{timerShiftValue}}">
</div>
<div class="col-md-3">
<select data-name="timerShiftUnits" class="form-control hidden">
{{#each timerShiftUnitsOptionDataList}}
<option value="{{value}}"{{#if isSelected}} selected{{/if}}>{{label}}</option>
{{/each}}
</select>
</div>
</div>
<div class="formula-container">{{{timerFormula}}}</div>

View File

@@ -0,0 +1,25 @@
<style>
.flowchart-group-container.fullscreen {
> .button-container {
margin: var(--4px) var(--6px);
}
}
</style>
<div class="flowchart-group-container">
<div class="button-container clearfix">
<div class="btn-group pull-right">
<button
type="button"
class="btn btn-text action"
data-action="switchFullScreenMode"
title="{{translate 'Full Screen' scope='BpmnFlowchart'}}"
><i class="fas fa-maximize"></i></button>
</div>
<div class="btn-group pull-right">
<button type="button" class="btn btn-text action" data-action="zoomOut" title="{{translate 'Zoom Out' scope='BpmnFlowchart'}}"><span class="fas fa-minus"></span></button>
<button type="button" class="btn btn-text action" data-action="zoomIn" title="{{translate 'Zoom In' scope='BpmnFlowchart'}}"><span class="fas fa-plus"></span></button>
</div>
</div>
<div class="flowchart-container" style="width: 100%; height: {{heightString}};"></div>
</div>

View File

@@ -0,0 +1,262 @@
<link href="{{basePath}}client/custom/modules/advanced/css/bpmn.css" rel="stylesheet">
<!--suppress CssUnusedSymbol -->
<style>
.flowchart-group-container.fullscreen {
> .button-container {
margin: var(--4px) var(--6px);
}
}
.flowchart-group-container {
button {
span.fa-long-arrow-right {
position: relative;
top: var(--1px);
}
}
> .button-container {
user-select: none;
}
}
[data-role="bpm-menu-item-text"] {
padding-right: var(--20px);
}
[data-role="bpm-menu-item-checkbox"]:not(.hidden) + [data-role="bpm-menu-item-text"] {
padding-right: var(--26px);
}
span[data-role="bpm-menu-item-icon"] {
> svg {
max-height: var(--18px);
}
width: var(--30px);
height: var(--22px);
text-align: center;
vertical-align: middle;
display: inline-block;
}
ul[data-role="bpm-element-menu"] {
> li > a {
padding-left: var(--10px);
overflow: unset !important;
}
}
span[data-role="bpm-menu-item-icon"] + span {
padding-left: var(--8px);
}
span[data-role="bpm-button-icon"] {
position: relative;
top: var(--1px);
padding-right: var(--1px);
color: var(--gray-soft);
}
.fullscreen {
ul[data-role="bpm-element-menu"][data-element-group="event"] {
max-height: calc(100vh - var(--50px));
overflow-y: scroll;
}
}
</style>
<div class="flowchart-group-container">
<div class="button-container">
<div class="btn-group">
<button type="button" class="btn btn-default action" data-action="resetState" title="{{translate 'Hand tool' scope='BpmnFlowchart'}}"><span class="far fa-hand-paper"></span></button>
</div>
<div class="btn-group">
<div class="btn-group">
<button
type="button"
class="btn btn-default dropdown-toggle add-event-element"
data-toggle="dropdown"
title="{{translate 'Create Event tool' scope='BpmnFlowchart'}}"
>
<span class="bpmn-icon-event" data-role="bpm-button-icon"></span>
{{translate 'Events' scope='BpmnFlowchart'}}
<span class="caret"></span></button>
<ul
class="dropdown-menu"
data-role="bpm-element-menu"
data-element-group="event"
>
{{#each elementEventDataList}}
{{#ifEqual name '_divider'}}
<li class="divider"></li>
{{else}}
<li>
<a
class="action"
role="button"
tabindex="0"
data-name="{{name}}"
data-action="setStateCreateFigure"
>
<span
class="fas fa-check pull-right{{#ifNotEqual ../currentElement name}} hidden{{/ifNotEqual}}"
data-role="bpm-menu-item-checkbox"
></span>
<div
style="color: {{color}}"
data-role="bpm-menu-item-text"
><span data-role="bpm-menu-item-icon">{{#if iconHtml}}{{{iconHtml}}}{{/if}}</span><span>{{translate name category='elements' scope='BpmnFlowchart'}}</span></div>
</a>
</li>
{{/ifEqual}}
{{/each}}
</ul>
</div>
<div class="btn-group">
<button
type="button"
class="btn btn-default dropdown-toggle add-gateway-element"
data-toggle="dropdown"
title="{{translate 'Create Gateway tool' scope='BpmnFlowchart'}}"
><span class="bpmn-icon-gateway" data-role="bpm-button-icon"></span>
{{translate 'Gateways' scope='BpmnFlowchart'}}
<span class="caret"></span></button>
<ul
class="dropdown-menu"
data-role="bpm-element-menu"
>
{{#each elementGatewayDataList}}
<li>
<a
class="action"
role="button"
tabindex="0"
data-name="{{name}}"
data-action="setStateCreateFigure"
>
<span
class="fas fa-check pull-right{{#ifNotEqual name ../currentElement}} hidden{{/ifNotEqual}}"
data-role="bpm-menu-item-checkbox"
></span>
<div
data-role="bpm-menu-item-text"
><span data-role="bpm-menu-item-icon">{{#if iconHtml}}{{{iconHtml}}}{{/if}}</span><span>{{translate name category='elements' scope='BpmnFlowchart'}}</span></div>
</a>
</li>
{{/each}}
</ul>
</div>
<div class="btn-group">
<button
type="button"
class="btn btn-default dropdown-toggle add-task-element"
data-toggle="dropdown"
title="{{translate 'Create Activity tool' scope='BpmnFlowchart'}}"
><span class="bpmn-icon-task" data-role="bpm-button-icon"></span>
{{translate 'Activities' scope='BpmnFlowchart'}}
<span class="caret"></span></button>
<ul
class="dropdown-menu"
data-role="bpm-element-menu"
>
{{#each elementTaskDataList}}
{{#ifEqual name '_divider'}}
<li class="divider"></li>
{{else}}
<li>
<a class="action" role="button" tabindex="0" data-name="{{name}}" data-action="setStateCreateFigure">
<span
class="fas fa-check pull-right{{#ifNotEqual ../currentElement name}} hidden{{/ifNotEqual}}"
data-role="bpm-menu-item-checkbox"
></span>
<div
data-role="bpm-menu-item-text"
><span data-role="bpm-menu-item-icon">{{#if iconHtml}}{{{iconHtml}}}{{/if}}</span><span>{{translate name category='elements' scope='BpmnFlowchart'}}</span></div>
</a>
</li>
{{/ifEqual}}
{{/each}}
</ul>
</div>
</div>
<div class="btn-group">
<button
type="button"
class="btn btn-default action"
data-action="setStateCreateFlow"
title="{{translate 'Connect tool' scope='BpmnFlowchart'}}"
><span class="fa fa-long-arrow-right"></span></button>
</div>
<div class="btn-group">
<button
type="button"
class="btn btn-default action"
data-action="setStateRemove"
title="{{translate 'Erase tool' scope='BpmnFlowchart'}}"
><i class="fa fa-eraser"></i></button>
</div>
<div class="btn-group">
<button
class="btn btn-text dropdown-toggle"
data-toggle="dropdown"
><span class="fas fa-ellipsis-h"></span></button>
<ul class="dropdown-menu dropdown-menu-with-icons pull-right">
<li>
<a
role="button"
tabindex="0"
data-action="moveToCenter"
>
<span class="fas fa-arrows-to-dot fa-sm"></span>
<span class="item-text">{{translate 'Move to Center' scope='BpmnFlowchart'}}</span>
</a>
</li>
<li class="divider"></li>
<li>
<a
role="button"
tabindex="0"
data-action="undo"
>
<span class="fas fa-rotate-left fa-sm"></span>
<span class="item-text">{{translate 'Undo' scope='BpmnFlowchart'}}</span>
</a>
</li>
<li>
<a
role="button"
tabindex="0"
data-action="redo"
>
<span class="fas fa-rotate-right fa-sm"></span>
<span class="item-text">{{translate 'Redo' scope='BpmnFlowchart'}}</span>
</a>
</li>
</ul>
</div>
<button type="button" class="btn btn-text action hidden" data-action="apply" title="{{translate 'Apply'}}"><i class="fas fa-save"></i></button>
<div class="btn-group pull-right">
<button
type="button"
class="btn btn-text action"
data-action="switchFullScreenMode"
title="{{translate 'Full Screen' scope='BpmnFlowchart'}}"
><i class="fas fa-maximize"></i></button>
</div>
<div class="btn-group pull-right">
<button type="button" class="btn btn-text action" data-action="zoomOut" title="{{translate 'Zoom Out' scope='BpmnFlowchart'}}"><span class="fas fa-minus"></span></button>
<button type="button" class="btn btn-text action" data-action="zoomIn" title="{{translate 'Zoom In' scope='BpmnFlowchart'}}"><span class="fas fa-plus"></span></button>
</div>
</div>
<div class="flowchart-container" style="width: 100%; height: {{heightString}};"></div>
</div>

View File

@@ -0,0 +1 @@
<div class="record-container record no-side-margin">{{{record}}}</div>

View File

@@ -0,0 +1,4 @@
<div class="cell" data-name="flowchart">
<label class="field-label" data-name="flowchart"></label>
<div class="field" data-name="flowchart">{{{flowchart}}}</div>
</div>

View File

@@ -0,0 +1,11 @@
<div class="no-side-margin">
<form id="dashlet-options">
<div class="record middle no-side-margin">{{{record}}}</div>
</form>
</div>
<div class="panel runtime-filters-panel">
<div class="panel-body">
<div class="runtime-filters-container"></div>
</div>
</div>

View File

@@ -0,0 +1,7 @@
<div class="input-group">
<input class="form-control main-element" type="text" data-name="{{name}}-time" value="{{time}}" autocomplete="off">
<span class="input-group-btn">
<button type="button" class="btn btn-default time-picker-btn btn-icon" tabindex="-1"><i class="far fa-clock"></i></button>
</span>
</div>

View File

@@ -0,0 +1,10 @@
{{#each days}}
<div>
<label>
<input
type="checkbox" {{#ifPropEquals ../selectedWeekdays @index true}} checked {{/ifPropEquals}}
class="main-element form-checkbox" disabled
> {{.}} &nbsp;
</label>
</div>
{{/each}}

View File

@@ -0,0 +1,13 @@
{{#each days}}
<div>
<label style="cursor: pointer;">
<input
type="checkbox"
data-name="{{../name}}"
value="{{@index}}"
{{#ifPropEquals ../selectedWeekdays @index true}} checked {{/ifPropEquals}}
class="main-element form-checkbox"
> {{.}}
</label>
</div>
{{/each}}

View File

@@ -0,0 +1,67 @@
<div class="node-row">
<div class="node">{{{node}}}</div>
</div>
<!--suppress CssUnusedSymbol -->
<style>
.node-row {
width: 64%;
.item-list {
> div {
&:not(.node-operator) {
padding: var(--10px) var(--10px);
border: var(--1px) solid var(--default-border-color);
border-radius: var(--border-radius-small);
margin: var(--10px) 0;
}
label.control-label {
color: var(--gray-soft);
margin-bottom: var(--3px);
}
a.remove-filter,
a[data-action="removeGroup"] {
position: relative;
top: var(--minus-4px);
}
&.node-operator {
> div {
margin-bottom: var(--2px);
}
}
&:has(> .filter) {
max-width: var(--340px);
}
&:has(> .clearfix) {
max-width: var(--400px);
}
&,
> .clearfix {
> a[data-action="removeGroup"] {
visibility: hidden;
}
}
&:hover {
&,
> .clearfix {
> a[data-action="removeGroup"] {
visibility: visible;
}
}
}
}
}
}
@media screen and (max-width: 640px) {
.node-row {
width: 100%;
}
}
</style>

View File

@@ -0,0 +1,31 @@
<div class="grid-auto-fill-xs filters-row"></div>
<!--suppress CssUnusedSymbol -->
<style>
.filters-row {
grid-column-gap: var(--10px);
> .column {
> div {
padding: var(--8px);
border: var(--1px) solid var(--default-border-color);
border-radius: var(--border-radius-small);
.column-label {
min-height: calc(var(--40px) + var(--4px));
user-select: none;
}
.column-field {
margin-bottom: var(--2px);
.control-label {
margin-bottom: var(--1px);
}
}
}
margin-bottom: var(--10px);
}
}
</style>

View File

@@ -0,0 +1,15 @@
<div class="clearfix">
<a
role="button"
tabindex="0"
class="pull-right"
data-action="removeGroup"
><span class="fas fa-times"></span></a>
</div>
<div class="row form-group">
<div class="col-md-12 function-container field" data-name="function">{{{function}}}</div>
<div class="col-md-12 attribute-container field" data-name="attribute">{{{attribute}}}</div>
<div class="col-md-12 expression-container field" data-name="expression">{{{expression}}}</div>
<div class="col-md-12 operator-container field" data-name="operator" style="margin-top: var(--2px);">{{{operator}}}</div>
<div class="col-md-12 value-container field" data-name="value">{{{value}}}</div>
</div>

View File

@@ -0,0 +1,24 @@
<a
role="button"
tabindex="0"
class="pull-right"
data-action="removeGroup"
style="position: relative;"
><span class="fas fa-times"></span></a>
<div>
<span
>{{#if showGroupTypeLabel}}<span>{{translate type category='filtersGroupTypes' scope='Report'}}</span> {{/if}}(</span>
</div>
<!--suppress CssOverwrittenProperties -->
<div
class="node"
style="
{{#unless noOffset}}
left: var(--20px); width: calc(100% - var(--20px)); position: relative;
{{else}}
margin-left: var(--18px); width: calc(100% - var(--18px));
{{/unless}}
"
>{{{node}}}</div>
<div>)</div>

View File

@@ -0,0 +1,34 @@
<style>
.node-operator:last-child {
display: none;
}
</style>
<div class="item-list"></div>
<div class="buttons btn-group">
<a class="small dropdown-toggle" role="button" tabindex="0" data-toggle="dropdown"><span class="fas fa-plus"></span> {{translate operator category='filtersGroupTypes' scope='Report'}}</a>
<ul class="dropdown-menu">
{{#unless fieldDisabled}}
<li><a data-action="addField" role="button" tabindex="0" title="{{translate 'Add field' scope='Report'}}">{{translate 'Field' scope='Report'}}</a></li>
{{/unless}}
{{#unless orDisabled}}
<li><a data-action="addOr" role="button" tabindex="0" title="{{translate 'Add OR group' scope='Report'}}">(... {{translate 'OR' scope='Report'}} ...)</a></li>
{{/unless}}
{{#unless andDisabled}}
<li><a data-action="addAnd" role="button" tabindex="0" title="{{translate 'Add AND group' scope='Report'}}">(... {{translate 'AND' scope='Report'}} ...)</a></li>
{{/unless}}
{{#unless notDisabled}}
<li><a data-action="addNot" role="button" tabindex="0" title="{{translate 'Add NOT group' scope='Report'}}">{{translate 'NOT' scope='Report'}} (...)</a></li>
{{/unless}}
{{#unless subQueryInDisabled}}
<li><a data-action="addSubQueryIn" role="button" tabindex="0" title="{{translate 'Add IN group' scope='Report'}}">{{translate 'IN' scope='Report'}} (...)</a></li>
{{/unless}}
{{#unless complexExpressionDisabled}}
<li><a data-action="addComplexExpression" role="button" tabindex="0" title="{{translate 'Add Complex expression' scope='Report'}}">{{translate 'Complex expression' scope='Report'}}</a></li>
{{/unless}}
{{#unless havingDisabled}}
<li><a data-action="addHavingGroup" role="button" tabindex="0" title="{{translate 'Add Having group' scope='Report'}}">{{translate 'Having' scope='Report'}}</a></li>
{{/unless}}
</ul>
</div>

View File

@@ -0,0 +1,22 @@
<div class="row">
<div class="cell cell-entityType col-sm-6 form-group">
<label class="field-label-entityType control-label">{{translate 'entityType' scope='Report' category='fields'}}</label>
<div class="field field-entityType" data-name="entityType">
{{{entityType}}}
</div>
</div>
</div>
<div class="list-group no-side-margin">
<div class="list-group-item">
<h4 class="list-group-item-heading">{{translate 'Grid Report' scope='Report'}}</h4>
<p>{{translate 'gridReportDescription' category='messages' scope='Report'}}</p>
<div class="form-group">
<button class="btn btn-primary" data-action="create" data-type="Grid">{{translate 'Create'}}</button>
</div>
</div>
<div class="list-group-item">
<h4 class="list-group-item-heading">{{translate 'List Report' scope='Report'}}</h4>
<p>{{translate 'listReportDescription' category='messages' scope='Report'}}</p>
<button class="btn btn-primary" data-action="create" data-type="List">{{translate 'Create'}}</button>
</div>
</div>

View File

@@ -0,0 +1,17 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="cell form-group">
<label class="control-label">#1</label>
<div class="field margin-bottom v1-container">
{{{v1}}}
</div>
</div>
<div class="cell form-group">
<label class="control-label">#2</label>
<div class="field margin-bottom v2-container">
{{{v2}}}
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,5 @@
<div class="panel no-side-margin">
<div class="panel-body report-container">{{{record}}}</div>
</div>

View File

@@ -0,0 +1,11 @@
<div class="cell form-group" data-name="exportFormat">
<label class="control-label" data-name="exportFormat">{{translate 'exportFormat' category='fields' scope='Report'}}</label>
<div class="field" data-name="exportFormat">{{{exportFormat}}}</div>
</div>
{{#if column}}
<div class="cell form-group" data-name="column">
<label class="control-label" data-name="column">{{translate 'column' category='fields' scope='Report'}}</label>
<div class="field" data-name="column">{{{column}}}</div>
</div>
{{/if}}

View File

@@ -0,0 +1 @@
<div class="report-container">{{{report}}}</div>

View File

@@ -0,0 +1,2 @@
<div class="chart-container" data-type="{{type}}"></div>
<div class="legend-container"></div>

View File

@@ -0,0 +1,8 @@
<div class="header page-header">{{{header}}}</div></div>
<div class="panel panel-default">
<div class="panel-body">
<div class="report-container">{{{report}}}</div>
</div>
</div>

View File

@@ -0,0 +1,5 @@
<div class="row filters-row grid-auto-fill-xs">
{{#each filterDataList}}
<div class="filter col-sm-4 col-md-3" data-name="{{name}}">{{{var key ../this}}}</div>
{{/each}}
</div>

View File

@@ -0,0 +1,5 @@
{{#if readOnly}}
({{stringValue}})
{{else}}
<span data-field="executionField">{{{executionField}}}</span>
{{/if}}

View File

@@ -0,0 +1,13 @@
{{#if readOnly}}
{{translate type scope='Workflow' category='labels'}}
<span class="field-container hidden">{{{field}}}</span>
<span class="shift-days-container hidden">{{{shiftDays}}}</span>
{{else}}
<div class="row">
<div class="col-sm-2">
<span data-field="type">{{{typeField}}}</span>
</div>
<div class="field-container col-sm-4 hidden">{{{field}}}</div>
<div class="shift-days-container col-sm-6 hidden">{{{shiftDays}}}</div>
</div>
{{/if}}

View File

@@ -0,0 +1,15 @@
{{#if readOnly}}
{{translate shiftDaysOperator scope='Workflow' category='labels'}} {{value}} {{translate unitValue scope='Workflow' category='labels'}}
{{else}}
<div class="row">
<div class="col-sm-4">
<span data-field="operator">{{{operatorField}}}</span>
</div>
<div class="col-sm-4">
<span data-field="value">{{{valueField}}}</span>
</div>
<div class="col-sm-4">
<span data-field="unit">{{{unitField}}}</span>
</div>
</div>
{{/if}}

View File

@@ -0,0 +1,5 @@
{{#if readOnly}}
{{{listHtml}}}
{{else}}
<span data-field="value">{{{valueField}}}</span>
{{/if}}

View File

@@ -0,0 +1,47 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
{{#if target}}
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'Entity' scope='Workflow' category='labels'}}</label>
<div class="field" data-name="target">
{{{target}}}
</div>
</div>
</div>
{{/if}}
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'assignmentRule' scope='Workflow' category='fields'}}</label>
<div class="field" data-name="assignmentRule">
{{{assignmentRule}}}
</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'targetTeam' scope='Workflow' category='fields'}}</label>
<div class="field" data-name="targetTeam">
{{{targetTeam}}}
</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'targetUserPosition' scope='Workflow' category='fields'}}</label>
<div class="field" data-name="targetUserPosition">
{{{targetUserPosition}}}
</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'listReport' scope='Workflow' category='fields'}}</label>
<div class="field" data-name="listReport">
{{{listReport}}}
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,38 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'Entity' scope='Workflow'}}</label>
<div class="field" data-name="link">{{{link}}}</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group add-field-container">
{{{addField}}}
</div>
</div>
<div class="row">
<div class="cell col-md-12">
<div class="field-definitions form-group">
</div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-12 hidden" data-name="formula">
<label class="control-label">{{translate 'Formula' scope='Workflow'}}</label>
<div class="field" data-name="formula"></div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-6 hidden" data-name="linkList">
<label class="control-label">{{translate 'linkList' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="linkList"></div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,33 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'recipient' scope='Workflow'}}</label>
<div class="field field-recipient">
{{{recipient}}}
</div>
</div>
<div class="cell col-sm-6 cell-users form-group">
<label class="control-label">{{translate 'users' scope='Workflow'}}</label>
<div class="field field-users">
{{{users}}}
</div>
</div>
<div class="cell col-sm-6 cell-specifiedTeams form-group">
<label class="control-label">{{translate 'Team' category='scopeNamesPlural'}}</label>
<div class="field field-specifiedTeams">
{{{specifiedTeams}}}
</div>
</div>
</div>
<div class="row">
<div class="cell cell-messageTemplate col-sm-6 form-group">
<label class="control-label">{{translate 'messageTemplate' scope='Workflow'}}</label>
<div class="field field-messageTemplate">{{{messageTemplate}}}</div>
</div>
<div class="cell col-sm-6 form-group">
{{complexText messageTemplateHelpText}}
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,30 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'Link' scope='Workflow'}}</label>
<div class="field" data-name="link">{{{link}}}</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group add-field-container">
{{{addField}}}
</div>
</div>
<div class="row">
<div class="cell col-md-12">
<div class="field-definitions form-group">
</div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-12 hidden" data-name="formula">
<label class="control-label">{{translate 'Formula' scope='Workflow'}}</label>
<div class="field" data-name="formula"></div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,8 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="cell form-group" data-name="formula">
<label class="control-label">{{translate 'Formula' scope='Workflow'}}</label>
<div class="field" data-name="formula">{{{formula}}}</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,28 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="row">
<div class="cell form-group col-md-6" data-name="whatToFollow">
<label class="control-label">{{translate 'whatToFollow' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="whatToFollow">{{{whatToFollow}}}</div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-6" data-name="recipient">
<label class="control-label">{{translate 'whoFollow' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="recipient">{{{recipient}}}</div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-6" data-name="usersToMakeToFollow">
<label class="control-label">{{translate 'User' category='scopeNamesPlural'}}</label>
<div class="field" data-name="usersToMakeToFollow">{{{usersToMakeToFollow}}}</div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-6" data-name="specifiedTeams">
<label class="control-label">{{translate 'Team' category='scopeNamesPlural'}}</label>
<div class="field" data-name="specifiedTeams">{{{specifiedTeams}}}</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,16 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'Link' scope='Workflow'}}</label>
<div class="field" data-name="link">{{{link}}}</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group">
<div class="field" data-name="entity"></div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,38 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="cell cell-usersToMakeToFollow form-group">
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'Entity' scope='Workflow' category='labels'}}</label>
<div class="field" data-name="target">
{{{target}}}
</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group">
<label
class="control-label field-label-methodName"
>{{translate 'methodName' category='labels' scope='Workflow'}}</label>
<div class="field" data-name="methodName">{{{methodName}}}</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-12 form-group">
<label
class="control-label field-label-additionalParameters"
>{{translate 'additionalParameters' category='labels' scope='Workflow'}}</label>
<div class="field" data-name="additionalParameters">{{{additionalParameters}}}</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-12 form-group">
<div class="field" data-name="helpText">{{{helpText}}}</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,99 @@
<style type="text/css">
.field-toSpecifiedTeams .list-group, .field-toSpecifiedUsers .list-group, .field-toSpecifiedContacts .list-group {
margin-bottom: 0;
}
</style>
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="execution-time-container form-group">{{{executionTime}}}</div>
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'From' scope='Workflow'}}</label>
<div class="field field-from">{{{from}}}</div>
</div>
<div class="cell col-sm-6 from-email-container hidden form-group">
<label class="control-label">{{translate 'Email Address' scope='Workflow'}}</label>
<div class="field" data-name="fromEmailAddress">{{{fromEmailAddress}}}</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'To' scope='Workflow'}}</label>
<div class="field field-to">{{{to}}}</div>
</div>
<div class="cell col-sm-6 to-email-container hidden form-group">
<label class="control-label">{{translate 'Email Address' scope='Workflow'}}</label>
<div class="field" data-name="toEmailAddress">{{{toEmailAddress}}}</div>
</div>
<div class="cell col-sm-6 toSpecifiedTeams-container hidden form-group">
<label class="control-label">{{translate 'Team' category='scopeNamesPlural'}}</label>
<div class="field-toSpecifiedTeams">
{{{toSpecifiedTeams}}}
</div>
</div>
<div class="cell col-sm-6 toSpecifiedUsers-container hidden form-group">
<label class="control-label">{{translate 'User' category='scopeNamesPlural'}}</label>
<div class="field-toSpecifiedUsers">
{{{toSpecifiedUsers}}}
</div>
</div>
<div class="cell col-sm-6 toSpecifiedContacts-container hidden form-group">
<label class="control-label">{{translate 'Contact' category='scopeNamesPlural'}}</label>
<div class="field-toSpecifiedContacts">
{{{toSpecifiedContacts}}}
</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'CC' scope='Workflow'}}</label>
<div class="field" data-name="cc">{{{cc}}}</div>
</div>
<div class="cell col-sm-6 cc-email-container hidden form-group">
<label class="control-label">{{translate 'Email Address' scope='Workflow'}}</label>
<div class="field" data-name="ccEmailAddress">{{{ccEmailAddress}}}</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'Reply-To' scope='Workflow'}}</label>
<div class="field field-replyTo">{{{replyTo}}}</div>
</div>
<div class="cell col-sm-6 reply-to-email-container hidden form-group">
<label class="control-label">{{translate 'Email Address' scope='Workflow'}}</label>
<div class="field" data-name="replyToEmailAddress">{{{replyToEmailAddress}}}</div>
</div>
</div>
<div class="row">
<div class="cell cell-emailTemplate col-sm-6 form-group">
<label class="control-label">{{translate 'Email Template' scope='Workflow'}}</label>
<div class="field field-emailTemplate">{{{emailTemplate}}}</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 doNotStore-container form-group">
<label class="control-label">{{translate 'doNotStore' scope='Workflow'}}</label>
<div class="field-doNotStore">
{{{doNotStore}}}
</div>
</div>
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'optOutLink' scope='Workflow' category='fields'}}</label>
<div class="field" data-name="optOutLink">
{{{optOutLink}}}
</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'attachmentsVariable' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="attachmentsVariable">
{{{attachmentsVariable}}}
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,45 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="row">
<div class="cell form-group col-md-6" data-name="requestType">
<label class="control-label">{{translate 'requestType' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="requestType">{{{requestType}}}</div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-12" data-name="requestUrl">
<label class="control-label">{{translate 'requestUrl' category='fields' scope='Workflow'}} *</label>
<div class="field" data-name="requestUrl">{{{requestUrl}}}</div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-12" data-name="headers">
<label class="control-label">{{translate 'headers' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="headers">{{{headers}}}</div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-6" data-name="contentType">
<label class="control-label">{{translate 'requestContentType' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="contentType">{{{contentType}}}</div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-12" data-name="content">
<label class="control-label">{{translate 'requestContent' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="content">{{{content}}}</div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-6" data-name="contentVariable">
<label class="control-label">{{translate 'requestContentVariable' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="contentVariable">{{{contentVariable}}}</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,27 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="row">
<div class="cell col-sm-6 form-group" data-name="target">
<label class="control-label">{{translate 'target' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="target">
{{{target}}}
</div>
</div>
</div>
<div class="row">
<div class="cell cell-workflow col-sm-6 form-group">
<label class="control-label">{{translate 'BpmnFlowchart' category='scopeNames'}}</label>
<div class="field" data-name="flowchart">{{{flowchart}}}</div>
</div>
</div>
<div class="row">
<div class="cell cell-workflow col-sm-6 form-group">
<label class="control-label">{{translate 'startElementId' scope='BpmnProcess' category='fields'}}</label>
<div class="field" data-name="elementId">{{{elementId}}}</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,21 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="execution-time-container form-group">{{{executionTime}}}</div>
<div class="row">
<div class="cell col-sm-6 form-group" data-name="target">
<label class="control-label">{{translate 'target' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="target">
{{{target}}}
</div>
</div>
</div>
<div class="row">
<div class="cell cell-workflow col-sm-6 form-group">
<label class="control-label">{{translate 'Workflow Rule' scope='Workflow'}}</label>
<div class="field field-workflow">{{{workflow}}}</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,29 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'Entity' scope='Workflow'}}</label>
<div class="field" data-name="target">{{{target}}}</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group add-field-container">
{{{addField}}}
</div>
</div>
<div class="row">
<div class="cell col-md-12">
<div class="field-definitions form-group"></div>
</div>
</div>
<div class="row">
<div class="cell col-md-12 form-group hidden" data-name="formula">
<label class="control-label">{{translate 'Formula' scope='Workflow'}}</label>
<div class="field" data-name="formula"></div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,24 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="row">
<div class="cell col-sm-6 form-group add-field-container">
{{{addField}}}
</div>
</div>
<div class="row">
<div class="cell col-md-12">
<div class="field-definitions form-group">
</div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-12 hidden" data-name="formula">
<label class="control-label">{{translate 'Formula' scope='Workflow'}}</label>
<div class="field" data-name="formula"></div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,38 @@
<div class="panel panel-default no-side-margin">
<div class="panel-body panel-body-form">
<div class="row">
<div class="cell col-sm-6 form-group">
<label class="control-label">{{translate 'Link' scope='Workflow'}}</label>
<div class="field" data-name="link">{{{link}}}</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group hidden" data-name="parentEntityType">
<label class="control-label">{{translate 'Entity Type' scope='Workflow'}}</label>
<div class="field" data-name="parentEntityType">
{{{parentEntityType}}}
</div>
</div>
</div>
<div class="row">
<div class="cell col-sm-6 form-group add-field-container">
{{{addField}}}
</div>
</div>
<div class="row">
<div class="cell col-md-12">
<div class="field-definitions form-group">
</div>
</div>
</div>
<div class="row">
<div class="cell form-group col-md-12 hidden" data-name="formula">
<label class="control-label">{{translate 'Formula' scope='Workflow'}}</label>
<div class="field" data-name="formula"></div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,46 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}}
<div class="field-list small" style="margin-top: 12px;">
{{#if hasTarget}}
<div class="cell form-group">
<label class="control-label">{{translate 'Entity' scope='Workflow' category='labels'}}</label>
<div class="field" data-name="target">{{{targetTranslated}}}
</div>
</div>
{{/if}}
<div class="cell form-group">
<label class="control-label">{{translate 'assignmentRule' scope='Workflow' category='fields'}}</label>
<div class="field" data-name="assignmentRule">
</div>
</div>
<div class="cell form-group">
<label class="control-label">{{translate 'targetTeam' scope='Workflow' category='fields'}}</label>
<div class="field" data-name="targetTeam"></div>
</div>
<div class="cell form-group">
<label class="control-label">{{translate 'targetUserPosition' scope='Workflow' category='fields'}}</label>
<div class="field" data-name="targetUserPosition"></div>
</div>
{{#if hasListReport}}
<div class="cell form-group">
<label class="control-label">{{translate 'listReport' scope='Workflow' category='fields'}}</label>
<div class="field" data-name="listReport"></div>
</div>
{{/if}}
</div>
</div>
</div>

View File

@@ -0,0 +1,47 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}}
{{#unless noEntityName}}
{{#if displayedLinkedEntityName}}
{{#if linkTranslated}} <span class="text-muted chevron-right"></span> {{linkTranslated}}{{/if}}
<span class="text-muted chevron-right"></span>
{{{displayedLinkedEntityName}}}{{/if}}{{#if numberId}} #{{numberId}}{{/if}}
{{/unless}}
{{#if aliasId}} <span class="text-muted not-draggable chevron-right"></span> <span class="text-danger"><i>{{aliasId}}</i></span>{{/if}}
<div class="field-list small" style="margin-top: 12px;">
{{#if actionData.fieldList}}
{{#each actionData.fieldList}}
<div class="field-row cell form-group" data-field="{{./this}}">
<label class="control-label">{{translate ./this category='fields' scope=../linkedEntityName}}</label>
{{#if (lookup ../fieldActionLabelMap this)}}
<span class="text-muted"> · {{lookup ../fieldActionLabelMap this}}</span>
{{/if}}
<div class="field-container field" data-field="{{./this}}"></div>
</div>
{{/each}}
{{/if}}
</div>
{{#if actionData.linkList}}
{{#if actionData.linkList.length}}
<div class="field-row cell form-group" data-field="linkList">
<label class="control-label small">{{translate 'linkListShort' category='fields' scope='Workflow'}}</label>
<div class="field small" data-name="linkList">{{{linkList}}}</div>
</div>
{{/if}}
{{/if}}
<div class="field hidden" data-name="formula">{{{formula}}}</div>
</div>
</div>

View File

@@ -0,0 +1,37 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}}
<div class="field-list small" style="margin-top: 12px;">
{{#if actionData.recipient}}
<div class="field-row cell form-group">
<label class="control-label">{{translate 'recipient' scope='Workflow'}}</label>
<div class="field-container">
{{recipientLabel}}
</div>
<div class="field-recipient" data-field="recipient">
</div>
</div>
{{/if}}
{{#if actionData.messageTemplate}}
<div class="field-row cell form-group" data-field="messageTemplate">
<label class="control-label">{{translate 'messageTemplate' scope='Workflow' category='labels'}}</label>
<div
class="field-container field field-messageTemplate complex-text"
data-field="messageTemplate"
>{{complexText messageTemplate}}</div>
</div>
{{/if}}
</div>
</div>
</div>

View File

@@ -0,0 +1,22 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}}
{{#if linkTranslated}} <span class="chevron-right text-muted"></span> {{{linkTranslated}}}{{/if}}
{{#if parentEntityTypeTranslated}} <span class="chevron-right text-muted"></span> {{{parentEntityTypeTranslated}}}{{/if}}
<div class="margin-top">
<div class="field hidden" data-name="formula">{{{formula}}}</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,40 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}}
<div class="field-list small" style="margin-top: 12px;">
<div class="cell form-group" data-name="whatToFollow">
<label class="control-label">{{translate 'whatToFollow' category='fields' scope='Workflow'}}</label>
<div class="field">{{{targetTranslated}}}</div>
</div>
<div class="cell form-group" data-name="recipient">
<label class="control-label">{{translate 'whoFollow' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="recipient">{{{recipient}}}</div>
</div>
<div class="cell form-group" data-name="usersToMakeToFollow">
<label class="control-label">{{translate 'User' category='scopeNamesPlural'}}</label>
<div class="field" data-name="usersToMakeToFollow">{{{usersToMakeToFollow}}}</div>
</div>
<div class="cell form-group" data-name="specifiedTeams">
<label class="control-label">{{translate 'Team' category='scopeNamesPlural'}}</label>
<div class="field" data-name="specifiedTeams">{{{specifiedTeams}}}</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,20 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}} <span class="chevron-right text-muted"></span> {{{linkTranslated}}}
<div class="field-list small" style="margin-top: 12px;">
<div class="field-row cell form-group" data-name="entity">
<div class="field-container field" data-name="entity"></div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,37 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}}
<div class="field-list small" style="margin-top: 12px;">
<div class="cell form-group">
<label class="control-label">{{translate 'Entity' scope='Workflow' category='labels'}}</label>
<div class="field" data-name="target">{{{targetTranslated}}}
</div>
</div>
<div class="field-row cell form-group" data-field="methodName">
<label class="control-label">{{translate 'methodName' scope='Workflow' category='labels'}}</label>
<div class="field-container field field-methodName" data-field="methodName">{{{methodName}}}</div>
</div>
{{#if actionData.additionalParameters}}
<div class="field-row cell form-group" data-field="additionalParameters">
<label class="control-label">{{translate 'additionalParameters' category='labels' scope='Workflow'}}</label>
<div class="field-container field field-additionalParameters" data-field="additionalParameters">{{{additionalParameters}}}</div>
</div>
{{/if}}
</div>
</div>
</div>

View File

@@ -0,0 +1,107 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}}
<div class="field-list small" style="margin-top: 12px;">
<div class="field-row cell form-group execution-time-container" data-field="execution-time">
<div class="field" data-field="execution-time">{{{executionTime}}}</div>
</div>
{{#if actionData.from}}
<div class="field-row cell form-group" data-field="from">
<label class="control-label">{{translate 'From' scope='Workflow'}}</label>
<div class="field-container field" data-field="from">
{{#ifEqual actionData.from 'specifiedEmailAddress'}}
{{actionData.fromEmail}}
{{else}}
{{fromLabel}}
{{/ifEqual}}
</div>
</div>
{{/if}}
{{#if actionData.to}}
<div class="field-row cell form-group" data-field="to">
<label class="control-label">{{translate 'To' scope='Workflow'}}</label>
<div class="field-container field" data-field="to">
{{#ifEqual actionData.to 'specifiedEmailAddress'}}
{{actionData.toEmail}}
{{else}}
{{toLabel}}
{{/ifEqual}}
{{#ifEqual actionData.to 'specifiedTeams'}}
<div class="field-container field field-toSpecifiedTeams" data-field="toSpecifiedTeams">{{{toSpecifiedTeams}}}</div>
{{/ifEqual}}
{{#ifEqual actionData.to 'specifiedUsers'}}
<div class="field-container field field-toSpecifiedUsers" data-field="toSpecifiedUsers">{{{toSpecifiedUsers}}}</div>
{{/ifEqual}}
{{#ifEqual actionData.to 'specifiedContacts'}}
<div class="field-container field field-toSpecifiedContacts" data-field="toSpecifiedContacts">{{{toSpecifiedContacts}}}</div>
{{/ifEqual}}
</div>
</div>
{{/if}}
{{#if actionData.cc}}
<div class="field-row cell form-group" data-field="replyTo">
<label class="control-label">{{translate 'CC' scope='Workflow'}}</label>
<div class="field-container field" data-field="replyTo">
{{#ifEqual actionData.cc 'specifiedEmailAddress'}}
{{actionData.ccEmail}}
{{else}}
{{ccLabel}}
{{/ifEqual}}
</div>
</div>
{{/if}}
{{#if actionData.replyTo}}
<div class="field-row cell form-group" data-field="replyTo">
<label class="control-label">{{translate 'Reply-To' scope='Workflow'}}</label>
<div class="field-container field" data-field="replyTo">
{{#ifEqual actionData.replyTo 'specifiedEmailAddress'}}
{{actionData.replyToEmail}}
{{else}}
{{replyToLabel}}
{{/ifEqual}}
</div>
</div>
{{/if}}
{{#if actionData.emailTemplateId}}
<div class="field-row cell form-group" data-field="emailTemplate">
<label class="control-label">{{translate 'Email Template' scope='Workflow' category='labels'}}</label>
<div class="field-container field" data-field="emailTemplate">{{{emailTemplate}}}</div>
</div>
{{/if}}
{{#if actionData.doNotStore}}
<div class="field-row cell form-group" data-field="doNotStore">
<label class="control-label">{{translate 'doNotStore' scope='Workflow'}}</label>
<div class="field-container field-doNotStore" data-field="doNotStore">{{{doNotStore}}}</div>
</div>
{{/if}}
<div class="field-row cell form-group" data-name="optOutLink">
<label class="control-label">{{translate 'optOutLink' scope='Workflow' category='fields'}}</label>
<div class="field-container field" data-name="optOutLink">{{{optOutLink}}}</div>
</div>
{{#if actionData.attachmentsVariable}}
<div class="field-row cell form-group" data-name="attachmentsVariable">
<label class="control-label">{{translate 'attachmentsVariable' scope='Workflow' category='fields'}}</label>
<div class="field-container field" data-name="attachmentsVariable">{{{attachmentsVariable}}}</div>
</div>
{{/if}}
</div>
</div>
</div>

View File

@@ -0,0 +1,42 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}}
<div class="field-list small margin-top">
<div class="cell form-group" data-name="requestType">
<label class="control-label">{{translate 'requestType' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="requestType">{{{requestType}}}</div>
</div>
<div class="cell form-group" data-name="requestUrl">
<label class="control-label">{{translate 'requestUrl' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="requestUrl">{{{requestUrl}}}</div>
</div>
<div class="cell form-group" data-name="headers">
<label class="control-label">{{translate 'headers' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="headers">{{{headers}}}</div>
</div>
<div class="cell form-group" data-name="contentType">
<label class="control-label">{{translate 'requestContentType' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="contentType">{{{contentType}}}</div>
</div>
<div class="cell form-group {{#if actionData.contentVariable}} hidden {{/if}} " data-name="content">
<label class="control-label">{{translate 'requestContent' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="content">{{{content}}}</div>
</div>
<div class="cell form-group{{#unless actionData.contentVariable}} hidden{{/unless}}" data-name="contentVariable">
<label class="control-label">{{translate 'requestContentVariable' category='fields' scope='Workflow'}}</label>
<div class="field" data-name="contentVariable">{{{contentVariable}}}</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,35 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}}
<div class="field-list small" style="margin-top: 12px;">
<div class="cell form-group" data-name="target">
<label class="control-label">{{translate 'target' category='fields' scope='Workflow'}}</label>
<div class="field">{{{targetTranslated}}}</div>
</div>
{{#if actionData.flowchartId}}
<div class="field-row cell form-group" data-name="flowchart">
<label class="control-label">{{translate 'BpmnFlowchart' category='scopeNames'}}</label>
<div class="field" data-name="flowchart">{{{flowchart}}}</div>
</div>
{{/if}}
{{#if actionData.elementId}}
<div class="field-row cell form-group" data-name="elementId">
<label class="control-label">{{translate 'startElementId' scope='BpmnProcess' category='fields'}}</label>
<div class="field" data-name="elementId">{{{elementId}}}</div>
</div>
{{/if}}
</div>
</div>
</div>

View File

@@ -0,0 +1,32 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}}
<div class="field-list small" style="margin-top: 12px;">
<div class="field-row cell form-group execution-time-container" data-field="execution-time">
<div class="field" data-field="execution-time">{{{executionTime}}}</div>
</div>
<div class="cell form-group" data-name="target">
<label class="control-label">{{translate 'target' category='fields' scope='Workflow'}}</label>
<div class="field">{{{targetTranslated}}}</div>
</div>
{{#if actionData.workflowId}}
<div class="field-row cell form-group" data-field="workflow">
<label class="control-label">{{translate 'Workflow' scope='Workflow' category='labels'}}</label>
<div class="field-container field field-workflow" data-field="workflow">{{{workflow}}}</div>
</div>
{{/if}}
</div>
</div>
</div>

View File

@@ -0,0 +1,36 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}}
{{#if entityTypeTranslated}}{{#if linkTranslated}} <span class="text-muted chevron-right"></span> {{linkTranslated}}{{/if}} <span class="text-muted chevron-right"></span> {{{entityTypeTranslated}}}{{/if}}
{{#if text}}
'{{text}}'
{{else}}
{{#if numberId}} #{{numberId}}{{/if}}
{{/if}}
<div class="field-list small" style="margin-top: 12px;">
{{#if actionData.fieldList}}
{{#each actionData.fieldList}}
<div class="field-row cell form-group" data-field="{{./this}}">
<label class="control-label">{{translate ./this category='fields' scope=../linkedEntityName}}</label>
{{#if (lookup ../fieldActionLabelMap this)}}
<span class="text-muted"> · {{lookup ../fieldActionLabelMap this}}</span>
{{/if}}
<div class="field-container field" data-field="{{./this}}"></div>
</div>
{{/each}}
{{/if}}
</div>
<div class="field hidden" data-name="formula">{{{formula}}}</div>
</div>
</div>

View File

@@ -0,0 +1,42 @@
<div class="row">
{{#unless readOnly}}
<div class="col-md-1">
<button class="btn btn-default btn-sm btn-icon" type="button" data-action='editAction'><span class="fas fa-pencil-alt fa-sm"></span></button>
<div>
<a class="btn btn-text btn-sm btn-icon drag-handle"><span class="fas fa-grip fa-sm fa-rotate-90"></span></a>
</div>
</div>
{{/unless}}
<div class="col-md-10">
{{translate actionType scope='Workflow' category='actionTypes'}}
{{#if linkTranslated}} <span class="text-muted chevron-right"></span> {{{linkTranslated}}}{{/if}}
{{#if parentEntityTypeTranslated}} <span class="text-muted chevron-right"></span> {{{parentEntityTypeTranslated}}}{{/if}}
<div class="field-list small" style="margin-top: 12px;">
{{#if actionData.fieldList}}
{{#each actionData.fieldList}}
<div class="field-row cell form-group" data-field="{{./this}}">
<label class="control-label">{{translate ./this category='fields' scope=../linkedEntityName}}</label>
{{#if (lookup ../fieldActionLabelMap this)}}
<span class="text-muted"> · {{lookup ../fieldActionLabelMap this}}</span>
{{/if}}
<div class="field-container field" data-field="{{./this}}"></div>
</div>
{{/each}}
{{/if}}
</div>
{{#if actionData.linkList}}
{{#if actionData.linkList.length}}
<div class="field-row cell form-group" data-field="linkList">
<label class="control-label small">{{translate 'linkListShort' category='fields' scope='Workflow'}}</label>
<div class="field small" data-name="linkList">{{{linkList}}}</div>
</div>
{{/if}}
{{/if}}
<div class="field hidden" data-name="formula">{{{formula}}}</div>
</div>
</div>

View File

@@ -0,0 +1,13 @@
{{#if readOnly}}
{{translate shiftDaysOperator scope='Workflow'}} {{value}} {{translate 'days' scope='Workflow'}}
{{else}}
<div class="row">
<div class="col-sm-12">
<div class="input-group input-group-sm">
<span data-field="operator" class="input-group-item" style="width: 40px;">{{{operatorField}}}</span>
<span data-field="value" class="input-group-item input-group-item-middle">{{{valueField}}}</span>
<span class="small input-group-addon radius-right" style="max-width: 60px;">{{translate 'days' scope='Workflow'}}</span>
</div>
</div>
</div>
{{/if}}

View File

@@ -0,0 +1,5 @@
{{#if readOnly}}
{{translateOption value scope='Workflow' field='subjectType'}}
{{else}}
<span data-field="value">{{{valueField}}}</span>
{{/if}}

View File

@@ -0,0 +1,10 @@
{{#if readOnly}}
<code>
{{/if}}
<div
class="field-container"
style="display: inline-block;{{#unless readOnly}} min-width: 100%;{{/unless}}"
>{{{field}}}</div>
{{#if readOnly}}
</code>
{{/if}}

View File

@@ -0,0 +1,5 @@
{{#if readOnly}}
{{{listHtml}}}
{{else}}
<span data-field="value">{{{valueField}}}</span>
{{/if}}

View File

@@ -0,0 +1,5 @@
{{#if readOnly}}
<code>{{value}}</code>
{{else}}
<input type="text" class="form-control input-sm" data-name="subject" value="{{value}}">
{{/if}}

View File

@@ -0,0 +1,26 @@
{{#if readOnly}}
<span class="comparison">
{{translate comparisonValue category='labels' scope='Workflow'}}
</span>
<span class="subject-type">
{{{subjectType}}}
</span>
<span class="subject">
{{{subject}}}
</span>
{{else}}
<div class="row">
<div class="col-sm-6 comparison">
<span data-field="comparison">{{{comparisonField}}}</span>
</div>
<div class="col-sm-6 subject-type">
{{{subjectType}}}
</div>
</div>
<div class="row">
<div class="col-sm-12 subject">
{{{subject}}}
</div>
</div>
{{/if}}

View File

@@ -0,0 +1,34 @@
{{#if readOnly}}
<span class="comparison">
{{translate comparisonValue category='labels' scope='Workflow'}}
</span>
<span class="subject-type">
{{{subjectType}}}
</span>
<span class="subject">
{{{subject}}}
</span>
<span class="shift-days">
{{{shiftDays}}}
</span>
{{else}}
<div class="row">
<div class="col-sm-6 comparison">
<span data-field="comparison">{{{comparisonField}}}</span>
</div>
<div class="col-sm-6 subject-type">
{{{subjectType}}}
</div>
</div>
<div class="row">
<div class="col-sm-12 subject">
{{{subject}}}
</div>
</div>
<div class="row">
<div class="col-sm-12 shift-days">
{{{shiftDays}}}
</div>
</div>
{{/if}}

View File

@@ -0,0 +1,25 @@
{{#if readOnly}}
<span class="comparison">
{{translate comparisonValue category='labels' scope='Workflow'}}
</span>
<span class="subject-type">
{{{subjectType}}}
</span>
<span class="subject">
{{{subject}}}
</span>
{{else}}
<div class="row">
<div class="col-sm-6 comparison">
<span data-field="comparison">{{{comparisonField}}}</span>
</div>
</div>
<div class="row">
<div class="col-sm-12 subject">
{{{subject}}}
</div>
</div>
{{/if}}

View File

@@ -0,0 +1,19 @@
{{#if readOnly}}
<div class="subject">
{{{subject}}}
</div>
{{else}}
<div class="row">
<div class="col-sm-2 subject-type">
<span data-field="subjectType">{{{subjectTypeField}}}</span>
</div>
<div class="col-sm-6 subject">
{{{subject}}}
</div>
{{#if hasActionType}}
<div class="col-sm-3" data-field="actionType">{{{actionTypeField}}}</div>
{{/if}}
</div>
{{/if}}

View File

@@ -0,0 +1,22 @@
{{#if readOnly}}
<span class="subject">
{{#if subject}} {{{subject}}} {{else}} {{translate 'today' scope='Workflow' category='labels'}} {{/if}}
</span>
<span class="shift-days">
{{{shiftDays}}}
</span>
{{else}}
<div class="row">
<div class="col-sm-2 subject-type">
<span data-field="subjectType">{{{subjectTypeField}}}</span>
</div>
<div class="col-sm-4 subject">
{{{subject}}}
</div>
<div class="col-sm-5 shift-days">
{{{shiftDays}}}
</div>
</div>
{{/if}}

View File

@@ -0,0 +1 @@
{{#if isNotEmpty}}<div class="well"><span class="complex-text">{{{value}}}</span></div>{{/if}}

View File

@@ -0,0 +1,32 @@
<div>
<div class="actions{{#unless readOnly}} margin margin-bottom{{/unless}} no-side-margin"></div>
{{#unless readOnly}}
<div class="btn-group">
<button
class="btn btn-default btn-sm btn-icon radius-right"
type="button"
data-action="showAddAction"
title="{{translate 'Add Action' scope='Workflow'}}"
><span class="fas fa-plus"></span></button>
</div>
{{/unless}}
</div>
{{#if showNoData}}
<div class="list-container margin-top">
<div class="no-data">
{{translate 'No Data'}}
</div>
</div>
{{/if}}
<!--suppress CssUnusedSymbol -->
<style>
.actions-container {
.actions {
.drag-handle {
cursor: grab;
}
}
}
</style>

View File

@@ -0,0 +1,135 @@
{{#if showConditionsAll}}
<div>
<div class="all-conditions"></div>
</div>
{{/if}}
{{#if showConditionsAny}}
<div
{{#if marginForConditionsAny}}style="margin-top: var(--20px)"{{/if}}
>
<div class="any-conditions"></div>
</div>
{{/if}}
{{#if showFormula}}
<div
{{#if marginForFormula}}style="margin-top: var(--20px)"{{/if}}
>
<label class="control-label"
>{{translate 'Formula' scope='Workflow'}}
<small class="text-muted"> · {{translate 'formulaInfo' category='texts' scope='Workflow'}}</small></label>
<div
class="formula-conditions clearfix"
{{#if readOnly}}style="margin-left: 10px;"{{/if}}
></div>
</div>
{{/if}}
{{#if showNoData}}
<div class="list-container margin-top">
<div class="no-data">
{{translate 'No Data'}}
</div>
</div>
{{/if}}
<!--suppress CssUnusedSymbol -->
<style>
.all-conditions,
.any-conditions {
> div {
.cell {
> label {
color: var(--gray-soft);
}
&,
> .clearfix {
> a[data-action="removeCondition"] {
visibility: hidden;
}
}
&:hover {
&,
> .clearfix {
> a[data-action="removeCondition"] {
visibility: visible;
}
}
}
padding: var(--2px) var(--10px) var(--10px) var(--10px);
border: var(--1px) solid var(--default-border-color);
border-radius: var(--border-radius-small);
a[data-action="removeCondition"] {
position: relative;
}
&:last-child {
margin-bottom: var(--4px);
}
&[data-role="field-cell"] {
max-width: calc(var(--340px) + var(--10px));
}
&[data-role="group-cell"] {
> .condition {
margin-top: var(--6px);
}
&:has(> [data-action="removeCondition"]) {
> .condition {
margin-top: var(--20px);
}
}
}
.condition {
.row + .row {
> div:not(:empty) {
margin-top: var(--8px);
}
}
padding-top: var(--2px);
}
padding-top: var(--4px);
}
[data-role="operator"] {
font-size: 0.85em;
margin: var(--5px) var(--4px) var(--4px);
user-select: none;
&:last-child {
display: none;
}
}
}
.items {
+ .btn-group {
margin-top: var(--2px);
}
}
> .no-data {
margin-right: var(--10px);
}
> .items {
> .cell[data-role="group-cell"] {
max-width: calc(var(--340px) + var(--10px) + var(--22px));
&:has(.cell[data-role="group-cell"]) {
max-width: calc(var(--340px) + var(--10px) + var(--22px) + var(--22px));
}
}
}
}
</style>

View File

@@ -0,0 +1,26 @@
<div class="panel panel-default panel-conditions hidden" data-name="conditions">
<div class="panel-heading"><h4 class="panel-title">{{translate 'Conditions' scope='Workflow'}}</h4></div>
<div class="panel-body conditions-container">
{{{conditions}}}
</div>
</div>
<div class="panel panel-default panel-actions hidden" data-name="actions">
<div class="panel-heading"><h4 class="panel-title">{{translate 'Actions' scope='Workflow'}}</h4></div>
<div class="panel-body actions-container">
{{{actions}}}
</div>
</div>
{{#if workflowLogRecords}}
<div class="panel panel-default" data-name="workflowLogRecords">
<div class="panel-heading">
<h4 class="panel-title">
<span style="cursor: pointer;" class="action" data-action="refresh" data-panel="workflowLogRecords" title="{{translate 'clickToRefresh' category='messages'}}">{{translate 'workflowLogRecords' scope='Workflow' category='links'}}</span>
</h4>
</div>
<div class="panel-body">
{{{workflowLogRecords}}}
</div>
</div>
{{/if}}

View File

@@ -0,0 +1 @@
dummy

View File

@@ -0,0 +1,373 @@
.btn-secondary {
color: #fff;
background-color: #6c757d;
border-color: #6c757d;
}
.btn-secondary:hover {
color: #fff;
background-color: #5a6268;
border-color: #545b62;
}
.btn-secondary:focus, .btn-secondary.focus {
box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
}
.btn-secondary.disabled, .btn-secondary:disabled {
color: #fff;
background-color: #6c757d;
border-color: #6c757d;
}
.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,
.show > .btn-secondary.dropdown-toggle {
color: #fff;
background-color: #545b62;
border-color: #4e555b;
}
.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,
.show > .btn-secondary.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
}
.btn-light {
color: #212529;
background-color: #f8f9fa;
border-color: #f8f9fa;
}
.btn-light:hover {
color: #212529;
background-color: #e2e6ea;
border-color: #dae0e5;
}
.btn-light:focus, .btn-light.focus {
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
}
.btn-light.disabled, .btn-light:disabled {
color: #212529;
background-color: #f8f9fa;
border-color: #f8f9fa;
}
.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,
.show > .btn-light.dropdown-toggle {
color: #212529;
background-color: #dae0e5;
border-color: #d3d9df;
}
.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,
.show > .btn-light.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
}
.btn-dark {
color: #fff;
background-color: #343a40;
border-color: #343a40;
}
.btn-dark:hover {
color: #fff;
background-color: #23272b;
border-color: #1d2124;
}
.btn-dark:focus, .btn-dark.focus {
box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
}
.btn-dark.disabled, .btn-dark:disabled {
color: #fff;
background-color: #343a40;
border-color: #343a40;
}
.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,
.show > .btn-dark.dropdown-toggle {
color: #fff;
background-color: #1d2124;
border-color: #171a1d;
}
.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,
.show > .btn-dark.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
}
.btn-outline-primary {
color: #007bff;
background-color: transparent;
background-image: none;
border-color: #007bff;
}
.btn-outline-primary:hover {
color: #fff;
background-color: #007bff;
border-color: #007bff;
}
.btn-outline-primary:focus, .btn-outline-primary.focus {
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
}
.btn-outline-primary.disabled, .btn-outline-primary:disabled {
color: #007bff;
background-color: transparent;
}
.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,
.show > .btn-outline-primary.dropdown-toggle {
color: #fff;
background-color: #007bff;
border-color: #007bff;
}
.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,
.show > .btn-outline-primary.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
}
.btn-outline-secondary {
color: #6c757d;
background-color: transparent;
background-image: none;
border-color: #6c757d;
}
.btn-outline-secondary:hover {
color: #fff;
background-color: #6c757d;
border-color: #6c757d;
}
.btn-outline-secondary:focus, .btn-outline-secondary.focus {
box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
}
.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {
color: #6c757d;
background-color: transparent;
}
.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,
.show > .btn-outline-secondary.dropdown-toggle {
color: #fff;
background-color: #6c757d;
border-color: #6c757d;
}
.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,
.show > .btn-outline-secondary.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
}
.btn-outline-success {
color: #28a745;
background-color: transparent;
background-image: none;
border-color: #28a745;
}
.btn-outline-success:hover {
color: #fff;
background-color: #28a745;
border-color: #28a745;
}
.btn-outline-success:focus, .btn-outline-success.focus {
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
}
.btn-outline-success.disabled, .btn-outline-success:disabled {
color: #28a745;
background-color: transparent;
}
.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,
.show > .btn-outline-success.dropdown-toggle {
color: #fff;
background-color: #28a745;
border-color: #28a745;
}
.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,
.show > .btn-outline-success.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
}
.btn-outline-info {
color: #aba8cc;
background-color: transparent;
background-image: none;
border-color: #aba8cc;
}
.btn-outline-info:hover {
color: #fff;
background-color: #8c88b9;
border-color: #8c88b9;
}
.btn-outline-info:focus, .btn-outline-info.focus {
box-shadow: 0 0 0 0.2rem rgba(140, 112, 180, 0.5);
}
.btn-outline-info.disabled, .btn-outline-info:disabled {
color: #dfb9ed;
background-color: transparent;
}
.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,
.show > .btn-outline-info.dropdown-toggle {
color: #fff;
background-color: #7671ac;
border-color: #6d68a6;
}
.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,
.show > .btn-outline-info.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(227, 139, 231, 0.5);
}
.btn-outline-warning {
color: #ffc107;
background-color: transparent;
background-image: none;
border-color: #ffc107;
}
.btn-outline-warning:hover {
color: #212529;
background-color: #ffc107;
border-color: #ffc107;
}
.btn-outline-warning:focus, .btn-outline-warning.focus {
box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
}
.btn-outline-warning.disabled, .btn-outline-warning:disabled {
color: #ffc107;
background-color: transparent;
}
.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,
.show > .btn-outline-warning.dropdown-toggle {
color: #212529;
background-color: #ffc107;
border-color: #ffc107;
}
.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,
.show > .btn-outline-warning.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
}
.btn-outline-danger {
color: #dc3545;
background-color: transparent;
background-image: none;
border-color: #dc3545;
}
.btn-outline-danger:hover {
color: #fff;
background-color: #dc3545;
border-color: #dc3545;
}
.btn-outline-danger:focus, .btn-outline-danger.focus {
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
}
.btn-outline-danger.disabled, .btn-outline-danger:disabled {
color: #dc3545;
background-color: transparent;
}
.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,
.show > .btn-outline-danger.dropdown-toggle {
color: #fff;
background-color: #dc3545;
border-color: #dc3545;
}
.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,
.show > .btn-outline-danger.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
}
.btn-outline-light {
color: #f8f9fa;
background-color: transparent;
background-image: none;
border-color: #f8f9fa;
}
.btn-outline-light:hover {
color: #212529;
background-color: #f8f9fa;
border-color: #f8f9fa;
}
.btn-outline-light:focus, .btn-outline-light.focus {
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
}
.btn-outline-light.disabled, .btn-outline-light:disabled {
color: #f8f9fa;
background-color: transparent;
}
.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,
.show > .btn-outline-light.dropdown-toggle {
color: #212529;
background-color: #f8f9fa;
border-color: #f8f9fa;
}
.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,
.show > .btn-outline-light.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
}
.btn-outline-dark {
color: #343a40;
background-color: transparent;
background-image: none;
border-color: #343a40;
}
.btn-outline-dark:hover {
color: #fff;
background-color: #343a40;
border-color: #343a40;
}
.btn-outline-dark:focus, .btn-outline-dark.focus {
box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
}
.btn-outline-dark.disabled, .btn-outline-dark:disabled {
color: #343a40;
background-color: transparent;
}
.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,
.show > .btn-outline-dark.dropdown-toggle {
color: #fff;
background-color: #343a40;
border-color: #343a40;
}
.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,
.show > .btn-outline-dark.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
}

View File

@@ -0,0 +1,153 @@
{{#ifEqual mode 'openNewTab'}}
{{#if value}}
<a href="{{url}}" class="btn btn-{{style}} {{buttonSize}}" title="{{title}}" target="_blank">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</a>
{{else}}
{{#if valueIsSet}}
<span class="none-value">{{translate 'None'}}</span>
{{else}}
<span class="loading-value">...</span>
{{/if}}
{{/if}}
{{/ifEqual}}
{{#ifEqual mode 'openUrl'}}
{{#if value}}
<a href="{{url}}" class="btn btn-{{style}} {{buttonSize}}" title="{{title}}">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</a>
{{else}}
{{#if valueIsSet}}
<span class="none-value">{{translate 'None'}}</span>
{{else}}
<span class="loading-value">...</span>
{{/if}}
{{/if}}
{{/ifEqual}}
{{#ifEqual mode 'openPopup'}}
{{#if value}}
<button class="btn btn-{{style}} {{buttonSize}}" title="{{title}}" data-action="open-popup">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</button>
{{else}}
{{#if valueIsSet}}
<span class="none-value">{{translate 'None'}}</span>
{{else}}
<span class="loading-value">...</span>
{{/if}}
{{/if}}
{{/ifEqual}}
{{#ifEqual mode 'openModal'}}
{{#if value}}
<button class="btn btn-{{style}} {{buttonSize}}" title="{{title}}" data-action="open-modal">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</button>
{{else}}
{{#if valueIsSet}}
<span class="none-value">{{translate 'None'}}</span>
{{else}}
<span class="loading-value">...</span>
{{/if}}
{{/if}}
{{/ifEqual}}
{{#ifEqual mode 'openEspoModal'}}
{{#if value}}
<button class="btn btn-{{style}} {{buttonSize}}" title="{{title}}" data-action="espo-modal">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</button>
{{else}}
{{#if valueIsSet}}
<span class="none-value">{{translate 'None'}}</span>
{{else}}
<span class="loading-value">...</span>
{{/if}}
{{/if}}
{{/ifEqual}}
{{#ifEqual mode 'quickCreate'}}
{{#if value}}
<button class="btn btn-{{style}} {{buttonSize}}" title="{{title}}" data-action="quick-create">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</button>
{{else}}
{{#if valueIsSet}}
<span class="none-value">{{translate 'None'}}</span>
{{else}}
<span class="loading-value">...</span>
{{/if}}
{{/if}}
{{/ifEqual}}
{{#ifEqual mode 'runEspoWorkflow'}}
{{#if value}}
<button class="btn btn-{{style}} {{buttonSize}}" title="{{title}}" data-action="run-workflow">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</button>
{{else}}
{{#if valueIsSet}}
<span class="none-value">{{translate 'None'}}</span>
{{else}}
<span class="loading-value">...</span>
{{/if}}
{{/if}}
{{/ifEqual}}

View File

@@ -0,0 +1,12 @@
<input
type="text"
class="main-element form-control"
placeholder="{{placeholder}}"
data-name="{{name}}"
value="{{value}}"
{{#if params.maxLength}} maxlength="{{params.maxLength}}"{{/if}}
autocomplete="espo-{{name}}"
{{#if noSpellCheck}}
spellcheck="false"
{{/if}}
>

View File

@@ -0,0 +1,105 @@
{{#ifEqual mode 'openNewTab'}}
{{#if value}}
<a href="{{url}}" class="btn btn-{{style}} label-md" style="height:24px" title="{{title}}" target="_blank">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</a>
{{/if}}
{{/ifEqual}}
{{#ifEqual mode 'openUrl'}}
{{#if value}}
<a href="{{url}}" class="btn btn-{{style}} label-md" style="height:24px" title="{{title}}">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</a>
{{/if}}
{{/ifEqual}}
{{#ifEqual mode 'openPopup'}}
{{#if value}}
<button class="btn btn-{{style}} label-md" style="height:24px" title="{{title}}" data-action="open-popup">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</button>
{{/if}}
{{/ifEqual}}
{{#ifEqual mode 'openModal'}}
{{#if value}}
<button class="btn btn-{{style}} label-md" style="height:24px" title="{{title}}" data-action="open-modal">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</button>
{{/if}}
{{/ifEqual}}
{{#ifEqual mode 'openEspoModal'}}
{{#if value}}
<button class="btn btn-{{style}} label-md" style="height:24px" title="{{title}}" data-action="espo-modal">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</button>
{{/if}}
{{/ifEqual}}
{{#ifEqual mode 'quickCreate'}}
{{#if value}}
<button class="btn btn-{{style}} label-md" style="height:24px" title="{{title}}" data-action="quick-create">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</button>
{{/if}}
{{/ifEqual}}
{{#ifEqual mode 'runEspoWorkflow'}}
{{#if value}}
<button class="btn btn-{{style}} label-md" style="height:24px" title="{{title}}" data-action="run-workflow">
{{#if iconLeft}}
<span class="{{iconLeft}}"></span>
{{/if}}
{{#if buttonLabel}}
<span> {{buttonLabel}} </span>
{{/if}}
{{#if iconRight}}
<span class="{{iconRight}}"></span>
{{/if}}
</button>
{{/if}}
{{/ifEqual}}

View File

@@ -0,0 +1 @@
<iframe class="link-button-modal" title="URL Preview" src="{{url}}" width="100%" height="100%" frameborder="0"></iframe>

View File

@@ -0,0 +1,24 @@
define('link-button:views/admin/field-manager/fields/confirmation-dialog', ['views/fields/bool'], (Dep) => {
return class extends Dep {
setup() {
super.setup();
this.listenTo(this.model, 'change:mode', this.toggleConfirmationDialog);
}
afterRender() {
super.afterRender();
this.toggleConfirmationDialog();
}
toggleConfirmationDialog() {
if (this.model.get('mode') === 'runEspoWorkflow') {
this.getParentView().showField('confirmationDialog');
this.getParentView().showField('hideOriginalWorkflowAction');
} else {
this.getParentView().hideField('confirmationDialog');
this.getParentView().hideField('hideOriginalWorkflowAction');
}
}
};
});

View File

@@ -0,0 +1,22 @@
define('link-button:views/admin/field-manager/fields/confirmation-text', ['views/fields/text'], (Dep) => {
return class extends Dep {
setup() {
super.setup();
this.listenTo(this.model, 'change:confirmationDialog change:mode', this.toggleConfirmationText);
}
afterRender() {
super.afterRender();
this.toggleConfirmationText();
}
toggleConfirmationText() {
if (this.model.get('confirmationDialog') === true && this.model.get('mode') === 'runEspoWorkflow') {
this.getParentView().showField('confirmationText');
} else {
this.getParentView().hideField('confirmationText');
}
}
};
});

View File

@@ -0,0 +1,23 @@
define('link-button:views/admin/field-manager/fields/mode', ['views/fields/enum'], (Dep) => {
return class extends Dep {
setup() {
super.setup();
this.updateModeOptions();
}
afterRender() {
super.afterRender();
}
updateModeOptions() {
const isAdvancedPackInstalled = this.getHelper().getAppParam('isAdvancedPackInstalled');
const modeOptions = this.model.getFieldParam('mode', 'options') || [];
if (isAdvancedPackInstalled) {
modeOptions.push('runEspoWorkflow');
}
}
};
});

View File

@@ -0,0 +1,24 @@
define('link-button:views/admin/field-manager/fields/popup', ['views/fields/int'], (Dep) => {
return class extends Dep {
setup() {
super.setup();
this.listenTo(this.model, 'change:mode', this.togglePopupSize);
}
afterRender() {
super.afterRender();
this.togglePopupSize();
}
togglePopupSize() {
if (this.model.get('mode') === 'openPopup') {
this.getParentView().showField('popupHeight');
this.getParentView().showField('popupWidth');
} else {
this.getParentView().hideField('popupHeight');
this.getParentView().hideField('popupWidth');
}
}
};
});

View File

@@ -0,0 +1,242 @@
define('link-button:views/fields/link-button', ['views/fields/url'], (Dep) => {
return class extends Dep {
type = 'link-button'
editTemplate = 'link-button:fields/edit'
listTemplate = 'link-button:fields/list'
detailTemplate = 'link-button:fields/detail'
setup() {
super.setup();
this.events['click button[data-action="open-modal"]'] = () => {
this.actionOpenModal();
};
this.events['click button[data-action="espo-modal"]'] = () => {
this.actionEspoModal();
};
this.events['click button[data-action="open-popup"]'] = () => {
this.actionOpenPopup();
};
this.events['click button[data-action="quick-create"]'] = () => {
this.actionQuickCreate();
};
this.events['click button[data-action="run-workflow"]'] = () => {
this.actionCheckWorkFlow();
};
}
afterRender() {
super.afterRender();
const superParent = this.getParentView().getParentView()._parentView;
const url = this.model.get(this.name);
const hideLabel = this.model.getFieldParam(this.name, 'hideLabel');
const isDetailMode = this.isDetailMode();
const hideOriginalWorkflowAction = this.model.getFieldParam(this.name, 'hideOriginalWorkflowAction');
const mode = this.model.getFieldParam(this.name, 'mode');
if (hideLabel === true) {
this.getLabelElement().hide();
}
if (url && isDetailMode && hideOriginalWorkflowAction === true && mode === 'runEspoWorkflow') {
const workflowId = url.split('#')[1]?.split('/').pop();
superParent.hideHeaderActionItem(`runWorkflow_${workflowId}`);
}
}
data() {
return {
...super.data(),
iconLeft: this.model.getFieldParam(this.name, 'iconLeft'),
iconRight: this.model.getFieldParam(this.name, 'iconRight'),
mode: this.model.getFieldParam(this.name, 'mode'),
buttonLabel: this.model.getFieldParam(this.name, 'buttonLabel') || null,
placeholder: this.model.getFieldParam(this.name, 'placeholder') || null,
title: this.model.getFieldParam(this.name, 'title') || null,
buttonSize: this.model.getFieldParam(this.name, 'buttonSize'),
style: this.model.getFieldParam(this.name, 'style'),
};
}
actionOpenModal() {
this.notify('Loading...');
this.createView('dialog', 'link-button:views/modals/button-url', {
buttonLabel: this.model.getFieldParam(this.name, 'buttonLabel') || null,
url: this.model.get(this.name),
closeButton: true,
backdrop: true,
}, function (view) {
view.render();
this.notify(false);
this.listenToOnce(view, 'close', () => {
this.clearView('dialog');
});
}, this);
}
actionEspoModal() {
let model = this.model;
let url = this.model.get(this.name);
let hashPart = url.split('#')[1];
if (!hashPart) {
return Espo.Ui.error('Error: this is not a valid CRM URL');
}
let parts = hashPart.split('/');
let entityType = parts[0];
if (!entityType) {
return Espo.Ui.error('Error: no entity type found');
}
let recordId = parts[parts.length - 1];
if (!recordId) {
return Espo.Ui.error('Error: no record ID found');
}
this.notify('Loading...');
this.createView('quickView', 'link-button:views/modals/espo-modal', {
scope: entityType,
id: recordId,
removeDisabled: true,
}, function (view) {
view.render();
this.notify(false);
this.listenTo(view, 'after:save', () => {
model.fetch();
});
this.listenToOnce(view, 'close', () => {
this.clearView('quickView');
});
}, this);
}
actionQuickCreate() {
let model = this.model;
let url = this.model.get(this.name);
let hashPart = url.split('#')[1];
if (!hashPart) {
return Espo.Ui.error('Error: this is not a valid CRM URL');
}
let parts = hashPart.split('/');
let entityTypeModal = parts[0];
if (!entityTypeModal) {
return Espo.Ui.error('Error: no entity type found');
}
let viewName;
if (entityTypeModal === 'Email') {
viewName = 'views/modals/compose-email';
} else {
viewName = this.getMetadata().get('clientDefs.' + entityTypeModal + '.modalViews.edit') || 'views/modals/edit';
}
let attributes = {
parentId: model.id,
parentType: model.entityType,
parentName: model.get('name'),
};
if (
entityTypeModal === 'Email' &&
['Contact', 'Lead', 'Account'].includes(model.entityType) &&
model.get('emailAddress')
) {
attributes.to = model.get('emailAddress');
attributes.nameHash = {};
attributes.nameHash[model.get('emailAddress')] = model.get('name');
}
this.notify('Loading...');
this.createView('quickCreate', viewName, {
scope: entityTypeModal,
attributes: attributes,
}, function (view) {
view.render();
this.notify(false);
this.listenTo(view, 'after:save', () => {
model.fetch();
});
this.listenToOnce(view, 'close', () => {
this.clearView('quickCreate');
//model.collection.fetch();
});
}, this);
}
actionCheckWorkFlow() {
let message = this.translate('confirmation', 'messages');
let confirmationText = this.model.getFieldParam(this.name, 'confirmationText');
let confirmation = this.model.getFieldParam(this.name, 'confirmationDialog');
if (confirmationText) {
message = this.getHelper().transformMarkdownText(confirmationText).toString();
}
if (!confirmation) {
this.actionEspoWorkFlow();
return;
}
Espo.Ui.confirm(message, {
confirmText: this.translate('Yes', 'labels'),
cancelText: this.translate('No', 'labels'),
backdrop: true,
isHtml: true,
})
.then(() => this.actionEspoWorkFlow());
}
actionEspoWorkFlow() {
let model = this.model;
let url = model.get(this.name);
let hashPart = url.split('#')[1];
if (!hashPart) {
return Espo.Ui.error('Error: this is not a valid workflow URL');
}
let parts = hashPart.split('/');
let entityType = parts[0];
if (!entityType) {
return Espo.Ui.error('Error: no entity type found');
}
let workflowId = parts[parts.length - 1];
if (entityType !== 'Workflow') {
return Espo.Ui.error(('Error: not a workflow'));
}
Espo.Ajax.getRequest('LinkButton/WorkflowCheck/' + workflowId)
.then(response => {
if (response.isManual === false) {
return Espo.Ui.error(('Error: not a manual or active workflow'));
}
Espo.Ajax.postRequest('WorkflowManual/action/run', {
targetId: model.id,
id: workflowId,
}).then(() => {
model.fetch().then(() => {
Espo.Ui.success(('Done'));
});
});
})
.catch(error => {
console.error(error);
Espo.Ui.error(('Error checking workflow type'));
});
}
actionOpenPopup() {
const popupHeight = this.model.getFieldParam(this.name, 'popupHeight') || 800;
const popupWidth = this.model.getFieldParam(this.name, 'popupWidth') || 600;
window.open(this.model.get(this.name), '_blank', `scrollbars=yes,height=${popupHeight},width=${popupWidth}`);
}
};
});

View File

@@ -0,0 +1,20 @@
define('link-button:views/modals/button-url', ['views/modal'], (Dep) => {
return class extends Dep {
template = 'link-button:modals/button-url'
fitHeight = true
isCollapsable = true
data() {
return {
...super.data(),
url: this.options.url
};
}
setup() {
super.setup();
this.headerText = document.title || this.options.buttonLabel || 'Modal';
}
};
});

View File

@@ -0,0 +1,7 @@
define('link-button:views/modals/espo-modal', ['views/modals/detail'], (Dep) => {
return class extends Dep {
isCollapsable = true
};
});