├── src ├── test │ ├── resources │ │ ├── processes │ │ │ ├── README.md │ │ │ └── SimpleProcess.bpmn20.xml │ │ └── application.yml │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ └── workflow │ │ └── flowable │ │ └── FlowableModelTest.java └── main │ ├── resources │ ├── static │ │ └── workflow │ │ │ ├── editor-app │ │ │ ├── libs │ │ │ │ ├── es5-shim-15.3.4.5 │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── tests │ │ │ │ │ │ ├── helpers │ │ │ │ │ │ │ ├── h.js │ │ │ │ │ │ │ ├── h-matchers.js │ │ │ │ │ │ │ └── h-kill.js │ │ │ │ │ │ ├── lib │ │ │ │ │ │ │ ├── jasmine_favicon.png │ │ │ │ │ │ │ └── jasmine.css │ │ │ │ │ │ ├── spec │ │ │ │ │ │ │ └── s-number.js │ │ │ │ │ │ ├── index.min.html │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── .bower.json │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── package.json │ │ │ │ │ ├── CONTRIBUTORS.md │ │ │ │ │ ├── CHANGES │ │ │ │ │ └── es5-sham.map │ │ │ │ ├── bootstrap_3.1.1 │ │ │ │ │ └── fonts │ │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ │ └── glyphicons-halflings-regular.woff │ │ │ │ ├── angular-translate-storage-cookie │ │ │ │ │ ├── angular-translate-storage-cookie.min.js │ │ │ │ │ ├── angular-translate-storage-cookie.js │ │ │ │ │ └── .bower.json │ │ │ │ ├── angular-translate-loader-static-files │ │ │ │ │ ├── angular-translate-loader-static-files.min.js │ │ │ │ │ ├── .bower.json │ │ │ │ │ └── angular-translate-loader-static-files.js │ │ │ │ ├── angular-cookies_1.2.13 │ │ │ │ │ ├── angular-cookies.min.js │ │ │ │ │ └── angular-cookies.min.js.map │ │ │ │ ├── json3_3.2.6 │ │ │ │ │ └── LICENSE │ │ │ │ ├── jquery.autogrow-textarea.js │ │ │ │ ├── angular-resource_1.2.13 │ │ │ │ │ └── angular-resource.min.js │ │ │ │ ├── mousetrap-1.4.5.min.js │ │ │ │ ├── path_parser.js │ │ │ │ ├── angular-route_1.2.13 │ │ │ │ │ └── angular-route.min.js │ │ │ │ ├── angular-sanitize_1.2.13 │ │ │ │ │ └── angular-sanitize.min.js │ │ │ │ └── angular-dragdrop.min-1.0.3.js │ │ │ ├── images │ │ │ │ ├── logo.png │ │ │ │ ├── delete.png │ │ │ │ ├── loading.gif │ │ │ │ ├── logo-2x.png │ │ │ │ ├── wrench.png │ │ │ │ ├── bpmn-error.png │ │ │ │ ├── bpmn-warning.png │ │ │ │ ├── datadefinition.png │ │ │ │ ├── nw-handle-dark.gif │ │ │ │ ├── se-handle-dark.gif │ │ │ │ └── shapemenu_highlight.png │ │ │ ├── popups │ │ │ │ ├── icon-template.html │ │ │ │ ├── select-shape.html │ │ │ │ ├── unsaved-changes.html │ │ │ │ └── save-model.html │ │ │ ├── fonts │ │ │ │ ├── activiti-admin-webfont.eot │ │ │ │ ├── activiti-admin-webfont.ttf │ │ │ │ ├── activiti-admin-webfont.woff │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ └── glyphicons-halflings-regular.woff │ │ │ ├── stencilsets │ │ │ │ └── bpmn2.0 │ │ │ │ │ └── icons │ │ │ │ │ ├── diagram.png │ │ │ │ │ ├── activity │ │ │ │ │ ├── task.png │ │ │ │ │ ├── subprocess.png │ │ │ │ │ ├── list │ │ │ │ │ │ ├── type.mule.png │ │ │ │ │ │ ├── type.send.png │ │ │ │ │ │ ├── type.user.png │ │ │ │ │ │ ├── type.camel.png │ │ │ │ │ │ ├── type.manual.png │ │ │ │ │ │ ├── type.script.png │ │ │ │ │ │ ├── type.shell.png │ │ │ │ │ │ ├── type.receive.png │ │ │ │ │ │ ├── type.service.png │ │ │ │ │ │ └── type.business.rule.png │ │ │ │ │ ├── event.subprocess.png │ │ │ │ │ ├── expanded.subprocess.png │ │ │ │ │ └── event.subprocess.collapsed.png │ │ │ │ │ ├── endevent │ │ │ │ │ ├── none.png │ │ │ │ │ ├── cancel.png │ │ │ │ │ ├── error.png │ │ │ │ │ └── terminate.png │ │ │ │ │ ├── swimlane │ │ │ │ │ ├── lane.png │ │ │ │ │ └── pool.png │ │ │ │ │ ├── throwing │ │ │ │ │ ├── none.png │ │ │ │ │ └── signal.png │ │ │ │ │ ├── catching │ │ │ │ │ ├── cancel.png │ │ │ │ │ ├── error.png │ │ │ │ │ ├── signal.png │ │ │ │ │ ├── timer.png │ │ │ │ │ ├── message.png │ │ │ │ │ └── compensation.png │ │ │ │ │ ├── startevent │ │ │ │ │ ├── none.png │ │ │ │ │ ├── error.png │ │ │ │ │ ├── message.png │ │ │ │ │ ├── signal.png │ │ │ │ │ └── timer.png │ │ │ │ │ ├── gateway │ │ │ │ │ ├── eventbased.png │ │ │ │ │ ├── inclusive.png │ │ │ │ │ ├── parallel.png │ │ │ │ │ └── exclusive.databased.png │ │ │ │ │ ├── connector │ │ │ │ │ ├── messageflow.png │ │ │ │ │ ├── sequenceflow.png │ │ │ │ │ ├── association.undirected.png │ │ │ │ │ └── association.unidirectional.png │ │ │ │ │ ├── dataobject │ │ │ │ │ └── data.store.png │ │ │ │ │ └── artifact │ │ │ │ │ └── text.annotation.png │ │ │ ├── configuration │ │ │ │ ├── properties │ │ │ │ │ ├── boolean-property-template.html │ │ │ │ │ ├── fields-write-template.html │ │ │ │ │ ├── assignment-write-template.html │ │ │ │ │ ├── in-parameters-write-template.html │ │ │ │ │ ├── out-parameters-write-template.html │ │ │ │ │ ├── task-listeners-write-template.html │ │ │ │ │ ├── text-property-write-template.html │ │ │ │ │ ├── event-listeners-write-template.html │ │ │ │ │ ├── form-properties-write-template.html │ │ │ │ │ ├── execution-listeners-write-template.html │ │ │ │ │ ├── fields-display-template.html │ │ │ │ │ ├── message-definitions-write-template.html │ │ │ │ │ ├── sequenceflow-order-write-template.html │ │ │ │ │ ├── signal-definitions-write-template.html │ │ │ │ │ ├── condition-expression-write-template.html │ │ │ │ │ ├── sequenceflow-order-display-template.html │ │ │ │ │ ├── condition-expression-display-template.html │ │ │ │ │ ├── subprocess-reference-write-template.html │ │ │ │ │ ├── subprocess-reference-display-template.html │ │ │ │ │ ├── in-parameters-display-template.html │ │ │ │ │ ├── message-definitions-display-template.html │ │ │ │ │ ├── out-parameters-display-template.html │ │ │ │ │ ├── signal-definitions-display-template.html │ │ │ │ │ ├── task-listeners-display-template.html │ │ │ │ │ ├── event-listeners-display-template.html │ │ │ │ │ ├── form-properties-display-template.html │ │ │ │ │ ├── execution-listeners-display-template.html │ │ │ │ │ ├── default-value-display-template.html │ │ │ │ │ ├── multiinstance-property-write-template.html │ │ │ │ │ ├── string-property-write-mode-template.html │ │ │ │ │ ├── signal-property-write-template.html │ │ │ │ │ ├── message-property-write-template.html │ │ │ │ │ ├── text-popup.html │ │ │ │ │ ├── assignment-display-template.html │ │ │ │ │ ├── feedback-popup.html │ │ │ │ │ ├── condition-expression-popup.html │ │ │ │ │ ├── sequenceflow-order-popup.html │ │ │ │ │ ├── subprocess-reference-popup.html │ │ │ │ │ ├── message-definitions-popup.html │ │ │ │ │ ├── assignment-popup.html │ │ │ │ │ ├── signal-definitions-popup.html │ │ │ │ │ ├── in-parameters-popup.html │ │ │ │ │ ├── out-parameters-popup.html │ │ │ │ │ └── fields-popup.html │ │ │ │ ├── toolbar-custom-actions.js │ │ │ │ ├── properties-custom-controllers.js │ │ │ │ ├── properties-multiinstance-controller.js │ │ │ │ ├── url-config.js │ │ │ │ ├── properties-signal-scope-controller.js │ │ │ │ ├── properties-message-scope-controller.js │ │ │ │ ├── properties-condition-expression-controller.js │ │ │ │ ├── properties-default-controllers.js │ │ │ │ ├── properties-assignment-controller.js │ │ │ │ └── properties-sequenceflow-order-controller.js │ │ │ ├── partials │ │ │ │ ├── root-stencil-item-template.html │ │ │ │ └── stencil-item-template.html │ │ │ ├── app-cfg.js │ │ │ ├── editor-config.js │ │ │ ├── header-controller.js │ │ │ ├── editor-controller.js │ │ │ ├── plugins.xml │ │ │ ├── editor │ │ │ │ └── css │ │ │ │ │ └── editor.css │ │ │ └── eventbus.js │ │ │ └── diagram-viewer │ │ │ ├── images │ │ │ ├── bg.png │ │ │ ├── checker-bg.png │ │ │ ├── breadcrumbs.png │ │ │ └── deployer │ │ │ │ ├── send.png │ │ │ │ ├── user.png │ │ │ │ ├── manual.png │ │ │ │ ├── script.png │ │ │ │ ├── timer.png │ │ │ │ ├── receive.png │ │ │ │ ├── service.png │ │ │ │ ├── error_catch.png │ │ │ │ ├── error_throw.png │ │ │ │ ├── business_rule.png │ │ │ │ ├── message_catch.png │ │ │ │ ├── message_throw.png │ │ │ │ ├── signal_catch.png │ │ │ │ ├── signal_throw.png │ │ │ │ └── blue │ │ │ │ └── message_catch.png │ │ │ ├── js │ │ │ ├── Polyline.js │ │ │ ├── jstools.js │ │ │ ├── ActivitiRest.js │ │ │ ├── ActivityImpl.js │ │ │ └── jquery │ │ │ │ ├── jquery.progressbar.js │ │ │ │ └── jquery.asyncqueue.js │ │ │ ├── style.css │ │ │ └── index.html │ └── META-INF │ │ └── context.xml │ └── java │ └── org │ └── hswebframework │ └── web │ └── workflow │ └── flowable │ └── modeler │ └── FlowableModelController.java ├── README.md └── .gitignore /src/test/resources/processes/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/es5-shim-15.3.4.5/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/es5-shim-15.3.4.5/tests/helpers/h.js: -------------------------------------------------------------------------------- 1 | function implement() { 2 | throw 'Not implemented'; 3 | } -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/images/logo.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/bg.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/js/Polyline.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/js/Polyline.js -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/images/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/images/delete.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/images/loading.gif -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/images/logo-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/images/logo-2x.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/images/wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/images/wrench.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/images/bpmn-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/images/bpmn-error.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/images/bpmn-warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/images/bpmn-warning.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/popups/icon-template.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
-------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/checker-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/checker-bg.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/images/datadefinition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/images/datadefinition.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/images/nw-handle-dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/images/nw-handle-dark.gif -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/images/se-handle-dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/images/se-handle-dark.gif -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/breadcrumbs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/breadcrumbs.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/send.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/user.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/manual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/manual.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/script.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/timer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/timer.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/images/shapemenu_highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/images/shapemenu_highlight.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/receive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/receive.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/service.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/fonts/activiti-admin-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/fonts/activiti-admin-webfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/fonts/activiti-admin-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/fonts/activiti-admin-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/fonts/activiti-admin-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/fonts/activiti-admin-webfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/error_catch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/error_catch.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/error_throw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/error_throw.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/business_rule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/business_rule.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/message_catch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/message_catch.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/message_throw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/message_throw.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/signal_catch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/signal_catch.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/signal_throw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/signal_throw.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/diagram.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/images/deployer/blue/message_catch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/diagram-viewer/images/deployer/blue/message_catch.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/task.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/endevent/none.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/endevent/none.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/swimlane/lane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/swimlane/lane.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/swimlane/pool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/swimlane/pool.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/throwing/none.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/throwing/none.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/catching/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/catching/cancel.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/catching/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/catching/error.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/catching/signal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/catching/signal.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/catching/timer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/catching/timer.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/endevent/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/endevent/cancel.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/endevent/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/endevent/error.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/startevent/none.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/startevent/none.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/throwing/signal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/throwing/signal.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/boolean-property-template.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
-------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/catching/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/catching/message.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/endevent/terminate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/endevent/terminate.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/gateway/eventbased.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/gateway/eventbased.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/gateway/inclusive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/gateway/inclusive.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/gateway/parallel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/gateway/parallel.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/startevent/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/startevent/error.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/startevent/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/startevent/message.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/startevent/signal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/startevent/signal.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/startevent/timer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/startevent/timer.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/fields-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/subprocess.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/subprocess.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine_favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine_favicon.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.mule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.mule.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.send.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.user.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/catching/compensation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/catching/compensation.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/connector/messageflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/connector/messageflow.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/connector/sequenceflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/connector/sequenceflow.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/dataobject/data.store.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/dataobject/data.store.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/assignment-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.camel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.camel.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.manual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.manual.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.script.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.shell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.shell.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/artifact/text.annotation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/artifact/text.annotation.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/in-parameters-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/out-parameters-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/task-listeners-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/text-property-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/expanded.subprocess.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/expanded.subprocess.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.receive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.receive.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.service.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/gateway/exclusive.databased.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/gateway/exclusive.databased.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/event-listeners-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/form-properties-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/execution-listeners-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/fields-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.FIELDS' | translate:property.value.fields}} 3 | {{'PROPERTY.FIELDS.EMPTY' | translate}} -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/message-definitions-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/sequenceflow-order-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/signal-definitions-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.business.rule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.business.rule.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/connector/association.undirected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/connector/association.undirected.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/condition-expression-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/sequenceflow-order-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | PROPERTY.SEQUENCEFLOW.ORDER.NOT.EMPTY 3 | PROPERTY.SEQUENCEFLOW.ORDER.EMPTY -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.collapsed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.collapsed.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/condition-expression-display-template.html: -------------------------------------------------------------------------------- 1 | {{property.value|limitTo:20}} 2 | {{'PROPERTY.SEQUENCEFLOW.CONDITION.NO-CONDITION-DISPLAY' | translate}} -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/subprocess-reference-write-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/connector/association.unidirectional.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hs-web/hsweb-flowable-modeler/HEAD/src/main/resources/static/workflow/editor-app/stencilsets/bpmn2.0/icons/connector/association.unidirectional.png -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/subprocess-reference-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{property.value.name}} 3 | PROPERTY.SUBPROCESSREFERENCE.EMPTY 4 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/in-parameters-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.INPARAMETERS.VALUE' | translate:property.value.inParameters}} 3 | PROPERTY.INPARAMETERS.EMPTY -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/message-definitions-display-template.html: -------------------------------------------------------------------------------- 1 | {{'PROPERTY.MESSAGEDEFINITIONS.DISPLAY' | translate:property.value}} 2 | PROPERTY.MESSAGEDEFINITIONS.EMPTY -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/out-parameters-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.OUTPARAMETERS.VALUE' | translate:property.value.outParameters}} 3 | PROPERTY.OUTPARAMETERS.EMPTY -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/signal-definitions-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.SIGNALDEFINITIONS.DISPLAY' | translate:property.value}} 3 | PROPERTY.SIGNALDEFINITIONS.EMPTY -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/task-listeners-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.TASKLISTENERS.VALUE' | translate:property.value.taskListeners}} 3 | PROPERTY.TASKLISTENERS.EMPTY -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/event-listeners-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.EVENTLISTENERS.DISPLAY' | translate:property.value.eventListeners}} 3 | PROPERTY.EVENTLISTENERS.EMPTY -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/form-properties-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.FORMPROPERTIES.VALUE' | translate:property.value.formProperties}} 3 | PROPERTY.FORMPROPERTIES.EMPTY -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/execution-listeners-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{'PROPERTY.EXECUTIONLISTENERS.DISPLAY' | translate:property.value.executionListeners}} 3 | PROPERTY.EXECUTIONLISTENERS.EMPTY -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # flowable 在线流程设计器 spring-boot集成 2 | 基于flowable5.23 ,spring-boot 1.4.5.RELEASE 3 | 4 | ```bash 5 | $ git clone https://github.com/hs-web/hsweb-flowable-modeler.git 6 | ``` 7 | 导入ide. 启动test目录下的 `FlowableModelTest`. 8 | 9 | 启动完成后,浏览器打开`http://localhost:8080/workflow/modeler.html?modelId=5` 10 | 或者根据控制台提示打开对应的链接 -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/default-value-display-template.html: -------------------------------------------------------------------------------- 1 | 2 | {{property.value|limitTo:20}} 3 | ... 4 | PROPERTY.EMPTY -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/multiinstance-property-write-template.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 8 |
-------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/string-property-write-mode-template.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 8 |
-------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/signal-property-write-template.html: -------------------------------------------------------------------------------- 1 |
2 | 4 |
-------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/message-property-write-template.html: -------------------------------------------------------------------------------- 1 |
2 | 4 |
-------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/pom.xml.versionsBackup 2 | **/target/ 3 | **/out/ 4 | **/log/ 5 | *.class 6 | # Mobile Tools for Java (J2ME) 7 | .mtj.tmp/ 8 | .idea/ 9 | /nbproject 10 | *.ipr 11 | *.iws 12 | *.iml 13 | 14 | # Package Files # 15 | *.jar 16 | *.war 17 | *.ear 18 | *.log 19 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 20 | hs_err_pid* 21 | **/transaction-logs/ 22 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/angular-translate-storage-cookie/angular-translate-storage-cookie.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * angular-translate - v2.4.2 - 2014-10-21 3 | * http://github.com/angular-translate/angular-translate 4 | * Copyright (c) 2014 ; Licensed MIT 5 | */ 6 | angular.module("pascalprecht.translate").factory("$translateCookieStorage",["$cookieStore",function(a){var b={get:function(b){return a.get(b)},set:function(b,c){a.put(b,c)}};return b}]); -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/es5-shim-15.3.4.5/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "es5-shim", 3 | "homepage": "https://github.com/es-shims/es5-shim", 4 | "version": "2.1.0", 5 | "_release": "2.1.0", 6 | "_resolution": { 7 | "type": "version", 8 | "tag": "v2.1.0", 9 | "commit": "07da727ff7db2a3a25d6bc25d13e374b3bbc99c2" 10 | }, 11 | "_source": "git://github.com/es-shims/es5-shim.git", 12 | "_target": "~2.1.0", 13 | "_originalSource": "es5-shim" 14 | } -------------------------------------------------------------------------------- /src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | aop: 3 | auto: true 4 | proxy-target-class: true 5 | datasource: 6 | url: jdbc:h2:mem:act 7 | username : sa 8 | password : 9 | type: com.alibaba.druid.pool.DruidDataSource 10 | driver-class-name : org.h2.Driver 11 | cache: 12 | type: simple 13 | 14 | logging: 15 | level: 16 | org.flowable: debug 17 | # org.activiti: debug 18 | mybatis: 19 | dynamic-datasource: false -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/partials/root-stencil-item-template.html: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | {{group.name}} 11 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-number.js: -------------------------------------------------------------------------------- 1 | describe('Number', function () { 2 | 'use strict'; 3 | 4 | describe('toFixed', function () { 5 | it('should convert numbers correctly', function () { 6 | expect((0.00008).toFixed(3)).toBe('0.000'); 7 | expect((0.9).toFixed(0)).toBe('1'); 8 | expect((1.255).toFixed(2)).toBe('1.25'); 9 | expect((1843654265.0774949).toFixed(5)).toBe('1843654265.07749'); 10 | expect((1000000000000000128).toFixed(0)).toBe('1000000000000000128'); 11 | }); 12 | }); 13 | 14 | }); 15 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/js/jstools.js: -------------------------------------------------------------------------------- 1 | if (typeof(console) == "undefined") { 2 | var console = { 3 | info: function(){}, 4 | warn: function(){}, 5 | error: function(){}, 6 | log: function(){}, 7 | time: function(){}, 8 | timeEnd: function(){} 9 | }; 10 | } 11 | 12 | if(!Array.isArray) { 13 | Array.isArray = function (vArg) { 14 | return Object.prototype.toString.call(vArg) === "[object Array]"; 15 | }; 16 | } 17 | 18 | if (!Object.isSVGElement) { 19 | Object.isSVGElement = function(vArg) { 20 | var str = Object.prototype.toString.call(vArg); 21 | return (str.indexOf("[object SVG") == 0); 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/angular-translate-storage-cookie/angular-translate-storage-cookie.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * angular-translate - v2.4.2 - 2014-10-21 3 | * http://github.com/angular-translate/angular-translate 4 | * Copyright (c) 2014 ; Licensed MIT 5 | */ 6 | angular.module('pascalprecht.translate').factory('$translateCookieStorage', [ 7 | '$cookieStore', 8 | function ($cookieStore) { 9 | var $translateCookieStorage = { 10 | get: function (name) { 11 | return $cookieStore.get(name); 12 | }, 13 | set: function (name, value) { 14 | $cookieStore.put(name, value); 15 | } 16 | }; 17 | return $translateCookieStorage; 18 | } 19 | ]); -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * angular-translate - v2.4.2 - 2014-10-21 3 | * http://github.com/angular-translate/angular-translate 4 | * Copyright (c) 2014 ; Licensed MIT 5 | */ 6 | angular.module("pascalprecht.translate").factory("$translateStaticFilesLoader",["$q","$http",function(a,b){return function(c){if(!c||!angular.isString(c.prefix)||!angular.isString(c.suffix))throw new Error("Couldn't load static files, no prefix or suffix specified!");var d=a.defer();return b(angular.extend({url:[c.prefix,c.key,c.suffix].join(""),method:"GET",params:""},c.$http)).success(function(a){d.resolve(a)}).error(function(){d.reject(c.key)}),d.promise}}]); -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/angular-translate-loader-static-files/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-translate-loader-static-files", 3 | "version": "0.1.6", 4 | "main": "./angular-translate-loader-static-files.js", 5 | "dependencies": { 6 | "angular": "1.0.8", 7 | "angular-translate": "~1.1.1" 8 | }, 9 | "homepage": "https://github.com/PascalPrecht/bower-angular-translate-loader-static-files", 10 | "_release": "0.1.6", 11 | "_resolution": { 12 | "type": "version", 13 | "tag": "0.1.6", 14 | "commit": "eaac546d29d6cde45873e6bad9d18cdff071d983" 15 | }, 16 | "_source": "git://github.com/PascalPrecht/bower-angular-translate-loader-static-files.git", 17 | "_target": "0.1.6", 18 | "_originalSource": "angular-translate-loader-static-files" 19 | } -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/angular-translate-storage-cookie/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-translate-storage-cookie", 3 | "version": "0.1.6", 4 | "main": "./angular-translate-storage-cookie.js", 5 | "dependencies": { 6 | "angular": "1.0.8", 7 | "angular-cookies": "1.0.8", 8 | "angular-translate": "~1.1.1" 9 | }, 10 | "homepage": "https://github.com/PascalPrecht/bower-angular-translate-storage-cookie", 11 | "_release": "0.1.6", 12 | "_resolution": { 13 | "type": "version", 14 | "tag": "0.1.6", 15 | "commit": "fc9ea3275f0f9bf0a60ca073b58488d934a348ac" 16 | }, 17 | "_source": "git://github.com/PascalPrecht/bower-angular-translate-storage-cookie.git", 18 | "_target": "0.1.6", 19 | "_originalSource": "angular-translate-storage-cookie" 20 | } -------------------------------------------------------------------------------- /src/main/resources/META-INF/context.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/text-popup.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/sequenceflow-order-popup.html: -------------------------------------------------------------------------------- 1 | 2 | 48 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties-signal-scope-controller.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | angular.module('activitiModeler').controller('ActivitiSignalRefCtrl', [ '$scope', function($scope) { 20 | 21 | // Find the parent shape on which the signal definitions are defined 22 | var signalDefinitionsProperty = undefined; 23 | var parent = $scope.selectedShape; 24 | while (parent !== null && parent !== undefined && signalDefinitionsProperty === undefined) { 25 | if (parent.properties && parent.properties['oryx-signaldefinitions']) { 26 | signalDefinitionsProperty = parent.properties['oryx-signaldefinitions']; 27 | } else { 28 | parent = parent.parent; 29 | } 30 | } 31 | 32 | try { 33 | signalDefinitionsProperty = JSON.parse(signalDefinitionsProperty); 34 | if (typeof signalDefinitionsProperty == 'string') { 35 | signalDefinitionsProperty = JSON.parse(signalDefinitionsProperty); 36 | } 37 | } catch (err) { 38 | // Do nothing here, just to be sure we try-catch it 39 | } 40 | 41 | $scope.signalDefinitions = signalDefinitionsProperty; 42 | 43 | 44 | $scope.signalChanged = function() { 45 | $scope.updatePropertyInModel($scope.property); 46 | }; 47 | }]); -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties-message-scope-controller.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | angular.module('activitiModeler').controller('ActivitiMessageRefCtrl', [ '$scope', function($scope) { 21 | 22 | // Find the parent shape on which the message definitions are defined 23 | var messageDefinitionsProperty = undefined; 24 | var parent = $scope.selectedShape; 25 | while (parent !== null && parent !== undefined && messageDefinitionsProperty === undefined) { 26 | if (parent.properties && parent.properties['oryx-messagedefinitions']) { 27 | messageDefinitionsProperty = parent.properties['oryx-messagedefinitions']; 28 | } else { 29 | parent = parent.parent; 30 | } 31 | } 32 | 33 | try { 34 | messageDefinitionsProperty = JSON.parse(messageDefinitionsProperty); 35 | if (typeof messageDefinitionsProperty == 'string') { 36 | messageDefinitionsProperty = JSON.parse(messageDefinitionsProperty); 37 | } 38 | } catch (err) { 39 | // Do nothing here, just to be sure we try-catch it 40 | } 41 | 42 | $scope.messageDefinitions = messageDefinitionsProperty; 43 | 44 | 45 | $scope.messageChanged = function() { 46 | $scope.updatePropertyInModel($scope.property); 47 | }; 48 | }]); -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties-condition-expression-controller.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | /* 21 | * Condition expression 22 | */ 23 | 24 | var KisBpmConditionExpressionCtrl = [ '$scope', '$modal', function($scope, $modal) { 25 | 26 | // Config for the modal window 27 | var opts = { 28 | template: 'editor-app/configuration/properties/condition-expression-popup.html?version=' + Date.now(), 29 | scope: $scope 30 | }; 31 | 32 | // Open the dialog 33 | $modal(opts); 34 | }]; 35 | 36 | var KisBpmConditionExpressionPopupCtrl = [ '$scope', '$translate', '$http', function($scope, $translate, $http) { 37 | 38 | // Put json representing condition on scope 39 | if ($scope.property.value !== undefined && $scope.property.value !== null) { 40 | 41 | $scope.conditionExpression = {value: $scope.property.value}; 42 | 43 | } else { 44 | $scope.conditionExpression = {value: ''}; 45 | } 46 | 47 | $scope.save = function() { 48 | $scope.property.value = $scope.conditionExpression.value; 49 | $scope.updatePropertyInModel($scope.property); 50 | $scope.close(); 51 | }; 52 | 53 | // Close button handler 54 | $scope.close = function() { 55 | $scope.property.mode = 'read'; 56 | $scope.$hide(); 57 | }; 58 | }]; -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/style.css: -------------------------------------------------------------------------------- 1 | body { background: #fafafa; color: #708090; /* font: 300 100.1% "Helvetica Neue", Helvetica, "Arial Unicode MS", Arial, sans-serif; */ font-family: Verdana, sans-serif, Arial; font-size: 10px; } .wrapper{ height: 100%; position: relative; width: 100%; } /* #holder { height: 480px; width: 640px; b_ackground: #F8F8FF; -moz-border-radius: 10px; -webkit-border-radius: 10px; -webkit-box-shadow: 0 1px 3px #666; background: #DDD url(./images/bg.png); /* background: #DDD url(./images/checker-bg.png); * / b_order:0px solid #dedede; } */ div.diagramHolder { float:left; } div.diagram{ border:1px solid #dedede; margin: 5px; padding: 5px; background: #FFF; } div.diagram.hidden{ display:none; } svg { background: #DDD url(./images/bg.png); } div.diagram-info { float:left; position: relative; padding: 5px; } /* Breadcrumbs */ #diagramBreadCrumbs { margin-left: 2px; margin-right: 2px; margin-top: 10px; } #diagramBreadCrumbs ul { list-style: none; background-color: white; border: 1px solid #DEDEDE; border-color: #C0C2C5; margin: 0; margin-bottom: 10px; margin-left: 0; -webkit-padding-start: 0px; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } #diagramBreadCrumbs li { /*text-decoration: underline;*/ display: inline-block; vertical-align: middle; padding-left: .75em; padding-right: 0; cursor: pointer; } #diagramBreadCrumbs li.selected { color: #9370DB; color: #4876FF; color: #4F94CD; font-weight: bold; } #diagramBreadCrumbs li span { background: url(images/breadcrumbs.png) no-repeat 100% 50%; display: block; padding: .5em 15px .5em 0; } /* Progress bar */ .ui-progressbar { height: 25px; /*height:2em; text-align: left; overflow: hidden; */ background: white; border: 1px solid #949DAD; margin: 2px; overflow: hidden; padding: 1px; position: relative; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } .ui-progressbar .ui-progressbar-value { m_argin: -1px; height:100%; background: #D4E4FF; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } .ui-widget-header a { color: #222222/*{fcHeader}*/; } .ui-progressbar .ui-progressbar-label{ position: absolute; margin-top: 7px; border:0px solid red; width: 100%; text-align: center; } -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/angular-cookies_1.2.13/angular-cookies.min.js.map: -------------------------------------------------------------------------------- 1 | { 2 | "version":3, 3 | "file":"angular-cookies.min.js", 4 | "lineCount":7, 5 | "mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAoBtCD,CAAAE,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,QAAA,CA4BW,UA5BX,CA4BuB,CAAC,YAAD,CAAe,UAAf,CAA2B,QAAS,CAACC,CAAD,CAAaC,CAAb,CAAuB,CAAA,IACxEC,EAAU,EAD8D,CAExEC,EAAc,EAF0D,CAGxEC,CAHwE,CAIxEC,EAAU,CAAA,CAJ8D,CAKxEC,EAAOV,CAAAU,KALiE,CAMxEC,EAAcX,CAAAW,YAGlBN,EAAAO,UAAA,CAAmB,QAAQ,EAAG,CAC5B,IAAIC,EAAiBR,CAAAC,QAAA,EACjBE,EAAJ,EAA0BK,CAA1B,GACEL,CAGA,CAHqBK,CAGrB,CAFAH,CAAA,CAAKG,CAAL,CAAqBN,CAArB,CAEA,CADAG,CAAA,CAAKG,CAAL,CAAqBP,CAArB,CACA,CAAIG,CAAJ,EAAaL,CAAAU,OAAA,EAJf,CAF4B,CAA9B,CAAA,EAUAL,EAAA,CAAU,CAAA,CAKVL,EAAAW,OAAA,CASAC,QAAa,EAAG,CAAA,IACVC,CADU,CAEVC,CAFU,CAIVC,CAGJ,KAAKF,CAAL,GAAaV,EAAb,CACMI,CAAA,CAAYL,CAAA,CAAQW,CAAR,CAAZ,CAAJ,EACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBhB,CAAvB,CAKJ,KAAIgB,CAAJ,GAAYX,EAAZ,CAEE,CADAY,CACK,CADGZ,CAAA,CAAQW,CAAR,CACH,CAAAjB,CAAAoB,SAAA,CAAiBF,CAAjB,CAAL,EAMWA,CANX,GAMqBX,CAAA,CAAYU,CAAZ,CANrB,GAOEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBC,CAAvB,CACA,CAAAC,CAAA,CAAU,CAAA,CARZ,EACMnB,CAAAqB,UAAA,CAAkBd,CAAA,CAAYU,CAAZ,CAAlB,CAAJ,CACEX,CAAA,CAAQW,CAAR,CADF,CACkBV,CAAA,CAAYU,CAAZ,CADlB,CAGE,OAAOX,CAAA,CAAQW,CAAR,CASb,IAAIE,CAAJ,CAIE,IAAKF,CAAL,GAFAK,EAEahB,CAFID,CAAAC,QAAA,EAEJA,CAAAA,CAAb,CACMA,CAAA,CAAQW,CAAR,CAAJ,GAAsBK,CAAA,CAAeL,CAAf,CAAtB,GAEMN,CAAA,CAAYW,CAAA,CAAeL,CAAf,CAAZ,CAAJ,CACE,OAAOX,CAAA,CAAQW,CAAR,CADT,CAGEX,CAAA,CAAQW,CAAR,CAHF,CAGkBK,CAAA,CAAeL,CAAf,CALpB,CAlCU,CAThB,CAEA;MAAOX,EA1BqE,CAA3D,CA5BvB,CAAAH,QAAA,CA4HW,cA5HX,CA4H2B,CAAC,UAAD,CAAa,QAAQ,CAACoB,CAAD,CAAW,CAErD,MAAO,KAYAC,QAAQ,CAACC,CAAD,CAAM,CAEjB,MAAO,CADHP,CACG,CADKK,CAAA,CAASE,CAAT,CACL,EAAQzB,CAAA0B,SAAA,CAAiBR,CAAjB,CAAR,CAAkCA,CAFxB,CAZd,KA4BAS,QAAQ,CAACF,CAAD,CAAMP,CAAN,CAAa,CACxBK,CAAA,CAASE,CAAT,CAAA,CAAgBzB,CAAA4B,OAAA,CAAeV,CAAf,CADQ,CA5BrB,QA0CGW,QAAQ,CAACJ,CAAD,CAAM,CACpB,OAAOF,CAAA,CAASE,CAAT,CADa,CA1CjB,CAF8C,CAAhC,CA5H3B,CApBsC,CAArC,CAAA,CAoME1B,MApMF,CAoMUA,MAAAC,QApMV;", 6 | "sources":["angular-cookies.js"], 7 | "names":["window","angular","undefined","module","factory","$rootScope","$browser","cookies","lastCookies","lastBrowserCookies","runEval","copy","isUndefined","addPollFn","currentCookies","$apply","$watch","push","name","value","updated","isString","isDefined","browserCookies","$cookies","get","key","fromJson","put","toJson","remove"] 8 | } -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/subprocess-reference-popup.html: -------------------------------------------------------------------------------- 1 | 2 | 44 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/message-definitions-popup.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/editor-controller.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 'use strict'; 20 | 21 | angular.module('activitiModeler') 22 | .controller('EditorUnsavedChangesPopupCrtl', ['$rootScope', '$scope', '$http', '$location', '$window', function ($rootScope, $scope, $http, $location, $window) { 23 | 24 | $scope.ok = function () { 25 | if ($scope.handleResponseFunction) { 26 | $scope.handleResponseFunction(true); 27 | 28 | // Also clear any 'onbeforeunload', added by oryx 29 | $window.onbeforeunload = undefined; 30 | } 31 | $scope.$hide(); 32 | }; 33 | 34 | $scope.cancel = function () { 35 | if ($scope.handleResponseFunction) { 36 | $scope.handleResponseFunction(false); 37 | } 38 | $scope.$hide(); 39 | }; 40 | }]); 41 | 42 | activitiModule 43 | .directive('autoFocus', ['$timeout', '$parse', function($timeout, $parse) { 44 | return { 45 | restrict: 'AC', 46 | compile: function($element, attr) { 47 | 48 | return function(_scope, _element, _attrs) { 49 | var firstChild = (_attrs.focusFirstChild !== undefined); 50 | $timeout(function () { 51 | if (firstChild) { 52 | // look for first input-element in child-tree and focus that 53 | var inputs = _element.find('input'); 54 | if (inputs && inputs.length > 0) { 55 | inputs[0].focus(); 56 | } 57 | } else { 58 | // Focus element where the directive is put on 59 | _element[0].focus(); 60 | } 61 | }, 100); 62 | } 63 | } 64 | }; 65 | }]); 66 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/js/ActivitiRest.js: -------------------------------------------------------------------------------- 1 | var ActivitiRest = { 2 | options: {}, 3 | getProcessDefinitionByKey: function(processDefinitionKey, callback) { 4 | var url = Lang.sub(this.options.processDefinitionByKeyUrl, {processDefinitionKey: processDefinitionKey}); 5 | 6 | $.ajax({ 7 | url: url, 8 | dataType: 'jsonp', 9 | cache: false, 10 | async: true, 11 | success: function(data, textStatus) { 12 | var processDefinition = data; 13 | if (!processDefinition) { 14 | console.error("Process definition '" + processDefinitionKey + "' not found"); 15 | } else { 16 | callback.apply({processDefinitionId: processDefinition.id}); 17 | } 18 | } 19 | }).done(function(data, textStatus) { 20 | console.log("ajax done"); 21 | }).fail(function(jqXHR, textStatus, error){ 22 | console.error('Get diagram layout['+processDefinitionKey+'] failure: ', textStatus, 'error: ', error, jqXHR); 23 | }); 24 | }, 25 | 26 | getProcessDefinition: function(processDefinitionId, callback) { 27 | var url = Lang.sub(this.options.processDefinitionUrl, {processDefinitionId: processDefinitionId}); 28 | 29 | $.ajax({ 30 | url: url, 31 | dataType: 'jsonp', 32 | cache: false, 33 | async: true, 34 | success: function(data, textStatus) { 35 | var processDefinitionDiagramLayout = data; 36 | if (!processDefinitionDiagramLayout) { 37 | console.error("Process definition diagram layout '" + processDefinitionId + "' not found"); 38 | return; 39 | } else { 40 | callback.apply({processDefinitionDiagramLayout: processDefinitionDiagramLayout}); 41 | } 42 | } 43 | }).done(function(data, textStatus) { 44 | console.log("ajax done"); 45 | }).fail(function(jqXHR, textStatus, error){ 46 | console.log('Get diagram layout['+processDefinitionId+'] failure: ', textStatus, jqXHR); 47 | }); 48 | }, 49 | 50 | getHighLights: function(processInstanceId, callback) { 51 | var url = Lang.sub(this.options.processInstanceHighLightsUrl, {processInstanceId: processInstanceId}); 52 | 53 | $.ajax({ 54 | url: url, 55 | dataType: 'jsonp', 56 | cache: false, 57 | async: true, 58 | success: function(data, textStatus) { 59 | console.log("ajax returned data"); 60 | var highLights = data; 61 | if (!highLights) { 62 | console.log("highLights not found"); 63 | return; 64 | } else { 65 | callback.apply({highLights: highLights}); 66 | } 67 | } 68 | }).done(function(data, textStatus) { 69 | console.log("ajax done"); 70 | }).fail(function(jqXHR, textStatus, error){ 71 | console.log('Get HighLights['+processInstanceId+'] failure: ', textStatus, jqXHR); 72 | }); 73 | } 74 | }; -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/plugins.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/jquery.autogrow-textarea.js: -------------------------------------------------------------------------------- 1 | (function($) 2 | { 3 | /** 4 | * Auto-growing textareas; technique ripped from Facebook 5 | * 6 | * http://github.com/jaz303/jquery-grab-bag/tree/master/javascripts/jquery.autogrow-textarea.js 7 | */ 8 | $.fn.autogrow = function(options) 9 | { 10 | return this.filter('textarea').each(function() 11 | { 12 | var self = this; 13 | var $self = $(self); 14 | var minHeight = $self.height(); 15 | var noFlickerPad = $self.hasClass('autogrow-short') ? 0 : parseInt($self.css('lineHeight')) || 0; 16 | 17 | var shadow = $('
').css({ 18 | position: 'absolute', 19 | top: -10000, 20 | left: -10000, 21 | width: $self.width(), 22 | fontSize: $self.css('fontSize'), 23 | fontFamily: $self.css('fontFamily'), 24 | fontWeight: $self.css('fontWeight'), 25 | lineHeight: $self.css('lineHeight'), 26 | resize: 'none', 27 | 'word-wrap': 'break-word' 28 | }).appendTo(document.body); 29 | 30 | var update = function(event) 31 | { 32 | var times = function(string, number) 33 | { 34 | for (var i=0, r=''; i/g, '>') 40 | .replace(/&/g, '&') 41 | .replace(/\n$/, '
 ') 42 | .replace(/\n/g, '
') 43 | .replace(/ {2,}/g, function(space){ return times(' ', space.length - 1) + ' ' }); 44 | 45 | // Did enter get pressed? Resize in this keydown event so that the flicker doesn't occur. 46 | if (event && event.data && event.data.event === 'keydown' && event.keyCode === 13) { 47 | val += '
'; 48 | } 49 | 50 | shadow.css('width', $self.width()); 51 | shadow.html(val + (noFlickerPad === 0 ? '...' : '')); // Append '...' to resize pre-emptively. 52 | $self.height(Math.max(shadow.height() + noFlickerPad, minHeight)); 53 | } 54 | 55 | $self.change(update).keyup(update).keydown({event:'keydown'},update); 56 | $(window).resize(update); 57 | 58 | update(); 59 | }); 60 | }; 61 | })(jQuery); -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/assignment-popup.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; 3 | } 4 | 5 | 6 | .jasmine_reporter a:visited, .jasmine_reporter a { 7 | color: #303; 8 | } 9 | 10 | .jasmine_reporter a:hover, .jasmine_reporter a:active { 11 | color: blue; 12 | } 13 | 14 | .run_spec { 15 | float:right; 16 | padding-right: 5px; 17 | font-size: .8em; 18 | text-decoration: none; 19 | } 20 | 21 | .jasmine_reporter { 22 | margin: 0 5px; 23 | } 24 | 25 | .banner { 26 | color: #303; 27 | background-color: #fef; 28 | padding: 5px; 29 | } 30 | 31 | .logo { 32 | float: left; 33 | font-size: 1.1em; 34 | padding-left: 5px; 35 | } 36 | 37 | .logo .version { 38 | font-size: .6em; 39 | padding-left: 1em; 40 | } 41 | 42 | .runner.running { 43 | background-color: yellow; 44 | } 45 | 46 | 47 | .options { 48 | text-align: right; 49 | font-size: .8em; 50 | } 51 | 52 | 53 | 54 | 55 | .suite { 56 | border: 1px outset gray; 57 | margin: 5px 0; 58 | padding-left: 1em; 59 | } 60 | 61 | .suite .suite { 62 | margin: 5px; 63 | } 64 | 65 | .suite.passed { 66 | background-color: #dfd; 67 | } 68 | 69 | .suite.failed { 70 | background-color: #fdd; 71 | } 72 | 73 | .spec { 74 | margin: 5px; 75 | padding-left: 1em; 76 | clear: both; 77 | } 78 | 79 | .spec.failed, .spec.passed, .spec.skipped { 80 | padding-bottom: 5px; 81 | border: 1px solid gray; 82 | } 83 | 84 | .spec.failed { 85 | background-color: #fbb; 86 | border-color: red; 87 | } 88 | 89 | .spec.passed { 90 | background-color: #bfb; 91 | border-color: green; 92 | } 93 | 94 | .spec.skipped { 95 | background-color: #bbb; 96 | } 97 | 98 | .messages { 99 | border-left: 1px dashed gray; 100 | padding-left: 1em; 101 | padding-right: 1em; 102 | } 103 | 104 | .passed { 105 | background-color: #cfc; 106 | display: none; 107 | } 108 | 109 | .failed { 110 | background-color: #fbb; 111 | } 112 | 113 | .skipped { 114 | color: #777; 115 | background-color: #eee; 116 | display: none; 117 | } 118 | 119 | 120 | /*.resultMessage {*/ 121 | /*white-space: pre;*/ 122 | /*}*/ 123 | 124 | .resultMessage span.result { 125 | display: block; 126 | line-height: 2em; 127 | color: black; 128 | } 129 | 130 | .resultMessage .mismatch { 131 | color: black; 132 | } 133 | 134 | .stackTrace { 135 | white-space: pre; 136 | font-size: .8em; 137 | margin-left: 10px; 138 | max-height: 5em; 139 | overflow: auto; 140 | border: 1px inset red; 141 | padding: 1em; 142 | background: #eef; 143 | } 144 | 145 | .finished-at { 146 | padding-left: 1em; 147 | font-size: .6em; 148 | } 149 | 150 | .show-passed .passed, 151 | .show-skipped .skipped { 152 | display: block; 153 | } 154 | 155 | 156 | #jasmine_content { 157 | position:fixed; 158 | right: 100%; 159 | } 160 | 161 | .runner { 162 | border: 1px solid gray; 163 | display: block; 164 | margin: 5px 0; 165 | padding: 2px 0 2px 10px; 166 | } 167 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/signal-definitions-popup.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/test/java/org/hswebframework/web/workflow/flowable/FlowableModelTest.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.flowable; 2 | 3 | import com.fasterxml.jackson.databind.ObjectMapper; 4 | import com.fasterxml.jackson.databind.node.ObjectNode; 5 | import org.activiti.bpmn.converter.BpmnXMLConverter; 6 | import org.activiti.bpmn.model.BpmnModel; 7 | import org.activiti.editor.constants.ModelDataJsonConstants; 8 | import org.activiti.editor.language.json.converter.BpmnJsonConverter; 9 | import org.activiti.engine.RepositoryService; 10 | import org.activiti.engine.repository.ProcessDefinition; 11 | import org.springframework.boot.CommandLineRunner; 12 | import org.springframework.boot.SpringApplication; 13 | import org.springframework.boot.autoconfigure.SpringBootApplication; 14 | import org.springframework.context.annotation.ComponentScan; 15 | 16 | import javax.annotation.Resource; 17 | import javax.xml.stream.XMLInputFactory; 18 | import javax.xml.stream.XMLStreamReader; 19 | import java.io.InputStream; 20 | import java.io.InputStreamReader; 21 | 22 | /** 23 | * Created by zhouhao on 2017/7/20. 24 | */ 25 | @SpringBootApplication 26 | public class FlowableModelTest implements CommandLineRunner { 27 | 28 | @Resource 29 | protected RepositoryService repositoryService; 30 | 31 | public static void main(String[] args) { 32 | SpringApplication.run(FlowableModelTest.class, args); 33 | } 34 | 35 | @Override 36 | public void run(String... args) throws Exception { 37 | ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() 38 | .processDefinitionId("testid:1:4").singleResult(); 39 | InputStream bpmnStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), 40 | processDefinition.getResourceName()); 41 | XMLInputFactory xif = XMLInputFactory.newInstance(); 42 | InputStreamReader in = new InputStreamReader(bpmnStream, "UTF-8"); 43 | XMLStreamReader xtr = xif.createXMLStreamReader(in); 44 | BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr); 45 | 46 | BpmnJsonConverter converter = new BpmnJsonConverter(); 47 | com.fasterxml.jackson.databind.node.ObjectNode modelNode = converter.convertToJson(bpmnModel); 48 | org.activiti.engine.repository.Model modelData = repositoryService.newModel(); 49 | modelData.setKey(processDefinition.getKey()); 50 | modelData.setName(processDefinition.getResourceName().substring(0, processDefinition.getResourceName().indexOf("."))); 51 | modelData.setCategory(processDefinition.getDeploymentId()); 52 | 53 | ObjectNode modelObjectNode = new ObjectMapper().createObjectNode(); 54 | modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefinition.getName()); 55 | modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1); 56 | modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, processDefinition.getDescription()); 57 | modelData.setMetaInfo(modelObjectNode.toString()); 58 | 59 | repositoryService.saveModel(modelData); 60 | 61 | repositoryService.addModelEditorSource(modelData.getId(), modelNode.toString().getBytes("utf-8")); 62 | 63 | System.err.println("访问: http://localhost:8080/workflow/modeler.html?modelId=" + modelData.getId()); 64 | } 65 | } -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/angular-resource_1.2.13/angular-resource.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.2.13 3 | (c) 2010-2014 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(H,a,A){'use strict';function D(p,g){g=g||{};a.forEach(g,function(a,c){delete g[c]});for(var c in p)!p.hasOwnProperty(c)||"$"===c.charAt(0)&&"$"===c.charAt(1)||(g[c]=p[c]);return g}var v=a.$$minErr("$resource"),C=/^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;a.module("ngResource",["ng"]).factory("$resource",["$http","$q",function(p,g){function c(a,c){this.template=a;this.defaults=c||{};this.urlParams={}}function t(n,w,l){function r(h,d){var e={};d=x({},w,d);s(d,function(b,d){u(b)&&(b=b());var k;if(b&& 7 | b.charAt&&"@"==b.charAt(0)){k=h;var a=b.substr(1);if(null==a||""===a||"hasOwnProperty"===a||!C.test("."+a))throw v("badmember",a);for(var a=a.split("."),f=0,c=a.length;f boilerplate 39 | 40 | 1.2.2 41 | - Changed reduce to follow the letter of the spec with regard to having and 42 | owning properties. 43 | - Fixed a bug where RegExps pass as Functions in some engines in reduce. 44 | 45 | 1.2.1 46 | - Adding few fixes to make jshint happy. 47 | - Fix for issue #12, function expressions can cause scoping issues in IE. 48 | - NPM will minify on install or when `npm run-script install` is executed. 49 | - Adding .gitignore to avoid publishing dev dependencies. 50 | 51 | 1.2.0 52 | - Making script loadable as AMD module. 53 | - Adding `indexOf` to the list of safe shims. 54 | 55 | 1.1.0 56 | - Added support for accessor properties where possible (which is all browsers 57 | except IE). 58 | - Stop exposing bound function's (that are returned by 59 | `Function.prototype.bind`) internal properties (`bound, boundTo, boundArgs`) 60 | as in some cases (when using facade objects for example) capabilities of the 61 | enclosed functions will be leaked. 62 | - `Object.create` now explicitly sets `__proto__` property to guarantee 63 | correct behavior of `Object.getPrototypeOf`'s on all objects created using 64 | `Object.create`. 65 | - Switched to `===` from `==` where possible as it's slightly faster on older 66 | browsers that are target of this lib. 67 | - Added names to all anonymous functions to have a better stack traces. 68 | 69 | 1.0.0 70 | - fixed Date.toISODate, using UTC accessors, as in 71 | http://code.google.com/p/v8/source/browse/trunk/src/date.js?r=6120#986 72 | (arian) 73 | 74 | 0.0.4 75 | - Revised Object.getPrototypeOf to work in more cases 76 | in response to http://ejohn.org/blog/objectgetprototypeof/ 77 | [issue #2] (fschaefer) 78 | 79 | 0.0.3 80 | - Fixed typos in Object.keys (samsonjs) 81 | 82 | 0.0.2 83 | Per kangax's recommendations: 84 | - faster Object.create(null) 85 | - fixed a function-scope function declaration statement in Object.create 86 | 87 | 0.0.1 88 | - fixed Object.create(null), in so far as that's possible 89 | - reworked Rhino Object.freeze(Function) bug detector and patcher 90 | 91 | 0.0.0 92 | - forked from narwhal-lib 93 | 94 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/in-parameters-popup.html: -------------------------------------------------------------------------------- 1 | 2 | 54 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties/out-parameters-popup.html: -------------------------------------------------------------------------------- 1 | 2 | 54 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/js/ActivityImpl.js: -------------------------------------------------------------------------------- 1 | /** * * @author Tom Baeyens * @author (Javascript) Dmitry Farafonov */ var ActivityImpl = function(activityJson){ this.outgoingTransitions = []; this.outgoingTransitions = []; this.incomingTransitions = []; this.activityBehavior = null; this.parent = null; this.isScope = false; this.isAsync = false; this.isExclusive = false; this.x = -1; this.y = -1; this.width = -1; this.height = -1; this.properties = {}; //console.log("activityJson: ", activityJson); if (activityJson != undefined) { this.setId(activityJson.activityId); for (var propertyName in activityJson.properties) { this.setProperty(propertyName, activityJson.properties[propertyName]); } //this.setProperty("name", activityJson.activityName); //this.setProperty("type", activityJson.activityType); this.setX(activityJson.x); this.setY(activityJson.y); this.setWidth(activityJson.width); this.setHeight(activityJson.height); if (activityJson.multiInstance) this.setProperty("multiInstance", activityJson.multiInstance); if (activityJson.collapsed) { this.setProperty("collapsed", activityJson.collapsed); } if (activityJson.isInterrupting != undefined) this.setProperty("isInterrupting", activityJson.isInterrupting); } }; ActivityImpl.prototype = { outgoingTransitions: [], outgoingTransitions: [], incomingTransitions: [], activityBehavior: null, parent: null, isScope: false, isAsync: false, isExclusive: false, id: null, properties: {}, // Graphical information x: -1, y: -1, width: -1, height: -1, setId: function(id){ this.id = id; }, getId: function(){ return this.id; }, setProperty: function(name, value){ this.properties[name] = value; }, getProperty: function(name){ return this.properties[name]; }, createOutgoingTransition: function(transitionId){ }, toString: function(id) { return "Activity("+id+")"; }, getParentActivity: function(){ /* if (parent instanceof ActivityImpl) { 79 return (ActivityImpl) parent; 80 } 81 return null; */ return this.parent; }, // restricted setters /////////////////////////////////////////////////////// setOutgoingTransitions: function(outgoingTransitions){ this.outgoingTransitions = outgoingTransitions; }, setParent: function(parent){ this.parent = parent; }, setIncomingTransitions: function(incomingTransitions){ this.incomingTransitions = incomingTransitions; }, // getters and setters ////////////////////////////////////////////////////// getOutgoingTransitions: function(){ return this.outgoingTransitions; }, getActivityBehavior: function(){ return this.activityBehavior; }, setActivityBehavior: function(activityBehavior){ this.activityBehavior = activityBehavior; }, getParent: function(){ return this.parent; }, getIncomingTransitions: function(){ return this.incomingTransitions; }, isScope: function(){ return this.isScope; }, setScope: function(isScope){ this.isScope = isScope; }, getX: function(){ return this.x; }, setX: function(x){ this.x = x; }, getY: function(){ return this.y; }, setY: function(y){ this.y = y; }, getWidth: function(){ return this.width; }, setWidth: function(width){ this.width = width; }, getHeight: function(){ return this.height; }, setHeight: function(height){ this.height = height; }, isAsync: function() { return this.isAsync; }, setAsync: function(isAsync) { this.isAsync = isAsync; }, isExclusive: function() { return this.isExclusive; }, setExclusive: function(isExclusive) { this.isExclusive = isExclusive; }, vvoid: function(){} }; -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/js/jquery/jquery.progressbar.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @ Dmitry Farafonov 3 | */ 4 | 5 | (function($){ 6 | $.ProgressBar = function(options) { 7 | this.element = $(options.boundingBox); 8 | if (options.on && options.on.complete){ 9 | this.onComplete = options.on.complete; 10 | } 11 | if (options.on && options.on.valueChange){ 12 | this.onValueChange = options.on.valueChange; 13 | } 14 | 15 | this._create(); 16 | 17 | if (options.label) 18 | this.set("label", options.label); 19 | if (options.value) 20 | this.value(options.value); 21 | if (options.max) 22 | this.set("max", options.max); 23 | }; 24 | $.ProgressBar.prototype = { 25 | options: { 26 | value: 0, 27 | max: 100 28 | }, 29 | 30 | min: 0, 31 | 32 | _create: function() { 33 | this.element 34 | .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) 35 | .attr({ 36 | role: "progressbar", 37 | "aria-valuemin": this.min, 38 | "aria-valuemax": this.options.max, 39 | "aria-valuenow": this._value() 40 | }); 41 | 42 | this.valueDiv = $( "
" ) 43 | .appendTo( this.element ); 44 | 45 | this.valueDiv = $( "
" ) 46 | .appendTo( this.element ); 47 | 48 | this.oldValue = this._value(); 49 | this._refreshValue(); 50 | }, 51 | 52 | _destroy: function() { 53 | this.element 54 | .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) 55 | .removeAttr( "role" ) 56 | .removeAttr( "aria-valuemin" ) 57 | .removeAttr( "aria-valuemax" ) 58 | .removeAttr( "aria-valuenow" ); 59 | 60 | this.valueDiv.remove(); 61 | }, 62 | 63 | value: function( newValue ) { 64 | if ( newValue === undefined ) { 65 | return this._value(); 66 | } 67 | 68 | this._setOption( "value", newValue ); 69 | return this; 70 | }, 71 | 72 | _setOption: function( key, value ) { 73 | if ( key === "value" ) { 74 | //var oldVal = this.options.value; 75 | this.options.value = value; 76 | this._refreshValue(); 77 | 78 | if (this.onValueChange) 79 | this.onValueChange.apply(this, [{oldVal: this.oldValue, newVal: value}]); 80 | 81 | if ( this._value() === this.options.max ) { 82 | //this._trigger( "complete" ); 83 | if (this.onComplete) 84 | this.onComplete.apply(this); 85 | } 86 | } else if (key === "label") { 87 | $(this.element).find(".ui-progressbar-label").html(value); 88 | } else if (key === "max") { 89 | this.options.max = value; 90 | } 91 | 92 | //this._super( key, value ); 93 | }, 94 | 95 | _value: function() { 96 | var val = this.options.value; 97 | // normalize invalid value 98 | if ( typeof val !== "number" ) { 99 | val = 0; 100 | } 101 | return Math.min( this.options.max, Math.max( this.min, val ) ); 102 | }, 103 | 104 | _percentage: function() { 105 | return 100 * this._value() / this.options.max; 106 | }, 107 | 108 | _refreshValue: function() { 109 | var value = this.value(), 110 | percentage = this._percentage(); 111 | 112 | if ( this.oldValue !== value ) { 113 | this.oldValue = value; 114 | //this._trigger( "change" ); 115 | } 116 | 117 | this.valueDiv 118 | .toggle( value > this.min ) 119 | .toggleClass( "ui-corner-right", value === this.options.max ) 120 | .width( percentage.toFixed(0) + "%" ); 121 | this.element.attr( "aria-valuenow", value ); 122 | 123 | //$(this.element).find(".ui-progressbar-label").html(value + "%"); 124 | }, 125 | 126 | set: function(key, value){ 127 | this._setOption(key, value); 128 | } 129 | }; 130 | 131 | })( jQuery ); -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/js/jquery/jquery.asyncqueue.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the jquery plugin "asyncQueue". 3 | * 4 | * (c) Sebastien Roch 5 | * @author (parallel) Dmitry Farafonov 6 | * 7 | * For the full copyright and license information, please view the LICENSE 8 | * file that was distributed with this source code. 9 | */ 10 | (function($){ 11 | $.AsyncQueue = function() { 12 | var that = this, 13 | queue = [], 14 | completeFunc, 15 | failureFunc, 16 | paused = false, 17 | lastCallbackData, 18 | _run, 19 | _complete, 20 | inQueue = 0, 21 | defaultTimeOut = 10; 22 | 23 | _run = function() { 24 | var f = queue.shift(); 25 | 26 | if (f) { 27 | inQueue++; 28 | setTimeout(function(){ 29 | f.fn.apply(that, [that]); 30 | 31 | if (!f.isParallel) 32 | if (paused === false) { 33 | _run(); 34 | } 35 | inQueue --; 36 | if (inQueue == 0 && queue.length == 0) 37 | _complete(); 38 | }, f.timeOut); 39 | 40 | if (f.isParallel) 41 | if (paused === false) { 42 | _run(); 43 | } 44 | } 45 | }; 46 | 47 | _complete = function(){ 48 | if (completeFunc) 49 | completeFunc.apply(that, [that]); 50 | }; 51 | 52 | this.onComplete = function(func) { 53 | completeFunc = func; 54 | }; 55 | 56 | this.onFailure = function(func) { 57 | failureFunc = func; 58 | }; 59 | 60 | this.add = function(func) { 61 | // TODO: add callback for queue[i] complete 62 | 63 | var obj = arguments[0]; 64 | if (obj && Object.prototype.toString.call(obj) === "[object Array]") { 65 | var fn = arguments[1]; 66 | var timeOut = (typeof(arguments[2]) != "undefined")? arguments[2] : defaultTimeOut; 67 | if (typeof(fn) == "function") { 68 | for(var i = 0; i < obj.length; i++) { 69 | var f = function(objx){ 70 | queue.push({isParallel: true, fn: function(){fn.apply(that, [that, objx]);}, timeOut: timeOut}); 71 | }(obj[i]) 72 | } 73 | } 74 | } else { 75 | var fn = arguments[0]; 76 | var timeOut = (typeof(arguments[1]) != "undefined")? arguments[2] : defaultTimeOut; 77 | queue.push({isParallel: false, fn: func, timeOut: timeOut}); 78 | } 79 | return this; 80 | }; 81 | 82 | this.addParallel = function(func, timeOut) { 83 | // TODO: add callback for queue[i] complete 84 | 85 | queue.push({isParallel: true, fn: func, timeOut: timeOut}); 86 | return this; 87 | }; 88 | 89 | this.storeData = function(dataObject) { 90 | lastCallbackData = dataObject; 91 | return this; 92 | }; 93 | 94 | this.lastCallbackData = function () { 95 | return lastCallbackData; 96 | }; 97 | 98 | this.run = function() { 99 | paused = false; 100 | _run(); 101 | }; 102 | 103 | this.pause = function () { 104 | paused = true; 105 | return this; 106 | }; 107 | 108 | this.failure = function() { 109 | paused = true; 110 | if (failureFunc) { 111 | var args = [that]; 112 | for(i = 0; i < arguments.length; i++) { 113 | args.push(arguments[i]); 114 | } 115 | failureFunc.apply(that, args); 116 | } 117 | }; 118 | 119 | this.size = function(){ 120 | return queue.length; 121 | }; 122 | 123 | return this; 124 | } 125 | })(jQuery); 126 | -------------------------------------------------------------------------------- /src/main/java/org/hswebframework/web/workflow/flowable/modeler/FlowableModelController.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.flowable.modeler; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import com.alibaba.fastjson.JSONObject; 5 | import org.activiti.engine.RepositoryService; 6 | import org.activiti.engine.repository.Model; 7 | import org.apache.batik.transcoder.TranscoderException; 8 | import org.apache.batik.transcoder.TranscoderInput; 9 | import org.apache.batik.transcoder.TranscoderOutput; 10 | import org.apache.batik.transcoder.image.PNGTranscoder; 11 | import org.apache.commons.lang3.StringUtils; 12 | import org.springframework.beans.factory.annotation.Autowired; 13 | import org.springframework.http.HttpStatus; 14 | import org.springframework.web.bind.annotation.*; 15 | 16 | import java.io.ByteArrayInputStream; 17 | import java.io.ByteArrayOutputStream; 18 | import java.io.IOException; 19 | import java.io.InputStream; 20 | import java.util.Map; 21 | 22 | @RestController 23 | @RequestMapping("/workflow") 24 | public class FlowableModelController { 25 | 26 | @Autowired 27 | private RepositoryService repositoryService; 28 | 29 | private final static String MODEL_ID = "modelId"; 30 | private final static String MODEL_NAME = "name"; 31 | private final static String MODEL_REVISION = "revision"; 32 | private final static String MODEL_DESCRIPTION = "description"; 33 | private final static String MODEL_KEY = "key"; 34 | 35 | @RequestMapping(value = "/model/{modelId}/json", method = RequestMethod.GET) 36 | public Object getEditorJson(@PathVariable String modelId) throws Exception { 37 | JSONObject modelNode; 38 | Model model = repositoryService.getModel(modelId); 39 | if (model == null) throw new NullPointerException("模型不存在"); 40 | if (StringUtils.isNotEmpty(model.getMetaInfo())) { 41 | modelNode = JSON.parseObject(model.getMetaInfo()); 42 | } else { 43 | modelNode = new JSONObject(); 44 | modelNode.put(MODEL_NAME, model.getName()); 45 | } 46 | modelNode.put(MODEL_ID, model.getId()); 47 | modelNode.put("model", JSON.parse(new String(repositoryService.getModelEditorSource(model.getId())))); 48 | return modelNode; 49 | } 50 | 51 | @RequestMapping(value = "/model/{modelId}", method = RequestMethod.PUT) 52 | @ResponseStatus(value = HttpStatus.OK) 53 | public void saveModel(@PathVariable String modelId, 54 | @RequestParam Map values) throws TranscoderException, IOException { 55 | Model model = repositoryService.getModel(modelId); 56 | JSONObject modelJson = JSON.parseObject(model.getMetaInfo()); 57 | 58 | modelJson.put(MODEL_NAME, values.get("name")); 59 | modelJson.put(MODEL_DESCRIPTION, values.get("description")); 60 | 61 | model.setMetaInfo(modelJson.toString()); 62 | model.setName(values.get("name")); 63 | 64 | repositoryService.saveModel(model); 65 | 66 | repositoryService.addModelEditorSource(model.getId(), values.get("json_xml").getBytes("utf-8")); 67 | 68 | InputStream svgStream = new ByteArrayInputStream(values.get("svg_xml").getBytes("utf-8")); 69 | TranscoderInput input = new TranscoderInput(svgStream); 70 | 71 | PNGTranscoder transcoder = new PNGTranscoder(); 72 | // Setup output 73 | ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 74 | TranscoderOutput output = new TranscoderOutput(outStream); 75 | 76 | // Do the transformation 77 | transcoder.transcode(input, output); 78 | final byte[] result = outStream.toByteArray(); 79 | repositoryService.addModelEditorSourceExtra(model.getId(), result); 80 | outStream.close(); 81 | } 82 | 83 | } -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/mousetrap-1.4.5.min.js: -------------------------------------------------------------------------------- 1 | /* mousetrap v1.4.5 craig.is/killing/mice */ 2 | (function(J,r,f){function s(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent("on"+b,c)}function A(a){if("keypress"==a.type){var b=String.fromCharCode(a.which);a.shiftKey||(b=b.toLowerCase());return b}return h[a.which]?h[a.which]:B[a.which]?B[a.which]:String.fromCharCode(a.which).toLowerCase()}function t(a){a=a||{};var b=!1,c;for(c in n)a[c]?b=!0:n[c]=0;b||(u=!1)}function C(a,b,c,d,e,v){var g,k,f=[],h=c.type;if(!l[a])return[];"keyup"==h&&w(a)&&(b=[a]);for(g=0;gg||h.hasOwnProperty(g)&&(p[h[g]]=g)}e=p[c]?"keydown":"keypress"}"keypress"==e&&f.length&&(e="keydown");return{key:d,modifiers:f,action:e}}function F(a,b,c,d,e){q[a+":"+c]=b;a=a.replace(/\s+/g," ");var f=a.split(" ");1":".","?":"/","|":"\\"},G={option:"alt",command:"meta","return":"enter",escape:"esc",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},p,l={},q={},n={},D,z=!1,I=!1,u=!1;for(f=1;20>f;++f)h[111+f]="f"+f;for(f=0;9>=f;++f)h[f+96]=f;s(r,"keypress",y);s(r,"keydown",y);s(r,"keyup",y);var m={bind:function(a,b,c){a=a instanceof Array?a:[a];for(var d=0;d0){this.init(type,text);}} 29 | PathToken.prototype.init=function(type,text){this.type=type;this.text=text;}; 30 | PathToken.prototype.typeis=function(type){return this.type==type;} -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/angular-route_1.2.13/angular-route.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.2.13 3 | (c) 2010-2014 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(h,e,A){'use strict';function u(w,q,k){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,n){function y(){l&&(l.$destroy(),l=null);g&&(k.leave(g),g=null)}function v(){var b=w.current&&w.current.locals;if(e.isDefined(b&&b.$template)){var b=a.$new(),f=w.current;g=n(b,function(d){k.enter(d,null,g||c,function(){!e.isDefined(t)||t&&!a.$eval(t)||q()});y()});l=f.scope=b;l.$emit("$viewContentLoaded");l.$eval(h)}else y()}var l,g,t=b.autoscroll,h=b.onload||""; 7 | a.$on("$routeChangeSuccess",v);v()}}}function z(e,h,k){return{restrict:"ECA",priority:-400,link:function(a,c){var b=k.current,f=b.locals;c.html(f.$template);var n=e(c.contents());b.controller&&(f.$scope=a,f=h(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));n(a)}}}h=e.module("ngRoute",["ng"]).provider("$route",function(){function h(a,c){return e.extend(new (e.extend(function(){},{prototype:a})),c)}function q(a, 8 | e){var b=e.caseInsensitiveMatch,f={originalPath:a,regexp:a},h=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,e,b,c){a="?"===c?c:null;c="*"===c?c:null;h.push({name:b,optional:!!a});e=e||"";return""+(a?"":e)+"(?:"+(a?e:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=RegExp("^"+a+"$",b?"i":"");return f}var k={};this.when=function(a,c){k[a]=e.extend({reloadOnSearch:!0},c,a&&q(a,c));if(a){var b="/"==a[a.length-1]?a.substr(0,a.length- 9 | 1):a+"/";k[b]=e.extend({redirectTo:a},q(b,c))}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,b,f,n,q,v,l){function g(){var d=t(),m=r.current;if(d&&m&&d.$$route===m.$$route&&e.equals(d.pathParams,m.pathParams)&&!d.reloadOnSearch&&!x)m.params=d.params,e.copy(m.params,b),a.$broadcast("$routeUpdate",m);else if(d||m)x=!1,a.$broadcast("$routeChangeStart",d,m),(r.current= 10 | d)&&d.redirectTo&&(e.isString(d.redirectTo)?c.path(u(d.redirectTo,d.params)).search(d.params).replace():c.url(d.redirectTo(d.pathParams,c.path(),c.search())).replace()),f.when(d).then(function(){if(d){var a=e.extend({},d.resolve),c,b;e.forEach(a,function(d,c){a[c]=e.isString(d)?n.get(d):n.invoke(d)});e.isDefined(c=d.template)?e.isFunction(c)&&(c=c(d.params)):e.isDefined(b=d.templateUrl)&&(e.isFunction(b)&&(b=b(d.params)),b=l.getTrustedResourceUrl(b),e.isDefined(b)&&(d.loadedTemplateUrl=b,c=q.get(b, 11 | {cache:v}).then(function(a){return a.data})));e.isDefined(c)&&(a.$template=c);return f.all(a)}}).then(function(c){d==r.current&&(d&&(d.locals=c,e.copy(d.params,b)),a.$broadcast("$routeChangeSuccess",d,m))},function(c){d==r.current&&a.$broadcast("$routeChangeError",d,m,c)})}function t(){var a,b;e.forEach(k,function(f,k){var p;if(p=!b){var s=c.path();p=f.keys;var l={};if(f.regexp)if(s=f.regexp.exec(s)){for(var g=1,q=s.length;g 3 | 61 | 62 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/angular-sanitize_1.2.13/angular-sanitize.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.2.13 3 | (c) 2010-2014 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(p,h,q){'use strict';function E(a){var e=[];s(e,h.noop).chars(a);return e.join("")}function k(a){var e={};a=a.split(",");var d;for(d=0;d=c;d--)e.end&&e.end(f[d]);f.length=c}}var b,g,f=[],l=a;for(f.last=function(){return f[f.length-1]};a;){g=!0;if(f.last()&&x[f.last()])a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+f.last()+"[^>]*>","i"),function(b,a){a=a.replace(H,"$1").replace(I,"$1");e.chars&&e.chars(r(a));return""}),c("",f.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",b)===b&&(e.comment&&e.comment(a.substring(4,b)),a=a.substring(b+3),g=!1);else if(y.test(a)){if(b=a.match(y))a= 8 | a.replace(b[0],""),g=!1}else if(J.test(a)){if(b=a.match(z))a=a.substring(b[0].length),b[0].replace(z,c),g=!1}else K.test(a)&&(b=a.match(A))&&(a=a.substring(b[0].length),b[0].replace(A,d),g=!1);g&&(b=a.indexOf("<"),g=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),e.chars&&e.chars(r(g)))}if(a==l)throw L("badparse",a);l=a}c()}function r(a){if(!a)return"";var e=M.exec(a);a=e[1];var d=e[3];if(e=e[2])n.innerHTML=e.replace(//g,">")}function s(a,e){var d=!1,c=h.bind(a,a.push);return{start:function(a,g,f){a=h.lowercase(a);!d&&x[a]&&(d=a);d||!0!==C[a]||(c("<"),c(a),h.forEach(g,function(d,f){var g=h.lowercase(f),k="img"===a&&"src"===g||"background"===g;!0!==O[g]||!0===D[g]&&!e(d,k)||(c(" "),c(f),c('="'),c(B(d)),c('"'))}),c(f?"/>":">"))},end:function(a){a=h.lowercase(a);d||!0!==C[a]||(c(""));a==d&&(d=!1)},chars:function(a){d|| 10 | c(B(a))}}}var L=h.$$minErr("$sanitize"),A=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,z=/^<\s*\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^]*?)>/i,I=/]/,d=/^mailto:/;return function(c,b){function g(a){a&&m.push(E(a))}function f(a,c){m.push("');g(c);m.push("")}if(!c)return c;for(var l,k=c,m=[],n,p;l=k.match(e);)n=l[0],l[2]==l[3]&&(n="mailto:"+n),p=l.index,g(k.substr(0,p)),f(n,l[0].replace(d,"")),k=k.substring(p+l[0].length);g(k);return a(m.join(""))}}])})(window,window.angular); 14 | //# sourceMappingURL=angular-sanitize.min.js.map 15 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties-default-controllers.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | /* 21 | * String controller 22 | */ 23 | 24 | var KisBpmStringPropertyCtrl = [ '$scope', function ($scope) { 25 | 26 | $scope.shapeId = $scope.selectedShape.id; 27 | $scope.valueFlushed = false; 28 | /** Handler called when input field is blurred */ 29 | $scope.inputBlurred = function() { 30 | $scope.valueFlushed = true; 31 | if ($scope.property.value) { 32 | $scope.property.value = $scope.property.value.replace(/(<([^>]+)>)/ig,""); 33 | } 34 | $scope.updatePropertyInModel($scope.property); 35 | }; 36 | 37 | $scope.enterPressed = function(keyEvent) { 38 | if (keyEvent && keyEvent.which === 13) { 39 | keyEvent.preventDefault(); 40 | $scope.inputBlurred(); // we want to do the same as if the user would blur the input field 41 | } 42 | }; 43 | 44 | $scope.$on('$destroy', function controllerDestroyed() { 45 | if(!$scope.valueFlushed) { 46 | if ($scope.property.value) { 47 | $scope.property.value = $scope.property.value.replace(/(<([^>]+)>)/ig,""); 48 | } 49 | $scope.updatePropertyInModel($scope.property, $scope.shapeId); 50 | } 51 | }); 52 | 53 | }]; 54 | 55 | /* 56 | * Boolean controller 57 | */ 58 | 59 | var KisBpmBooleanPropertyCtrl = ['$scope', function ($scope) { 60 | 61 | $scope.changeValue = function() { 62 | if ($scope.property.key === 'oryx-defaultflow' && $scope.property.value) { 63 | var selectedShape = $scope.selectedShape; 64 | if (selectedShape) { 65 | var incomingNodes = selectedShape.getIncomingShapes(); 66 | if (incomingNodes && incomingNodes.length > 0) { 67 | // get first node, since there can be only one for a sequence flow 68 | var rootNode = incomingNodes[0]; 69 | var flows = rootNode.getOutgoingShapes(); 70 | if (flows && flows.length > 1) { 71 | // in case there are more flows, check if another flow is already defined as default 72 | for (var i = 0; i < flows.length; i++) { 73 | if (flows[i].resourceId != selectedShape.resourceId) { 74 | var defaultFlowProp = flows[i].properties['oryx-defaultflow']; 75 | if (defaultFlowProp) { 76 | flows[i].setProperty('oryx-defaultflow', false, true); 77 | } 78 | } 79 | } 80 | } 81 | } 82 | } 83 | } 84 | $scope.updatePropertyInModel($scope.property); 85 | }; 86 | 87 | }]; 88 | 89 | /* 90 | * Text controller 91 | */ 92 | 93 | var KisBpmTextPropertyCtrl = [ '$scope', '$modal', function($scope, $modal) { 94 | 95 | var opts = { 96 | template: 'editor-app/configuration/properties/text-popup.html?version=' + Date.now(), 97 | scope: $scope 98 | }; 99 | 100 | // Open the dialog 101 | $modal(opts); 102 | }]; 103 | 104 | var KisBpmTextPropertyPopupCtrl = ['$scope', function($scope) { 105 | 106 | $scope.save = function() { 107 | $scope.updatePropertyInModel($scope.property); 108 | $scope.close(); 109 | }; 110 | 111 | $scope.close = function() { 112 | $scope.property.mode = 'read'; 113 | $scope.$hide(); 114 | }; 115 | }]; -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/libs/angular-dragdrop.min-1.0.3.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Implementing Drag and Drop functionality in AngularJS is easier than ever. 3 | * Demo: http://codef0rmer.github.com/angular-dragdrop/ 4 | * 5 | * @version 1.0.3 6 | * 7 | * (c) 2013 Amit Gharat a.k.a codef0rmer - amitgharat.wordpress.com 8 | */ 9 | var jqyoui=angular.module("ngDragDrop",[]).service("ngDragDropService",["$timeout","$parse",function($timeout,$parse){this.callEventCallback=function(scope,callbackName,event,ui){if(!callbackName){return}var args=[event,ui];var match=callbackName.match(/^(.+)\((.+)\)$/);if(match!==null){callbackName=match[1];values=eval("["+match[0].replace(/^(.+)\(/,"").replace(/\)/,"")+"]");args.push.apply(args,values)}scope[callbackName].apply(scope,args)};this.invokeDrop=function(e,t,n,r){var i="",s="",o={},u={},a=null,f={},l={},c,h,p=null,d=t.scope(),v=e.scope();i=e.attr("ng-model");s=t.attr("ng-model");c=v.$eval(i);h=d.$eval(s);p=t.find("[jqyoui-draggable]:last");u=d.$eval(t.attr("jqyoui-droppable"))||[];o=v.$eval(e.attr("jqyoui-draggable"))||[];o.index=this.fixIndex(v,o,c);u.index=this.fixIndex(d,u,h);a=angular.isArray(c)?o.index:null;f=angular.isArray(c)?c[a]:c;if(angular.isArray(h)&&u&&u.index!==undefined){l=h[u.index]}else if(!angular.isArray(h)){l=h}else{l={}}if(o.animate===true){this.move(e,p.length>0?p:t,null,"fast",u,null);this.move(p.length>0&&!u.multiple?p:[],e.parent("[jqyoui-droppable]"),jqyoui.startXY,"fast",u,function(){$timeout(function(){e.css({position:"relative",left:"",top:""});p.css({position:"relative",left:"",top:""});this.mutateDraggable(v,u,o,i,s,l,e);this.mutateDroppable(d,u,o,s,f,a);this.callEventCallback(d,u.onDrop,n,r)}.bind(this))}.bind(this))}else{$timeout(function(){this.mutateDraggable(v,u,o,i,s,l,e);this.mutateDroppable(d,u,o,s,f,a);this.callEventCallback(d,u.onDrop,n,r)}.bind(this))}};this.move=function(e,t,n,r,i,s){if(e.length===0){if(s){window.setTimeout(function(){s()},300)}return false}var o=9999,u=e.offset(),a=t&&t.is(":visible");if(n===null&&t.length>0){if(t.attr("jqyoui-draggable")!==undefined&&t.attr("ng-model")!==undefined&&t.is(":visible")&&i&&i.multiple){n=t.offset();if(i.stack===false){n.left+=t.outerWidth(true)}else{n.top+=t.outerHeight(true)}}else{n=t.css({visibility:"hidden",display:"block"}).offset();t.css({visibility:"",display:a?"":"none"})}}e.css({position:"absolute","z-index":o}).css(u).animate(n,r,function(){if(s)s()})};this.mutateDroppable=function(e,t,n,r,i,s){var o=e.$eval(r);e.__dragItem=i;if(angular.isArray(o)){if(t&&t.index>=0){o[t.index]=i}else{o.push(i)}if(n&&n.placeholder===true){o[o.length-1]["jqyoui_pos"]=s}}else{$parse(r+" = __dragItem")(e);if(n&&n.placeholder===true){o["jqyoui_pos"]=s}}};this.mutateDraggable=function(e,t,n,r,i,s,o){var u=angular.equals(angular.copy(s),{}),a=e.$eval(r);e.__dropItem=s;if(n&&n.placeholder){if(n.placeholder!="keep"){if(angular.isArray(a)&&n.index!==undefined){a[n.index]=s}else{$parse(r+" = __dropItem")(e)}}}else{if(angular.isArray(a)){if(u){if(n&&n.placeholder!==true&&n.placeholder!=="keep"){a.splice(n.index,1)}}else{a[n.index]=s}}else{$parse(r+" = __dropItem")(e);if(e.$parent){$parse(r+" = __dropItem")(e.$parent)}}}o.css({"z-index":"",left:"",top:""})};this.fixIndex=function(e,t,n){if(t.applyFilter&&angular.isArray(n)&&n.length>0){var r=e[t.applyFilter](),i=r[t.index],s=undefined;n.forEach(function(e,t){if(angular.equals(e,i)){s=t}});return s}return t.index}}]).directive("jqyouiDraggable",["ngDragDropService",function(e){return{require:"?jqyouiDroppable",restrict:"A",link:function(t,n,r){var i,s;var o=function(o,u){if(o){i=t.$eval(n.attr("jqyoui-draggable"))||[];n.draggable({disabled:false}).draggable(t.$eval(r.jqyouiOptions)||{}).draggable({start:function(n,r){s=angular.element(this).css("z-index");angular.element(this).css("z-index",99999);jqyoui.startXY=angular.element(this).offset();e.callEventCallback(t,i.onStart,n,r)},stop:function(n,r){angular.element(this).css("z-index",s);e.callEventCallback(t,i.onStop,n,r)},drag:function(n,r){e.callEventCallback(t,i.onDrag,n,r)}})}else{n.draggable({disabled:true})}};t.$watch(function(){return t.$eval(r.drag)},o);o()}}}]).directive("jqyouiDroppable",["ngDragDropService",function(e){return{restrict:"A",priority:1,link:function(t,n,r){var i=function(i,s){if(i){n.droppable({disabled:false}).droppable(t.$eval(r.jqyouiOptions)||{}).droppable({over:function(n,r){var i=t.$eval(angular.element(this).attr("jqyoui-droppable"))||[];e.callEventCallback(t,i.onOver,n,r)},out:function(n,r){var i=t.$eval(angular.element(this).attr("jqyoui-droppable"))||[];e.callEventCallback(t,i.onOut,n,r)},drop:function(t,n){e.invokeDrop(angular.element(n.draggable),angular.element(this),t,n)}})}else{n.droppable({disabled:true})}};t.$watch(function(){return t.$eval(r.drop)},i);i()}}}]) 10 | -------------------------------------------------------------------------------- /src/test/resources/processes/SimpleProcess.bpmn20.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/configuration/properties-assignment-controller.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | /* 21 | * Assignment 22 | */ 23 | var KisBpmAssignmentCtrl = [ '$scope', '$modal', function($scope, $modal) { 24 | 25 | // Config for the modal window 26 | var opts = { 27 | template: 'editor-app/configuration/properties/assignment-popup.html?version=' + Date.now(), 28 | scope: $scope 29 | }; 30 | 31 | // Open the dialog 32 | $modal(opts); 33 | }]; 34 | 35 | var KisBpmAssignmentPopupCtrl = [ '$scope', function($scope) { 36 | 37 | // Put json representing assignment on scope 38 | if ($scope.property.value !== undefined && $scope.property.value !== null 39 | && $scope.property.value.assignment !== undefined 40 | && $scope.property.value.assignment !== null) 41 | { 42 | $scope.assignment = $scope.property.value.assignment; 43 | } else { 44 | $scope.assignment = {}; 45 | } 46 | 47 | if ($scope.assignment.candidateUsers == undefined || $scope.assignment.candidateUsers.length == 0) 48 | { 49 | $scope.assignment.candidateUsers = [{value: ''}]; 50 | } 51 | 52 | // Click handler for + button after enum value 53 | var userValueIndex = 1; 54 | $scope.addCandidateUserValue = function(index) { 55 | $scope.assignment.candidateUsers.splice(index + 1, 0, {value: 'value ' + userValueIndex++}); 56 | }; 57 | 58 | // Click handler for - button after enum value 59 | $scope.removeCandidateUserValue = function(index) { 60 | $scope.assignment.candidateUsers.splice(index, 1); 61 | }; 62 | 63 | if ($scope.assignment.candidateGroups == undefined || $scope.assignment.candidateGroups.length == 0) 64 | { 65 | $scope.assignment.candidateGroups = [{value: ''}]; 66 | } 67 | 68 | var groupValueIndex = 1; 69 | $scope.addCandidateGroupValue = function(index) { 70 | $scope.assignment.candidateGroups.splice(index + 1, 0, {value: 'value ' + groupValueIndex++}); 71 | }; 72 | 73 | // Click handler for - button after enum value 74 | $scope.removeCandidateGroupValue = function(index) { 75 | $scope.assignment.candidateGroups.splice(index, 1); 76 | }; 77 | 78 | $scope.save = function() { 79 | 80 | $scope.property.value = {}; 81 | handleAssignmentInput($scope); 82 | $scope.property.value.assignment = $scope.assignment; 83 | 84 | $scope.updatePropertyInModel($scope.property); 85 | $scope.close(); 86 | }; 87 | 88 | // Close button handler 89 | $scope.close = function() { 90 | handleAssignmentInput($scope); 91 | $scope.property.mode = 'read'; 92 | $scope.$hide(); 93 | }; 94 | 95 | var handleAssignmentInput = function($scope) { 96 | if ($scope.assignment.candidateUsers) 97 | { 98 | var emptyUsers = true; 99 | var toRemoveIndexes = []; 100 | for (var i = 0; i < $scope.assignment.candidateUsers.length; i++) 101 | { 102 | if ($scope.assignment.candidateUsers[i].value != '') 103 | { 104 | emptyUsers = false; 105 | } 106 | else 107 | { 108 | toRemoveIndexes[toRemoveIndexes.length] = i; 109 | } 110 | } 111 | 112 | for (var i = 0; i < toRemoveIndexes.length; i++) 113 | { 114 | $scope.assignment.candidateUsers.splice(toRemoveIndexes[i], 1); 115 | } 116 | 117 | if (emptyUsers) 118 | { 119 | $scope.assignment.candidateUsers = undefined; 120 | } 121 | } 122 | 123 | if ($scope.assignment.candidateGroups) 124 | { 125 | var emptyGroups = true; 126 | var toRemoveIndexes = []; 127 | for (var i = 0; i < $scope.assignment.candidateGroups.length; i++) 128 | { 129 | if ($scope.assignment.candidateGroups[i].value != '') 130 | { 131 | emptyGroups = false; 132 | } 133 | else 134 | { 135 | toRemoveIndexes[toRemoveIndexes.length] = i; 136 | } 137 | } 138 | 139 | for (var i = 0; i < toRemoveIndexes.length; i++) 140 | { 141 | $scope.assignment.candidateGroups.splice(toRemoveIndexes[i], 1); 142 | } 143 | 144 | if (emptyGroups) 145 | { 146 | $scope.assignment.candidateGroups = undefined; 147 | } 148 | } 149 | }; 150 | }]; -------------------------------------------------------------------------------- /src/main/resources/static/workflow/editor-app/eventbus.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Activiti Modeler component part of the Activiti project 3 | * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | var KISBPM = KISBPM || {}; 20 | 21 | /** Inspired by https://github.com/krasimir/EventBus/blob/master/src/EventBus.js */ 22 | KISBPM.eventBus = { 23 | 24 | /** Event fired when the editor is loaded and ready */ 25 | EVENT_TYPE_EDITOR_READY: 'event-type-editor-ready', 26 | 27 | /** Event fired when a selection is made on the canvas. */ 28 | EVENT_TYPE_SELECTION_CHANGE: 'event-type-selection-change', 29 | 30 | /** Event fired when a toolbar button has been clicked. */ 31 | EVENT_TYPE_TOOLBAR_BUTTON_CLICKED: 'event-type-toolbar-button-clicked', 32 | 33 | /** Event fired when a stencil item is dropped on the canvas. */ 34 | EVENT_TYPE_ITEM_DROPPED: 'event-type-item-dropped', 35 | 36 | /** Event fired when a property value is changed. */ 37 | EVENT_TYPE_PROPERTY_VALUE_CHANGED: 'event-type-property-value-changed', 38 | 39 | /** Event fired on double click in canvas. */ 40 | EVENT_TYPE_DOUBLE_CLICK: 'event-type-double-click', 41 | 42 | /** Event fired on a mouse out */ 43 | EVENT_TYPE_MOUSE_OUT: 'event-type-mouse-out', 44 | 45 | /** Event fired on a mouse over */ 46 | EVENT_TYPE_MOUSE_OVER: 'event-type-mouse-over', 47 | 48 | /** Event fired when a model is saved. */ 49 | EVENT_TYPE_MODEL_SAVED: 'event-type-model-saved', 50 | 51 | /** Event fired when the quick menu buttons should be hidden. */ 52 | EVENT_TYPE_HIDE_SHAPE_BUTTONS: 'event-type-hide-shape-buttons', 53 | 54 | /** A mapping for storing the listeners*/ 55 | listeners: {}, 56 | 57 | /** The Oryx editor, which is stored locally to send events to */ 58 | editor: null, 59 | 60 | /** 61 | * Add an event listener to the event bus, listening to the event with the provided type. 62 | * Type and callback are mandatory parameters. 63 | * 64 | * Provide scope parameter if it is important that the callback is executed 65 | * within a specific scope. 66 | */ 67 | addListener: function (type, callback, scope) { 68 | 69 | // Add to the listeners map 70 | if (typeof this.listeners[type] !== "undefined") { 71 | this.listeners[type].push({scope: scope, callback: callback}); 72 | } else { 73 | this.listeners[type] = [ 74 | {scope: scope, callback: callback} 75 | ]; 76 | } 77 | }, 78 | 79 | /** 80 | * Removes the provided event listener. 81 | */ 82 | removeListener: function (type, callback, scope) { 83 | if (typeof this.listeners[type] != "undefined") { 84 | var numOfCallbacks = this.listeners[type].length; 85 | var newArray = []; 86 | for (var i = 0; i < numOfCallbacks; i++) { 87 | var listener = this.listeners[type][i]; 88 | if (listener.scope === scope && listener.callback === callback) { 89 | // Do nothing, this is the listener and doesn't need to survive 90 | } else { 91 | newArray.push(listener); 92 | } 93 | } 94 | this.listeners[type] = newArray; 95 | } 96 | }, 97 | 98 | hasListener:function(type, callback, scope) { 99 | if(typeof this.listeners[type] != "undefined") { 100 | var numOfCallbacks = this.listeners[type].length; 101 | if(callback === undefined && scope === undefined){ 102 | return numOfCallbacks > 0; 103 | } 104 | for(var i=0; i 0) { 105 | $scope.property.value = {}; 106 | $scope.property.value.sequenceFlowOrder = []; 107 | 108 | for (var flowIndex=0; flowIndex < $scope.outgoingSequenceFlow.length; flowIndex++) { 109 | $scope.property.value.sequenceFlowOrder.push($scope.outgoingSequenceFlow[flowIndex].id); 110 | } 111 | } else { 112 | $scope.property.value = null; 113 | } 114 | 115 | $scope.updatePropertyInModel($scope.property); 116 | $scope.close(); 117 | }; 118 | 119 | // Cancel click handler 120 | $scope.cancel = function() { 121 | $scope.close(); 122 | }; 123 | 124 | // Close button handler 125 | $scope.close = function() { 126 | $scope.property.mode = 'read'; 127 | $scope.$hide(); 128 | }; 129 | 130 | }]; -------------------------------------------------------------------------------- /src/main/resources/static/workflow/diagram-viewer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 24 | 25 | 26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | 129 | 130 | 131 | --------------------------------------------------------------------------------