Rev 1782 | Rev 1786 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1782 | Rev 1785 | ||
---|---|---|---|
Line 42... | Line 42... | ||
42 | .has-error .chosen-container |
42 | .has-error .chosen-container |
43 | { |
43 | { |
44 | border: 1px solid #a94442 !important; |
44 | border: 1px solid #a94442 !important; |
45 | } |
45 | } |
46 | </style> |
46 | </style> |
- | 47 | ||
47 | <script> |
48 | <script> |
48 | 49 | ||
- | 50 | var BacoJS = (function () { |
|
- | 51 | ||
- | 52 | //"private" variables: |
|
- | 53 | var myPrivateVar = "I can be accessed only from within obj."; |
|
- | 54 | ||
- | 55 | //"private" method: |
|
- | 56 | var orderKeys = function(obj, expected) { |
|
- | 57 | var keys = Object.keys(obj).sort(function keyOrder(k1, k2) |
|
- | 58 | { |
|
- | 59 | ||
- | 60 | if (k1 < k2) return -1; |
|
- | 61 | else if (k1 > k2) return +1; |
|
- | 62 | else return 0; |
|
- | 63 | }); |
|
- | 64 | ||
- | 65 | var i, after = {}; |
|
- | 66 | for (i = 0; i < keys.length; i++) { |
|
- | 67 | after[keys[i]] = obj[keys[i]]; |
|
- | 68 | delete obj[keys[i]]; |
|
- | 69 | } |
|
- | 70 | ||
- | 71 | for (i = 0; i < keys.length; i++) { |
|
- | 72 | obj[keys[i]] = after[keys[i]]; |
|
- | 73 | } |
|
- | 74 | return obj; |
|
- | 75 | } |
|
- | 76 | var orderKeysRecur = function orderKeysRecur(obj, expected) { |
|
- | 77 | ||
- | 78 | for (var k in obj) |
|
- | 79 | { |
|
- | 80 | if (typeof obj[k] == "object" && obj[k] !== null) |
|
- | 81 | orderKeysRecur(obj[k]); |
|
- | 82 | else |
|
- | 83 | orderKeys(obj, expected); |
|
- | 84 | } |
|
- | 85 | } |
|
- | 86 | ||
- | 87 | ||
- | 88 | return { |
|
- | 89 | ||
- | 90 | stringifyOrdered: function(jsonObj) |
|
- | 91 | { |
|
- | 92 | return JSON.stringify(orderKeysRecur(jsonObj)); |
|
- | 93 | } |
|
- | 94 | }; |
|
- | 95 | })(); |
|
- | 96 | ||
- | 97 | ||
- | 98 | ||
- | 99 | //console.log(JSON.stringify(orderKeys(example))); |
|
- | 100 | ||
- | 101 | ||
- | 102 | ||
- | 103 | ||
49 | //DECLARACAO DA APLICACAO LOCAL EM ANGULAR |
104 | //DECLARACAO DA APLICACAO LOCAL EM ANGULAR |
50 | var processEditorModule = angular.module('processEditorModule', ['ui.tree']); |
105 | var processEditorModule = angular.module('processEditorModule', ['ui.tree']); |
51 | GLOBAL_BacoAngularAppDependencies.push('processEditorModule'); |
106 | GLOBAL_BacoAngularAppDependencies.push('processEditorModule'); |
52 | 107 | ||
53 | /**Fim de directiva reutilizavel**/ |
108 | /**Fim de directiva reutilizavel**/ |
Line 85... | Line 140... | ||
85 | $scope.$apply(); |
140 | $scope.$apply(); |
86 | } |
141 | } |
87 | ); |
142 | ); |
88 | } |
143 | } |
89 | 144 | ||
- | 145 | /* |
|
- | 146 | * Variaveis e metodos auxiliares |
|
- | 147 | * */ |
|
- | 148 | ||
- | 149 | $scope.allFlowComponents = []; |
|
- | 150 | $scope.autoSavesObjects = []; |
|
- | 151 | $scope.idTemp = -1; |
|
- | 152 | $scope.jsps = []; |
|
- | 153 | ||
90 | $scope.variaveisConstantes = [ |
154 | $scope.variaveisConstantes = [ |
91 | "Formulario", |
155 | "Formulario", |
92 | "Processo", |
156 | "Processo", |
93 | "Tarefa", |
157 | "Tarefa", |
94 | "User Executante", |
158 | "User Executante", |
95 | "User Iniciador Processo", |
159 | "User Iniciador Processo", |
96 | "UserSession" |
160 | "UserSession" |
97 | 161 | ||
98 | 162 | ||
99 | ]; |
163 | ]; |
- | 164 | ||
- | 165 | ||
- | 166 | $scope.initBuilder = function() |
|
- | 167 | { |
|
- | 168 | $scope.initJsps(); |
|
- | 169 | $scope.inicializarSaves(); |
|
100 | $scope.allFlowComponents = []; |
170 | $scope.copiaFlowComponentsDasActorPools(); |
- | 171 | } |
|
- | 172 | ||
- | 173 | ||
101 | $scope.autoSavesObjects = []; |
174 | $scope.initJsps = function() |
- | 175 | { |
|
- | 176 | $scope.callService("loadJspsPlugins",{},function(interfaces) |
|
- | 177 | { |
|
- | 178 | $scope.jsps = interfaces.jsps; |
|
- | 179 | $scope.$apply(); |
|
- | 180 | $(".angularChosen").chosen(); |
|
- | 181 | }); |
|
- | 182 | } |
|
- | 183 | ||
102 | $scope.inicializarSaves = function() |
184 | $scope.inicializarSaves = function() |
103 | { |
185 | { |
104 | $interval($scope.autoSaves,2000); |
186 | $interval($scope.autoSaves,2000); |
105 | } |
187 | } |
106 | 188 | ||
Line 168... | Line 250... | ||
168 | } |
250 | } |
169 | } |
251 | } |
170 | 252 | ||
171 | 253 | ||
172 | 254 | ||
173 | //$scope.files = {"service":"ok","uploadedFiles":[{fileName:"teste"}]}; |
- | |
174 | $scope.idTemp = -1; |
- | |
175 | - | ||
176 | $scope.jsps = []; |
- | |
177 | - | ||
178 | - | ||
179 | $scope.initBuilder = function() |
- | |
180 | { |
- | |
181 | $scope.initJsps(); |
- | |
182 | $scope.inicializarSaves(); |
- | |
183 | $scope.copiaFlowComponentsDasActorPools(); |
- | |
184 | } |
- | |
185 | - | ||
186 | $scope.initJsps = function() |
- | |
187 | { |
- | |
188 | $scope.callService("loadJspsPlugins",{},function(interfaces) |
- | |
189 | { |
- | |
190 | $scope.jsps = interfaces.jsps; |
- | |
191 | $scope.$apply(); |
- | |
192 | $(".angularChosen").chosen(); |
- | |
193 | }); |
- | |
194 | } |
- | |
195 | - | ||
196 | 255 | ||
197 | /** Funções que interagem com directiva reutilizavel **/ |
256 | /** Funções que interagem com directiva reutilizavel **/ |
198 | $scope.save = function() { |
257 | $scope.save = function() { |
199 | $scope.$broadcast('show-errors-check-validity'); |
258 | $scope.$broadcast('show-errors-check-validity'); |
200 | 259 | ||
Line 212... | Line 271... | ||
212 | $scope.user = { name: '', email: '' }; |
271 | $scope.user = { name: '', email: '' }; |
213 | } |
272 | } |
214 | /** Fim de Funções que interagem com directiva reutilizavel **/ |
273 | /** Fim de Funções que interagem com directiva reutilizavel **/ |
215 | 274 | ||
216 | 275 | ||
- | 276 | /* |
|
- | 277 | * Funcoes e variaveis especificas do Processo |
|
- | 278 | * |
|
- | 279 | * */ |
|
- | 280 | ||
217 | $scope.process = <%=process.toJson()%>; |
281 | $scope.process = <%=process.toJson()%>; |
218 | 282 | ||
219 | //todo remove do allComponennts |
283 | $scope.removeActorPool = function(poolId,$index) |
- | 284 | { |
|
- | 285 | var pool = $filter('filter')($scope.process.actorPools, {id: poolId })[0]; |
|
- | 286 | if(pool.flowComponents && pool.flowComponents.length > 0) |
|
- | 287 | { |
|
- | 288 | alert("Não pode apagar esta pool com atividades no seu interior"); |
|
- | 289 | } |
|
- | 290 | else |
|
- | 291 | { |
|
- | 292 | $scope.callSimpleService("removeActorPool",{"poolId":pool.id},function() |
|
- | 293 | { |
|
- | 294 | $scope.process.actorPools.splice($index,1); |
|
- | 295 | }); |
|
- | 296 | } |
|
- | 297 | } |
|
- | 298 | ||
220 | $scope.removeTask = function (poolId,taskId,$index) |
299 | $scope.removeTask = function (poolId,taskId,$index) |
221 | { |
300 | { |
222 | $scope.callSimpleService("removeTask",{"poolId":poolId,"taskId":taskId},function() |
301 | $scope.callSimpleService("removeTask",{"poolId":poolId,"taskId":taskId},function() |
223 | { |
302 | { |
224 | var pool = $filter('filter')($scope.process.actorPools, {id: poolId })[0]; |
303 | var pool = $filter('filter')($scope.process.actorPools, {id: poolId })[0]; |
Line 227... | Line 306... | ||
227 | var index = $scope.allFlowComponents.indexOf(taskInAllFlows ); |
306 | var index = $scope.allFlowComponents.indexOf(taskInAllFlows ); |
228 | $scope.allFlowComponents.splice(index,1); |
307 | $scope.allFlowComponents.splice(index,1); |
229 | }); |
308 | }); |
230 | } |
309 | } |
231 | 310 | ||
232 | $scope.removeConnector = function (taskId,connectorId,poolId,$index) |
311 | $scope.removeConnector = function (connectorId,taskId,poolId,$index) |
233 | { |
312 | { |
234 | $scope.callSimpleService("removeConnector",{"taskId":taskId,"connectorId":connectorId},function() |
313 | $scope.callSimpleService("removeConnector",{"taskId":taskId,"connectorId":connectorId},function() |
235 | { |
314 | { |
236 | var pool = $filter('filter')($scope.process.actorPools, {id: poolId })[0]; |
315 | var pool = $filter('filter')($scope.process.actorPools, {id: poolId })[0]; |
237 | var task = $filter('filter')(pool.flowComponents, {id: taskId })[0]; |
316 | var task = $filter('filter')(pool.flowComponents, {id: taskId })[0]; |
Line 285... | Line 364... | ||
285 | 364 | ||
286 | $scope.addConnector = function(task) |
365 | $scope.addConnector = function(task) |
287 | { |
366 | { |
288 | $scope.callService("addConnector",{"taskId":task.id},function(connector) |
367 | $scope.callService("addConnector",{"taskId":task.id},function(connector) |
289 | { |
368 | { |
- | 369 | //connector = orderKeys(connector); |
|
290 | if(task.flowConnectors == null) |
370 | if(task.flowConnectors == null) |
291 | task.flowConnectors = []; |
371 | task.flowConnectors = []; |
292 | task.flowConnectors.push(connector); |
372 | task.flowConnectors.push(connector); |
293 | $scope.$apply(); |
373 | $scope.$apply(); |
294 | //invokeChosenSelects("#bpmnPools"); |
374 | //invokeChosenSelects("#bpmnPools"); |
295 | }); |
375 | }); |
296 | } |
376 | } |
297 | 377 | ||
- | 378 | $scope.orderConnector = function(connector) |
|
- | 379 | { |
|
- | 380 | orderKeys(connector); |
|
- | 381 | } |
|
- | 382 | ||
- | 383 | $scope.orderKeysRecursive = function(object) |
|
- | 384 | { |
|
- | 385 | console.log(BacoJS.stringifyOrdered(object)); |
|
- | 386 | } |
|
- | 387 | ||
298 | $scope.newRoleForPool = function(item) |
388 | $scope.newRoleForPool = function(item) |
299 | { |
389 | { |
300 | $scope.idTemp--; |
390 | $scope.idTemp--; |
301 | if(item.roles == null) |
391 | if(item.roles == null) |
302 | { |
392 | { |
Line 404... | Line 494... | ||
404 | </style> |
494 | </style> |
405 | <div class="web-messages"></div> |
495 | <div class="web-messages"></div> |
406 | <form style="height: 80vh" class="row" name="processoForm"> |
496 | <form style="height: 80vh" class="row" name="processoForm"> |
407 | 497 | ||
408 | <div style="height: 80vh;overflow-y: auto;" class="col-md-6 form-horizontal"> |
498 | <div style="height: 80vh;overflow-y: auto;" class="col-md-6 form-horizontal"> |
409 | - | ||
- | 499 | <button type="button" ng-click="orderKeysRecursive(process)">Ordena</button> |
|
410 | <div class="panel panel-primary"> |
500 | <div class="panel panel-primary"> |
411 | <div class="panel-heading"> |
501 | <div class="panel-heading"> |
412 | Identificação do Processo |
502 | Identificação do Processo |
413 | </div> |
503 | </div> |
414 | <div class="panel-body"> |
504 | <div class="panel-body"> |
Line 479... | Line 569... | ||
479 | 569 | ||
480 | <div ng-repeat="a in process.actorPools" class="panel-body gutter-0"> |
570 | <div ng-repeat="a in process.actorPools" class="panel-body gutter-0"> |
481 | <div class="panel panel-default"> |
571 | <div class="panel panel-default"> |
482 | <div class="panel-heading clearfix"> |
572 | <div class="panel-heading clearfix"> |
483 | <a class="pull-right btn btn-default btn-xs bpmnTask" data-nodrag ng-click="addTaskActor(a)" style="margin-right: 8px;"> |
573 | <a class="pull-right btn btn-default btn-xs bpmnTask" data-nodrag ng-click="addTaskActor(a)" style="margin-right: 8px;"> |
484 | <span class="bpmn-icon-task"></span></a> |
574 | <span class="glyphicon glyphicon-user"></span><span class="bpmn-icon-task"></span></a> |
485 | <a class="pull-right btn btn-default btn-xs bpmnGateway" data-nodrag ng-click="newFlowComponent('bpmnGateway')" style="margin-right: 8px;"> |
575 | <a class="pull-right btn btn-default btn-xs bpmnGateway" data-nodrag ng-click="newFlowComponent('bpmnGateway')" style="margin-right: 8px;"> |
486 | <span class="bpmn-icon-gateway-none"></span></a> |
576 | <span class="bpmn-icon-gateway-none"></span></a> |
487 | <a class="pull-right btn btn-default btn-xs bpmnEndEvent" data-nodrag ng-click="newFlowComponent('bpmnEndEvent')" style="margin-right: 8px;"> |
577 | <a class="pull-right btn btn-default btn-xs bpmnEndEvent" data-nodrag ng-click="newFlowComponent('bpmnEndEvent')" style="margin-right: 8px;"> |
488 | <span class="bpmn-icon-end-event-none"></span></a> |
578 | <span class="bpmn-icon-end-event-none"></span></a> |
489 | </div> |
579 | </div> |
Line 520... | Line 610... | ||
520 | </div> |
610 | </div> |
521 | 611 | ||
522 | </div> |
612 | </div> |
523 | </div> |
613 | </div> |
524 | <div class="col-md-1"> |
614 | <div class="col-md-1"> |
525 | <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="process.actorPools.splice($index, 1)"><span |
- | |
526 | class="glyphicon glyphicon-remove"></span></a> |
615 | <bacoTags:confirm msg="Tem a certeza que deseja remover a pool {{a.name}}" targetFunction="angular.element($('#processEditorModule')).scope().removeActorPool({{a.id}},{{$index}});angular.element($('#processEditorModule')).scope().$apply();" btnClass="btn btn-danger btn-xs pull-right" icon="glyphicon glyphicon-remove"/> |
- | 616 | ||
527 | </div> |
617 | </div> |
528 | </div> |
618 | </div> |
529 | <div class="panel-body"> |
619 | <div class="panel-body"> |
530 | <div ui-tree="treeOptions" id="page-content-root"> |
620 | <div ui-tree="treeOptions" id="page-content-root"> |
531 | <div class="form-group"> |
621 | <div class="form-group"> |
Line 630... | Line 720... | ||
630 | <div class="panel-body"> |
720 | <div class="panel-body"> |
631 | <table class="tableHeading"> |
721 | <table class="tableHeading"> |
632 | <tr> |
722 | <tr> |
633 | <td><i class="glyphicon glyphicon-resize-vertical" ui-tree-handle></i></td> |
723 | <td><i class="glyphicon glyphicon-resize-vertical" ui-tree-handle></i></td> |
634 | <td> |
724 | <td> |
635 | <span ng-if="node['@class'] == 'pt.estgp.estgweb.domain.BpmnFlowComponentTaskActorImpl'" class="bpmn-icon-task"></span> |
725 | <span ng-if="node['@class'] == 'pt.estgp.estgweb.domain.BpmnFlowComponentTaskActorImpl'"> |
- | 726 | <span class="glyphicon glyphicon-user"></span><span class="bpmn-icon-task"></span> |
|
- | 727 | </span> |
|
636 | <span ng-if="node.type == 'bpmnGateway'" class="bpmn-icon-gateway-none"></span> |
728 | <span ng-if="node.type == 'bpmnGateway'" class="bpmn-icon-gateway-none"></span> |
637 | <span ng-if="node.type == 'bpmnEndEvent'" class="bpmn-icon-end-event-none"></span> |
729 | <span ng-if="node.type == 'bpmnEndEvent'" class="bpmn-icon-end-event-none"></span> |
638 | <label ng-if="node['@class'] == 'pt.estgp.estgweb.domain.BpmnFlowComponentTaskActorImpl'" class="control-label">Tarefa Actor</label> |
730 | <label ng-if="node['@class'] == 'pt.estgp.estgweb.domain.BpmnFlowComponentTaskActorImpl'" class="control-label">Tarefa Actor</label> |
639 | <label ng-if="node.type == 'bpmnGateway'" class="control-label">Gateway</label> |
731 | <label ng-if="node.type == 'bpmnGateway'" class="control-label">Gateway</label> |
640 | <label ng-if="node.type == 'bpmnEndEvent'" class="control-label">EventoFim</label> |
732 | <label ng-if="node.type == 'bpmnEndEvent'" class="control-label">EventoFim</label> |
Line 669... | Line 761... | ||
669 | class="bpmn-icon-connection"></span></a> |
761 | class="bpmn-icon-connection"></span></a> |
670 | 762 | ||
671 | </div> |
763 | </div> |
672 | </div> |
764 | </div> |
673 | 765 | ||
674 | <ol ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node.flowConnectors" ng-class="{hidden: collapsed}"> |
766 | <ol ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node.flowConnectors" ng-class="{hidden: collapsed}" ng-init="task=node"> |
675 | <li ng-repeat="node in node.flowConnectors" ui-tree-node ng-include="'connector_renderer.html'" ng-init="task=node;pool=pool"> |
767 | <li ng-repeat="node in node.flowConnectors" ui-tree-node ng-include="'connector_renderer.html'"> |
676 | </li> |
768 | </li> |
677 | </ol> |
769 | </ol> |
678 | </script> |
770 | </script> |
679 | 771 | ||
680 | 772 | ||
681 | <script type="text/ng-template" id="connector_renderer.html"> |
773 | <script type="text/ng-template" id="connector_renderer.html"> |
682 | <!-- 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--> |
774 | <!-- 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--> |
683 | 775 | ||
684 | - | ||
- | 776 | <button type="button" ng-click="orderConnector(node)">Ordena</button> |
|
685 | <div ng-click="select(node)" class="panel panel-info panel-block tree-node tree-node-content bpmnConnector" data-nodrag ng-class="{dirty: node.dirty==true, selected: node.selected == true,nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved}"> |
777 | <div ng-click="select(node)" class="panel panel-info panel-block tree-node tree-node-content bpmnConnector" data-nodrag ng-class="{dirty: node.dirty==true, selected: node.selected == true,nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved}"> |
686 | <div class="panel-heading clearfix" ng-class="node.type"> |
778 | <div class="panel-heading clearfix" ng-class="node.type"> |
687 | <div class="row gutter-0"> |
779 | <div class="row gutter-0"> |
688 | <table class="tableHeading"> |
780 | <table class="tableHeading"> |
689 | <tr> |
781 | <tr> |
Line 693... | Line 785... | ||
693 | </td> |
785 | </td> |
694 | <td class="headingTitle"> |
786 | <td class="headingTitle"> |
695 | <input ng-keyup="setDirty(node)" data-nodrag class="form-control" ng-model="node.nameConnection"> |
787 | <input ng-keyup="setDirty(node)" data-nodrag class="form-control" ng-model="node.nameConnection"> |
696 | </td> |
788 | </td> |
697 | <td> |
789 | <td> |
698 | <bacoTags:confirm msg="Tem a certeza que deseja remover o connector {{node.name}}" targetFunction="angular.element($('#processEditorModule')).scope().removeConnector({{task.id}},{{node.id}},{{pool.id}}{{$index}});angular.element($('#processEditorModule')).scope().$apply();" btnClass="btn btn-danger btn-xs pull-right" icon="glyphicon glyphicon-remove"/> |
790 | <bacoTags:confirm msg="Tem a certeza que deseja remover o connector {{node.name}}" targetFunction="angular.element($('#processEditorModule')).scope().removeConnector({{node.id}},{{task.id}},{{pool.id}},{{$index}});angular.element($('#processEditorModule')).scope().$apply();" btnClass="btn btn-danger btn-xs pull-right" icon="glyphicon glyphicon-remove"/> |
699 | </td> |
791 | </td> |
700 | </tr> |
792 | </tr> |
701 | </table> |
793 | </table> |
702 | </div> |
794 | </div> |
703 | </div> |
795 | </div> |
Line 705... | Line 797... | ||
705 | <div class="form-group"> |
797 | <div class="form-group"> |
706 | <div class="col-md-2"> |
798 | <div class="col-md-2"> |
707 | <span class="glyphicon glyphicon-arrow-right"></span> Ligação |
799 | <span class="glyphicon glyphicon-arrow-right"></span> Ligação |
708 | </div> |
800 | </div> |
709 | <div class="col-md-10"> |
801 | <div class="col-md-10"> |
710 | <select data-nodrag class="form-control" ng-model="node.flowComponentId" |
802 | <select ng-change="setDirty(node)" data-nodrag class="form-control" ng-model="node.flowComponentId" |
711 | ng-options="f.id as f.title for f in allFlowComponents"> |
803 | ng-options="f.id as f.title for f in allFlowComponents"> |
712 | </select> |
804 | </select> |
713 | </div> |
805 | </div> |
714 | </div> |
806 | </div> |
715 | <div class="form-group"> |
807 | <div class="form-group"> |
716 | <div class="col-md-2"> |
808 | <div class="col-md-2"> |
717 | <span class="glyphicon glyphicon-tag"></span> Chave |
809 | <span class="glyphicon glyphicon-tag"></span> Chave |
718 | </div> |
810 | </div> |
719 | <div class="col-md-10"> |
811 | <div class="col-md-10"> |
720 | <input type="text" data-nodrag class="form-control" ng-model="node.keyValue"> |
812 | <input type="text" ng-keyup="setDirty(node)" data-nodrag class="form-control" ng-model="node.keyValue"> |
721 | </div> |
813 | </div> |
722 | </div> |
814 | </div> |
723 | <div class="form-group"> |
815 | <div class="form-group"> |
724 | <div class="col-md-2"> |
816 | <div class="col-md-2"> |
725 | <span class="glyphicon glyphicon-envelope"></span> Enviar Emails |
817 | <span class="glyphicon glyphicon-envelope"></span> Enviar Emails |
726 | </div> |
818 | </div> |
727 | <div class="col-md-2"> |
819 | <div class="col-md-2"> |
728 | <select class="form-control chosenOff" ng-model="node.sendEmail" ng-options="o.v as o.n for o in [{ n: 'Sim', v: true }, { n: 'Não', v: false }]"> |
820 | <select class="form-control chosenOff" ng-change="setDirty(node)" ng-model="node.sendEmail" ng-options="o.v as o.n for o in [{ n: 'Sim', v: true }, { n: 'Não', v: false }]"> |
729 | </select> |
821 | </select> |
730 | </div> |
822 | </div> |
731 | </div> |
823 | </div> |
732 | <div class="form-group" ng-show="node.sendEmail==true"> |
824 | <div class="form-group" ng-show="node.sendEmail==true"> |
733 | <div class="col-md-2"> |
825 | <div class="col-md-2"> |
734 | Mensagem |
826 | Mensagem |
735 | </div> |
827 | </div> |
736 | <div class="col-md-10"> |
828 | <div class="col-md-10"> |
737 | <textarea rows="3" class="form-control" ng-model="node.msgEmail"></textarea> |
829 | <textarea ng-keyup="setDirty(node)" rows="3" class="form-control" ng-model="node.msgEmail"></textarea> |
738 | </div> |
830 | </div> |
739 | </div> |
831 | </div> |
740 | </div> |
832 | </div> |
741 | </div> |
833 | </div> |
742 | 834 |