Subversion Repositories bacoAlunos

Rev

Rev 1670 | Rev 1781 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1670 jmachado 1
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
2
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
3
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
4
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
5
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
6
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
7
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
8
<%@ page import="pt.estgp.estgweb.web.filters.UserRoleProxy" %>
9
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
10
 
11
 
12
<link rel="stylesheet" href="<%=request.getContextPath()%>/user/pagecontent/jorgeaux/angulartree/bower_components/angular-ui-tree/dist/angular-ui-tree.min.css">
13
<script type="text/javascript" src="<%=request.getContextPath()%>/user/pagecontent/jorgeaux/angulartree/bower_components/angular-ui-tree/dist/angular-ui-tree.js"></script>
14
 
15
 
16
<div class="container-fluid"
17
     id="processEditorModule"
18
     ng-app="processEditorModule"
1775 jmachado 19
     ng-controller="processEditorModuleController"
20
     ng-init="initBuilder()">
1670 jmachado 21
 
22
<style>
23
    .has-error .chosen-container
24
    {
25
        border: 1px solid #a94442 !important;
26
    }
27
</style>
28
<script>
29
 
30
//DECLARACAO DA APLICACAO LOCAL EM ANGULAR
31
var processEditorModule = angular.module('processEditorModule', ['ui.tree']);
32
GLOBAL_BacoAngularAppDependencies.push('processEditorModule');
33
 
34
/**Fim de directiva reutilizavel**/
35
 
36
processEditorModule.controller('processEditorModuleController', function($scope) {
37
    //$scope.files = {"service":"ok","uploadedFiles":[{fileName:"teste"}]};
38
    $scope.idTemp = -1;
39
 
1775 jmachado 40
    $scope.jsps = [];
1670 jmachado 41
 
1775 jmachado 42
    $scope.initBuilder = function()
43
    {
44
        $scope.initJsps();
45
    }
46
 
47
    $scope.initJsps = function()
48
    {
49
        widgetCallWithActionParameters(
50
                "<%=request.getContextPath()%>/admin/bpmn/bpmnController.do",
51
                "loadJspsPlugins",{},"#processEditorModule",
52
                function(interfaces)
53
                {
54
                    $scope.jsps = interfaces.jsps;
55
                    $scope.$apply();
56
                    $(".angularChosen").chosen();
57
                }
58
        );
59
    }
60
 
61
 
1670 jmachado 62
    /** Funções que interagem com directiva reutilizavel **/
63
    $scope.save = function() {
64
        $scope.$broadcast('show-errors-check-validity');
65
 
66
        if (!$scope.processoForm.$invalid) {
67
            alert('User saved');
68
            //$scope.reset();
69
        }
70
        else
71
        {
72
            alert("Existem erros no form");
73
        }
74
    };
75
    $scope.reset = function() {
76
        $scope.$broadcast('show-errors-reset');
77
        $scope.user = { name: '', email: '' };
78
    }
79
    /** Fim de Funções que interagem com directiva reutilizavel **/
80
 
81
 
82
    $scope.process = {
83
        "dbId" : 0,
84
        "description" : "",
85
        "name" : "",
86
        "class" : "BpmnProcessImpl",
87
        "path" : "",
88
        "flowComponents" : [],
89
        "actorPools" : [],
90
        //Para o controlo de atividade docente
91
        "esquemaPontos" : {
92
            "atividades" : []
93
        }
94
    };
95
 
96
    $scope.remove = function (scope) {
97
        scope.remove();
98
    }
99
 
100
    $scope.newAtividadePontuada = function(){
101
        $scope.process.esquemaPontos.atividades.push(
102
                {
103
                    "papelValidador" : "",
104
                    "pontos" : "",
105
                    "tipoAtividadeNome" : "",
106
                    "tipoAtividadeChave" : ""
107
                }
108
        );
109
        setTimeout(function() { invokeChosenSelects("#controloAtividadeDocente"); }, 100);
110
    }
111
 
112
    $scope.newActorPool = function()
113
    {
114
        $scope.idTemp--;
115
        $scope.process.actorPools.push(
116
                {
117
                    "dbId" : $scope.idTemp,
118
                    "name" : "",
119
                    "roles" : []
120
                }
121
        );
122
        setTimeout(function() { invokeChosenSelects("#bpmnPools"); }, 100);
123
    }
124
 
125
    $scope.newRoleForPool = function(item)
126
    {
127
        $scope.idTemp--;
128
        item.roles.push(
129
                {
130
                    "role" : "",
131
                    "trans" : ""
132
                }
133
        );
134
        //O chosen está off para que na primeira interação nao actue sobre
135
        //o option padrão que está sempre presente para preenchimento pelo Angular
136
        setTimeout(function() { invokeChosenSelects("#bpmnPools"); }, 100);
137
    }
138
 
139
 
140
    <%--
141
    $scope.newStepInProcess = function()
142
    {
143
        $scope.idTemp--;
144
        $scope.process.bpmnSteps.push(
145
                {
146
                    "dbId" : $scope.idTemp,
147
                    "name" : "",
148
                    "description" : "",
149
                    "bpmnSteps" : [],
150
                    "flowComponents" : []
151
                }
152
        );
153
    }
154
    $scope.newStepInStep = function(step)
155
    {
156
        $scope.idTemp--;
157
        step.bpmnSteps.push(
158
                {
159
                    "dbId" : $scope.idTemp,
160
                    "name" : "",
161
                    "description" : "",
162
                    "bpmnSteps" : [],
163
                    "flowComponents" : []
164
                }
165
        );
166
    }--%>
167
 
168
    $scope.newFlowComponent = function(type)
169
    {
170
 
171
        $scope.idTemp--;
172
        var i = $scope.process.flowComponents.push(
173
                {
174
                    "dbId" : $scope.idTemp,
175
                    "name" : "",
176
                    "class" : "",
177
                    "type" : type,
178
                    "description" : "",
179
                    "flowConnectors" : [],
180
 
181
                    //Tarefa Actor
182
                    "interface" : "",
183
                    "actorPool" : "",
184
                    //Tarefa GatewayExc
185
                    "question" : "",
186
                    //Evento Fim Mensagens
187
                    "sendEmail" : false,
188
                    "emailMsg" : ""
189
                }
190
        );
191
        //$scope.flowComponents.push(step.flowComponents[i-1]);
192
    }
193
 
194
    $scope.newFlowConnector = function(component)
195
    {
196
        $scope.idTemp--;
197
        component.flowConnectors.push(
198
                {
199
                    "dbId" : $scope.idTemp,
200
                    "key" : "",
201
                    "name" : "",
202
                    "sendEmail" : false,
203
                    "emailMsg" : "",
204
                    "targetComponent" : ""
205
                }
206
        );
207
    }
208
 
209
});
210
/**
211
 Directiva showErrors reutilizavel para validação de forms groups
212
 Basta que um campo no form tenha a classe form-control*
213
 
214
 em cada campo onde quisermos validação é necessario colocar show-errors no container
215
 e dar um nome unico ao input a validar e também a directiva required
216
 
217
 é necessario dar o nome processoForm neste caso para o save atuar sobre a verificacao de validade da form
218
 é necessario definir a class .has-error .chosen-container com #a94442 e !important para se sobrebor nos selects do chosen
219
 */
220
 
221
processEditorModule.directive('showErrors', function($timeout) {
222
    return {
223
        restrict: 'A',
224
        require:  '^form',
225
        link: function (scope, el, attrs, formCtrl)
226
        {
227
            scope.initOk = function(scope, el, attrs, formCtrl) {
228
 
229
                var inputEl   = el[0].querySelector("[name]");
230
                var inputNgEl = angular.element(inputEl);
231
 
232
                var inputName = inputNgEl.attr('name');
233
 
234
                var blurred = false;
235
                // only apply the has-error class after the user leaves the text box
236
                inputNgEl.bind('blur', function() {
237
                    blurred = true;
238
                    el.toggleClass('has-error', formCtrl[inputName].$invalid);
239
                });
240
 
241
                scope.$watch(function() {
242
                            return formCtrl[inputName].$invalid
243
                        },
244
                        function(invalid) {
245
                            // we only want to toggle the has-error class after the blur
246
                            // event or if the control becomes valid
247
                            if (!blurred && invalid) { return }
248
                            el.toggleClass('has-error', invalid);
249
 
250
                        });
251
 
252
 
253
                scope.$on('show-errors-check-validity', function() {
254
                    el.toggleClass('has-error', formCtrl[inputName].$invalid);
255
                });
256
 
257
                scope.$on('show-errors-reset', function() {
258
                    $timeout(function() {
259
                        el.removeClass('has-error');
260
                    }, 0, false);
261
                });
262
            }
263
            scope.initClean = function(scope, el, attrs, formCtrl) {
264
 
265
 
266
                var inputEl   = el[0].querySelector("[name]");
267
                var inputNgEl = angular.element(inputEl);
268
 
269
                //scope.$watch("processoForm", function( newValue, oldValue ) {
270
                if ( inputNgEl.attr('name').indexOf("{")>=0 ) {
271
                    console.log( "Sujo..." + inputNgEl.attr('name'));
272
                    $timeout(function() {
273
                                scope.initClean(scope, el, attrs, formCtrl);
274
                            }
275
                            , 100);
276
                    return;
277
                }
278
                else{
279
                    console.log("LIMPO..." + inputNgEl.attr('name'));
280
                    scope.initOk(scope, el, attrs, formCtrl);
281
                }
282
                //});
283
            };
284
 
285
            scope.initClean(scope, el, attrs, formCtrl);
286
        }
287
    }
288
});
289
 
290
</script>
291
 
1775 jmachado 292
<!--TODO TIRAR DAQUI-->
293
<select ng-model="jsp" class="chosenOff angularChosen" ng-options="o for o in jsps"></select>
294
 
1670 jmachado 295
<form class="row" name="processoForm">
296
    <button type="submit" ng-click="save()">Teste</button>
297
    <div class="col-md-9 form-horizontal">
298
 
299
        <div class="panel panel-primary">
300
            <div class="panel-heading">
301
                Identificação do Processo
302
            </div>
303
            <div class="panel-body">
304
                <div class="form-group">
305
                    <label class="col-md-2 control-label">Classe:</label>
306
                    <div class="col-md-10">
307
                        <select  name="process.class" ng-model="process.class" class="chosenOff form-control">
308
                            <option value="BpmnProcessImpl" ng-selected="{{process.class == 'BpmnProcessImpl'}}">Processo Genérico</option>
309
                            <option value="BpmnProcessControloAtividadeDocenteImpl" ng-selected="{{process.class == 'BpmnProcessControloAtividadeDocenteImpl'}}">Controlo de Atividade Docente</option>
310
                        </select>
311
                    </div>
312
                </div>
313
                <div class="form-group" show-errors>
314
                    <label class="col-md-2 control-label">Nome:</label>
315
                    <div class="col-md-10"><input name="process.name" required class="form-control" ng-model="process.name"></div>
316
                </div>
317
                <div class="form-group" show-errors>
318
                    <label class="col-md-2 control-label">Description:</label>
319
                    <div class="col-md-10"><textarea name="process.description" required rows="5" class="form-control" ng-model="process.description"></textarea></div>
320
                </div>
321
 
322
                <div id="controloAtividadeDocente" ng-if="process.class == 'BpmnProcessControloAtividadeDocenteImpl'">
323
                    <div class="well well-sm">
324
                        Controlo de Atividade Docente
325
                        <a class="pull-right btn btn-success btn-xs" data-nodrag ng-click="newAtividadePontuada()" style="margin-right: 8px;">
326
                            <span class="glyphicon glyphicon-plus"></span></a>
327
                    </div>
328
                    <table class="table">
329
                        <thead>
330
                        <tr>
331
                            <th>Chave ID</th>
332
                            <th style="width: 50%">Papel Validador</th>
333
                            <th>Pontos</th>
334
                            <th>Tipo de Atividade</th>
335
                        </tr>
336
                        </thead>
337
                        <tbody>
338
                        <tr ng-repeat="a in process.esquemaPontos.atividades">
339
                            <td show-errors><input name="process.esquemaPontos.atividades[{{$index}}].tipoAtividadeChave" required type="text" class="form-control" ng-model="a.tipoAtividadeChave"></td>
340
                            <td show-errors>
341
                                <select name="process.esquemaPontos.atividades[{{$index}}].papelValidador" required class="chosenOff form-control" ng-model="a.papelValidador" class="form-control">
342
                                    <%
343
                                        for(String role: UserRoleProxy.getUserRoles())
344
                                        {
345
                                            request.setAttribute("role",role);
346
                                    %>
347
                                    <option value="${role}" ng-selected="{{a.papelValidador == '${role}'}}"><bean:message key="user.role.${role}"/></option>
348
                                    <%
349
                                        }
350
                                    %>
351
                                </select>
352
                            </td>
353
                            <td show-errors><input name="process.esquemaPontos.atividades[{{$index}}].pontos" required type="text" class="form-control" ng-model="a.pontos"></td>
354
                            <td show-errors><input name="process.esquemaPontos.atividades[{{$index}}].tipoAtividadeNome" required type="text" class="form-control" ng-model="a.tipoAtividadeNome"></td>
355
                        </tr>
356
                        </tbody>
357
                    </table>
358
                </div>
359
            </div>
360
        </div>
361
 
362
        <div class="panel panel-info panel-block" id="bpmnPools">
363
            <div class="panel-heading clearfix">
364
                <span class="glyphicon glyphicon-users"></span>
365
                Pools de Atores
366
                <button class="btn btn-xs btn-success pull-right" type="button" ng-click="newActorPool()"><span class="glyphicon glyphicon-plus"></span></button>
367
            </div>
368
 
369
            <div ng-repeat="a in process.actorPools" class="panel-body gutter-0">
370
                <div class="col-md-1">
371
                    <span class="glyphicon glyphicon-user"></span>
372
                </div>
373
                <div class="col-md-5">
374
                    <input placeholder="Coloque aqui o nome do ator" class="form-control" ng-model="a.name">
375
                </div>
376
                <div class="col-md-1">
377
                    <button class="btn btn-xs btn-success pull-right" type="button" ng-click="newRoleForPool(a)"><span class="glyphicon glyphicon-plus"></span>Papel</button>
378
                </div>
379
                <div class="col-md-4">
380
                    <label ng-if="a.roles.length == 0">Não obrigatórios</label>
381
                    <div ng-repeat="r in a.roles" class="gutter-0">
382
                        <div class="col-md-2">
383
                            <a class="btn btn-danger btn-xs" data-nodrag ng-click="a.roles.splice($index, 1)"><span
384
                                    class="glyphicon glyphicon-remove"></span></a>
385
                        </div>
386
                        <div class="col-md-10">
387
 
388
                            <select class="chosenOff" ng-model="r.role" class="form-control">
389
                                <%
390
                                    for(String role: UserRoleProxy.getUserRoles())
391
                                    {
392
                                        request.setAttribute("role",role);
393
                                %>
394
                                <option value="${role}" ng-selected="{{r.role == '${role}'}}"><bean:message key="user.role.${role}"/></option>
395
                                <%
396
                                    }
397
                                %>
398
                            </select>
399
                        </div>
400
 
401
                    </div>
402
                </div>
403
                <div class="col-md-1">
404
                    <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="process.actorPools.splice($index, 1)"><span
405
                            class="glyphicon glyphicon-remove"></span></a>
406
                </div>
407
            </div>
408
 
409
        </div>
410
 
411
 
412
 
413
 
414
        <div class="panel panel-default">
415
            <div class="panel-heading clearfix">
416
                <a class="pull-right btn btn-default btn-xs bpmnTask" data-nodrag ng-click="newFlowComponent('bpmnTask')" style="margin-right: 8px;">
417
                    <span class="bpmn-icon-task"></span></a>
418
                <a class="pull-right btn btn-default btn-xs bpmnGateway" data-nodrag ng-click="newFlowComponent('bpmnGateway')" style="margin-right: 8px;">
419
                    <span class="bpmn-icon-gateway-none"></span></a>
420
                <a class="pull-right btn btn-default btn-xs bpmnEndEvent" data-nodrag ng-click="newFlowComponent('bpmnEndEvent')" style="margin-right: 8px;">
421
                    <span class="bpmn-icon-end-event-none"></span></a>
422
            </div>
423
            <div class="panel-body">
424
                <div ui-tree="treeOptions" id="page-content-root">
425
                    <ol ui-tree-nodes ng-model="process.flowComponents">
426
                        <li ng-repeat="node in process.flowComponents" ui-tree-node ng-include="'flowComponent_renderer.html'"></li>
427
                    </ol>
428
                </div>
429
            </div>
430
        </div>
431
    </div>
432
 
433
    <div style="background-color: #fff2c3" class="col-md-3">
434
        <h2>Debug</h2>
435
        <pre class="code">{{ process | json }}</pre>
1775 jmachado 436
 
1670 jmachado 437
    </div>
438
</form>
439
 
440
 
441
 
442
 
443
<%--
444
<script type="text/ng-template" id="childs_renderer.html">
445
    <!-- Coloquei aqui o predicado no NGClass que quando existe uma property nodrop = true o angular coloca nodrop na class o que faz o elemento ficar a vermelho e nao permite drop-->
446
 
447
    <div class="panel panel-default panel-block bpmnFase" ui-tree-handle data-nodrag class="tree-node tree-node-content" ng-class="{nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved}">
448
        <div class="panel-heading clearfix">
449
            <div class="row gutter-0">
450
                <div class="col-md-1">
451
                    <span class="icon icon-stack pull-left col-md-2"></span> Fase
452
                </div>
453
                <div class="col-md-10">
454
                    <input data-nodrag class="form-control" ng-model="node.name">
455
                </div>
456
                <div class="col-md-1">
457
                    <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="remove(this)"><span
458
                            class="glyphicon glyphicon-remove"></span></a>
459
                </div>
460
            </div>
461
        </div>
462
        <div class="panel-body">
463
 
464
        </div>
465
        <div class="panel-footer clearfix">
466
            <a class="btn btn-success btn-xs" ng-if="node.bpmnSteps && node.bpmnSteps.length > 0" data-nodrag ng-click="toggle(this)">
467
                <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>
468
            </a>
469
 
470
            <span ng-if="node.nodrop">No drop</span> <span ng-if="node.nodrag">No drag</span>
471
 
472
            <a class="pull-left btn btn-primary btn-xs" data-nodrag ng-click="newStepInStep(node)" style="margin-right: 8px;"><span
473
                    class="glyphicon glyphicon-plus"></span>Fase</a>
474
            <a class="pull-right btn btn-default btn-xs bpmnTask" data-nodrag ng-click="newFlowComponent(node,'bpmnTask')" style="margin-right: 8px;">
475
                <span class="bpmn-icon-task"></span></a>
476
            <a class="pull-right btn btn-default btn-xs bpmnGateway" data-nodrag ng-click="newFlowComponent(node,'bpmnGateway')" style="margin-right: 8px;">
477
                <span class="bpmn-icon-gateway-none"></span></a>
478
            <a class="pull-right btn btn-default btn-xs bpmnEndEvent" data-nodrag ng-click="newFlowComponent(node,'bpmnEndEvent')" style="margin-right: 8px;">
479
                <span class="bpmn-icon-end-event-none"></span></a>
480
        </div>
481
    </div>
482
 
483
 
484
    <ol ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node.flowComponents" ng-class="{hidden: collapsed}">
485
        <li ng-repeat="node in node.flowComponents" ui-tree-node ng-include="'flowComponent_renderer.html'">
486
        </li>
487
    </ol>
488
    <ol ui-tree-nodes="" ng-model="node.childs" ng-class="{hidden: collapsed}">
489
        <li ng-repeat="node in node.bpmnSteps" ui-tree-node ng-include="'childs_renderer.html'">
490
        </li>
491
    </ol>
492
</script>
493
--%>
494
 
495
 
496
<script type="text/ng-template" id="flowComponent_renderer.html">
497
    <!-- Coloquei aqui o predicado no NGClass que quando existe uma property nodrop = true o angular coloca nodrop na class o que faz o elemento ficar a vermelho e nao permite drop-->
498
    <div class="panel panel-default panel-block tree-node tree-node-content nodrop" ng-class="node.type" ng-class="{nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved}">
499
        <div class="panel-heading clearfix" ng-class="node.type">
500
            <div class="row gutter-0">
501
                <div class="col-md-1">
502
                    <i class="glyphicon glyphicon-resize-vertical" ui-tree-handle></i>
503
                </div>
504
                <div class="col-md-2">
505
                    <span ng-if="node.type == 'bpmnTask'" class="bpmn-icon-task"></span>
506
                    <span ng-if="node.type == 'bpmnGateway'" class="bpmn-icon-gateway-none"></span>
507
                    <span ng-if="node.type == 'bpmnEndEvent'" class="bpmn-icon-end-event-none"></span>
508
 
509
                    <label ng-if="node.type == 'bpmnTask'" class="control-label">Tarefa</label>
510
                    <label ng-if="node.type == 'bpmnGateway'" class="control-label">Gateway</label>
511
                    <label ng-if="node.type == 'bpmnEndEvent'" class="control-label">EventoFim</label>
512
                </div>
513
                <div class="col-md-8 no-drag" data-nodrag>
514
                    <input data-nodrag class="form-control" ng-model="node.name">
515
                </div>
516
                <div class="col-md-1">
517
                    <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="remove(this)"><span
518
                            class="glyphicon glyphicon-remove"></span></a>
519
                </div>
520
            </div>
521
        </div>
522
        <div class="panel-body">
523
 
524
            <div class="form-group">
525
                <div class="col-md-2">
526
                    <span class="glyphicon glyphicon-user"></span> Actor Pool
527
                </div>
528
                <div class="col-md-10">
529
                    <select class="chosenOff form-control" ng-model="node.actorPool" class="form-control">
530
                        <option ng-repeat="a in process.actorPools" value="{{a.dbId}}" ng-selected="{{a.dbId == node.actorPool}}">{{a.name}}</option>
531
                    </select>
532
                </div>
533
            </div>
534
        </div>
535
        <div class="panel-footer clearfix">
536
            <a class="btn btn-success btn-xs" ng-if="node.flowConnectors && node.flowConnectors.length > 0" data-nodrag ng-click="toggle(this)">
537
                <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>
538
            </a>
539
 
540
            <a class="pull-right btn btn-default btn-xs" data-nodrag ng-click="newFlowConnector(node)" style="margin-right: 8px;"><span
541
                    class="bpmn-icon-connection"></span></a>
542
 
543
        </div>
544
    </div>
545
 
546
    <ol ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node.flowConnectors" ng-class="{hidden: collapsed}">
547
        <li ng-repeat="node in node.flowConnectors" ui-tree-node ng-include="'connector_renderer.html'">
548
        </li>
549
    </ol>
550
</script>
551
 
552
 
553
<script type="text/ng-template" id="connector_renderer.html">
554
    <!-- Coloquei aqui o predicado no NGClass que quando existe uma property nodrop = true o angular coloca nodrop na class o que faz o elemento ficar a vermelho e nao permite drop-->
555
 
556
 
557
    <div class="panel panel-default panel-block tree-node tree-node-content bpmnConnector" ui-tree-handle data-nodrag ng-class="{nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved}">
558
        <div class="panel-heading clearfix" ng-class="node.type">
559
            <div class="row gutter-0">
560
                <div class="col-md-2">
561
                    <span class="bpmn-icon-connection control-label"></span> Conector
562
                </div>
563
                <div class="col-md-9">
564
                    <input data-nodrag class="form-control" ng-model="node.name">
565
                </div>
566
                <div class="col-md-1">
567
                    <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="remove(this)"><span
568
                            class="glyphicon glyphicon-remove"></span></a>
569
                </div>
570
            </div>
571
        </div>
572
        <div class="panel-body">
573
            <div class="form-group">
574
                <div class="col-md-2">
575
                    <span class="glyphicon glyphicon-arrow-right"></span> Ligação
576
                </div>
577
                <div class="col-md-10">
578
                    <select data-nodrag class="form-control" ng-model="node.targetComponent">
579
                        <option ng-repeat="f in process.flowComponents" value="{{f.dbId}}">{{f.name}}</option>
580
                    </select>
581
                </div>
582
            </div>
583
            <div class="form-group">
584
                <div class="col-md-2">
585
                    <span class="glyphicon glyphicon-tag"></span> Chave
586
                </div>
587
                <div class="col-md-10">
588
                    <input type="text" data-nodrag class="form-control" ng-model="node.key">
589
                </div>
590
            </div>
591
            <div class="form-group">
592
                <div class="col-md-2">
593
                    <span class="glyphicon glyphicon-envelope"></span> Enviar Emails
594
                </div>
595
                <div class="col-md-2">
596
                    <select data-nodrag class="form-control" ng-model="node.sendEmail">
597
                        <option value="true" ng-selected="{{node.sendEmail == true}}">Sim</option>
598
                        <option value="false" ng-selected="{{node.sendEmail == false}}">Não</option>
599
                    </select>
600
                </div>
601
            </div>
602
            <div class="form-group" ng-show="node.sendEmail">
603
                <div class="col-md-2">
604
                    Mensagem
605
                </div>
606
                <div class="col-md-10">
607
                    <textarea rows="3" class="form-control" ng-model="node.emailMsg"></textarea>
608
                </div>
609
            </div>
610
        </div>
611
    </div>
612
 
613
 
614
 
615
</script>
616
 
617
 
618
 
619
<!--Estilos CSS do Exemplo do Overview Nem olhei para eles copy paste e pronto-->
620
<style>
621
 
622
    .panel-block .panel-heading, .panel-block .panel-footer
623
    {
624
        padding:5px;
625
    }
626
 
627
    /* remove */
628
    .gutter-0.row {
629
        margin-right: -0px !important;
630
        margin-left: -0px !important;
631
    }
632
    .gutter-0 > [class*="col-"]{
633
        padding-right: 0px !important;
634
        padding-left: 0px !important;
635
    }
636
 
637
    /* customize */
638
    .gutter-6.row {
639
        margin-right: -3px !important;
640
        margin-left: -3px !important;
641
    }
642
    .gutter-6 > [class*="col-"] {
643
        padding-right: 3px !important;
644
        padding-left: 3px !important;
645
    }
646
 
647
 
648
 
649
 
650
    .bpmnTask { background-color: #fff2c3 !important;border-color: #c69763 !important }
651
    .bpmnStartEvent { background-color: #EEF1CA !important; border-color: #A5CF84 !important }
652
    .bpmnMiddleEvent { background-color: #A7BBCF !important ;border-color: #4F87B0 !important}
653
    .bpmnEndEvent { background-color: #FDE6E2 !important; border-color: #8C121D; !important }
654
    .bpmnGateway { background-color: #ffcf53 !important; border-color: #ffa42a !important}
655
    .bpmnFase { background-color: #ECECF4 !important; border-color: #276E9F !important}
656
    .bpmnConnector { background-color: white !important; ;border-color: #b7bdbb !important }
657
 
658
    .btn {
659
        margin-right: 8px;
660
    }
661
 
662
 
663
    .angular-ui-tree-handle {
664
        background: #f8faff;
665
        border: 1px solid #dae2ea;
666
        color: #7c9eb2;
667
        padding: 0;
668
    }
669
 
670
    .angular-ui-tree-handle:hover {
671
        color: #438eb9;
672
        background: #f4f6f7;
673
        border-color: #dce2e8;
674
    }
675
 
676
    .angular-ui-tree-placeholder {
677
        background: #f0f9ff;
678
        border: 2px dashed #bed2db;
679
        -webkit-box-sizing: border-box;
680
        -moz-box-sizing: border-box;
681
        box-sizing: border-box;
682
    }
683
 
684
    tr.angular-ui-tree-empty {
685
        height:100px
686
    }
687
 
688
    .group-title {
689
        background-color: #687074 !important;
690
        color: #FFF !important;
691
    }
692
 
693
 
694
    /* --- Tree --- */
695
    .tree-node {
696
        border: 1px solid #dae2ea;
697
        background: #f8faff;
698
        color: #7c9eb2;
699
    }
700
 
701
    .nodrop {
702
        background-color: #f2dede;
703
    }
704
 
705
 
706
    .nodrag {
707
        background-color: #f2eec1;
708
    }
709
 
710
    .tree-node-content {
711
        margin: 10px;
712
    }
713
    .tree-handle {
714
        /*padding: 10px;*/
715
        background: #428bca;
716
        color: #FFF;
717
        margin-right: 15px;
718
    }
719
 
720
    .angular-ui-tree-handle:hover {
721
    }
722
 
723
    .angular-ui-tree-placeholder {
724
        background: #f0f9ff;
725
        border: 2px dashed #bed2db;
726
        -webkit-box-sizing: border-box;
727
        -moz-box-sizing: border-box;
728
        box-sizing: border-box;
729
    }
730
 
731
    /*Estilo adicionado por mim para os movidos*/
732
    .moved
733
    {
734
        border: 2px solid blue !important;
735
    }
736
</style>
737
</div>
738