Commit 8a145c24 authored by Vladimir Baranov's avatar Vladimir Baranov

1.2.0

parents 8b2dfb8c 35cdd5d4
.pyc .pyc
.pyo .pyo
.nvmrc
logs/* logs/*
!.gitkeep !.gitkeep
tmp tmp
......
.pyc
.pyo
logs/*
!.gitkeep
tmp
node_modules/
.idea
bower_components/
!dist/bower_components/
# Thanks to Octocat https://gist.github.com/octocat/9257657
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Python Specific from github
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
# C extensions
# Distribution / packaging
.Python
env/
build/
develop-eggs/
#dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
# Translations
*.mo
*.pot
# Sphinx documentation
docs/_build/
# PyBuilder
target/
coverage/
sync
*.rdb
api-docs/
api-docs-source/
\ No newline at end of file
...@@ -82,7 +82,7 @@ module.exports = function (grunt) { ...@@ -82,7 +82,7 @@ module.exports = function (grunt) {
{expand: true, cwd: 'app/styles/images/', src: '*', dest: 'dist/css/images/', flatten: true}, {expand: true, cwd: 'app/styles/images/', src: '*', dest: 'dist/css/images/', flatten: true},
{expand: true, cwd: 'app/bower_components/bootstrap/dist/fonts/', src: '*', dest: 'dist/fonts/', flatten: true, filter: 'isFile'}, {expand: true, cwd: 'app/bower_components/bootstrap/dist/fonts/', src: '*', dest: 'dist/fonts/', flatten: true, filter: 'isFile'},
{expand: true, cwd: 'app/bower_components/jquery/dist/', src: 'jquery.min.js', dest: 'dist/bower_components/', flatten: true, filter: 'isFile'}, {expand: true, cwd: 'app/bower_components/jquery/dist/', src: 'jquery.min.js', dest: 'dist/bower_components/', flatten: true, filter: 'isFile'},
{expand: true, cwd: 'app/bower_components/angular/', src: 'angular.min.js', dest: 'dist/bower_components/', flatten: true, filter: 'isFile'} {expand: true, cwd: 'app/bower_components/angular/', src: 'angular.js', dest: 'dist/bower_components/', flatten: true, filter: 'isFile'}
] ]
}, },
local_prod: { local_prod: {
...@@ -124,19 +124,28 @@ module.exports = function (grunt) { ...@@ -124,19 +124,28 @@ module.exports = function (grunt) {
"app/zetalib/interceptors.js", "app/zetalib/interceptors.js",
"app/zetalib/general.js", "app/zetalib/general.js",
"app/zetalib/form_service.js", "app/zetalib/form_service.js",
"app/zetalib/form_constraints.js",
"app/zetalib/error_service.js",
"app/zetalib/action_service.js",
"app/zetalib/socket.js",
"app/zetalib/utils_service.js",
"app/shared/directives.js", "app/shared/directives.js",
"app/components/auth/auth_controller.js", "app/components/auth/auth_controller.js",
"app/components/auth/auth_service.js", "app/components/auth/auth_service.js",
"app/components/dashboard/dashboard_controller.js", "app/components/dashboard/dashboard_controller.js",
"app/components/crud/crud_controller.js", "app/components/crud/crud_controller.js",
"app/components/crud/crud_widgets.js",
"app/components/debug/debug_controller.js", "app/components/debug/debug_controller.js",
"app/components/devSettings/devSettings_controller.js", "app/components/devSettings/devSettings_controller.js",
"app/components/error_pages/error_controller.js", "app/components/error_pages/error_controller.js",
"app/components/wf/wf_controller.js", "app/components/wf/wf_controller.js",
"app/components/version/version.js", "app/components/version/version.js",
"app/components/version/interpolate-filter.js", "app/components/version/interpolate-filter.js",
"app/components/version/version-directive.js" "app/components/version/version-directive.js",
"app/components/messaging/messaging_service.js",
"app/components/messaging/messaging.js"
], ],
nonull: true,
dest: 'dist/app.js' dest: 'dist/app.js'
}, },
components: { components: {
...@@ -148,6 +157,8 @@ module.exports = function (grunt) { ...@@ -148,6 +157,8 @@ module.exports = function (grunt) {
"app/bower_components/angular-resource/angular-resource.js", "app/bower_components/angular-resource/angular-resource.js",
"app/bower_components/angular-bootstrap/ui-bootstrap.js", "app/bower_components/angular-bootstrap/ui-bootstrap.js",
"app/bower_components/angular-bootstrap/ui-bootstrap-tpls.js", "app/bower_components/angular-bootstrap/ui-bootstrap-tpls.js",
"app/bower_components/showdown/dist/showdown.min.js",
"app/bower_components/angular-markdown-filter/markdown.js",
"app/bower_components/angular-sanitize/angular-sanitize.js", "app/bower_components/angular-sanitize/angular-sanitize.js",
"app/bower_components/tv4/tv4.js", "app/bower_components/tv4/tv4.js",
"app/bower_components/objectpath/lib/ObjectPath.js", "app/bower_components/objectpath/lib/ObjectPath.js",
...@@ -159,7 +170,8 @@ module.exports = function (grunt) { ...@@ -159,7 +170,8 @@ module.exports = function (grunt) {
"app/bower_components/metisMenu/dist/metisMenu.js", "app/bower_components/metisMenu/dist/metisMenu.js",
"app/bower_components/Chart.js/Chart.js", "app/bower_components/Chart.js/Chart.js",
"app/bower_components/intro.js/intro.js", "app/bower_components/intro.js/intro.js",
"app/bower_components/moment/min/moment.min.js" "app/bower_components/moment/min/moment.min.js",
"app/bower_components/toastr/toastr.min.js"
], ],
dest: 'dist/bower_components/components.js' dest: 'dist/bower_components/components.js'
}, },
...@@ -173,7 +185,8 @@ module.exports = function (grunt) { ...@@ -173,7 +185,8 @@ module.exports = function (grunt) {
"app/bower_components/angular-loading-bar/build/loading-bar.min.css", "app/bower_components/angular-loading-bar/build/loading-bar.min.css",
"app/bower_components/font-awesome/css/font-awesome.min.css", "app/bower_components/font-awesome/css/font-awesome.min.css",
"app/bower_components/intro.js/intro.css", "app/bower_components/intro.js/intro.css",
"app/bower_components/intro.js/themes/introjs-nassim.css" "app/bower_components/intro.js/themes/introjs-nassim.css",
"app/bower_components/toastr/toastr.min.css"
] ]
} }
}, },
...@@ -187,7 +200,9 @@ module.exports = function (grunt) { ...@@ -187,7 +200,9 @@ module.exports = function (grunt) {
'app/shared/scripts/theme.js', 'app/shared/scripts/theme.js',
'app/shared/directives.js', 'app/shared/directives.js',
'app/components/**/*controller.js', 'app/components/**/*controller.js',
'app/components/**/*service.js' 'app/components/**/*service.js',
"app/components/messaging/messaging_service.js",
"app/components/messaging/messaging.js"
], ],
dest: 'dist/<%= grunt.branchname %>/app.js' dest: 'dist/<%= grunt.branchname %>/app.js'
}, },
...@@ -311,7 +326,7 @@ module.exports = function (grunt) { ...@@ -311,7 +326,7 @@ module.exports = function (grunt) {
dev: { dev: {
files: { files: {
'app/index.html': 'app/main.html', 'app/index.html': 'app/main.html',
'app/app.js': 'app/main.js', 'app/app.js': 'app/main.js'
} }
}, },
prod: { prod: {
......
0.7.2 1.2.0
\ No newline at end of file
This diff is collapsed.
/**
* outline styles
*/
.djs-outline {
fill: none;
visibility: hidden;
}
.djs-element.hover .djs-outline,
.djs-element.selected .djs-outline {
visibility: visible;
shape-rendering: crispEdges;
stroke-dasharray: 3,3;
}
.djs-element.selected .djs-outline {
stroke: #8888FF;
stroke-width: 1px;
}
.djs-element.hover .djs-outline {
stroke: #FF8888;
stroke-width: 1px;
}
.djs-shape.connect-ok .djs-visual > :nth-child(1) {
fill: #DCFECC /* light-green */ !important;
}
.djs-shape.connect-not-ok .djs-visual > :nth-child(1),
.djs-shape.drop-not-ok .djs-visual > :nth-child(1) {
fill: #f9dee5 /* light-red */ !important;
}
.djs-shape.new-parent .djs-visual > :nth-child(1) {
fill: #F7F9FF !important;
}
svg.drop-not-ok {
background: #f9dee5 /* light-red */ !important;
}
svg.new-parent {
background: #F7F9FF /* light-blue */ !important;
}
.djs-connection.connect-ok .djs-visual > :nth-child(1),
.djs-connection.drop-ok .djs-visual > :nth-child(1) {
stroke: #90DD5F /* light-green */ !important;
}
.djs-connection.connect-not-ok .djs-visual > :nth-child(1),
.djs-connection.drop-not-ok .djs-visual > :nth-child(1) {
stroke: #E56283 /* light-red */ !important;
}
.drop-not-ok,
.connect-not-ok {
cursor: not-allowed;
}
.djs-element.attach-ok .djs-visual > :nth-child(1) {
stroke-width: 5px !important;
stroke: rgba(255, 116, 0, 0.7);
}
/**
* Selection box style
*
*/
.djs-lasso-overlay {
fill: rgb(255, 116, 0);
fill-opacity: 0.1;
stroke-dasharray: 5 1 3 1;
stroke: rgb(255, 116, 0);
shape-rendering: crispEdges;
pointer-events: none;
}
/**
* Resize styles
*/
.djs-resize-overlay {
fill: white;
fill-opacity: 0.8;
stroke-dasharray: 5 1 3 1;
stroke: rgb(255, 116, 0);
pointer-events: none;
}
.djs-resizer-hit {
fill: none;
pointer-events: all;
}
.djs-resizer-visual {
fill: white;
stroke-width: 1px;
stroke: black;
shape-rendering: crispEdges;
stroke-opacity: 0.2;
}
.djs-cursor-resize-nwse,
.djs-resizer-nw,
.djs-resizer-se {
cursor: nwse-resize;
}
.djs-cursor-resize-nesw,
.djs-resizer-ne,
.djs-resizer-sw {
cursor: nesw-resize;
}
.djs-shape.djs-resizing > .djs-outline {
visibility: hidden !important;
}
.djs-shape.djs-resizing > .djs-resizer {
visibility: hidden;
}
.djs-dragger > .djs-resizer {
visibility: hidden;
}
/**
* drag styles
*/
.djs-dragger {
fill: white;
fill-opacity: 0.6;
stroke: #333;
}
.djs-dragger .djs-visual > :first-child {
stroke: rgb(255, 116, 0) !important;
}
.djs-dragging {
opacity: 0.3;
}
.djs-dragging,
.djs-dragging > * {
pointer-events: none !important;
}
.djs-dragging .djs-context-pad,
.djs-dragging .djs-outline {
display: none !important;
}
/**
* no pointer events for visual
*/
.djs-visual,
.djs-outline {
pointer-events: none;
}
/**
* all pointer events for hit shape
*/
.djs-shape .djs-hit {
pointer-events: all;
}
.djs-connection .djs-hit {
pointer-events: stroke;
}
/**
* shape / connection basic styles
*/
.djs-connection .djs-visual {
stroke-width: 2px;
fill: none;
}
.djs-cursor-grab {
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: grab;
}
.djs-cursor-grabbing {
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: grabbing;
}
.djs-cursor-crosshair {
cursor: crosshair;
}
.djs-cursor-move {
cursor: move;
}
.djs-cursor-resize-ns {
cursor: ns-resize;
}
.djs-cursor-resize-ew {
cursor: ew-resize;
}
/**
* snapping
*/
.djs-snap-line {
stroke: rgb(255, 195, 66);
stroke: rgba(255, 195, 66, 0.50);
stroke-linecap: round;
stroke-width: 2px;
pointer-events: none;
}
/**
* snapping
*/
.djs-crosshair {
stroke: #555;
stroke-linecap: round;
stroke-width: 1px;
pointer-events: none;
shape-rendering: crispEdges;
stroke-dasharray: 5, 5;
}
/**
* palette
*/
.djs-palette {
position: absolute;
left: 20px;
top: 20px;
}
.djs-palette:not(.open) {
overflow: hidden;
}
.djs-palette .entry,
.djs-palette .djs-palette-toggle {
width: 46px;
height: 46px;
line-height: 46px;
cursor: default;
}
.djs-palette .separator {
margin: 3px 5px 5px 5px;
border: none;
border-top: solid 1px #DDD;
}
.djs-palette .entry:before {
vertical-align: middle;
}
.djs-palette .djs-palette-toggle {
cursor: pointer;
}
.djs-palette .entry,
.djs-palette .djs-palette-toggle {
color: #333;
font-size: 30px;
text-align: center;
}
.djs-palette .entry img {
max-width: 100%;
}
.djs-palette.open .djs-palette-toggle {
height: 10px;
}
.djs-palette:not(.open) .djs-palette-entries {
display: none;
}
confirm
.djs-palette .djs-palette-toggle:hover {
background: #666;
}
.djs-palette .entry:hover {
color: rgb(255, 116, 0);
}
.highlighted-entry {
color: rgb(255, 116, 0) !important;
}
confirm
/**
* context-pad
*/
.djs-overlay-context-pad {
width: 72px;
}
.djs-context-pad {
position: absolute;
display: none;
pointer-events: none;
}
.djs-context-pad .entry {
width: 22px;
height: 22px;
text-align: center;
display: inline-block;
font-size: 22px;
margin: 0 2px 2px 0;
border-radius: 3px;
cursor: default;
background-color: #FEFEFE;
box-shadow: 0 0 2px 1px #FEFEFE;
pointer-events: all;
}
.djs-context-pad .entry:before {
vertical-align: top;
}
.djs-context-pad .entry:hover {
background: rgb(255, 252, 176);
}
.djs-context-pad.open {
display: block;
}
/**
* popup styles
*/
.djs-popup .entry {
line-height: 20px;
white-space: nowrap;
border: solid 1px transparent;
cursor: default;
}
/* larger font for prefixed icons */
.djs-popup .entry:before {
vertical-align: middle;
font-size: 20px;
}
.djs-popup .entry > span {
vertical-align: middle;
font-size: 14px;
}
.djs-popup .entry:hover,
.djs-popup .entry.active:hover {
background: rgb(255, 252, 176);
}
.djs-popup .entry.disabled {
background: inherit;
}
.djs-popup .entry.active {
color: rgb(255, 116, 0);
border: solid 1px rgb(255, 116, 0);
border-radius: 3px;
background-color: #F6F6F6;
}
.djs-popup-body .entry {
padding: 2px 10px 2px 5px;
}
.djs-popup-header .entry {
display: inline-block;
padding: 2px 3px 2px 3px;
}
.djs-popup-body .entry > span {
margin-left: 5px;
}
.djs-popup-body {
background-color: #FEFEFE;
}
.djs-popup-header {
border-bottom: 1px solid #DDD;
}
.djs-popup-header .entry {
margin: 1px;
margin-left: 3px;
}
.djs-popup-header .entry:last-child {
margin-right: 3px;
}
/**
* popup / palette styles
*/
.djs-popup, .djs-palette {
background: #FAFAFA;
border: solid 1px #CCC;
border-radius: 2px;
box-shadow: 0 1px 2px rgba(0,0,0,0.3);
}
/**
* touch
*/
.djs-shape,
.djs-connection {
touch-action: none;
}
.djs-segment-dragger,
.djs-bendpoint {
display: none;
}
/**
* bendpoints
*/
.djs-segment-dragger .djs-visual {
fill: rgba(255, 255, 121, 0.2);
stroke-width: 1px;
stroke-opacity: 1;
stroke: rgba(255, 255, 121, 0.3);
}
.djs-bendpoint .djs-visual {
fill: rgba(255, 255, 121, 0.8);
stroke-width: 1px;
stroke-opacity: 0.5;
stroke: black;
}
.djs-segment-dragger:hover,
.djs-bendpoints.hover .djs-segment-dragger,
.djs-bendpoints.selected .djs-segment-dragger,
.djs-bendpoint:hover,
.djs-bendpoints.hover .djs-bendpoint,
.djs-bendpoints.selected .djs-bendpoint {
display: block;
}
.djs-drag-active .djs-bendpoints * {
display: none;
}
.djs-bendpoints:not(.hover) .floating {
display: none;
}
.djs-segment-dragger:hover .djs-visual,
.djs-segment-dragger.djs-dragging .djs-visual,
.djs-bendpoint:hover .djs-visual,
.djs-bendpoint.floating .djs-visual {
fill: yellow;
stroke-opacity: 0.5;
stroke: black;
}
.djs-bendpoint.floating .djs-hit {
pointer-events: none;
}
.djs-segment-dragger .djs-hit,
.djs-bendpoint .djs-hit {
pointer-events: all;
fill: none;
}
.djs-segment-dragger.horizontal .djs-hit {
cursor: ns-resize;
}
.djs-segment-dragger.vertical .djs-hit {
cursor: ew-resize;
}
.djs-segment-dragger.djs-dragging .djs-hit {
pointer-events: none;
}
.djs-updating,
.djs-updating > * {
pointer-events: none !important;
}
.djs-updating .djs-context-pad,
.djs-updating .djs-outline,
.djs-updating .djs-bendpoint,
.connect-ok .djs-bendpoint,
.connect-not-ok .djs-bendpoint,
.drop-ok .djs-bendpoint,
.drop-not-ok .djs-bendpoint {
display: none !important;
}
.djs-segment-dragger.djs-dragging,
.djs-bendpoint.djs-dragging {
display: block;
opacity: 1.0;
}
.djs-segment-dragger.djs-dragging .djs-visual,
.djs-bendpoint.djs-dragging .djs-visual {
fill: yellow;
stroke-opacity: 0.5;
}
/**
* tooltips
*/
.djs-tooltip-error {
font-size: 11px;
line-height: 18px;
text-align: left;
padding: 5px;
opacity: 0.7;
}
.djs-tooltip-error > * {
width: 160px;
background: rgb(252, 236, 240);
color: rgb(158, 76, 76);
padding: 3px 7px;
box-shadow: 0 1px 2px rgba(0,0,0, 0.2);
border-radius: 5px;
border-left: solid 5px rgb(174, 73, 73);
}
.djs-tooltip-error:hover {
opacity: 1;
}
{
"name": "Magic",
"prefix": "magic",
"uri": "http://magic",
"xml": {
"tagAlias": "lowerCase"
},
"associations": [],
"types": [
{
"name": "BewitchedStartEvent",
"extends": [
"bpmn:StartEvent"
],
"properties": [
{
"name": "spell",
"isAttr": true,
"type": "String"
},
]
},
]
}
\ No newline at end of file
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Ulakbus İş Akışı Düzenleme Paneli</title>
<link rel="stylesheet" href="css/diagram-js.css"/>
<link rel="stylesheet" href="vendor/bpmn-font/css/bpmn-embedded.css"/>
<link rel="stylesheet" href="css/app.css"/>
<link rel="icon" type="image/png" href="../img/favicon.ico">
<link rel="stylesheet" href="../bower_components/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="../app.css">
<link href="../styles/roboto/roboto.css" rel="stylesheet">
<link rel="stylesheet" href="../bower_components/font-awesome/css/font-awesome.min.css" type="text/css">
</head>
<body>
<nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0; min-height: 45px;">
<div class="navbar-header">
<div class="brand">
<a href="/#/dashboard" class="logo"><img src="../img/brand-logo.png"/></a>
</div>
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- /.navbar-header -->
<header-notification></header-notification>
</nav>
<div class="content" id="js-drop-zone">
<div class="message intro">
<div class="note">
Düzenlemek istediğiniz BPMN diagramını sürükleyip bırakın ya da <a id="js-create-diagram" href>yeni bir BPMN
diagramı oluşturun.</a>
</div>
</div>
<div class="message error">
<div class="note">
<p>BPMN 2.0 diagramı gösterilemiyor.</p>
<div class="details">
<span>Problemin sebebi;</span>
<pre></pre>
</div>
</div>
</div>
<div class="canvas" id="js-canvas"></div>
<div id="js-properties-panel"></div>
</div>
<ul class="buttons">
<li>
<a id="js-save-diagram" href title="download BPMN diagram">
Kaydet
</a>
</li>
<li>
indir
</li>
<li>
<a id="js-download-diagram" href title="download BPMN diagram">
BPMN diagram olarak
</a>
</li>
<li>
<a id="js-download-svg" href title="download as SVG image">
SVG resmi olarak
</a>
</li>
</ul>
<script src="index.js"></script>
</body>
</html>
This diff is collapsed.
This diff is collapsed.
@font-face {
font-family: 'bpmn';
src: url('../font/bpmn.eot?70672887');
src: url('../font/bpmn.eot?70672887#iefix') format('embedded-opentype'),
url('../font/bpmn.woff?70672887') format('woff'),
url('../font/bpmn.ttf?70672887') format('truetype'),
url('../font/bpmn.svg?70672887#bpmn') format('svg');
font-weight: normal;
font-style: normal;
}
/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
/*
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: 'bpmn';
src: url('../font/bpmn.svg?70672887#bpmn') format('svg');
}
}
*/
[class^="bpmn-icon-"]:before, [class*=" bpmn-icon-"]:before {
font-family: "bpmn";
font-style: normal;
font-weight: normal;
speak: none;
display: inline-block;
text-decoration: inherit;
width: 1em;
margin-right: .2em;
text-align: center;
/* opacity: .8; */
/* For safety - reset parent styles, that can break glyph codes*/
font-variant: normal;
text-transform: none;
/* fix buttons height, for twitter bootstrap */
line-height: 1em;
/* Animation center compensation - margins should be symmetric */
/* remove if not needed */
margin-left: .2em;
/* you can be more comfortable with increased icons size */
/* font-size: 120%; */
/* Font smoothing. That was taken from TWBS */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
/* Uncomment for 3D effect */
/* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
}
.bpmn-icon-screw-wrench:before { content: '\e800'; } /* '' */
.bpmn-icon-trash:before { content: '\e801'; } /* '' */
.bpmn-icon-conditional-flow:before { content: '\e802'; } /* '' */
.bpmn-icon-default-flow:before { content: '\e803'; } /* '' */
.bpmn-icon-gateway-parallel:before { content: '\e804'; } /* '' */
.bpmn-icon-intermediate-event-catch-cancel:before { content: '\e805'; } /* '' */
.bpmn-icon-intermediate-event-catch-non-interrupting-message:before { content: '\e806'; } /* '' */
.bpmn-icon-start-event-compensation:before { content: '\e807'; } /* '' */
.bpmn-icon-start-event-non-interrupting-parallel-multiple:before { content: '\e808'; } /* '' */
.bpmn-icon-loop-marker:before { content: '\e809'; } /* '' */
.bpmn-icon-parallel-mi-marker:before { content: '\e80a'; } /* '' */
.bpmn-icon-start-event-non-interrupting-signal:before { content: '\e80b'; } /* '' */
.bpmn-icon-intermediate-event-catch-non-interrupting-timer:before { content: '\e80c'; } /* '' */
.bpmn-icon-intermediate-event-catch-parallel-multiple:before { content: '\e80d'; } /* '' */
.bpmn-icon-intermediate-event-catch-compensation:before { content: '\e80e'; } /* '' */
.bpmn-icon-gateway-xor:before { content: '\e80f'; } /* '' */
.bpmn-icon-connection:before { content: '\e810'; } /* '' */
.bpmn-icon-end-event-cancel:before { content: '\e811'; } /* '' */
.bpmn-icon-intermediate-event-catch-condition:before { content: '\e812'; } /* '' */
.bpmn-icon-intermediate-event-catch-non-interrupting-parallel-multiple:before { content: '\e813'; } /* '' */
.bpmn-icon-start-event-condition:before { content: '\e814'; } /* '' */
.bpmn-icon-start-event-non-interrupting-timer:before { content: '\e815'; } /* '' */
.bpmn-icon-sequential-mi-marker:before { content: '\e816'; } /* '' */
.bpmn-icon-user-task:before { content: '\e817'; } /* '' */
.bpmn-icon-business-rule:before { content: '\e818'; } /* '' */
.bpmn-icon-sub-process-marker:before { content: '\e819'; } /* '' */
.bpmn-icon-start-event-parallel-multiple:before { content: '\e81a'; } /* '' */
.bpmn-icon-start-event-error:before { content: '\e81b'; } /* '' */
.bpmn-icon-intermediate-event-catch-signal:before { content: '\e81c'; } /* '' */
.bpmn-icon-intermediate-event-catch-error:before { content: '\e81d'; } /* '' */
.bpmn-icon-end-event-compensation:before { content: '\e81e'; } /* '' */
.bpmn-icon-subprocess-collapsed:before { content: '\e81f'; } /* '' */
.bpmn-icon-subprocess-expanded:before { content: '\e820'; } /* '' */
.bpmn-icon-task:before { content: '\e821'; } /* '' */
.bpmn-icon-end-event-error:before { content: '\e822'; } /* '' */
.bpmn-icon-intermediate-event-catch-escalation:before { content: '\e823'; } /* '' */
.bpmn-icon-intermediate-event-catch-timer:before { content: '\e824'; } /* '' */
.bpmn-icon-start-event-escalation:before { content: '\e825'; } /* '' */
.bpmn-icon-start-event-signal:before { content: '\e826'; } /* '' */
.bpmn-icon-business-rule-task:before { content: '\e827'; } /* '' */
.bpmn-icon-manual:before { content: '\e828'; } /* '' */
.bpmn-icon-receive:before { content: '\e829'; } /* '' */
.bpmn-icon-call-activity:before { content: '\e82a'; } /* '' */
.bpmn-icon-start-event-timer:before { content: '\e82b'; } /* '' */
.bpmn-icon-start-event-message:before { content: '\e82c'; } /* '' */
.bpmn-icon-intermediate-event-none:before { content: '\e82d'; } /* '' */
.bpmn-icon-intermediate-event-catch-link:before { content: '\e82e'; } /* '' */
.bpmn-icon-end-event-escalation:before { content: '\e82f'; } /* '' */
.bpmn-icon-text-annotation:before { content: '\e830'; } /* '' */
.bpmn-icon-bpmn-io:before { content: '\e831'; } /* '' */
.bpmn-icon-gateway-complex:before { content: '\e832'; } /* '' */
.bpmn-icon-gateway-eventbased:before { content: '\e833'; } /* '' */
.bpmn-icon-gateway-none:before { content: '\e834'; } /* '' */
.bpmn-icon-gateway-or:before { content: '\e835'; } /* '' */
.bpmn-icon-end-event-terminate:before { content: '\e836'; } /* '' */
.bpmn-icon-end-event-signal:before { content: '\e837'; } /* '' */
.bpmn-icon-end-event-none:before { content: '\e838'; } /* '' */
.bpmn-icon-end-event-multiple:before { content: '\e839'; } /* '' */
.bpmn-icon-end-event-message:before { content: '\e83a'; } /* '' */
.bpmn-icon-end-event-link:before { content: '\e83b'; } /* '' */
.bpmn-icon-intermediate-event-catch-message:before { content: '\e83c'; } /* '' */
.bpmn-icon-intermediate-event-throw-compensation:before { content: '\e83d'; } /* '' */
.bpmn-icon-start-event-multiple:before { content: '\e83e'; } /* '' */
.bpmn-icon-script:before { content: '\e83f'; } /* '' */
.bpmn-icon-manual-task:before { content: '\e840'; } /* '' */
.bpmn-icon-send:before { content: '\e841'; } /* '' */
.bpmn-icon-service:before { content: '\e842'; } /* '' */
.bpmn-icon-receive-task:before { content: '\e843'; } /* '' */
.bpmn-icon-user:before { content: '\e844'; } /* '' */
.bpmn-icon-start-event-none:before { content: '\e845'; } /* '' */
.bpmn-icon-intermediate-event-throw-escalation:before { content: '\e846'; } /* '' */
.bpmn-icon-intermediate-event-catch-multiple:before { content: '\e847'; } /* '' */
.bpmn-icon-intermediate-event-catch-non-interrupting-escalation:before { content: '\e848'; } /* '' */
.bpmn-icon-intermediate-event-throw-link:before { content: '\e849'; } /* '' */
.bpmn-icon-start-event-non-interrupting-condition:before { content: '\e84a'; } /* '' */
.bpmn-icon-data-object:before { content: '\e84b'; } /* '' */
.bpmn-icon-script-task:before { content: '\e84c'; } /* '' */
.bpmn-icon-send-task:before { content: '\e84d'; } /* '' */
.bpmn-icon-data-store:before { content: '\e84e'; } /* '' */
.bpmn-icon-start-event-non-interrupting-escalation:before { content: '\e84f'; } /* '' */
.bpmn-icon-intermediate-event-throw-message:before { content: '\e850'; } /* '' */
.bpmn-icon-intermediate-event-catch-non-interrupting-multiple:before { content: '\e851'; } /* '' */
.bpmn-icon-intermediate-event-catch-non-interrupting-signal:before { content: '\e852'; } /* '' */
.bpmn-icon-intermediate-event-throw-multiple:before { content: '\e853'; } /* '' */
.bpmn-icon-start-event-non-interrupting-message:before { content: '\e854'; } /* '' */
.bpmn-icon-ad-hoc-marker:before { content: '\e855'; } /* '' */
.bpmn-icon-service-task:before { content: '\e856'; } /* '' */
.bpmn-icon-task-none:before { content: '\e857'; } /* '' */
.bpmn-icon-compensation-marker:before { content: '\e858'; } /* '' */
.bpmn-icon-start-event-non-interrupting-multiple:before { content: '\e859'; } /* '' */
.bpmn-icon-intermediate-event-throw-signal:before { content: '\e85a'; } /* '' */
.bpmn-icon-intermediate-event-catch-non-interrupting-condition:before { content: '\e85b'; } /* '' */
.bpmn-icon-participant:before { content: '\e85c'; } /* '' */
.bpmn-icon-event-subprocess-expanded:before { content: '\e85d'; } /* '' */
.bpmn-icon-lane-insert-below:before { content: '\e85e'; } /* '' */
.bpmn-icon-space-tool:before { content: '\e85f'; } /* '' */
.bpmn-icon-connection-multi:before { content: '\e860'; } /* '' */
.bpmn-icon-lane:before { content: '\e861'; } /* '' */
.bpmn-icon-lasso-tool:before { content: '\e862'; } /* '' */
.bpmn-icon-lane-insert-above:before { content: '\e863'; } /* '' */
.bpmn-icon-lane-divide-three:before { content: '\e864'; } /* '' */
.bpmn-icon-lane-divide-two:before { content: '\e865'; } /* '' */
.bpmn-icon-data-input:before { content: '\e866'; } /* '' */
.bpmn-icon-data-output:before { content: '\e867'; } /* '' */
.bpmn-icon-hand-tool:before { content: '\e868'; } /* '' */
.bpmn-icon-transaction:before { content: '\e8c4'; } /* '' */
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
...@@ -22,12 +22,13 @@ ...@@ -22,12 +22,13 @@
*/ */
angular.module( angular.module(
'ulakbus', [ 'ulakbus', [
'ui.bootstrap', //'ui.bootstrap',
'angular-loading-bar', 'angular-loading-bar',
'ngRoute', 'ngRoute',
'ngSanitize', 'ngSanitize',
'ngCookies', 'ngCookies',
'ulakbus.formService', 'ulakbus.formService',
'ulakbus.messaging',
'ulakbus.dashboard', 'ulakbus.dashboard',
'ulakbus.auth', 'ulakbus.auth',
'ulakbus.error_pages', 'ulakbus.error_pages',
...@@ -35,8 +36,8 @@ angular.module( ...@@ -35,8 +36,8 @@ angular.module(
'ulakbus.debug', 'ulakbus.debug',
'ulakbus.devSettings', 'ulakbus.devSettings',
'ulakbus.version', 'ulakbus.version',
//'schemaForm',
'gettext', 'gettext',
'markdown',
'ulakbus.uitemplates' 'ulakbus.uitemplates'
]) ])
/** /**
...@@ -48,6 +49,7 @@ angular.module( ...@@ -48,6 +49,7 @@ angular.module(
* *
* For development needs backendurl can be switched from both dev/settings page and querystring `?backendurl=http://example.com` * For development needs backendurl can be switched from both dev/settings page and querystring `?backendurl=http://example.com`
*/ */
// todo: convert it to service
.constant("RESTURL", (function () { .constant("RESTURL", (function () {
// todo: below backendurl definition is for development purpose and will be deleted // todo: below backendurl definition is for development purpose and will be deleted
var backendurl = location.href.indexOf('nightly') > -1 ? "//nightly.api.ulakbus.net/" : "//api.ulakbus.net/"; var backendurl = location.href.indexOf('nightly') > -1 ? "//nightly.api.ulakbus.net/" : "//api.ulakbus.net/";
...@@ -56,6 +58,8 @@ angular.module( ...@@ -56,6 +58,8 @@ angular.module(
angular.forEach(cookiearray, function (item) { angular.forEach(cookiearray, function (item) {
if (item.indexOf("backendurl") > -1) { if (item.indexOf("backendurl") > -1) {
backendurl = item.split('=')[1]; backendurl = item.split('=')[1];
if (backendurl.slice(-1) !== '/') {backendurl += '/'}
if (backendurl.substring(0,4) !== 'http') {backendurl = 'http://'+backendurl}
} }
}); });
} }
...@@ -63,12 +67,73 @@ angular.module( ...@@ -63,12 +67,73 @@ angular.module(
if (location.href.indexOf("backendurl") > -1) { if (location.href.indexOf("backendurl") > -1) {
var urlfromqstr = location.href.split('?')[1].split('=')[1]; var urlfromqstr = location.href.split('?')[1].split('=')[1];
backendurl = decodeURIComponent(urlfromqstr.replace(/\+/g, " ")); backendurl = decodeURIComponent(urlfromqstr.replace(/\+/g, " "));
if (backendurl.slice(-1) !== '/') {backendurl += '/'}
if (backendurl.substring(0,4) !== 'http') {backendurl = 'http://'+backendurl}
document.cookie = "backendurl=" + backendurl; document.cookie = "backendurl=" + backendurl;
window.location.href = window.location.href.split('?')[0]; window.location.href = window.location.href.split('?')[0];
} }
return {url: backendurl}; return {url: backendurl};
})()) })())
.factory('IsOnline', function ($window, $document, $rootScope) {
var isOnlineService = {};
isOnlineService.status = true;
var offlineMask = angular.element(
'<div class="body-mask" style="z-index: 2010; opacity: 0.6">' +
'<div class="alert alert-danger text-center" role="alert" style="z-index: 2011; position: relative">' +
'İnternet bağlantınız kesilmiştir. Bağlantı sağlandığında kaldığınız yerden devam edebilirsiniz.' +
'</div>' +
'</div>'
);
var body = $document.find('body').eq(0);
isOnlineService.set_status = function (state) {
// status changed
if (state != isOnlineService.status){
// online
if (state){
offlineMask.remove();
// is user is set, reload page to init
if ($rootScope.current_user === true){
window.location.reload();
}
}
// offline
else {
body.append(offlineMask);
}
}
isOnlineService.status = state;
};
isOnlineService.get_status = function () {
return isOnlineService.status;
};
return isOnlineService;
})
// .service('DESIGN', function ($routeParams, $cookies, $log) {
// // use route param to change cookie for design
// // this is a config as a service added for designer can work without backend
// try {
// if (angular.isDefined($routeParams.design) || location.hash.split('?')[1].split('=')[1]) {
// $cookies.put('design', $routeParams.design || location.hash.split('?')[1].split('=')[1]);
// }
// } catch (e){
// $log.error("Error for design parameter", e);
// }
// return $cookies.get('design') === 'true' ? {switch: true} : {switch: false};
// })
.constant('toastr', window.toastr)
.constant('WS', window.WebSocket)
.config(function ($logProvider) { .config(function ($logProvider) {
$logProvider.debugEnabled(true); $logProvider.debugEnabled(true);
})
.config(function(markdownProvider) {
//markdownProvider.config({
// extensions: ['table']
//});
}); });
...@@ -5,54 +5,73 @@ angular.module('ulakbus') ...@@ -5,54 +5,73 @@ angular.module('ulakbus')
$routeProvider $routeProvider
.when('/login', { .when('/login', {
templateUrl: 'components/auth/login.html', templateUrl: 'components/auth/login.html',
controller: 'LoginCtrl' controller: 'LoginController'
}) })
.when('/dashboard', { .when('/dashboard', {
templateUrl: 'components/dashboard/dashboard.html', templateUrl: 'components/dashboard/dashboard.html',
controller: 'DashCtrl' controller: 'DashController'
}) })
.when('/dev/settings', { .when('/dev/settings', {
templateUrl: 'components/devSettings/devSettings.html', templateUrl: 'components/devSettings/devSettings.html',
controller: 'DevSettingsCtrl' controller: 'DevSettingsController'
}) })
.when('/debug/list', { .when('/debug/list', {
templateUrl: 'components/debug/debug.html', templateUrl: 'components/debug/debug.html',
controller: 'DebugCtrl' controller: 'DebugController'
})
.when('/admin/bpmnmanager', {
templateUrl: 'components/admin/bpmn_manager.html',
controller: 'BpmnManagerController'
})
.when('/newdesigns', {
templateUrl: 'components/uitemplates/base.html',
controller: 'NewDesignsCtrl'
})
.when('/formservicepg', {
templateUrl: 'components/uitemplates/form_service_pg.html',
controller: 'FormServicePg'
}) })
// use crud without selected user // use crud without selected user
// important: regex urls must be defined later than static ones // important: regex urls must be defined later than static ones
.when('/:wf/', { .when('/:wf/', {
templateUrl: 'components/crud/templates/crud-preload.html',
controller: 'CRUDController'
})
.when('/cwf/:wf/:token', {
templateUrl: 'components/crud/templates/crud.html', templateUrl: 'components/crud/templates/crud.html',
controller: 'CRUDCtrl' controller: 'CRUDController'
}) })
.when('/:wf/do/:cmd', { .when('/:wf/do/:cmd', {
templateUrl: 'components/crud/templates/crud.html', templateUrl: 'components/crud/templates/crud.html',
controller: 'CRUDListFormCtrl' controller: 'CRUDListFormController'
}) })
.when('/:wf/do/:cmd/:key', { .when('/:wf/do/:cmd/:key', {
templateUrl: 'components/crud/templates/crud.html', templateUrl: 'components/crud/templates/crud.html',
controller: 'CRUDListFormCtrl' controller: 'CRUDListFormController'
}) })
.when('/:wf/:model', { .when('/:wf/:model', {
templateUrl: 'components/crud/templates/crud.html', templateUrl: 'components/crud/templates/crud-preload.html',
controller: 'CRUDCtrl' controller: 'CRUDController'
}) })
.when('/:wf/:model/do/:cmd', { .when('/:wf/:model/do/:cmd', {
templateUrl: 'components/crud/templates/crud.html', templateUrl: 'components/crud/templates/crud.html',
controller: 'CRUDListFormCtrl' controller: 'CRUDListFormController'
}) })
.when('/:wf/:model/do/:cmd/:key', { .when('/:wf/:model/do/:cmd/:key', {
templateUrl: 'components/crud/templates/crud.html', templateUrl: 'components/crud/templates/crud.html',
controller: 'CRUDListFormCtrl' controller: 'CRUDListFormController'
}) })
.otherwise({redirectTo: '/dashboard'}); .otherwise({redirectTo: '/dashboard'});
}]) }])
.run(function ($rootScope) {
$rootScope.loggedInUser = true; .run(function ($rootScope, AuthService) {
AuthService.check_auth();
$rootScope.loggedInUser = false;
$rootScope.loginAttempt = 0; $rootScope.loginAttempt = 0;
$rootScope.websocketIsOpen = false;
$rootScope.current_user = true;
$rootScope.$on("$routeChangeStart", function (event, next, current) { $rootScope.$on("$routeChangeStart", function (event, next, current) {
// will be used when needed // will be used when needed
}); });
......
<div class="content" id="js-drop-zone">
<div class="message intro">
<div class="note">
Drop BPMN diagram from your desktop or <a id="js-create-diagram" href>create a new diagram</a> to get started.
</div>
</div>
<div class="message error">
<div class="note">
<p>Ooops, we could not display the BPMN 2.0 diagram.</p>
<div class="details">
<span>cause of the problem</span>
<pre></pre>
</div>
</div>
</div>
<div class="canvas" id="js-canvas"></div>
<div id="js-properties-panel"></div>
</div>
<ul class="buttons">
<li>
download
</li>
<li>
<a id="js-download-diagram" href title="download BPMN diagram">
BPMN diagram
</a>
</li>
<li>
<a id="js-download-svg" href title="download as SVG image">
SVG image
</a>
</li>
</ul>
\ No newline at end of file
/**
* Copyright (C) 2015 ZetaOps Inc.
*
* This file is licensed under the GNU General Public License v3
* (GPLv3). See LICENSE.txt for details.
*
* @author Evren Kutar
*/
angular.module('ulakbus')
//.constant('require', require)
.controller('BpmnManagerController', function ($scope) {
var fs = require('fs');
var $ = require('jquery'),
BpmnModeler = require('bpmn-js/lib/Modeler');
var propertiesPanelModule = require('bpmn-js-properties-panel'),
propertiesProviderModule = require('bpmn-js-properties-panel/lib/provider/camunda'),
camundaModdleDescriptor = require('camunda-bpmn-moddle/resources/camunda');
var container = $('#js-drop-zone');
var canvas = $('#js-canvas');
var bpmnModeler = new BpmnModeler({
container: canvas,
propertiesPanel: {
parent: '#js-properties-panel'
},
additionalModules: [
propertiesPanelModule,
propertiesProviderModule
],
moddleExtensions: {
camunda: camundaModdleDescriptor
}
});
var newDiagramXML = fs.readFileSync(__dirname + 'new.bpmn', 'utf-8');
function createNewDiagram() {
openDiagram(newDiagramXML);
}
function openDiagram(xml) {
bpmnModeler.importXML(xml, function (err) {
if (err) {
container
.removeClass('with-diagram')
.addClass('with-error');
container.find('.error pre').text(err.message);
console.error(err);
} else {
container
.removeClass('with-error')
.addClass('with-diagram');
}
});
}
function saveSVG(done) {
bpmnModeler.saveSVG(done);
}
function saveDiagram(done) {
bpmnModeler.saveXML({format: true}, function (err, xml) {
done(err, xml);
});
}
function registerFileDrop(container, callback) {
function handleFileSelect(e) {
e.stopPropagation();
e.preventDefault();
var files = e.dataTransfer.files;
var file = files[0];
var reader = new FileReader();
reader.onload = function (e) {
var xml = e.target.result;
callback(xml);
};
reader.readAsText(file);
}
function handleDragOver(e) {
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
}
container.get(0).addEventListener('dragover', handleDragOver, false);
container.get(0).addEventListener('drop', handleFileSelect, false);
}
if (!window.FileList || !window.FileReader) {
window.alert(
'Looks like you use an older browser that does not support drag and drop. ' +
'Try using Chrome, Firefox or the Internet Explorer > 10.');
} else {
registerFileDrop(container, openDiagram);
}
$(document).on('ready', function () {
$('#js-create-diagram').click(function (e) {
e.stopPropagation();
e.preventDefault();
createNewDiagram();
});
var downloadLink = $('#js-download-diagram');
var downloadSvgLink = $('#js-download-svg');
$('.buttons a').click(function (e) {
if (!$(this).is('.active')) {
e.preventDefault();
e.stopPropagation();
}
});
function setEncoded(link, name, data) {
var encodedData = encodeURIComponent(data);
if (data) {
link.addClass('active').attr({
'href': 'data:application/bpmn20-xml;charset=UTF-8,' + encodedData,
'download': name
});
} else {
link.removeClass('active');
}
}
var debounce = require('lodash/function/debounce');
var exportArtifacts = debounce(function () {
saveSVG(function (err, svg) {
setEncoded(downloadSvgLink, 'diagram.svg', err ? null : svg);
});
saveDiagram(function (err, xml) {
setEncoded(downloadLink, 'diagram.bpmn', err ? null : xml);
});
}, 500);
bpmnModeler.on('commandStack.changed', exportArtifacts);
});
});
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd" id="sample-diagram" targetNamespace="http://bpmn.io/schema/bpmn">
<bpmn2:process id="Process_1" isExecutable="false">
<bpmn2:startEvent id="StartEvent_1"/>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds height="36.0" width="36.0" x="412.0" y="240.0"/>
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>
\ No newline at end of file
...@@ -25,11 +25,15 @@ angular.module('ulakbus.auth', ['ngRoute', 'ngCookies']) ...@@ -25,11 +25,15 @@ angular.module('ulakbus.auth', ['ngRoute', 'ngCookies'])
* @description LoginCtrl responsible to handle login process.<br> * @description LoginCtrl responsible to handle login process.<br>
* Using 'ulakbus.formService.get_form' function generates the login form and post it to the API with input datas. * Using 'ulakbus.formService.get_form' function generates the login form and post it to the API with input datas.
*/ */
.controller('LoginCtrl', function ($scope, $q, $timeout, $routeParams, $rootScope, $log, Generator, AuthService) { .controller('LoginController', function ($scope, $q, $timeout, $location, $routeParams, $rootScope, $log, WSOps, Generator, AuthService) {
$scope.url = 'login'; $scope.url = 'login';
$scope.form_params = {}; $scope.form_params = {};
$scope.form_params['clear_wf'] = 1; $scope.form_params['clear_wf'] = 1;
Generator.get_form($scope).then(function (data) { // if websocket status is open ---> ws close
try {WSOps.close()}
catch (e) {$log.error(e.message)}
AuthService.get_form($scope).then(function (data) {
if (data.login) { $location.path('/'); }
$scope.form = [ $scope.form = [
{key: "username", type: "string", title: "Kullanıcı Adı"}, {key: "username", type: "string", title: "Kullanıcı Adı"},
{key: "password", type: "password", title: "Şifre"}, {key: "password", type: "password", title: "Şifre"},
...@@ -44,13 +48,17 @@ angular.module('ulakbus.auth', ['ngRoute', 'ngCookies']) ...@@ -44,13 +48,17 @@ angular.module('ulakbus.auth', ['ngRoute', 'ngCookies'])
$rootScope.loginAttempt = 1; $rootScope.loginAttempt = 1;
Generator.button_switch(false); Generator.button_switch(false);
AuthService.login($scope.url, $scope.model) AuthService.login($scope.url, $scope.model)
.success(function (data) {
$scope.message = data.title;
$scope.loggingIn = false;
})
.error(function (data) { .error(function (data) {
$scope.message = data.title; $scope.message = data.title;
$scope.loggingIn = false; $scope.loggingIn = false;
}) })
.then(function () { .then(function () {
$scope.loggingIn = false; $scope.loggingIn = false;
Generator.button_switch(false); Generator.button_switch(true);
}) })
} }
else { else {
......
...@@ -15,9 +15,31 @@ angular.module('ulakbus.auth') ...@@ -15,9 +15,31 @@ angular.module('ulakbus.auth')
* @name AuthService * @name AuthService
* @description provides generic functions for authorization process. * @description provides generic functions for authorization process.
*/ */
.factory('AuthService', function ($http, $rootScope, $location, $log, Generator, RESTURL) { .factory('AuthService', function ($http, $rootScope, $location, $log, $route, Generator, RESTURL, WSOps) {
var authService = {}; var authService = {};
authService.get_form = function (scope) {
return $http
.post(Generator.makeUrl(scope), scope.form_params)
.success(function (data, status, headers, config) {
// if response data.cmd is 'upgrade'
if (data.cmd === 'upgrade') {
$rootScope.loggedInUser = true;
$rootScope.$broadcast("user_ready");
$rootScope.$broadcast("ws_turn_on");
return $location.path('/dashboard');
}
if (data.cmd === 'retry') {
$location.path('/login');
} else{
if (angular.isDefined(data.forms) && $location.path() !== '/login'){
$location.path('/login');
}
return Generator.generate(scope, data);
}
});
};
/** /**
* @memberof ulakbus.auth * @memberof ulakbus.auth
* @ngdoc function * @ngdoc function
...@@ -35,12 +57,23 @@ angular.module('ulakbus.auth') ...@@ -35,12 +57,23 @@ angular.module('ulakbus.auth')
.post(RESTURL.url + url, credentials) .post(RESTURL.url + url, credentials)
.success(function (data, status, headers, config) { .success(function (data, status, headers, config) {
//$window.sessionStorage.token = data.token; //$window.sessionStorage.token = data.token;
Generator.button_switch(true);
if (data.cmd === 'upgrade') {
$rootScope.loggedInUser = true; $rootScope.loggedInUser = true;
// $rootScope.$broadcast("regenerate_menu");
// to display main view without flickering
$rootScope.$broadcast("user_ready");
$rootScope.$broadcast("ws_turn_on");
$location.path('/dashboard');
}
if (data.status_code === 403) {
data.title = "İşlem başarısız oldu. Lütfen girdiğiniz bilgileri kontrol ediniz.";
return data;
}
}) })
.error(function (data, status, headers, config) { .error(function (data, status, headers, config) {
// Handle login errors here // Handle login errors here
data.title = "İşlem başarısız oldu. Lütfen girdiğiniz bilgileri kontrol ediniz." data.title = "İşlem başarısız oldu. Lütfen girdiğiniz bilgileri kontrol ediniz.";
return data; return data;
}); });
}; };
...@@ -54,13 +87,21 @@ angular.module('ulakbus.auth') ...@@ -54,13 +87,21 @@ angular.module('ulakbus.auth')
* @returns {*} * @returns {*}
*/ */
authService.logout = function () { authService.logout = function () {
$log.debug("logout");
return $http.post(RESTURL.url + 'logout', {}).success(function (data) { $rootScope.loginAttempt = 0;
WSOps.request({wf: 'logout'}).then(function (data) {
$rootScope.loggedInUser = false; $rootScope.loggedInUser = false;
$rootScope.current_user = true;
$log.debug("loggedout"); $log.debug("loggedout");
$location.path("/login"); $location.path("/login");
WSOps.close();
}); });
}; };
authService.check_auth = function () {
var post_data = {url: 'login', form_params:{}};
return authService.get_form(post_data);
};
return authService; return authService;
}); });
\ No newline at end of file
...@@ -33,7 +33,7 @@ describe('ulakbus.auth module', function () { ...@@ -33,7 +33,7 @@ describe('ulakbus.auth module', function () {
describe('login controller and service', function () { describe('login controller and service', function () {
it('should have a login controller', inject(function () { it('should have a login controller', inject(function () {
expect('ulakbus.auth.LoginCtrl').toBeDefined(); expect('ulakbus.auth.LoginController').toBeDefined();
})); }));
it('should get login form', inject( it('should get login form', inject(
...@@ -44,7 +44,7 @@ describe('ulakbus.auth module', function () { ...@@ -44,7 +44,7 @@ describe('ulakbus.auth module', function () {
var $scope = $rootScope.$new(); var $scope = $rootScope.$new();
$scope['url'] = 'login'; $scope['url'] = 'login';
$scope['form_params'] = {clear_wf: 1}; $scope['form_params'] = {clear_wf: 1};
var controller = $controller('LoginCtrl', {$scope: $scope}); var controller = $controller('LoginController', {$scope: $scope});
expect($scope.onSubmit).toBeDefined(); expect($scope.onSubmit).toBeDefined();
}) })
......
<div ng-app="ulakbus.auth" class="container"> <div style="width: 100%; height: 100%; position: fixed; z-index: 1100; top:0; left:0; background: #fff;">
<div ng-app="ulakbus.auth" class="container">
<div class="row"> <div class="row">
<div class="col-md-4 col-md-offset-4"> <div class="col-md-6 col-md-offset-3">
<div class="login-panel panel panel-default"> <div class="login-panel panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">Giriş Yap <span ng-if="loggingIn" class="loader pull-right"></span></h3> <h3 class="panel-title">Giriş Yap <span ng-if="loggingIn" class="loader pull-right"></span></h3>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<span class="label label-warning">{{message}}</span> <form name="loginForm" sf-schema="schema" sf-form="form" sf-model="model"
<form name="loginForm" sf-schema="schema" sf-form="form" sf-model="model" ng-submit="onSubmit(loginForm)"></form> ng-submit="onSubmit(loginForm)"></form>
</div> </div>
</div> </div>
<span class="label label-inverse label-warning">{{message}}</span>
</div>
</div> </div>
</div> </div>
</div> </div>
\ No newline at end of file
This diff is collapsed.
...@@ -29,8 +29,8 @@ describe('crud controller module', function () { ...@@ -29,8 +29,8 @@ describe('crud controller module', function () {
describe('crud controller', function () { describe('crud controller', function () {
it('should have CRUDListFormCtrl', inject(function () { it('should have CRUDListFormController', inject(function () {
expect('ulakbus.crud.CRUDListFormCtrl').toBeDefined(); expect('ulakbus.crud.CRUDListFormController').toBeDefined();
})); }));
it('should have CRUDCtrl', inject(function () { it('should have CRUDCtrl', inject(function () {
...@@ -52,24 +52,24 @@ describe('crud controller module', function () { ...@@ -52,24 +52,24 @@ describe('crud controller module', function () {
expect($controller).toBeDefined(); expect($controller).toBeDefined();
}])); }]));
it('should execute CRUDListFormCtrl with form cms', inject(function ($rootScope, RESTURL) { it('should execute CRUDListFormController with form cms', inject(function ($rootScope, RESTURL) {
$httpBackend.expectGET(RESTURL.url + 'ara/personel/123') $httpBackend.expectGET(RESTURL.url + 'ara/personel/123')
.respond(200, {}); .respond(200, {});
var $scope = $rootScope.$new(); var $scope = $rootScope.$new();
var $routeParams = {cmd: 'form'}; var $routeParams = {cmd: 'form'};
var controller = $controller('CRUDListFormCtrl', {$scope: $scope, $routeParams: $routeParams}); var controller = $controller('CRUDListFormController', {$scope: $scope, $routeParams: $routeParams});
})); }));
it('should execute CRUDListFormCtrl with list cmd', inject(function ($rootScope, RESTURL) { it('should execute CRUDListFormController with list cmd', inject(function ($rootScope, RESTURL) {
$httpBackend.expectGET(RESTURL.url + 'ara/personel/123') $httpBackend.expectGET(RESTURL.url + 'ara/personel/123')
.respond(200, {}); .respond(200, {});
var $scope = $rootScope.$new(); var $scope = $rootScope.$new();
$scope.meta = {'allow_filters': true}; $scope.meta = {'allow_filters': true};
var $routeParams = {cmd: 'list'}; var $routeParams = {cmd: 'list'};
var controller = $controller('CRUDListFormCtrl', {$scope: $scope, $routeParams: $routeParams}); var controller = $controller('CRUDListFormController', {$scope: $scope, $routeParams: $routeParams});
$scope.$broadcast('reload_cmd', 'list'); $scope.$broadcast('reload_cmd', 'list');
$scope.$broadcast('updateObjects', ['test', 'headers']); $scope.$broadcast('updateObjects', ['test', 'headers']);
...@@ -83,23 +83,23 @@ describe('crud controller module', function () { ...@@ -83,23 +83,23 @@ describe('crud controller module', function () {
$scope.resetCmd(); $scope.resetCmd();
})); }));
it('should execute CRUDListFormCtrl with show cmd', inject(function ($rootScope, Generator) { it('should execute CRUDListFormController with show cmd', inject(function ($rootScope, Generator) {
var $scope = $rootScope.$new(); var $scope = $rootScope.$new();
var $routeParams = {cmd: 'show'}; var $routeParams = {cmd: 'show'};
$scope.object = []; $scope.object = [];
var controller = $controller('CRUDListFormCtrl', {$scope: $scope, $routeParams: $routeParams}); var controller = $controller('CRUDListFormController', {$scope: $scope, $routeParams: $routeParams});
$scope.object = {test: {}}; $scope.object = {test: {}};
var controller = $controller('CRUDListFormCtrl', {$scope: $scope, $routeParams: $routeParams}); var controller = $controller('CRUDListFormController', {$scope: $scope, $routeParams: $routeParams});
$scope.pageData = true; $scope.pageData = true;
Generator.setPageData($scope); Generator.setPageData($scope);
var controller = $controller('CRUDListFormCtrl', {$scope: $scope, $routeParams: $routeParams}); var controller = $controller('CRUDListFormController', {$scope: $scope, $routeParams: $routeParams});
})); }));
it('should execute CRUDListFormCtrl with relad cmd', inject(function ($rootScope, RESTURL) { it('should execute CRUDListFormController with relad cmd', inject(function ($rootScope, RESTURL) {
$httpBackend.expectGET(RESTURL.url + 'ara/personel/123') $httpBackend.expectGET(RESTURL.url + 'ara/personel/123')
.respond(200, {}); .respond(200, {});
...@@ -107,7 +107,7 @@ describe('crud controller module', function () { ...@@ -107,7 +107,7 @@ describe('crud controller module', function () {
$scope.form_params = {}; $scope.form_params = {};
$scope.reload_cmd = 'list'; $scope.reload_cmd = 'list';
var $routeParams = {cmd: 'reload'}; var $routeParams = {cmd: 'reload'};
var controller = $controller('CRUDListFormCtrl', {$scope: $scope, $routeParams: $routeParams}); var controller = $controller('CRUDListFormController', {$scope: $scope, $routeParams: $routeParams});
})); }));
......
/**
* Copyright (C) 2015 ZetaOps Inc.
*
* This file is licensed under the GNU General Public License v3
* (GPLv3). See LICENSE.txt for details.
*
* @author Evren Kutar
*/
angular.module('ulakbus.crud')
/**
* this is a directive for quick add widget of listnodes
* quick add widget does simply that; no need to add listnode item with model,
* simply add an item to listnode searching related ulakbus model
* needs that keys in listnode schema:
* quick_add: true
* quick_add_view: <viewname>
* quick_add_model: <modelname>
* quick_add_field: to which field the data found will be added
* thanks u.u
*/
.directive('quickAdd', function (Generator) {
return {
templateUrl: 'components/crud/templates/quick_add.html',
restrict: 'E',
replace: true,
scope: {
node: '='
},
controller: function ($scope) {
$scope.kw = '';
$scope.getTitleMap = function () {
return $scope.generateTitleMap($scope.kw);
};
$scope.generateTitleMap = function (kw) {
var searchData = {
form_params: {
view: $scope.node.quick_add_view,
model: $scope.node.quick_add_model,
query: kw
}
};
if (angular.isDefined($scope.$parent.form_params.param)){
searchData.form_params['id'] = $scope.$parent.form_params.id;
}
return Generator.get_list(searchData).then(function (res) {
var titleMap = [];
angular.forEach(res.objects, function (item) {
titleMap.push({
"value": item[0],
"name": item[1]
});
});
return titleMap;
});
};
$scope.onSelect = function (item) {
// add to listnode here
// field default is node schema properties first index
var get_first_key = function () {
return Object.keys($scope.node.schema.properties)[0];
};
var field = $scope.node.quick_add_field || get_first_key();
var f = { key: item.value};
f[field] = item.name;
// loop item keys and if a key not found in f add it with no value
angular.forEach($scope.node.items[0], function (value, key) {
if (!angular.isDefined(f[key])) {
f[key] = undefined;
}
});
try {
angular.forEach($scope.node.items, function (value, key) {
if (value['key'] === item.value) {
throw Error();
}
});
$scope.node.model.push(f);
$scope.node.items.push(f);
} catch (e) {
alert('bu öğe listede zaten mevcut!!');
}
}
}}
});
\ No newline at end of file
<div class="crud-mask">
<span class="loader"></span>
</div>
\ No newline at end of file
<div class="container-fluid"> <div ng-hide="show_crud === false" class="container-fluid">
<crud-timetable-directive ng-if="ogretim_elemani_zt"></crud-timetable-directive>
<crud-timetable-directive2 ng-if="derslik_zaman_tablosu"></crud-timetable-directive2>
<div ng-class="{'col-md-8': meta.allow_filters}"> <div ng-class="{'col-md-8': meta.allow_filters}">
<h3>{{ schema.title }}</h3> <msgbox ng-show="msgbox"></msgbox>
<h3 ng-class="{'mid-h3': !objects}">{{ schema.title }}</h3>
<crud-show-directive ng-if="object"></crud-show-directive> <crud-show-directive ng-if="object"></crud-show-directive>
<crud-form-directive ng-if="forms"></crud-form-directive> <crud-form-directive ng-if="forms"></crud-form-directive>
<crud-list-directive ng-if="objects"></crud-list-directive> <crud-list-directive ng-if="objects"></crud-list-directive>
</div> </div>
<crud-filters ng-show="meta.allow_filters === true" class="col-md-4 filtre"></crud-filters> <crud-filters ng-show="meta.allow_filters === true" class="col-md-4 filtre"></crud-filters>
</div> </div>
<div ng-show="show_crud === false" class="crud-mask">
<span class="loader"></span>
</div>
...@@ -13,8 +13,10 @@ ...@@ -13,8 +13,10 @@
<div ng-if="filter.type==='check' || !filter.type" uib-collapse="filterCollapsed[filter.field]"> <div ng-if="filter.type==='check' || !filter.type" uib-collapse="filterCollapsed[filter.field]">
<div class="checkbox" ng-repeat="filterItem in filter.values"> <div class="checkbox" ng-repeat="filterItem in filter.values">
<label class="checkbox-inline"> <label class="checkbox-inline">
<input type="checkbox" name="filter_group[]" ng-model="filterList[filter.field].model[filterItem.value]" <input type="checkbox" name="filter_group[]"
value="{{filterItem.value || filterItem[0]}}"/> ng-model="filterList[filter.field].model[filterItem.value]"
value="{{filterItem.value || filterItem[0]}}"
ng-checked="filterItem.selected"/>
{{filterItem.name || filterItem[1]}} {{filterItem.name || filterItem[1]}}
</label> </label>
</div> </div>
...@@ -22,8 +24,10 @@ ...@@ -22,8 +24,10 @@
<div ng-if="filter.type==='select'" uib-collapse="filterCollapsed[filter.field]"> <div ng-if="filter.type==='select'" uib-collapse="filterCollapsed[filter.field]">
<div class="col-md-12"> <div class="col-md-12">
<select name="filterSelect" id="filterSelect" class="form-control"> <select name="filterSelect" id="filterSelect" class="form-control" multiple>
<option ng-repeat="filterItem in filter.values" value="{{filterItem.value}}"> <option ng-repeat="filterItem in filter.values"
value="{{filterItem.value}}"
ng-selected="filterItem.selected">
{{filterItem.name}} {{filterItem.name}}
</option> </option>
</select> </select>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<div>
<input class="form-control"
type="text"
placeholder="eklemek istediğiniz nesneyi yazınız..."
ng-model="kw"
uib-typeahead="item as item.name for item in getTitleMap($viewValue)"
typeahead-on-select="onSelect($item)"
typeahead-loading="loadingTitleMap" typeahead-no-results="noResults"
typeahead-wait-ms="500"/>
<div ng-show="loadingTitleMap" class="loader"></div>
<div ng-show="noResults">
<i class="fa fa-close"></i> bulunamadı.
</div>
</div>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment