diff --git a/app.engine.rule/build.gradle b/app.engine.rule/build.gradle index 5c45bf86..e3a22dc9 100644 --- a/app.engine.rule/build.gradle +++ b/app.engine.rule/build.gradle @@ -13,7 +13,6 @@ dependencies { implementation ( project(":io.sc.platform.app"), project(":io.sc.platform.developer"), - project(":io.sc.platform.security.loginform"), project(":io.sc.platform.scheduler.manager"), project(":io.sc.platform.scheduler.executor"), diff --git a/app.platform/build.gradle b/app.platform/build.gradle index 48eb40af..d7111a75 100644 --- a/app.platform/build.gradle +++ b/app.platform/build.gradle @@ -13,32 +13,31 @@ dependencies { implementation ( project(":io.sc.platform.app"), project(":io.sc.platform.developer"), - project(":io.sc.platform.security.oauth2.server.authorization"), - project(":io.sc.platform.security.oauth2.server.resource"), - project(":io.sc.platform.security.loginform"), + project(":io.sc.standard"), - /* + // 调度 project(":io.sc.platform.scheduler.manager"), project(":io.sc.platform.scheduler.executor"), - project(":io.sc.engine.mv"), - project(":io.sc.engine.mv.frontend"), - project(":io.sc.engine.mv.sample"), - + // 规则引擎 project(":io.sc.engine.rule.client"), project(":io.sc.engine.rule.client.spring"), project(":io.sc.engine.rule.core"), project(":io.sc.engine.rule.server"), project(":io.sc.engine.rule.sample"), + // 模型验证 + project(":io.sc.engine.mv"), + project(":io.sc.engine.mv.frontend"), + project(":io.sc.engine.mv.sample"), + + // 压力测试 project(":io.sc.engine.st"), project(":io.sc.engine.st.frontend"), -// project(":erm"), -// project(":erm.frontend"), - - project(":io.sc.standard"), - */ + // 全面风险 + project(":erm"), + project(":erm.frontend"), ) } diff --git a/build.gradle b/build.gradle index 431c1d33..8371ab35 100644 --- a/build.gradle +++ b/build.gradle @@ -682,15 +682,15 @@ subprojects { processResources { if(isFrontendProject(file('.'))) { - exclude("**/${project.name}/*.*"); - if(project.name!='io.sc.platform.mvc.frontend' && project.name!='io.sc.platform.security.frontend'){ -// exclude("**/${project.name}/javascript/codemirror.*"); -// exclude("**/${project.name}/javascript/echarts.*"); -// exclude("**/${project.name}/javascript/platform-core.*"); -// exclude("**/${project.name}/javascript/quasar.*"); -// exclude("**/${project.name}/javascript/vue.*"); -// exclude("**/${project.name}/fonts/*.*"); -// exclude("**/${project.name}/webjars/**/*.*"); + if(project.name!='io.sc.platform.mvc.frontend'){ + exclude("**/${project.name}/*.*"); + exclude("**/${project.name}/javascript/codemirror.*"); + exclude("**/${project.name}/javascript/echarts.*"); + exclude("**/${project.name}/javascript/platform-core.*"); + exclude("**/${project.name}/javascript/quasar.*"); + exclude("**/${project.name}/javascript/vue.*"); + exclude("**/${project.name}/fonts/*.*"); + exclude("**/${project.name}/webjars/**/*.*"); } } } diff --git a/erm.frontend/package.json b/erm.frontend/package.json index c28bdbe4..5adc8978 100644 --- a/erm.frontend/package.json +++ b/erm.frontend/package.json @@ -1,6 +1,6 @@ { "name": "erm.frontend", - "version": "8.1.44", + "version": "8.1.46", "description": "", "private": false, "keywords": [], @@ -92,7 +92,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.287", + "platform-core": "8.1.295", "quasar": "2.15.4", "tailwindcss": "3.4.4", "vue": "3.4.31", diff --git a/erm.frontend/public/configure.js b/erm.frontend/public/configure.js index cffade30..3f4e2e53 100644 --- a/erm.frontend/public/configure.js +++ b/erm.frontend/public/configure.js @@ -2,6 +2,8 @@ window.APP = {}; // 全局配置 window.APP.configure ={ + // router 历史模式 + routerHistoryMode: 'web', // 应用上下文路径 webContextPath: '[(@{/})]'.startsWith('[')? '/' : '[(@{/})]', // 默认后端 API 请求的服务地址前缀 @@ -20,11 +22,6 @@ window.APP.configure ={ axios : { baseURL: '', timeout: 1000 * 60, - crossdomain: true, - basicAuth: { - enable: true, - username: 'admin', - password: 'admin', - } + crossdomain: true } } \ No newline at end of file diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css deleted file mode 100644 index bcbb5386..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css +++ /dev/null @@ -1,56 +0,0 @@ -/* -The proprietary Cambria fonts are installed by default on Microsoft Windows 7 -and higher and are provided with some other Microsoft products such as Office. -Some Web services may also provide them as Web fonts. For details, see - http://www.microsoft.com/typography/fonts/family.aspx?FID=291 - http://www.microsoft.com/typography/fonts/family.aspx?FID=360 -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Uncomment and complete the URLs if you wish to use Web fonts */ -/* -@font-face { - font-family: Cambria; - src: local('Cambria'), url('...'); -} -@font-face { - font-family: Cambria; - src: local('Cambria Bold'), url('...'); - font-weight: bold; -} -@font-face { - font-family: Cambria; - src: local('Cambria Italic'), url('...'); - font-style: italic; -} -@font-face { - font-family: Cambria; - src: local('Cambria Bold Italic'), url('...'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: Cambria Math; - src: local('Cambria Math'), url('...'); -} -*/ - -.htmlmathparagraph, m|mtext { - font-family: Cambria; -} -m|math { - font-family: Cambria Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* TODO: verify whether calligraphic letters are available in this font */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 deleted file mode 100644 index c74b7517..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Bold.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Bold.woff2 deleted file mode 100644 index c3620b3b..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Bold.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-BoldItalic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-BoldItalic.woff2 deleted file mode 100644 index 3d641e3d..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-BoldItalic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Italic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Italic.woff2 deleted file mode 100644 index 163819b5..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Italic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 deleted file mode 100644 index 51776932..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css deleted file mode 100644 index ee48b1d3..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css +++ /dev/null @@ -1,51 +0,0 @@ -/* -Deja Vu is released under a Free License. See the files in this directory -for details. This fonts is available on most Linux distributions. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: DejaVu Math TeX Gyre; - src: url('DejaVuMathTeXGyre.woff2'), url('DejaVuMathTeXGyre.woff'); -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif.woff2'), url('DejaVuSerif.woff'); -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif-Bold.woff2'), url('DejaVuSerif-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif-Italic.woff2'), url('DejaVuSerif-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif-BoldItalic.woff2'), - url('DejaVuSerif-BoldItalic.woff'); - font-weight: bold; - font-style: italic; -} - -.htmlmathparagraph, m|mtext { - font-family: DejaVu Serif; -} -m|math { - font-family: DejaVu Math TeX Gyre; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2 deleted file mode 100644 index c13030cd..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css deleted file mode 100644 index c05d74d6..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css +++ /dev/null @@ -1,21 +0,0 @@ -/* -The FiraMath font is released under the SIL Open Font License. See the files in -this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: Fira Math; - src: local('Fira Math'), local('FiraMath-Regular'), - url('FiraMath-Regular.woff2'), url('FiraMath-Regular.woff'); -} - -.htmlmathparagraph, m|mtext { - /* TODO: use FiraGO instead? */ - font-family: Fira Math; -} -m|math { - font-family: Fira Math; -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2 deleted file mode 100644 index 3c27d39f..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2 deleted file mode 100644 index e946d53e..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2 deleted file mode 100644 index 0dd7d2ed..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2 deleted file mode 100644 index e7dfb1d1..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2 deleted file mode 100644 index 2c488f2a..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css deleted file mode 100644 index ea0116c9..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css +++ /dev/null @@ -1,50 +0,0 @@ -/* -The GFS Neohellenic fonts are released under the SIL Open Font License. See the -files in this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - - -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-Regular'), - url('GFSNeohellenic.woff2'), - url('GFSNeohellenic.woff'); -} -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-Bold'), - url('GFSNeohellenic-Bold.woff2'), - url('GFSNeohellenic-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-Italic'), - url('GFSNeohellenic-It.woff2'), - url('GFSNeohellenic-It.woff'); - font-style: italic; -} -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-BoldItalic'), - url('GFSNeohellenic-BoldIt.woff2'), - url('GFSNeohellenic-BoldIt.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: GFS Neohellenic Math; - src: local('GFSNeohellenicMath'), - url('GFSNeohellenicMath.woff2'), - url('GFSNeohellenicMath.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: GFS Neohellenic; -} -m|math { - font-family: GFS Neohellenic Math; -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css deleted file mode 100644 index cbf76d3d..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css +++ /dev/null @@ -1,47 +0,0 @@ -/* -GNU FreeSans is released under the GNU General Public License. See the files in -this directory for details. OpenType MATH support is only available in the -development version. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: FreeSans; - src: url('FreeSans.woff2'), url('FreeSans.woff'); -} -@font-face { - font-family: FreeSans; - src: url('FreeSansBold.woff2'), url('FreeSansBold.woff'); - font-weight: bold; -} -@font-face { - font-family: FreeSans; - src: url('FreeSansOblique.woff2'), url('FreeSansOblique.woff'); - font-style: oblique; -} -@font-face { - font-family: FreeSans; - src: url('FreeSansBoldOblique.woff2'), url('FreeSansBoldOblique.woff'); - font-weight: bold; - font-style: oblique; -} - -.htmlmathparagraph, m|mtext { - font-family: FreeSans; -} -m|math { - font-family: FreeSans; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css deleted file mode 100644 index 9572fbfe..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css +++ /dev/null @@ -1,47 +0,0 @@ -/* -GNU FreeSerif is released under the GNU General Public License. See the files in -this directory for details. OpenType MATH support is only available in the -development version. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: FreeSerif; - src: url('FreeSerif.woff2'), url('FreeSerif.woff'); -} -@font-face { - font-family: FreeSerif; - src: url('FreeSerifBold.woff2'), url('FreeSerifBold.woff'); - font-weight: bold; -} -@font-face { - font-family: FreeSerif; - src: url('FreeSerifItalic.woff2'), url('FreeSerifItalic.woff'); - font-style: italic; -} -@font-face { - font-family: FreeSerif; - src: url('FreeSerifBoldItalic.woff2'), url('FreeSerifBoldItalic.woff'); - font-weight: bold; - font-style: italic; -} - -.htmlmathparagraph, m|mtext { - font-family: FreeSerif; -} -m|math { - font-family: FreeSerif; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Italic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Italic.woff2 deleted file mode 100644 index 21fe6278..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Italic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2 deleted file mode 100644 index 9d8c372e..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2 deleted file mode 100644 index 72102330..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css deleted file mode 100644 index f8b1e9df..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css +++ /dev/null @@ -1,35 +0,0 @@ -/* -The Garamond fonts are released under the SIL Open Font License. See the files -in this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - - -@font-face { - font-family: EB Garamond; - src: local('EBGaramond12-Regular'), - url('EBGaramond12-Regular.woff2'), - url('EBGaramond12-Regular.woff'); -} -@font-face { - font-family: EB Garamond; - src: local('EBGaramond12-Italic'), - url('EBGaramond12-Italic.woff2'), - url('EBGaramond12-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: Garamond Math; - src: local('Garamond-Math'), - url('Garamond-Math.woff2'), - url('Garamond-Math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: EB Garamond; -} -m|math { - font-family: Garamond Math; -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2 deleted file mode 100644 index 6110b17b..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2 deleted file mode 100644 index df169efa..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2 deleted file mode 100644 index c4ef3ed4..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2 deleted file mode 100644 index ae0f344e..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css deleted file mode 100644 index b4b0ceeb..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css +++ /dev/null @@ -1,53 +0,0 @@ -/* -The Latin Modern fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Latin Modern Roman has various sizes. We use the generic name - "Latin Modern Roman" for the local versions and "LMRoman12" for the Web font. -*/ -@font-face { - font-family: LMRoman12; - src: url('lmroman12-regular.woff2'), url('lmroman12-regular.woff'); -} -@font-face { - font-family: LMRoman12; - src: url('lmroman12-bold.woff2'), url('lmroman12-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: LMRoman12; - src: url('lmroman12-italic.woff2'), url('lmroman12-italic.woff'); - font-style: italic; -} -@font-face { - font-family: Latin Modern Math; - src: local('Latin Modern Math'), local('LatinModernMath-Regular'), - url('latinmodern-math.woff2'), url('latinmodern-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: Latin Modern Roman, LMRoman12; -} -m|math { - font-family: Latin Modern Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2 deleted file mode 100644 index c76bab8c..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2 deleted file mode 100644 index 34b9f93b..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2 deleted file mode 100644 index 19fbf7b9..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2 deleted file mode 100644 index dd20fdcf..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2 deleted file mode 100644 index a7ef60ef..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css deleted file mode 100644 index fe6d41c2..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css +++ /dev/null @@ -1,61 +0,0 @@ -/* -The Libertinus fonts are released under the SIL Open Font and GPL Licenses. See -the files in this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif'), local('LibertinusSerif'), - url('libertinusserif-regular.woff2'), - url('libertinusserif-regular.woff'); -} -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif Bold'), local('LibertinusSerif-Bold'), - url('libertinusserif-bold.woff2'), - url('libertinusserif-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif Italic'), local('LibertinusSerif-Italic'), - url('libertinusserif-italic.woff2'), - url('libertinusserif-italic.woff'); - font-style: italic; -} -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif Bold Italic'), - local('LibertinusSerif-BoldItalic'), - url('libertinusserif-bolditalic.woff2'), - url('libertinusserif-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: Libertinus Math; - src: local('Libertinus Math'), local('LibertinusMath'), - url('libertinusmath-regular.woff2'), - url('libertinusmath-regular.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: Libertinus Serif; -} -m|math { - font-family: Libertinus Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* No math script */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css deleted file mode 100644 index 5f056577..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css +++ /dev/null @@ -1,58 +0,0 @@ -/* -The commercial Lucida Bright fonts can be obtained from -http://tug.org/store/lucida/opentype.html and some Web services might -provide them as Web fonts. See also - http://www.microsoft.com/typography/fonts/family.aspx?FID=186 - http://www.microsoft.com/typography/fonts/family.aspx?FID=217 - -Warning: The CSS rules below have not been tested. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Uncomment and complete the URLs if you wish to use Web fonts */ -/* -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright'), url('...'); -} -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright Demibold'), url('...'); - font-weight: bolder; -} -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright Italic'), url('...'); - font-style: italic; -} -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright Demibold Italic'), url('...'); - font-weight: bolder; - font-style: italic; -} -@font-face { - font-family: Lucida Bright Math; - src: local('Lucida Bright Math'), url('...'); -} -*/ - -.htmlmathparagraph, m|mtext { - font-family: Lucida Bright; -} -m|math { - font-family: Lucida Bright Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* TODO: verify whether calligraphic letters are available in this font */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css deleted file mode 100644 index 640b0eaf..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css +++ /dev/null @@ -1,37 +0,0 @@ -/* -The commercial Minion Math fonts and can be obtained from -http://www.typoma.com/en/fonts.html and some Web services might provide them as -Web fonts. - -Warning: The CSS rules below have not been tested. More rules should probably -be added to make this work correctly. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Uncomment and complete the URLs if you wish to use Web fonts */ -/* -@font-face { - font-family: Minion Math; - src: local('Minion Math'), url('...'); -} -*/ - -.htmlmathparagraph, m|mtext { - font-family: Minion Math; -} -m|math { - font-family: Minion Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* TODO: verify whether calligraphic letters are available in this font */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css deleted file mode 100644 index 8df86bf5..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css +++ /dev/null @@ -1,34 +0,0 @@ -/* -Neo Euler is released under the SIL Open Font License. See the files in this -directory for details. The font is still in development. The font does not seem -to have a corresponding "non-MATH" font. - -The WOFF fonts have been obtained from -https://github.com/khaledhosny/euler-otf/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: Neo Euler; - src: local('Neo Euler'), url('euler.woff2'), url('euler.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: Neo Euler; -} -m|math { - font-family: Neo Euler; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2 deleted file mode 100644 index 279a98f0..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2 deleted file mode 100644 index e4394884..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2 deleted file mode 100644 index 0dc0baed..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2 deleted file mode 100644 index 5594de32..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2 deleted file mode 100644 index 263c488a..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css deleted file mode 100644 index 4b287cee..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css +++ /dev/null @@ -1,69 +0,0 @@ -/* -The STIX fonts are released under the SIL Open Font License. See the files in -this directory for details. The font can be obtained from several TeX -distributions or package managers. - -The WOFF fonts have been obtained from -http://downloads.sourceforge.net/project/stixfonts/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - - -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText'), - url('STIXTwoText-Regular.woff2'), - url('STIXTwoText-Regular.woff'); -} -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText-Bold'), - url('STIXTwoText-Bold.woff2'), - url('STIXTwoText-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText-Italic'), - url('STIXTwoText-Italic.woff2'), - url('STIXTwoText-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText-BoldItalic'), - url('STIXTwoText-BoldItalic.woff2'), - url('STIXTwoText-BoldItalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: STIX Two Math; - src: local('STIXTwoMath-Regular'), - url('STIXTwoMath-Regular.woff2'), - url('STIXTwoMath-Regular.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: STIX Two Text; -} -m|math { - font-family: STIX Two Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -@font-feature-values STIX Two Math { @styleset { calligraphic: 1; } } -m|*.calligraphic { - font-variant-alternates: styleset(calligraphic); /* Recommended syntax */ - font-feature-settings: 'ss01'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'ss01'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'ss01'; /* Blink syntax */ -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css deleted file mode 100644 index f7bbeaa0..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css +++ /dev/null @@ -1,62 +0,0 @@ -/* -The TeX Gyre Bonum fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-Regular'), - url('texgyrebonum-regular.woff2'), url('texgyrebonum-regular.woff'); -} -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-Bold'), - url('texgyrebonum-bold.woff2'), url('texgyrebonum-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-Italic'), - url('texgyrebonum-italic.woff2'), url('texgyrebonum-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-BoldItalic'), - url('texgyrebonum-bolditalic.woff2'), - url('texgyrebonum-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Bonum Math; - src: local('TeX Gyre Bonum Math'), local('TeXGyreBonumMath-Regular'), - url('texgyrebonum-math.woff2'), - url('texgyrebonum-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Bonum; -} -m|math { - font-family: TeX Gyre Bonum Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2 deleted file mode 100644 index 013ca1bd..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2 deleted file mode 100644 index ae18fb8b..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2 deleted file mode 100644 index 42742390..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2 deleted file mode 100644 index d16a1cea..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2 deleted file mode 100644 index 8aede98d..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css deleted file mode 100644 index 394686b0..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css +++ /dev/null @@ -1,63 +0,0 @@ -/* -The TeX Gyre Pagella fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-Regular'), - url('texgyrepagella-regular.woff2'), - url('texgyrepagella-regular.woff'); -} -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-Bold'), - url('texgyrepagella-bold.woff2'), url('texgyrepagella-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-Italic'), - url('texgyrepagella-italic.woff2'), url('texgyrepagella-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-BoldItalic'), - url('texgyrepagella-bolditalic.woff2'), - url('texgyrepagella-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Pagella Math; - src: local('TeX Gyre Pagella Math'), local('TeXGyrePagellaMath-Regular'), - url('texgyrepagella-math.woff2'), - url('texgyrepagella-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Pagella; -} -m|math { - font-family: TeX Gyre Pagella Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2 deleted file mode 100644 index 0879c80a..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css deleted file mode 100644 index 41c28c6b..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css +++ /dev/null @@ -1,61 +0,0 @@ -/* -The TeX Gyre Schola fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-Regular'), - url('texgyreschola-regular.woff2'), url('texgyreschola-regular.woff'); -} -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-Bold'), - url('texgyreschola-bold.woff2'), url('texgyreschola-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-Italic'), - url('texgyreschola-italic.woff2'), url('texgyreschola-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-BoldItalic'), - url('texgyreschola-bolditalic.woff2'), - url('texgyreschola-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Schola Math; - src: local('TeX Gyre Schola Math'), local('TeXGyreScholaMath-Regular'), - url('texgyreschola-math.woff2'), url('texgyreschola-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Schola; -} -m|math { - font-family: TeX Gyre Schola Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2 deleted file mode 100644 index 485f2c5b..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2 deleted file mode 100644 index 6c8c3f52..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2 deleted file mode 100644 index afe8d4ef..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2 deleted file mode 100644 index 674c4281..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2 deleted file mode 100644 index 0dbec85e..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css deleted file mode 100644 index d7a65374..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css +++ /dev/null @@ -1,60 +0,0 @@ -/* -The TeX Gyre Termes fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-Regular'), - url('texgyretermes-regular.woff2'), url('texgyretermes-regular.woff'); -} -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-Bold'), - url('texgyretermes-bold.woff2'), url('texgyretermes-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-Italic'), - url('texgyretermes-italic.woff2'), url('texgyretermes-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-BoldItalic'), - url('texgyretermes-bolditalic.woff2'), url('texgyretermes-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Termes Math; - src: local('TeX Gyre Termes Math'), local('TeXGyreTermesMath-Regular'), - url('texgyretermes-math.woff2'), url('texgyretermes-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Termes; -} -m|math { - font-family: TeX Gyre Termes Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2 deleted file mode 100644 index a346eb13..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2 deleted file mode 100644 index 571a2f07..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2 deleted file mode 100644 index 401cd0ec..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2 deleted file mode 100644 index 31c9adc2..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2 deleted file mode 100644 index 1a15f9ad..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2 deleted file mode 100644 index 7a12dd34..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2 deleted file mode 100644 index c4daad18..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2 deleted file mode 100644 index 9d434203..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2 deleted file mode 100644 index 9acf905c..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2 deleted file mode 100644 index c93f7230..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2 deleted file mode 100644 index fa9345cb..00000000 Binary files a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2 and /dev/null differ diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css b/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css deleted file mode 100644 index 9b62b7c3..00000000 --- a/erm.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css +++ /dev/null @@ -1,69 +0,0 @@ -/* -XITS is released under the SIL Open Font License. See the files in this -directory for details. The font can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://mirrors.ctan.org/fonts/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: XITS; - src: local('XITS'), - url('XITS-Regular.woff2'), url('XITS-Regular.woff'); -} -@font-face { - font-family: XITS; - src: local('XITS Bold'), local('XITS-Bold'), - url('XITS-Bold.woff2'), url('XITS-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: XITS; - src: local('XITS Italic'), local('XITS-Italic'), - url('XITS-Italic.woff2'), url('XITS-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: XITS; - src: local('XITS Bold Italic'), local('XITS-BoldItalic'), - url('XITS-BoldItalic.woff2'), url('XITS-BoldItalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: XITS Math; - src: local('XITS Math'), local('XITSMath-Regular'), - url('XITSMath-Regular.woff2'), url('XITSMath-Regular.woff'); -} -@font-face { - font-family: XITS Math; - src: local('XITS Math Bold'), local('XITSMath-Bold'), - url('XITSMath-Bold.woff2'), url('XITSMathBold.woff'); - font-weight: bold; -} - -.htmlmathparagraph, m|mtext { - font-family: XITS; -} -m|math { - font-family: XITS Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -@font-feature-values XITS Math { @styleset { calligraphic: 1; } } -m|*.calligraphic { - font-variant-alternates: styleset(calligraphic); /* Recommended syntax */ - font-feature-settings: 'ss01'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'ss01'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'ss01'; /* Blink syntax */ -} diff --git a/gradle.properties b/gradle.properties index 1456d087..d2708327 100644 --- a/gradle.properties +++ b/gradle.properties @@ -36,9 +36,9 @@ application_version=1.0.0 # platform ########################################################### platform_group=io.sc -platform_version=8.1.44 -platform_plugin_version=8.1.44 -platform_core_frontend_version=8.1.288 +platform_version=8.1.46 +platform_plugin_version=8.1.46 +platform_core_frontend_version=8.1.295 ########################################################### # dependencies version diff --git a/io.sc.engine.mv.frontend/package.json b/io.sc.engine.mv.frontend/package.json index b8426166..f2974676 100644 --- a/io.sc.engine.mv.frontend/package.json +++ b/io.sc.engine.mv.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.engine.mv.frontend", - "version": "8.1.44", + "version": "8.1.46", "description": "", "private": false, "keywords": [], @@ -92,7 +92,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.287", + "platform-core": "8.1.295", "quasar": "2.15.4", "tailwindcss": "3.4.4", "vue": "3.4.31", diff --git a/io.sc.engine.mv.frontend/public/configure.js b/io.sc.engine.mv.frontend/public/configure.js index cffade30..3f4e2e53 100644 --- a/io.sc.engine.mv.frontend/public/configure.js +++ b/io.sc.engine.mv.frontend/public/configure.js @@ -2,6 +2,8 @@ window.APP = {}; // 全局配置 window.APP.configure ={ + // router 历史模式 + routerHistoryMode: 'web', // 应用上下文路径 webContextPath: '[(@{/})]'.startsWith('[')? '/' : '[(@{/})]', // 默认后端 API 请求的服务地址前缀 @@ -20,11 +22,6 @@ window.APP.configure ={ axios : { baseURL: '', timeout: 1000 * 60, - crossdomain: true, - basicAuth: { - enable: true, - username: 'admin', - password: 'admin', - } + crossdomain: true } } \ No newline at end of file diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css deleted file mode 100644 index bcbb5386..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css +++ /dev/null @@ -1,56 +0,0 @@ -/* -The proprietary Cambria fonts are installed by default on Microsoft Windows 7 -and higher and are provided with some other Microsoft products such as Office. -Some Web services may also provide them as Web fonts. For details, see - http://www.microsoft.com/typography/fonts/family.aspx?FID=291 - http://www.microsoft.com/typography/fonts/family.aspx?FID=360 -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Uncomment and complete the URLs if you wish to use Web fonts */ -/* -@font-face { - font-family: Cambria; - src: local('Cambria'), url('...'); -} -@font-face { - font-family: Cambria; - src: local('Cambria Bold'), url('...'); - font-weight: bold; -} -@font-face { - font-family: Cambria; - src: local('Cambria Italic'), url('...'); - font-style: italic; -} -@font-face { - font-family: Cambria; - src: local('Cambria Bold Italic'), url('...'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: Cambria Math; - src: local('Cambria Math'), url('...'); -} -*/ - -.htmlmathparagraph, m|mtext { - font-family: Cambria; -} -m|math { - font-family: Cambria Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* TODO: verify whether calligraphic letters are available in this font */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 deleted file mode 100644 index c74b7517..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Bold.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Bold.woff2 deleted file mode 100644 index c3620b3b..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Bold.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-BoldItalic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-BoldItalic.woff2 deleted file mode 100644 index 3d641e3d..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-BoldItalic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Italic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Italic.woff2 deleted file mode 100644 index 163819b5..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Italic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 deleted file mode 100644 index 51776932..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css deleted file mode 100644 index ee48b1d3..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css +++ /dev/null @@ -1,51 +0,0 @@ -/* -Deja Vu is released under a Free License. See the files in this directory -for details. This fonts is available on most Linux distributions. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: DejaVu Math TeX Gyre; - src: url('DejaVuMathTeXGyre.woff2'), url('DejaVuMathTeXGyre.woff'); -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif.woff2'), url('DejaVuSerif.woff'); -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif-Bold.woff2'), url('DejaVuSerif-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif-Italic.woff2'), url('DejaVuSerif-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif-BoldItalic.woff2'), - url('DejaVuSerif-BoldItalic.woff'); - font-weight: bold; - font-style: italic; -} - -.htmlmathparagraph, m|mtext { - font-family: DejaVu Serif; -} -m|math { - font-family: DejaVu Math TeX Gyre; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2 deleted file mode 100644 index c13030cd..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css deleted file mode 100644 index c05d74d6..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css +++ /dev/null @@ -1,21 +0,0 @@ -/* -The FiraMath font is released under the SIL Open Font License. See the files in -this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: Fira Math; - src: local('Fira Math'), local('FiraMath-Regular'), - url('FiraMath-Regular.woff2'), url('FiraMath-Regular.woff'); -} - -.htmlmathparagraph, m|mtext { - /* TODO: use FiraGO instead? */ - font-family: Fira Math; -} -m|math { - font-family: Fira Math; -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2 deleted file mode 100644 index 3c27d39f..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2 deleted file mode 100644 index e946d53e..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2 deleted file mode 100644 index 0dd7d2ed..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2 deleted file mode 100644 index e7dfb1d1..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2 deleted file mode 100644 index 2c488f2a..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css deleted file mode 100644 index ea0116c9..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css +++ /dev/null @@ -1,50 +0,0 @@ -/* -The GFS Neohellenic fonts are released under the SIL Open Font License. See the -files in this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - - -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-Regular'), - url('GFSNeohellenic.woff2'), - url('GFSNeohellenic.woff'); -} -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-Bold'), - url('GFSNeohellenic-Bold.woff2'), - url('GFSNeohellenic-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-Italic'), - url('GFSNeohellenic-It.woff2'), - url('GFSNeohellenic-It.woff'); - font-style: italic; -} -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-BoldItalic'), - url('GFSNeohellenic-BoldIt.woff2'), - url('GFSNeohellenic-BoldIt.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: GFS Neohellenic Math; - src: local('GFSNeohellenicMath'), - url('GFSNeohellenicMath.woff2'), - url('GFSNeohellenicMath.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: GFS Neohellenic; -} -m|math { - font-family: GFS Neohellenic Math; -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css deleted file mode 100644 index cbf76d3d..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css +++ /dev/null @@ -1,47 +0,0 @@ -/* -GNU FreeSans is released under the GNU General Public License. See the files in -this directory for details. OpenType MATH support is only available in the -development version. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: FreeSans; - src: url('FreeSans.woff2'), url('FreeSans.woff'); -} -@font-face { - font-family: FreeSans; - src: url('FreeSansBold.woff2'), url('FreeSansBold.woff'); - font-weight: bold; -} -@font-face { - font-family: FreeSans; - src: url('FreeSansOblique.woff2'), url('FreeSansOblique.woff'); - font-style: oblique; -} -@font-face { - font-family: FreeSans; - src: url('FreeSansBoldOblique.woff2'), url('FreeSansBoldOblique.woff'); - font-weight: bold; - font-style: oblique; -} - -.htmlmathparagraph, m|mtext { - font-family: FreeSans; -} -m|math { - font-family: FreeSans; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css deleted file mode 100644 index 9572fbfe..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css +++ /dev/null @@ -1,47 +0,0 @@ -/* -GNU FreeSerif is released under the GNU General Public License. See the files in -this directory for details. OpenType MATH support is only available in the -development version. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: FreeSerif; - src: url('FreeSerif.woff2'), url('FreeSerif.woff'); -} -@font-face { - font-family: FreeSerif; - src: url('FreeSerifBold.woff2'), url('FreeSerifBold.woff'); - font-weight: bold; -} -@font-face { - font-family: FreeSerif; - src: url('FreeSerifItalic.woff2'), url('FreeSerifItalic.woff'); - font-style: italic; -} -@font-face { - font-family: FreeSerif; - src: url('FreeSerifBoldItalic.woff2'), url('FreeSerifBoldItalic.woff'); - font-weight: bold; - font-style: italic; -} - -.htmlmathparagraph, m|mtext { - font-family: FreeSerif; -} -m|math { - font-family: FreeSerif; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Italic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Italic.woff2 deleted file mode 100644 index 21fe6278..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Italic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2 deleted file mode 100644 index 9d8c372e..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2 deleted file mode 100644 index 72102330..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css deleted file mode 100644 index f8b1e9df..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css +++ /dev/null @@ -1,35 +0,0 @@ -/* -The Garamond fonts are released under the SIL Open Font License. See the files -in this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - - -@font-face { - font-family: EB Garamond; - src: local('EBGaramond12-Regular'), - url('EBGaramond12-Regular.woff2'), - url('EBGaramond12-Regular.woff'); -} -@font-face { - font-family: EB Garamond; - src: local('EBGaramond12-Italic'), - url('EBGaramond12-Italic.woff2'), - url('EBGaramond12-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: Garamond Math; - src: local('Garamond-Math'), - url('Garamond-Math.woff2'), - url('Garamond-Math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: EB Garamond; -} -m|math { - font-family: Garamond Math; -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2 deleted file mode 100644 index 6110b17b..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2 deleted file mode 100644 index df169efa..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2 deleted file mode 100644 index c4ef3ed4..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2 deleted file mode 100644 index ae0f344e..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css deleted file mode 100644 index b4b0ceeb..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css +++ /dev/null @@ -1,53 +0,0 @@ -/* -The Latin Modern fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Latin Modern Roman has various sizes. We use the generic name - "Latin Modern Roman" for the local versions and "LMRoman12" for the Web font. -*/ -@font-face { - font-family: LMRoman12; - src: url('lmroman12-regular.woff2'), url('lmroman12-regular.woff'); -} -@font-face { - font-family: LMRoman12; - src: url('lmroman12-bold.woff2'), url('lmroman12-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: LMRoman12; - src: url('lmroman12-italic.woff2'), url('lmroman12-italic.woff'); - font-style: italic; -} -@font-face { - font-family: Latin Modern Math; - src: local('Latin Modern Math'), local('LatinModernMath-Regular'), - url('latinmodern-math.woff2'), url('latinmodern-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: Latin Modern Roman, LMRoman12; -} -m|math { - font-family: Latin Modern Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2 deleted file mode 100644 index c76bab8c..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2 deleted file mode 100644 index 34b9f93b..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2 deleted file mode 100644 index 19fbf7b9..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2 deleted file mode 100644 index dd20fdcf..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2 deleted file mode 100644 index a7ef60ef..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css deleted file mode 100644 index fe6d41c2..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css +++ /dev/null @@ -1,61 +0,0 @@ -/* -The Libertinus fonts are released under the SIL Open Font and GPL Licenses. See -the files in this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif'), local('LibertinusSerif'), - url('libertinusserif-regular.woff2'), - url('libertinusserif-regular.woff'); -} -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif Bold'), local('LibertinusSerif-Bold'), - url('libertinusserif-bold.woff2'), - url('libertinusserif-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif Italic'), local('LibertinusSerif-Italic'), - url('libertinusserif-italic.woff2'), - url('libertinusserif-italic.woff'); - font-style: italic; -} -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif Bold Italic'), - local('LibertinusSerif-BoldItalic'), - url('libertinusserif-bolditalic.woff2'), - url('libertinusserif-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: Libertinus Math; - src: local('Libertinus Math'), local('LibertinusMath'), - url('libertinusmath-regular.woff2'), - url('libertinusmath-regular.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: Libertinus Serif; -} -m|math { - font-family: Libertinus Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* No math script */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css deleted file mode 100644 index 5f056577..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css +++ /dev/null @@ -1,58 +0,0 @@ -/* -The commercial Lucida Bright fonts can be obtained from -http://tug.org/store/lucida/opentype.html and some Web services might -provide them as Web fonts. See also - http://www.microsoft.com/typography/fonts/family.aspx?FID=186 - http://www.microsoft.com/typography/fonts/family.aspx?FID=217 - -Warning: The CSS rules below have not been tested. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Uncomment and complete the URLs if you wish to use Web fonts */ -/* -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright'), url('...'); -} -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright Demibold'), url('...'); - font-weight: bolder; -} -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright Italic'), url('...'); - font-style: italic; -} -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright Demibold Italic'), url('...'); - font-weight: bolder; - font-style: italic; -} -@font-face { - font-family: Lucida Bright Math; - src: local('Lucida Bright Math'), url('...'); -} -*/ - -.htmlmathparagraph, m|mtext { - font-family: Lucida Bright; -} -m|math { - font-family: Lucida Bright Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* TODO: verify whether calligraphic letters are available in this font */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css deleted file mode 100644 index 640b0eaf..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css +++ /dev/null @@ -1,37 +0,0 @@ -/* -The commercial Minion Math fonts and can be obtained from -http://www.typoma.com/en/fonts.html and some Web services might provide them as -Web fonts. - -Warning: The CSS rules below have not been tested. More rules should probably -be added to make this work correctly. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Uncomment and complete the URLs if you wish to use Web fonts */ -/* -@font-face { - font-family: Minion Math; - src: local('Minion Math'), url('...'); -} -*/ - -.htmlmathparagraph, m|mtext { - font-family: Minion Math; -} -m|math { - font-family: Minion Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* TODO: verify whether calligraphic letters are available in this font */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css deleted file mode 100644 index 8df86bf5..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css +++ /dev/null @@ -1,34 +0,0 @@ -/* -Neo Euler is released under the SIL Open Font License. See the files in this -directory for details. The font is still in development. The font does not seem -to have a corresponding "non-MATH" font. - -The WOFF fonts have been obtained from -https://github.com/khaledhosny/euler-otf/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: Neo Euler; - src: local('Neo Euler'), url('euler.woff2'), url('euler.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: Neo Euler; -} -m|math { - font-family: Neo Euler; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2 deleted file mode 100644 index 279a98f0..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2 deleted file mode 100644 index e4394884..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2 deleted file mode 100644 index 0dc0baed..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2 deleted file mode 100644 index 5594de32..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2 deleted file mode 100644 index 263c488a..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css deleted file mode 100644 index 4b287cee..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css +++ /dev/null @@ -1,69 +0,0 @@ -/* -The STIX fonts are released under the SIL Open Font License. See the files in -this directory for details. The font can be obtained from several TeX -distributions or package managers. - -The WOFF fonts have been obtained from -http://downloads.sourceforge.net/project/stixfonts/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - - -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText'), - url('STIXTwoText-Regular.woff2'), - url('STIXTwoText-Regular.woff'); -} -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText-Bold'), - url('STIXTwoText-Bold.woff2'), - url('STIXTwoText-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText-Italic'), - url('STIXTwoText-Italic.woff2'), - url('STIXTwoText-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText-BoldItalic'), - url('STIXTwoText-BoldItalic.woff2'), - url('STIXTwoText-BoldItalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: STIX Two Math; - src: local('STIXTwoMath-Regular'), - url('STIXTwoMath-Regular.woff2'), - url('STIXTwoMath-Regular.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: STIX Two Text; -} -m|math { - font-family: STIX Two Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -@font-feature-values STIX Two Math { @styleset { calligraphic: 1; } } -m|*.calligraphic { - font-variant-alternates: styleset(calligraphic); /* Recommended syntax */ - font-feature-settings: 'ss01'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'ss01'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'ss01'; /* Blink syntax */ -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css deleted file mode 100644 index f7bbeaa0..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css +++ /dev/null @@ -1,62 +0,0 @@ -/* -The TeX Gyre Bonum fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-Regular'), - url('texgyrebonum-regular.woff2'), url('texgyrebonum-regular.woff'); -} -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-Bold'), - url('texgyrebonum-bold.woff2'), url('texgyrebonum-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-Italic'), - url('texgyrebonum-italic.woff2'), url('texgyrebonum-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-BoldItalic'), - url('texgyrebonum-bolditalic.woff2'), - url('texgyrebonum-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Bonum Math; - src: local('TeX Gyre Bonum Math'), local('TeXGyreBonumMath-Regular'), - url('texgyrebonum-math.woff2'), - url('texgyrebonum-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Bonum; -} -m|math { - font-family: TeX Gyre Bonum Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2 deleted file mode 100644 index 013ca1bd..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2 deleted file mode 100644 index ae18fb8b..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2 deleted file mode 100644 index 42742390..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2 deleted file mode 100644 index d16a1cea..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2 deleted file mode 100644 index 8aede98d..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css deleted file mode 100644 index 394686b0..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css +++ /dev/null @@ -1,63 +0,0 @@ -/* -The TeX Gyre Pagella fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-Regular'), - url('texgyrepagella-regular.woff2'), - url('texgyrepagella-regular.woff'); -} -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-Bold'), - url('texgyrepagella-bold.woff2'), url('texgyrepagella-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-Italic'), - url('texgyrepagella-italic.woff2'), url('texgyrepagella-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-BoldItalic'), - url('texgyrepagella-bolditalic.woff2'), - url('texgyrepagella-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Pagella Math; - src: local('TeX Gyre Pagella Math'), local('TeXGyrePagellaMath-Regular'), - url('texgyrepagella-math.woff2'), - url('texgyrepagella-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Pagella; -} -m|math { - font-family: TeX Gyre Pagella Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2 deleted file mode 100644 index 0879c80a..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css deleted file mode 100644 index 41c28c6b..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css +++ /dev/null @@ -1,61 +0,0 @@ -/* -The TeX Gyre Schola fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-Regular'), - url('texgyreschola-regular.woff2'), url('texgyreschola-regular.woff'); -} -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-Bold'), - url('texgyreschola-bold.woff2'), url('texgyreschola-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-Italic'), - url('texgyreschola-italic.woff2'), url('texgyreschola-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-BoldItalic'), - url('texgyreschola-bolditalic.woff2'), - url('texgyreschola-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Schola Math; - src: local('TeX Gyre Schola Math'), local('TeXGyreScholaMath-Regular'), - url('texgyreschola-math.woff2'), url('texgyreschola-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Schola; -} -m|math { - font-family: TeX Gyre Schola Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2 deleted file mode 100644 index 485f2c5b..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2 deleted file mode 100644 index 6c8c3f52..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2 deleted file mode 100644 index afe8d4ef..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2 deleted file mode 100644 index 674c4281..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2 deleted file mode 100644 index 0dbec85e..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css deleted file mode 100644 index d7a65374..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css +++ /dev/null @@ -1,60 +0,0 @@ -/* -The TeX Gyre Termes fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-Regular'), - url('texgyretermes-regular.woff2'), url('texgyretermes-regular.woff'); -} -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-Bold'), - url('texgyretermes-bold.woff2'), url('texgyretermes-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-Italic'), - url('texgyretermes-italic.woff2'), url('texgyretermes-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-BoldItalic'), - url('texgyretermes-bolditalic.woff2'), url('texgyretermes-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Termes Math; - src: local('TeX Gyre Termes Math'), local('TeXGyreTermesMath-Regular'), - url('texgyretermes-math.woff2'), url('texgyretermes-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Termes; -} -m|math { - font-family: TeX Gyre Termes Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2 deleted file mode 100644 index a346eb13..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2 deleted file mode 100644 index 571a2f07..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2 deleted file mode 100644 index 401cd0ec..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2 deleted file mode 100644 index 31c9adc2..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2 deleted file mode 100644 index 1a15f9ad..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2 deleted file mode 100644 index 7a12dd34..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2 deleted file mode 100644 index c4daad18..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2 deleted file mode 100644 index 9d434203..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2 deleted file mode 100644 index 9acf905c..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2 deleted file mode 100644 index c93f7230..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2 deleted file mode 100644 index fa9345cb..00000000 Binary files a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css deleted file mode 100644 index 9b62b7c3..00000000 --- a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css +++ /dev/null @@ -1,69 +0,0 @@ -/* -XITS is released under the SIL Open Font License. See the files in this -directory for details. The font can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://mirrors.ctan.org/fonts/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: XITS; - src: local('XITS'), - url('XITS-Regular.woff2'), url('XITS-Regular.woff'); -} -@font-face { - font-family: XITS; - src: local('XITS Bold'), local('XITS-Bold'), - url('XITS-Bold.woff2'), url('XITS-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: XITS; - src: local('XITS Italic'), local('XITS-Italic'), - url('XITS-Italic.woff2'), url('XITS-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: XITS; - src: local('XITS Bold Italic'), local('XITS-BoldItalic'), - url('XITS-BoldItalic.woff2'), url('XITS-BoldItalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: XITS Math; - src: local('XITS Math'), local('XITSMath-Regular'), - url('XITSMath-Regular.woff2'), url('XITSMath-Regular.woff'); -} -@font-face { - font-family: XITS Math; - src: local('XITS Math Bold'), local('XITSMath-Bold'), - url('XITSMath-Bold.woff2'), url('XITSMathBold.woff'); - font-weight: bold; -} - -.htmlmathparagraph, m|mtext { - font-family: XITS; -} -m|math { - font-family: XITS Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -@font-feature-values XITS Math { @styleset { calligraphic: 1; } } -m|*.calligraphic { - font-variant-alternates: styleset(calligraphic); /* Recommended syntax */ - font-feature-settings: 'ss01'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'ss01'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'ss01'; /* Blink syntax */ -} diff --git a/io.sc.engine.mv/build.gradle b/io.sc.engine.mv/build.gradle index 5a637401..35b1bd64 100644 --- a/io.sc.engine.mv/build.gradle +++ b/io.sc.engine.mv/build.gradle @@ -1,9 +1,7 @@ dependencies { api( -// "io.sc:io.sc.platform.groovy:${platform_version}", -// "io.sc:io.sc.platform.system:${platform_version}", - project(":io.sc.platform.groovy"), - project(":io.sc.platform.data"), - project(":io.sc.platform.system"), + project(":io.sc.platform.groovy"), + project(":io.sc.platform.data"), + project(":io.sc.platform.system"), ) } diff --git a/io.sc.engine.rule.frontend/package.json b/io.sc.engine.rule.frontend/package.json index beac6faf..4eb9d7e2 100644 --- a/io.sc.engine.rule.frontend/package.json +++ b/io.sc.engine.rule.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.engine.rule.frontend", - "version": "8.1.44", + "version": "8.1.46", "description": "", "private": false, "keywords": [], @@ -92,7 +92,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.287", + "platform-core": "8.1.295", "quasar": "2.15.4", "tailwindcss": "3.4.4", "vue": "3.4.31", diff --git a/io.sc.engine.rule.frontend/public/configure.js b/io.sc.engine.rule.frontend/public/configure.js index cffade30..3f4e2e53 100644 --- a/io.sc.engine.rule.frontend/public/configure.js +++ b/io.sc.engine.rule.frontend/public/configure.js @@ -2,6 +2,8 @@ window.APP = {}; // 全局配置 window.APP.configure ={ + // router 历史模式 + routerHistoryMode: 'web', // 应用上下文路径 webContextPath: '[(@{/})]'.startsWith('[')? '/' : '[(@{/})]', // 默认后端 API 请求的服务地址前缀 @@ -20,11 +22,6 @@ window.APP.configure ={ axios : { baseURL: '', timeout: 1000 * 60, - crossdomain: true, - basicAuth: { - enable: true, - username: 'admin', - password: 'admin', - } + crossdomain: true } } \ No newline at end of file diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css deleted file mode 100644 index bcbb5386..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css +++ /dev/null @@ -1,56 +0,0 @@ -/* -The proprietary Cambria fonts are installed by default on Microsoft Windows 7 -and higher and are provided with some other Microsoft products such as Office. -Some Web services may also provide them as Web fonts. For details, see - http://www.microsoft.com/typography/fonts/family.aspx?FID=291 - http://www.microsoft.com/typography/fonts/family.aspx?FID=360 -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Uncomment and complete the URLs if you wish to use Web fonts */ -/* -@font-face { - font-family: Cambria; - src: local('Cambria'), url('...'); -} -@font-face { - font-family: Cambria; - src: local('Cambria Bold'), url('...'); - font-weight: bold; -} -@font-face { - font-family: Cambria; - src: local('Cambria Italic'), url('...'); - font-style: italic; -} -@font-face { - font-family: Cambria; - src: local('Cambria Bold Italic'), url('...'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: Cambria Math; - src: local('Cambria Math'), url('...'); -} -*/ - -.htmlmathparagraph, m|mtext { - font-family: Cambria; -} -m|math { - font-family: Cambria Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* TODO: verify whether calligraphic letters are available in this font */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 deleted file mode 100644 index c74b7517..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Bold.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Bold.woff2 deleted file mode 100644 index c3620b3b..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Bold.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-BoldItalic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-BoldItalic.woff2 deleted file mode 100644 index 3d641e3d..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-BoldItalic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Italic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Italic.woff2 deleted file mode 100644 index 163819b5..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Italic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 deleted file mode 100644 index 51776932..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css deleted file mode 100644 index ee48b1d3..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css +++ /dev/null @@ -1,51 +0,0 @@ -/* -Deja Vu is released under a Free License. See the files in this directory -for details. This fonts is available on most Linux distributions. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: DejaVu Math TeX Gyre; - src: url('DejaVuMathTeXGyre.woff2'), url('DejaVuMathTeXGyre.woff'); -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif.woff2'), url('DejaVuSerif.woff'); -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif-Bold.woff2'), url('DejaVuSerif-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif-Italic.woff2'), url('DejaVuSerif-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif-BoldItalic.woff2'), - url('DejaVuSerif-BoldItalic.woff'); - font-weight: bold; - font-style: italic; -} - -.htmlmathparagraph, m|mtext { - font-family: DejaVu Serif; -} -m|math { - font-family: DejaVu Math TeX Gyre; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2 deleted file mode 100644 index c13030cd..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css deleted file mode 100644 index c05d74d6..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css +++ /dev/null @@ -1,21 +0,0 @@ -/* -The FiraMath font is released under the SIL Open Font License. See the files in -this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: Fira Math; - src: local('Fira Math'), local('FiraMath-Regular'), - url('FiraMath-Regular.woff2'), url('FiraMath-Regular.woff'); -} - -.htmlmathparagraph, m|mtext { - /* TODO: use FiraGO instead? */ - font-family: Fira Math; -} -m|math { - font-family: Fira Math; -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2 deleted file mode 100644 index 3c27d39f..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2 deleted file mode 100644 index e946d53e..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2 deleted file mode 100644 index 0dd7d2ed..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2 deleted file mode 100644 index e7dfb1d1..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2 deleted file mode 100644 index 2c488f2a..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css deleted file mode 100644 index ea0116c9..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css +++ /dev/null @@ -1,50 +0,0 @@ -/* -The GFS Neohellenic fonts are released under the SIL Open Font License. See the -files in this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - - -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-Regular'), - url('GFSNeohellenic.woff2'), - url('GFSNeohellenic.woff'); -} -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-Bold'), - url('GFSNeohellenic-Bold.woff2'), - url('GFSNeohellenic-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-Italic'), - url('GFSNeohellenic-It.woff2'), - url('GFSNeohellenic-It.woff'); - font-style: italic; -} -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-BoldItalic'), - url('GFSNeohellenic-BoldIt.woff2'), - url('GFSNeohellenic-BoldIt.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: GFS Neohellenic Math; - src: local('GFSNeohellenicMath'), - url('GFSNeohellenicMath.woff2'), - url('GFSNeohellenicMath.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: GFS Neohellenic; -} -m|math { - font-family: GFS Neohellenic Math; -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css deleted file mode 100644 index cbf76d3d..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css +++ /dev/null @@ -1,47 +0,0 @@ -/* -GNU FreeSans is released under the GNU General Public License. See the files in -this directory for details. OpenType MATH support is only available in the -development version. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: FreeSans; - src: url('FreeSans.woff2'), url('FreeSans.woff'); -} -@font-face { - font-family: FreeSans; - src: url('FreeSansBold.woff2'), url('FreeSansBold.woff'); - font-weight: bold; -} -@font-face { - font-family: FreeSans; - src: url('FreeSansOblique.woff2'), url('FreeSansOblique.woff'); - font-style: oblique; -} -@font-face { - font-family: FreeSans; - src: url('FreeSansBoldOblique.woff2'), url('FreeSansBoldOblique.woff'); - font-weight: bold; - font-style: oblique; -} - -.htmlmathparagraph, m|mtext { - font-family: FreeSans; -} -m|math { - font-family: FreeSans; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css deleted file mode 100644 index 9572fbfe..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css +++ /dev/null @@ -1,47 +0,0 @@ -/* -GNU FreeSerif is released under the GNU General Public License. See the files in -this directory for details. OpenType MATH support is only available in the -development version. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: FreeSerif; - src: url('FreeSerif.woff2'), url('FreeSerif.woff'); -} -@font-face { - font-family: FreeSerif; - src: url('FreeSerifBold.woff2'), url('FreeSerifBold.woff'); - font-weight: bold; -} -@font-face { - font-family: FreeSerif; - src: url('FreeSerifItalic.woff2'), url('FreeSerifItalic.woff'); - font-style: italic; -} -@font-face { - font-family: FreeSerif; - src: url('FreeSerifBoldItalic.woff2'), url('FreeSerifBoldItalic.woff'); - font-weight: bold; - font-style: italic; -} - -.htmlmathparagraph, m|mtext { - font-family: FreeSerif; -} -m|math { - font-family: FreeSerif; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Italic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Italic.woff2 deleted file mode 100644 index 21fe6278..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Italic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2 deleted file mode 100644 index 9d8c372e..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2 deleted file mode 100644 index 72102330..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css deleted file mode 100644 index f8b1e9df..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css +++ /dev/null @@ -1,35 +0,0 @@ -/* -The Garamond fonts are released under the SIL Open Font License. See the files -in this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - - -@font-face { - font-family: EB Garamond; - src: local('EBGaramond12-Regular'), - url('EBGaramond12-Regular.woff2'), - url('EBGaramond12-Regular.woff'); -} -@font-face { - font-family: EB Garamond; - src: local('EBGaramond12-Italic'), - url('EBGaramond12-Italic.woff2'), - url('EBGaramond12-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: Garamond Math; - src: local('Garamond-Math'), - url('Garamond-Math.woff2'), - url('Garamond-Math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: EB Garamond; -} -m|math { - font-family: Garamond Math; -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2 deleted file mode 100644 index 6110b17b..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2 deleted file mode 100644 index df169efa..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2 deleted file mode 100644 index c4ef3ed4..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2 deleted file mode 100644 index ae0f344e..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css deleted file mode 100644 index b4b0ceeb..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css +++ /dev/null @@ -1,53 +0,0 @@ -/* -The Latin Modern fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Latin Modern Roman has various sizes. We use the generic name - "Latin Modern Roman" for the local versions and "LMRoman12" for the Web font. -*/ -@font-face { - font-family: LMRoman12; - src: url('lmroman12-regular.woff2'), url('lmroman12-regular.woff'); -} -@font-face { - font-family: LMRoman12; - src: url('lmroman12-bold.woff2'), url('lmroman12-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: LMRoman12; - src: url('lmroman12-italic.woff2'), url('lmroman12-italic.woff'); - font-style: italic; -} -@font-face { - font-family: Latin Modern Math; - src: local('Latin Modern Math'), local('LatinModernMath-Regular'), - url('latinmodern-math.woff2'), url('latinmodern-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: Latin Modern Roman, LMRoman12; -} -m|math { - font-family: Latin Modern Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2 deleted file mode 100644 index c76bab8c..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2 deleted file mode 100644 index 34b9f93b..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2 deleted file mode 100644 index 19fbf7b9..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2 deleted file mode 100644 index dd20fdcf..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2 deleted file mode 100644 index a7ef60ef..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css deleted file mode 100644 index fe6d41c2..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css +++ /dev/null @@ -1,61 +0,0 @@ -/* -The Libertinus fonts are released under the SIL Open Font and GPL Licenses. See -the files in this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif'), local('LibertinusSerif'), - url('libertinusserif-regular.woff2'), - url('libertinusserif-regular.woff'); -} -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif Bold'), local('LibertinusSerif-Bold'), - url('libertinusserif-bold.woff2'), - url('libertinusserif-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif Italic'), local('LibertinusSerif-Italic'), - url('libertinusserif-italic.woff2'), - url('libertinusserif-italic.woff'); - font-style: italic; -} -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif Bold Italic'), - local('LibertinusSerif-BoldItalic'), - url('libertinusserif-bolditalic.woff2'), - url('libertinusserif-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: Libertinus Math; - src: local('Libertinus Math'), local('LibertinusMath'), - url('libertinusmath-regular.woff2'), - url('libertinusmath-regular.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: Libertinus Serif; -} -m|math { - font-family: Libertinus Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* No math script */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css deleted file mode 100644 index 5f056577..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css +++ /dev/null @@ -1,58 +0,0 @@ -/* -The commercial Lucida Bright fonts can be obtained from -http://tug.org/store/lucida/opentype.html and some Web services might -provide them as Web fonts. See also - http://www.microsoft.com/typography/fonts/family.aspx?FID=186 - http://www.microsoft.com/typography/fonts/family.aspx?FID=217 - -Warning: The CSS rules below have not been tested. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Uncomment and complete the URLs if you wish to use Web fonts */ -/* -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright'), url('...'); -} -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright Demibold'), url('...'); - font-weight: bolder; -} -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright Italic'), url('...'); - font-style: italic; -} -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright Demibold Italic'), url('...'); - font-weight: bolder; - font-style: italic; -} -@font-face { - font-family: Lucida Bright Math; - src: local('Lucida Bright Math'), url('...'); -} -*/ - -.htmlmathparagraph, m|mtext { - font-family: Lucida Bright; -} -m|math { - font-family: Lucida Bright Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* TODO: verify whether calligraphic letters are available in this font */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css deleted file mode 100644 index 640b0eaf..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css +++ /dev/null @@ -1,37 +0,0 @@ -/* -The commercial Minion Math fonts and can be obtained from -http://www.typoma.com/en/fonts.html and some Web services might provide them as -Web fonts. - -Warning: The CSS rules below have not been tested. More rules should probably -be added to make this work correctly. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Uncomment and complete the URLs if you wish to use Web fonts */ -/* -@font-face { - font-family: Minion Math; - src: local('Minion Math'), url('...'); -} -*/ - -.htmlmathparagraph, m|mtext { - font-family: Minion Math; -} -m|math { - font-family: Minion Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* TODO: verify whether calligraphic letters are available in this font */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css deleted file mode 100644 index 8df86bf5..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css +++ /dev/null @@ -1,34 +0,0 @@ -/* -Neo Euler is released under the SIL Open Font License. See the files in this -directory for details. The font is still in development. The font does not seem -to have a corresponding "non-MATH" font. - -The WOFF fonts have been obtained from -https://github.com/khaledhosny/euler-otf/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: Neo Euler; - src: local('Neo Euler'), url('euler.woff2'), url('euler.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: Neo Euler; -} -m|math { - font-family: Neo Euler; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2 deleted file mode 100644 index 279a98f0..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2 deleted file mode 100644 index e4394884..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2 deleted file mode 100644 index 0dc0baed..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2 deleted file mode 100644 index 5594de32..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2 deleted file mode 100644 index 263c488a..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css deleted file mode 100644 index 4b287cee..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css +++ /dev/null @@ -1,69 +0,0 @@ -/* -The STIX fonts are released under the SIL Open Font License. See the files in -this directory for details. The font can be obtained from several TeX -distributions or package managers. - -The WOFF fonts have been obtained from -http://downloads.sourceforge.net/project/stixfonts/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - - -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText'), - url('STIXTwoText-Regular.woff2'), - url('STIXTwoText-Regular.woff'); -} -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText-Bold'), - url('STIXTwoText-Bold.woff2'), - url('STIXTwoText-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText-Italic'), - url('STIXTwoText-Italic.woff2'), - url('STIXTwoText-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText-BoldItalic'), - url('STIXTwoText-BoldItalic.woff2'), - url('STIXTwoText-BoldItalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: STIX Two Math; - src: local('STIXTwoMath-Regular'), - url('STIXTwoMath-Regular.woff2'), - url('STIXTwoMath-Regular.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: STIX Two Text; -} -m|math { - font-family: STIX Two Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -@font-feature-values STIX Two Math { @styleset { calligraphic: 1; } } -m|*.calligraphic { - font-variant-alternates: styleset(calligraphic); /* Recommended syntax */ - font-feature-settings: 'ss01'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'ss01'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'ss01'; /* Blink syntax */ -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css deleted file mode 100644 index f7bbeaa0..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css +++ /dev/null @@ -1,62 +0,0 @@ -/* -The TeX Gyre Bonum fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-Regular'), - url('texgyrebonum-regular.woff2'), url('texgyrebonum-regular.woff'); -} -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-Bold'), - url('texgyrebonum-bold.woff2'), url('texgyrebonum-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-Italic'), - url('texgyrebonum-italic.woff2'), url('texgyrebonum-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-BoldItalic'), - url('texgyrebonum-bolditalic.woff2'), - url('texgyrebonum-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Bonum Math; - src: local('TeX Gyre Bonum Math'), local('TeXGyreBonumMath-Regular'), - url('texgyrebonum-math.woff2'), - url('texgyrebonum-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Bonum; -} -m|math { - font-family: TeX Gyre Bonum Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2 deleted file mode 100644 index 013ca1bd..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2 deleted file mode 100644 index ae18fb8b..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2 deleted file mode 100644 index 42742390..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2 deleted file mode 100644 index d16a1cea..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2 deleted file mode 100644 index 8aede98d..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css deleted file mode 100644 index 394686b0..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css +++ /dev/null @@ -1,63 +0,0 @@ -/* -The TeX Gyre Pagella fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-Regular'), - url('texgyrepagella-regular.woff2'), - url('texgyrepagella-regular.woff'); -} -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-Bold'), - url('texgyrepagella-bold.woff2'), url('texgyrepagella-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-Italic'), - url('texgyrepagella-italic.woff2'), url('texgyrepagella-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-BoldItalic'), - url('texgyrepagella-bolditalic.woff2'), - url('texgyrepagella-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Pagella Math; - src: local('TeX Gyre Pagella Math'), local('TeXGyrePagellaMath-Regular'), - url('texgyrepagella-math.woff2'), - url('texgyrepagella-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Pagella; -} -m|math { - font-family: TeX Gyre Pagella Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2 deleted file mode 100644 index 0879c80a..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css deleted file mode 100644 index 41c28c6b..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css +++ /dev/null @@ -1,61 +0,0 @@ -/* -The TeX Gyre Schola fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-Regular'), - url('texgyreschola-regular.woff2'), url('texgyreschola-regular.woff'); -} -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-Bold'), - url('texgyreschola-bold.woff2'), url('texgyreschola-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-Italic'), - url('texgyreschola-italic.woff2'), url('texgyreschola-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-BoldItalic'), - url('texgyreschola-bolditalic.woff2'), - url('texgyreschola-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Schola Math; - src: local('TeX Gyre Schola Math'), local('TeXGyreScholaMath-Regular'), - url('texgyreschola-math.woff2'), url('texgyreschola-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Schola; -} -m|math { - font-family: TeX Gyre Schola Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2 deleted file mode 100644 index 485f2c5b..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2 deleted file mode 100644 index 6c8c3f52..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2 deleted file mode 100644 index afe8d4ef..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2 deleted file mode 100644 index 674c4281..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2 deleted file mode 100644 index 0dbec85e..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css deleted file mode 100644 index d7a65374..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css +++ /dev/null @@ -1,60 +0,0 @@ -/* -The TeX Gyre Termes fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-Regular'), - url('texgyretermes-regular.woff2'), url('texgyretermes-regular.woff'); -} -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-Bold'), - url('texgyretermes-bold.woff2'), url('texgyretermes-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-Italic'), - url('texgyretermes-italic.woff2'), url('texgyretermes-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-BoldItalic'), - url('texgyretermes-bolditalic.woff2'), url('texgyretermes-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Termes Math; - src: local('TeX Gyre Termes Math'), local('TeXGyreTermesMath-Regular'), - url('texgyretermes-math.woff2'), url('texgyretermes-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Termes; -} -m|math { - font-family: TeX Gyre Termes Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2 deleted file mode 100644 index a346eb13..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2 deleted file mode 100644 index 571a2f07..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2 deleted file mode 100644 index 401cd0ec..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2 deleted file mode 100644 index 31c9adc2..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2 deleted file mode 100644 index 1a15f9ad..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2 deleted file mode 100644 index 7a12dd34..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2 deleted file mode 100644 index c4daad18..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2 deleted file mode 100644 index 9d434203..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2 deleted file mode 100644 index 9acf905c..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2 deleted file mode 100644 index c93f7230..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2 deleted file mode 100644 index fa9345cb..00000000 Binary files a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css deleted file mode 100644 index 9b62b7c3..00000000 --- a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css +++ /dev/null @@ -1,69 +0,0 @@ -/* -XITS is released under the SIL Open Font License. See the files in this -directory for details. The font can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://mirrors.ctan.org/fonts/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: XITS; - src: local('XITS'), - url('XITS-Regular.woff2'), url('XITS-Regular.woff'); -} -@font-face { - font-family: XITS; - src: local('XITS Bold'), local('XITS-Bold'), - url('XITS-Bold.woff2'), url('XITS-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: XITS; - src: local('XITS Italic'), local('XITS-Italic'), - url('XITS-Italic.woff2'), url('XITS-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: XITS; - src: local('XITS Bold Italic'), local('XITS-BoldItalic'), - url('XITS-BoldItalic.woff2'), url('XITS-BoldItalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: XITS Math; - src: local('XITS Math'), local('XITSMath-Regular'), - url('XITSMath-Regular.woff2'), url('XITSMath-Regular.woff'); -} -@font-face { - font-family: XITS Math; - src: local('XITS Math Bold'), local('XITSMath-Bold'), - url('XITSMath-Bold.woff2'), url('XITSMathBold.woff'); - font-weight: bold; -} - -.htmlmathparagraph, m|mtext { - font-family: XITS; -} -m|math { - font-family: XITS Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -@font-feature-values XITS Math { @styleset { calligraphic: 1; } } -m|*.calligraphic { - font-variant-alternates: styleset(calligraphic); /* Recommended syntax */ - font-feature-settings: 'ss01'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'ss01'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'ss01'; /* Blink syntax */ -} diff --git a/io.sc.engine.rule.frontend/src/components/index.ts b/io.sc.engine.rule.frontend/src/components/index.ts index 0956168b..83540968 100644 --- a/io.sc.engine.rule.frontend/src/components/index.ts +++ b/io.sc.engine.rule.frontend/src/components/index.ts @@ -11,8 +11,6 @@ import component_engine_rule_lib from '@/views/lib/Lib.vue'; import component_engine_rule_function from '@/views/function/Function.vue'; import component_engine_rule_testcase from '@/views/testcase/Testcase.vue'; import component_engine_rule_migration from '@/views/migration/Migration.vue'; -import component_engine_rule_report from '@/views/report/tzblwdxfxbb.vue'; -import component_engine_rule_report2 from '@/views/report/tzblwoeivbb.vue'; const localComponents = { 'component.engine.rule.resources': component_engine_rule_resources, @@ -24,8 +22,6 @@ const localComponents = { 'component.engine.rule.function': component_engine_rule_function, 'component.engine.rule.testcase': component_engine_rule_testcase, 'component.engine.rule.migration': component_engine_rule_migration, - 'component.engine.rule.report': component_engine_rule_report, - 'component.engine.rule.report2': component_engine_rule_report2, }; export default localComponents; diff --git a/io.sc.engine.rule.server/build.gradle b/io.sc.engine.rule.server/build.gradle index 0a800aa7..446555f5 100644 --- a/io.sc.engine.rule.server/build.gradle +++ b/io.sc.engine.rule.server/build.gradle @@ -12,12 +12,6 @@ dependencies { project(":io.sc.engine.rule.client"), project(":io.sc.engine.rule.client.spring"), project(":io.sc.engine.rule.frontend"), - - "org.webjars:org.webjars.codemirror:5.37.0", - "org.webjars:org.webjars.mxgraph:3.9.12", - "org.webjars:org.webjars.jquery:1.12.4", - "org.webjars:org.webjars.mathfonts:1.0.0", - "org.webjars:org.webjars.mathcss:1.0.0", ) } diff --git a/io.sc.engine.st.frontend/package.json b/io.sc.engine.st.frontend/package.json index 34787774..b21dc20b 100644 --- a/io.sc.engine.st.frontend/package.json +++ b/io.sc.engine.st.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.engine.st.frontend", - "version": "8.1.44", + "version": "8.1.46", "description": "", "private": false, "keywords": [], @@ -92,7 +92,7 @@ "luckyexcel": "1.0.1", "mockjs": "1.1.0", "pinia": "2.1.7", - "platform-core": "8.1.287", + "platform-core": "8.1.295", "quasar": "2.15.4", "tailwindcss": "3.4.4", "vue": "3.4.31", diff --git a/io.sc.engine.st.frontend/public/configure.js b/io.sc.engine.st.frontend/public/configure.js index cffade30..3f4e2e53 100644 --- a/io.sc.engine.st.frontend/public/configure.js +++ b/io.sc.engine.st.frontend/public/configure.js @@ -2,6 +2,8 @@ window.APP = {}; // 全局配置 window.APP.configure ={ + // router 历史模式 + routerHistoryMode: 'web', // 应用上下文路径 webContextPath: '[(@{/})]'.startsWith('[')? '/' : '[(@{/})]', // 默认后端 API 请求的服务地址前缀 @@ -20,11 +22,6 @@ window.APP.configure ={ axios : { baseURL: '', timeout: 1000 * 60, - crossdomain: true, - basicAuth: { - enable: true, - username: 'admin', - password: 'admin', - } + crossdomain: true } } \ No newline at end of file diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css deleted file mode 100644 index bcbb5386..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css +++ /dev/null @@ -1,56 +0,0 @@ -/* -The proprietary Cambria fonts are installed by default on Microsoft Windows 7 -and higher and are provided with some other Microsoft products such as Office. -Some Web services may also provide them as Web fonts. For details, see - http://www.microsoft.com/typography/fonts/family.aspx?FID=291 - http://www.microsoft.com/typography/fonts/family.aspx?FID=360 -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Uncomment and complete the URLs if you wish to use Web fonts */ -/* -@font-face { - font-family: Cambria; - src: local('Cambria'), url('...'); -} -@font-face { - font-family: Cambria; - src: local('Cambria Bold'), url('...'); - font-weight: bold; -} -@font-face { - font-family: Cambria; - src: local('Cambria Italic'), url('...'); - font-style: italic; -} -@font-face { - font-family: Cambria; - src: local('Cambria Bold Italic'), url('...'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: Cambria Math; - src: local('Cambria Math'), url('...'); -} -*/ - -.htmlmathparagraph, m|mtext { - font-family: Cambria; -} -m|math { - font-family: Cambria Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* TODO: verify whether calligraphic letters are available in this font */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 deleted file mode 100644 index c74b7517..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Bold.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Bold.woff2 deleted file mode 100644 index c3620b3b..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Bold.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-BoldItalic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-BoldItalic.woff2 deleted file mode 100644 index 3d641e3d..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-BoldItalic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Italic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Italic.woff2 deleted file mode 100644 index 163819b5..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif-Italic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 deleted file mode 100644 index 51776932..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css deleted file mode 100644 index ee48b1d3..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css +++ /dev/null @@ -1,51 +0,0 @@ -/* -Deja Vu is released under a Free License. See the files in this directory -for details. This fonts is available on most Linux distributions. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: DejaVu Math TeX Gyre; - src: url('DejaVuMathTeXGyre.woff2'), url('DejaVuMathTeXGyre.woff'); -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif.woff2'), url('DejaVuSerif.woff'); -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif-Bold.woff2'), url('DejaVuSerif-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif-Italic.woff2'), url('DejaVuSerif-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: DejaVu Serif; - src: url('DejaVuSerif-BoldItalic.woff2'), - url('DejaVuSerif-BoldItalic.woff'); - font-weight: bold; - font-style: italic; -} - -.htmlmathparagraph, m|mtext { - font-family: DejaVu Serif; -} -m|math { - font-family: DejaVu Math TeX Gyre; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2 deleted file mode 100644 index c13030cd..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css deleted file mode 100644 index c05d74d6..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css +++ /dev/null @@ -1,21 +0,0 @@ -/* -The FiraMath font is released under the SIL Open Font License. See the files in -this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: Fira Math; - src: local('Fira Math'), local('FiraMath-Regular'), - url('FiraMath-Regular.woff2'), url('FiraMath-Regular.woff'); -} - -.htmlmathparagraph, m|mtext { - /* TODO: use FiraGO instead? */ - font-family: Fira Math; -} -m|math { - font-family: Fira Math; -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2 deleted file mode 100644 index 3c27d39f..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2 deleted file mode 100644 index e946d53e..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2 deleted file mode 100644 index 0dd7d2ed..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2 deleted file mode 100644 index e7dfb1d1..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2 deleted file mode 100644 index 2c488f2a..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css deleted file mode 100644 index ea0116c9..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css +++ /dev/null @@ -1,50 +0,0 @@ -/* -The GFS Neohellenic fonts are released under the SIL Open Font License. See the -files in this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - - -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-Regular'), - url('GFSNeohellenic.woff2'), - url('GFSNeohellenic.woff'); -} -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-Bold'), - url('GFSNeohellenic-Bold.woff2'), - url('GFSNeohellenic-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-Italic'), - url('GFSNeohellenic-It.woff2'), - url('GFSNeohellenic-It.woff'); - font-style: italic; -} -@font-face { - font-family: GFS Neohellenic; - src: local('GFSNeohellenic-BoldItalic'), - url('GFSNeohellenic-BoldIt.woff2'), - url('GFSNeohellenic-BoldIt.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: GFS Neohellenic Math; - src: local('GFSNeohellenicMath'), - url('GFSNeohellenicMath.woff2'), - url('GFSNeohellenicMath.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: GFS Neohellenic; -} -m|math { - font-family: GFS Neohellenic Math; -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css deleted file mode 100644 index cbf76d3d..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css +++ /dev/null @@ -1,47 +0,0 @@ -/* -GNU FreeSans is released under the GNU General Public License. See the files in -this directory for details. OpenType MATH support is only available in the -development version. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: FreeSans; - src: url('FreeSans.woff2'), url('FreeSans.woff'); -} -@font-face { - font-family: FreeSans; - src: url('FreeSansBold.woff2'), url('FreeSansBold.woff'); - font-weight: bold; -} -@font-face { - font-family: FreeSans; - src: url('FreeSansOblique.woff2'), url('FreeSansOblique.woff'); - font-style: oblique; -} -@font-face { - font-family: FreeSans; - src: url('FreeSansBoldOblique.woff2'), url('FreeSansBoldOblique.woff'); - font-weight: bold; - font-style: oblique; -} - -.htmlmathparagraph, m|mtext { - font-family: FreeSans; -} -m|math { - font-family: FreeSans; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css deleted file mode 100644 index 9572fbfe..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css +++ /dev/null @@ -1,47 +0,0 @@ -/* -GNU FreeSerif is released under the GNU General Public License. See the files in -this directory for details. OpenType MATH support is only available in the -development version. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: FreeSerif; - src: url('FreeSerif.woff2'), url('FreeSerif.woff'); -} -@font-face { - font-family: FreeSerif; - src: url('FreeSerifBold.woff2'), url('FreeSerifBold.woff'); - font-weight: bold; -} -@font-face { - font-family: FreeSerif; - src: url('FreeSerifItalic.woff2'), url('FreeSerifItalic.woff'); - font-style: italic; -} -@font-face { - font-family: FreeSerif; - src: url('FreeSerifBoldItalic.woff2'), url('FreeSerifBoldItalic.woff'); - font-weight: bold; - font-style: italic; -} - -.htmlmathparagraph, m|mtext { - font-family: FreeSerif; -} -m|math { - font-family: FreeSerif; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Italic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Italic.woff2 deleted file mode 100644 index 21fe6278..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Italic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2 deleted file mode 100644 index 9d8c372e..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2 deleted file mode 100644 index 72102330..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css deleted file mode 100644 index f8b1e9df..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css +++ /dev/null @@ -1,35 +0,0 @@ -/* -The Garamond fonts are released under the SIL Open Font License. See the files -in this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - - -@font-face { - font-family: EB Garamond; - src: local('EBGaramond12-Regular'), - url('EBGaramond12-Regular.woff2'), - url('EBGaramond12-Regular.woff'); -} -@font-face { - font-family: EB Garamond; - src: local('EBGaramond12-Italic'), - url('EBGaramond12-Italic.woff2'), - url('EBGaramond12-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: Garamond Math; - src: local('Garamond-Math'), - url('Garamond-Math.woff2'), - url('Garamond-Math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: EB Garamond; -} -m|math { - font-family: Garamond Math; -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2 deleted file mode 100644 index 6110b17b..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2 deleted file mode 100644 index df169efa..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2 deleted file mode 100644 index c4ef3ed4..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2 deleted file mode 100644 index ae0f344e..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css deleted file mode 100644 index b4b0ceeb..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css +++ /dev/null @@ -1,53 +0,0 @@ -/* -The Latin Modern fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Latin Modern Roman has various sizes. We use the generic name - "Latin Modern Roman" for the local versions and "LMRoman12" for the Web font. -*/ -@font-face { - font-family: LMRoman12; - src: url('lmroman12-regular.woff2'), url('lmroman12-regular.woff'); -} -@font-face { - font-family: LMRoman12; - src: url('lmroman12-bold.woff2'), url('lmroman12-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: LMRoman12; - src: url('lmroman12-italic.woff2'), url('lmroman12-italic.woff'); - font-style: italic; -} -@font-face { - font-family: Latin Modern Math; - src: local('Latin Modern Math'), local('LatinModernMath-Regular'), - url('latinmodern-math.woff2'), url('latinmodern-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: Latin Modern Roman, LMRoman12; -} -m|math { - font-family: Latin Modern Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2 deleted file mode 100644 index c76bab8c..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2 deleted file mode 100644 index 34b9f93b..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2 deleted file mode 100644 index 19fbf7b9..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2 deleted file mode 100644 index dd20fdcf..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2 deleted file mode 100644 index a7ef60ef..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css deleted file mode 100644 index fe6d41c2..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css +++ /dev/null @@ -1,61 +0,0 @@ -/* -The Libertinus fonts are released under the SIL Open Font and GPL Licenses. See -the files in this directory for details. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif'), local('LibertinusSerif'), - url('libertinusserif-regular.woff2'), - url('libertinusserif-regular.woff'); -} -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif Bold'), local('LibertinusSerif-Bold'), - url('libertinusserif-bold.woff2'), - url('libertinusserif-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif Italic'), local('LibertinusSerif-Italic'), - url('libertinusserif-italic.woff2'), - url('libertinusserif-italic.woff'); - font-style: italic; -} -@font-face { - font-family: Libertinus Serif; - src: local('Libertinus Serif Bold Italic'), - local('LibertinusSerif-BoldItalic'), - url('libertinusserif-bolditalic.woff2'), - url('libertinusserif-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: Libertinus Math; - src: local('Libertinus Math'), local('LibertinusMath'), - url('libertinusmath-regular.woff2'), - url('libertinusmath-regular.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: Libertinus Serif; -} -m|math { - font-family: Libertinus Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* No math script */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css deleted file mode 100644 index 5f056577..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css +++ /dev/null @@ -1,58 +0,0 @@ -/* -The commercial Lucida Bright fonts can be obtained from -http://tug.org/store/lucida/opentype.html and some Web services might -provide them as Web fonts. See also - http://www.microsoft.com/typography/fonts/family.aspx?FID=186 - http://www.microsoft.com/typography/fonts/family.aspx?FID=217 - -Warning: The CSS rules below have not been tested. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Uncomment and complete the URLs if you wish to use Web fonts */ -/* -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright'), url('...'); -} -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright Demibold'), url('...'); - font-weight: bolder; -} -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright Italic'), url('...'); - font-style: italic; -} -@font-face { - font-family: Lucida Bright; - src: local('Lucida Bright Demibold Italic'), url('...'); - font-weight: bolder; - font-style: italic; -} -@font-face { - font-family: Lucida Bright Math; - src: local('Lucida Bright Math'), url('...'); -} -*/ - -.htmlmathparagraph, m|mtext { - font-family: Lucida Bright; -} -m|math { - font-family: Lucida Bright Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* TODO: verify whether calligraphic letters are available in this font */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css deleted file mode 100644 index 640b0eaf..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css +++ /dev/null @@ -1,37 +0,0 @@ -/* -The commercial Minion Math fonts and can be obtained from -http://www.typoma.com/en/fonts.html and some Web services might provide them as -Web fonts. - -Warning: The CSS rules below have not been tested. More rules should probably -be added to make this work correctly. -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -/* Uncomment and complete the URLs if you wish to use Web fonts */ -/* -@font-face { - font-family: Minion Math; - src: local('Minion Math'), url('...'); -} -*/ - -.htmlmathparagraph, m|mtext { - font-family: Minion Math; -} -m|math { - font-family: Minion Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* TODO: verify whether calligraphic letters are available in this font */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css deleted file mode 100644 index 8df86bf5..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css +++ /dev/null @@ -1,34 +0,0 @@ -/* -Neo Euler is released under the SIL Open Font License. See the files in this -directory for details. The font is still in development. The font does not seem -to have a corresponding "non-MATH" font. - -The WOFF fonts have been obtained from -https://github.com/khaledhosny/euler-otf/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: Neo Euler; - src: local('Neo Euler'), url('euler.woff2'), url('euler.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: Neo Euler; -} -m|math { - font-family: Neo Euler; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2 deleted file mode 100644 index 279a98f0..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2 deleted file mode 100644 index e4394884..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2 deleted file mode 100644 index 0dc0baed..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2 deleted file mode 100644 index 5594de32..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2 deleted file mode 100644 index 263c488a..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css deleted file mode 100644 index 4b287cee..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css +++ /dev/null @@ -1,69 +0,0 @@ -/* -The STIX fonts are released under the SIL Open Font License. See the files in -this directory for details. The font can be obtained from several TeX -distributions or package managers. - -The WOFF fonts have been obtained from -http://downloads.sourceforge.net/project/stixfonts/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - - -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText'), - url('STIXTwoText-Regular.woff2'), - url('STIXTwoText-Regular.woff'); -} -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText-Bold'), - url('STIXTwoText-Bold.woff2'), - url('STIXTwoText-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText-Italic'), - url('STIXTwoText-Italic.woff2'), - url('STIXTwoText-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: STIX Two Text; - src: local('STIXTwoText-BoldItalic'), - url('STIXTwoText-BoldItalic.woff2'), - url('STIXTwoText-BoldItalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: STIX Two Math; - src: local('STIXTwoMath-Regular'), - url('STIXTwoMath-Regular.woff2'), - url('STIXTwoMath-Regular.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: STIX Two Text; -} -m|math { - font-family: STIX Two Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -@font-feature-values STIX Two Math { @styleset { calligraphic: 1; } } -m|*.calligraphic { - font-variant-alternates: styleset(calligraphic); /* Recommended syntax */ - font-feature-settings: 'ss01'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'ss01'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'ss01'; /* Blink syntax */ -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css deleted file mode 100644 index f7bbeaa0..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css +++ /dev/null @@ -1,62 +0,0 @@ -/* -The TeX Gyre Bonum fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-Regular'), - url('texgyrebonum-regular.woff2'), url('texgyrebonum-regular.woff'); -} -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-Bold'), - url('texgyrebonum-bold.woff2'), url('texgyrebonum-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-Italic'), - url('texgyrebonum-italic.woff2'), url('texgyrebonum-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Bonum; - src: local('TeXGyreBonum-BoldItalic'), - url('texgyrebonum-bolditalic.woff2'), - url('texgyrebonum-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Bonum Math; - src: local('TeX Gyre Bonum Math'), local('TeXGyreBonumMath-Regular'), - url('texgyrebonum-math.woff2'), - url('texgyrebonum-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Bonum; -} -m|math { - font-family: TeX Gyre Bonum Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2 deleted file mode 100644 index 013ca1bd..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2 deleted file mode 100644 index ae18fb8b..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2 deleted file mode 100644 index 42742390..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2 deleted file mode 100644 index d16a1cea..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2 deleted file mode 100644 index 8aede98d..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css deleted file mode 100644 index 394686b0..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css +++ /dev/null @@ -1,63 +0,0 @@ -/* -The TeX Gyre Pagella fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-Regular'), - url('texgyrepagella-regular.woff2'), - url('texgyrepagella-regular.woff'); -} -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-Bold'), - url('texgyrepagella-bold.woff2'), url('texgyrepagella-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-Italic'), - url('texgyrepagella-italic.woff2'), url('texgyrepagella-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Pagella; - src: local('TeXGyrePagella-BoldItalic'), - url('texgyrepagella-bolditalic.woff2'), - url('texgyrepagella-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Pagella Math; - src: local('TeX Gyre Pagella Math'), local('TeXGyrePagellaMath-Regular'), - url('texgyrepagella-math.woff2'), - url('texgyrepagella-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Pagella; -} -m|math { - font-family: TeX Gyre Pagella Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2 deleted file mode 100644 index 0879c80a..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css deleted file mode 100644 index 41c28c6b..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css +++ /dev/null @@ -1,61 +0,0 @@ -/* -The TeX Gyre Schola fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-Regular'), - url('texgyreschola-regular.woff2'), url('texgyreschola-regular.woff'); -} -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-Bold'), - url('texgyreschola-bold.woff2'), url('texgyreschola-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-Italic'), - url('texgyreschola-italic.woff2'), url('texgyreschola-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Schola; - src: local('TeXGyreSchola-BoldItalic'), - url('texgyreschola-bolditalic.woff2'), - url('texgyreschola-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Schola Math; - src: local('TeX Gyre Schola Math'), local('TeXGyreScholaMath-Regular'), - url('texgyreschola-math.woff2'), url('texgyreschola-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Schola; -} -m|math { - font-family: TeX Gyre Schola Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2 deleted file mode 100644 index 485f2c5b..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2 deleted file mode 100644 index 6c8c3f52..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2 deleted file mode 100644 index afe8d4ef..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2 deleted file mode 100644 index 674c4281..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2 deleted file mode 100644 index 0dbec85e..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css deleted file mode 100644 index d7a65374..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css +++ /dev/null @@ -1,60 +0,0 @@ -/* -The TeX Gyre Termes fonts are released under the GUST font license, which is -legally equivalent to the LaTeX Project Public License. See the files in this -directory for details. The fonts can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://www.gust.org.pl/projects/e-foundry/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-Regular'), - url('texgyretermes-regular.woff2'), url('texgyretermes-regular.woff'); -} -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-Bold'), - url('texgyretermes-bold.woff2'), url('texgyretermes-bold.woff'); - font-weight: bold; -} -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-Italic'), - url('texgyretermes-italic.woff2'), url('texgyretermes-italic.woff'); - font-style: italic; -} -@font-face { - font-family: TeX Gyre Termes; - src: local('TeXGyreTermes-BoldItalic'), - url('texgyretermes-bolditalic.woff2'), url('texgyretermes-bolditalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: TeX Gyre Termes Math; - src: local('TeX Gyre Termes Math'), local('TeXGyreTermesMath-Regular'), - url('texgyretermes-math.woff2'), url('texgyretermes-math.woff'); -} - -.htmlmathparagraph, m|mtext { - font-family: TeX Gyre Termes; -} -m|math { - font-family: TeX Gyre Termes Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -/* Calligraphic letters do not seem to be available */ -m|*.calligraphic { -} diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2 deleted file mode 100644 index a346eb13..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2 deleted file mode 100644 index 571a2f07..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2 deleted file mode 100644 index 401cd0ec..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2 deleted file mode 100644 index 31c9adc2..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2 deleted file mode 100644 index 1a15f9ad..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2 deleted file mode 100644 index 7a12dd34..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2 deleted file mode 100644 index c4daad18..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2 deleted file mode 100644 index 9d434203..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2 deleted file mode 100644 index 9acf905c..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2 deleted file mode 100644 index c93f7230..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2 deleted file mode 100644 index fa9345cb..00000000 Binary files a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2 and /dev/null differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css deleted file mode 100644 index 9b62b7c3..00000000 --- a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css +++ /dev/null @@ -1,69 +0,0 @@ -/* -XITS is released under the SIL Open Font License. See the files in this -directory for details. The font can be obtained from several TeX distributions -or package managers. - -The WOFF fonts have been obtained from -http://mirrors.ctan.org/fonts/ -*/ - -@namespace url('http://www.w3.org/1999/xhtml'); -@namespace m url('http://www.w3.org/1998/Math/MathML'); - -@font-face { - font-family: XITS; - src: local('XITS'), - url('XITS-Regular.woff2'), url('XITS-Regular.woff'); -} -@font-face { - font-family: XITS; - src: local('XITS Bold'), local('XITS-Bold'), - url('XITS-Bold.woff2'), url('XITS-Bold.woff'); - font-weight: bold; -} -@font-face { - font-family: XITS; - src: local('XITS Italic'), local('XITS-Italic'), - url('XITS-Italic.woff2'), url('XITS-Italic.woff'); - font-style: italic; -} -@font-face { - font-family: XITS; - src: local('XITS Bold Italic'), local('XITS-BoldItalic'), - url('XITS-BoldItalic.woff2'), url('XITS-BoldItalic.woff'); - font-weight: bold; - font-style: italic; -} -@font-face { - font-family: XITS Math; - src: local('XITS Math'), local('XITSMath-Regular'), - url('XITSMath-Regular.woff2'), url('XITSMath-Regular.woff'); -} -@font-face { - font-family: XITS Math; - src: local('XITS Math Bold'), local('XITSMath-Bold'), - url('XITSMath-Bold.woff2'), url('XITSMathBold.woff'); - font-weight: bold; -} - -.htmlmathparagraph, m|mtext { - font-family: XITS; -} -m|math { - font-family: XITS Math; -} - -.oldstylenumbers { - font-variant-numeric: oldstyle-nums; /* Recommended syntax */ - font-feature-settings: 'onum'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'onum'; /* Blink syntax */ -} - -@font-feature-values XITS Math { @styleset { calligraphic: 1; } } -m|*.calligraphic { - font-variant-alternates: styleset(calligraphic); /* Recommended syntax */ - font-feature-settings: 'ss01'; /* OpenType feature syntax */ - -moz-font-feature-settings: 'ss01'; /* Gecko <= 33 syntax */ - -webkit-font-feature-settings: 'ss01'; /* Blink syntax */ -} diff --git a/io.sc.platform.app/build.gradle b/io.sc.platform.app/build.gradle index ff8838f6..0f587e4a 100644 --- a/io.sc.platform.app/build.gradle +++ b/io.sc.platform.app/build.gradle @@ -10,9 +10,16 @@ dependencies { project(":io.sc.platform.lcdp"), project(":io.sc.platform.orm.mybatis"), project(":io.sc.platform.poi"), + project(":io.sc.platform.security.loginform"), project(":io.sc.platform.system"), project(":io.sc.platform.ws.cxf"), - project(":org.webjars.luckysheet-2.1.13"), - project(":org.webjars.tailwindcss-3.3.5"), + + "org.webjars:org.webjars.codemirror:5.37.0", + "org.webjars:org.webjars.jquery:1.12.4", + "org.webjars:org.webjars.luckysheet:2.1.13", + "org.webjars:org.webjars.mathcss:1.0.0", + "org.webjars:org.webjars.mathfonts:1.0.0", + "org.webjars:org.webjars.mxgraph:3.9.12", + "org.webjars:org.webjars.tailwindcss:3.3.5", ) } diff --git a/io.sc.platform.core.frontend/.bin/sync.js b/io.sc.platform.core.frontend/.bin/sync.js index 5399a62e..fb53e7b6 100644 --- a/io.sc.platform.core.frontend/.bin/sync.js +++ b/io.sc.platform.core.frontend/.bin/sync.js @@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); * 同步 platform-core 定义的前端项目配置 * 从 platform-core 库的 template-project 目录中复制前端项目文件到本地项目 */ -const {cp, mergeJsonFile } =require('./util.js'); +const { rm, cp, mergeJsonFile } =require('./util.js'); const sync = async () => { const sourceDir =process.cwd() + '/node_modules/platform-core/template-project/'; @@ -31,6 +31,8 @@ const sync = async () => { cp(sourceDir + 'webpack.env.build.cjs', targetDir + 'webpack.env.build.cjs'); cp(sourceDir + 'webpack.env.prod.cjs', targetDir + 'webpack.env.prod.cjs'); cp(sourceDir + 'webpack.env.serve.cjs', targetDir + 'webpack.env.serve.cjs'); + + rm(targetDir + 'public'); cp(sourceDir + 'public', targetDir + 'public'); mergeJsonFile(targetDir + 'frontend-register.json', sourceDir + 'frontend-register.json', ['path']); diff --git a/io.sc.platform.core.frontend/package.json b/io.sc.platform.core.frontend/package.json index 4af9c49c..0b994174 100644 --- a/io.sc.platform.core.frontend/package.json +++ b/io.sc.platform.core.frontend/package.json @@ -1,6 +1,6 @@ { "name": "platform-core", - "version": "8.1.288", + "version": "8.1.295", "description": "前端核心包,用于快速构建前端的脚手架", "//main": "库的主文件", "main": "dist/platform-core.js", diff --git a/io.sc.platform.core.frontend/public/configure.js b/io.sc.platform.core.frontend/public/configure.js index cffade30..3f4e2e53 100644 --- a/io.sc.platform.core.frontend/public/configure.js +++ b/io.sc.platform.core.frontend/public/configure.js @@ -2,6 +2,8 @@ window.APP = {}; // 全局配置 window.APP.configure ={ + // router 历史模式 + routerHistoryMode: 'web', // 应用上下文路径 webContextPath: '[(@{/})]'.startsWith('[')? '/' : '[(@{/})]', // 默认后端 API 请求的服务地址前缀 @@ -20,11 +22,6 @@ window.APP.configure ={ axios : { baseURL: '', timeout: 1000 * 60, - crossdomain: true, - basicAuth: { - enable: true, - username: 'admin', - password: 'admin', - } + crossdomain: true } } \ No newline at end of file diff --git a/io.sc.platform.core.frontend/src/platform/i18n/messages.json b/io.sc.platform.core.frontend/src/platform/i18n/messages.json index 1cd223b1..f544b242 100644 --- a/io.sc.platform.core.frontend/src/platform/i18n/messages.json +++ b/io.sc.platform.core.frontend/src/platform/i18n/messages.json @@ -35,6 +35,7 @@ "reset": "Reset", "rownum": "Row Number", "search": "Search", + "security.login.dialog.title": "Session expired, Please login again", "security.login.message.error": "authentication failed! please check your user name and password.", "security.login.password.placeholder": "Please input password", "security.login.title": "System Authentication", diff --git a/io.sc.platform.core.frontend/src/platform/i18n/messages_tw_CN.json b/io.sc.platform.core.frontend/src/platform/i18n/messages_tw_CN.json index 8e75e97f..cc7048b4 100644 --- a/io.sc.platform.core.frontend/src/platform/i18n/messages_tw_CN.json +++ b/io.sc.platform.core.frontend/src/platform/i18n/messages_tw_CN.json @@ -35,6 +35,7 @@ "reset": "重置", "rownum": "序號", "search": "搜索", + "security.login.dialog.title": "會話已過期, 請重新登錄", "security.login.message.error": "認證失敗!請檢查您輸入的登陸名和密碼是否正確", "security.login.password.placeholder": "請輸入密碼", "security.login.title": "系統登錄", diff --git a/io.sc.platform.core.frontend/src/platform/i18n/messages_zh_CN.json b/io.sc.platform.core.frontend/src/platform/i18n/messages_zh_CN.json index 94452f26..8d4025bf 100644 --- a/io.sc.platform.core.frontend/src/platform/i18n/messages_zh_CN.json +++ b/io.sc.platform.core.frontend/src/platform/i18n/messages_zh_CN.json @@ -35,6 +35,7 @@ "reset": "重置", "rownum": "序号", "search": "搜索", + "security.login.dialog.title": "会话已过期, 请重新登录", "security.login.message.error": "认证失败! 请检查您输入的登录名和密码是否正确。", "security.login.password.placeholder": "请输入密码", "security.login.title": "系统登录", diff --git a/io.sc.platform.core.frontend/src/platform/index.ts b/io.sc.platform.core.frontend/src/platform/index.ts index fc178516..47e299b0 100644 --- a/io.sc.platform.core.frontend/src/platform/index.ts +++ b/io.sc.platform.core.frontend/src/platform/index.ts @@ -86,7 +86,7 @@ export { I18nMessageManager } from './plugin'; export { MenuManager } from './plugin'; export { MockManager } from './plugin'; export { NotifyManager } from './plugin'; -export { Oauth2Manager } from './plugin'; +export { AuthenticationManager } from './plugin'; export { RouterManager } from './plugin'; export { SessionManager } from './plugin'; export { TagViewManager } from './plugin'; diff --git a/io.sc.platform.core.frontend/src/platform/layout/sub-layout/Topper.vue b/io.sc.platform.core.frontend/src/platform/layout/sub-layout/Topper.vue index cf201749..57690666 100644 --- a/io.sc.platform.core.frontend/src/platform/layout/sub-layout/Topper.vue +++ b/io.sc.platform.core.frontend/src/platform/layout/sub-layout/Topper.vue @@ -21,7 +21,7 @@
Sorry, but the page you were trying to view does not exist.
-It looks like this was the result of either:
-.25&&(r=n.sqrt(.25-o(e-.5,2))*(2*(r>.5)-1)+.5),h=e+c+r),f})).split(/\s*\-\s*/),"linear"==l){var u=a.shift();if(u=-i(u),isNaN(u))return null}var p=t._parseDots(a);if(!p)return null;if(e=e.shape||e.node,p.length){e.removeChild(s),s.on=!0,s.method="none",s.color=p[0].color,s.color2=p[p.length-1].color;for(var d=[],g=0,x=p.length;g')}}catch(t){k=function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},t._engine.initWin(t._g.win),t._engine.create=function(){var e=t._getContainer.apply(0,arguments),r=e.container,i=e.height,n=e.width,a=e.x,s=e.y;if(!r)throw new Error("VML container not found.");var o=new t._Paper,l=o.canvas=t._g.doc.createElement("div"),h=l.style;return a=a||0,s=s||0,n=n||512,i=i||342,o.width=n,o.height=i,n==+n&&(n+="px"),i==+i&&(i+="px"),o.coordsize=216e5+c+216e5,o.coordorigin="0 0",o.span=t._g.doc.createElement("span"),o.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",l.appendChild(o.span),h.cssText=t.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",n,i),1==r?(t._g.doc.body.appendChild(l),h.left=a+"px",h.top=s+"px",h.position="absolute"):r.firstChild?r.insertBefore(l,r.firstChild):r.appendChild(l),o.renderfix=function(){},o},t.prototype.clear=function(){t.eve("raphael.clear",this),this.canvas.innerHTML=f,this.span=t._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},t.prototype.remove=function(){for(var e in t.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas),this)this[e]="function"==typeof this[e]?t._removedFactory(e):null;return!0};var M=t.st;for(var E in T)T[e](E)&&!M[e](E)&&(M[E]=function(t){return function(){var e=arguments;return this.forEach(function(r){r[t].apply(r,e)})}}(E))}}.apply(e,i))||(t.exports=n)},function(t,e,r){var i,n;i=[r(0)],void 0===(n=function(t){if(!t||t.svg){var e="hasOwnProperty",r=String,i=parseFloat,n=parseInt,a=Math,s=a.max,o=a.abs,l=a.pow,h=/[, ]+/,u=t.eve,c="",f=" ",p="http://www.w3.org/1999/xlink",d={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},g={};t.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var x=function(i,n){if(n)for(var a in"string"==typeof i&&(i=x(i)),n)n[e](a)&&("xlink:"==a.substring(0,6)?i.setAttributeNS(p,a.substring(6),r(n[a])):i.setAttribute(a,r(n[a])));else(i=t._g.doc.createElementNS("http://www.w3.org/2000/svg",i)).style&&(i.style.webkitTapHighlightColor="rgba(0,0,0,0)");return i},v=function(e,n){var h="linear",u=e.id+n,f=.5,p=.5,d=e.node,g=e.paper,v=d.style,m=t._g.doc.getElementById(u);if(!m){if(n=(n=r(n).replace(t._radial_gradient,function(t,e,r){if(h="radial",e&&r){f=i(e);var n=2*((p=i(r))>.5)-1;l(f-.5,2)+l(p-.5,2)>.25&&(p=a.sqrt(.25-l(f-.5,2))*n+.5)&&.5!=p&&(p=p.toFixed(5)-1e-5*n)}return c})).split(/\s*\-\s*/),"linear"==h){var b=n.shift();if(b=-i(b),isNaN(b))return null;var _=[0,0,a.cos(t.rad(b)),a.sin(t.rad(b))],w=1/(s(o(_[2]),o(_[3]))||1);_[2]*=w,_[3]*=w,_[2]<0&&(_[0]=-_[2],_[2]=0),_[3]<0&&(_[1]=-_[3],_[3]=0)}var k=t._parseDots(n);if(!k)return null;if(u=u.replace(/[\(\)\s,\xb0#]/g,"_"),e.gradient&&u!=e.gradient.id&&(g.defs.removeChild(e.gradient),delete e.gradient),!e.gradient){m=x(h+"Gradient",{id:u}),e.gradient=m,x(m,"radial"==h?{fx:f,fy:p}:{x1:_[0],y1:_[1],x2:_[2],y2:_[3],gradientTransform:e.matrix.invert()}),g.defs.appendChild(m);for(var B=0,C=k.length;B 1?P.opacity/100:P.opacity});case"stroke":P=t.getRGB(g),l.setAttribute(d,P.hex),"stroke"==d&&P[e]("opacity")&&x(l,{"stroke-opacity":P.opacity>1?P.opacity/100:P.opacity}),"stroke"==d&&i._.arrows&&("startString"in i._.arrows&&b(i,i._.arrows.startString),"endString"in i._.arrows&&b(i,i._.arrows.endString,1));break;case"gradient":("circle"==i.type||"ellipse"==i.type||"r"!=r(g).charAt())&&v(i,g);break;case"opacity":u.gradient&&!u[e]("stroke-opacity")&&x(l,{"stroke-opacity":g>1?g/100:g});case"fill-opacity":if(u.gradient){(z=t._g.doc.getElementById(l.getAttribute("fill").replace(/^url\(#|\)$/g,c)))&&(F=z.getElementsByTagName("stop"),x(F[F.length-1],{"stop-opacity":g}));break}default:"font-size"==d&&(g=n(g,10)+"px");var R=d.replace(/(\-.)/g,function(t){return t.substring(1).toUpperCase()});l.style[R]=g,i._.dirty=1,l.setAttribute(d,g)}}B(i,a),l.style.visibility=f},B=function(i,a){if("text"==i.type&&(a[e]("text")||a[e]("font")||a[e]("font-size")||a[e]("x")||a[e]("y"))){var s=i.attrs,o=i.node,l=o.firstChild?n(t._g.doc.defaultView.getComputedStyle(o.firstChild,c).getPropertyValue("font-size"),10):10;if(a[e]("text")){for(s.text=a.text;o.firstChild;)o.removeChild(o.firstChild);for(var h,u=r(a.text).split("\n"),f=[],p=0,d=u.length;p 1)for(var i=0,n=r.length;i 0) { - for (var i = 0; i < $scope.assignment.idm.candidateUsers.length; i++) { - $scope.popup.assignmentObject.idm.candidateUsers.push($scope.assignment.idm.candidateUsers[i]); - } - } - - if ($scope.assignment.idm.candidateGroups && $scope.assignment.idm.candidateGroups.length > 0) { - for (var i = 0; i < $scope.assignment.idm.candidateGroups.length; i++) { - $scope.popup.assignmentObject.idm.candidateGroups.push($scope.assignment.idm.candidateGroups[i]); - } - } - } - } - - //fill the static area - if ($scope.assignment.assignee) { - $scope.popup.assignmentObject.static.assignee = $scope.assignment.assignee; - } - - if ($scope.assignment.candidateUsers && $scope.assignment.candidateUsers.length > 0) { - for (var i = 0; i < $scope.assignment.candidateUsers.length; i++) { - $scope.popup.assignmentObject.static.candidateUsers.push($scope.assignment.candidateUsers[i]); - } - } - - if ($scope.assignment.candidateGroups && $scope.assignment.candidateGroups.length > 0) { - for (var i = 0; i < $scope.assignment.candidateGroups.length; i++) { - $scope.popup.assignmentObject.static.candidateGroups.push($scope.assignment.candidateGroups[i]); - } - } - - initStaticContextForEditing($scope); - - $scope.$watch('popup.groupFilter', function () { - $scope.updateGroupFilter(); - }); - - $scope.$watch('popup.filter', function() { - $scope.updateFilter(); - }); - - $scope.updateFilter = function() { - if ($scope.popup.oldFilter == undefined || $scope.popup.oldFilter != $scope.popup.filter) { - if (!$scope.popup.filter) { - $scope.popup.oldFilter = ''; - } else { - $scope.popup.oldFilter = $scope.popup.filter; - } - - if ($scope.popup.filter !== null && $scope.popup.filter !== undefined) { - UserService.getFilteredUsers($scope.popup.filter).then(function (result) { - var filteredUsers = []; - for (var i=0; i = 0 && $scope.popup.selectedIndex < users.length) { - user = users[$scope.popup.selectedIndex]; - } - } - - if (user) { - if ("user" == $scope.assignmentOption.id) { - $scope.popup.assignmentObject.idm.assignee = user; - } else if ("users" == $scope.assignmentOption.id) { - - // Only add if not yet part of candidate users - var found = false; - if ($scope.popup.assignmentObject.idm.candidateUsers) { - for (var i = 0; i < $scope.popup.assignmentObject.idm.candidateUsers.length; i++) { - if ($scope.popup.assignmentObject.idm.candidateUsers[i].id === user.id) { - found = true; - break; - } - } - } - - if (!found) { - $scope.addCandidateUser(user); - } - } - } - }; - - $scope.confirmEmail = function() { - if ("user" == $scope.assignmentOption.id) { - $scope.popup.assignmentObject.idm.assignee = {email: $scope.popup.email}; - } else if ("users" == $scope.assignmentOption.id) { - - // Only add if not yet part of candidate users - var found = false; - if ($scope.popup.assignmentObject.idm.candidateUsers) { - for (var i = 0; i < $scope.popup.assignmentObject.idm.candidateUsers.length; i++) { - - if ($scope.popup.assignmentObject.idm.candidateUsers[i].id) { - if ($scope.popup.assignmentObject.idm.candidateUsers[i].id === user.id) { - found = true; - break; - } - } else if ($scope.popup.assignmentObject.idm.candidateUsers[i].email) { - if ($scope.popup.assignmentObject.idm.candidateUsers[i].email === $scope.popup.email) { - found = true; - break; - } - } - } - } - - if (!found) { - $scope.addCandidateUser({email: $scope.popup.email}); - } - } - }; - - $scope.confirmGroup = function(group) { - if (!group) { - // Selection is done with keyboard, use selection index - var groups = $scope.popup.groupResults; - if ($scope.popup.selectedGroupIndex >= 0 && $scope.popup.selectedGroupIndex < groups.length) { - group = groups[$scope.popup.selectedGroupIndex]; - } - } - - if (group) { - // Only add if not yet part of candidate groups - var found = false; - if ($scope.popup.assignmentObject.idm.candidateGroups) { - for (var i = 0; i < $scope.popup.assignmentObject.idm.candidateGroups.length; i++) { - if ($scope.popup.assignmentObject.idm.candidateGroups[i].id === group.id) { - found = true; - break; - } - } - } - - if (!found) { - $scope.addCandidateGroup(group); - } - } - }; - - $scope.addCandidateUser = function(user) { - $scope.popup.assignmentObject.idm.candidateUsers.push(user); - }; - - $scope.removeCandidateUser = function(user) { - var users = $scope.popup.assignmentObject.idm.candidateUsers; - var indexToRemove = -1; - for (var i = 0; i < users.length; i++) { - if (user.id) { - if (user.id === users[i].id) { - indexToRemove = i; - break; - } - } else { - if (user.email === users[i].email) { - indexToRemove = i; - break; - } - } - } - if (indexToRemove >= 0) { - users.splice(indexToRemove, 1); - } - }; - - $scope.addCandidateGroup = function(group) { - $scope.popup.assignmentObject.idm.candidateGroups.push(group); - }; - - $scope.removeCandidateGroup = function(group) { - var groups = $scope.popup.assignmentObject.idm.candidateGroups; - var indexToRemove = -1; - for (var i = 0; i < groups.length; i++) { - if (group.id == groups[i].id) { - indexToRemove = i; - break; - } - } - if (indexToRemove >= 0) { - groups.splice(indexToRemove, 1); - } - }; - - $scope.resetSelection = function() { - if ($scope.popup.userResults && $scope.popup.userResults.length > 0) { - $scope.popup.selectedIndex = 0; - } else { - $scope.popup.selectedIndex = -1; - } - }; - - $scope.nextUser = function() { - var users = $scope.popup.userResults; - if (users && users.length > 0 && $scope.popup.selectedIndex < users.length -1) { - $scope.popup.selectedIndex += 1; - } - }; - - $scope.previousUser = function() { - var users = $scope.popup.userResults; - if (users && users.length > 0 && $scope.popup.selectedIndex > 0) { - $scope.popup.selectedIndex -= 1; - } - }; - - $scope.resetGroupSelection = function() { - if ($scope.popup.groupResults && $scope.popup.groupResults.length > 0) { - $scope.popup.selectedGroupIndex = 0; - } else { - $scope.popup.selectedGroupIndex = -1; - } - }; - - $scope.nextGroup = function() { - var groups = $scope.popup.groupResults; - if (groups && groups.length > 0 && $scope.popup.selectedGroupIndex < groups.length -1) { - $scope.popup.selectedGroupIndex += 1; - } - }; - - $scope.previousGroup = function() { - var groups = $scope.popup.groupResults; - if (groups && groups.length > 0 && $scope.popup.selectedGroupIndex > 0) { - $scope.popup.selectedGroupIndex -= 1; - } - }; - - $scope.removeAssignee = function() { - $scope.popup.assignmentObject.idm.assignee = undefined; - }; - - // Click handler for + button after enum value - $scope.addCandidateUserValue = function(index) { - $scope.popup.assignmentObject.static.candidateUsers.splice(index + 1, 0, {value: ''}); - }; - - // Click handler for - button after enum value - $scope.removeCandidateUserValue = function(index) { - $scope.popup.assignmentObject.static.candidateUsers.splice(index, 1); - }; - - // Click handler for + button after enum value - $scope.addCandidateGroupValue = function(index) { - $scope.popup.assignmentObject.static.candidateGroups.splice(index + 1, 0, {value: ''}); - }; - - // Click handler for - button after enum value - $scope.removeCandidateGroupValue = function(index) { - $scope.popup.assignmentObject.static.candidateGroups.splice(index, 1); - }; - - $scope.setSearchType = function() { - $scope.popup.assignmentObject.assignmentSourceType = 'search'; - }; - - $scope.allSteps = EDITOR.UTIL.collectSortedElementsFromPrecedingElements($scope.selectedShape); - - $scope.save = function () { - - handleAssignmentInput($scope.popup.assignmentObject.static); - - $scope.assignment.type = $scope.popup.assignmentObject.type; - - if ('idm' === $scope.popup.assignmentObject.type) { // IDM - $scope.popup.assignmentObject.static = undefined; - - //Construct an IDM object to be saved to the process model. - var idm = {type: $scope.assignmentOption.id}; - if ('user' == idm.type) { - if ($scope.popup.assignmentObject.idm.assignee) { - idm.assignee = $scope.popup.assignmentObject.idm.assignee; - } - } else if ('users' == idm.type) { - if ($scope.popup.assignmentObject.idm.candidateUsers && $scope.popup.assignmentObject.idm.candidateUsers.length > 0) { - idm.candidateUsers = $scope.popup.assignmentObject.idm.candidateUsers; - } - } else if ('groups' == idm.type) { - if ($scope.popup.assignmentObject.idm.candidateGroups && $scope.popup.assignmentObject.idm.candidateGroups.length > 0) { - idm.candidateGroups = $scope.popup.assignmentObject.idm.candidateGroups; - } - } - $scope.assignment.idm = idm; - $scope.assignment.assignee = undefined; - $scope.assignment.candidateUsers = undefined; - $scope.assignment.candidateGroups = undefined; - - } - - if ('static' === $scope.popup.assignmentObject.type) { // IDM - $scope.popup.assignmentObject.idm = undefined; - $scope.assignment.idm = undefined; - $scope.assignment.assignee = $scope.popup.assignmentObject.static.assignee; - $scope.assignment.candidateUsers = $scope.popup.assignmentObject.static.candidateUsers; - $scope.assignment.candidateGroups = $scope.popup.assignmentObject.static.candidateGroups; - } - - $scope.property.value = {}; - $scope.property.value.assignment = $scope.assignment; - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - // Close button handler - $scope.close = function() { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - var handleAssignmentInput = function ($assignment) { - - function isEmptyString(value) { - return (value === undefined || value === null || value.trim().length === 0); - } - - if (isEmptyString($assignment.assignee)){ - $assignment.assignee = undefined; - } - var toRemoveIndexes; - var removedItems=0; - var i = 0; - if ($assignment.candidateUsers) { - toRemoveIndexes = []; - for (i = 0; i < $assignment.candidateUsers.length; i++) { - if (isEmptyString($assignment.candidateUsers[i].value)) { - toRemoveIndexes[toRemoveIndexes.length] = i; - } - } - - if (toRemoveIndexes.length == $assignment.candidateUsers.length) { - $assignment.candidateUsers = undefined; - } else { - removedItems=0; - for (i = 0; i < toRemoveIndexes.length; i++) { - $assignment.candidateUsers.splice(toRemoveIndexes[i]-removedItems, 1); - removedItems++; - } - } - } - - if ($assignment.candidateGroups) { - toRemoveIndexes = []; - for (i = 0; i < $assignment.candidateGroups.length; i++) { - if (isEmptyString($assignment.candidateGroups[i].value)) { - toRemoveIndexes[toRemoveIndexes.length] = i; - } - } - - if (toRemoveIndexes.length == $assignment.candidateGroups.length) { - $assignment.candidateGroups = undefined; - } else { - removedItems=0; - for (i = 0; i < toRemoveIndexes.length; i++) { - $assignment.candidateGroups.splice(toRemoveIndexes[i]-removedItems, 1); - removedItems++; - } - } - } - }; - - function initStaticContextForEditing($scope) { - if (!$scope.popup.assignmentObject.static.candidateUsers || $scope.popup.assignmentObject.static.candidateUsers.length==0) { - $scope.popup.assignmentObject.static.candidateUsers = [{value: ''}]; - } - if (!$scope.popup.assignmentObject.static.candidateGroups || $scope.popup.assignmentObject.static.candidateGroups.length==0) { - $scope.popup.assignmentObject.static.candidateGroups = [{value: ''}]; - } - } -}]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-calledelementtype-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-calledelementtype-controller.js deleted file mode 100644 index c07775ce..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-calledelementtype-controller.js +++ /dev/null @@ -1,28 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Call activity calledElement type property - */ - -angular.module('flowableModeler').controller('FlowableCalledElementTypeCtrl', [ '$scope', function($scope) { - - if ($scope.property.value == undefined && $scope.property.value == null) - { - $scope.property.value = 'key'; - } - - $scope.calledElementTypeChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-case-reference-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-case-reference-controller.js deleted file mode 100644 index 8cfae86a..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-case-reference-controller.js +++ /dev/null @@ -1,86 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableCaseReferenceCtrl', - [ '$scope', '$modal', '$http', function($scope, $modal, $http) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/case-reference-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); -}]); - -angular.module('flowableModeler').controller('FlowableCaseReferencePopupCtrl', [ '$scope', '$http', 'editorManager', '$location', function($scope, $http, editorManager, $location) { - - $scope.state = {'loadingCases' : true, 'error' : false}; - - // Close button handler - $scope.close = function() { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - // Selecting/deselecting a case - $scope.selectCase = function(caseModel, $event) { - $event.stopPropagation(); - if ($scope.selectedCase && $scope.selectedCase.id && caseModel.id == $scope.selectedCase.id) { - // un-select the current selection - $scope.selectedCase = null; - } else { - $scope.selectedCase = caseModel; - } - }; - - $scope.open = function() { - if ($scope.selectedCase) { - $location.path("/editor/" + $scope.selectedCase.id); - } - }; - - // Saving the selected value - $scope.save = function() { - if ($scope.selectedCase) { - $scope.property.value = {'id' : $scope.selectedCase.id, 'name' : $scope.selectedCase.name, 'key': $scope.selectedCase.key}; - } else { - $scope.property.value = null; - } - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.loadCases = function() { - var modelMetaData = editorManager.getBaseModelData(); - $http.get(FLOWABLE.APP_URL.getCaseModelsUrl('?excludeId=' + modelMetaData.modelId)) - .success( - function(response) { - $scope.state.loadingCases = false; - $scope.state.caseError = false; - $scope.caseModels = response.data; - }) - .error( - function(data, status, headers, config) { - $scope.state.loadingCases = false; - $scope.state.caseError = true; - }); - }; - - if ($scope.property && $scope.property.value && $scope.property.value.id) { - $scope.selectedCase = $scope.property.value; - } - - $scope.loadCases(); -}]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-condition-expression-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-condition-expression-controller.js deleted file mode 100644 index 0ef677ea..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-condition-expression-controller.js +++ /dev/null @@ -1,59 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Condition expression - */ - -angular.module('flowableModeler').controller('FlowableConditionExpressionCtrl', [ '$scope', '$modal', function($scope, $modal) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/condition-expression-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); -}]); - -angular.module('flowableModeler').controller('FlowableConditionExpressionPopupCtrl', - [ '$rootScope', '$scope', '$translate', 'FormBuilderService', function($rootScope, $scope, $translate, FormBuilderService) { - - // Put json representing assignment on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.expression !== undefined - && $scope.property.value.expression !== null) { - - $scope.expression = $scope.property.value.expression; - - } else if ($scope.property.value !== undefined && $scope.property.value !== null) { - $scope.expression = {type: 'static', staticValue: $scope.property.value}; - - } else { - $scope.expression = {}; - } - - $scope.save = function() { - $scope.property.value = {expression: $scope.expression}; - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - // Close button handler - $scope.close = function() { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-custom-controllers.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-custom-controllers.js deleted file mode 100644 index 72ac3040..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-custom-controllers.js +++ /dev/null @@ -1,12 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-data-properties-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-data-properties-controller.js deleted file mode 100644 index 547bd30f..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-data-properties-controller.js +++ /dev/null @@ -1,330 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Data Properties - */ - -angular.module('flowableModeler').controller('FlowableDataPropertiesCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/data-properties-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -angular.module('flowableModeler').controller('FlowableDataPropertiesPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing data properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.items !== undefined - && $scope.property.value.items !== null) { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.dataProperties = angular.copy($scope.property.value.items); - - for (var i = 0; i < $scope.dataProperties.length; i++) { - var dataProperty = $scope.dataProperties[i]; - if (dataProperty.enumValues && dataProperty.enumValues.length > 0) { - for (var j = 0; j < dataProperty.enumValues.length; j++) { - var enumValue = dataProperty.enumValues[j]; - if (!enumValue.id && !enumValue.name && enumValue.value) { - enumValue.id = enumValue.value; - enumValue.name = enumValue.value; - } - } - } - } - - } else { - $scope.dataProperties = []; - } - - $scope.enumValues = []; - - $scope.translationsRetrieved = false; - - $scope.labels = {}; - - var idPromise = $translate('PROPERTY.DATAPROPERTIES.ID'); - var namePromise = $translate('PROPERTY.DATAPROPERTIES.NAME'); - var typePromise = $translate('PROPERTY.DATAPROPERTIES.TYPE'); - var valuePromise = $translate('PROPERTY.DATAPROPERTIES.VALUE'); - - $q.all([idPromise, namePromise, typePromise, valuePromise]).then(function (results) { - $scope.labels.idLabel = results[0]; - $scope.labels.nameLabel = results[1]; - $scope.labels.typeLabel = results[2]; - $scope.labels.valueLabel = results[3]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.dataProperties, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{field: 'dataproperty_id', displayName: $scope.labels.idLabel}, - {field: 'dataproperty_name', displayName: $scope.labels.nameLabel}, - {field: 'dataproperty_type', displayName: $scope.labels.typeLabel}, - {field: 'dataproperty_value', displayName: $scope.labels.valueLabel}] - }; - - $scope.enumGridOptions = { - data: $scope.enumValues, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{ field: 'id', displayName: $scope.labels.idLabel }, - { field: 'name', displayName: $scope.labels.nameLabel}] - } - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedProperty = row.entity; - $scope.selectedEnumValue = undefined; - if ($scope.selectedProperty && $scope.selectedProperty.enumValues) { - $scope.enumValues.length = 0; - for (var i = 0; i < $scope.selectedProperty.enumValues.length; i++) { - $scope.enumValues.push($scope.selectedProperty.enumValues[i]); - } - } - }); - }; - - $scope.enumGridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.enumGridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedEnumValue = row.entity; - }); - }; - }); - - // Handler for when the value of the type dropdown changes - $scope.propertyTypeChanged = function () { - - // Check date. If date, show date pattern - if ($scope.selectedProperty.type === 'date') { - $scope.selectedProperty.datePattern = 'MM-dd-yyyy hh:mm'; - } else { - delete $scope.selectedProperty.datePattern; - } - - // Check enum. If enum, show list of options - if ($scope.selectedProperty.type === 'enum') { - $scope.selectedProperty.enumValues = [ {id: 'value1', name: 'Value 1'}, {id: 'value2', name: 'Value 2'}]; - $scope.enumValues.length = 0; - for (var i = 0; i < $scope.selectedProperty.enumValues.length; i++) { - $scope.enumValues.push($scope.selectedProperty.enumValues[i]); - } - - } else { - delete $scope.selectedProperty.enumValues; - $scope.enumValues.length = 0; - } - }; - - // Click handler for add button - var propertyIndex = 1; - $scope.addNewProperty = function () { - var newProperty = { - dataproperty_id: 'new_data_object_' + propertyIndex++, - dataproperty_name: '', - dataproperty_type: 'string', - readable: true, - writable: true - }; - - $scope.dataProperties.push(newProperty); - - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newProperty); - }); - }; - - // Click handler for remove button - $scope.removeProperty = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.dataProperties.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.dataProperties.splice(index, 1); - - if ($scope.dataProperties.length == 0) { - $scope.selectedProperty = undefined; - } - - $timeout(function() { - if ($scope.dataProperties.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.dataProperties[0]); - } - }); - } - }; - - // Click handler for up button - $scope.movePropertyUp = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.dataProperties.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.dataProperties[index]; - $scope.dataProperties.splice(index, 1); - $timeout(function(){ - $scope.dataProperties.splice(index + -1, 0, temp); - $timeout(function() { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.movePropertyDown = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.dataProperties.indexOf(selectedItems[0]); - if (index != $scope.dataProperties.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.dataProperties[index]; - $scope.dataProperties.splice(index, 1); - $timeout(function(){ - $scope.dataProperties.splice(index + 1, 0, temp); - $timeout(function() { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - $scope.addNewEnumValue = function() { - if ($scope.selectedProperty) { - var newEnumValue = { id : '', name : ''}; - $scope.selectedProperty.enumValues.push(newEnumValue); - $scope.enumValues.push(newEnumValue); - - $timeout(function () { - $scope.enumGridApi.selection.toggleRowSelection(newEnumValue); - }); - } - }; - - // Click handler for remove button - $scope.removeEnumValue = function() { - var selectedItems = $scope.enumGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.enumValues.indexOf(selectedItems[0]); - $scope.enumGridApi.selection.toggleRowSelection(selectedItems[0]); - - $scope.enumValues.splice(index, 1); - $scope.selectedProperty.enumValues.splice(index, 1); - - if ($scope.enumValues.length == 0) { - $scope.selectedEnumValue = undefined; - } - - $timeout(function () { - if ($scope.enumValues.length > 0) { - $scope.enumGridApi.selection.toggleRowSelection($scope.enumValues[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveEnumValueUp = function() { - var selectedItems = $scope.enumGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.enumValues.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.enumValues[index]; - $scope.enumValues.splice(index, 1); - $scope.selectedProperty.enumValues.splice(index, 1); - $timeout(function () { - $scope.enumValues.splice(index + -1, 0, temp); - $scope.selectedProperty.enumValues.splice(index + -1, 0, temp); - $timeout(function () { - $scope.enumGridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveEnumValueDown = function() { - var selectedItems = $scope.enumGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.enumValues.indexOf(selectedItems[0]); - if (index != $scope.enumValues.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.enumValues[index]; - $scope.enumValues.splice(index, 1); - $scope.selectedProperty.enumValues.splice(index, 1); - $timeout(function () { - $scope.enumValues.splice(index + 1, 0, temp); - $scope.selectedProperty.enumValues.splice(index + 1, 0, temp); - $timeout(function () { - $scope.enumGridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.dataProperties.length > 0) { - $scope.property.value = {}; - $scope.property.value.items = $scope.dataProperties; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.$hide(); - $scope.property.mode = 'read'; - }; - - // Close button handler - $scope.close = function () { - $scope.$hide(); - $scope.property.mode = 'read'; - }; - - }]) -; \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-decisionservice-reference-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-decisionservice-reference-controller.js deleted file mode 100644 index 9e1fc38d..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-decisionservice-reference-controller.js +++ /dev/null @@ -1,288 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableDecisionServiceReferenceCtrl', - [ '$scope', '$modal', '$http', function($scope, $modal, $http) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/decisionservice-reference-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); -}]); - -angular.module('flowableModeler').controller('FlowableDecisionServiceReferencePopupCtrl', ['$rootScope', '$scope', '$http', '$location', 'editorManager', - function($rootScope, $scope, $http, $location, editorManager) { - - $scope.state = { - 'loadingDecisionServices': true, - 'decisionServiceError': false - }; - - $scope.popup = { - 'state': 'decisionServiceReference' - }; - - $scope.foldersBreadCrumbs = []; - - // Make click outside dialog also call close. - $scope.$parent.$on('modal.hide.before', function() { - $scope.close(); - $scope.$parent.$apply(); - }); - - // Close button handler - $scope.close = function() { - $scope.property.newVariablesMapping = undefined; - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - // Selecting/deselecting a decision service - $scope.selectDecisionService = function(decisionService, $event) { - $event.stopPropagation(); - if ($scope.selectedDecisionService && $scope.selectedDecisionService.id && decisionService.id == $scope.selectedDecisionService.id) { - // un-select the current selection - $scope.selectedDecisionService = null; - } else { - $scope.selectedDecisionService = decisionService; - } - }; - - $scope.isSelected = function () { - if ($scope.selectedDecisionService && $scope.selectedDecisionService.id) { - return true; - } - return false; - }; - - // Saving the selected value - $scope.save = function() { - if ($scope.selectedDecisionService) { - $scope.property.value = { - 'id': $scope.selectedDecisionService.id, - 'name': $scope.selectedDecisionService.name, - 'key': $scope.selectedDecisionService.key - }; - - } else { - $scope.property.value = null; - } - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - // Open the selected value - $scope.open = function() { - if ($scope.selectedDecisionService) { - $scope.property.value = { - 'id': $scope.selectedDecisionService.id, - 'name': $scope.selectedDecisionService.name, - 'key': $scope.selectedDecisionService.key - }; - $scope.updatePropertyInModel($scope.property); - - var modelMetaData = editorManager.getBaseModelData(); - var json = editorManager.getModel(); - json = JSON.stringify(json); - - var params = { - modeltype: modelMetaData.model.modelType, - json_xml: json, - name: modelMetaData.name, - key: modelMetaData.key, - description: modelMetaData.description, - newversion: false, - lastUpdated: modelMetaData.lastUpdated - }; - - // Update - $http({ - method: 'POST', - data: params, - ignoreErrors: true, - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' - }, - transformRequest: function (obj) { - var str = []; - for (var p in obj) { - str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); - } - return str.join("&"); - }, - url: FLOWABLE.URL.putModel(modelMetaData.modelId) - }) - - .success(function(data, status, headers, config) { - editorManager.handleEvents({ - type: ORYX.CONFIG.EVENT_SAVED - }); - - $rootScope.addHistoryItem($scope.selectedShape.resourceId); - $location.path('decision-service-editor/' + $scope.selectedDecisionService.id); - }) - .error(function(data, status, headers, config) { - - }); - - $scope.close(); - } - }; - - $scope.newDecisionService = function() { - $scope.property.value.variablesmapping = []; - - $scope.popup.state = 'newDecisionService'; - - var modelMetaData = editorManager.getBaseModelData(); - - $scope.model = { - loading: false, - decisionService: { - name: '', - key: '', - description: '', - modelType: 6 - }, - defaultStencilSet: undefined, - decisionTableStencilSets: [] - }; - }; - - $scope.createDecisionService = function() { - - if (!$scope.model.decisionService.name || $scope.model.decisionService.name.length == 0 || - !$scope.model.decisionService.key || $scope.model.decisionService.key.length == 0) { - - return; - } - - var stencilSetId = $scope.model.decisionService.stencilSet; - $scope.model.loading = true; - - $http({ - method: 'POST', - url: FLOWABLE.APP_URL.getModelsUrl(), - data: $scope.model.decisionService - }). - success(function(data, status, headers, config) { - - var newDecisionTableId = data.id; - $scope.property.value = { - 'id': newDecisionTableId, - 'name': data.name, - 'key': data.key - }; - $scope.updatePropertyInModel($scope.property); - - var modelMetaData = editorManager.getBaseModelData(); - var json = editorManager.getModel(); - json = JSON.stringify(json); - - var params = { - modeltype: modelMetaData.model.modelType, - json_xml: json, - name: modelMetaData.name, - key: modelMetaData.key, - description: modelMetaData.description, - newversion: false, - lastUpdated: modelMetaData.lastUpdated, - stencilSet: stencilSetId - }; - - // Update - $http({ - method: 'POST', - data: params, - ignoreErrors: true, - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' - }, - transformRequest: function (obj) { - var str = []; - for (var p in obj) { - str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); - } - return str.join("&"); - }, - url: FLOWABLE.URL.putModel(modelMetaData.modelId) - }) - - .success(function(data, status, headers, config) { - editorManager.handleEvents({ - type: ORYX.CONFIG.EVENT_SAVED - }); - - $scope.model.loading = false; - $scope.$hide(); - - $rootScope.addHistoryItem($scope.selectedShape.resourceId); - $location.path('decision-service-editor/' + newDecisionTableId); - }) - .error(function(data, status, headers, config) { - $scope.model.loading = false; - $scope.$hide(); - }); - - }). - error(function(data, status, headers, config) { - $scope.model.loading = false; - $scope.model.errorMessage = data.message; - }); - }; - - $scope.cancel = function() { - $scope.close(); - }; - - $scope.resetCurrent = function () { - for (var i = 0, found = false; i < $scope.decisionServices.length && found === false; i++) { - var decision = $scope.decisionServices[i]; - if (decision.id === $scope.property.value.id) { - $scope.selectedDecisionService = decision; - found = true; - } - } - }; - - $scope.loadDecisionServices = function() { - var modelMetaData = editorManager.getBaseModelData(); - $http.get(FLOWABLE.APP_URL.getDecisionServiceModelsUrl()) - .success( - function(response) { - $scope.state.loadingDecisionServices = false; - $scope.state.decisionServiceError = false; - $scope.decisionServices = response.data; - $scope.resetCurrent(); - }) - .error( - function(data, status, headers, config) { - $scope.state.loadingDecisionServices = false; - $scope.state.decisionServiceError = true; - }); - }; - - if ($scope.property && $scope.property.value && $scope.property.value.id) { - $scope.selectedDecisionService = $scope.property.value; - $scope.storedId = $scope.property.value.id; - } - - $scope.loadDecisionServices(); - } -]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-decisiontable-reference-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-decisiontable-reference-controller.js deleted file mode 100644 index c795971e..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-decisiontable-reference-controller.js +++ /dev/null @@ -1,288 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableDecisionTableReferenceCtrl', - [ '$scope', '$modal', '$http', function($scope, $modal, $http) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/decisiontable-reference-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); -}]); - -angular.module('flowableModeler').controller('FlowableDecisionTableReferencePopupCtrl', ['$rootScope', '$scope', '$http', '$location', 'editorManager', - function($rootScope, $scope, $http, $location, editorManager) { - - $scope.state = { - 'loadingDecisionTables': true, - 'decisionTableError': false - }; - - $scope.popup = { - 'state': 'decisionTableReference' - }; - - $scope.foldersBreadCrumbs = []; - - // Make click outside dialog also call close. - $scope.$parent.$on('modal.hide.before', function() { - $scope.close(); - $scope.$parent.$apply(); - }); - - // Close button handler - $scope.close = function() { - $scope.property.newVariablesMapping = undefined; - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - // Selecting/deselecting a decision table - $scope.selectDecisionTable = function(decisionTable, $event) { - $event.stopPropagation(); - if ($scope.selectedDecisionTable && $scope.selectedDecisionTable.id && decisionTable.id == $scope.selectedDecisionTable.id) { - // un-select the current selection - $scope.selectedDecisionTable = null; - } else { - $scope.selectedDecisionTable = decisionTable; - } - }; - - $scope.isSelected = function () { - if ($scope.selectedDecisionTable && $scope.selectedDecisionTable.id) { - return true; - } - return false; - }; - - // Saving the selected value - $scope.save = function() { - if ($scope.selectedDecisionTable) { - $scope.property.value = { - 'id': $scope.selectedDecisionTable.id, - 'name': $scope.selectedDecisionTable.name, - 'key': $scope.selectedDecisionTable.key - }; - - } else { - $scope.property.value = null; - } - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - // Open the selected value - $scope.open = function() { - if ($scope.selectedDecisionTable) { - $scope.property.value = { - 'id': $scope.selectedDecisionTable.id, - 'name': $scope.selectedDecisionTable.name, - 'key': $scope.selectedDecisionTable.key - }; - $scope.updatePropertyInModel($scope.property); - - var modelMetaData = editorManager.getBaseModelData(); - var json = editorManager.getModel(); - json = JSON.stringify(json); - - var params = { - modeltype: modelMetaData.model.modelType, - json_xml: json, - name: modelMetaData.name, - key: modelMetaData.key, - description: modelMetaData.description, - newversion: false, - lastUpdated: modelMetaData.lastUpdated - }; - - // Update - $http({ - method: 'POST', - data: params, - ignoreErrors: true, - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' - }, - transformRequest: function (obj) { - var str = []; - for (var p in obj) { - str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); - } - return str.join("&"); - }, - url: FLOWABLE.URL.putModel(modelMetaData.modelId) - }) - - .success(function(data, status, headers, config) { - editorManager.handleEvents({ - type: ORYX.CONFIG.EVENT_SAVED - }); - - $rootScope.addHistoryItem($scope.selectedShape.resourceId); - $location.path('decision-table-editor/' + $scope.selectedDecisionTable.id); - }) - .error(function(data, status, headers, config) { - - }); - - $scope.close(); - } - }; - - $scope.newDecisionTable = function() { - $scope.property.value.variablesmapping = []; - - $scope.popup.state = 'newDecisionTable'; - - var modelMetaData = editorManager.getBaseModelData(); - - $scope.model = { - loading: false, - decisionTable: { - name: '', - key: '', - description: '', - modelType: 4 - }, - defaultStencilSet: undefined, - decisionTableStencilSets: [] - }; - }; - - $scope.createDecisionTable = function() { - - if (!$scope.model.decisionTable.name || $scope.model.decisionTable.name.length == 0 || - !$scope.model.decisionTable.key || $scope.model.decisionTable.key.length == 0) { - - return; - } - - var stencilSetId = $scope.model.decisionTable.stencilSet; - $scope.model.loading = true; - - $http({ - method: 'POST', - url: FLOWABLE.APP_URL.getModelsUrl(), - data: $scope.model.decisionTable - }). - success(function(data, status, headers, config) { - - var newDecisionTableId = data.id; - $scope.property.value = { - 'id': newDecisionTableId, - 'name': data.name, - 'key': data.key - }; - $scope.updatePropertyInModel($scope.property); - - var modelMetaData = editorManager.getBaseModelData(); - var json = editorManager.getModel(); - json = JSON.stringify(json); - - var params = { - modeltype: modelMetaData.model.modelType, - json_xml: json, - name: modelMetaData.name, - key: modelMetaData.key, - description: modelMetaData.description, - newversion: false, - lastUpdated: modelMetaData.lastUpdated, - stencilSet: stencilSetId - }; - - // Update - $http({ - method: 'POST', - data: params, - ignoreErrors: true, - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' - }, - transformRequest: function (obj) { - var str = []; - for (var p in obj) { - str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); - } - return str.join("&"); - }, - url: FLOWABLE.URL.putModel(modelMetaData.modelId) - }) - - .success(function(data, status, headers, config) { - editorManager.handleEvents({ - type: ORYX.CONFIG.EVENT_SAVED - }); - - $scope.model.loading = false; - $scope.$hide(); - - $rootScope.addHistoryItem($scope.selectedShape.resourceId); - $location.path('decision-table-editor/' + newDecisionTableId); - }) - .error(function(data, status, headers, config) { - $scope.model.loading = false; - $scope.$hide(); - }); - - }). - error(function(data, status, headers, config) { - $scope.model.loading = false; - $scope.model.errorMessage = data.message; - }); - }; - - $scope.cancel = function() { - $scope.close(); - }; - - $scope.resetCurrent = function () { - for (var i = 0, found = false; i < $scope.decisionTables.length && found === false; i++) { - var table = $scope.decisionTables[i]; - if (table.id === $scope.property.value.id) { - $scope.selectedDecisionTable = table; - found = true; - } - } - }; - - $scope.loadDecisionTables = function() { - var modelMetaData = editorManager.getBaseModelData(); - $http.get(FLOWABLE.APP_URL.getDecisionTableModelsUrl()) - .success( - function(response) { - $scope.state.loadingDecisionTables = false; - $scope.state.decisionTableError = false; - $scope.decisionTables = response.data; - $scope.resetCurrent(); - }) - .error( - function(data, status, headers, config) { - $scope.state.loadingDecisionTables = false; - $scope.state.decisionTableError = true; - }); - }; - - if ($scope.property && $scope.property.value && $scope.property.value.id) { - $scope.selectedDecisionTable = $scope.property.value; - $scope.storedId = $scope.property.value.id; - } - - $scope.loadDecisionTables(); - } -]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-default-controllers.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-default-controllers.js deleted file mode 100644 index c31fe4de..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-default-controllers.js +++ /dev/null @@ -1,118 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * String controller - */ - -angular.module('flowableModeler').controller('FlowableStringPropertyCtrl', [ '$scope', function ($scope) { - - $scope.shapeId = $scope.selectedShape.id; - $scope.valueFlushed = false; - /** Handler called when input field is blurred */ - $scope.inputBlurred = function() { - $scope.valueFlushed = true; - if ($scope.property.value) { - $scope.property.value = $scope.property.value.replace(/(<([^>]+)>)/ig,""); - } - $scope.updatePropertyInModel($scope.property); - }; - - $scope.enterPressed = function(keyEvent) { - // if enter is pressed - if (keyEvent && keyEvent.which === 13) { - keyEvent.preventDefault(); - $scope.inputBlurred(); // we want to do the same as if the user would blur the input field - } - // else; do nothing - }; - - $scope.$on('$destroy', function controllerDestroyed() { - if(!$scope.valueFlushed) { - if ($scope.property.value) { - $scope.property.value = $scope.property.value.replace(/(<([^>]+)>)/ig,""); - } - $scope.updatePropertyInModel($scope.property, $scope.shapeId); - } - }); - -}]); - -/* - * Boolean controller - */ - -angular.module('flowableModeler').controller('FlowableBooleanPropertyCtrl', ['$scope', function ($scope) { - - $scope.changeValue = function() { - if ($scope.property.key === 'oryx-defaultflow' && $scope.property.value) { - var selectedShape = $scope.selectedShape; - if (selectedShape) { - var incomingNodes = selectedShape.getIncomingShapes(); - if (incomingNodes && incomingNodes.length > 0) { - // get first node, since there can be only one for a sequence flow - var rootNode = incomingNodes[0]; - var flows = rootNode.getOutgoingShapes(); - if (flows && flows.length > 1) { - // in case there are more flows, check if another flow is already defined as default - for (var i = 0; i < flows.length; i++) { - if (flows[i].resourceId != selectedShape.resourceId) { - var defaultFlowProp = flows[i].properties.get('oryx-defaultflow'); - if (defaultFlowProp) { - flows[i].setProperty('oryx-defaultflow', false, true); - } - } - } - } - } - } - } - $scope.updatePropertyInModel($scope.property); - }; - -}]); - -/* - * Text controller - */ - -angular.module('flowableModeler').controller('FlowableTextPropertyCtrl', [ '$scope', '$modal', '$timeout', function($scope, $modal, $timeout) { - - var opts = { - template: 'editor-app/configuration/properties/text-popup.html?version=' + Date.now(), - scope: $scope, - prefixEvent: 'textModalEvent' - }; - - $scope.$on('textModalEvent.hide.before', function() { - $timeout(function() { - $scope.property.mode = 'read'; - }, 0); - }); - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); -}]); - -angular.module('flowableModeler').controller('FlowableTextPropertyPopupCtrl', ['$scope', function($scope) { - - $scope.save = function() { - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.close = function() { - $scope.property.mode = 'read'; - $scope.$hide(); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-duedate-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-duedate-controller.js deleted file mode 100644 index 50ff9dd9..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-duedate-controller.js +++ /dev/null @@ -1,126 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Due date - */ -'use strict'; - -angular.module('flowableModeler').controller('BpmnEditorDueDateCtrl', [ '$scope', '$modal', function($scope, $modal) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/duedate-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); -}]); - -angular.module('flowableModeler').controller('BpmnEditorDueDatePopupCtrl', - [ '$rootScope', '$scope', '$translate', function($rootScope, $scope, $translate) { - - // Put json representing assignment on scope - if ($scope.property.value !== undefined && $scope.property.value !== null) { - - if ($scope.property.value.duedate !== undefined && $scope.property.value.duedate !== null) { - $scope.popup = {'duedate': $scope.property.value.duedate}; - - } else if ($scope.property.value.duedateExpression !== undefined && $scope.property.value.duedateExpression !== null) { - $scope.popup = {'duedateExpression': $scope.property.value.duedateExpression}; - - } else { - $scope.popup = {'duedateExpression': $scope.property.value}; - } - - } else { - $scope.popup = {}; - } - - $scope.taskDueDateOptions = [ - {id: "none", title: $translate.instant('PROPERTY.DUEDATE.TASK-DUE-DATE-OPTIONS.NO-DUEDATE')}, - {id: "expression", title: $translate.instant('PROPERTY.DUEDATE.TASK-DUE-DATE-OPTIONS.EXPRESSION')}, - {id: "static", title: $translate.instant('PROPERTY.DUEDATE.TASK-DUE-DATE-OPTIONS.STATIC')}, - {id: "field", title: $translate.instant('PROPERTY.DUEDATE.TASK-DUE-DATE-OPTIONS.FIELD')} - ]; - - if (!$scope.popup.duedate && !$scope.popup.duedateExpression) { - // Default, first time opening the popup - $scope.popup.selectedDueDateOption = $scope.taskDueDateOptions[0].id; - - } else if (!$scope.popup.duedate) { - $scope.popup.selectedDueDateOption = $scope.taskDueDateOptions[1].id; - - } else { - - if ($scope.popup.duedate.fixed) { - $scope.popup.selectedDueDateOption = $scope.taskDueDateOptions[2].id; - - } else if ($scope.popup.duedate.field) { - $scope.popup.selectedDueDateOption = $scope.taskDueDateOptions[3].id; - - } else { - $scope.popup.selectedDueDateOption = $scope.taskDueDateOptions[0].id; - } - } - - $scope.dueDateOptionChanged = function() { - if ($scope.popup.selectedDueDateOption === 'expression') { - $scope.popup.duedate = undefined; - - } else if ($scope.popup.selectedDueDateOption === 'none') { - $scope.popup.duedate = undefined; - $scope.popup.duedateExpression = undefined; - - } else if ($scope.popup.selectedDueDateOption === 'static') { - $scope.popup.duedate = {'fixed': {}}; - $scope.popup.duedateExpression = undefined; - - } else if ($scope.popup.selectedDueDateOption === 'field') { - $scope.popup.duedate = {'field': {}}; - $scope.popup.duedateExpression = undefined; - } - }; - - $scope.setAddCalculationType = function() { - $scope.popup.duedate.field.taskDueDateCalculationType = 'add'; - }; - - $scope.setSubtractCalculationType = function() { - $scope.popup.duedate.field.taskDueDateCalculationType = 'subtract'; - }; - - $scope.allSteps = EDITOR.UTIL.collectSortedElementsFromPrecedingElements($scope.selectedShape); - - $scope.save = function () { - $scope.property.value = {}; - if ($scope.popup.duedate) { - $scope.property.value.duedate = $scope.popup.duedate; - - } else if ($scope.popup.duedateExpression) { - $scope.property.value.duedateExpression = $scope.popup.duedateExpression; - - } else { - $scope.property.value = ''; - } - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - // Close button handler - $scope.close = function() { - $scope.property.mode = 'read'; - $scope.$hide(); - }; -}]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-escalation-definitions-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-escalation-definitions-controller.js deleted file mode 100644 index 7944d0c5..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-escalation-definitions-controller.js +++ /dev/null @@ -1,145 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Escalation definitions - */ - -angular.module('flowableModeler').controller('FlowableEscalationDefinitionsCtrl', ['$scope', '$modal', function ($scope, $modal) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/escalation-definitions-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); -}]); - -//Need a separate controller for the modal window due to https://github.com/angular-ui/bootstrap/issues/259 -// Will be fixed in a newer version of Angular UI -angular.module('flowableModeler').controller('FlowableEscalationDefinitionsPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing signal definitions on scope - if ($scope.property.value !== undefined && $scope.property.value !== null && $scope.property.value.length > 0) { - - if ($scope.property.value.constructor == String) { - $scope.escalationDefinitions = JSON.parse($scope.property.value); - } - else { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.escalationDefinitions = angular.copy($scope.property.value); - } - - } else { - $scope.escalationDefinitions = []; - } - - // Array to contain selected signal definitions (yes - we only can select one, but ng-grid isn't smart enough) - $scope.selectedEscalationDefinition = undefined; - $scope.translationsRetrieved = false; - - $scope.labels = {}; - - var idPromise = $translate('PROPERTY.ESCALATIONDEFINITIONS.ID'); - var namePromise = $translate('PROPERTY.ESCALATIONDEFINITIONS.NAME'); - - $q.all([idPromise, namePromise]).then(function (results) { - - $scope.labels.idLabel = results[0]; - $scope.labels.nameLabel = results[1]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.escalationDefinitions, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [ - {field: 'id', displayName: $scope.labels.idLabel}, - {field: 'name', displayName: $scope.labels.nameLabel}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedEscalationDefinition = row.entity; - }); - }; - }); - - // Click handler for add button - $scope.addNewEscalationDefinition = function () { - var newEscalationDefinition = {id: '', name: ''}; - - $scope.escalationDefinitions.push(newEscalationDefinition); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newEscalationDefinition); - }); - }; - - // Click handler for remove button - $scope.removeEscalationDefinition = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.escalationDefinitions.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.escalationDefinitions.splice(index, 1); - - if ($scope.escalationDefinitions.length == 0) { - $scope.selectedEscalationDefinition = undefined; - } - - $timeout(function () { - if ($scope.escalationDefinitions.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.escalationDefinitions[0]); - } - }); - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.escalationDefinitions.length > 0) { - $scope.property.value = $scope.escalationDefinitions; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - }]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-escalation-scope-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-escalation-scope-controller.js deleted file mode 100644 index 0a600153..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-escalation-scope-controller.js +++ /dev/null @@ -1,42 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableEscalationRefCtrl', [ '$scope', function($scope) { - - // Find the parent shape on which the signal definitions are defined - var escalationDefinitionsProperty = undefined; - var parent = $scope.selectedShape; - while (parent !== null && parent !== undefined && escalationDefinitionsProperty === undefined) { - if (parent.properties && parent.properties.get('oryx-escalationdefinitions')) { - escalationDefinitionsProperty = parent.properties.get('oryx-escalationdefinitions'); - } else { - parent = parent.parent; - } - } - - try { - escalationDefinitionsProperty = JSON.parse(escalationDefinitionsProperty); - if (typeof escalationDefinitionsProperty == 'string') { - escalationDefinitionsProperty = JSON.parse(escalationDefinitionsProperty); - } - } catch (err) { - // Do nothing here, just to be sure we try-catch it - } - - $scope.escalationDefinitions = escalationDefinitionsProperty; - - - $scope.escalationChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-channel-type-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-channel-type-controller.js deleted file mode 100644 index 827270ca..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-channel-type-controller.js +++ /dev/null @@ -1,24 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableEventRegistryChannelTypeCtrl', [ '$scope', function($scope) { - - if ($scope.property.value == undefined && $scope.property.value == null) - { - $scope.property.value = 'None'; - } - - $scope.channelTypeChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-correlation-parameters-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-correlation-parameters-controller.js deleted file mode 100644 index 23ca4c90..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-correlation-parameters-controller.js +++ /dev/null @@ -1,141 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Input parameters for call activity - */ - -angular.module('flowableModeler').controller('FlowableEventCorrelationParametersCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/event-correlation-parameters-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -angular.module('flowableModeler').controller('FlowableEventCorrelationParametersPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.correlationParameters !== undefined - && $scope.property.value.correlationParameters !== null) { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.parameters = angular.copy($scope.property.value.correlationParameters); - } else { - $scope.parameters = []; - } - - $scope.translationsRetrieved = false; - $scope.labels = {}; - - var parameterName = $translate('PROPERTY.EVENTCORRELATIONPARAMETERS.NAME'); - var parameterType = $translate('PROPERTY.EVENTCORRELATIONPARAMETERS.TYPE'); - - $q.all([parameterName, parameterType]).then(function (results) { - $scope.labels.parameterName = results[0]; - $scope.labels.parameterType = results[1]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.parameters, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [ - {field: 'name', displayName: $scope.labels.parameterName}, - {field: 'type', displayName: $scope.labels.parameterType}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedParameter = row.entity; - }); - }; - }); - - // Click handler for add button - $scope.addNewParameter = function () { - var newParameter = { - name: '', - type: 'string', - value: '' - }; - - $scope.parameters.push(newParameter); - - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newParameter); - }); - }; - - // Click handler for remove button - $scope.removeParameter = function () { - - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.parameters.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.parameters.splice(index, 1); - - if ($scope.parameters.length == 0) { - $scope.selectedParameter = undefined; - } - - $timeout(function () { - if ($scope.parameters.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.parameters[0]); - } - }); - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.parameters.length > 0) { - $scope.property.value = {}; - $scope.property.value.correlationParameters = $scope.parameters; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.close(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - }]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-in-parameters-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-in-parameters-controller.js deleted file mode 100644 index 828a7d46..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-in-parameters-controller.js +++ /dev/null @@ -1,141 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Input parameters for call activity - */ - -angular.module('flowableModeler').controller('FlowableEventInParametersCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/event-in-parameters-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -angular.module('flowableModeler').controller('FlowableEventInParametersPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.inParameters !== undefined - && $scope.property.value.inParameters !== null) { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.parameters = angular.copy($scope.property.value.inParameters); - } else { - $scope.parameters = []; - } - - $scope.translationsRetrieved = false; - $scope.labels = {}; - - var variableNameLabel = $translate('PROPERTY.EVENTINPARAMETERS.VARIABLENAME'); - var eventNameLabel = $translate('PROPERTY.EVENTINPARAMETERS.EVENTNAME'); - - $q.all([variableNameLabel, eventNameLabel]).then(function (results) { - $scope.labels.variableNameLabel = results[1]; - $scope.labels.eventNameLabel = results[0]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.parameters, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [ - {field: 'variableName', displayName: $scope.labels.variableNameLabel}, - {field: 'eventName', displayName: $scope.labels.eventNameLabel}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedParameter = row.entity; - }); - }; - }); - - // Click handler for add button - $scope.addNewParameter = function () { - var newParameter = { - variableName: '', - eventName: '', - eventType: 'string' - }; - - $scope.parameters.push(newParameter); - - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newParameter); - }); - }; - - // Click handler for remove button - $scope.removeParameter = function () { - - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.parameters.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.parameters.splice(index, 1); - - if ($scope.parameters.length == 0) { - $scope.selectedParameter = undefined; - } - - $timeout(function () { - if ($scope.parameters.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.parameters[0]); - } - }); - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.parameters.length > 0) { - $scope.property.value = {}; - $scope.property.value.inParameters = $scope.parameters; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.close(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - }]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-listeners-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-listeners-controller.js deleted file mode 100644 index 21f9ad4a..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-listeners-controller.js +++ /dev/null @@ -1,263 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Execution listeners - */ - -angular.module('flowableModeler').controller('FlowableEventListenersCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/event-listeners-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -//Need a separate controller for the modal window due to https://github.com/angular-ui/bootstrap/issues/259 -// Will be fixed in a newer version of Angular UI -angular.module('flowableModeler').controller('FlowableEventListenersPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.eventListeners !== undefined - && $scope.property.value.eventListeners !== null) { - - if ($scope.property.value.eventListeners.constructor == String) { - $scope.eventListeners = JSON.parse($scope.property.value.eventListeners); - } - else { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.eventListeners = angular.copy($scope.property.value.eventListeners); - } - - } else { - $scope.eventListeners = []; - } - - $scope.translationsRetrieved = false; - $scope.labels = {}; - - var eventPromise = $translate('PROPERTY.EXECUTIONLISTENERS.EVENT'); - var implementationPromise = $translate('PROPERTY.EXECUTIONLISTENERS.FIELDS.IMPLEMENTATION'); - var namePromise = $translate('PROPERTY.EXECUTIONLISTENERS.FIELDS.NAME'); - - $q.all([eventPromise, implementationPromise, namePromise]).then(function (results) { - $scope.labels.eventLabel = results[0]; - $scope.labels.implementationLabel = results[1]; - $scope.labels.nameLabel = results[2]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.eventListeners, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{field: 'event', displayName: $scope.labels.eventLabel}, - {field: 'implementation', displayName: $scope.labels.implementationLabel}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedListener = row.entity; - - if ($scope.selectedListener) { - var fields = $scope.selectedListener.fields; - if (fields !== undefined && fields !== null) { - for (var i = 0; i < fields.length; i++) { - var field = fields[i]; - if (field.stringValue !== undefined && field.stringValue !== '') { - field.implementation = field.stringValue; - } else if (field.expression !== undefined && field.expression !== '') { - field.implementation = field.expression; - } else if (field.string !== undefined && field.string !== '') { - field.implementation = field.string; - } - } - } else { - $scope.selectedListener.fields = []; - } - if (!$scope.selectedListener.events) { - $scope.selectedListener.events = [{event: ''}]; - } - } - }); - }; - }); - - - // Click handler for + button after enum value - $scope.addEventValue = function (index) { - $scope.selectedListener.events.splice(index + 1, 0, {event: ''}); - }; - - // Click handler for - button after enum value - $scope.removeEventValue = function (index) { - $scope.selectedListener.events.splice(index, 1); - $scope.listenerDetailsChanged(); - }; - - $scope.listenerDetailsChanged = function () { - var listener = $scope.selectedListener; - if (listener.events) { - var eventText = ''; - for (var i = 0; i < listener.events.length; i++) { - if (i > 0) { - eventText += ", "; - } - eventText += listener.events[i].event; - } - $scope.selectedListener.event = eventText; - } - - if (listener.rethrowEvent) { - var implementationText = ''; - if (listener.rethrowType && listener.rethrowType.length > 0) { - if (listener.rethrowType === 'error' && listener.errorcode !== '') { - implementationText = "Rethrow as error " + listener.errorcode; - } - else if (listener.rethrowType === 'message' && listener.messagename !== '') { - implementationText = "Rethrow as message " + listener.messagename; - } - else if ((listener.rethrowType === 'signal' || listener.rethrowType === 'globalSignal') && listener.signalname !== '') { - implementationText = "Rethrow as signal " + listener.signalname; - } - } - $scope.selectedListener.implementation = implementationText; - } - else { - if ($scope.selectedListener.className !== '') { - $scope.selectedListener.implementation = $scope.selectedListener.className; - } - else if ($scope.selectedListener.delegateExpression !== '') { - $scope.selectedListener.implementation = $scope.selectedListener.delegateExpression; - } - else { - $scope.selectedListener.implementation = ''; - } - } - }; - - // Click handler for add button - $scope.addNewListener = function () { - var newListener = { - event: '', - implementation: '', - className: '', - delegateExpression: '', - retrowEvent: false - }; - - $scope.eventListeners.push(newListener); - - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newListener); - }); - }; - - // Click handler for remove button - $scope.removeListener = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.eventListeners.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.eventListeners.splice(index, 1); - - if ($scope.eventListeners.length == 0) { - $scope.selectedListener = undefined; - } - - $timeout(function () { - if ($scope.eventListeners.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.eventListeners[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveListenerUp = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.eventListeners.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.eventListeners[index]; - $scope.eventListeners.splice(index, 1); - $timeout(function () { - $scope.eventListeners.splice(index + -1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveListenerDown = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.eventListeners.indexOf(selectedItems[0]); - if (index != $scope.eventListeners.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.eventListeners[index]; - $scope.eventListeners.splice(index, 1); - $timeout(function () { - $scope.eventListeners.splice(index + 1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.eventListeners.length > 0) { - $scope.property.value = {}; - $scope.property.value.eventListeners = $scope.eventListeners; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - }]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-out-parameters-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-out-parameters-controller.js deleted file mode 100644 index 152f20d7..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-event-out-parameters-controller.js +++ /dev/null @@ -1,141 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Input parameters for call activity - */ - -angular.module('flowableModeler').controller('FlowableEventOutParametersCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/event-out-parameters-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -angular.module('flowableModeler').controller('FlowableEventOutParametersPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.outParameters !== undefined - && $scope.property.value.outParameters !== null) { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.parameters = angular.copy($scope.property.value.outParameters); - } else { - $scope.parameters = []; - } - - $scope.translationsRetrieved = false; - $scope.labels = {}; - - var eventNameLabel = $translate('PROPERTY.EVENTOUTPARAMETERS.EVENTNAME'); - var variableNameLabel = $translate('PROPERTY.EVENTOUTPARAMETERS.VARIABLENAME'); - - $q.all([eventNameLabel, variableNameLabel]).then(function (results) { - $scope.labels.eventNameLabel = results[0]; - $scope.labels.variableNameLabel = results[1]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.parameters, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [ - {field: 'eventName', displayName: $scope.labels.eventNameLabel}, - {field: 'variableName', displayName: $scope.labels.variableNameLabel}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedParameter = row.entity; - }); - }; - }); - - // Click handler for add button - $scope.addNewParameter = function () { - var newParameter = { - eventName: '', - eventType: 'string', - variableName: '' - }; - - $scope.parameters.push(newParameter); - - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newParameter); - }); - }; - - // Click handler for remove button - $scope.removeParameter = function () { - - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.parameters.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.parameters.splice(index, 1); - - if ($scope.parameters.length == 0) { - $scope.selectedParameter = undefined; - } - - $timeout(function () { - if ($scope.parameters.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.parameters[0]); - } - }); - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.parameters.length > 0) { - $scope.property.value = {}; - $scope.property.value.outParameters = $scope.parameters; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.close(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - }]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-exceptions-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-exceptions-controller.js deleted file mode 100644 index da7498e8..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-exceptions-controller.js +++ /dev/null @@ -1,184 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Task listeners - */ - -angular.module('flowableModeler').controller('FlowableExceptionsCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/exceptions-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - - -angular.module('flowableModeler').controller('FlowableExceptionsPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.exceptions !== undefined - && $scope.property.value.exceptions !== null) { - - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.exceptions = angular.copy($scope.property.value.exceptions); - - } else { - $scope.exceptions = []; - } - - $scope.translationsRetrieved = false; - $scope.labels = {}; - - var codePromise = $translate('PROPERTY.EXCEPTIONS.CODE'); - var classPromise = $translate('PROPERTY.EXCEPTIONS.CLASS'); - - $q.all([codePromise, classPromise]).then(function (results) { - $scope.labels.codeLabel = results[0]; - $scope.labels.classLabel = results[1]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.exceptions, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{field: 'code', displayName: $scope.labels.codeLabel}, - {field: 'class', displayName: $scope.labels.classLabel}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedException = row.entity; - }); - }; - }); - - $scope.exceptionDetailsChanged = function () { - if ($scope.selectedException.class != '') { - $scope.selectedException.class = $scope.selectedException.class; - } - - }; - - // Click handler for add button - $scope.addNewException = function () { - var newException = { - code: '', - class: '', - children: false - }; - - $scope.exceptions.push(newException); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newException); - }); - }; - - // Click handler for remove button - $scope.removeException = function () { - - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.exceptions.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.exceptions.splice(index, 1); - - if ($scope.exceptions.length == 0) { - $scope.selectedException = undefined; - } - - $timeout(function () { - if ($scope.exceptions.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.exceptions[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveExceptionUp = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.exceptions.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.exceptions[index]; - $scope.exceptions.splice(index, 1); - $timeout(function () { - $scope.exceptions.splice(index + -1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveExceptionDown = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.exceptions.indexOf(selectedItems[0]); - if (index != $scope.exceptions.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.exceptions[index]; - $scope.exceptions.splice(index, 1); - $timeout(function () { - $scope.exceptions.splice(index + 1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.exceptions.length > 0) { - $scope.property.value = {}; - $scope.property.value.exceptions = $scope.exceptions; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.$hide(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - }]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-execution-listeners-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-execution-listeners-controller.js deleted file mode 100644 index 3ca1310b..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-execution-listeners-controller.js +++ /dev/null @@ -1,358 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Execution listeners - */ - -angular.module('flowableModeler').controller('FlowableExecutionListenersCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/execution-listeners-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -angular.module('flowableModeler').controller('FlowableExecutionListenersPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.executionListeners !== undefined - && $scope.property.value.executionListeners !== null) { - - if ($scope.property.value.executionListeners.constructor == String) { - $scope.executionListeners = JSON.parse($scope.property.value.executionListeners); - } - else { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.executionListeners = angular.copy($scope.property.value.executionListeners); - } - - for (var i = 0; i < $scope.executionListeners.length; i++) { - var executionListener = $scope.executionListeners[i]; - if (executionListener.className !== undefined && executionListener.className !== '') { - executionListener.implementation = executionListener.className; - } - else if (executionListener.expression !== undefined && executionListener.expression !== '') { - executionListener.implementation = executionListener.expression; - } - else if (executionListener.delegateExpression !== undefined && executionListener.delegateExpression !== '') { - executionListener.implementation = executionListener.delegateExpression; - } - } - } else { - $scope.executionListeners = []; - } - - $scope.selectedListener = undefined; - $scope.selectedField = undefined; - $scope.fields = []; - $scope.translationsRetrieved = false; - - $scope.labels = {}; - - var eventPromise = $translate('PROPERTY.EXECUTIONLISTENERS.EVENT'); - var implementationPromise = $translate('PROPERTY.EXECUTIONLISTENERS.FIELDS.IMPLEMENTATION'); - var namePromise = $translate('PROPERTY.EXECUTIONLISTENERS.FIELDS.NAME'); - - $q.all([eventPromise, implementationPromise, namePromise]).then(function (results) { - $scope.labels.eventLabel = results[0]; - $scope.labels.implementationLabel = results[1]; - $scope.labels.nameLabel = results[2]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.executionListeners, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{field: 'event', displayName: $scope.labels.eventLabel}, - {field: 'implementation', displayName: $scope.labels.implementationLabel}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedListener = row.entity; - $scope.selectedField = undefined; - if ($scope.selectedListener) { - var fields = $scope.selectedListener.fields; - if (fields !== undefined && fields !== null) { - for (var i = 0; i < fields.length; i++) { - var field = fields[i]; - if (field.stringValue !== undefined && field.stringValue !== '') { - field.implementation = field.stringValue; - } else if (field.expression !== undefined && field.expression !== '') { - field.implementation = field.expression; - } else if (field.string !== undefined && field.string !== '') { - field.implementation = field.string; - } - } - } else { - $scope.selectedListener.fields = []; - } - - $scope.fields.length = 0; - for (var i = 0; i < $scope.selectedListener.fields.length; i++) { - $scope.fields.push($scope.selectedListener.fields[i]); - } - } - }); - }; - - // Config for field grid - $scope.gridFieldOptions = { - data: $scope.fields, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{field: 'name', displayName: $scope.labels.name}, - {field: 'implementation', displayName: $scope.labels.implementationLabel}] - }; - - $scope.gridFieldOptions.onRegisterApi = function (gridApi) { - // set gridApi on scope - $scope.fieldGridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedField = row.entity; - }); - }; - }); - - $scope.listenerDetailsChanged = function () { - if ($scope.selectedListener.className !== '') { - $scope.selectedListener.implementation = $scope.selectedListener.className; - } else if ($scope.selectedListener.expression !== '') { - $scope.selectedListener.implementation = $scope.selectedListener.expression; - } else if ($scope.selectedListener.delegateExpression !== '') { - $scope.selectedListener.implementation = $scope.selectedListener.delegateExpression; - } else { - $scope.selectedListener.implementation = ''; - } - }; - - // Click handler for add button - $scope.addNewListener = function () { - var newListener = { - event: 'start', - implementation: '', - className: '', - expression: '', - delegateExpression: '' - }; - $scope.executionListeners.push(newListener); - - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newListener); - }); - }; - - // Click handler for remove button - $scope.removeListener = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.executionListeners.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - - $scope.executionListeners.splice(index, 1); - - if ($scope.executionListeners.length == 0) { - $scope.selectedListener = undefined; - } - - $timeout(function () { - if ($scope.executionListeners.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.executionListeners[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveListenerUp = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.executionListeners.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.executionListeners[index]; - $scope.executionListeners.splice(index, 1); - $timeout(function () { - $scope.executionListeners.splice(index + -1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveListenerDown = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.executionListeners.indexOf(selectedItems[0]); - if (index != $scope.executionListeners.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.executionListeners[index]; - $scope.executionListeners.splice(index, 1); - $timeout(function () { - $scope.executionListeners.splice(index + 1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - $scope.fieldDetailsChanged = function () { - if ($scope.selectedField.stringValue != '') { - $scope.selectedField.implementation = $scope.selectedField.stringValue; - } else if ($scope.selectedField.expression != '') { - $scope.selectedField.implementation = $scope.selectedField.expression; - } else if ($scope.selectedField.string != '') { - $scope.selectedField.implementation = $scope.selectedField.string; - } else { - $scope.selectedField.implementation = ''; - } - }; - - // Click handler for add button - $scope.addNewField = function () { - if ($scope.selectedListener) { - if ($scope.selectedListener.fields == undefined) { - $scope.selectedListener.fields = []; - } - - var newField = { - name: 'fieldName', - implementation: '', - stringValue: '', - expression: '', - string: '' - }; - $scope.fields.push(newField); - $scope.selectedListener.fields.push(newField); - - $timeout(function () { - $scope.fieldGridApi.selection.toggleRowSelection(newField); - }); - } - }; - - // Click handler for remove button - $scope.removeField = function () { - var selectedItems = $scope.fieldGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.fields.indexOf(selectedItems[0]); - $scope.fieldGridApi.selection.toggleRowSelection(selectedItems[0]); - - $scope.fields.splice(index, 1); - $scope.selectedListener.fields.splice(index, 1); - - if ($scope.fields.length == 0) { - $scope.selectedField = undefined; - } - - $timeout(function () { - if ($scope.fields.length > 0) { - $scope.fieldGridApi.selection.toggleRowSelection($scope.fields[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveFieldUp = function () { - var selectedItems = $scope.fieldGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.fields.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.fields[index]; - $scope.fields.splice(index, 1); - $scope.selectedListener.fields.splice(index, 1); - $timeout(function () { - $scope.fields.splice(index + -1, 0, temp); - $scope.selectedListener.fields.splice(index + -1, 0, temp); - $timeout(function () { - $scope.fieldGridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveFieldDown = function () { - var selectedItems = $scope.fieldGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.fields.indexOf(selectedItems[0]); - if (index != $scope.fields.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.fields[index]; - $scope.fields.splice(index, 1); - $scope.selectedListener.fields.splice(index, 1); - $timeout(function () { - $scope.fields.splice(index + 1, 0, temp); - $scope.selectedListener.fields.splice(index + 1, 0, temp); - $timeout(function () { - $scope.fieldGridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.executionListeners.length > 0) { - $scope.property.value = {}; - $scope.property.value.executionListeners = $scope.executionListeners; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.$hide(); - $scope.property.mode = 'read'; - }; - - // Close button handler - $scope.close = function () { - $scope.$hide(); - $scope.property.mode = 'read'; - }; - - }]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-fields-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-fields-controller.js deleted file mode 100644 index 2d9445b7..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-fields-controller.js +++ /dev/null @@ -1,206 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Task listeners - */ - -angular.module('flowableModeler').controller('FlowableFieldsCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/fields-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -angular.module('flowableModeler').controller('FlowableFieldsPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.fields !== undefined - && $scope.property.value.fields !== null) { - - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.fields = angular.copy($scope.property.value.fields); - - for (var i = 0; i < $scope.fields.length; i++) { - var field = $scope.fields[i]; - if (field.stringValue !== undefined && field.stringValue !== '') { - field.implementation = field.stringValue; - } - else if (field.expression !== undefined && field.expression !== '') { - field.implementation = field.expression; - } - else if (field.string !== undefined && field.string !== '') { - field.implementation = field.string; - } - } - - } else { - $scope.fields = []; - } - - $scope.translationsRetrieved = false; - $scope.labels = {}; - - var namePromise = $translate('PROPERTY.FIELDS.NAME'); - var implementationPromise = $translate('PROPERTY.FIELDS.IMPLEMENTATION'); - - $q.all([namePromise, implementationPromise]).then(function (results) { - $scope.labels.nameLabel = results[0]; - $scope.labels.implementationLabel = results[1]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.fields, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{field: 'name', displayName: $scope.labels.nameLabel}, - {field: 'implementation', displayName: $scope.labels.implementationLabel}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedField = row.entity; - }); - }; - }); - - $scope.fieldDetailsChanged = function () { - if ($scope.selectedField.stringValue != '') { - $scope.selectedField.implementation = $scope.selectedField.stringValue; - } - else if ($scope.selectedField.expression != '') { - $scope.selectedField.implementation = $scope.selectedField.expression; - } - else if ($scope.selectedField.string != '') { - $scope.selectedField.implementation = $scope.selectedField.string; - } - else { - $scope.selectedField.implementation = ''; - } - }; - - // Click handler for add button - $scope.addNewField = function () { - var newField = { - name: 'fieldName', - implementation: '', - stringValue: '', - expression: '', - string: '' - }; - - $scope.fields.push(newField); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newField); - }); - }; - - // Click handler for remove button - $scope.removeField = function () { - - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.fields.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.fields.splice(index, 1); - - if ($scope.fields.length == 0) { - $scope.selectedField = undefined; - } - - $timeout(function () { - if ($scope.fields.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.fields[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveFieldUp = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.fields.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.fields[index]; - $scope.fields.splice(index, 1); - $timeout(function () { - $scope.fields.splice(index + -1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveFieldDown = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.fields.indexOf(selectedItems[0]); - if (index != $scope.fields.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.fields[index]; - $scope.fields.splice(index, 1); - $timeout(function () { - $scope.fields.splice(index + 1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.fields.length > 0) { - $scope.property.value = {}; - $scope.property.value.fields = $scope.fields; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.$hide(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - }]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-form-properties-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-form-properties-controller.js deleted file mode 100644 index ca8f0510..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-form-properties-controller.js +++ /dev/null @@ -1,327 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Form Properties - */ - -angular.module('flowableModeler').controller('FlowableFormPropertiesCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/form-properties-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -angular.module('flowableModeler').controller('FlowableFormPropertiesPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.formProperties !== undefined - && $scope.property.value.formProperties !== null) { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happended - $scope.formProperties = angular.copy($scope.property.value.formProperties); - - for (var i = 0; i < $scope.formProperties.length; i++) { - var formProperty = $scope.formProperties[i]; - if (formProperty.enumValues && formProperty.enumValues.length > 0) { - for (var j = 0; j < formProperty.enumValues.length; j++) { - var enumValue = formProperty.enumValues[j]; - if (!enumValue.id && !enumValue.name && enumValue.value) { - enumValue.id = enumValue.value; - enumValue.name = enumValue.value; - } - } - } - } - - } else { - $scope.formProperties = []; - } - - $scope.enumValues = []; - - $scope.translationsRetrieved = false; - - $scope.labels = {}; - - var idPromise = $translate('PROPERTY.FORMPROPERTIES.ID'); - var namePromise = $translate('PROPERTY.FORMPROPERTIES.NAME'); - var typePromise = $translate('PROPERTY.FORMPROPERTIES.TYPE'); - - $q.all([idPromise, namePromise, typePromise]).then(function (results) { - $scope.labels.idLabel = results[0]; - $scope.labels.nameLabel = results[1]; - $scope.labels.typeLabel = results[2]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.formProperties, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{field: 'id', displayName: $scope.labels.idLabel}, - {field: 'name', displayName: $scope.labels.nameLabel}, - {field: 'type', displayName: $scope.labels.typeLabel}] - }; - - $scope.enumGridOptions = { - data: $scope.enumValues, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{ field: 'id', displayName: $scope.labels.idLabel }, - { field: 'name', displayName: $scope.labels.nameLabel}] - } - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedProperty = row.entity; - $scope.selectedEnumValue = undefined; - if ($scope.selectedProperty && $scope.selectedProperty.enumValues) { - $scope.enumValues.length = 0; - for (var i = 0; i < $scope.selectedProperty.enumValues.length; i++) { - $scope.enumValues.push($scope.selectedProperty.enumValues[i]); - } - } - }); - }; - - $scope.enumGridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.enumGridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedEnumValue = row.entity; - }); - }; - }); - - // Handler for when the value of the type dropdown changes - $scope.propertyTypeChanged = function () { - - // Check date. If date, show date pattern - if ($scope.selectedProperty.type === 'date') { - $scope.selectedProperty.datePattern = 'MM-dd-yyyy hh:mm'; - } else { - delete $scope.selectedProperty.datePattern; - } - - // Check enum. If enum, show list of options - if ($scope.selectedProperty.type === 'enum') { - $scope.selectedProperty.enumValues = [ {id: 'value1', name: 'Value 1'}, {id: 'value2', name: 'Value 2'}]; - $scope.enumValues.length = 0; - for (var i = 0; i < $scope.selectedProperty.enumValues.length; i++) { - $scope.enumValues.push($scope.selectedProperty.enumValues[i]); - } - - } else { - delete $scope.selectedProperty.enumValues; - $scope.enumValues.length = 0; - } - }; - - // Click handler for add button - var propertyIndex = 1; - $scope.addNewProperty = function () { - var newProperty = { - id: 'new_property_' + propertyIndex++, - name: '', - type: 'string', - readable: true, - writable: true - }; - - $scope.formProperties.push(newProperty); - - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newProperty); - }); - }; - - // Click handler for remove button - $scope.removeProperty = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.formProperties.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.formProperties.splice(index, 1); - - if ($scope.formProperties.length == 0) { - $scope.selectedProperty = undefined; - } - - $timeout(function() { - if ($scope.formProperties.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.formProperties[0]); - } - }); - } - }; - - // Click handler for up button - $scope.movePropertyUp = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.formProperties.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.formProperties[index]; - $scope.formProperties.splice(index, 1); - $timeout(function(){ - $scope.formProperties.splice(index + -1, 0, temp); - $timeout(function() { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.movePropertyDown = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.formProperties.indexOf(selectedItems[0]); - if (index != $scope.formProperties.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.formProperties[index]; - $scope.formProperties.splice(index, 1); - $timeout(function(){ - $scope.formProperties.splice(index + 1, 0, temp); - $timeout(function() { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - $scope.addNewEnumValue = function() { - if ($scope.selectedProperty) { - var newEnumValue = { id : '', name : ''}; - $scope.selectedProperty.enumValues.push(newEnumValue); - $scope.enumValues.push(newEnumValue); - - $timeout(function () { - $scope.enumGridApi.selection.toggleRowSelection(newEnumValue); - }); - } - }; - - // Click handler for remove button - $scope.removeEnumValue = function() { - var selectedItems = $scope.enumGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.enumValues.indexOf(selectedItems[0]); - $scope.enumGridApi.selection.toggleRowSelection(selectedItems[0]); - - $scope.enumValues.splice(index, 1); - $scope.selectedProperty.enumValues.splice(index, 1); - - if ($scope.enumValues.length == 0) { - $scope.selectedEnumValue = undefined; - } - - $timeout(function () { - if ($scope.enumValues.length > 0) { - $scope.enumGridApi.selection.toggleRowSelection($scope.enumValues[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveEnumValueUp = function() { - var selectedItems = $scope.enumGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.enumValues.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.enumValues[index]; - $scope.enumValues.splice(index, 1); - $scope.selectedProperty.enumValues.splice(index, 1); - $timeout(function () { - $scope.enumValues.splice(index + -1, 0, temp); - $scope.selectedProperty.enumValues.splice(index + -1, 0, temp); - $timeout(function () { - $scope.enumGridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveEnumValueDown = function() { - var selectedItems = $scope.enumGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.enumValues.indexOf(selectedItems[0]); - if (index != $scope.enumValues.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.enumValues[index]; - $scope.enumValues.splice(index, 1); - $scope.selectedProperty.enumValues.splice(index, 1); - $timeout(function () { - $scope.enumValues.splice(index + 1, 0, temp); - $scope.selectedProperty.enumValues.splice(index + 1, 0, temp); - $timeout(function () { - $scope.enumGridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.formProperties.length > 0) { - $scope.property.value = {}; - $scope.property.value.formProperties = $scope.formProperties; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.$hide(); - $scope.property.mode = 'read'; - }; - - // Close button handler - $scope.close = function () { - $scope.$hide(); - $scope.property.mode = 'read'; - }; - - }]) -; \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-form-reference-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-form-reference-controller.js deleted file mode 100644 index a710bcea..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-form-reference-controller.js +++ /dev/null @@ -1,261 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableFormReferenceDisplayCtrl', - [ '$scope', '$modal', '$http', function($scope, $modal, $http) { - - if ($scope.property && $scope.property.value && $scope.property.value.id) { - $http.get(FLOWABLE.APP_URL.getModelUrl($scope.property.value.id)) - .success( - function(response) { - $scope.form = { - id: response.id, - name: response.name - }; - }); - } - -}]); - -angular.module('flowableModeler').controller('FlowableFormReferenceCtrl', - [ '$scope', '$modal', '$http', function($scope, $modal, $http) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/form-reference-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); -}]); - -angular.module('flowableModeler').controller('FlowableFormReferencePopupCtrl', - [ '$rootScope', '$scope', '$http', '$location', 'editorManager', function($rootScope, $scope, $http, $location, editorManager) { - - $scope.state = {'loadingForms' : true, 'formError' : false}; - - $scope.popup = {'state' : 'formReference'}; - - $scope.foldersBreadCrumbs = []; - - // Close button handler - $scope.close = function() { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - // Selecting/deselecting a subprocess - $scope.selectForm = function(form, $event) { - $event.stopPropagation(); - if ($scope.selectedForm && $scope.selectedForm.id && form.id == $scope.selectedForm.id) { - // un-select the current selection - $scope.selectedForm = null; - } else { - $scope.selectedForm = form; - } - }; - - // Saving the selected value - $scope.save = function() { - if ($scope.selectedForm) { - $scope.property.value = { - 'id' : $scope.selectedForm.id, - 'name' : $scope.selectedForm.name, - 'key' : $scope.selectedForm.key - }; - - } else { - $scope.property.value = null; - } - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - // Open the selected value - $scope.open = function() { - if ($scope.selectedForm) { - $scope.property.value = { - 'id' : $scope.selectedForm.id, - 'name' : $scope.selectedForm.name, - 'key' : $scope.selectedForm.key - }; - - $scope.updatePropertyInModel($scope.property); - - var modelMetaData = editorManager.getBaseModelData(); - var json = editorManager.getModel(); - json = JSON.stringify(json); - - var params = { - modeltype: modelMetaData.model.modelType, - json_xml: json, - name: modelMetaData.name, - key: modelMetaData.key, - description: modelMetaData.description, - newversion: false, - lastUpdated: modelMetaData.lastUpdated - }; - - // Update - $http({ method: 'POST', - data: params, - ignoreErrors: true, - headers: {'Accept': 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, - transformRequest: function (obj) { - var str = []; - for (var p in obj) { - str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); - } - return str.join("&"); - }, - url: FLOWABLE.URL.putModel(modelMetaData.modelId)}) - - .success(function (data, status, headers, config) { - editorManager.handleEvents({ - type: ORYX.CONFIG.EVENT_SAVED - }); - - var allSteps = EDITOR.UTIL.collectSortedElementsFromPrecedingElements($scope.selectedShape); - - $rootScope.addHistoryItem($scope.selectedShape.resourceId); - $location.path('form-editor/' + $scope.selectedForm.id); - - }) - .error(function (data, status, headers, config) { - - }); - - $scope.close(); - } - }; - - $scope.newForm = function() { - $scope.popup.state = 'newForm'; - - var modelMetaData = editorManager.getBaseModelData(); - - $scope.model = { - loading: false, - form: { - name: '', - key: '', - description: '', - modelType: 2 - } - }; - }; - - $scope.createForm = function() { - - if (!$scope.model.form.name || $scope.model.form.name.length == 0 || - !$scope.model.form.key || $scope.model.form.key.length == 0) { - - return; - } - - $scope.model.loading = true; - - $http({method: 'POST', url: FLOWABLE.APP_URL.getModelsUrl(), data: $scope.model.form}). - success(function(data, status, headers, config) { - - var newFormId = data.id; - $scope.property.value = { - 'id' : newFormId, - 'name' : data.name, - 'key' : data.key - }; - $scope.updatePropertyInModel($scope.property); - - var modelMetaData = editorManager.getBaseModelData(); - var json = editorManager.getModel(); - json = JSON.stringify(json); - - var params = { - modeltype: modelMetaData.model.modelType, - json_xml: json, - name: modelMetaData.name, - key: modelMetaData.key, - description: modelMetaData.description, - newversion: false, - lastUpdated: modelMetaData.lastUpdated - }; - - // Update - $http({ method: 'POST', - data: params, - ignoreErrors: true, - headers: {'Accept': 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, - transformRequest: function (obj) { - var str = []; - for (var p in obj) { - str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); - } - return str.join("&"); - }, - url: FLOWABLE.URL.putModel(modelMetaData.modelId)}) - - .success(function (data, status, headers, config) { - editorManager.handleEvents({ - type: ORYX.CONFIG.EVENT_SAVED - }); - - $scope.model.loading = false; - $scope.$hide(); - - var allSteps = EDITOR.UTIL.collectSortedElementsFromPrecedingElements($scope.selectedShape); - - $rootScope.addHistoryItem($scope.selectedShape.resourceId); - $location.path('form-editor/' + newFormId); - - }) - .error(function (data, status, headers, config) { - $scope.model.loading = false; - $scope.$hide(); - }); - - }). - error(function(data, status, headers, config) { - $scope.model.loading = false; - $scope.model.errorMessage = data.message; - }); - }; - - $scope.cancel = function() { - $scope.close(); - }; - - $scope.loadForms = function() { - var modelMetaData = editorManager.getBaseModelData(); - $http.get(FLOWABLE.APP_URL.getFormModelsUrl()) - .success( - function(response) { - $scope.state.loadingForms = false; - $scope.state.formError = false; - $scope.forms = response.data; - }) - .error( - function(data, status, headers, config) { - $scope.state.loadingForms = false; - $scope.state.formError = true; - }); - }; - - if ($scope.property && $scope.property.value && $scope.property.value.id) { - $scope.selectedForm = $scope.property.value; - } - - $scope.loadForms(); -}]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-httprequest-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-httprequest-controller.js deleted file mode 100644 index c384e62c..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-httprequest-controller.js +++ /dev/null @@ -1,24 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableHttpRequestMethodCtrl', [ '$scope', function($scope) { - - if ($scope.property.value == undefined && $scope.property.value == null) - { - $scope.property.value = 'GET'; - } - - $scope.httpRequestMethodChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-in-parameters-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-in-parameters-controller.js deleted file mode 100644 index 37a0d053..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-in-parameters-controller.js +++ /dev/null @@ -1,184 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Input parameters for call activity - */ - -angular.module('flowableModeler').controller('FlowableInParametersCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/in-parameters-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -angular.module('flowableModeler').controller('FlowableInParametersPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.inParameters !== undefined - && $scope.property.value.inParameters !== null) { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.parameters = angular.copy($scope.property.value.inParameters); - } else { - $scope.parameters = []; - } - - $scope.translationsRetrieved = false; - $scope.labels = {}; - - var sourcePromise = $translate('PROPERTY.PARAMETER.SOURCE'); - var sourceExpressionPromise = $translate('PROPERTY.PARAMETER.SOURCEEXPRESSION'); - var targetPromise = $translate('PROPERTY.PARAMETER.TARGET'); - var targetExpressionPromise = $translate('PROPERTY.PARAMETER.TARGETEXPRESSION'); - - $q.all([sourcePromise, sourceExpressionPromise, targetPromise, targetExpressionPromise]).then(function (results) { - $scope.labels.sourceLabel = results[0]; - $scope.labels.sourceExpressionLabel = results[1]; - $scope.labels.targetLabel = results[2]; - $scope.labels.targetExpressionLabel = results[3]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.parameters, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [ - {field: 'source', displayName: $scope.labels.sourceLabel}, - {field: 'sourceExpression', displayName: $scope.labels.sourceExpressionLabel}, - {field: 'target', displayName: $scope.labels.targetLabel}, - {field: 'targetExpression', displayName: $scope.labels.targetExpressionLabel}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedParameter = row.entity; - }); - }; - }); - - // Click handler for add button - $scope.addNewParameter = function () { - var newParameter = { - source: '', - sourceExpression: '', - target: '', - targetExpression: '' - }; - - $scope.parameters.push(newParameter); - - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newParameter); - }); - }; - - // Click handler for remove button - $scope.removeParameter = function () { - - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.parameters.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.parameters.splice(index, 1); - - if ($scope.parameters.length == 0) { - $scope.selectedParameter = undefined; - } - - $timeout(function () { - if ($scope.parameters.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.parameters[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveParameterUp = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.parameters.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.parameters[index]; - $scope.parameters.splice(index, 1); - $timeout(function () { - $scope.parameters.splice(index + -1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveParameterDown = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.parameters.indexOf(selectedItems[0]); - if (index != $scope.parameters.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.parameters[index]; - $scope.parameters.splice(index, 1); - $timeout(function () { - $scope.parameters.splice(index + 1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.parameters.length > 0) { - $scope.property.value = {}; - $scope.property.value.inParameters = $scope.parameters; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.close(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - }]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-message-definitions-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-message-definitions-controller.js deleted file mode 100644 index 7a803387..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-message-definitions-controller.js +++ /dev/null @@ -1,145 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Execution listeners - */ - -angular.module('flowableModeler').controller('FlowableMessageDefinitionsCtrl', ['$scope', '$modal', function ($scope, $modal) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/message-definitions-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); -}]); - -//Need a separate controller for the modal window due to https://github.com/angular-ui/bootstrap/issues/259 -// Will be fixed in a newer version of Angular UI -angular.module('flowableModeler').controller('FlowableMessageDefinitionsPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing mesage definitions on scope - if ($scope.property.value !== undefined && $scope.property.value !== null && $scope.property.value.length > 0) { - - if ($scope.property.value.constructor == String) { - $scope.messageDefinitions = JSON.parse($scope.property.value); - } - else { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.messageDefinitions = angular.copy($scope.property.value); - } - - } else { - $scope.messageDefinitions = []; - } - - // Array to contain selected mesage definitions (yes - we only can select one, but ng-grid isn't smart enough) - $scope.selectedMessageDefinition = undefined; - $scope.translationsRetrieved = false; - - $scope.labels = {}; - - var idPromise = $translate('PROPERTY.MESSAGEDEFINITIONS.ID'); - var namePromise = $translate('PROPERTY.MESSAGEDEFINITIONS.NAME'); - - $q.all([idPromise, namePromise]).then(function (results) { - - $scope.labels.idLabel = results[0]; - $scope.labels.nameLabel = results[1]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.messageDefinitions, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [ - {field: 'id', displayName: $scope.labels.idLabel}, - {field: 'name', displayName: $scope.labels.nameLabel}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedMessageDefinition = row.entity; - }); - }; - }); - - // Click handler for add button - $scope.addNewMessageDefinition = function () { - var newMessageDefinition = {id: '', name: ''}; - - $scope.messageDefinitions.push(newMessageDefinition); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newMessageDefinition); - }); - }; - - // Click handler for remove button - $scope.removeMessageDefinition = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.messageDefinitions.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.messageDefinitions.splice(index, 1); - - if ($scope.messageDefinitions.length == 0) { - $scope.selectedMesageDefinition = undefined; - } - - $timeout(function () { - if ($scope.messageDefinitions.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.messageDefinitions[0]); - } - }); - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.messageDefinitions.length > 0) { - $scope.property.value = $scope.messageDefinitions; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - }]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-message-scope-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-message-scope-controller.js deleted file mode 100644 index 91f690b0..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-message-scope-controller.js +++ /dev/null @@ -1,41 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -angular.module('flowableModeler').controller('FlowableMessageRefCtrl', [ '$scope', function($scope) { - - // Find the parent shape on which the message definitions are defined - var messageDefinitionsProperty = undefined; - var parent = $scope.selectedShape; - while (parent !== null && parent !== undefined && messageDefinitionsProperty === undefined) { - if (parent.properties && parent.properties.get('oryx-messagedefinitions')) { - messageDefinitionsProperty = parent.properties.get('oryx-messagedefinitions'); - } else { - parent = parent.parent; - } - } - - try { - messageDefinitionsProperty = JSON.parse(messageDefinitionsProperty); - if (typeof messageDefinitionsProperty == 'string') { - messageDefinitionsProperty = JSON.parse(messageDefinitionsProperty); - } - } catch (err) { - // Do nothing here, just to be sure we try-catch it - } - - $scope.messageDefinitions = messageDefinitionsProperty; - - - $scope.messageChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-multiinstance-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-multiinstance-controller.js deleted file mode 100644 index 6d90a4e9..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-multiinstance-controller.js +++ /dev/null @@ -1,24 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableMultiInstanceCtrl', [ '$scope', function($scope) { - - if ($scope.property.value == undefined && $scope.property.value == null) - { - $scope.property.value = 'None'; - } - - $scope.multiInstanceChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-ordering-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-ordering-controller.js deleted file mode 100644 index 241dfc72..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-ordering-controller.js +++ /dev/null @@ -1,28 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Adhoc sub process ordering property - */ - -angular.module('flowableModeler').controller('FlowableOrderingCtrl', [ '$scope', function($scope) { - - if ($scope.property.value == undefined && $scope.property.value == null) - { - $scope.property.value = 'Parallel'; - } - - $scope.orderingChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-out-parameters-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-out-parameters-controller.js deleted file mode 100644 index b7b10abc..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-out-parameters-controller.js +++ /dev/null @@ -1,180 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Input parameters for call activity - */ - -angular.module('flowableModeler').controller('FlowableOutParametersCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/out-parameters-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -angular.module('flowableModeler').controller('FlowableOutParametersPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.outParameters !== undefined - && $scope.property.value.outParameters !== null) { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.parameters = angular.copy($scope.property.value.outParameters); - } else { - $scope.parameters = []; - } - - $scope.translationsRetrieved = false; - $scope.labels = {}; - - var sourcePromise = $translate('PROPERTY.PARAMETER.SOURCE'); - var sourceExpressionPromise = $translate('PROPERTY.PARAMETER.SOURCEEXPRESSION'); - var targetPromise = $translate('PROPERTY.PARAMETER.TARGET'); - var targetExpressionPromise = $translate('PROPERTY.PARAMETER.TARGETEXPRESSION'); - - $q.all([sourcePromise, sourceExpressionPromise, targetPromise, targetExpressionPromise]).then(function (results) { - $scope.labels.sourceLabel = results[0]; - $scope.labels.sourceExpressionLabel = results[1]; - $scope.labels.targetLabel = results[2]; - $scope.labels.targetExpressionLabel = results[3]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.parameters, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{field: 'source', displayName: $scope.labels.sourceLabel}, - {field: 'sourceExpression', displayName: $scope.labels.sourceExpressionLabel}, - {field: 'target', displayName: $scope.labels.targetLabel}, - {field: 'targetExpression', displayName: $scope.labels.targetExpressionLabel}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedParameter = row.entity; - }); - }; - }); - - // Click handler for add button - $scope.addNewParameter = function () { - var newParameter = { - source: '', - sourceExpression: '', - target: '', - targetExpression: ''}; - - $scope.parameters.push(newParameter); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newParameter); - }); - }; - - // Click handler for remove button - $scope.removeParameter = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.parameters.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.parameters.splice(index, 1); - - if ($scope.parameters.length == 0) { - $scope.selectedParameter = undefined; - } - - $timeout(function () { - if ($scope.parameters.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.parameters[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveParameterUp = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.parameters.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.parameters[index]; - $scope.parameters.splice(index, 1); - $timeout(function () { - $scope.parameters.splice(index + -1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveParameterDown = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.parameters.indexOf(selectedItems[0]); - if (index != $scope.parameters.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.parameters[index]; - $scope.parameters.splice(index, 1); - $timeout(function () { - $scope.parameters.splice(index + 1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.parameters.length > 0) { - $scope.property.value = {}; - $scope.property.value.outParameters = $scope.parameters; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.close(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - }]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-plan-item-lifecycle-listeners-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-plan-item-lifecycle-listeners-controller.js deleted file mode 100644 index 0ae0e0a8..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-plan-item-lifecycle-listeners-controller.js +++ /dev/null @@ -1,357 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -angular.module('flowableModeler').controller('FlowablePlanItemLifecycleListenersCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/plan-item-lifecycle-listeners-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -angular.module('flowableModeler').controller('FlowablePlanItemLifecycleListenersPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.planItemLifecycleListeners !== undefined - && $scope.property.value.planItemLifecycleListeners !== null) { - - if ($scope.property.value.planItemLifecycleListeners.constructor == String) { - $scope.planItemLifecycleListeners = JSON.parse($scope.property.value.planItemLifecycleListeners); - } - else { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.planItemLifecycleListeners = angular.copy($scope.property.value.planItemLifecycleListeners); - } - - for (var i = 0; i < $scope.planItemLifecycleListeners.length; i++) { - var planItemLifeCycleListener = $scope.planItemLifecycleListeners[i]; - if (planItemLifeCycleListener.className !== undefined && planItemLifeCycleListener.className !== '') { - planItemLifeCycleListener.implementation = planItemLifeCycleListener.className; - } - else if (planItemLifeCycleListener.expression !== undefined && planItemLifeCycleListener.expression !== '') { - planItemLifeCycleListener.implementation = planItemLifeCycleListener.expression; - } - else if (planItemLifeCycleListener.delegateExpression !== undefined && planItemLifeCycleListener.delegateExpression !== '') { - planItemLifeCycleListener.implementation = planItemLifeCycleListener.delegateExpression; - } - } - } else { - $scope.planItemLifecycleListeners = []; - } - - $scope.selectedListener = undefined; - $scope.selectedField = undefined; - $scope.fields = []; - $scope.translationsRetrieved = false; - - $scope.labels = {}; - - var sourceStatePromise = $translate('PROPERTY.PLANITEMLIFECYCLELISTENERS.SOURCE_STATE'); - var targetStatePromise = $translate('PROPERTY.PLANITEMLIFECYCLELISTENERS.TARGET_STATE'); - var implementationPromise = $translate('PROPERTY.PLANITEMLIFECYCLELISTENERS.FIELDS.IMPLEMENTATION'); - var namePromise = $translate('PROPERTY.PLANITEMLIFECYCLELISTENERS.FIELDS.NAME'); - - $q.all([sourceStatePromise, targetStatePromise, implementationPromise, namePromise]).then(function (results) { - $scope.labels.sourceStateLabel = results[1]; - $scope.labels.targetStateLabel = results[2]; - $scope.labels.implementationLabel = results[3]; - $scope.labels.nameLabel = results[4]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.planItemLifecycleListeners, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [ - {field: 'sourceState', displayName: $scope.labels.sourceStateLabel}, - {field: 'targetState', displayName: $scope.labels.targetStateLabel}, - {field: 'implementation', displayName: $scope.labels.implementationLabel} - ] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedListener = row.entity; - $scope.selectedField = undefined; - if ($scope.selectedListener) { - var fields = $scope.selectedListener.fields; - if (fields !== undefined && fields !== null) { - for (var i = 0; i < fields.length; i++) { - var field = fields[i]; - if (field.stringValue !== undefined && field.stringValue !== '') { - field.implementation = field.stringValue; - } else if (field.expression !== undefined && field.expression !== '') { - field.implementation = field.expression; - } else if (field.string !== undefined && field.string !== '') { - field.implementation = field.string; - } - } - } else { - $scope.selectedListener.fields = []; - } - - $scope.fields.length = 0; - for (var i = 0; i < $scope.selectedListener.fields.length; i++) { - $scope.fields.push($scope.selectedListener.fields[i]); - } - } - }); - }; - - // Config for field grid - $scope.gridFieldOptions = { - data: $scope.fields, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - columnDefs: [{field: 'name', displayName: $scope.labels.name}, - {field: 'implementation', displayName: $scope.labels.implementationLabel}] - }; - - $scope.gridFieldOptions.onRegisterApi = function (gridApi) { - // set gridApi on scope - $scope.fieldGridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedField = row.entity; - }); - }; - }); - - $scope.listenerDetailsChanged = function () { - if ($scope.selectedListener.className !== '') { - $scope.selectedListener.implementation = $scope.selectedListener.className; - } else if ($scope.selectedListener.expression !== '') { - $scope.selectedListener.implementation = $scope.selectedListener.expression; - } else if ($scope.selectedListener.delegateExpression !== '') { - $scope.selectedListener.implementation = $scope.selectedListener.delegateExpression; - } else { - $scope.selectedListener.implementation = ''; - } - }; - - // Click handler for add button - $scope.addNewListener = function () { - var newListener = { - sourceState: 'available', - targetState: 'active', - implementation: '', - className: '', - expression: '', - delegateExpression: '' - }; - $scope.planItemLifecycleListeners.push(newListener); - - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newListener); - }); - }; - - // Click handler for remove button - $scope.removeListener = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.planItemLifecycleListeners.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - - $scope.planItemLifecycleListeners.splice(index, 1); - - if ($scope.planItemLifecycleListeners.length == 0) { - $scope.selectedListener = undefined; - } - - $timeout(function () { - if ($scope.planItemLifecycleListeners.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.planItemLifecycleListeners[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveListenerUp = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.planItemLifecycleListeners.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.planItemLifecycleListeners[index]; - $scope.planItemLifecycleListeners.splice(index, 1); - $timeout(function () { - $scope.planItemLifecycleListeners.splice(index + -1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveListenerDown = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.planItemLifecycleListeners.indexOf(selectedItems[0]); - if (index != $scope.planItemLifecycleListeners.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.planItemLifecycleListeners[index]; - $scope.planItemLifecycleListeners.splice(index, 1); - $timeout(function () { - $scope.planItemLifecycleListeners.splice(index + 1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - - } - } - }; - - $scope.fieldDetailsChanged = function () { - if ($scope.selectedField.stringValue != '') { - $scope.selectedField.implementation = $scope.selectedField.stringValue; - } else if ($scope.selectedField.expression != '') { - $scope.selectedField.implementation = $scope.selectedField.expression; - } else if ($scope.selectedField.string != '') { - $scope.selectedField.implementation = $scope.selectedField.string; - } else { - $scope.selectedField.implementation = ''; - } - }; - - // Click handler for add button - $scope.addNewField = function () { - if ($scope.selectedListener) { - if ($scope.selectedListener.fields == undefined) { - $scope.selectedListener.fields = []; - } - - var newField = { - name: 'fieldName', - implementation: '', - stringValue: '', - expression: '', - string: '' - }; - $scope.fields.push(newField); - $scope.selectedListener.fields.push(newField); - - $timeout(function () { - $scope.fieldGridApi.selection.toggleRowSelection(newField); - }); - } - }; - - // Click handler for remove button - $scope.removeField = function () { - var selectedItems = $scope.fieldGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.fields.indexOf(selectedItems[0]); - $scope.fieldGridApi.selection.toggleRowSelection(selectedItems[0]); - - $scope.fields.splice(index, 1); - $scope.selectedListener.fields.splice(index, 1); - - if ($scope.fields.length == 0) { - $scope.selectedField = undefined; - } - - $timeout(function () { - if ($scope.fields.length > 0) { - $scope.fieldGridApi.selection.toggleRowSelection($scope.fields[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveFieldUp = function () { - var selectedItems = $scope.fieldGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.fields.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.fields[index]; - $scope.fields.splice(index, 1); - $scope.selectedListener.fields.splice(index, 1); - $timeout(function () { - $scope.fields.splice(index + -1, 0, temp); - $scope.selectedListener.fields.splice(index + -1, 0, temp); - $timeout(function () { - $scope.fieldGridApi.selection.toggleRowSelection(temp); - }); - }); - - } - } - }; - - // Click handler for down button - $scope.moveFieldDown = function () { - var selectedItems = $scope.fieldGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.fields.indexOf(selectedItems[0]); - if (index != $scope.fields.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.fields[index]; - $scope.fields.splice(index, 1); - $scope.selectedListeners.fields.splice(index, 1); - $timeout(function () { - $scope.fields.splice(index + 1, 0, temp); - $scope.selectedListener.fields.splice(index + 1, 0, temp); - $timeout(function () { - $scope.fieldGridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.planItemLifecycleListeners.length > 0) { - $scope.property.value = {}; - $scope.property.value.planItemLifecycleListeners = $scope.planItemLifecycleListeners; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.close(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - }]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-planitem-dropdown-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-planitem-dropdown-controller.js deleted file mode 100644 index ad2bdb51..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-planitem-dropdown-controller.js +++ /dev/null @@ -1,82 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowablePlanItemDropdownCtrl', [ '$scope', function($scope) { - - // Find all planitems - var selectedShape = $scope.selectedShape; - if (selectedShape) { - - // Go up in parent chain until plan model is found - var planModel; - var parent = selectedShape.parent; - if (parent) { - while (planModel === undefined && parent !== null && parent !== undefined) { - if (parent.resourceId !== null && parent.resourceId !== undefined && 'casePlanModel' === parent.resourceId) { - planModel = parent; - } else { - parent = parent.parent; - } - } - } - - var planItems = []; - if (planModel !== null && planModel !== undefined) { - - var toVisit = []; - for (var i=0; i 0) { - var child = toVisit.pop(); - if (typeof child.getStencil === 'function' - && (child.getStencil()._jsonStencil.groups.indexOf('Activities') >= 0 || (child.getStencil()._jsonStencil.title === 'Stage') )) { - planItems.push(child); - } - if (child.children !== null && child.children !== undefined) { - for (var i=0; i 0) { - simplifiedPlanItems.sort(function(a,b) { - if(a.name < b.name) { - return -1; - } else if (a.name > b.name) { - return 1; - } else { - return 0; - } - }); - } - $scope.planItems = simplifiedPlanItems; - - } - - if ($scope.property.value == undefined && $scope.property.value == null) { - $scope.property.value = ''; - } - - $scope.planItemChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-process-historylevel-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-process-historylevel-controller.js deleted file mode 100644 index cc5bda78..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-process-historylevel-controller.js +++ /dev/null @@ -1,24 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableProcessHistoryLevelCtrl', [ '$scope', function($scope) { - - if ($scope.property.value == undefined && $scope.property.value == null) - { - $scope.property.value = 'None'; - } - - $scope.historyLevelChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-process-reference-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-process-reference-controller.js deleted file mode 100644 index 5dff88fc..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-process-reference-controller.js +++ /dev/null @@ -1,86 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableProcessReferenceCtrl', - [ '$scope', '$modal', '$http', function($scope, $modal, $http) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/process-reference-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); -}]); - -angular.module('flowableModeler').controller('FlowableProcessReferencePopupCtrl', [ '$scope', '$http', '$location', function($scope, $http, $location) { - - $scope.state = {'loadingProcesses' : true, 'error' : false}; - - // Close button handler - $scope.close = function() { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - // Selecting/deselecting a process - $scope.selectProcess = function(processModel, $event) { - $event.stopPropagation(); - if ($scope.selectedProcess && $scope.selectedProcess.id && processModel.id == $scope.selectedProcess.id) { - // un-select the current selection - $scope.selectedProcess = null; - } else { - $scope.selectedProcess = processModel; - } - }; - - $scope.open = function() { - if ($scope.selectedProcess) { - $location.path("/editor/" + $scope.selectedProcess.id); - } - }; - - // Saving the selected value - $scope.save = function() { - if ($scope.selectedProcess) { - $scope.property.value = {'id' : $scope.selectedProcess.id, 'name' : $scope.selectedProcess.name, 'key': $scope.selectedProcess.key}; - } else { - $scope.property.value = null; - } - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.loadProcesses = function() { - - $http.get(FLOWABLE.APP_URL.getModelsUrl("?modelType=0")) - .success( - function(response) { - $scope.state.loadingProcesses = false; - $scope.state.processError = false; - $scope.processModels = response.data; - }) - .error( - function(data, status, headers, config) { - $scope.state.loadingProcesses = false; - $scope.state.processError = true; - }); - }; - - if ($scope.property && $scope.property.value && $scope.property.value.id) { - $scope.selectedProcess = $scope.property.value; - } - - $scope.loadProcesses(); -}]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-sequenceflow-order-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-sequenceflow-order-controller.js deleted file mode 100644 index a37c8c46..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-sequenceflow-order-controller.js +++ /dev/null @@ -1,126 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Sequence flow order controller - */ - -angular.module('flowableModeler').controller('FlowableSequenceFlowOrderCtrl', - [ '$scope', '$modal', '$timeout', '$translate', function($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/sequenceflow-order-popup.html?version=' + Date.now(), - scope: $scope - }; - - _internalCreateModal(opts, $modal, $scope); -}]); - -angular.module('flowableModeler').controller('FlowableSequenceFlowOrderPopupCtrl', - ['$scope', '$translate', function($scope, $translate) { - - // Find the outgoing sequence flow of the current selected shape - var outgoingSequenceFlow = []; - var selectedShape = $scope.selectedShape; - if (selectedShape) { - var outgoingNodes = selectedShape.getOutgoingShapes(); - for (var i=0; i 0) { - $scope.property.value = {}; - $scope.property.value.sequenceFlowOrder = []; - - for (var flowIndex=0; flowIndex < $scope.outgoingSequenceFlow.length; flowIndex++) { - $scope.property.value.sequenceFlowOrder.push($scope.outgoingSequenceFlow[flowIndex].id); - } - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - // Cancel click handler - $scope.cancel = function() { - $scope.close(); - }; - - // Close button handler - $scope.close = function() { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-signal-definitions-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-signal-definitions-controller.js deleted file mode 100644 index 63320ff6..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-signal-definitions-controller.js +++ /dev/null @@ -1,151 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Execution listeners - */ - -angular.module('flowableModeler').controller('FlowableSignalDefinitionsCtrl', ['$scope', '$modal', function ($scope, $modal) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/signal-definitions-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); -}]); - -//Need a separate controller for the modal window due to https://github.com/angular-ui/bootstrap/issues/259 -// Will be fixed in a newer version of Angular UI -angular.module('flowableModeler').controller('FlowableSignalDefinitionsPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing signal definitions on scope - if ($scope.property.value !== undefined && $scope.property.value !== null && $scope.property.value.length > 0) { - - if ($scope.property.value.constructor == String) { - $scope.signalDefinitions = JSON.parse($scope.property.value); - } - else { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.signalDefinitions = angular.copy($scope.property.value); - } - - } else { - $scope.signalDefinitions = []; - } - - // Array to contain selected signal definitions (yes - we only can select one, but ng-grid isn't smart enough) - $scope.selectedSignalDefinition = undefined; - $scope.translationsRetrieved = false; - - $scope.labels = {}; - - var idPromise = $translate('PROPERTY.SIGNALDEFINITIONS.ID'); - var namePromise = $translate('PROPERTY.SIGNALDEFINITIONS.NAME'); - var scopePromise = $translate('PROPERTY.SIGNALDEFINITIONS.SCOPE'); - - $q.all([idPromise, namePromise, scopePromise]).then(function (results) { - - $scope.labels.idLabel = results[0]; - $scope.labels.nameLabel = results[1]; - $scope.labels.scopeLabel = results[2]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.signalDefinitions, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [ - {field: 'id', displayName: $scope.labels.idLabel}, - {field: 'name', displayName: $scope.labels.nameLabel}, - {field: 'scope', displayName: $scope.labels.scopeLabel}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedSignalDefinition = row.entity; - }); - }; - }); - - // Click handler for add button - $scope.addNewSignalDefinition = function () { - var newSignalDefinition = {id: '', name: '', scope: 'global'}; - - $scope.signalDefinitions.push(newSignalDefinition); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newSignalDefinition); - }); - }; - - // Click handler for remove button - $scope.removeSignalDefinition = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.signalDefinitions.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.signalDefinitions.splice(index, 1); - - if ($scope.signalDefinitions.length == 0) { - $scope.selectedSignalDefinition = undefined; - } - - $timeout(function () { - if ($scope.signalDefinitions.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.signalDefinitions[0]); - } - }); - } - }; - - $scope.scopeOptions = [{'value': 'global', 'translationId': 'PROPERTY.SIGNALDEFINITIONS.SCOPE-GLOBAL'}, - {'value': 'processInstance', 'translationId': 'PROPERTY.SIGNALDEFINITIONS.SCOPE-PROCESSINSTANCE'}]; - - // Click handler for save button - $scope.save = function () { - - if ($scope.signalDefinitions.length > 0) { - $scope.property.value = $scope.signalDefinitions; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - }]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-signal-scope-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-signal-scope-controller.js deleted file mode 100644 index c1619914..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-signal-scope-controller.js +++ /dev/null @@ -1,42 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableSignalRefCtrl', [ '$scope', function($scope) { - - // Find the parent shape on which the signal definitions are defined - var signalDefinitionsProperty = undefined; - var parent = $scope.selectedShape; - while (parent !== null && parent !== undefined && signalDefinitionsProperty === undefined) { - if (parent.properties && parent.properties.get('oryx-signaldefinitions')) { - signalDefinitionsProperty = parent.properties.get('oryx-signaldefinitions'); - } else { - parent = parent.parent; - } - } - - try { - signalDefinitionsProperty = JSON.parse(signalDefinitionsProperty); - if (typeof signalDefinitionsProperty == 'string') { - signalDefinitionsProperty = JSON.parse(signalDefinitionsProperty); - } - } catch (err) { - // Do nothing here, just to be sure we try-catch it - } - - $scope.signalDefinitions = signalDefinitionsProperty; - - - $scope.signalChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-task-listeners-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-task-listeners-controller.js deleted file mode 100644 index 1c5717da..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-task-listeners-controller.js +++ /dev/null @@ -1,356 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Task listeners - */ - -angular.module('flowableModeler').controller('FlowableTaskListenersCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/task-listeners-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -angular.module('flowableModeler').controller('FlowableTaskListenersPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.taskListeners !== undefined - && $scope.property.value.taskListeners !== null) { - - if ($scope.property.value.taskListeners.constructor == String) { - $scope.taskListeners = JSON.parse($scope.property.value.taskListeners); - } - else { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.taskListeners = angular.copy($scope.property.value.taskListeners); - } - - for (var i = 0; i < $scope.taskListeners.length; i++) { - var taskListener = $scope.taskListeners[i]; - if (taskListener.className !== undefined && taskListener.className !== '') { - taskListener.implementation = taskListener.className; - } - else if (taskListener.expression !== undefined && taskListener.expression !== '') { - taskListener.implementation = taskListener.expression; - } - else if (taskListener.delegateExpression !== undefined && taskListener.delegateExpression !== '') { - taskListener.implementation = taskListener.delegateExpression; - } - } - } else { - $scope.taskListeners = []; - } - - $scope.selectedListener = undefined; - $scope.selectedField = undefined; - $scope.fields = []; - $scope.translationsRetrieved = false; - - $scope.labels = {}; - - var eventPromise = $translate('PROPERTY.TASKLISTENERS.EVENT'); - var implementationPromise = $translate('PROPERTY.TASKLISTENERS.FIELDS.IMPLEMENTATION'); - var namePromise = $translate('PROPERTY.TASKLISTENERS.FIELDS.NAME'); - - $q.all([eventPromise, implementationPromise, namePromise]).then(function (results) { - $scope.labels.eventLabel = results[0]; - $scope.labels.implementationLabel = results[1]; - $scope.labels.nameLabel = results[2]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.taskListeners, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{field: 'event', displayName: $scope.labels.eventLabel}, - {field: 'implementation', displayName: $scope.labels.implementationLabel}] - }; - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedListener = row.entity; - $scope.selectedField = undefined; - if ($scope.selectedListener) { - var fields = $scope.selectedListener.fields; - if (fields !== undefined && fields !== null) { - for (var i = 0; i < fields.length; i++) { - var field = fields[i]; - if (field.stringValue !== undefined && field.stringValue !== '') { - field.implementation = field.stringValue; - } else if (field.expression !== undefined && field.expression !== '') { - field.implementation = field.expression; - } else if (field.string !== undefined && field.string !== '') { - field.implementation = field.string; - } - } - } else { - $scope.selectedListener.fields = []; - } - - $scope.fields.length = 0; - for (var i = 0; i < $scope.selectedListener.fields.length; i++) { - $scope.fields.push($scope.selectedListener.fields[i]); - } - } - }); - }; - - // Config for field grid - $scope.gridFieldOptions = { - data: $scope.fields, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - columnDefs: [{field: 'name', displayName: $scope.labels.name}, - {field: 'implementation', displayName: $scope.labels.implementationLabel}] - }; - - $scope.gridFieldOptions.onRegisterApi = function (gridApi) { - // set gridApi on scope - $scope.fieldGridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedField = row.entity; - }); - }; - }); - - $scope.listenerDetailsChanged = function () { - if ($scope.selectedListener.className !== '') { - $scope.selectedListener.implementation = $scope.selectedListener.className; - } else if ($scope.selectedListener.expression !== '') { - $scope.selectedListener.implementation = $scope.selectedListener.expression; - } else if ($scope.selectedListener.delegateExpression !== '') { - $scope.selectedListener.implementation = $scope.selectedListener.delegateExpression; - } else { - $scope.selectedListener.implementation = ''; - } - }; - - // Click handler for add button - $scope.addNewListener = function () { - var newListener = { - event: 'create', - implementation: '', - className: '', - expression: '', - delegateExpression: '' - }; - $scope.taskListeners.push(newListener); - - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newListener); - }); - }; - - // Click handler for remove button - $scope.removeListener = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.taskListeners.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - - $scope.taskListeners.splice(index, 1); - - if ($scope.taskListeners.length == 0) { - $scope.selectedListener = undefined; - } - - $timeout(function () { - if ($scope.taskListeners.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.taskListeners[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveListenerUp = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.taskListeners.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.taskListeners[index]; - $scope.taskListeners.splice(index, 1); - $timeout(function () { - $scope.taskListeners.splice(index + -1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveListenerDown = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.taskListeners.indexOf(selectedItems[0]); - if (index != $scope.taskListeners.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.taskListeners[index]; - $scope.taskListeners.splice(index, 1); - $timeout(function () { - $scope.taskListeners.splice(index + 1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - - } - } - }; - - $scope.fieldDetailsChanged = function () { - if ($scope.selectedField.stringValue != '') { - $scope.selectedField.implementation = $scope.selectedField.stringValue; - } else if ($scope.selectedField.expression != '') { - $scope.selectedField.implementation = $scope.selectedField.expression; - } else if ($scope.selectedField.string != '') { - $scope.selectedField.implementation = $scope.selectedField.string; - } else { - $scope.selectedField.implementation = ''; - } - }; - - // Click handler for add button - $scope.addNewField = function () { - if ($scope.selectedListener) { - if ($scope.selectedListener.fields == undefined) { - $scope.selectedListener.fields = []; - } - - var newField = { - name: 'fieldName', - implementation: '', - stringValue: '', - expression: '', - string: '' - }; - $scope.fields.push(newField); - $scope.selectedListener.fields.push(newField); - - $timeout(function () { - $scope.fieldGridApi.selection.toggleRowSelection(newField); - }); - } - }; - - // Click handler for remove button - $scope.removeField = function () { - var selectedItems = $scope.fieldGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.fields.indexOf(selectedItems[0]); - $scope.fieldGridApi.selection.toggleRowSelection(selectedItems[0]); - - $scope.fields.splice(index, 1); - $scope.selectedListener.fields.splice(index, 1); - - if ($scope.fields.length == 0) { - $scope.selectedField = undefined; - } - - $timeout(function () { - if ($scope.fields.length > 0) { - $scope.fieldGridApi.selection.toggleRowSelection($scope.fields[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveFieldUp = function () { - var selectedItems = $scope.fieldGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.fields.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.fields[index]; - $scope.fields.splice(index, 1); - $scope.selectedListener.fields.splice(index, 1); - $timeout(function () { - $scope.fields.splice(index + -1, 0, temp); - $scope.selectedListener.fields.splice(index + -1, 0, temp); - $timeout(function () { - $scope.fieldGridApi.selection.toggleRowSelection(temp); - }); - }); - - } - } - }; - - // Click handler for down button - $scope.moveFieldDown = function () { - var selectedItems = $scope.fieldGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.fields.indexOf(selectedItems[0]); - if (index != $scope.fields.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.fields[index]; - $scope.fields.splice(index, 1); - $scope.selectedListeners.fields.splice(index, 1); - $timeout(function () { - $scope.fields.splice(index + 1, 0, temp); - $scope.selectedListener.fields.splice(index + 1, 0, temp); - $timeout(function () { - $scope.fieldGridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.taskListeners.length > 0) { - $scope.property.value = {}; - $scope.property.value.taskListeners = $scope.taskListeners; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.close(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - }]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-transition-event-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-transition-event-controller.js deleted file mode 100644 index 59a33ab9..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-transition-event-controller.js +++ /dev/null @@ -1,27 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Execution listeners - */ - -angular.module('flowableModeler').controller('FlowableTransitionEventCtrl', [ '$scope', function($scope) { - - if ($scope.property.value == undefined && $scope.property.value == null) { - $scope.property.value = 'complete'; - } - - $scope.transitionEventChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-trigger-mode-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-trigger-mode-controller.js deleted file mode 100644 index a16041c2..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-trigger-mode-controller.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableTriggerModeCtrl', [ '$scope', function($scope) { - - if ($scope.property.value === undefined || $scope.property.value == null) { - $scope.property.value = 'default'; - } - - $scope.triggerModeChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-variable-aggregations-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-variable-aggregations-controller.js deleted file mode 100644 index 1af68d1b..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-variable-aggregations-controller.js +++ /dev/null @@ -1,294 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Variable Aggregations - */ - -angular.module('flowableModeler').controller('FlowableVariableAggregationsCtrl', - ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { - - // Config for the modal window - var opts = { - template: 'editor-app/configuration/properties/variable-aggregations-popup.html?version=' + Date.now(), - scope: $scope - }; - - // Open the dialog - _internalCreateModal(opts, $modal, $scope); - }]); - -angular.module('flowableModeler').controller('FlowableVariableAggregationsPopupCtrl', - ['$scope', '$q', '$translate', '$timeout', function ($scope, $q, $translate, $timeout) { - - // Put json representing form properties on scope - if ($scope.property.value !== undefined && $scope.property.value !== null - && $scope.property.value.aggregations !== undefined - && $scope.property.value.aggregations !== null) { - // Note that we clone the json object rather then setting it directly, - // this to cope with the fact that the user can click the cancel button and no changes should have happened - $scope.aggregations = angular.copy($scope.property.value.aggregations); - } else { - $scope.aggregations = []; - } - - $scope.definitions = []; - $scope.translationsRetrieved = false; - $scope.labels = {}; - - var sourcePromise = $translate('PROPERTY.PARAMETER.SOURCE'); - var sourceExpressionPromise = $translate('PROPERTY.PARAMETER.SOURCEEXPRESSION'); - var targetPromise = $translate('PROPERTY.PARAMETER.TARGET'); - var targetExpressionPromise = $translate('PROPERTY.PARAMETER.TARGETEXPRESSION'); - - $q.all([sourcePromise, sourceExpressionPromise, targetPromise, targetExpressionPromise]).then(function (results) { - $scope.labels.sourceLabel = results[0]; - $scope.labels.sourceExpressionLabel = results[1]; - $scope.labels.targetLabel = results[2]; - $scope.labels.targetExpressionLabel = results[3]; - $scope.translationsRetrieved = true; - - // Config for grid - $scope.gridOptions = { - data: $scope.aggregations, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{field: 'target', displayName: $scope.labels.targetLabel}, - {field: 'targetExpression', displayName: $scope.labels.targetExpressionLabel}] - }; - - $scope.definitionGridOptions = { - data: $scope.definitions, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{ field: 'source', displayName: $scope.labels.sourceLabel }, - { field: 'sourceExpression', displayName: $scope.labels.sourceExpressionLabel}, - { field: 'target', displayName: $scope.labels.targetLabel}, - { field: 'targetExpression', displayName: $scope.labels.targetExpressionLabel}] - } - - - $scope.gridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedAggregation = row.entity; - $scope.selectedVariableDefinitionValue = undefined; - if ($scope.selectedAggregation && $scope.selectedAggregation.definitions) { - $scope.definitions.length = 0; - for (var i = 0; i < $scope.selectedAggregation.definitions.length; i++) { - $scope.definitions.push($scope.selectedAggregation.definitions[i]); - } - } - }); - }; - - $scope.definitionGridOptions.onRegisterApi = function (gridApi) { - //set gridApi on scope - $scope.definitionGridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function (row) { - $scope.selectedVariableDefinitionValue = row.entity; - }); - }; - }); - - // Click handler for add button - $scope.addNewAggregation = function () { - var newAggregation = { - source: '', - sourceExpression: '', - target: '', - targetExpression: ''}; - - $scope.aggregations.push(newAggregation); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(newAggregation); - }); - }; - - // Click handler for remove button - $scope.removeAggregation = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.aggregations.indexOf(selectedItems[0]); - $scope.gridApi.selection.toggleRowSelection(selectedItems[0]); - $scope.aggregations.splice(index, 1); - - if ($scope.aggregations.length == 0) { - $scope.selectedAggregation = undefined; - } - - $timeout(function () { - if ($scope.aggregations.length > 0) { - $scope.gridApi.selection.toggleRowSelection($scope.aggregations[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveAggregationUp = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.aggregations.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.aggregations[index]; - $scope.aggregations.splice(index, 1); - $timeout(function () { - $scope.aggregations.splice(index + -1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveAggregationDown = function () { - var selectedItems = $scope.gridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.aggregations.indexOf(selectedItems[0]); - if (index != $scope.aggregations.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.aggregations[index]; - $scope.aggregations.splice(index, 1); - $timeout(function () { - $scope.aggregations.splice(index + 1, 0, temp); - $timeout(function () { - $scope.gridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - $scope.addNewVariableDefinitionValue = function() { - if ($scope.selectedAggregation) { - var newDefinitionValue = { - source : '', - sourceExpression : '', - target : '', - targetExpression : '', - }; - if ($scope.selectedAggregation.definitions) { - $scope.selectedAggregation.definitions.push(newDefinitionValue); - } else { - $scope.selectedAggregation.definitions = [newDefinitionValue]; - } - $scope.definitions.push(newDefinitionValue); - - $timeout(function () { - $scope.definitionGridApi.selection.toggleRowSelection(newDefinitionValue); - }); - } - }; - - // Click handler for remove button - $scope.removeVariableDefinitionValue = function() { - var selectedItems = $scope.definitionGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.definitions.indexOf(selectedItems[0]); - $scope.definitionGridApi.selection.toggleRowSelection(selectedItems[0]); - - $scope.definitions.splice(index, 1); - $scope.selectedAggregation.definitions.splice(index, 1); - - if ($scope.definitions.length == 0) { - $scope.selectedVariableDefinitionValue = undefined; - } - - $timeout(function () { - if ($scope.definitions.length > 0) { - $scope.definitionGridApi.selection.toggleRowSelection($scope.definitions[0]); - } - }); - } - }; - - // Click handler for up button - $scope.moveVariableDefinitionValueUp = function() { - var selectedItems = $scope.definitionGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.definitions.indexOf(selectedItems[0]); - if (index != 0) { // If it's the first, no moving up of course - var temp = $scope.definitions[index]; - $scope.definitions.splice(index, 1); - $scope.selectedAggregation.definitions.splice(index, 1); - $timeout(function () { - $scope.definitions.splice(index + -1, 0, temp); - $scope.selectedAggregation.definitions.splice(index + -1, 0, temp); - $timeout(function () { - $scope.definitionGridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for down button - $scope.moveVariableDefinitionValueDown = function() { - var selectedItems = $scope.enumGridApi.selection.getSelectedRows(); - if (selectedItems && selectedItems.length > 0) { - var index = $scope.definitions.indexOf(selectedItems[0]); - if (index != $scope.definitions.length - 1) { // If it's the last element, no moving down of course - var temp = $scope.definitions[index]; - $scope.definitionGridApi.splice(index, 1); - $scope.selectedAggregation.definitions.splice(index, 1); - $timeout(function () { - $scope.definitions.splice(index + 1, 0, temp); - $scope.selectedAggregation.definitions.splice(index + 1, 0, temp); - $timeout(function () { - $scope.definitionGridApi.selection.toggleRowSelection(temp); - }); - }); - } - } - }; - - // Click handler for save button - $scope.save = function () { - - if ($scope.aggregations.length > 0) { - $scope.property.value = {}; - $scope.property.value.aggregations = $scope.aggregations; - } else { - $scope.property.value = null; - } - - $scope.updatePropertyInModel($scope.property); - $scope.close(); - }; - - $scope.cancel = function () { - $scope.close(); - }; - - // Close button handler - $scope.close = function () { - $scope.property.mode = 'read'; - $scope.$hide(); - }; - - }]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-variable-change-type-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-variable-change-type-controller.js deleted file mode 100644 index 5330953e..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties-variable-change-type-controller.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -angular.module('flowableModeler').controller('FlowableVariableChangeTypeCtrl', [ '$scope', function($scope) { - - if ($scope.property.value == undefined && $scope.property.value == null) { - $scope.property.value = 'all'; - } - - $scope.variableChangeTypeChanged = function() { - $scope.updatePropertyInModel($scope.property); - }; -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties.js deleted file mode 100644 index ca3cdd11..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties.js +++ /dev/null @@ -1,215 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -'use strict'; - -var FLOWABLE = FLOWABLE || {}; -FLOWABLE.PROPERTY_CONFIG = -{ - "string": { - "templateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/string-property-write-mode-template.html" - }, - "boolean": { - "readModeTemplateUrl": "editor-app/configuration/properties/boolean-property-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/boolean-property-template.html" - }, - "text" : { - "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/text-property-write-template.html" - }, - "flowable-calledelementtype" : { - "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/calledelementtype-property-write-template.html" - }, - "flowable-multiinstance" : { - "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/multiinstance-property-write-template.html" - }, - "flowable-processhistorylevel" : { - "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/process-historylevel-property-write-template.html" - }, - "flowable-ordering" : { - "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/ordering-property-write-template.html" - }, - "oryx-dataproperties-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/data-properties-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/data-properties-write-template.html" - }, - "oryx-formproperties-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/form-properties-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/form-properties-write-template.html" - }, - "oryx-executionlisteners-multiplecomplex": { - "readModeTemplateUrl": "editor-app/configuration/properties/execution-listeners-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/execution-listeners-write-template.html" - }, - "oryx-tasklisteners-multiplecomplex": { - "readModeTemplateUrl": "editor-app/configuration/properties/task-listeners-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/task-listeners-write-template.html" - }, - "oryx-eventlisteners-multiplecomplex": { - "readModeTemplateUrl": "editor-app/configuration/properties/event-listeners-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/event-listeners-write-template.html" - }, - "oryx-usertaskassignment-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/assignment-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/assignment-write-template.html" - }, - "oryx-servicetaskfields-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/fields-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/fields-write-template.html" - }, - "oryx-servicetaskexceptions-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/exceptions-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/exceptions-write-template.html" - }, - "oryx-callactivityinparameters-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/in-parameters-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/in-parameters-write-template.html" - }, - "oryx-callactivityoutparameters-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/out-parameters-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/out-parameters-write-template.html" - }, - "oryx-subprocessreference-subprocess-link": { - "readModeTemplateUrl": "editor-app/configuration/properties/subprocess-reference-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/subprocess-reference-write-template.html" - }, - "oryx-formreference-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/form-reference-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/form-reference-write-template.html" - }, - "oryx-sequencefloworder-complex" : { - "readModeTemplateUrl": "editor-app/configuration/properties/sequenceflow-order-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/sequenceflow-order-write-template.html" - }, - "oryx-conditionsequenceflow-complex" : { - "readModeTemplateUrl": "editor-app/configuration/properties/condition-expression-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/condition-expression-write-template.html" - }, - "oryx-signaldefinitions-multiplecomplex" : { - "readModeTemplateUrl": "editor-app/configuration/properties/signal-definitions-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/signal-definitions-write-template.html" - }, - "oryx-signalref-string" : { - "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/signal-property-write-template.html" - }, - "oryx-messagedefinitions-multiplecomplex" : { - "readModeTemplateUrl": "editor-app/configuration/properties/message-definitions-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/message-definitions-write-template.html" - }, - "oryx-messageref-string" : { - "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/message-property-write-template.html" - }, - "oryx-escalationdefinitions-multiplecomplex" : { - "readModeTemplateUrl": "editor-app/configuration/properties/escalation-definitions-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/escalation-definitions-write-template.html" - }, - "oryx-escalationref-string" : { - "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/escalation-property-write-template.html" - }, - "flowable-variablechangetype" : { - "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/variable-change-type-property-write-template.html" - }, - "oryx-duedatedefinition-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/duedate-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/duedate-write-template.html" - }, - "oryx-decisiontaskdecisiontablereference-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/decisiontable-reference-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/decisiontable-reference-write-template.html" - }, - "oryx-decisiontaskdecisionservicereference-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/decisionservice-reference-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/decisionservice-reference-write-template.html" - }, - "oryx-decisiondecisiontablereference-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/decisiontable-reference-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/decisiontable-reference-write-template.html" - }, - "oryx-casetaskcasereference-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/case-reference-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/case-reference-write-template.html" - }, - "oryx-processtaskprocessreference-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/process-reference-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/process-reference-write-template.html" - }, - "oryx-processtaskinparameters-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/in-parameters-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/in-parameters-write-template.html" - }, - "oryx-processtaskoutparameters-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/out-parameters-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/out-parameters-write-template.html" - }, - "oryx-casetaskinparameters-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/in-parameters-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/in-parameters-write-template.html" - }, - "oryx-casetaskoutparameters-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/out-parameters-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/out-parameters-write-template.html" - }, - "oryx-planitemlifecyclelisteners-multiplecomplex": { - "readModeTemplateUrl": "editor-app/configuration/properties/plan-item-lifecycle-listeners-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/plan-item-lifecycle-listeners-write-template.html" - }, - "flowable-transitionevent" : { - "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/transition-event-write-template.html" - }, - "flowable-planitem-dropdown" : { - "readModeTemplateUrl": "editor-app/configuration/properties/planitem-dropdown-read-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/planitem-dropdown-write-template.html" - }, - "flowable-http-request-method" : { - "readModeTemplateUrl": "editor-app/configuration/properties/http-request-method-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/http-request-method-property-write-template.html" - }, - "flowable-triggermode" : { - "readModeTemplateUrl": "editor-app/configuration/properties/trigger-mode-read-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/trigger-mode-write-template.html" - }, - "oryx-eventinparameters-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/event-in-parameters-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/event-in-parameters-write-template.html" - }, - "oryx-eventoutparameters-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/event-out-parameters-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/event-out-parameters-write-template.html" - }, - "oryx-eventcorrelationparameters-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/event-correlation-parameters-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/event-correlation-parameters-write-template.html" - }, - "flowable-channeltype" : { - "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/event-channel-type-property-write-template.html" - }, - "oryx-multiinstance_variableaggregations-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/variable-aggregations-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/variable-aggregations-write-template.html" - }, - "oryx-repetition_variableaggregations-complex": { - "readModeTemplateUrl": "editor-app/configuration/properties/variable-aggregations-display-template.html", - "writeModeTemplateUrl": "editor-app/configuration/properties/variable-aggregations-write-template.html" - }, -}; diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/assignment-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/assignment-display-template.html deleted file mode 100644 index bbe69893..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/assignment-display-template.html +++ /dev/null @@ -1,15 +0,0 @@ - -{{'PROPERTY.ASSIGNMENT.ASSIGNEE_DISPLAY' | translate:property.value.assignment }} -{{'PROPERTY.ASSIGNMENT.CANDIDATE_USERS_DISPLAY' | translate:property.value.assignment.candidateUsers}} -{{'PROPERTY.ASSIGNMENT.CANDIDATE_GROUPS_DISPLAY' | translate:property.value.assignment.candidateGroups}} -{{'PROPERTY.ASSIGNMENT.USER_IDM_DISPLAY' | translate:property.value.assignment.idm.assignee }} -{{'PROPERTY.ASSIGNMENT.USER_IDM_EMAIL_DISPLAY' | translate:property.value.assignment.idm.assignee }} -{{'PROPERTY.ASSIGNMENT.USER_IDM_FIELD_DISPLAY' | translate:property.value.assignment.idm.assigneeField }} -{{'PROPERTY.ASSIGNMENT.CANDIDATE_USERS_DISPLAY' | translate:property.value.assignment.idm.candidateUsers}} -{{'PROPERTY.ASSIGNMENT.CANDIDATE_GROUPS_DISPLAY' | translate:property.value.assignment.idm.candidateGroups}} -{{'PROPERTY.ASSIGNMENT.CANDIDATE_USERS_DISPLAY' | translate:property.value.assignment.idm.candidateUserFields}} -{{'PROPERTY.ASSIGNMENT.CANDIDATE_GROUPS_DISPLAY' | translate:property.value.assignment.idm.candidateGroupFields}} -{{'PROPERTY.ASSIGNMENT.CANDIDATE_USERS_DISPLAY' | translate:property.value.assignment.idm.candidateUserFields.concat(property.value.assignment.idm.candidateUsers)}} -{{'PROPERTY.ASSIGNMENT.CANDIDATE_GROUPS_DISPLAY' | translate:property.value.assignment.idm.candidateGroupFields.concat(property.value.assignment.idm.candidateGroups)}} -PROPERTY.ASSIGNMENT.EMPTY -PROPERTY.ASSIGNMENT.IDM_EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/assignment-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/assignment-popup.html deleted file mode 100644 index 8089e458..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/assignment-popup.html +++ /dev/null @@ -1,268 +0,0 @@ - --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/assignment-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/assignment-write-template.html deleted file mode 100644 index 5f4f9ab9..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/assignment-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/boolean-property-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/boolean-property-template.html deleted file mode 100644 index 2a82e70e..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/boolean-property-template.html +++ /dev/null @@ -1,4 +0,0 @@ - -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/calledelementtype-property-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/calledelementtype-property-write-template.html deleted file mode 100644 index 9beb8692..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/calledelementtype-property-write-template.html +++ /dev/null @@ -1,7 +0,0 @@ - -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/case-reference-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/case-reference-display-template.html deleted file mode 100644 index 53dd5dde..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/case-reference-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{property.value.name}} -PROPERTY.CASEREFERENCE.EMPTY diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/case-reference-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/case-reference-popup.html deleted file mode 100644 index a39d0779..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/case-reference-popup.html +++ /dev/null @@ -1,45 +0,0 @@ - --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/case-reference-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/case-reference-write-template.html deleted file mode 100644 index d0e65d22..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/case-reference-write-template.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/condition-expression-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/condition-expression-display-template.html deleted file mode 100644 index 3b3c4fa5..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/condition-expression-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ -{{property.value.expression.staticValue|limitTo:20}} -{{property.value|limitTo:20}} -{{'PROPERTY.SEQUENCEFLOW.CONDITION.NO-CONDITION-DISPLAY' | translate}} \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/condition-expression-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/condition-expression-popup.html deleted file mode 100644 index 9f95e5d8..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/condition-expression-popup.html +++ /dev/null @@ -1,26 +0,0 @@ --- ---diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/condition-expression-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/condition-expression-write-template.html deleted file mode 100644 index e6eba722..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/condition-expression-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/data-properties-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/data-properties-display-template.html deleted file mode 100644 index 94ca63de..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/data-properties-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.DATAPROPERTIES.VALUES' | translate:property.value.items}} -PROPERTY.DATAPROPERTIES.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/data-properties-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/data-properties-popup.html deleted file mode 100644 index d5d29816..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/data-properties-popup.html +++ /dev/null @@ -1,64 +0,0 @@ - --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/data-properties-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/data-properties-write-template.html deleted file mode 100644 index d69df1d0..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/data-properties-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisionservice-reference-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisionservice-reference-display-template.html deleted file mode 100644 index f8cc19fa..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisionservice-reference-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{property.value.name}} -PROPERTY.DECISIONSERVICEREFERENCE.EMPTY diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisionservice-reference-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisionservice-reference-popup.html deleted file mode 100644 index 07bf7b37..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisionservice-reference-popup.html +++ /dev/null @@ -1,74 +0,0 @@ - --- --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisionservice-reference-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisionservice-reference-write-template.html deleted file mode 100644 index 9d40b401..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisionservice-reference-write-template.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisiontable-reference-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisiontable-reference-display-template.html deleted file mode 100644 index 6c06781e..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisiontable-reference-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{property.value.name}} -PROPERTY.DECISIONTABLEREFERENCE.EMPTY diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisiontable-reference-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisiontable-reference-popup.html deleted file mode 100644 index 476f0b69..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisiontable-reference-popup.html +++ /dev/null @@ -1,74 +0,0 @@ - --- --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisiontable-reference-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisiontable-reference-write-template.html deleted file mode 100644 index efbf9f9a..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/decisiontable-reference-write-template.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/default-value-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/default-value-display-template.html deleted file mode 100644 index a2389ec0..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/default-value-display-template.html +++ /dev/null @@ -1,4 +0,0 @@ - -{{property.value|limitTo:20}} -... -PROPERTY.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/duedate-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/duedate-display-template.html deleted file mode 100644 index a08966bb..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/duedate-display-template.html +++ /dev/null @@ -1,6 +0,0 @@ - -PROPERTY.DUEDATE.DEFINED -PROPERTY.DUEDATE.DEFINED -{{property.value.duedateExpression}} -{{property.value}} -PROPERTY.DUEDATE.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/duedate-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/duedate-popup.html deleted file mode 100644 index 7e5cf505..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/duedate-popup.html +++ /dev/null @@ -1,120 +0,0 @@ - --- ---diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/duedate-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/duedate-write-template.html deleted file mode 100644 index 481efd36..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/duedate-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/errorgrid-critical.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/errorgrid-critical.html deleted file mode 100644 index d997030d..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/errorgrid-critical.html +++ /dev/null @@ -1,5 +0,0 @@ -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/escalation-definitions-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/escalation-definitions-display-template.html deleted file mode 100644 index c3a584e4..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/escalation-definitions-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.ESCALATIONDEFINITIONS.DISPLAY' | translate:property.value}} -PROPERTY.ESCALATIONDEFINITIONS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/escalation-definitions-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/escalation-definitions-popup.html deleted file mode 100644 index b90a3a54..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/escalation-definitions-popup.html +++ /dev/null @@ -1,49 +0,0 @@ -Warning-Critical--\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/escalation-definitions-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/escalation-definitions-write-template.html deleted file mode 100644 index 1d4e918e..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/escalation-definitions-write-template.html +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/escalation-property-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/escalation-property-write-template.html deleted file mode 100644 index c40c70bc..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/escalation-property-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ --- -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-channel-type-property-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-channel-type-property-write-template.html deleted file mode 100644 index 5fa071cf..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-channel-type-property-write-template.html +++ /dev/null @@ -1,9 +0,0 @@ - -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-correlation-parameters-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-correlation-parameters-display-template.html deleted file mode 100644 index a4fb4987..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-correlation-parameters-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.EVENTCORRELATIONPARAMETERS.VALUE' | translate:property.value.correlationParameters}} -PROPERTY.EVENTCORRELATIONPARAMETERS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-correlation-parameters-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-correlation-parameters-popup.html deleted file mode 100644 index c7d84a8c..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-correlation-parameters-popup.html +++ /dev/null @@ -1,53 +0,0 @@ - --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-correlation-parameters-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-correlation-parameters-write-template.html deleted file mode 100644 index d7101f8a..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-correlation-parameters-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-in-parameters-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-in-parameters-display-template.html deleted file mode 100644 index 72f4f111..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-in-parameters-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.EVENTINPARAMETERS.VALUE' | translate:property.value.inParameters}} -PROPERTY.EVENTINPARAMETERS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-in-parameters-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-in-parameters-popup.html deleted file mode 100644 index 21e40910..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-in-parameters-popup.html +++ /dev/null @@ -1,52 +0,0 @@ - --- --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-in-parameters-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-in-parameters-write-template.html deleted file mode 100644 index f0501e2b..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-in-parameters-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-listeners-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-listeners-display-template.html deleted file mode 100644 index cfc375da..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-listeners-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.EVENTLISTENERS.DISPLAY' | translate:property.value.eventListeners}} -PROPERTY.EVENTLISTENERS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-listeners-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-listeners-popup.html deleted file mode 100644 index 1555adde..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-listeners-popup.html +++ /dev/null @@ -1,143 +0,0 @@ - --- --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-listeners-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-listeners-write-template.html deleted file mode 100644 index 9a2ccc67..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-listeners-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-out-parameters-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-out-parameters-display-template.html deleted file mode 100644 index c1675992..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-out-parameters-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.EVENTOUTPARAMETERS.VALUE' | translate:property.value.outParameters}} -PROPERTY.EVENTOUTPARAMETERS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-out-parameters-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-out-parameters-popup.html deleted file mode 100644 index eeddf003..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-out-parameters-popup.html +++ /dev/null @@ -1,53 +0,0 @@ - --- --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-out-parameters-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-out-parameters-write-template.html deleted file mode 100644 index dfe416b5..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/event-out-parameters-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/exceptions-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/exceptions-display-template.html deleted file mode 100644 index a9983adb..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/exceptions-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.EXCEPTIONS' | translate:property.value.exceptions}} -{{'PROPERTY.EXCEPTIONS.EMPTY' | translate}} \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/exceptions-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/exceptions-popup.html deleted file mode 100644 index e7d133ea..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/exceptions-popup.html +++ /dev/null @@ -1,55 +0,0 @@ - --- --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/exceptions-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/exceptions-write-template.html deleted file mode 100644 index ff791dde..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/exceptions-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/execution-listeners-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/execution-listeners-display-template.html deleted file mode 100644 index 66374008..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/execution-listeners-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.EXECUTIONLISTENERS.DISPLAY' | translate:property.value.executionListeners}} -PROPERTY.EXECUTIONLISTENERS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/execution-listeners-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/execution-listeners-popup.html deleted file mode 100644 index d646c217..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/execution-listeners-popup.html +++ /dev/null @@ -1,101 +0,0 @@ - --- --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/execution-listeners-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/execution-listeners-write-template.html deleted file mode 100644 index e0de5dc9..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/execution-listeners-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/feedback-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/feedback-popup.html deleted file mode 100644 index 17b91267..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/feedback-popup.html +++ /dev/null @@ -1,17 +0,0 @@ - --- --\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/fields-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/fields-display-template.html deleted file mode 100644 index 64af8a0c..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/fields-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.FIELDS' | translate:property.value.fields}} -{{'PROPERTY.FIELDS.EMPTY' | translate}} \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/fields-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/fields-popup.html deleted file mode 100644 index 3821a602..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/fields-popup.html +++ /dev/null @@ -1,58 +0,0 @@ - --- --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/fields-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/fields-write-template.html deleted file mode 100644 index fdc03b76..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/fields-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-properties-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-properties-display-template.html deleted file mode 100644 index 12743429..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-properties-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.FORMPROPERTIES.VALUE' | translate:property.value.formProperties}} -PROPERTY.FORMPROPERTIES.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-properties-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-properties-popup.html deleted file mode 100644 index c16ed862..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-properties-popup.html +++ /dev/null @@ -1,121 +0,0 @@ - --- --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-properties-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-properties-write-template.html deleted file mode 100644 index 0449718f..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-properties-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-reference-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-reference-display-template.html deleted file mode 100644 index 15444f64..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-reference-display-template.html +++ /dev/null @@ -1,4 +0,0 @@ --- -- {{form.name}} - PROPERTY.FORMREFERENCE.EMPTY -diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-reference-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-reference-popup.html deleted file mode 100644 index 6c0a2db0..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-reference-popup.html +++ /dev/null @@ -1,74 +0,0 @@ - --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-reference-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-reference-write-template.html deleted file mode 100644 index abb945f6..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/form-reference-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/http-request-method-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/http-request-method-display-template.html deleted file mode 100644 index 2306527c..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/http-request-method-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{property.value}} -GET \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/http-request-method-property-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/http-request-method-property-write-template.html deleted file mode 100644 index c9a6ea9d..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/http-request-method-property-write-template.html +++ /dev/null @@ -1,9 +0,0 @@ --- -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/in-parameters-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/in-parameters-display-template.html deleted file mode 100644 index 961e637c..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/in-parameters-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.INPARAMETERS.VALUE' | translate:property.value.inParameters}} -PROPERTY.INPARAMETERS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/in-parameters-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/in-parameters-popup.html deleted file mode 100644 index ac477a19..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/in-parameters-popup.html +++ /dev/null @@ -1,57 +0,0 @@ - --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/in-parameters-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/in-parameters-write-template.html deleted file mode 100644 index d6e1872f..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/in-parameters-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/message-definitions-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/message-definitions-display-template.html deleted file mode 100644 index 2a0f3e7f..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/message-definitions-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.MESSAGEDEFINITIONS.DISPLAY' | translate:property.value}} -PROPERTY.MESSAGEDEFINITIONS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/message-definitions-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/message-definitions-popup.html deleted file mode 100644 index c93cce9d..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/message-definitions-popup.html +++ /dev/null @@ -1,49 +0,0 @@ --- --\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/message-definitions-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/message-definitions-write-template.html deleted file mode 100644 index 76e7b889..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/message-definitions-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/message-property-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/message-property-write-template.html deleted file mode 100644 index 8e38ea3e..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/message-property-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ --- -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/multiinstance-property-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/multiinstance-property-write-template.html deleted file mode 100644 index 16c36e91..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/multiinstance-property-write-template.html +++ /dev/null @@ -1,8 +0,0 @@ - -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/ordering-property-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/ordering-property-write-template.html deleted file mode 100644 index 150be209..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/ordering-property-write-template.html +++ /dev/null @@ -1,7 +0,0 @@ - -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/out-parameters-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/out-parameters-display-template.html deleted file mode 100644 index 859b2e40..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/out-parameters-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.OUTPARAMETERS.VALUE' | translate:property.value.outParameters}} -PROPERTY.OUTPARAMETERS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/out-parameters-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/out-parameters-popup.html deleted file mode 100644 index 6102f34f..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/out-parameters-popup.html +++ /dev/null @@ -1,57 +0,0 @@ - --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/out-parameters-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/out-parameters-write-template.html deleted file mode 100644 index ea6986ad..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/out-parameters-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/plan-item-lifecycle-listeners-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/plan-item-lifecycle-listeners-display-template.html deleted file mode 100644 index 88ffb8bc..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/plan-item-lifecycle-listeners-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.PLANITEMLIFECYCLELISTENERS.VALUE' | translate:property.value.planItemLifecycleListeners}} -PROPERTY.PLANITEMLIFECYCLELISTENERS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/plan-item-lifecycle-listeners-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/plan-item-lifecycle-listeners-popup.html deleted file mode 100644 index 9679c411..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/plan-item-lifecycle-listeners-popup.html +++ /dev/null @@ -1,125 +0,0 @@ - --- --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/plan-item-lifecycle-listeners-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/plan-item-lifecycle-listeners-write-template.html deleted file mode 100644 index f073c119..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/plan-item-lifecycle-listeners-write-template.html +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/planitem-dropdown-read-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/planitem-dropdown-read-template.html deleted file mode 100644 index 6edb2a2a..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/planitem-dropdown-read-template.html +++ /dev/null @@ -1,4 +0,0 @@ - -{{property.value.name|limitTo:20}} -... -PROPERTY.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/planitem-dropdown-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/planitem-dropdown-write-template.html deleted file mode 100644 index 2ca69441..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/planitem-dropdown-write-template.html +++ /dev/null @@ -1,5 +0,0 @@ - --- -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/process-historylevel-property-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/process-historylevel-property-write-template.html deleted file mode 100644 index bd4efa1f..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/process-historylevel-property-write-template.html +++ /dev/null @@ -1,10 +0,0 @@ - -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/process-reference-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/process-reference-display-template.html deleted file mode 100644 index 9447d084..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/process-reference-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{property.value.name}} -PROPERTY.PROCESSREFERENCE.EMPTY diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/process-reference-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/process-reference-popup.html deleted file mode 100644 index a8b3067c..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/process-reference-popup.html +++ /dev/null @@ -1,45 +0,0 @@ - --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/process-reference-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/process-reference-write-template.html deleted file mode 100644 index 56461a1e..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/process-reference-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/sequenceflow-order-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/sequenceflow-order-display-template.html deleted file mode 100644 index 90f50e94..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/sequenceflow-order-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -PROPERTY.SEQUENCEFLOW.ORDER.NOT.EMPTY -PROPERTY.SEQUENCEFLOW.ORDER.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/sequenceflow-order-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/sequenceflow-order-popup.html deleted file mode 100644 index 2bc65427..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/sequenceflow-order-popup.html +++ /dev/null @@ -1,47 +0,0 @@ - --- --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/sequenceflow-order-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/sequenceflow-order-write-template.html deleted file mode 100644 index dd562105..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/sequenceflow-order-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/signal-definitions-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/signal-definitions-display-template.html deleted file mode 100644 index 7fa105bc..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/signal-definitions-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.SIGNALDEFINITIONS.DISPLAY' | translate:property.value}} -PROPERTY.SIGNALDEFINITIONS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/signal-definitions-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/signal-definitions-popup.html deleted file mode 100644 index 5f21ed7a..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/signal-definitions-popup.html +++ /dev/null @@ -1,56 +0,0 @@ --- --\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/signal-definitions-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/signal-definitions-write-template.html deleted file mode 100644 index 0ee19531..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/signal-definitions-write-template.html +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/signal-property-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/signal-property-write-template.html deleted file mode 100644 index b8da4322..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/signal-property-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ --- -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/string-property-write-mode-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/string-property-write-mode-template.html deleted file mode 100644 index 62c3323a..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/string-property-write-mode-template.html +++ /dev/null @@ -1,9 +0,0 @@ - -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/task-listeners-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/task-listeners-display-template.html deleted file mode 100644 index 4d071713..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/task-listeners-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.TASKLISTENERS.VALUE' | translate:property.value.taskListeners}} -PROPERTY.TASKLISTENERS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/task-listeners-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/task-listeners-popup.html deleted file mode 100644 index 1c50b5ac..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/task-listeners-popup.html +++ /dev/null @@ -1,102 +0,0 @@ - --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/task-listeners-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/task-listeners-write-template.html deleted file mode 100644 index dda53a17..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/task-listeners-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/text-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/text-popup.html deleted file mode 100644 index 98bab62e..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/text-popup.html +++ /dev/null @@ -1,17 +0,0 @@ - --- --\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/text-property-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/text-property-write-template.html deleted file mode 100644 index 958bef90..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/text-property-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/transition-event-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/transition-event-write-template.html deleted file mode 100644 index 824631bb..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/transition-event-write-template.html +++ /dev/null @@ -1,10 +0,0 @@ - --- -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/trigger-mode-read-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/trigger-mode-read-template.html deleted file mode 100644 index 782daf5c..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/trigger-mode-read-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{property.value}} -default \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/trigger-mode-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/trigger-mode-write-template.html deleted file mode 100644 index ac267e6c..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/trigger-mode-write-template.html +++ /dev/null @@ -1,7 +0,0 @@ - -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/variable-aggregations-display-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/variable-aggregations-display-template.html deleted file mode 100644 index b80e4624..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/variable-aggregations-display-template.html +++ /dev/null @@ -1,3 +0,0 @@ - -{{'PROPERTY.VARIABLE.AGGREGATIONS.VALUE' | translate:property.value.aggregations}} -PROPERTY.VARIABLE.AGGREGATIONS.EMPTY \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/variable-aggregations-popup.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/variable-aggregations-popup.html deleted file mode 100644 index f5bfecd4..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/variable-aggregations-popup.html +++ /dev/null @@ -1,113 +0,0 @@ - --diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/variable-aggregations-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/variable-aggregations-write-template.html deleted file mode 100644 index 667cbcb0..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/variable-aggregations-write-template.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/variable-change-type-property-write-template.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/variable-change-type-property-write-template.html deleted file mode 100644 index 0b7a49c6..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/properties/variable-change-type-property-write-template.html +++ /dev/null @@ -1,9 +0,0 @@ - --- -- -\ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/toolbar-custom-actions.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/toolbar-custom-actions.js deleted file mode 100644 index 72ac3040..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/toolbar-custom-actions.js +++ /dev/null @@ -1,12 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/toolbar-default-actions.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/toolbar-default-actions.js deleted file mode 100644 index ab60e3a2..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/toolbar-default-actions.js +++ /dev/null @@ -1,558 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -'use strict'; - -var FLOWABLE = FLOWABLE || {}; -FLOWABLE.TOOLBAR = { - ACTIONS: { - - saveModel: function (services) { - - _internalCreateModal({ - backdrop: true, - keyboard: true, - template: 'editor-app/popups/save-model.html?version=' + Date.now(), - scope: services.$scope - }, services.$modal, services.$scope); - }, - - validate: function(services) { - - _internalCreateModal({ - backdrop: true, - keyboard: true, - template: 'editor-app/popups/validate-model.html?version=' + Date.now(), - scope: services.$scope - }, services.$modal, services.$scope); - }, - - undo: function (services) { - - // Get the last commands - var lastCommands = services.$scope.undoStack.pop(); - - if (lastCommands) { - // Add the commands to the redo stack - services.$scope.redoStack.push(lastCommands); - - // Force refresh of selection, might be that the undo command - // impacts properties in the selected item - if (services.$rootScope && services.$rootScope.forceSelectionRefresh) - { - services.$rootScope.forceSelectionRefresh = true; - } - - // Rollback every command - for (var i = lastCommands.length - 1; i >= 0; --i) { - lastCommands[i].rollback(); - } - - // Update and refresh the canvas - services.editorManager.handleEvents({ - type: ORYX.CONFIG.EVENT_UNDO_ROLLBACK, - commands: lastCommands - }); - - // Update - services.editorManager.getCanvas().update(); - services.editorManager.updateSelection(); - } - - var toggleUndo = false; - if (services.$scope.undoStack.length == 0) - { - toggleUndo = true; - } - - var toggleRedo = false; - if (services.$scope.redoStack.length > 0) - { - toggleRedo = true; - } - - if (toggleUndo || toggleRedo) { - for (var i = 0; i < services.$scope.items.length; i++) { - var item = services.$scope.items[i]; - if (toggleUndo && item.action === 'FLOWABLE.TOOLBAR.ACTIONS.undo') { - services.$scope.safeApply(function () { - item.enabled = false; - }); - } - else if (toggleRedo && item.action === 'FLOWABLE.TOOLBAR.ACTIONS.redo') { - services.$scope.safeApply(function () { - item.enabled = true; - }); - } - } - } - }, - - redo: function (services) { - - // Get the last commands from the redo stack - var lastCommands = services.$scope.redoStack.pop(); - - if (lastCommands) { - // Add this commands to the undo stack - services.$scope.undoStack.push(lastCommands); - - // Force refresh of selection, might be that the redo command - // impacts properties in the selected item - if (services.$rootScope && services.$rootScope.forceSelectionRefresh) - { - services.$rootScope.forceSelectionRefresh = true; - } - - // Execute those commands - lastCommands.each(function (command) { - command.execute(); - }); - - // Update and refresh the canvas - services.editorManager.handleEvents({ - type: ORYX.CONFIG.EVENT_UNDO_EXECUTE, - commands: lastCommands - }); - - // Update - services.editorManager.getCanvas().update(); - services.editorManager.updateSelection(); - } - - var toggleUndo = false; - if (services.$scope.undoStack.length > 0) { - toggleUndo = true; - } - - var toggleRedo = false; - if (services.$scope.redoStack.length == 0) { - toggleRedo = true; - } - - if (toggleUndo || toggleRedo) { - for (var i = 0; i < services.$scope.items.length; i++) { - var item = services.$scope.items[i]; - if (toggleUndo && item.action === 'FLOWABLE.TOOLBAR.ACTIONS.undo') { - services.$scope.safeApply(function () { - item.enabled = true; - }); - } - else if (toggleRedo && item.action === 'FLOWABLE.TOOLBAR.ACTIONS.redo') { - services.$scope.safeApply(function () { - item.enabled = false; - }); - } - } - } - }, - - cut: function (services) { - FLOWABLE.TOOLBAR.ACTIONS._getOryxEditPlugin(services).editCut(); - for (var i = 0; i < services.$scope.items.length; i++) { - var item = services.$scope.items[i]; - if (item.action === 'FLOWABLE.TOOLBAR.ACTIONS.paste') { - services.$scope.safeApply(function () { - item.enabled = true; - }); - } - } - }, - - copy: function (services) { - FLOWABLE.TOOLBAR.ACTIONS._getOryxEditPlugin(services).editCopy(); - for (var i = 0; i < services.$scope.items.length; i++) { - var item = services.$scope.items[i]; - if (item.action === 'FLOWABLE.TOOLBAR.ACTIONS.paste') { - services.$scope.safeApply(function () { - item.enabled = true; - }); - } - } - }, - - paste: function (services) { - FLOWABLE.TOOLBAR.ACTIONS._getOryxEditPlugin(services).editPaste(); - }, - - deleteItem: function (services) { - FLOWABLE.TOOLBAR.ACTIONS._getOryxEditPlugin(services).editDelete(); - }, - - addBendPoint: function (services) { - - // Show the tutorial the first time - FLOWABLE_EDITOR_TOUR.sequenceFlowBendpoint(services.$scope, services.$translate, services.$q, true); - - var dockerPlugin = FLOWABLE.TOOLBAR.ACTIONS._getOryxDockerPlugin(services); - - var enableAdd = !dockerPlugin.enabledAdd(); - dockerPlugin.setEnableAdd(enableAdd); - if (enableAdd) - { - dockerPlugin.setEnableRemove(false); - document.body.style.cursor = 'pointer'; - } - else - { - document.body.style.cursor = 'default'; - } - }, - - removeBendPoint: function (services) { - - // Show the tutorial the first time - FLOWABLE_EDITOR_TOUR.sequenceFlowBendpoint(services.$scope, services.$translate, services.$q, true); - - var dockerPlugin = FLOWABLE.TOOLBAR.ACTIONS._getOryxDockerPlugin(services); - - var enableRemove = !dockerPlugin.enabledRemove(); - dockerPlugin.setEnableRemove(enableRemove); - if (enableRemove) - { - dockerPlugin.setEnableAdd(false); - document.body.style.cursor = 'pointer'; - } - else - { - document.body.style.cursor = 'default'; - } - }, - - /** - * Helper method: fetches the Oryx Edit plugin from the provided scope, - * if not on the scope, it is created and put on the scope for further use. - * - * It's important to reuse the same EditPlugin while the same scope is active, - * as the clipboard is stored for the whole lifetime of the scope. - */ - _getOryxEditPlugin: function (services) { - var $scope = services.$scope; - var editorManager = services.editorManager; - if ($scope.oryxEditPlugin === undefined || $scope.oryxEditPlugin === null) { - $scope.oryxEditPlugin = new ORYX.Plugins.Edit(editorManager.getEditor()); - } - return $scope.oryxEditPlugin; - }, - - zoomIn: function (services) { - FLOWABLE.TOOLBAR.ACTIONS._getOryxViewPlugin(services).zoom([1.0 + ORYX.CONFIG.ZOOM_OFFSET]); - }, - - zoomOut: function (services) { - FLOWABLE.TOOLBAR.ACTIONS._getOryxViewPlugin(services).zoom([1.0 - ORYX.CONFIG.ZOOM_OFFSET]); - }, - - zoomActual: function (services) { - FLOWABLE.TOOLBAR.ACTIONS._getOryxViewPlugin(services).setAFixZoomLevel(1); - }, - - zoomFit: function (services) { - FLOWABLE.TOOLBAR.ACTIONS._getOryxViewPlugin(services).zoomFitToModel(); - }, - - alignVertical: function (services) { - FLOWABLE.TOOLBAR.ACTIONS._getOryxArrangmentPlugin(services).alignShapes([ORYX.CONFIG.EDITOR_ALIGN_CENTER]); - }, - - alignHorizontal: function (services) { - FLOWABLE.TOOLBAR.ACTIONS._getOryxArrangmentPlugin(services).alignShapes([ORYX.CONFIG.EDITOR_ALIGN_MIDDLE]); - }, - - sameSize: function (services) { - FLOWABLE.TOOLBAR.ACTIONS._getOryxArrangmentPlugin(services).alignShapes([ORYX.CONFIG.EDITOR_ALIGN_SIZE]); - }, - - help: function (services) { - FLOWABLE_EDITOR_TOUR.gettingStarted(services.$scope, services.$translate, services.$q); - }, - - /** - * Helper method: fetches the Oryx View plugin from the provided scope, - * if not on the scope, it is created and put on the scope for further use. - */ - _getOryxViewPlugin: function (services) { - var $scope = services.$scope; - var editorManager = services.editorManager; - if ($scope.oryxViewPlugin === undefined || $scope.oryxViewPlugin === null) { - $scope.oryxViewPlugin = new ORYX.Plugins.View(editorManager.getEditor()); - } - return $scope.oryxViewPlugin; - }, - - _getOryxArrangmentPlugin: function (services) { - var $scope = services.$scope; - var editorManager = services.editorManager; - if ($scope.oryxArrangmentPlugin === undefined || $scope.oryxArrangmentPlugin === null) { - $scope.oryxArrangmentPlugin = new ORYX.Plugins.Arrangement(editorManager.getEditor()); - } - return $scope.oryxArrangmentPlugin; - }, - - _getOryxDockerPlugin: function (services) { - var $scope = services.$scope; - var editorManager = services.editorManager; - if ($scope.oryxDockerPlugin === undefined || $scope.oryxDockerPlugin === null) { - $scope.oryxDockerPlugin = new ORYX.Plugins.AddDocker(editorManager.getEditor()); - } - return $scope.oryxDockerPlugin; - } - } -}; - -/** Custom controller for the save dialog */ -angular.module('flowableModeler').controller('SaveModelCtrl', [ '$rootScope', '$scope', '$http', '$route', '$location', 'editorManager', - function ($rootScope, $scope, $http, $route, $location, editorManager) { - - if (editorManager.getCurrentModelId() != editorManager.getModelId()) { - editorManager.edit(editorManager.getModelId()); - } - - var modelMetaData = editorManager.getBaseModelData(); - - var description = ''; - if (modelMetaData.description) { - description = modelMetaData.description; - } - - var saveDialog = { - 'name' : modelMetaData.name, - 'key' : modelMetaData.key, - 'description' : description, - 'newVersion' : false, - 'comment' : '' - }; - - $scope.saveDialog = saveDialog; - - $scope.status = { - loading: false - }; - - $scope.close = function () { - $scope.$hide(); - }; - - $scope.saveAndClose = function () { - $scope.save(function() { - if (editorManager.getStencilData()) { - var stencilNameSpace = editorManager.getStencilData().namespace; - if (stencilNameSpace !== undefined && stencilNameSpace !== null && stencilNameSpace.indexOf('cmmn1.1') !== -1) { - $location.path("/casemodels"); - return; - } else if (stencilNameSpace !== undefined && stencilNameSpace !== null && stencilNameSpace.indexOf('dmn1.2') !== -1) { - $location.path("/decision-services"); - return; - } - } - $location.path('/processes'); - }); - }; - - $scope.save = function (successCallback) { - - if (!$scope.saveDialog.name || $scope.saveDialog.name.length == 0 || - !$scope.saveDialog.key || $scope.saveDialog.key.length == 0) { - - return; - } - - // Indicator spinner image - $scope.status = { - loading: true - }; - - modelMetaData.name = $scope.saveDialog.name; - modelMetaData.key = $scope.saveDialog.key; - modelMetaData.description = $scope.saveDialog.description; - - var json = editorManager.getModel(); - - var params = { - modeltype: modelMetaData.model.modelType, - json_xml: JSON.stringify(json), - name: $scope.saveDialog.name, - key: $scope.saveDialog.key, - description: $scope.saveDialog.description, - newversion: $scope.saveDialog.newVersion, - comment: $scope.saveDialog.comment, - lastUpdated: modelMetaData.lastUpdated - }; - - if ($scope.error && $scope.error.isConflict) { - params.conflictResolveAction = $scope.error.conflictResolveAction; - if ($scope.error.conflictResolveAction === 'saveAs') { - params.saveAs = $scope.error.saveAs; - } - } - - // Update - $http({ method: 'POST', - data: params, - ignoreErrors: true, - headers: {'Accept': 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, - transformRequest: function (obj) { - var str = []; - for (var p in obj) { - str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); - } - return str.join("&"); - }, - url: FLOWABLE.URL.putModel(modelMetaData.modelId)}) - - .success(function (data, status, headers, config) { - editorManager.handleEvents({ - type: ORYX.CONFIG.EVENT_SAVED - }); - $scope.modelData.name = $scope.saveDialog.name; - $scope.modelData.key = $scope.saveDialog.key; - $scope.modelData.lastUpdated = data.lastUpdated; - - $scope.status.loading = false; - $scope.$hide(); - - // Fire event to all who is listening - var saveEvent = { - type: FLOWABLE.eventBus.EVENT_TYPE_MODEL_SAVED, - model: params, - modelId: modelMetaData.modelId, - eventType: 'update-model' - }; - FLOWABLE.eventBus.dispatch(FLOWABLE.eventBus.EVENT_TYPE_MODEL_SAVED, saveEvent); - - // Reset state - $scope.error = undefined; - $scope.status.loading = false; - - // Execute any callback - if (successCallback) { - successCallback(); - } - - }) - .error(function (data, status, headers, config) { - if (status == 409) { - $scope.error = {}; - $scope.error.isConflict = true; - $scope.error.userFullName = data.customData.userFullName; - $scope.error.isNewVersionAllowed = data.customData.newVersionAllowed; - $scope.error.saveAs = modelMetaData.name + "_2"; - } else { - $scope.error = undefined; - $scope.saveDialog.errorMessage = data.message; - } - $scope.status.loading = false; - }); - }; - - $scope.isOkButtonDisabled = function() { - if ($scope.status.loading) { - return false; - } else if ($scope.error && $scope.error.conflictResolveAction) { - if ($scope.error.conflictResolveAction === 'saveAs') { - return !$scope.error.saveAs || $scope.error.saveAs.length == 0; - } else { - return false; - } - } - return true; - }; - - $scope.okClicked = function() { - if ($scope.error) { - if ($scope.error.conflictResolveAction === 'discardChanges') { - $scope.close(); - $route.reload(); - } else if ($scope.error.conflictResolveAction === 'overwrite' - || $scope.error.conflictResolveAction === 'newVersion') { - $scope.save(); - } else if($scope.error.conflictResolveAction === 'saveAs') { - $scope.save(function() { - $rootScope.ignoreChanges = true; // Otherwise will get pop up that changes are not saved. - if (editorManager.getStencilData()) { - var stencilNameSpace = editorManager.getStencilData().namespace; - if (stencilNameSpace !== undefined && stencilNameSpace !== null && stencilNameSpace.indexOf('cmmn1.1') !== -1) { - $location.path("/casemodels"); - return; - } - } - $location.path('/processes'); - }); - } - } - }; - -}]); - -angular.module('flowableModeler').controller('ValidateModelCtrl',['$scope', '$http', 'editorManager', - function ($scope, $http, editorManager) { - - var editor = editorManager.getEditor(); - var model = editorManager.getModel(); - - $scope.status = { - loading: true - }; - - $scope.model = { - errors: [] - }; - - $scope.errorGrid = { - data: $scope.model.errors, - headerRowHeight: 28, - enableRowSelection: true, - enableRowHeaderSelection: false, - multiSelect: false, - modifierKeysToMultiSelect: false, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [ - {field: 'activityName', displayName: 'Name', width:125}, - {field: 'defaultDescription', displayName: 'Description'}, - {field: 'warning', displayName: 'Critical', cellTemplate:'editor-app/configuration/properties/errorgrid-critical.html', width: 100} - ] - }; - - $scope.errorGrid.onRegisterApi = function(gridApi) { - //set gridApi on scope - $scope.gridApi = gridApi; - gridApi.selection.on.rowSelectionChanged($scope, function(row) { - if (row.isSelected) { - editorManager.navigateTo(row.entity.activityId); - $scope.$hide(); - } - }); - }; - - $http({ - url: FLOWABLE.URL.validateModel(), - method: 'POST', - cache: false, - headers: { - "Content-Type":"application/json;charset=utf-8" - }, - data: model - - }).then(function(response){ - $scope.status.loading = false; - response.data.forEach(function (row) { - $scope.model.errors.push(row); - }); - - },function(response){ - console.log(response); - }); - } -]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/toolbar.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/toolbar.js deleted file mode 100644 index 978055d7..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/toolbar.js +++ /dev/null @@ -1,187 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -'use strict'; - -var FLOWABLE = FLOWABLE || {}; -FLOWABLE.TOOLBAR_CONFIG = { - "items" : [ - { - "type" : "button", - "title" : "TOOLBAR.ACTION.SAVE", - "cssClass" : "editor-icon editor-icon-save", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.saveModel" - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.VALIDATE", - "cssClass" : "glyphicon glyphicon-ok", - "action": "FLOWABLE.TOOLBAR.ACTIONS.validate" - }, - { - "type" : "separator", - "title" : "", - "cssClass" : "toolbar-separator" - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.CUT", - "cssClass" : "editor-icon editor-icon-cut", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.cut", - "enabled" : false, - "enabledAction" : "element" - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.COPY", - "cssClass" : "editor-icon editor-icon-copy", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.copy", - "enabled" : false, - "enabledAction" : "element" - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.PASTE", - "cssClass" : "editor-icon editor-icon-paste", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.paste", - "enabled" : false - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.DELETE", - "cssClass" : "editor-icon editor-icon-delete", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.deleteItem", - "enabled" : false, - "enabledAction" : "element" - }, - { - "type" : "separator", - "title" : "TOOLBAR.ACTION.SAVE", - "cssClass" : "toolbar-separator" - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.REDO", - "cssClass" : "editor-icon editor-icon-redo", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.redo", - "enabled" : false - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.UNDO", - "cssClass" : "editor-icon editor-icon-undo", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.undo", - "enabled" : false - }, - { - "type" : "separator", - "title" : "TOOLBAR.ACTION.SAVE", - "cssClass" : "toolbar-separator" - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.ALIGNVERTICAL", - "cssClass" : "editor-icon editor-icon-align-vertical", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.alignVertical", - "enabled" : false, - "enabledAction" : "element", - "disableInForm" : true, - "minSelectionCount" : 2 - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.ALIGNHORIZONTAL", - "cssClass" : "editor-icon editor-icon-align-horizontal", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.alignHorizontal", - "enabledAction" : "element", - "enabled" : false, - "disableInForm" : true, - "minSelectionCount" : 2 - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.SAMESIZE", - "cssClass" : "editor-icon editor-icon-same-size", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.sameSize", - "enabledAction" : "element", - "enabled" : false, - "disableInForm" : true, - "minSelectionCount" : 2 - }, - { - "type" : "separator", - "title" : "TOOLBAR.ACTION.SAVE", - "cssClass" : "toolbar-separator", - "disableInForm" : true - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.ZOOMIN", - "cssClass" : "editor-icon editor-icon-zoom-in", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.zoomIn" - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.ZOOMOUT", - "cssClass" : "editor-icon editor-icon-zoom-out", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.zoomOut" - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.ZOOMACTUAL", - "cssClass" : "editor-icon editor-icon-zoom-actual", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.zoomActual" - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.ZOOMFIT", - "cssClass" : "editor-icon editor-icon-zoom-fit", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.zoomFit" - }, - { - "type" : "separator", - "title" : "TOOLBAR.ACTION.SAVE", - "cssClass" : "toolbar-separator", - "disableInForm" : true - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.BENDPOINT.ADD", - "cssClass" : "editor-icon editor-icon-bendpoint-add", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.addBendPoint", - "id" : "add-bendpoint-button", - "disableInForm" : true - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.BENDPOINT.REMOVE", - "cssClass" : "editor-icon editor-icon-bendpoint-remove", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.removeBendPoint", - "id" : "remove-bendpoint-button", - "disableInForm" : true - }, - { - "type" : "separator", - "title": "", - "cssClass" : "toolbar-separator", - "disableInForm" : true - }, - { - "type" : "button", - "title" : "TOOLBAR.ACTION.HELP", - "cssClass" : "glyphicon glyphicon-question-sign", - "action" : "FLOWABLE.TOOLBAR.ACTIONS.help" - } - ], - - "secondaryItems" : [] -}; \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/url-config.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/url-config.js deleted file mode 100644 index 4f897ccd..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/configuration/url-config.js +++ /dev/null @@ -1,41 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -var FLOWABLE = FLOWABLE || {}; - -FLOWABLE.URL = { - - getModel: function(modelId) { - return FLOWABLE.CONFIG.contextModelerRestRoot + '/rest/models/' + modelId + '/editor/json?version=' + Date.now(); - }, - - getStencilSet: function() { - return FLOWABLE.CONFIG.contextModelerRestRoot + '/rest/stencil-sets/editor?version=' + Date.now(); - }, - - getCmmnStencilSet: function() { - return FLOWABLE.CONFIG.contextModelerRestRoot + '/rest/stencil-sets/cmmneditor?version=' + Date.now(); - }, - - getDmnStencilSet: function() { - return FLOWABLE.CONFIG.contextModelerRestRoot + '/rest/stencil-sets/dmneditor?version=' + Date.now(); - }, - - - putModel: function(modelId) { - return FLOWABLE.CONFIG.contextModelerRestRoot + '/rest/models/' + modelId + '/editor/json'; - }, - - validateModel: function(){ - return FLOWABLE.CONFIG.contextModelerRestRoot + '/rest/model/validate'; - } -}; \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/css/style.css b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/css/style.css deleted file mode 100644 index 0c12f01a..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/css/style.css +++ /dev/null @@ -1,1210 +0,0 @@ -@font-face { - font-family: 'ActivitiModeler'; - src: url('../fonts/activiti-admin-webfont.eot'); - src: url('../fonts/activiti-admin-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/activiti-admin-webfont.woff') format('woff'), - url('../fonts/activiti-admin-webfont.ttf') format('truetype'), - url('../fonts/activiti-admin-webfont.svg#activitimodelerregular') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'FontAwesome'; - src: url('../fonts/fontawesome-webfont.eot?v=4.3.0'); - src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} - -.row-no-gutter .col-xs-9, -.row-no-gutter .col-xs-12 { - padding-left: 0px; - padding-right: 0px; - z-index: 50; -} - -.row-no-gutter .col-xs-3 { - padding-left: 0px; - padding-right: 0px; - z-index: 100; -} - -.editor-item-picker { - height: 400px; - max-height: 400px; - min-height: 400px; - overflow: auto; -} - -.editor-item-picker-component { - height: 185px; - max-height: 185px; - overflow: hidden; -} - -.editor-toolbar { - padding-left: 5px; -} - -.editor-toolbar > .btn-group { - margin: 12px 15px 0px 0px; -} - -.editor-toolbar > .btn-group.pull-right { - margin: 0; -} - -.editor-toolbar .btn.btn-inverse { - font-size: 24px; - color: #FFFFFF; - border-color: rgba(0, 0, 0, 0); - padding: 3px 6px 0px 6px; - box-shadow: none; - text-shadow: none; - text-align: center; - border: none; - margin: 0px 0px 0px 5px; - height: 36px; - min-width: 36px; -} - -.editor-toolbar .btn.btn-inverse.pressed { - background-color: #287d92; - color: #174753; -} - -.editor-toolbar .btn.btn-inverse.disabled, .editor-toolbar .btn.btn-inverse[disabled], .editor-toolbar .btn.btn-inverse[disabled]:active, .editor-toolbar .btn.btn-inverse[disabled]:hover { - background-color: #668b94; - border-color: #668b94; -} - -.editor-toolbar .btn.btn-inverse.separator { - background: transparent; - padding: 4px 5px 0px 5px; - width: 1px; - min-width: 1px; -} - -.editor-toolbar .toolbar-separator { - background: #a4acb9; - width: 1px; - height: 30px; -} - -.stencils { - border-right: 1pt solid #c7cacd; - overflow: auto; - z-index: 5000; -} - -.stencils ul { - padding-left: 0; -} - -.stencils > div { - margin-top: 10px; -} - -.stencil-group { - list-style: none; - list-style-position: outside; - margin: 0px 15px 0px 0px; -} - -.stencil-group > li { - list-style: none; - list-style-position: outside; - margin: 0px 0px 5px 15px; - background-color: #ffffff; - font-family: Arial, Regular; - font-size: 14px; - color: #323437; -} - -.stencil-group > li > span { - margin-left: 5px; - padding-top: 5px; - padding-bottom: 5px; - display: block; - cursor: pointer; -} - -.stencil-group > li > span > i { - font-size: 12px; - line-height: 17px; -} - -.stencil-group > li > ul { - list-style: none; - list-style-position: inside; - background-color: transparent; - margin: 0px; - overflow: hidden; - padding-left: 20px; -} - -.stencil-group.collapsed > li { - color: #000000; -} - -.stencil-group.collapsed > li > ul { - max-height: 0px; - padding-top: 0; - padding-bottom: 0; -} - -.stencil-group-non-root > li { - background-color: #ffffff; -} - -.stencil-item { - cursor: pointer; - padding: 5px; -} - -.root-stencil-item { - margin: 0 0 0 15px; - font-family: Arial, Regular; - font-size: 14px; -} - -.ui-draggable.stencil-item.stencil-item-dragged { - display: block; - text-overflow: ellipsis; - white-space: nowrap; -} - -/* Modeling Canvas --------------------------------- */ -div.canvas-wrapper { - overflow: auto; - background-color: #F8F8F8; -} - -.canvas_resize_indicator i { - font-size: 15px; - color: #ffffff; - cursor: pointer; -} - -.canvas_resize_indicator.N, .canvas_resize_indicator.S, .canvas_resize_indicator.E, .canvas_resize_indicator.W { - background: #5fbcd3; - height: 17px; - width: 17px; - text-align: center; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -#canvas-grow-N.canvas_resize_indicator, #canvas-shrink-S.canvas_resize_indicator { - margin: 0; - top: auto; -} - -#canvas-grow-S.canvas_resize_indicator, #canvas-shrink-N.canvas_resize_indicator { - margin: 0; - bottom: auto; -} - -#canvas-grow-E.canvas_resize_indicator, #canvas-shrink-W.canvas_resize_indicator { - margin: 0; - right: auto; -} - -#canvas-grow-W.canvas_resize_indicator, #canvas-shrink-E.canvas_resize_indicator { - margin: 0; - left: auto; -} - -.x-panel-body.x-panel-body-noheader.x-panel-body-noborder, .ORYX_Editor x-panel { - background-color: #F8F8F8; -} - -.canvas-message { - position: absolute; - top: 60px; - right: 10px; - background: transparent; - font-size: 10pt; -} - -div.propertySection { - height: 250px; - background-color: #e8edf1; - margin-bottom: 0px; -} - -.selected-item-title { - font-size: 25px; - font-weight: bold; - padding: 8px 0 8px 8px; - border-bottom: 1px solid #a4acb9; - cursor: pointer; -} - -.selected-item-title a { - display: block; - color: #1a1a1a; -} - -.selected-item-title .glyphicon { - line-height: 25px; - font-size: 14px; -} - -.selected-item-title a:hover, .selected-item-title a:focus { - color: #1a1a1a; - text-decoration: none; -} - -.selected-item-section > div > .pull-right { - line-height: 50px; - margin: 0px 10px; - font-size: 14px; -} - -.selected-item-body .property-row { - float: left; - width: 50%; - border: 0; - margin: 0; - padding: 0; - font-size: 13px; - overflow: hidden; -} - -.selected-item-body .property-row:hover { - background-color: #d7dfe6; -} - -.selected-item-body { - padding: 0; - overflow: auto; - height: 199px; -} - -.selected-item-body > div { - overflow: hidden; - margin: 5px 20px; -} - -.property-row > span { - display: block; - float: left; - margin: 2px 2%; - padding: 0; - min-height: 25px; -} - -.property-row span.value { - cursor: pointer; - width: 46%; - padding: 0; - margin: 0; -} - -.property-row span.value:hover { - cursor: pointer; -} - -.property-row span.title { - font-size: 13px; - font-weight: bold; - width: 46%; -} - -.property-row span.title-removed { - font-size: 13px; - font-weight: normal; - width: 46%; -} - -.propertySection.collapsed { - max-height: 50px; - height: 50px; - overflow: hidden; -} - -.propertySection.collapsed .selected-item-title { - border: none; -} - -.property-row input[type="text"] { - height: 25px; - margin: 2px 0; - padding: 0px 5px; - width: 100%; - outline: none; - border: none !important; - box-shadow: none !important; -} - -.default-grid { - border: 1px solid rgb(212, 212, 212); - width: 100%; - height: 300px; - margin-bottom: 10px; -} - -.step-editor-inline-grid { - border: 1px solid rgb(212, 212, 212); - width: 550px; - height: 150px; - margin-bottom: 10px; -} - -.kis-listener-grid { - border: 1px solid rgb(212, 212, 212); - width: 100%; - height: 200px; - margin-bottom: 10px; -} - -.kis-field-grid { - border: 1px solid rgb(212, 212, 212); - width: 100%; - height: 150px; - margin-bottom: 10px; -} - -.saving-text { - display: table; - margin: 0 auto; - padding: 20px 0 0px 0; -} - -.form-property-checkbox { - margin: 0; -} - -/* Oryx overrides --------------------------------- */ -ul.x-menu-list { - list-style: none; - list-style-position: inside; - width: 200px; - background-color: #FFFFFF; - border: 1px solid #E1E2E5; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - padding: 3px; -} - -img.x-menu-item-icon { - width: auto; - height: auto; - margin-right: 5px; -} - -li.x-menu-list-item { - margin: 3px 0px; -} - -li.x-menu-list-item.x-menu-item-active { - background-color: #EFEFEF; -} - -li.x-menu-list-item a { - color: #000000; -} - -li.x-menu-list-item.x-menu-item-active a { - text-decoration: none; -} - -.sequence-flow-order-element { - margin: 12px 0 12px 0; -} - -/* Editor icon font */ -.editor-icon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'ActivitiModeler'; - font-style: normal; - font-weight: 400; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.editor-icon-save:before { - content: 'a'; -} - -.editor-icon-edit:before { - content: 'b'; -} - -.editor-icon-cut:before { - content: 'c'; -} - -.editor-icon-copy:before { - content: 'd'; -} - -.editor-icon-paste:before { - content: 'e'; -} - -.editor-icon-delete:before { - content: 'f'; -} - -.editor-icon-redo:before { - content: 'h'; -} - -.editor-icon-undo:before { - content: 'g'; -} - -.editor-icon-same-size:before { - content: 'i'; -} - -.editor-icon-zoom-in:before { - content: 'k'; -} - -.editor-icon-zoom-out:before { - content: 'l'; -} - -.editor-icon-zoom-actual:before { - content: 'm'; -} - -.editor-icon-zoom-fit:before { - content: 'j'; -} - -.editor-icon-bendpoint-add:before { - content: 'n'; -} - -.editor-icon-bendpoint-remove:before { - content: 'o'; -} - -.editor-icon-align-horizontal:before { - content: 'p'; -} - -.editor-icon-align-vertical:before { - content: 'q'; -} - -.formbuilder-validation-error-icon { - position: relative; - top: -2px; - margin-right: 5px; -} - -.modal-dialog.modal-maxheight { - max-height: 724px; - overflow-y: auto; -} - -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); -} - -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; -} - -.fa-2x { - font-size: 2em; -} - -.fa-3x { - font-size: 3em; -} - -.fa-4x { - font-size: 4em; -} - -.fa-5x { - font-size: 5em; -} - -.fa-rocket:before { - content: "\f135"; -} - -.fa-share:before { - content: "\f064"; -} - -.step-types .fa { - margin-right: 6px; -} - -.decision-table-grid { - border: 1px solid rgb(212, 212, 212); - width: 100%; - height: 372px; - margin-bottom: 10px; -} - -.decision-table .btn-success { - color: #fff; - background-color: #5cb85c; -} - -.decision-table .btn-success:hover, -.decision-table .btn-success:focus { - background-color: #419641; - background-position: 0 -15px; -} - -.decision-table-grid .ui-grid-header-viewport, .decision-table-grid .ui-grid-header-canvas { - height: 70px; -} - -.decision-table-grid .header-expression { - height: 70px; - border-bottom: 5px solid rgb(43, 37, 37); - border-bottom: 5px solid rgba(43, 37, 37, 0.22); -} - -.decision-table-grid .header-input-expression { - /* Fallback for web browsers that doesn't support RGBa */ - background: rgb(54, 167, 196); - /* RGBa with 0.6 opacity */ - background: rgba(54, 167, 196, 0.6); - /*background-color: #668b94;*/ - color: #ffffff; - font-size: 14px; -} - -.decision-table-grid .header-output-expression { - border-left: 5px solid rgb(212, 212, 212); - /* Fallback for web browsers that doesn't support RGBa */ - background: rgb(92, 184, 92); - /* RGBa with 0.6 opacity */ - background: rgba(92, 184, 92, 0.6); - color: #ffffff; - font-size: 14px; -} - -.decision-table-grid .header-output-expression ~ .header-output-expression { - border-left: none; -} - -.decision-table-grid .cell-input-expression { - /* Fallback for web browsers that doesn't support RGBa */ - background: rgb(54, 167, 196); - /* RGBa with 0.6 opacity */ - background: rgba(54, 167, 196, 0.1); -} - -.decision-table-grid .cell-output-expression { - border-left: 5px solid rgb(212, 212, 212); - /* Fallback for web browsers that doesn't support RGBa */ - background: rgb(92, 184, 92); - /* RGBa with 0.6 opacity */ - background: rgba(92, 184, 92, 0.1); - border-left: 3px solid rgb(212, 212, 212); -} - -.decision-table-grid .cell-output-expression ~ .cell-output-expression { - border-left: none; -} - -.decision-table-grid { - font-size: 13px; - line-height: 20px -} - -.decision-table-grid .ui-grid-header-cell-wrapper .ui-grid-selection-row-header-buttons { - display: none; -} - -.decision-table-output-expression-input, .decision-table-output-expression-input:active, .decision-table-output-expression-input:focus, .decision-table-output-expression-input:visited { - background-color: inherit; -} - -.decision-table-output-expression-input:hover { - background-color: #287d92; -} - -.decision-table-input-expression-input .caret { - display: none; -} - -.decision-table-grid .ui-grid-row.ui-grid-row-selected .cell-input-expression > [ui-grid-row] > .ui-grid-cell { - background: rgba(92, 184, 92, 0.4); -} - -.decision-table-grid .ui-grid-row:nth-child(odd) .ui-grid-cell.cell-output-expression, -.decision-table-grid .ui-grid-row:nth-child(even) .ui-grid-cell.cell-output-expression { - background: rgb(92, 184, 92); - /* RGBa with 0.6 opacity */ - background: rgba(92, 184, 92, 0.1); - border-bottom: 1px solid rgba(43, 37, 37, 0.22); -} - -.decision-table-grid .ui-grid-row.ui-grid-row-selected:nth-child(odd) .ui-grid-cell.cell-output-expression, -.decision-table-grid .ui-grid-row.ui-grid-row-selected:nth-child(even) .ui-grid-cell.cell-output-expression { - background: rgba(92, 184, 92, 0.2); -} - -.decision-table-grid .ui-grid-row:nth-child(odd) .ui-grid-cell.cell-input-expression, -.decision-table-grid .ui-grid-row:nth-child(even) .ui-grid-cell.cell-input-expression { - background: rgb(54, 167, 196); - /* RGBa with 0.6 opacity */ - background: rgba(54, 167, 196, 0.1); - border-bottom: 1px solid rgba(43, 37, 37, 0.22); -} - -.decision-table-grid .ui-grid-row.ui-grid-row-selected:nth-child(odd) .ui-grid-cell.cell-input-expression, -.decision-table-grid .ui-grid-row.ui-grid-row-selected:nth-child(even) .ui-grid-cell.cell-input-expression { - background: rgba(54, 167, 196, 0.2); -} - -.decision-table-grid .ui-grid-render-container-left .ui-grid-header-cell { - /* Fallback for web browsers that doesn't support RGBa */ - background: rgb(54, 167, 196); - /* RGBa with 0.6 opacity */ - background: rgba(54, 167, 196, 0.6); - /*background-color: #668b94;*/ - color: #ffffff; - font-size: 14px; - - border-bottom: 5px solid rgb(43, 37, 37); - border-bottom: 5px solid rgba(43, 37, 37, 0.22); - -} - -.decision-table-grid .ui-grid-pinned-container.ui-grid-pinned-container-left .ui-grid-header-cell:last-child { - border-top-width: 0px; - border-right-width: 0px; - border-left-width: 0px; - border-bottom: 5px solid rgb(43, 37, 37); - border-bottom: 5px solid rgba(43, 37, 37, 0.22); -} - -.decision-table-grid .ui-grid-cell-focus { - outline: 0; - background-color: transparent; -} - -.decision-table .ui-grid-row-selected .customRowHeader { - background-color: #c9dde1; - color: #ffffff; - border-bottom: 1px solid rgba(43, 37, 37, 0.22); -} - -.decision-table .ui-grid-cell-contents { - position: relative; -} - -.decision-table .ui-grid-cell-contents-empty::before { - content: "-"; - text-align: center; - width: 100%; - position: absolute; - height: 100%; - color: gray; -} - -.decision-table .ui-grid-cell-contents .show-error-icon { - display: none; -} - -.decision-table .ui-grid-cell-contents .edit-icon { - position: absolute; - right: 0; -} - -.decision-table .ui-grid-cell-contents.ui-grid-cell-contents-has-error { - padding-left: 20px; -} - -.decision-table .decision-table-grid-wrapper { - position: relative; - margin-top: 20px; - width: 100%; -} - -.decision-table .decision-table-grid-wrapper > span { - display: none; -} - -.decision-table .dropdown { - display: inherit !important; -} - -.decision-table .dropdown-menu > li.danger > a:hover { - background: #d35f5f; -} - -.decision-table .decision-table-grid-wrapper .ui-grid-header-cell .ui-grid-cell-contents .text-center { - min-height: 20px; -} - -.decision-table .decision-table-grid-wrapper.ui-grid-cell-contents-has-error > .decision-table-grid { - border: 1px solid #a94442; -} - -.decision-table .ui-grid-cell-contents.ui-grid-cell-contents-has-error .contents-value, -.decision-table .ui-grid-cell-contents.ui-grid-cell-contents-has-error .text-center { - color: #a94442; -} - -.decision-table .ui-grid-cell-contents.ui-grid-cell-contents-has-error .show-error-icon, -.decision-table .decision-table-grid-wrapper.ui-grid-cell-contents-has-error > .show-error-icon { - display: block; - position: absolute; - top: 0; - left: 0; - padding: 3px; - cursor: pointer; - z-index: 1; -} - -.decision-table .row { - margin-left: -10px; - margin-right: -10px; -} - -hot-table { - overflow: hidden; -} - -hot-table .column-header { - -} - -hot-table .column-header.label { - font-size: 14px; -} - -#decisionTableGrid .grid-controls { - margin-top: 40px; -} - -.decision-name-container { - width: 340px; - height: 50px; - border-left: 1px solid rgba(51, 51, 51, 0.3); - border-top: 1px solid rgba(51, 51, 51, 0.3); - border-right: 1px solid rgba(51, 51, 51, 0.3); -} - -.decision-name-container .decision-name { - padding: 12px; - font-size: 15px; - font-weight: bold; -} - -#decisionTableGrid th .input-header { - font-size: 16px; - display: inline-block; - margin: 0 auto 0 -20%; - - max-width: 60%; - min-height: 90px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -#decisionTableGrid th .output-header { - font-size: 16px; - display: inline-block; - margin: 0 auto; - - max-width: 150px; - min-height: 90px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -#decisionTableGrid th .input-header .header-label, #decisionTableGrid th .output-header .header-label { - font-size: 15px; - font-weight: 600; -} - -#decisionTableGrid th .input-header a, #decisionTableGrid th .output-header a { - text-decoration: underline; -} - -#decisionTableGrid th .input-header .header-variable, #decisionTableGrid th .output-header .header-variable { - font-size: 14px; - text-align: center; -} - -#decisionTableGrid th .input-header .header-variable-type, #decisionTableGrid th .output-header .header-variable-type { - font-size: 13px; - font-style: italic; - text-align: center; -} - -#decisionTableGrid th .input-header .header-entries, #decisionTableGrid th .output-header .header-entries { - font-size: 12px; - font-weight: lighter; - font-style: normal; - text-align: center; -} - -#decisionTableGrid th .header-add-new-expression { - float: right; - position: relative; - padding-right: 15px; - top: 10px; - font-size: 15px; -} - -#decisionTableGrid th .header-remove-expression { - float: left; - position: relative; - top: 10px; - font-size: 15px; - padding-left: 15px; -} - -#decisionTableGrid tr .input-operator-cell { - text-align: center; - min-width: 70px; !important; -} - -#decisionTableGrid td.htInvalid { - background-color: rgba(255, 76, 66, 0.33) !important; -} - -#decisionTableGrid .selectedRow { - background: rgb(0, 140, 186); - color: rgb(250, 250, 250) -} - -#decision-table-editor, #read-only-decision-table-editor { - background-color: rgba(243, 243, 243, 0.5); -} - -#decisionTableGrid .input-operator-container { - width: 45px; - float: left; - border: 1px solid rgb(212, 212, 212); - padding: 1px; - margin-right: 5px; - text-align: center; -} - -#decisionTableGrid .input-expression-container { - overflow: hidden; - border: 1px solid rgb(212, 212, 212); - padding: 1px; -} - -#decisionTableGrid .input-expression-container { - overflow: hidden; - border: 1px solid rgb(212, 212, 212); - padding: 1px; - clear: right; -} - -#decisionTableGrid .input-expression-input { - overflow: hidden; - border: none; - width: 100%; -} - -#decisionTableGrid .input-container { - width: 100%; - margin: 0 auto; - overflow: hidden; - padding: 4px 0 4px 0; -} - -#decisionTableGrid .input-operator-select { - width: 45px; - border: none; - box-shadow: none; - background: transparent none; - -webkit-appearance: none; -} - -#decisionTableGrid .input-operator-select :focus { - outline: none; -} - -#decisionTableGrid .input-expression-input :focus { - outline: none; -} - -#decisionTableGrid .input-operator-select.editor :focus { - outline: none; -} - -#decisionTableGrid th.input-expression-header, #decisionTableGrid th.input-operator-header { - background-color: rgba(54, 167, 196, 0.1); - border-bottom: 4px double rgba(51, 51, 51, 0.7); -} - -#decisionTableGrid th.input-expression-header { - /*border-left: 1px solid rgba(54, 167, 196, 0.1);*/ - border-left-style: hidden; -} - -#decisionTableGrid th.input-expression-header.last, #decision-table-editor td.last, #decisionTableGrid td.last { - border-right: 4px double rgba(51, 51, 51, 0.7); -} - -#decisionTableGrid th.output-header.first, #decision-table-editor td.first, #decisionTableGrid td.first { - border-left: 4px double rgba(51, 51, 51, 0.7); -} - -#decisionTableGrid th.output-header { - background-color: rgba(243, 243, 243, 1); - border-bottom: 4px double rgba(51, 51, 51, 0.7); -} - -#decisionTableGrid th.input-operator-header { - border-right-style: hidden; -} - -#decisionTableGrid .hit-policy-container { - position:fixed; - width: 50px; - background-color: #f9f9f9; - z-index: 1035; -} - -#decisionTableGrid .hit-policy-header { - margin-top: 5px; - font-size: 15px; - font-weight: 600; - cursor: pointer; - text-decoration: underline; - color: #428bca; -} - -.decision-table-grid-wrapper .handsontable-container { - border-left: 1px solid rgba(51, 51, 51, 0.3); - border-bottom: 1px solid rgba(51, 51, 51, 0.3); - border-right: 1px solid rgba(51, 51, 51, 0.3); -} - -#decisionTableGrid .handsontable th:first-child { - border-left: none; -} - -#decisionTableGrid .handsontable.htRemoveRow th.htRemoveRow { - text-align: center; -} - -#decisionTableGrid .handsontable.htRemoveRow th.htRemoveRow .btn { - background-color: #898989; - border-radius: 20px; - padding: 2px 0 0; - display: none; - color: #FFF; - cursor: pointer; - font-size: 14px; - font-weight: 300; - line-height: 1; - margin: 0 auto; - width: 20px; - height: 18px; -} - -#decisionTableGrid .custom-expression-operator * { - visibility: hidden; -} - -#decisionTableGrid .custom-expression-operator { - color: transparent; -} - -#decision-table-allowed-values { - font-size: 14px; -} - -#decision-table-allowed-values tr td:last-of-type { - border: none; - padding-left: 5px; -} - -#decision-table-allowed-values .wtBorder { - display: none !important; -} - -#decision-table-allowed-values td.highlight { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,.6); -} - -#decision-table-allowed-values td.remove_container.highlight { - border: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -.handsontable.htRemoveRow th.htRemoveRow .btn:hover { - background-color: #777; -} - -.ui-grid .ui-grid-render-container-body .ui-grid-viewport { - overflow-x: auto !important; -} - -.validationGrid { - border: 1px solid rgb(212, 212, 212); - height: 300px; -} - -.ng-hide-add-active, .ng-hide-remove { - display: inherit !important; -} - -.ng-hide:not(.ng-animate) { - display: none !important; -} - -.flowable-status { - border: 1px solid #3c3c3c; - margin: 2px; - height: 28px; - line-height: 20px; -} - -.flowable-warning { - text-align: center; - background: yellow; - height: 100%; -} - -.flowable-critical { - text-align: center; - background: #990000; - color: white; - height: 100%; -} - -.actions { - padding-top: 1px; - padding-left: 2px; -} - -/** collapse stencils **/ -#paletteSectionFooter { - height: 50px; - text-align: center; - background-color: #e8edf1; - border-top: 1px solid #a4acb9; - border-right: 1px solid #a4acb9; - cursor: pointer; - bottom: 0; -} - -#paletteSectionFooter i { - line-height: 50px !important; -} - -#paletteSectionOpen { - width: 30px; - height: 50px; - background-color: #e8edf1; - text-align: center; - bottom: 1px; - position: fixed; - z-index: 101; - border-top: 1px solid #a4acb9; - border-right: 1px solid #a4acb9; - cursor: pointer; - left: 0; -} - -#paletteSectionOpen i { - line-height: 50px !important; -} - -.hidden { - display: none -} - -#paletteHelpWrapper { - float: left; - width: 300px; - transition: 0.3s width; -} - -.close { - width: 0px !important; -} - -#contentCanvasWrapper { - padding-left: 300px; - transition: 0.3s padding-left; -} - -.collapsedCanvasWrapper { - padding-left: 0px !important; -} - -/**Process navigator */ -#process-treeview-wrapper { - height: 200px; - background: #f3f3f3; - border-right: 1px solid #bbbbbb; - overflow-y: auto; -} - -.process-treeview-header { - background: #2980b9; - color: white; - border: 1px solid #bbbbbb; - padding: 2px; - padding-left: 5px; - font-size: 14px; - font-weight: bold; -} - -.process-treeview-process-title { - padding: 5px; - font-weight: bold; -} - -.process-treeview { - margin-top: 5px; -} - -.process-treeview-list { - padding: 0 10px; - list-style-type: none; -} - -.process-treeview-list-item:hover { - cursor: pointer; - font-weight: bolder; - font-style: italic; -} - -.process-treeview-body { - -} - -.current-process { - border: 1px solid green; -} diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/define-data-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/define-data-controller.js deleted file mode 100644 index db3a403e..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/define-data-controller.js +++ /dev/null @@ -1,105 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Controller for morph shape selection - */ - -var FlowableDefineDataCtrl = [ '$rootScope', '$scope', 'dialog', '$timeout', '$translate', function($rootScope, $scope, dialog, $timeout, $translate) { - - $scope.definedDataItems = []; - $scope.selectedDataItems = []; - - // Config for grid - $scope.gridOptions = { - data: 'definedDataItems', - enableRowSelection: true, - headerRowHeight: 28, - multiSelect: false, - keepLastSelected : false, - selectedItems: $scope.selectedDataItems, - enableHorizontalScrollbar: 0, - enableColumnMenus: false, - enableSorting: false, - columnDefs: [{ field: 'name', displayName: 'Name'}, - { field: 'value', displayName: 'Value'}] - }; - - // Click handler for add button - $scope.addNewDataItem = function() { - $scope.definedDataItems.push({ name : '', - value : ''}); - }; - - // Click handler for remove button - $scope.removeDataItem = function() { - if ($scope.selectedDataItems.length > 0) { - var index = $scope.definedDataItems.indexOf($scope.selectedDataItems[0]); - $scope.gridOptions.selectItem(index, false); - $scope.definedDataItems.splice(index, 1); - - $scope.selectedDataItems.length = 0; - if (index < $scope.definedDataItems.length) { - $scope.gridOptions.selectItem(index + 1, true); - } else if ($scope.definedDataItems.length > 0) { - $scope.gridOptions.selectItem(index - 1, true); - } - } - }; - - // Click handler for up button - $scope.moveDataItemUp = function() { - if ($scope.selectedParameters.length > 0) { - var index = $scope.definedDataItems.indexOf($scope.selectedDataItems[0]); - if (index != 0) { // If it's the first, no moving up of course - // Reason for funny way of swapping, see https://github.com/angular-ui/ng-grid/issues/272 - var temp = $scope.definedDataItems[index]; - $scope.definedDataItems.splice(index, 1); - $timeout(function(){ - $scope.definedDataItems.splice(index + -1, 0, temp); - }, 100); - - } - } - }; - - // Click handler for down button - $scope.moveDataItemDown = function() { - if ($scope.selectedParameters.length > 0) { - var index = $scope.definedDataItems.indexOf($scope.selectedDataItems[0]); - if (index != $scope.definedDataItems.length - 1) { // If it's the last element, no moving down of course - // Reason for funny way of swapping, see https://github.com/angular-ui/ng-grid/issues/272 - var temp = $scope.definedDataItems[index]; - $scope.definedDataItems.splice(index, 1); - $timeout(function(){ - $scope.definedDataItems.splice(index + 1, 0, temp); - }, 100); - - } - } - }; - - $scope.save = function() { - dialog.close(); - }; - - $scope.cancel = function() { - dialog.close(); - }; - - // Close button handler - $scope.close = function() { - dialog.close(); - }; - -}]; \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor-config.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor-config.js deleted file mode 100644 index f8f9acd8..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor-config.js +++ /dev/null @@ -1,27 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -var FLOWABLE = FLOWABLE || {}; - -FLOWABLE.UI_CONFIG = { - 'showRemovedProperties' : false -}; - -FLOWABLE.HEADER_CONFIG = { - 'showAppTitle' : true, - 'showHeaderMenu' : true, - 'showMainNavigation' : true, - 'showPageHeader' : true -}; \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor-controller.js deleted file mode 100644 index bbca8022..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor-controller.js +++ /dev/null @@ -1,465 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -'use strict'; - -/** - * General bootstrap of the application. - */ -angular.module('flowableModeler') - .controller('EditorController', ['$rootScope', '$scope', '$http', '$q', '$routeParams', '$timeout', '$location', '$translate', '$modal', 'editorManager', 'FormBuilderService', - function ($rootScope, $scope, $http, $q, $routeParams, $timeout, $location, $translate, $modal, editorManager, FormBuilderService) { - - $rootScope.editorFactory = $q.defer(); - - $rootScope.forceSelectionRefresh = false; - - $rootScope.ignoreChanges = false; // by default never ignore changes - - $rootScope.validationErrors = []; - - $rootScope.staticIncludeVersion = Date.now(); - - // begin modify by wsp - var authenticationHeaders =FLOWABLE.CONFIG.getHttpRequestAuthenticationHeaders(); - if(authenticationHeaders){ - $http.defaults.headers.common.Authorization=authenticationHeaders.headers.Authorization; - } - // end modify by wsp - - /** - * Initialize the event bus: couple all Oryx events with a dispatch of the - * event of the event bus. This way, it gets much easier to attach custom logic - * to any event. - */ - - - /* Helper method to fetch model from server (always needed) */ - function fetchModel() { - - var modelUrl; - if ($routeParams.modelId) { - modelUrl = FLOWABLE.URL.getModel($routeParams.modelId); - } else { - modelUrl = FLOWABLE.URL.newModelInfo(); - } - - $http({method: 'GET', url: modelUrl}). - success(function (data, status, headers, config) { - $rootScope.editor = new ORYX.Editor(data); - $rootScope.modelData = angular.fromJson(data); - $rootScope.editorFactory.resolve(); - }). - error(function (data, status, headers, config) { - $location.path("/processes/"); - }); - } - - - function initScrollHandling() { - var canvasSection = jQuery('#canvasSection'); - canvasSection.scroll(function() { - - // Hides the resizer and quick menu items during scrolling - - var selectedElements = editorManager.getSelection(); - var subSelectionElements = editorManager.getSubSelection(); - - $scope.selectedElements = selectedElements; - $scope.subSelectionElements = subSelectionElements; - if (selectedElements && selectedElements.length > 0) - { - $rootScope.selectedElementBeforeScrolling = selectedElements[0]; - } - - jQuery('.Oryx_button').each(function(i, obj) { - $scope.orginalOryxButtonStyle = obj.style.display; - obj.style.display = 'none'; - }); - jQuery('.resizer_southeast').each(function(i, obj) { - $scope.orginalResizerSEStyle = obj.style.display; - obj.style.display = 'none'; - }); - jQuery('.resizer_northwest').each(function(i, obj) { - $scope.orginalResizerNWStyle = obj.style.display; - obj.style.display = 'none'; - }); - editorManager.handleEvents({type:ORYX.CONFIG.EVENT_CANVAS_SCROLL}); - }); - - canvasSection.scrollStopped(function(){ - - // Puts the quick menu items and resizer back when scroll is stopped. - - editorManager.setSelection([]); // needed cause it checks for element changes and does nothing if the elements are the same - editorManager.setSelection($scope.selectedElements, $scope.subSelectionElements); - $scope.selectedElements = undefined; - $scope.subSelectionElements = undefined; - - function handleDisplayProperty(obj) { - if (jQuery(obj).position().top > 0) { - obj.style.display = 'block'; - } else { - obj.style.display = 'none'; - } - } - - jQuery('.Oryx_button').each(function(i, obj) { - handleDisplayProperty(obj); - }); - jQuery('.resizer_southeast').each(function(i, obj) { - handleDisplayProperty(obj); - }); - jQuery('.resizer_northwest').each(function(i, obj) { - handleDisplayProperty(obj); - }); - - }); - } - - /** - * Initialize the Oryx Editor when the content has been loaded - */ - if (!$rootScope.editorInitialized) { - - var paletteHelpWrapper = jQuery('#paletteHelpWrapper'); - var paletteSectionFooter = jQuery('#paletteSectionFooter'); - var paletteSectionOpen = jQuery('#paletteSectionOpen'); - var contentCanvasWrapper = jQuery('#contentCanvasWrapper'); - - paletteSectionFooter.on('click', function() { - paletteHelpWrapper.addClass('close'); - contentCanvasWrapper.addClass('collapsedCanvasWrapper'); - paletteSectionOpen.removeClass('hidden'); - }); - - paletteSectionOpen.on('click', function () { - paletteHelpWrapper.removeClass('close'); - contentCanvasWrapper.removeClass('collapsedCanvasWrapper'); - paletteSectionOpen.addClass('hidden'); - }); - - /** - * A 'safer' apply that avoids concurrent updates (which $apply allows). - */ - $rootScope.safeApply = function(fn) { - if (this.$root) { - var phase = this.$root.$$phase; - if(phase == '$apply' || phase == '$digest') { - if(fn && (typeof(fn) === 'function')) { - fn(); - } - } else { - this.$apply(fn); - } - - } else { - this.$apply(fn); - } - }; - - $rootScope.addHistoryItem = function(resourceId) { - var modelMetaData = editorManager.getBaseModelData(); - - var historyItem = { - id: modelMetaData.modelId, - name: modelMetaData.name, - key: modelMetaData.key, - stepId: resourceId, - type: 'bpmnmodel' - }; - - if (editorManager.getCurrentModelId() != editorManager.getModelId()) { - historyItem.subProcessId = editorManager.getCurrentModelId(); - } - - $rootScope.editorHistory.push(historyItem); - }; - - $rootScope.getStencilSetName = function() { - var modelMetaData = editorManager.getBaseModelData(); - if (modelMetaData.model.stencilset.namespace == 'http://b3mn.org/stencilset/cmmn1.1#') { - return 'cmmn1.1'; - } else { - return 'bpmn2.0'; - } - }; - - /** - * Initialize the event bus: couple all Oryx events with a dispatch of the - * event of the event bus. This way, it gets much easier to attach custom logic - * to any event. - */ - - $rootScope.editorFactory.promise.then(function() { - - $rootScope.formItems = undefined; - - FLOWABLE.eventBus.editor = $rootScope.editor; - - var eventMappings = [ - { oryxType : ORYX.CONFIG.EVENT_SELECTION_CHANGED, flowableType : FLOWABLE.eventBus.EVENT_TYPE_SELECTION_CHANGE }, - { oryxType : ORYX.CONFIG.EVENT_DBLCLICK, flowableType : FLOWABLE.eventBus.EVENT_TYPE_DOUBLE_CLICK }, - { oryxType : ORYX.CONFIG.EVENT_MOUSEOUT, flowableType : FLOWABLE.eventBus.EVENT_TYPE_MOUSE_OUT }, - { oryxType : ORYX.CONFIG.EVENT_MOUSEOVER, flowableType : FLOWABLE.eventBus.EVENT_TYPE_MOUSE_OVER }, - { oryxType: ORYX.CONFIG.EVENT_EDITOR_INIT_COMPLETED, flowableType:FLOWABLE.eventBus.EVENT_TYPE_EDITOR_READY}, - { oryxType: ORYX.CONFIG.EVENT_PROPERTY_CHANGED, flowableType: FLOWABLE.eventBus.EVENT_TYPE_PROPERTY_VALUE_CHANGED} - - ]; - - eventMappings.forEach(function(eventMapping) { - editorManager.registerOnEvent(eventMapping.oryxType, function(event) { - FLOWABLE.eventBus.dispatch(eventMapping.flowableType, event); - }); - }); - - // Show getting started if this is the first time (boolean true for use local storage) - // FLOWABLE_EDITOR_TOUR.gettingStarted($scope, $translate, $q, true); - }); - - // Hook in resizing of main panels when window resizes - // TODO: perhaps move to a separate JS-file? - jQuery(window).resize(function () { - - // Calculate the offset based on the bottom of the module header - var offset = jQuery("#editor-header").offset(); - var propSectionHeight = jQuery('#propertySection').height(); - var canvas = jQuery('#canvasSection'); - var mainHeader = jQuery('#main-header'); - - if (offset == undefined || offset === null - || propSectionHeight === undefined || propSectionHeight === null - || canvas === undefined || canvas === null || mainHeader === null) { - return; - } - - if ($rootScope.editor) { - var selectedElements = editorManager.getSelection(); - var subSelectionElements = editorManager.getSelection(); - - $scope.selectedElements = selectedElements; - $scope.subSelectionElements = subSelectionElements; - if (selectedElements && selectedElements.length > 0) { - $rootScope.selectedElementBeforeScrolling = selectedElements[0]; - - editorManager.setSelection([]); // needed cause it checks for element changes and does nothing if the elements are the same - editorManager.setSelection($scope.selectedElements, $scope.subSelectionElements); - $scope.selectedElements = undefined; - $scope.subSelectionElements = undefined; - } - } - - var totalAvailable = jQuery(window).height() - offset.top - mainHeader.height() - 21; - canvas.height(totalAvailable - propSectionHeight); - var footerHeight = jQuery('#paletteSectionFooter').height(); - var treeViewHeight = jQuery('#process-treeview-wrapper').height(); - jQuery('#paletteSection').height(totalAvailable - treeViewHeight - footerHeight); - - // Update positions of the resize-markers, according to the canvas - - var actualCanvas = null; - if (canvas && canvas[0].children[1]) { - actualCanvas = canvas[0].children[1]; - } - - var canvasTop = canvas.position().top; - var canvasLeft = canvas.position().left; - var canvasHeight = canvas[0].clientHeight; - var canvasWidth = canvas[0].clientWidth; - var iconCenterOffset = 8; - var widthDiff = 0; - - var actualWidth = 0; - if (actualCanvas) { - // In some browsers, the SVG-element clientwidth isn't available, so we revert to the parent - actualWidth = actualCanvas.clientWidth || actualCanvas.parentNode.clientWidth; - } - - if (actualWidth < canvas[0].clientWidth) { - widthDiff = actualWidth - canvas[0].clientWidth; - // In case the canvas is smaller than the actual viewport, the resizers should be moved - canvasLeft -= widthDiff / 2; - canvasWidth += widthDiff; - } - - var iconWidth = 17; - var iconOffset = 20; - - var north = jQuery('#canvas-grow-N'); - north.css('top', canvasTop + iconOffset + 'px'); - north.css('left', canvasLeft - 10 + (canvasWidth - iconWidth) / 2 + 'px'); - - var south = jQuery('#canvas-grow-S'); - south.css('top', (canvasTop + canvasHeight - iconOffset - iconCenterOffset) + 'px'); - south.css('left', canvasLeft - 10 + (canvasWidth - iconWidth) / 2 + 'px'); - - var east = jQuery('#canvas-grow-E'); - east.css('top', canvasTop - 10 + (canvasHeight - iconWidth) / 2 + 'px'); - east.css('left', (canvasLeft + canvasWidth - iconOffset - iconCenterOffset) + 'px'); - - var west = jQuery('#canvas-grow-W'); - west.css('top', canvasTop -10 + (canvasHeight - iconWidth) / 2 + 'px'); - west.css('left', canvasLeft + iconOffset + 'px'); - - north = jQuery('#canvas-shrink-N'); - north.css('top', canvasTop + iconOffset + 'px'); - north.css('left', canvasLeft + 10 + (canvasWidth - iconWidth) / 2 + 'px'); - - south = jQuery('#canvas-shrink-S'); - south.css('top', (canvasTop + canvasHeight - iconOffset - iconCenterOffset) + 'px'); - south.css('left', canvasLeft +10 + (canvasWidth - iconWidth) / 2 + 'px'); - - east = jQuery('#canvas-shrink-E'); - east.css('top', canvasTop + 10 + (canvasHeight - iconWidth) / 2 + 'px'); - east.css('left', (canvasLeft + canvasWidth - iconOffset - iconCenterOffset) + 'px'); - - west = jQuery('#canvas-shrink-W'); - west.css('top', canvasTop + 10 + (canvasHeight - iconWidth) / 2 + 'px'); - west.css('left', canvasLeft + iconOffset + 'px'); - }); - - jQuery(window).trigger('resize'); - - jQuery.fn.scrollStopped = function(callback) { - jQuery(this).scroll(function(){ - var self = this, $this = jQuery(self); - if ($this.data('scrollTimeout')) { - clearTimeout($this.data('scrollTimeout')); - } - $this.data('scrollTimeout', setTimeout(callback,50,self)); - }); - }; - - FLOWABLE.eventBus.addListener('ORYX-EDITOR-LOADED',function(){ - this.editorFactory.resolve(); - this.editorInitialized = true; - this.modelData = editorManager.getBaseModelData(); - - }, $rootScope); - - FLOWABLE.eventBus.addListener(FLOWABLE.eventBus.EVENT_TYPE_EDITOR_READY, function() { - var url = window.location.href; - var regex = new RegExp("[?&]subProcessId(=([^]*)|&|#|$)"); - var results = regex.exec(url); - if (results && results[2]) { - editorManager.edit(decodeURIComponent(results[2].replace(/\+/g, " "))); - } - }); - } - - $scope.$on('$locationChangeStart', function(event, next, current) { - if ($rootScope.editor && !$rootScope.ignoreChanges) { - var plugins = $rootScope.editor.loadedPlugins; - - var savePlugin; - for (var i=0; i0) { - for (var i = 0; i < shapes.length; i++) { - EDITOR.UTIL._visitShapeAndCollectShape(shapes[i], stencilId, collectedShapes); - } - } - - return collectedShapes; - }, - - collectSortedElementsFromPrecedingElements: function (startElement) { - var visitedElements = []; - var collectedElements = []; - - var incomingShapesIterator = startElement.getIncomingShapes(); - if (incomingShapesIterator) { - for (var i = 0; i < incomingShapesIterator.length; i++) { - var incomingShape = incomingShapesIterator[i]; - if (visitedElements.indexOf(incomingShape.id) < 0) { - EDITOR.UTIL._visitElementAndCollectAllElement(incomingShape, visitedElements, collectedElements); - } - } - } - - return collectedElements.reverse(); - }, - - _visitShapeAndCollectShape: function(shape, stencilId, collectedShapes) { - - if (shape.childShapes && shape.childShapes.length > 0) { - for (var i = 0; i < shape.childShapes.length; i++) { - EDITOR.UTIL._visitShapeAndCollectShape(shape.childShapes[i], stencilId, collectedShapes); - } - } - - if (shape.stencil && shape.stencil.id === stencilId) { - collectedShapes.push(shape); - } - }, - - - _visitElementAndCollectProperty: function (element, propertyType, visitedElementsArray, collectedProperties) { - - visitedElementsArray.push(element.id); - - var property = element.properties[propertyType] - if (property) { - collectedProperties.push(property); - } - - var incomingShapesIterator = element.getIncomingShapes(); - if (incomingShapesIterator) { - for (var i = 0; i < incomingShapesIterator.length; i++) { - var incomingShape = incomingShapesIterator[i]; - if (visitedElementsArray.indexOf(incomingShape.id) < 0) { - EDITOR.UTIL._visitElementAndCollectProperty(incomingShape, propertyType, visitedElementsArray, collectedProperties); - } - } - } - - var childShapesIterator = element.getChildShapes(); - if (childShapesIterator) { - for (var i = 0; i < childShapesIterator.length; i++) { - var childShape = childShapesIterator[i]; - if (visitedElementsArray.indexOf(childShape.id) < 0) { - EDITOR.UTIL._visitElementAndCollectProperty(childShape, propertyType, visitedElementsArray, collectedProperties); - } - } - } - }, - - _visitElementAndCollectElement: function (element, stencilId, visitedElementsArray, collectedElements) { - - visitedElementsArray.push(element.id); - - var elementStencilId = element.getStencil().id(); - if (elementStencilId && elementStencilId.indexOf(stencilId) >= 0) { - collectedElements.push(element); - } - - var incomingShapesIterator = element.getIncomingShapes(); - if (incomingShapesIterator) { - for (var i = 0; i < incomingShapesIterator.length; i++) { - var incomingShape = incomingShapesIterator[i]; - if (visitedElementsArray.indexOf(incomingShape.id) < 0) { - EDITOR.UTIL._visitElementAndCollectElement(incomingShape, stencilId, visitedElementsArray, collectedElements); - } - } - } - - var childShapesIterator = element.getChildShapes(); - if (childShapesIterator) { - for (var i = 0; i < childShapesIterator.length; i++) { - var childShape = childShapesIterator[i]; - if (visitedElementsArray.indexOf(childShape.id) < 0) { - EDITOR.UTIL._visitElementAndCollectElement(childShape, stencilId, visitedElementsArray, collectedElements); - } - } - } - }, - - _visitElementAndCollectAllElement: function (element, visitedElementsArray, collectedElements) { - - visitedElementsArray.push(element.id); - - var elementStencilId = element.getStencil().id(); - if (elementStencilId) { - collectedElements.push(element); - } - - var incomingShapesIterator = element.getIncomingShapes(); - if (incomingShapesIterator) { - for (var i = 0; i < incomingShapesIterator.length; i++) { - var incomingShape = incomingShapesIterator[i]; - - if (visitedElementsArray.indexOf(incomingShape.id) < 0) { - EDITOR.UTIL._visitElementAndCollectAllElement(incomingShape, visitedElementsArray, collectedElements); - } - } - } - - var childShapesIterator = element.getChildShapes(); - if (childShapesIterator) { - for (var i = 0; i < childShapesIterator.length; i++) { - var childShape = childShapesIterator[i]; - - if (visitedElementsArray.indexOf(childShape.id) < 0) { - EDITOR.UTIL._visitElementAndCollectAllElement(childShape, visitedElementsArray, collectedElements); - } - } - } - - var parent = element.getParentShape(); - if (parent) { - try { - var incomingParentShapesIterator = parent.getIncomingShapes(); - if (incomingParentShapesIterator) { - for (var i = 0; i < incomingParentShapesIterator.length; i++) { - var incomingParentShape = incomingParentShapesIterator[i]; - - if (visitedElementsArray.indexOf(incomingParentShape.id) < 0) { - EDITOR.UTIL._visitElementAndCollectAllElement(incomingParentShape, visitedElementsArray, collectedElements); - } - } - } - } catch(err) { - // start of model reached - } - } - }, - - /** - * Goes up the chain of parents of the provided element. - * When the property is encountered, its value is immediately returned. - * If the chain of parents is completely walked through, undefined is returned. - */ - getPropertyFromParent: function (element, propertyType) { - if (element.parent) { - return EDITOR.UTIL._getPropertyFromParent(element.parent, propertyType); - } else { - return undefined; - } - - }, - - _getPropertyFromParent: function (parentElement, propertyType) { - var property = parentElement.properties[propertyType]; - if (property) { - return property; - } - - if (parentElement.parent) { - return EDITOR.UTIL._getPropertyFromParent(parentElement.parent, propertyType); - } else { - return undefined; - } - }, - - /** - * Finds last element of given shapes and traverses up the chain and returns elements of the given type - * - * @param allElements - * @param propertyType - * - * @returns [Array] filteredSteps of given type - */ - extractSortedStepsOfType: function (allElements, propertyType) { - - var filteredSteps = []; - var sortedSteps = EDITOR.UTIL.extractSortedSteps(allElements); - - if (sortedSteps && sortedSteps.length > 0) { - for (var i = 0; i < sortedSteps.length; i++) { - if (sortedSteps[i].stencil && sortedSteps[i].stencil.id === propertyType) { - filteredSteps.push(sortedSteps[i]); - } - } - } - - return filteredSteps; - }, - - extractSortedSteps: function(allElements) { - - var elementsMap = {}; - var sortedSteps = []; - if (allElements && allElements.length > 0) { - for (var i = 0; i < allElements.length; i++) { - elementsMap[allElements[i].resourceId] = allElements[i]; - } - EDITOR.UTIL.getOutgoingElements(allElements[0], elementsMap, sortedSteps, true); - } - return sortedSteps; - }, - - getOutgoingElements: function(element, elementsMap, sortedSteps, onlySteps) { - - if (element && elementsMap) { - if (element.outgoing && element.outgoing.length > 0) { - for (var i = 0; i < element.outgoing.length; i++) { - if (onlySteps && EDITOR.UTIL._elementIsStep(element)) { - element.id = element.resourceId; - sortedSteps.push(element); - } else if (!onlySteps) { - element.id = element.resourceId; - sortedSteps.push(element); - } - EDITOR.UTIL.getOutgoingElements(elementsMap[element.outgoing[i].resourceId], elementsMap, sortedSteps); - } - } else { - if (onlySteps && EDITOR.UTIL._elementIsStep(element)) { - element.id = element.resourceId; - sortedSteps.push(element); - } else if (!onlySteps) { - element.id = element.resourceId; - sortedSteps.push(element); - } - } - } - }, - - _elementIsStep: function(element) { - var isStep = false; - if (element && element.stencil) { - if (element.stencil.id != 'SequenceFlow') { - isStep = true; - } - } - return isStep; - }, - - - -}; \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor.html b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor.html deleted file mode 100644 index cb708086..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor.html +++ /dev/null @@ -1,168 +0,0 @@ - - -diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/css/editor.css b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/css/editor.css deleted file mode 100644 index e0766cbc..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/css/editor.css +++ /dev/null @@ -1,216 +0,0 @@ -/** Copyright 2005-2015 Alfresco Software, Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -body, html { - font-family: tahoma,arial,helvetica,sans-serif; - font-size: 12px; -} - -/********* - * SVG Style - */ - -text, -text * { - cursor:default; - -webkit-user-select: none; -} - -/********* - * HEADER SECTION - * - */ - -#oryx_canvas_htmlContainer { - -} - -.ORYX_Editor { - background: white; - border: none; - margin:-5px; - margin-top:0px; - width:1200px; - height:600px; -} - -.icon-large { - width:18px !important; -} - -#oryxcanvas { - width:1200px; - height:600px; -} - -/** Resizer for the Canvas **/ -.canvas_resize_indicator_area { - - margin :auto; - display :block; - height :30px; - left :20%; - position :absolute; - text-align :center; - top :0; - width :60%; - -} - -.canvas_resize_indicator { - - width : 15px; - height : 15px; - position : absolute; - display : block; - margin : auto; - opacity : 0.6; -} - -.canvas_resize_indicator:hover { - - opacity : 1.0; -} -/** End Resizer **/ - -.Oryx_down { - -} - -.Oryx_button img { - width:16px; - height:16px; - top:0px; - left:0px; - line-height: 16px; -} - -.Oryx_Right .Oryx_button, -.Oryx_Left .Oryx_button, -.Oryx_Top .Oryx_button, -.Oryx_Bottom .Oryx_button { - opacity: 0.5; -} - -.Oryx_button.x-opacity-0 { - opacity: 0; - display:none; -} - -.Oryx_button.x-opacity-10 { - opacity: 0.1; -} - -.Oryx_button.x-opacity-20 { - opacity: 0.2; -} - -.Oryx_button.x-opacity-50 { - opacity: 0.5; -} - -.Oryx_Right:hover .Oryx_button, -.Oryx_Left:hover .Oryx_button, -.Oryx_Top:hover .Oryx_button, -.Oryx_Bottom:hover .Oryx_button { - opacity: 0.7; - display:block; -} - - -.Oryx_button img { - top:0px; -} - -.Oryx_Left img { - top:0px; -} - -.Oryx_button { - width:24px; - height:24px; - padding:2px; - position:absolute; - background-color: #ffffff; - background-color: rgba(255,255,255,0.7); - cursor: pointer; -} - -.Oryx_button_with_caption { - width:inherit; - height:16px; - padding:4px; - position:absolute; -} - -/*** Resizer ***/ - -.resizer_southeast, -.resizer_northwest { - width:12px; - height:12px; - position:relative; - background-color: transparent; - background-repeat:no-repeat; -} - -/*** Selection Frame ***/ - -.Oryx_SelectionFrame{ - position:absolute; - border:1px dotted gray; - background:none; -} - -.LoadingIndicator { - background-image: url('../../images/loading.gif'); -} - -.Oryx_hover, .Oryx_button:hover { - background-color: #999999; - background-color: rgba(193, 229, 238, 0.7); - opacity: 1 !important; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.ValidateButton { - width:24px; - height:24px; - padding:2px; - position:absolute; - cursor: pointer; -} - -.ValidateButton:hover { - background-color: #999999; - background-color: rgba(193, 229, 238, 0.7); - opacity: 1 !important; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.resizer_southeast { - background-image:url(../../images/se-handle-dark.gif); - cursor: se-resize; - background-position: 4px 4px; -} - -.resizer_northwest { - background-image:url(../../images/nw-handle-dark.gif); - cursor: nw-resize; - background-position: -2px -2px; -} diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_de.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_de.js deleted file mode 100644 index e236a66a..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_de.js +++ /dev/null @@ -1,413 +0,0 @@ -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * @author nicolas.peters - * - * Contains all strings for German language. - * Version 1 - 08/29/08 - */ -if(!ORYX) var ORYX = {}; - -if(!ORYX.I18N) ORYX.I18N = {}; - -ORYX.I18N.Language = "de_DE"; //Pattern ------------ --- -
- - - ----
-- -
--
- {{item.name | translate}} -
-- -- {{'GENERAL.OTHERS.PROCESS_NAVIGATOR' | translate}} ----- {{'GENERAL.OTHERS.PROCESS' | translate}}: {{treeview.name}} ---
-
-- -
-- {{'GENERAL.OTHERS.NO_STRUCTURAL_ELEMENTS_USED' | translate}} ----- ----- -- - - - ---------- {{'ELEMENT.DATE_CREATED' | translate}}: - {{selectedItem.auditData.createDate}} --- {{'ELEMENT.AUTHOR' | translate}}: - {{selectedItem.auditData.author}} -- ------ {{ property.title | translate }} : - {{ property.title }} ({{'PROPERTY.REMOVED' | translate}}) : - --- - - - _ in lower case! - -if(!ORYX.I18N.Oryx) ORYX.I18N.Oryx = {}; - -ORYX.I18N.Oryx.pleaseWait = "Editor wird geladen. Bitte warten..."; -ORYX.I18N.Oryx.notLoggedOn = "Nicht angemeldet"; -ORYX.I18N.Oryx.noBackendDefined = "Achtung! \n Es wurde kein Repository definiert.\n Ihr Model kann nicht geladen werden. Bitte nutzen sie eine Editor Konfiguration mit einem Speicher Plugin."; - -if(!ORYX.I18N.AddDocker) ORYX.I18N.AddDocker = {}; - -ORYX.I18N.AddDocker.group = "Docker"; -ORYX.I18N.AddDocker.add = "Docker Hinzufügen"; -ORYX.I18N.AddDocker.addDesc = "Fügen Sie einer Kante einen Docker hinzu, indem Sie auf die Kante klicken"; -ORYX.I18N.AddDocker.del = "Docker Löschen"; -ORYX.I18N.AddDocker.delDesc = "Löscht einen Docker durch Klicken auf den zu löschenden Docker"; - -if(!ORYX.I18N.Arrangement) ORYX.I18N.Arrangement = {}; - -ORYX.I18N.Arrangement.groupZ = "Z-Order"; -ORYX.I18N.Arrangement.btf = "In den Vordergrund"; -ORYX.I18N.Arrangement.btfDesc = "In den Vordergrund"; -ORYX.I18N.Arrangement.btb = "In den Hintergrund"; -ORYX.I18N.Arrangement.btbDesc = "In den Hintergrund"; -ORYX.I18N.Arrangement.bf = "Eine Ebene nach Vorne"; -ORYX.I18N.Arrangement.bfDesc = "Eine Ebene nach Vorne"; -ORYX.I18N.Arrangement.bb = "Eine Ebene nach Hinten"; -ORYX.I18N.Arrangement.bbDesc = "Eine Ebene nach Hinten"; -ORYX.I18N.Arrangement.groupA = "Alignment"; -ORYX.I18N.Arrangement.ab = "Unten ausrichten"; -ORYX.I18N.Arrangement.abDesc = "Unten ausrichten"; -ORYX.I18N.Arrangement.am = "Horizontal ausrichten"; -ORYX.I18N.Arrangement.amDesc = "Horizontal ausrichten"; -ORYX.I18N.Arrangement.at = "Oben ausrichten"; -ORYX.I18N.Arrangement.atDesc = "Oben ausrichten"; -ORYX.I18N.Arrangement.al = "Links ausrichten"; -ORYX.I18N.Arrangement.alDesc = "Links ausrichten"; -ORYX.I18N.Arrangement.ac = "Vertikal ausrichten"; -ORYX.I18N.Arrangement.acDesc = "Vertikal ausrichten"; -ORYX.I18N.Arrangement.ar = "Rechts ausrichten"; -ORYX.I18N.Arrangement.arDesc = "Rechts ausrichten"; -ORYX.I18N.Arrangement.as = "Größenangleichung"; -ORYX.I18N.Arrangement.asDesc = "Größenangleichung"; - -if(!ORYX.I18N.Edit) ORYX.I18N.Edit = {}; - -ORYX.I18N.Edit.group = "Edit"; -ORYX.I18N.Edit.cut = "Ausschneiden"; -ORYX.I18N.Edit.cutDesc = "Ausschneiden der selektierten Elemente"; -ORYX.I18N.Edit.copy = "Kopieren"; -ORYX.I18N.Edit.copyDesc = "Kopieren der selektierten Elemente"; -ORYX.I18N.Edit.paste = "Einfügen"; -ORYX.I18N.Edit.pasteDesc = "Einfügen von kopierten/ausgeschnittenen Elementen"; -ORYX.I18N.Edit.del = "Löschen"; -ORYX.I18N.Edit.delDesc = "Löschen der selektierten Elemente"; - -if(!ORYX.I18N.EPCSupport) ORYX.I18N.EPCSupport = {}; - -ORYX.I18N.EPCSupport.group = "EPC"; -ORYX.I18N.EPCSupport.exp = "EPML Export"; -ORYX.I18N.EPCSupport.expDesc = "Exportieren nach EPML"; -ORYX.I18N.EPCSupport.imp = "EPML Import"; -ORYX.I18N.EPCSupport.impDesc = "Importieren einer EPML Datei"; -ORYX.I18N.EPCSupport.progressExp = "Exportiere Modell"; -ORYX.I18N.EPCSupport.selectFile = "Wählen Sie eine EPML Datei aus, die Sie importieren möchten."; -ORYX.I18N.EPCSupport.file = "Datei"; -ORYX.I18N.EPCSupport.impPanel = "EPML Datei importieren"; -ORYX.I18N.EPCSupport.impBtn = "Importieren"; -ORYX.I18N.EPCSupport.close = "Schließen"; -ORYX.I18N.EPCSupport.error = "Fehler"; -ORYX.I18N.EPCSupport.progressImp = "Importiere..."; - -if(!ORYX.I18N.ERDFSupport) ORYX.I18N.ERDFSupport = {}; - -ORYX.I18N.ERDFSupport.exp = "ERDF Export"; -ORYX.I18N.ERDFSupport.expDesc = "Exportieren nach ERDF"; -ORYX.I18N.ERDFSupport.imp = "ERDF Import"; -ORYX.I18N.ERDFSupport.impDesc = "ERDF Datei importieren"; -ORYX.I18N.ERDFSupport.impFailed = "Anfrage für den Import der ERDF Datei ist fehlgeschlagen."; -ORYX.I18N.ERDFSupport.impFailed2 = "Während des Importierens ist ein Fehler aufgetreten.
Fehlermeldung:
"; -ORYX.I18N.ERDFSupport.error = "Fehler"; -ORYX.I18N.ERDFSupport.noCanvas = "Das XML Dokument enthält keinen Oryx Canvas Knoten."; -ORYX.I18N.ERDFSupport.noSS = "Im XML Dokument ist kein Stencil Set referenziert."; -ORYX.I18N.ERDFSupport.wrongSS = "Das im XML Dokument referenzierte Stencil Set passt nicht zu dem im Editor geladenen Stencil Set."; -ORYX.I18N.ERDFSupport.selectFile = "Wählen sie eine ERDF Datei (.xml) aus oder geben Sie den ERDF Code im Textfeld ein."; -ORYX.I18N.ERDFSupport.file = "Datei"; -ORYX.I18N.ERDFSupport.impERDF = "ERDF importieren"; -ORYX.I18N.ERDFSupport.impBtn = "Importieren"; -ORYX.I18N.ERDFSupport.impProgress = "Importiere..."; -ORYX.I18N.ERDFSupport.close = "Schließen"; -ORYX.I18N.ERDFSupport.deprTitle = "Wirklich nach eRDF exportieren?"; -ORYX.I18N.ERDFSupport.deprText = "Der Export nach eRDF wird nicht empfohlen, da dieses Format in zukünftigen Versionen des Oryx Editors nicht mehr unterstützt wird. Verwenden Sie statt dessen den Export nach JSON, falls möglich. Wollen Sie dennoch das Model nach eRDF exportieren?"; - -if(!ORYX.I18N.jPDLSupport) ORYX.I18N.jPDLSupport = {}; - -ORYX.I18N.jPDLSupport.group = "ExecBPMN"; -ORYX.I18N.jPDLSupport.exp = "jPDL Export"; -ORYX.I18N.jPDLSupport.expDesc = "Exportieren nach jPDL"; -ORYX.I18N.jPDLSupport.imp = "jPDL Import"; -ORYX.I18N.jPDLSupport.impDesc = "jPDL Datei importieren"; -ORYX.I18N.jPDLSupport.impFailedReq = "Anfrage für den Import der jPDL Datei ist fehlgeschlagen."; -ORYX.I18N.jPDLSupport.impFailedJson = "Transformation der jPDL Datei ist fehlgeschlagen."; -ORYX.I18N.jPDLSupport.impFailedJsonAbort = "Import abgebrochen."; -ORYX.I18N.jPDLSupport.loadSseQuestionTitle = "Stencil Set Erweiterung für jBPM muss geladen werden"; -ORYX.I18N.jPDLSupport.loadSseQuestionBody = "Um jPDL importieren zu können, muss die Stencil Set Erweiterung für jBPM geladen werden. Möchten Sie fortfahren?"; -ORYX.I18N.jPDLSupport.expFailedReq = "Anfrage für den Export des Models ist fehlgeschlagen."; -ORYX.I18N.jPDLSupport.expFailedXml = "Export nach jPDL ist fehlgeschlagen. Exporter meldet: "; -ORYX.I18N.jPDLSupport.error = "Fehler"; -ORYX.I18N.jPDLSupport.selectFile = "Wählen sie eine jPDL Datei (.xml) aus oder geben Sie den jPDL Code im Textfeld ein."; -ORYX.I18N.jPDLSupport.file = "Datei"; -ORYX.I18N.jPDLSupport.impJPDL = "jPDL importieren"; -ORYX.I18N.jPDLSupport.impBtn = "Importieren"; -ORYX.I18N.jPDLSupport.impProgress = "Importiere..."; -ORYX.I18N.jPDLSupport.close = "Schließen"; - -if(!ORYX.I18N.Save) ORYX.I18N.Save = {}; - -ORYX.I18N.Save.group = "File"; -ORYX.I18N.Save.save = "Speichern"; -ORYX.I18N.Save.saveDesc = "Speichern"; -ORYX.I18N.Save.saveAs = "Speichern als..."; -ORYX.I18N.Save.saveAsDesc = "Speichern als..."; -ORYX.I18N.Save.unsavedData = "Das Diagramm enthält nicht gespeicherte Daten. Sind Sie sicher, daß Sie den Editor schließen möchten?"; -ORYX.I18N.Save.newProcess = "Neuer Prozess"; -ORYX.I18N.Save.saveAsTitle = "Speichern als..."; -ORYX.I18N.Save.saveBtn = "Speichern"; -ORYX.I18N.Save.close = "Schließen"; -ORYX.I18N.Save.savedAs = "Gespeichert als"; -ORYX.I18N.Save.saved = "Gespeichert"; -ORYX.I18N.Save.failed = "Das Speichern ist fehlgeschlagen."; -ORYX.I18N.Save.noRights = "Sie haben nicht die erforderlichen Rechte, um Änderungen zu speichern."; -ORYX.I18N.Save.saving = "Speichern"; -ORYX.I18N.Save.saveAsHint = "Das Diagramm wurde unter folgendem Link gespeichert:"; - -if(!ORYX.I18N.File) ORYX.I18N.File = {}; - -ORYX.I18N.File.group = "File"; -ORYX.I18N.File.print = "Drucken"; -ORYX.I18N.File.printDesc = "Drucken"; -ORYX.I18N.File.pdf = "PDF Export"; -ORYX.I18N.File.pdfDesc = "Exportieren nach PDF"; -ORYX.I18N.File.info = "Über"; -ORYX.I18N.File.infoDesc = "Über"; -ORYX.I18N.File.genPDF = "PDF wird generiert"; -ORYX.I18N.File.genPDFFailed = "Die Generierung der PDF Datei ist fehlgeschlagen."; -ORYX.I18N.File.printTitle = "Drucken"; -ORYX.I18N.File.printMsg = "Leider arbeitet die Druckfunktion zur Zeit nicht immer korrekt. Bitte nutzen Sie den PDF Export, und drucken Sie das PDF Dokument aus. Möchten Sie dennoch mit dem Drucken fortfahren?"; - -if(!ORYX.I18N.Grouping) ORYX.I18N.Grouping = {}; - -ORYX.I18N.Grouping.grouping = "Grouping"; -ORYX.I18N.Grouping.group = "Gruppieren"; -ORYX.I18N.Grouping.groupDesc = "Gruppierung der selektierten Elemente"; -ORYX.I18N.Grouping.ungroup = "Gruppierung aufheben"; -ORYX.I18N.Grouping.ungroupDesc = "Aufheben aller Gruppierungen der selektierten Elemente"; - -if(!ORYX.I18N.Loading) ORYX.I18N.Loading = {}; - -ORYX.I18N.Loading.waiting ="Bitte warten..."; - -if(!ORYX.I18N.PropertyWindow) ORYX.I18N.PropertyWindow = {}; - -ORYX.I18N.PropertyWindow.name = "Name"; -ORYX.I18N.PropertyWindow.value = "Wert"; -ORYX.I18N.PropertyWindow.selected = "ausgewählt"; -ORYX.I18N.PropertyWindow.clickIcon = "Symbol anklicken"; -ORYX.I18N.PropertyWindow.add = "Hinzufügen"; -ORYX.I18N.PropertyWindow.rem = "Löschen"; -ORYX.I18N.PropertyWindow.complex = "Editor für komplexe Eigenschaft"; -ORYX.I18N.PropertyWindow.text = "Editor für einen Text"; -ORYX.I18N.PropertyWindow.ok = "Ok"; -ORYX.I18N.PropertyWindow.cancel = "Abbrechen"; -ORYX.I18N.PropertyWindow.dateFormat = "d/m/y"; - -if(!ORYX.I18N.ShapeMenuPlugin) ORYX.I18N.ShapeMenuPlugin = {}; - -ORYX.I18N.ShapeMenuPlugin.drag = "Ziehen"; -ORYX.I18N.ShapeMenuPlugin.clickDrag = "Klicken oder ziehen"; -ORYX.I18N.ShapeMenuPlugin.morphMsg = "Shape morphen"; - -if(!ORYX.I18N.SyntaxChecker) ORYX.I18N.SyntaxChecker = {}; - -ORYX.I18N.SyntaxChecker.group = "Verification"; -ORYX.I18N.SyntaxChecker.name = "Syntax-Checker"; -ORYX.I18N.SyntaxChecker.desc = "Überprüfung der Syntax"; -ORYX.I18N.SyntaxChecker.noErrors = "Es wurden keine Syntaxfehler gefunden."; -ORYX.I18N.SyntaxChecker.invalid = "Ungültige Antwort vom Server."; -ORYX.I18N.SyntaxChecker.checkingMessage = "Überprüfung wird durchgeführt ..."; - -if(!ORYX.I18N.Undo) ORYX.I18N.Undo = {}; - -ORYX.I18N.Undo.group = "Undo"; -ORYX.I18N.Undo.undo = "Rückgängig"; -ORYX.I18N.Undo.undoDesc = "Rückgängig"; -ORYX.I18N.Undo.redo = "Wiederherstellen"; -ORYX.I18N.Undo.redoDesc = "Wiederherstellen"; - -if(!ORYX.I18N.View) ORYX.I18N.View = {}; - -ORYX.I18N.View.group = "Zoom"; -ORYX.I18N.View.zoomIn = "Vergrößern"; -ORYX.I18N.View.zoomInDesc = "Vergrößern"; -ORYX.I18N.View.zoomOut = "Verkleinern"; -ORYX.I18N.View.zoomOutDesc = "Verkleinern"; -ORYX.I18N.View.zoomStandard = "Originalgröße"; -ORYX.I18N.View.zoomStandardDesc = "Originalgröße"; -ORYX.I18N.View.zoomFitToModel = "Modelgröße"; -ORYX.I18N.View.zoomFitToModelDesc = "Modelgröße"; - -/** New Language Properties: 08.12.2008 **/ - -ORYX.I18N.PropertyWindow.title = "Eigenschaften"; - -if(!ORYX.I18N.ShapeRepository) ORYX.I18N.ShapeRepository = {}; -ORYX.I18N.ShapeRepository.title = "Shape Verzeichnis"; - -ORYX.I18N.Save.dialogDesciption = "Bitte geben Sie einen Namen, eine Beschreibung und einen Kommentar ein."; -ORYX.I18N.Save.dialogLabelTitle = "Titel"; -ORYX.I18N.Save.dialogLabelDesc = "Beschreibung"; -ORYX.I18N.Save.dialogLabelType = "Typ"; -ORYX.I18N.Save.dialogLabelComment = "Revisionskommentar"; - -if(!ORYX.I18N.Perspective) ORYX.I18N.Perspective = {}; -ORYX.I18N.Perspective.no = "Keine Perspektive" -ORYX.I18N.Perspective.noTip = "Zurücksetzen der aktuellen Perspektive" - -/** New Language Properties: 21.04.2009 */ -ORYX.I18N.JSONSupport = { - imp: { - name: "JSON importieren", - desc: "Importiert ein neues Modell aus JSON", - group: "Export", - selectFile: "Wählen Sie eine JSON-Datei (*.json) aus, die Sie importieren möchten, oder fügen Sie JSON in das Textfeld ein.", - file: "Datei", - btnImp: "Importieren", - btnClose: "Schließen", - progress: "Importieren ...", - syntaxError: "Syntaxfehler" - }, - exp: { - name: "Nach JSON exportieren", - desc: "Exportiert das aktuelle Modell nach JSON", - group: "Export" - } -}; - -/** New Language Properties: 09.05.2009 */ -if(!ORYX.I18N.JSONImport) ORYX.I18N.JSONImport = {}; - -ORYX.I18N.JSONImport.title = "JSON Import"; -ORYX.I18N.JSONImport.wrongSS = "Das Stencil Set der importierten Datei ({0}) entspricht nicht dem geladenen Stencil Set ({1})." - -/** New Language Properties: 14.05.2009 */ -if(!ORYX.I18N.RDFExport) ORYX.I18N.RDFExport = {}; -ORYX.I18N.RDFExport.group = "Export"; -ORYX.I18N.RDFExport.rdfExport = "Nach RDF exportieren"; -ORYX.I18N.RDFExport.rdfExportDescription = "Exportiert das aktuelle Model in die XML-Serialisierung des Resource Description Frameworks (RDF)"; - -/** New Language Properties: 15.05.2009*/ -if(!ORYX.I18N.SyntaxChecker.BPMN) ORYX.I18N.SyntaxChecker.BPMN={}; -ORYX.I18N.SyntaxChecker.BPMN_NO_SOURCE = "Eine Kante muss einen Ursprung haben."; -ORYX.I18N.SyntaxChecker.BPMN_NO_TARGET = "Eine Kante muss ein Ziel haben."; -ORYX.I18N.SyntaxChecker.BPMN_DIFFERENT_PROCESS = "Ursprungs- und Zielknoten müssen im gleichen Prozess sein."; -ORYX.I18N.SyntaxChecker.BPMN_SAME_PROCESS = "Ursprungs- und Zielknoten müssen in verschiedenen Pools enthalten sein."; -ORYX.I18N.SyntaxChecker.BPMN_FLOWOBJECT_NOT_CONTAINED_IN_PROCESS = "Ein Kontrollflussobjekt muss sich in einem Prozess befinden."; -ORYX.I18N.SyntaxChecker.BPMN_ENDEVENT_WITHOUT_INCOMING_CONTROL_FLOW = "Ein End-Ereignis muss einen eingehenden Sequenzfluss haben."; -ORYX.I18N.SyntaxChecker.BPMN_STARTEVENT_WITHOUT_OUTGOING_CONTROL_FLOW = "Ein Start-Ereignis muss einen ausgehenden Sequenzfluss haben."; -ORYX.I18N.SyntaxChecker.BPMN_STARTEVENT_WITH_INCOMING_CONTROL_FLOW = "Start-Ereignisse dürfen keinen eingehenden Sequenzfluss haben."; -ORYX.I18N.SyntaxChecker.BPMN_ATTACHEDINTERMEDIATEEVENT_WITH_INCOMING_CONTROL_FLOW = "Angeheftete Zwischen-Ereignisse dürfen keinen eingehenden Sequenzfluss haben."; -ORYX.I18N.SyntaxChecker.BPMN_ATTACHEDINTERMEDIATEEVENT_WITHOUT_OUTGOING_CONTROL_FLOW = "Angeheftete Zwischen-Ereignisse müssen genau einen ausgehenden Sequenzfluss haben."; -ORYX.I18N.SyntaxChecker.BPMN_ENDEVENT_WITH_OUTGOING_CONTROL_FLOW = "End-Ereignisse dürfen keinen ausgehenden Sequenzfluss haben."; -ORYX.I18N.SyntaxChecker.BPMN_EVENTBASEDGATEWAY_BADCONTINUATION = "Auf Ereignis-basierte Gateways dürfen weder Gateways noch Subprozesse folgen."; -ORYX.I18N.SyntaxChecker.BPMN_NODE_NOT_ALLOWED = "Knotentyp ist nicht erlaubt."; - -if(!ORYX.I18N.SyntaxChecker.IBPMN) ORYX.I18N.SyntaxChecker.IBPMN={}; -ORYX.I18N.SyntaxChecker.IBPMN_NO_ROLE_SET = "Für Interaktionen muss ein Sender und ein Empfänger definiert sein."; -ORYX.I18N.SyntaxChecker.IBPMN_NO_INCOMING_SEQFLOW = "Dieser Knoten muss eingehenden Sequenzfluss besitzen."; -ORYX.I18N.SyntaxChecker.IBPMN_NO_OUTGOING_SEQFLOW = "Dieser Knoten muss ausgehenden Sequenzfluss besitzen."; - -if(!ORYX.I18N.SyntaxChecker.InteractionNet) ORYX.I18N.SyntaxChecker.InteractionNet={}; -ORYX.I18N.SyntaxChecker.InteractionNet_SENDER_NOT_SET = "Sender ist nicht definiert"; -ORYX.I18N.SyntaxChecker.InteractionNet_RECEIVER_NOT_SET = "Empfänger ist nicht definiert"; -ORYX.I18N.SyntaxChecker.InteractionNet_MESSAGETYPE_NOT_SET = "Nachrichtentyp ist nicht definiert."; -ORYX.I18N.SyntaxChecker.InteractionNet_ROLE_NOT_SET = "Rolle ist nicht definiert."; - -if(!ORYX.I18N.SyntaxChecker.EPC) ORYX.I18N.SyntaxChecker.EPC={}; -ORYX.I18N.SyntaxChecker.EPC_NO_SOURCE = "Eine Kante muss einen Ursprung haben."; -ORYX.I18N.SyntaxChecker.EPC_NO_TARGET = "Eine Kante muss ein Ziel haben."; -ORYX.I18N.SyntaxChecker.EPC_NOT_CONNECTED = "Dieser Knoten muss eingehende oder ausgehende Kanten besitzen."; -ORYX.I18N.SyntaxChecker.EPC_NOT_CONNECTED_2 = "Dieser Knoten muss sowohl eingehende als auch ausgehende Kanten besitzen."; -ORYX.I18N.SyntaxChecker.EPC_TOO_MANY_EDGES = "Knoten ist mit zu vielen Kanten verbunden."; -ORYX.I18N.SyntaxChecker.EPC_NO_CORRECT_CONNECTOR = "Knoten ist kein korrekter Konnektor."; -ORYX.I18N.SyntaxChecker.EPC_MANY_STARTS = "Es darf nur ein Start-Ereignis geben."; -ORYX.I18N.SyntaxChecker.EPC_FUNCTION_AFTER_OR = "Funktionen hinter einem OR-/XOR-Split sind nicht erlaubt."; -ORYX.I18N.SyntaxChecker.EPC_PI_AFTER_OR = "Prozessschnittstellen hinter einem OR-/XOR-Split ist nicht erlaubt."; -ORYX.I18N.SyntaxChecker.EPC_FUNCTION_AFTER_FUNCTION = "Auf eine Funktion darf keine Funktion folgen."; -ORYX.I18N.SyntaxChecker.EPC_EVENT_AFTER_EVENT = "Auf ein Ereignis darf kein Ereignis folgen."; -ORYX.I18N.SyntaxChecker.EPC_PI_AFTER_FUNCTION = "Auf eine Funktion darf keine Prozessschnittstelle folgen."; -ORYX.I18N.SyntaxChecker.EPC_FUNCTION_AFTER_PI = "Auf eine Prozessschnittstelle darf keine Funktion folgen."; -ORYX.I18N.SyntaxChecker.EPC_SOURCE_EQUALS_TARGET = "Eine Kante muss zwei verschiedene Knoten verbinden." - -if(!ORYX.I18N.SyntaxChecker.PetriNet) ORYX.I18N.SyntaxChecker.PetriNet={}; -ORYX.I18N.SyntaxChecker.PetriNet_NOT_BIPARTITE = "Der Graph ist nicht bepartit."; -ORYX.I18N.SyntaxChecker.PetriNet_NO_LABEL = "Bezeichnung für einen bezeichnete Transition ist nicht gesetzt."; -ORYX.I18N.SyntaxChecker.PetriNet_NO_ID = "Ein Knoten besitzt keine ID."; -ORYX.I18N.SyntaxChecker.PetriNet_SAME_SOURCE_AND_TARGET = "Zwei Flussbeziehungen besitzen den gleichen Ursprung und das gleiche Ziel."; -ORYX.I18N.SyntaxChecker.PetriNet_NODE_NOT_SET = "Ein Knoten ist nicht definiert für einen Flussbeziehung."; - -/** New Language Properties: 02.06.2009*/ -ORYX.I18N.Edge = "Kante"; -ORYX.I18N.Node = "Knoten"; - -/** New Language Properties: 02.06.2009*/ -ORYX.I18N.SyntaxChecker.notice = "Bitte bewegen Sie den Mauszeiger über ein rotes Kreuz, um die Details zu erfahren."; - -/** New Language Properties: 15.07.2009*/ -if(!ORYX.I18N.Layouting) ORYX.I18N.Layouting ={}; -ORYX.I18N.Layouting.doing = "Layouten..."; - -/** New Language Properties: 18.08.2009*/ -ORYX.I18N.SyntaxChecker.MULT_ERRORS = "Mehrere Fehler"; - -/** New Language Properties: 08.09.2009*/ -if(!ORYX.I18N.PropertyWindow) ORYX.I18N.PropertyWindow = {}; -ORYX.I18N.PropertyWindow.oftenUsed = "Hauptattribute"; -ORYX.I18N.PropertyWindow.moreProps = "Mehr Attribute"; - -/** New Language Properties 01.10.2009 */ -if(!ORYX.I18N.SyntaxChecker.BPMN2) ORYX.I18N.SyntaxChecker.BPMN2 = {}; - -ORYX.I18N.SyntaxChecker.BPMN2_DATA_INPUT_WITH_INCOMING_DATA_ASSOCIATION = "Ein Dateninput darf keine ausgehenden Datenassoziationen haben."; -ORYX.I18N.SyntaxChecker.BPMN2_DATA_OUTPUT_WITH_OUTGOING_DATA_ASSOCIATION = "Ein Datenoutput darf keine eingehenden Datenassoziationen haben."; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_TARGET_WITH_TOO_MANY_INCOMING_SEQUENCE_FLOWS = "Ziele von Ereignis-basierten Gateways dürfen nicht mehr als einen eingehenden Sequenzfluss haben."; - -/** New Language Properties 02.10.2009 */ -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_WITH_TOO_LESS_OUTGOING_SEQUENCE_FLOWS = "Ein Ereignis-basiertes Gateway muss 2 oder mehr ausgehende Sequenzflüsse besitzen."; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_EVENT_TARGET_CONTRADICTION = "Wenn Nachrichten-Zwischenereignisse im Diagramm verwendet werden, dann dürfen Receive Tasks nicht verwendet werden und umgekehrt."; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_WRONG_TRIGGER = "Nur die folgenden Zwischen-Ereignis-Auslöser sind hier zulässig: Nachricht, Signal, Timer, Bedingungs und Mehrfach."; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_WRONG_CONDITION_EXPRESSION = "Die ausgehenden Sequenzflüsse eines Ereignis-Gateways dürfen keinen Bedingungsausdruck besitzen."; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_NOT_INSTANTIATING = "Das Gateway erfüllt nicht die Voraussetzungen um den Prozess zu instantiieren. Bitte verwenden Sie ein Start-Ereignis oder setzen Sie die Instanziierungs-Attribute korrekt."; - -/** New Language Properties 05.10.2009 */ -ORYX.I18N.SyntaxChecker.BPMN2_GATEWAYDIRECTION_MIXED_FAILURE = "Das Gateway muss mehrere eingehende und ausgehende Sequenzflüsse besitzen."; -ORYX.I18N.SyntaxChecker.BPMN2_GATEWAYDIRECTION_CONVERGING_FAILURE = "Das Gateway muss mehrere eingehende aber darf keine mehrfache ausgehende Sequenzflüsse besitzen."; -ORYX.I18N.SyntaxChecker.BPMN2_GATEWAYDIRECTION_DIVERGING_FAILURE = "Das Gateway darf keine mehrfachen eingehenden aber muss mehrfache ausgehende Sequenzflüsse besitzen."; -ORYX.I18N.SyntaxChecker.BPMN2_GATEWAY_WITH_NO_OUTGOING_SEQUENCE_FLOW = "Ein Gateway muss mindestens einen ausgehenden Sequenzfluss besitzen."; -ORYX.I18N.SyntaxChecker.BPMN2_RECEIVE_TASK_WITH_ATTACHED_EVENT = "Empfangende Tasks, die in Ereignis-Gateway-Konfigurationen benutzt werden, dürfen keine angehefteten Zwischen-Ereignisse besitzen."; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_SUBPROCESS_BAD_CONNECTION = "Ein Ereignis-Unterprozess darf keinen eingehenden oder ausgehenden Sequenzfluss besitzen."; - -/** New Language Properties 13.10.2009 */ -ORYX.I18N.SyntaxChecker.BPMN_MESSAGE_FLOW_NOT_CONNECTED = "Mindestens ein Ende des Nachrichtenflusses muss mit einem anderen Objekt verbunden sein."; - -/** New Language Properties 05.11.2009 */ -if(!ORYX.I18N.RESIZE) ORYX.I18N.RESIZE = {}; -ORYX.I18N.RESIZE.tipGrow = "Zeichenfläche vergrößern:"; -ORYX.I18N.RESIZE.tipShrink = "Zeichenfläche verkleinern:"; -ORYX.I18N.RESIZE.N = "Nach oben"; -ORYX.I18N.RESIZE.W = "Nach links"; -ORYX.I18N.RESIZE.S ="Nach unten"; -ORYX.I18N.RESIZE.E ="Nach rechts"; - -/** New Language Properties 24.11.2009 */ -ORYX.I18N.SyntaxChecker.BPMN2_TOO_MANY_INITIATING_MESSAGES = "Eine Choreographie-Aktivität darf nur eine initiierende Nachricht besitzen."; -ORYX.I18N.SyntaxChecker.BPMN_MESSAGE_FLOW_NOT_ALLOWED = "Ein Nachrichtenfluss ist an dieser Stelle nicht erlaubt."; - -/** New Language Properties 27.11.2009 */ -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_WITH_TOO_LESS_INCOMING_SEQUENCE_FLOWS = "Ein Ereignis-basiertes Gateway, dass nicht instanziierend ist, muss mindestens einen eingehenden Kontrollfluss besitzen."; -ORYX.I18N.SyntaxChecker.BPMN2_TOO_FEW_INITIATING_PARTICIPANTS = "Eine Choreographie-Aktivität musst genau einen initiierenden Teilnehmer (weiß) besitzen."; -ORYX.I18N.SyntaxChecker.BPMN2_TOO_MANY_INITIATING_PARTICIPANTS = "Eine Choreographie-Aktivität darf nicht mehr als einen initiierenden Teilnehmer (weiß) besitzen." - -ORYX.I18N.SyntaxChecker.COMMUNICATION_AT_LEAST_TWO_PARTICIPANTS = "Die Kommunikation oder Sub-Konversation muss mit mindestens zwei Teilnehmern verbunden sein."; -ORYX.I18N.SyntaxChecker.MESSAGEFLOW_START_MUST_BE_PARTICIPANT = "Die Nachrichtenflussquelle muss ein Teilnehmer sein."; -ORYX.I18N.SyntaxChecker.MESSAGEFLOW_END_MUST_BE_PARTICIPANT = "Das Nachrichtenflussziel muss ein Teilnehmer sein."; -ORYX.I18N.SyntaxChecker.CONV_LINK_CANNOT_CONNECT_CONV_NODES = "Der Konversationslink muss eine Kommunikation oder Sub-Konversation mit einem Teilnehmer verbinden."; diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_en_us.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_en_us.js deleted file mode 100644 index 0d7ae466..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_en_us.js +++ /dev/null @@ -1,453 +0,0 @@ -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * @author nicolas.peters - * - * Contains all strings for the default language (en-us). - * Version 1 - 08/29/08 - */ -if(!ORYX) var ORYX = {}; - -if(!ORYX.I18N) ORYX.I18N = {}; - -ORYX.I18N.Language = "en_us"; //Pattern_ in lower case! - -if(!ORYX.I18N.Oryx) ORYX.I18N.Oryx = {}; - -ORYX.I18N.Oryx.title = "Oryx"; -ORYX.I18N.Oryx.noBackendDefined = "Caution! \nNo Backend defined.\n The requested model cannot be loaded. Try to load a configuration with a save plugin."; -ORYX.I18N.Oryx.pleaseWait = "Please wait while loading..."; -ORYX.I18N.Oryx.notLoggedOn = "Not logged on"; -ORYX.I18N.Oryx.editorOpenTimeout = "The editor does not seem to be started yet. Please check, whether you have a popup blocker enabled and disable it or allow popups for this site. We will never display any commercials on this site."; - -if(!ORYX.I18N.AddDocker) ORYX.I18N.AddDocker = {}; - -ORYX.I18N.AddDocker.group = "Docker"; -ORYX.I18N.AddDocker.add = "Add Docker"; -ORYX.I18N.AddDocker.addDesc = "Add a Docker to an edge, by clicking on it"; -ORYX.I18N.AddDocker.del = "Delete Docker"; -ORYX.I18N.AddDocker.delDesc = "Delete a Docker"; - -if(!ORYX.I18N.Arrangement) ORYX.I18N.Arrangement = {}; - -ORYX.I18N.Arrangement.groupZ = "Z-Order"; -ORYX.I18N.Arrangement.btf = "Bring To Front"; -ORYX.I18N.Arrangement.btfDesc = "Bring to Front"; -ORYX.I18N.Arrangement.btb = "Bring To Back"; -ORYX.I18N.Arrangement.btbDesc = "Bring To Back"; -ORYX.I18N.Arrangement.bf = "Bring Forward"; -ORYX.I18N.Arrangement.bfDesc = "Bring Forward"; -ORYX.I18N.Arrangement.bb = "Bring Backward"; -ORYX.I18N.Arrangement.bbDesc = "Bring Backward"; -ORYX.I18N.Arrangement.groupA = "Alignment"; -ORYX.I18N.Arrangement.ab = "Alignment Bottom"; -ORYX.I18N.Arrangement.abDesc = "Bottom"; -ORYX.I18N.Arrangement.am = "Alignment Middle"; -ORYX.I18N.Arrangement.amDesc = "Middle"; -ORYX.I18N.Arrangement.at = "Alignment Top"; -ORYX.I18N.Arrangement.atDesc = "Top"; -ORYX.I18N.Arrangement.al = "Alignment Left"; -ORYX.I18N.Arrangement.alDesc = "Left"; -ORYX.I18N.Arrangement.ac = "Alignment Center"; -ORYX.I18N.Arrangement.acDesc = "Center"; -ORYX.I18N.Arrangement.ar = "Alignment Right"; -ORYX.I18N.Arrangement.arDesc = "Right"; -ORYX.I18N.Arrangement.as = "Alignment Same Size"; -ORYX.I18N.Arrangement.asDesc = "Same Size"; - -if(!ORYX.I18N.Edit) ORYX.I18N.Edit = {}; - -ORYX.I18N.Edit.group = "Edit"; -ORYX.I18N.Edit.cut = "Cut"; -ORYX.I18N.Edit.cutDesc = "Cuts the selection into an Oryx clipboard"; -ORYX.I18N.Edit.copy = "Copy"; -ORYX.I18N.Edit.copyDesc = "Copies the selection into an Oryx clipboard"; -ORYX.I18N.Edit.paste = "Paste"; -ORYX.I18N.Edit.pasteDesc = "Pastes the Oryx clipboard to the canvas"; -ORYX.I18N.Edit.del = "Delete"; -ORYX.I18N.Edit.delDesc = "Deletes all selected shapes"; - -if(!ORYX.I18N.EPCSupport) ORYX.I18N.EPCSupport = {}; - -ORYX.I18N.EPCSupport.group = "EPC"; -ORYX.I18N.EPCSupport.exp = "Export EPC"; -ORYX.I18N.EPCSupport.expDesc = "Export diagram to EPML"; -ORYX.I18N.EPCSupport.imp = "Import EPC"; -ORYX.I18N.EPCSupport.impDesc = "Import an EPML file"; -ORYX.I18N.EPCSupport.progressExp = "Exporting model"; -ORYX.I18N.EPCSupport.selectFile = "Select an EPML (.empl) file to import."; -ORYX.I18N.EPCSupport.file = "File"; -ORYX.I18N.EPCSupport.impPanel = "Import EPML File"; -ORYX.I18N.EPCSupport.impBtn = "Import"; -ORYX.I18N.EPCSupport.close = "Close"; -ORYX.I18N.EPCSupport.error = "Error"; -ORYX.I18N.EPCSupport.progressImp = "Import..."; - -if(!ORYX.I18N.ERDFSupport) ORYX.I18N.ERDFSupport = {}; - -ORYX.I18N.ERDFSupport.exp = "Export to ERDF"; -ORYX.I18N.ERDFSupport.expDesc = "Export to ERDF"; -ORYX.I18N.ERDFSupport.imp = "Import from ERDF"; -ORYX.I18N.ERDFSupport.impDesc = "Import from ERDF"; -ORYX.I18N.ERDFSupport.impFailed = "Request for import of ERDF failed."; -ORYX.I18N.ERDFSupport.impFailed2 = "An error while importing occurs!
Please check error message:
"; -ORYX.I18N.ERDFSupport.error = "Error"; -ORYX.I18N.ERDFSupport.noCanvas = "The xml document has no Oryx canvas node included!"; -ORYX.I18N.ERDFSupport.noSS = "The Oryx canvas node has no stencil set definition included!"; -ORYX.I18N.ERDFSupport.wrongSS = "The given stencil set does not fit to the current editor!"; -ORYX.I18N.ERDFSupport.selectFile = "Select an ERDF (.xml) file or type in the ERDF to import it!"; -ORYX.I18N.ERDFSupport.file = "File"; -ORYX.I18N.ERDFSupport.impERDF = "Import ERDF"; -ORYX.I18N.ERDFSupport.impBtn = "Import"; -ORYX.I18N.ERDFSupport.impProgress = "Importing..."; -ORYX.I18N.ERDFSupport.close = "Close"; -ORYX.I18N.ERDFSupport.deprTitle = "Really export to eRDF?"; -ORYX.I18N.ERDFSupport.deprText = "Exporting to eRDF is not recommended anymore because the support will be stopped in future versions of the Oryx editor. If possible, export the model to JSON. Do you want to export anyway?"; - -if(!ORYX.I18N.jPDLSupport) ORYX.I18N.jPDLSupport = {}; - -ORYX.I18N.jPDLSupport.group = "ExecBPMN"; -ORYX.I18N.jPDLSupport.exp = "Export to jPDL"; -ORYX.I18N.jPDLSupport.expDesc = "Export to jPDL"; -ORYX.I18N.jPDLSupport.imp = "Import from jPDL"; -ORYX.I18N.jPDLSupport.impDesc = "Import jPDL File"; -ORYX.I18N.jPDLSupport.impFailedReq = "Request for import of jPDL failed."; -ORYX.I18N.jPDLSupport.impFailedJson = "Transformation of jPDL failed."; -ORYX.I18N.jPDLSupport.impFailedJsonAbort = "Import aborted."; -ORYX.I18N.jPDLSupport.loadSseQuestionTitle = "jBPM stencil set extension needs to be loaded"; -ORYX.I18N.jPDLSupport.loadSseQuestionBody = "In order to import jPDL, the stencil set extension has to be loaded. Do you want to proceed?"; -ORYX.I18N.jPDLSupport.expFailedReq = "Request for export of model failed."; -ORYX.I18N.jPDLSupport.expFailedXml = "Export to jPDL failed. Exporter reported: "; -ORYX.I18N.jPDLSupport.error = "Error"; -ORYX.I18N.jPDLSupport.selectFile = "Select an jPDL (.xml) file or type in the jPDL to import it!"; -ORYX.I18N.jPDLSupport.file = "File"; -ORYX.I18N.jPDLSupport.impJPDL = "Import jPDL"; -ORYX.I18N.jPDLSupport.impBtn = "Import"; -ORYX.I18N.jPDLSupport.impProgress = "Importing..."; -ORYX.I18N.jPDLSupport.close = "Close"; - -if(!ORYX.I18N.Save) ORYX.I18N.Save = {}; - -ORYX.I18N.Save.group = "File"; -ORYX.I18N.Save.save = "Save"; -ORYX.I18N.Save.saveDesc = "Save"; -ORYX.I18N.Save.saveAs = "Save As..."; -ORYX.I18N.Save.saveAsDesc = "Save As..."; -ORYX.I18N.Save.unsavedData = "There are unsaved data, please save before you leave, otherwise your changes get lost!"; -ORYX.I18N.Save.newProcess = "New Process"; -ORYX.I18N.Save.saveAsTitle = "Save as..."; -ORYX.I18N.Save.saveBtn = "Save"; -ORYX.I18N.Save.close = "Close"; -ORYX.I18N.Save.savedAs = "Saved As"; -ORYX.I18N.Save.saved = "Saved!"; -ORYX.I18N.Save.failed = "Saving failed."; -ORYX.I18N.Save.noRights = "You have no rights to save changes."; -ORYX.I18N.Save.saving = "Saving"; -ORYX.I18N.Save.saveAsHint = "The process diagram is stored under:"; - -if(!ORYX.I18N.File) ORYX.I18N.File = {}; - -ORYX.I18N.File.group = "File"; -ORYX.I18N.File.print = "Print"; -ORYX.I18N.File.printDesc = "Print current model"; -ORYX.I18N.File.pdf = "Export as PDF"; -ORYX.I18N.File.pdfDesc = "Export as PDF"; -ORYX.I18N.File.info = "Info"; -ORYX.I18N.File.infoDesc = "Info"; -ORYX.I18N.File.genPDF = "Generating PDF"; -ORYX.I18N.File.genPDFFailed = "Generating PDF failed."; -ORYX.I18N.File.printTitle = "Print"; -ORYX.I18N.File.printMsg = "We are currently experiencing problems with the printing function. We recommend using the PDF Export to print the diagram. Do you really want to continue printing?"; - -if(!ORYX.I18N.Grouping) ORYX.I18N.Grouping = {}; - -ORYX.I18N.Grouping.grouping = "Grouping"; -ORYX.I18N.Grouping.group = "Group"; -ORYX.I18N.Grouping.groupDesc = "Groups all selected shapes"; -ORYX.I18N.Grouping.ungroup = "Ungroup"; -ORYX.I18N.Grouping.ungroupDesc = "Deletes the group of all selected Shapes"; - -if(!ORYX.I18N.Loading) ORYX.I18N.Loading = {}; - -ORYX.I18N.Loading.waiting ="Please wait..."; - -if(!ORYX.I18N.PropertyWindow) ORYX.I18N.PropertyWindow = {}; - -ORYX.I18N.PropertyWindow.name = "Name"; -ORYX.I18N.PropertyWindow.value = "Value"; -ORYX.I18N.PropertyWindow.selected = "selected"; -ORYX.I18N.PropertyWindow.clickIcon = "Click Icon"; -ORYX.I18N.PropertyWindow.add = "Add"; -ORYX.I18N.PropertyWindow.rem = "Remove"; -ORYX.I18N.PropertyWindow.complex = "Editor for a Complex Type"; -ORYX.I18N.PropertyWindow.text = "Editor for a Text Type"; -ORYX.I18N.PropertyWindow.ok = "Ok"; -ORYX.I18N.PropertyWindow.cancel = "Cancel"; -ORYX.I18N.PropertyWindow.dateFormat = "m/d/y"; - -if(!ORYX.I18N.ShapeMenuPlugin) ORYX.I18N.ShapeMenuPlugin = {}; - -ORYX.I18N.ShapeMenuPlugin.drag = "Drag"; -ORYX.I18N.ShapeMenuPlugin.clickDrag = "Click or drag"; -ORYX.I18N.ShapeMenuPlugin.morphMsg = "Morph shape"; - -if(!ORYX.I18N.SyntaxChecker) ORYX.I18N.SyntaxChecker = {}; - -ORYX.I18N.SyntaxChecker.group = "Verification"; -ORYX.I18N.SyntaxChecker.name = "Syntax Checker"; -ORYX.I18N.SyntaxChecker.desc = "Check Syntax"; -ORYX.I18N.SyntaxChecker.noErrors = "There are no syntax errors."; -ORYX.I18N.SyntaxChecker.invalid = "Invalid answer from server."; -ORYX.I18N.SyntaxChecker.checkingMessage = "Checking ..."; - -if(!ORYX.I18N.FormHandler) ORYX.I18N.FormHandler = {}; - -ORYX.I18N.FormHandler.group = "FormHandling"; -ORYX.I18N.FormHandler.name = "FormHandler"; -ORYX.I18N.FormHandler.desc = "Testing from handling"; - -if(!ORYX.I18N.Deployer) ORYX.I18N.Deployer = {}; - -ORYX.I18N.Deployer.group = "Deployment"; -ORYX.I18N.Deployer.name = "Deployer"; -ORYX.I18N.Deployer.desc = "Deploy to engine"; - -if(!ORYX.I18N.Tester) ORYX.I18N.Tester = {}; - -ORYX.I18N.Tester.group = "Testing"; -ORYX.I18N.Tester.name = "Test process"; -ORYX.I18N.Tester.desc = "Open the test component to test this process definition"; - -if(!ORYX.I18N.Undo) ORYX.I18N.Undo = {}; - -ORYX.I18N.Undo.group = "Undo"; -ORYX.I18N.Undo.undo = "Undo"; -ORYX.I18N.Undo.undoDesc = "Undo the last action"; -ORYX.I18N.Undo.redo = "Redo"; -ORYX.I18N.Undo.redoDesc = "Redo the last undone action"; - -if(!ORYX.I18N.View) ORYX.I18N.View = {}; - -ORYX.I18N.View.group = "Zoom"; -ORYX.I18N.View.zoomIn = "Zoom In"; -ORYX.I18N.View.zoomInDesc = "Zoom into the model"; -ORYX.I18N.View.zoomOut = "Zoom Out"; -ORYX.I18N.View.zoomOutDesc = "Zoom out of the model"; -ORYX.I18N.View.zoomStandard = "Zoom Standard"; -ORYX.I18N.View.zoomStandardDesc = "Zoom to the standard level"; -ORYX.I18N.View.zoomFitToModel = "Zoom fit to model"; -ORYX.I18N.View.zoomFitToModelDesc = "Zoom to fit the model size"; - -if(!ORYX.I18N.XFormsSerialization) ORYX.I18N.XFormsSerialization = {}; - -ORYX.I18N.XFormsSerialization.group = "XForms Serialization"; -ORYX.I18N.XFormsSerialization.exportXForms = "XForms Export"; -ORYX.I18N.XFormsSerialization.exportXFormsDesc = "Export XForms+XHTML markup"; -ORYX.I18N.XFormsSerialization.importXForms = "XForms Import"; -ORYX.I18N.XFormsSerialization.importXFormsDesc = "Import XForms+XHTML markup"; -ORYX.I18N.XFormsSerialization.noClientXFormsSupport = "No XForms support"; -ORYX.I18N.XFormsSerialization.noClientXFormsSupportDesc = "Your browser does not support XForms. Please install the Mozilla XForms Add-on for Firefox.
"; -ORYX.I18N.XFormsSerialization.ok = "Ok"; -ORYX.I18N.XFormsSerialization.selectFile = "Select a XHTML (.xhtml) file or type in the XForms+XHTML markup to import it!"; -ORYX.I18N.XFormsSerialization.selectCss = "Please insert url of css file"; -ORYX.I18N.XFormsSerialization.file = "File"; -ORYX.I18N.XFormsSerialization.impFailed = "Request for import of document failed."; -ORYX.I18N.XFormsSerialization.impTitle = "Import XForms+XHTML document"; -ORYX.I18N.XFormsSerialization.expTitle = "Export XForms+XHTML document"; -ORYX.I18N.XFormsSerialization.impButton = "Import"; -ORYX.I18N.XFormsSerialization.impProgress = "Importing..."; -ORYX.I18N.XFormsSerialization.close = "Close"; - -/** New Language Properties: 08.12.2008 */ - -ORYX.I18N.PropertyWindow.title = "Properties"; - -if(!ORYX.I18N.ShapeRepository) ORYX.I18N.ShapeRepository = {}; -ORYX.I18N.ShapeRepository.title = "Shape Repository"; - -ORYX.I18N.Save.dialogDesciption = "Please enter a name, a description and a comment."; -ORYX.I18N.Save.dialogLabelTitle = "Title"; -ORYX.I18N.Save.dialogLabelDesc = "Description"; -ORYX.I18N.Save.dialogLabelType = "Type"; -ORYX.I18N.Save.dialogLabelComment = "Revision comment"; - -if(!ORYX.I18N.Perspective) ORYX.I18N.Perspective = {}; -ORYX.I18N.Perspective.no = "No Perspective" -ORYX.I18N.Perspective.noTip = "Unload the current perspective" - -/** New Language Properties: 21.04.2009 */ -ORYX.I18N.JSONSupport = { - imp: { - name: "Import from JSON", - desc: "Imports a model from JSON", - group: "Export", - selectFile: "Select an JSON (.json) file or type in JSON to import it!", - file: "File", - btnImp: "Import", - btnClose: "Close", - progress: "Importing ...", - syntaxError: "Syntax error" - }, - exp: { - name: "Export to JSON", - desc: "Exports current model to JSON", - group: "Export" - } -}; - -/** New Language Properties: 09.05.2009 */ -if(!ORYX.I18N.JSONImport) ORYX.I18N.JSONImport = {}; - -ORYX.I18N.JSONImport.title = "JSON Import"; -ORYX.I18N.JSONImport.wrongSS = "The stencil set of the imported file ({0}) does not match to the loaded stencil set ({1})." - -/** New Language Properties: 14.05.2009 */ -if(!ORYX.I18N.RDFExport) ORYX.I18N.RDFExport = {}; -ORYX.I18N.RDFExport.group = "Export"; -ORYX.I18N.RDFExport.rdfExport = "Export to RDF"; -ORYX.I18N.RDFExport.rdfExportDescription = "Exports current model to the XML serialization defined for the Resource Description Framework (RDF)"; - -/** New Language Properties: 15.05.2009*/ -if(!ORYX.I18N.SyntaxChecker.BPMN) ORYX.I18N.SyntaxChecker.BPMN={}; -ORYX.I18N.SyntaxChecker.BPMN_NO_SOURCE = "An edge must have a source."; -ORYX.I18N.SyntaxChecker.BPMN_NO_TARGET = "An edge must have a target."; -ORYX.I18N.SyntaxChecker.BPMN_DIFFERENT_PROCESS = "Source and target node must be contained in the same process."; -ORYX.I18N.SyntaxChecker.BPMN_SAME_PROCESS = "Source and target node must be contained in different pools."; -ORYX.I18N.SyntaxChecker.BPMN_FLOWOBJECT_NOT_CONTAINED_IN_PROCESS = "A flow object must be contained in a process."; -ORYX.I18N.SyntaxChecker.BPMN_ENDEVENT_WITHOUT_INCOMING_CONTROL_FLOW = "An end event must have an incoming sequence flow."; -ORYX.I18N.SyntaxChecker.BPMN_STARTEVENT_WITHOUT_OUTGOING_CONTROL_FLOW = "A start event must have an outgoing sequence flow."; -ORYX.I18N.SyntaxChecker.BPMN_STARTEVENT_WITH_INCOMING_CONTROL_FLOW = "Start events must not have incoming sequence flows."; -ORYX.I18N.SyntaxChecker.BPMN_ATTACHEDINTERMEDIATEEVENT_WITH_INCOMING_CONTROL_FLOW = "Attached intermediate events must not have incoming sequence flows."; -ORYX.I18N.SyntaxChecker.BPMN_ATTACHEDINTERMEDIATEEVENT_WITHOUT_OUTGOING_CONTROL_FLOW = "Attached intermediate events must have exactly one outgoing sequence flow."; -ORYX.I18N.SyntaxChecker.BPMN_ENDEVENT_WITH_OUTGOING_CONTROL_FLOW = "End events must not have outgoing sequence flows."; -ORYX.I18N.SyntaxChecker.BPMN_EVENTBASEDGATEWAY_BADCONTINUATION = "Event-based gateways must not be followed by gateways or subprocesses."; -ORYX.I18N.SyntaxChecker.BPMN_NODE_NOT_ALLOWED = "Node type is not allowed."; - -if(!ORYX.I18N.SyntaxChecker.IBPMN) ORYX.I18N.SyntaxChecker.IBPMN={}; -ORYX.I18N.SyntaxChecker.IBPMN_NO_ROLE_SET = "Interactions must have a sender and a receiver role set"; -ORYX.I18N.SyntaxChecker.IBPMN_NO_INCOMING_SEQFLOW = "This node must have incoming sequence flow."; -ORYX.I18N.SyntaxChecker.IBPMN_NO_OUTGOING_SEQFLOW = "This node must have outgoing sequence flow."; - -if(!ORYX.I18N.SyntaxChecker.InteractionNet) ORYX.I18N.SyntaxChecker.InteractionNet={}; -ORYX.I18N.SyntaxChecker.InteractionNet_SENDER_NOT_SET = "Sender not set"; -ORYX.I18N.SyntaxChecker.InteractionNet_RECEIVER_NOT_SET = "Receiver not set"; -ORYX.I18N.SyntaxChecker.InteractionNet_MESSAGETYPE_NOT_SET = "Message type not set"; -ORYX.I18N.SyntaxChecker.InteractionNet_ROLE_NOT_SET = "Role not set"; - -if(!ORYX.I18N.SyntaxChecker.EPC) ORYX.I18N.SyntaxChecker.EPC={}; -ORYX.I18N.SyntaxChecker.EPC_NO_SOURCE = "Each edge must have a source."; -ORYX.I18N.SyntaxChecker.EPC_NO_TARGET = "Each edge must have a target."; -ORYX.I18N.SyntaxChecker.EPC_NOT_CONNECTED = "Node must be connected with edges."; -ORYX.I18N.SyntaxChecker.EPC_NOT_CONNECTED_2 = "Node must be connected with more edges."; -ORYX.I18N.SyntaxChecker.EPC_TOO_MANY_EDGES = "Node has too many connected edges."; -ORYX.I18N.SyntaxChecker.EPC_NO_CORRECT_CONNECTOR = "Node is no correct connector."; -ORYX.I18N.SyntaxChecker.EPC_MANY_STARTS = "There must be only one start event."; -ORYX.I18N.SyntaxChecker.EPC_FUNCTION_AFTER_OR = "There must be no functions after a splitting OR/XOR."; -ORYX.I18N.SyntaxChecker.EPC_PI_AFTER_OR = "There must be no process interface after a splitting OR/XOR."; -ORYX.I18N.SyntaxChecker.EPC_FUNCTION_AFTER_FUNCTION = "There must be no function after a function."; -ORYX.I18N.SyntaxChecker.EPC_EVENT_AFTER_EVENT = "There must be no event after an event."; -ORYX.I18N.SyntaxChecker.EPC_PI_AFTER_FUNCTION = "There must be no process interface after a function."; -ORYX.I18N.SyntaxChecker.EPC_FUNCTION_AFTER_PI = "There must be no function after a process interface."; -ORYX.I18N.SyntaxChecker.EPC_SOURCE_EQUALS_TARGET = "Edge must connect two distinct nodes." - -if(!ORYX.I18N.SyntaxChecker.PetriNet) ORYX.I18N.SyntaxChecker.PetriNet={}; -ORYX.I18N.SyntaxChecker.PetriNet_NOT_BIPARTITE = "The graph is not bipartite"; -ORYX.I18N.SyntaxChecker.PetriNet_NO_LABEL = "Label not set for a labeled transition"; -ORYX.I18N.SyntaxChecker.PetriNet_NO_ID = "There is a node without id"; -ORYX.I18N.SyntaxChecker.PetriNet_SAME_SOURCE_AND_TARGET = "Two flow relationships have the same source and target"; -ORYX.I18N.SyntaxChecker.PetriNet_NODE_NOT_SET = "A node is not set for a flowrelationship"; - -/** New Language Properties: 02.06.2009*/ -ORYX.I18N.Edge = "Edge"; -ORYX.I18N.Node = "Node"; - -/** New Language Properties: 03.06.2009*/ -ORYX.I18N.SyntaxChecker.notice = "Move the mouse over a red cross icon to see the error message."; - -/** New Language Properties: 05.06.2009*/ -if(!ORYX.I18N.RESIZE) ORYX.I18N.RESIZE = {}; -ORYX.I18N.RESIZE.tipGrow = "Increase canvas size:"; -ORYX.I18N.RESIZE.tipShrink = "Decrease canvas size:"; -ORYX.I18N.RESIZE.N = "Top"; -ORYX.I18N.RESIZE.W = "Left"; -ORYX.I18N.RESIZE.S ="Down"; -ORYX.I18N.RESIZE.E ="Right"; - -/** New Language Properties: 15.07.2009*/ -if(!ORYX.I18N.Layouting) ORYX.I18N.Layouting ={}; -ORYX.I18N.Layouting.doing = "Layouting..."; - -/** New Language Properties: 18.08.2009*/ -ORYX.I18N.SyntaxChecker.MULT_ERRORS = "Multiple Errors"; - -/** New Language Properties: 08.09.2009*/ -if(!ORYX.I18N.PropertyWindow) ORYX.I18N.PropertyWindow = {}; -ORYX.I18N.PropertyWindow.oftenUsed = "Often used"; -ORYX.I18N.PropertyWindow.moreProps = "More Properties"; - -/** New Language Properties 01.10.2009 */ -if(!ORYX.I18N.SyntaxChecker.BPMN2) ORYX.I18N.SyntaxChecker.BPMN2 = {}; - -ORYX.I18N.SyntaxChecker.BPMN2_DATA_INPUT_WITH_INCOMING_DATA_ASSOCIATION = "A Data Input must not have any incoming Data Associations."; -ORYX.I18N.SyntaxChecker.BPMN2_DATA_OUTPUT_WITH_OUTGOING_DATA_ASSOCIATION = "A Data Output must not have any outgoing Data Associations."; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_TARGET_WITH_TOO_MANY_INCOMING_SEQUENCE_FLOWS = "Targets of Event-based Gateways may only have one incoming Sequence Flow."; - -/** New Language Properties 02.10.2009 */ -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_WITH_TOO_LESS_OUTGOING_SEQUENCE_FLOWS = "An Event-based Gateway must have two or more outgoing Sequence Flows."; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_EVENT_TARGET_CONTRADICTION = "If Message Intermediate Events are used in the configuration, then Receive Tasks must not be used and vice versa."; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_WRONG_TRIGGER = "Only the following Intermediate Event triggers are valid: Message, Signal, Timer, Conditional and Multiple."; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_WRONG_CONDITION_EXPRESSION = "The outgoing Sequence Flows of the Event Gateway must not have a condition expression."; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_NOT_INSTANTIATING = "The Gateway does not meet the conditions to instantiate the process. Please use a start event or an instantiating attribute for the gateway."; - -/** New Language Properties 05.10.2009 */ -ORYX.I18N.SyntaxChecker.BPMN2_GATEWAYDIRECTION_MIXED_FAILURE = "The Gateway must have both multiple incoming and outgoing Sequence Flows."; -ORYX.I18N.SyntaxChecker.BPMN2_GATEWAYDIRECTION_CONVERGING_FAILURE = "The Gateway must have multiple incoming but most NOT have multiple outgoing Sequence Flows."; -ORYX.I18N.SyntaxChecker.BPMN2_GATEWAYDIRECTION_DIVERGING_FAILURE = "The Gateway must NOT have multiple incoming but must have multiple outgoing Sequence Flows."; -ORYX.I18N.SyntaxChecker.BPMN2_GATEWAY_WITH_NO_OUTGOING_SEQUENCE_FLOW = "A Gateway must have a minimum of one outgoing Sequence Flow."; -ORYX.I18N.SyntaxChecker.BPMN2_RECEIVE_TASK_WITH_ATTACHED_EVENT = "Receive Tasks used in Event Gateway configurations must not have any attached Intermediate Events."; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_SUBPROCESS_BAD_CONNECTION = "An Event Subprocess must not have any incoming or outgoing Sequence Flow."; - -/** New Language Properties 13.10.2009 */ -ORYX.I18N.SyntaxChecker.BPMN_MESSAGE_FLOW_NOT_CONNECTED = "At least one side of the Message Flow has to be connected."; - -/** New Language Properties 24.11.2009 */ -ORYX.I18N.SyntaxChecker.BPMN2_TOO_MANY_INITIATING_MESSAGES = "A Choreography Activity may only have one initiating message."; -ORYX.I18N.SyntaxChecker.BPMN_MESSAGE_FLOW_NOT_ALLOWED = "A Message Flow is not allowed here."; - -/** New Language Properties 27.11.2009 */ -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_WITH_TOO_LESS_INCOMING_SEQUENCE_FLOWS = "An Event-based Gateway that is not instantiating must have a minimum of one incoming Sequence Flow."; -ORYX.I18N.SyntaxChecker.BPMN2_TOO_FEW_INITIATING_PARTICIPANTS = "A Choreography Activity must have one initiating Participant (white)."; -ORYX.I18N.SyntaxChecker.BPMN2_TOO_MANY_INITIATING_PARTICIPANTS = "A Choreography Acitivity must not have more than one initiating Participant (white)." - -ORYX.I18N.SyntaxChecker.COMMUNICATION_AT_LEAST_TWO_PARTICIPANTS = "The communication must be connected to at least two participants."; -ORYX.I18N.SyntaxChecker.MESSAGEFLOW_START_MUST_BE_PARTICIPANT = "The message flow's source must be a participant."; -ORYX.I18N.SyntaxChecker.MESSAGEFLOW_END_MUST_BE_PARTICIPANT = "The message flow's target must be a participant."; -ORYX.I18N.SyntaxChecker.CONV_LINK_CANNOT_CONNECT_CONV_NODES = "The conversation link must connect a communication or sub conversation node with a participant."; diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_ja_jp.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_ja_jp.js deleted file mode 100644 index 43a2c918..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_ja_jp.js +++ /dev/null @@ -1,453 +0,0 @@ -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * @author nicolas.peters - * - * Contains all strings for the default language (en-us). - * Version 1 - 08/29/08 - */ -if(!ORYX) var ORYX = {}; - -if(!ORYX.I18N) ORYX.I18N = {}; - -ORYX.I18N.Language = "ja_jp"; //Pattern_ in lower case! - -if(!ORYX.I18N.Oryx) ORYX.I18N.Oryx = {}; - -ORYX.I18N.Oryx.title = "Oryx"; -ORYX.I18N.Oryx.noBackendDefined = "注意! \nバックエンドが定義されていません。\n 要求されたモデルはロードできません。 保存プラグインを使って設定をロードしてください。"; -ORYX.I18N.Oryx.pleaseWait = "しばらくお待ちください ロード中..."; -ORYX.I18N.Oryx.notLoggedOn = "ログオンしていません"; -ORYX.I18N.Oryx.editorOpenTimeout = "エディターはまだ開始されていません。広告ブロッカーの設定などをご確認ください。このサイトでは広告は表示されません。"; - -if(!ORYX.I18N.AddDocker) ORYX.I18N.AddDocker = {}; - -ORYX.I18N.AddDocker.group = "Docker"; -ORYX.I18N.AddDocker.add = "Docker追加"; -ORYX.I18N.AddDocker.addDesc = "クリックしてエッジにDockerを追加"; -ORYX.I18N.AddDocker.del = "Docker削除"; -ORYX.I18N.AddDocker.delDesc = "Dockerを削除"; - -if(!ORYX.I18N.Arrangement) ORYX.I18N.Arrangement = {}; - -ORYX.I18N.Arrangement.groupZ = "Z-順"; -ORYX.I18N.Arrangement.btf = "最前面に移動"; -ORYX.I18N.Arrangement.btfDesc = "最前面に移動"; -ORYX.I18N.Arrangement.btb = "最背面に移動"; -ORYX.I18N.Arrangement.btbDesc = "最背面に移動"; -ORYX.I18N.Arrangement.bf = "前へ移動"; -ORYX.I18N.Arrangement.bfDesc = "前へ移動"; -ORYX.I18N.Arrangement.bb = "後へ移動"; -ORYX.I18N.Arrangement.bbDesc = "後へ移動"; -ORYX.I18N.Arrangement.groupA = "整列"; -ORYX.I18N.Arrangement.ab = "整列 下"; -ORYX.I18N.Arrangement.abDesc = "下"; -ORYX.I18N.Arrangement.am = "整列 中"; -ORYX.I18N.Arrangement.amDesc = "中"; -ORYX.I18N.Arrangement.at = "整列 上"; -ORYX.I18N.Arrangement.atDesc = "上"; -ORYX.I18N.Arrangement.al = "整列 左"; -ORYX.I18N.Arrangement.alDesc = "左"; -ORYX.I18N.Arrangement.ac = "整列 中央"; -ORYX.I18N.Arrangement.acDesc = "中央"; -ORYX.I18N.Arrangement.ar = "整列 右"; -ORYX.I18N.Arrangement.arDesc = "右"; -ORYX.I18N.Arrangement.as = "整列 同サイズ"; -ORYX.I18N.Arrangement.asDesc = "同サイズ"; - -if(!ORYX.I18N.Edit) ORYX.I18N.Edit = {}; - -ORYX.I18N.Edit.group = "編集"; -ORYX.I18N.Edit.cut = "カット"; -ORYX.I18N.Edit.cutDesc = "Oryxクリップボードへカット"; -ORYX.I18N.Edit.copy = "コピー"; -ORYX.I18N.Edit.copyDesc = "Oryxクリップボードへコピー"; -ORYX.I18N.Edit.paste = "ペースト"; -ORYX.I18N.Edit.pasteDesc = "Oryxクリップボードからキャンバスへ貼り付け"; -ORYX.I18N.Edit.del = "削除"; -ORYX.I18N.Edit.delDesc = "選択した図形をすべて削除"; - -if(!ORYX.I18N.EPCSupport) ORYX.I18N.EPCSupport = {}; - -ORYX.I18N.EPCSupport.group = "EPC"; -ORYX.I18N.EPCSupport.exp = "EPCエクスポート"; -ORYX.I18N.EPCSupport.expDesc = "ダイアグラムをEPMLにエクスポート"; -ORYX.I18N.EPCSupport.imp = "EPCインポート"; -ORYX.I18N.EPCSupport.impDesc = "EPMLファイルをインポート"; -ORYX.I18N.EPCSupport.progressExp = "モデルをエクスポート中"; -ORYX.I18N.EPCSupport.selectFile = "EPML (.empl) ファイルを選択してください。"; -ORYX.I18N.EPCSupport.file = "ファイル"; -ORYX.I18N.EPCSupport.impPanel = "EPMLファイルインポート"; -ORYX.I18N.EPCSupport.impBtn = "インポート"; -ORYX.I18N.EPCSupport.close = "閉じる"; -ORYX.I18N.EPCSupport.error = "エラー"; -ORYX.I18N.EPCSupport.progressImp = "インポート中..."; - -if(!ORYX.I18N.ERDFSupport) ORYX.I18N.ERDFSupport = {}; - -ORYX.I18N.ERDFSupport.exp = "ERDFエクスポート"; -ORYX.I18N.ERDFSupport.expDesc = "ERDFにエクスポート"; -ORYX.I18N.ERDFSupport.imp = "ERDFインポート"; -ORYX.I18N.ERDFSupport.impDesc = "ERDFからインポート"; -ORYX.I18N.ERDFSupport.impFailed = "ERDFインポートのリクエストに失敗しました。"; -ORYX.I18N.ERDFSupport.impFailed2 = "インポート中にエラーが発生しました。
エラーメッセージを確認してください。
"; -ORYX.I18N.ERDFSupport.error = "エラー"; -ORYX.I18N.ERDFSupport.noCanvas = "XML文書内にOryxキャンバスのノードがありません。"; -ORYX.I18N.ERDFSupport.noSS = "Oryxキャンバスのノードにステンシルセットの定義が含まれていません。"; -ORYX.I18N.ERDFSupport.wrongSS = "ステンシルセットが現在のエディターにあっていません。"; -ORYX.I18N.ERDFSupport.selectFile = "ERDF (.xml) ファイルを選択してください。"; -ORYX.I18N.ERDFSupport.file = "ファイル"; -ORYX.I18N.ERDFSupport.impERDF = "ERDFインポート"; -ORYX.I18N.ERDFSupport.impBtn = "インポート"; -ORYX.I18N.ERDFSupport.impProgress = "インポート中..."; -ORYX.I18N.ERDFSupport.close = "閉じる"; -ORYX.I18N.ERDFSupport.deprTitle = "eRDFにエクスポートしますか?"; -ORYX.I18N.ERDFSupport.deprText = "Exporting to eRDFへのエクスポートは将来のバージョンのOryxエディターではサポートされなくなるため推奨されません。それでもエクスポートを実行しますか? "; - -if(!ORYX.I18N.jPDLSupport) ORYX.I18N.jPDLSupport = {}; - -ORYX.I18N.jPDLSupport.group = "BPMN実行"; -ORYX.I18N.jPDLSupport.exp = "Export to jPDLエクスポート"; -ORYX.I18N.jPDLSupport.expDesc = "jPDLにエクスポート"; -ORYX.I18N.jPDLSupport.imp = "jPDLインポート"; -ORYX.I18N.jPDLSupport.impDesc = "jPDLファイルをインポート"; -ORYX.I18N.jPDLSupport.impFailedReq = "jPDLインポートのリクエストに失敗しました。"; -ORYX.I18N.jPDLSupport.impFailedJson = "jPDLの変換に失敗しました。"; -ORYX.I18N.jPDLSupport.impFailedJsonAbort = "インポートは中止されました。"; -ORYX.I18N.jPDLSupport.loadSseQuestionTitle = "jBPMステンシルセット拡張をロードする必要があります。"; -ORYX.I18N.jPDLSupport.loadSseQuestionBody = "jPDLインポートを実行するために、ステンシルセット拡張をロードする必要があります。処理を進めますか?"; -ORYX.I18N.jPDLSupport.expFailedReq = "モデルエクスポートのリクエストに失敗しました。"; -ORYX.I18N.jPDLSupport.expFailedXml = "jPDLエクスポートに失敗しました。 "; -ORYX.I18N.jPDLSupport.error = "エラー"; -ORYX.I18N.jPDLSupport.selectFile = "jPDL (.xml) ファイルを選択してください。"; -ORYX.I18N.jPDLSupport.file = "ファイル"; -ORYX.I18N.jPDLSupport.impJPDL = "jPDLインポート"; -ORYX.I18N.jPDLSupport.impBtn = "インポート"; -ORYX.I18N.jPDLSupport.impProgress = "インポート中..."; -ORYX.I18N.jPDLSupport.close = "閉じる"; - -if(!ORYX.I18N.Save) ORYX.I18N.Save = {}; - -ORYX.I18N.Save.group = "ファイル"; -ORYX.I18N.Save.save = "保存"; -ORYX.I18N.Save.saveDesc = "保存"; -ORYX.I18N.Save.saveAs = "名前をつけて保存"; -ORYX.I18N.Save.saveAsDesc = "名前をつけて保存"; -ORYX.I18N.Save.unsavedData = "保存されていないデータがあります。画面を離れる前に保存をしてください。変更が失われます"; -ORYX.I18N.Save.newProcess = "新規プロセス"; -ORYX.I18N.Save.saveAsTitle = "名前をつけて保存"; -ORYX.I18N.Save.saveBtn = "保存"; -ORYX.I18N.Save.close = "閉じる"; -ORYX.I18N.Save.savedAs = "名前をつけて保存"; -ORYX.I18N.Save.saved = "保存されました。"; -ORYX.I18N.Save.failed = "保存に失敗しました。"; -ORYX.I18N.Save.noRights = "保存をするための権限がありません。"; -ORYX.I18N.Save.saving = "保存中"; -ORYX.I18N.Save.saveAsHint = "プロセスダイアグラムが保存されます。"; - -if(!ORYX.I18N.File) ORYX.I18N.File = {}; - -ORYX.I18N.File.group = "ファイル"; -ORYX.I18N.File.print = "印刷"; -ORYX.I18N.File.printDesc = "現在のモデルを印刷"; -ORYX.I18N.File.pdf = "PDFエクスポート"; -ORYX.I18N.File.pdfDesc = "PDFとしてエクスポート"; -ORYX.I18N.File.info = "情報"; -ORYX.I18N.File.infoDesc = "情報"; -ORYX.I18N.File.genPDF = "PDF生成中"; -ORYX.I18N.File.genPDFFailed = "PDF生成に失敗しました。"; -ORYX.I18N.File.printTitle = "印刷"; -ORYX.I18N.File.printMsg = "印刷機能には現在いくつかの問題が発見されているため、PDFエクスポート機能を推奨しています。印刷を実行しますか?"; - -if(!ORYX.I18N.Grouping) ORYX.I18N.Grouping = {}; - -ORYX.I18N.Grouping.grouping = "グループ化"; -ORYX.I18N.Grouping.group = "グループ"; -ORYX.I18N.Grouping.groupDesc = "選択した図形をグループ化"; -ORYX.I18N.Grouping.ungroup = "グループ解除"; -ORYX.I18N.Grouping.ungroupDesc = "選択した図形のグループを解除"; - -if(!ORYX.I18N.Loading) ORYX.I18N.Loading = {}; - -ORYX.I18N.Loading.waiting ="しばらくお待ちください..."; - -if(!ORYX.I18N.PropertyWindow) ORYX.I18N.PropertyWindow = {}; - -ORYX.I18N.PropertyWindow.name = "名前"; -ORYX.I18N.PropertyWindow.value = "値"; -ORYX.I18N.PropertyWindow.selected = "選択済"; -ORYX.I18N.PropertyWindow.clickIcon = "アイコンクリック"; -ORYX.I18N.PropertyWindow.add = "追加"; -ORYX.I18N.PropertyWindow.rem = "削除"; -ORYX.I18N.PropertyWindow.complex = "複雑な型のためのエディター"; -ORYX.I18N.PropertyWindow.text = "テキスト型のためのエディター"; -ORYX.I18N.PropertyWindow.ok = "OK"; -ORYX.I18N.PropertyWindow.cancel = "キャンセル"; -ORYX.I18N.PropertyWindow.dateFormat = "y/m/d"; - -if(!ORYX.I18N.ShapeMenuPlugin) ORYX.I18N.ShapeMenuPlugin = {}; - -ORYX.I18N.ShapeMenuPlugin.drag = "ドラッグ"; -ORYX.I18N.ShapeMenuPlugin.clickDrag = "クリックかドラッグ"; -ORYX.I18N.ShapeMenuPlugin.morphMsg = "図形の変形"; - -if(!ORYX.I18N.SyntaxChecker) ORYX.I18N.SyntaxChecker = {}; - -ORYX.I18N.SyntaxChecker.group = "検証"; -ORYX.I18N.SyntaxChecker.name = "文法チェッカー"; -ORYX.I18N.SyntaxChecker.desc = "文法チェック"; -ORYX.I18N.SyntaxChecker.noErrors = "文法エラーはありません。"; -ORYX.I18N.SyntaxChecker.invalid = "サーバーの応答が不正です。"; -ORYX.I18N.SyntaxChecker.checkingMessage = "チェック中..."; - -if(!ORYX.I18N.FormHandler) ORYX.I18N.FormHandler = {}; - -ORYX.I18N.FormHandler.group = "フォームハンドリング"; -ORYX.I18N.FormHandler.name = "フォームハンドラー"; -ORYX.I18N.FormHandler.desc = "ハンドリングテスト"; - -if(!ORYX.I18N.Deployer) ORYX.I18N.Deployer = {}; - -ORYX.I18N.Deployer.group = "デプロイメント"; -ORYX.I18N.Deployer.name = "デプロイヤー"; -ORYX.I18N.Deployer.desc = "エンジンへのデプロイ"; - -if(!ORYX.I18N.Tester) ORYX.I18N.Tester = {}; - -ORYX.I18N.Tester.group = "テスト"; -ORYX.I18N.Tester.name = "プロセスのテスト"; -ORYX.I18N.Tester.desc = "このプロセス定義をテストするためにテストコンポーネントを開きます。"; - -if(!ORYX.I18N.Undo) ORYX.I18N.Undo = {}; - -ORYX.I18N.Undo.group = "取り消し/やり直し"; -ORYX.I18N.Undo.undo = "取り消す"; -ORYX.I18N.Undo.undoDesc = "最後のアクションを取り消す"; -ORYX.I18N.Undo.redo = "やり直す"; -ORYX.I18N.Undo.redoDesc = "取り消したアクションをやり直す"; - -if(!ORYX.I18N.View) ORYX.I18N.View = {}; - -ORYX.I18N.View.group = "拡大/縮小"; -ORYX.I18N.View.zoomIn = "拡大"; -ORYX.I18N.View.zoomInDesc = "モデルの拡大表示。ズームイン"; -ORYX.I18N.View.zoomOut = "縮小t"; -ORYX.I18N.View.zoomOutDesc = "モデルの縮小表示。ズームアウト"; -ORYX.I18N.View.zoomStandard = "標準"; -ORYX.I18N.View.zoomStandardDesc = "モデルの初期表示"; -ORYX.I18N.View.zoomFitToModel = "モデルに合わせる"; -ORYX.I18N.View.zoomFitToModelDesc = "モデルのサイズに合わせた表示"; - -if(!ORYX.I18N.XFormsSerialization) ORYX.I18N.XFormsSerialization = {}; - -ORYX.I18N.XFormsSerialization.group = "XFormsシリアライズ"; -ORYX.I18N.XFormsSerialization.exportXForms = "XFormsエクスポート"; -ORYX.I18N.XFormsSerialization.exportXFormsDesc = "XForms+XHTMLマークアップにエクスポート"; -ORYX.I18N.XFormsSerialization.importXForms = "XFormsインポート"; -ORYX.I18N.XFormsSerialization.importXFormsDesc = "XForms+XHTMLマークアップをインポート"; -ORYX.I18N.XFormsSerialization.noClientXFormsSupport = "XFormsがサポートされていません。"; -ORYX.I18N.XFormsSerialization.noClientXFormsSupportDesc = "あなたのブラウザはXFormsをサポートしていません。 Mozilla XFormsアドオン をFirefoxにインストールしてください。
"; -ORYX.I18N.XFormsSerialization.ok = "OK"; -ORYX.I18N.XFormsSerialization.selectFile = "XHTML (.xhtml) ファイルを選択してください。"; -ORYX.I18N.XFormsSerialization.selectCss = "CSSファイルのURLを挿入してください。"; -ORYX.I18N.XFormsSerialization.file = "ファイル"; -ORYX.I18N.XFormsSerialization.impFailed = "文書インポートのリクエストに失敗しました。"; -ORYX.I18N.XFormsSerialization.impTitle = "XForms+XHTML文書インポート"; -ORYX.I18N.XFormsSerialization.expTitle = "XForms+XHTML文書エクスポート"; -ORYX.I18N.XFormsSerialization.impButton = "インポート"; -ORYX.I18N.XFormsSerialization.impProgress = "インポート中..."; -ORYX.I18N.XFormsSerialization.close = "閉じる"; - -/** New Language Properties: 08.12.2008 */ - -ORYX.I18N.PropertyWindow.title = "プロパティ"; - -if(!ORYX.I18N.ShapeRepository) ORYX.I18N.ShapeRepository = {}; -ORYX.I18N.ShapeRepository.title = "図形リポジトリー"; - -ORYX.I18N.Save.dialogDesciption = "名前、説明、コメントを入力してください。"; -ORYX.I18N.Save.dialogLabelTitle = "タイトル"; -ORYX.I18N.Save.dialogLabelDesc = "説明"; -ORYX.I18N.Save.dialogLabelType = "型(タイプ)"; -ORYX.I18N.Save.dialogLabelComment = "版コメント"; - -if(!ORYX.I18N.Perspective) ORYX.I18N.Perspective = {}; -ORYX.I18N.Perspective.no = "パースペクティブなし" -ORYX.I18N.Perspective.noTip = "現在のパースペクティブをアンロードします。" - -/** New Language Properties: 21.04.2009 */ -ORYX.I18N.JSONSupport = { - imp: { - name: "JSONインポート", - desc: "JSONからモデルをインポート", - group: "エクスポート", - selectFile: "JSON (.json)ファイルを選択してください。", - file: "File", - btnImp: "インポート", - btnClose: "閉じる", - progress: "インポート中...", - syntaxError: "文法エラー" - }, - exp: { - name: "SONエクスポート", - desc: "現在のモデルをJSONにエクスポート", - group: "エクスポート" - } -}; - -/** New Language Properties: 09.05.2009 */ -if(!ORYX.I18N.JSONImport) ORYX.I18N.JSONImport = {}; - -ORYX.I18N.JSONImport.title = "JSONインポート"; -ORYX.I18N.JSONImport.wrongSS = "インポートファイル ({0})のステンシスセットはロードされているステンシルセット ({1})と合いません。" - -/** New Language Properties: 14.05.2009 */ -if(!ORYX.I18N.RDFExport) ORYX.I18N.RDFExport = {}; -ORYX.I18N.RDFExport.group = "エクスポート"; -ORYX.I18N.RDFExport.rdfExport = "RDFエクスポート"; -ORYX.I18N.RDFExport.rdfExportDescription = "現在のモデルをResource Description Framework (RDF)で定義されたXMLシリアライズ形式にエクスポート"; - -/** New Language Properties: 15.05.2009*/ -if(!ORYX.I18N.SyntaxChecker.BPMN) ORYX.I18N.SyntaxChecker.BPMN={}; -ORYX.I18N.SyntaxChecker.BPMN_NO_SOURCE = "エッジにはソースが必要です。"; -ORYX.I18N.SyntaxChecker.BPMN_NO_TARGET = "エッジにはターゲットが必要です。"; -ORYX.I18N.SyntaxChecker.BPMN_DIFFERENT_PROCESS = "ソースとターゲットのノードは同じプロセスに含まれている必要があります。"; -ORYX.I18N.SyntaxChecker.BPMN_SAME_PROCESS = "ソースとターゲットのノードは異なるプールに含まれている必要があります。"; -ORYX.I18N.SyntaxChecker.BPMN_FLOWOBJECT_NOT_CONTAINED_IN_PROCESS = "プロセスにはフローオブジェクトが含まれている必要があります。"; -ORYX.I18N.SyntaxChecker.BPMN_ENDEVENT_WITHOUT_INCOMING_CONTROL_FLOW = "終了イベントには入力シーケンスフローが必要です。"; -ORYX.I18N.SyntaxChecker.BPMN_STARTEVENT_WITHOUT_OUTGOING_CONTROL_FLOW = "開始イベントには出力シーケンスフローが必要です。"; -ORYX.I18N.SyntaxChecker.BPMN_STARTEVENT_WITH_INCOMING_CONTROL_FLOW = "開始イベントは入力シーケンスフローを持つことができません。"; -ORYX.I18N.SyntaxChecker.BPMN_ATTACHEDINTERMEDIATEEVENT_WITH_INCOMING_CONTROL_FLOW = "境界の中間イベントは入力シーケンスフローを持つことができません。"; -ORYX.I18N.SyntaxChecker.BPMN_ATTACHEDINTERMEDIATEEVENT_WITHOUT_OUTGOING_CONTROL_FLOW = "境界の中間イベントには出力シーケンスフローが必要です。"; -ORYX.I18N.SyntaxChecker.BPMN_ENDEVENT_WITH_OUTGOING_CONTROL_FLOW = "終了イベントは出力シーケンスフローを持つことができません。"; -ORYX.I18N.SyntaxChecker.BPMN_EVENTBASEDGATEWAY_BADCONTINUATION = "イベントベースゲートウェイはゲートウェイやサブプロセスで受けることができません。"; -ORYX.I18N.SyntaxChecker.BPMN_NODE_NOT_ALLOWED = "ノードタイプが許可されません。"; - -if(!ORYX.I18N.SyntaxChecker.IBPMN) ORYX.I18N.SyntaxChecker.IBPMN={}; -ORYX.I18N.SyntaxChecker.IBPMN_NO_ROLE_SET = "インタラクションには送信者/受信者のロールセットが必要です。"; -ORYX.I18N.SyntaxChecker.IBPMN_NO_INCOMING_SEQFLOW = "このノードには入力シーケンスフローが必要です。"; -ORYX.I18N.SyntaxChecker.IBPMN_NO_OUTGOING_SEQFLOW = "このノードには出力シーケンスフローが必要です。"; - -if(!ORYX.I18N.SyntaxChecker.InteractionNet) ORYX.I18N.SyntaxChecker.InteractionNet={}; -ORYX.I18N.SyntaxChecker.InteractionNet_SENDER_NOT_SET = "送信者未設定"; -ORYX.I18N.SyntaxChecker.InteractionNet_RECEIVER_NOT_SET = "受信者未設定"; -ORYX.I18N.SyntaxChecker.InteractionNet_MESSAGETYPE_NOT_SET = "メッセージタイプ未設定"; -ORYX.I18N.SyntaxChecker.InteractionNet_ROLE_NOT_SET = "ロール未設定"; - -if(!ORYX.I18N.SyntaxChecker.EPC) ORYX.I18N.SyntaxChecker.EPC={}; -ORYX.I18N.SyntaxChecker.EPC_NO_SOURCE = "エッジにはソースが必要です。"; -ORYX.I18N.SyntaxChecker.EPC_NO_TARGET = "エッジにはターゲットが必要です。"; -ORYX.I18N.SyntaxChecker.EPC_NOT_CONNECTED = "ノードはエッジと接続している必要があります。"; -ORYX.I18N.SyntaxChecker.EPC_NOT_CONNECTED_2 = "ノードに接続するエッジが不足しています。"; -ORYX.I18N.SyntaxChecker.EPC_TOO_MANY_EDGES = "ノードに接続するエッジが多すぎます。"; -ORYX.I18N.SyntaxChecker.EPC_NO_CORRECT_CONNECTOR = "適切なコネクタがありません。"; -ORYX.I18N.SyntaxChecker.EPC_MANY_STARTS = "開始イベントは1つだけにする必要があります。"; -ORYX.I18N.SyntaxChecker.EPC_FUNCTION_AFTER_OR = "OR/XOR分岐の後に関数を設定することはできません。"; -ORYX.I18N.SyntaxChecker.EPC_PI_AFTER_OR = "OR/XOR分岐の後にプロセスインターフェースを設定することはできません。"; -ORYX.I18N.SyntaxChecker.EPC_FUNCTION_AFTER_FUNCTION = "関数の後に関数を設定することはできません。"; -ORYX.I18N.SyntaxChecker.EPC_EVENT_AFTER_EVENT = "イベントの後にイベントを設定することはできません。"; -ORYX.I18N.SyntaxChecker.EPC_PI_AFTER_FUNCTION = "関数の後にプロセスインターフェースを設定することはできません。"; -ORYX.I18N.SyntaxChecker.EPC_FUNCTION_AFTER_PI = "プロセスインターフェースの後に関数を設定することはできません。"; -ORYX.I18N.SyntaxChecker.EPC_SOURCE_EQUALS_TARGET = "エッジには2つの異なるノードが接続される必要があります。" - -if(!ORYX.I18N.SyntaxChecker.PetriNet) ORYX.I18N.SyntaxChecker.PetriNet={}; -ORYX.I18N.SyntaxChecker.PetriNet_NOT_BIPARTITE = "2部グラフ構造は許可されません。"; -ORYX.I18N.SyntaxChecker.PetriNet_NO_LABEL = "トランジションにラベルが設定されていません。"; -ORYX.I18N.SyntaxChecker.PetriNet_NO_ID = "IDの無いノードがあります。"; -ORYX.I18N.SyntaxChecker.PetriNet_SAME_SOURCE_AND_TARGET = "同じソースとターゲットを持つ重複したフローがあります。"; -ORYX.I18N.SyntaxChecker.PetriNet_NODE_NOT_SET = "ノードがフローにセットされていません。"; - -/** New Language Properties: 02.06.2009*/ -ORYX.I18N.Edge = "エッジ"; -ORYX.I18N.Node = "ノード"; - -/** New Language Properties: 03.06.2009*/ -ORYX.I18N.SyntaxChecker.notice = "赤い×印のアイコンにマウスカーソルを重ねてエラーメッセージを確認してください。"; - -/** New Language Properties: 05.06.2009*/ -if(!ORYX.I18N.RESIZE) ORYX.I18N.RESIZE = {}; -ORYX.I18N.RESIZE.tipGrow = "キャンパス拡大:"; -ORYX.I18N.RESIZE.tipShrink = "キャンパス縮小:"; -ORYX.I18N.RESIZE.N = "上"; -ORYX.I18N.RESIZE.W = "左"; -ORYX.I18N.RESIZE.S ="下"; -ORYX.I18N.RESIZE.E ="右"; - -/** New Language Properties: 15.07.2009*/ -if(!ORYX.I18N.Layouting) ORYX.I18N.Layouting ={}; -ORYX.I18N.Layouting.doing = "レイアウト中..."; - -/** New Language Properties: 18.08.2009*/ -ORYX.I18N.SyntaxChecker.MULT_ERRORS = "複数のエラー"; - -/** New Language Properties: 08.09.2009*/ -if(!ORYX.I18N.PropertyWindow) ORYX.I18N.PropertyWindow = {}; -ORYX.I18N.PropertyWindow.oftenUsed = "よく使う"; -ORYX.I18N.PropertyWindow.moreProps = "その他のプロパティ"; - -/** New Language Properties 01.10.2009 */ -if(!ORYX.I18N.SyntaxChecker.BPMN2) ORYX.I18N.SyntaxChecker.BPMN2 = {}; - -ORYX.I18N.SyntaxChecker.BPMN2_DATA_INPUT_WITH_INCOMING_DATA_ASSOCIATION = "データ入力は入力データアソシエーションを持つことができません。"; -ORYX.I18N.SyntaxChecker.BPMN2_DATA_OUTPUT_WITH_OUTGOING_DATA_ASSOCIATION = "データ出力は出力データアソシエーションを持つことができません。"; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_TARGET_WITH_TOO_MANY_INCOMING_SEQUENCE_FLOWS = "イベントベースゲートウェイのターゲットは入力シーケンスフローを1つだけ持つことができます。"; - -/** New Language Properties 02.10.2009 */ -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_WITH_TOO_LESS_OUTGOING_SEQUENCE_FLOWS = "イベントベースゲートウェイは最低でも2つの出力シーケンスフローを持つ必要があります。"; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_EVENT_TARGET_CONTRADICTION = "メッセージ中間イベントと受信タスクは同時に使うことはできません。"; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_WRONG_TRIGGER = "以下の中間イベントのみ利用可能です: メッセージ、シグナル、タイマー、条件、複合"; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_WRONG_CONDITION_EXPRESSION = "イベントゲートウェイの出力シーケンスフローには条件を設定できません。"; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_NOT_INSTANTIATING = "ゲートウェイはプロセスのインスタンス化の条件を満たしていません。開始イベントもしくはインスタンス化属性を使用してください。"; - -/** New Language Properties 05.10.2009 */ -ORYX.I18N.SyntaxChecker.BPMN2_GATEWAYDIRECTION_MIXED_FAILURE = "ゲートウェイには複数の入力/出力シーケンスフローが必要です。"; -ORYX.I18N.SyntaxChecker.BPMN2_GATEWAYDIRECTION_CONVERGING_FAILURE = "ゲートウェイには複数の入力シーケンスフローが必要ですが、出力シーケンスフローを複数設定することはできません。"; -ORYX.I18N.SyntaxChecker.BPMN2_GATEWAYDIRECTION_DIVERGING_FAILURE = "ゲートウェイには複数の出力シーケンスフローが必要ですが、入力シーケンスフローを複数設定することはできません。"; -ORYX.I18N.SyntaxChecker.BPMN2_GATEWAY_WITH_NO_OUTGOING_SEQUENCE_FLOW = "ゲートウェイは最低でも1つの出力シーケンスフローを持つ必要があります。"; -ORYX.I18N.SyntaxChecker.BPMN2_RECEIVE_TASK_WITH_ATTACHED_EVENT = "イベントゲートウェイの設定で使われる受信タスクには境界の中間イベントを設定できません。"; -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_SUBPROCESS_BAD_CONNECTION = "イベントサブプロセスは入力/出力シーケンスフローを持つことができません。"; - -/** New Language Properties 13.10.2009 */ -ORYX.I18N.SyntaxChecker.BPMN_MESSAGE_FLOW_NOT_CONNECTED = "メッセージフローは最低でも片側が接続されている必要があります。"; - -/** New Language Properties 24.11.2009 */ -ORYX.I18N.SyntaxChecker.BPMN2_TOO_MANY_INITIATING_MESSAGES = "コレオグラフィーアクティビティーは1つだけ開始メッセージを持つことができます。"; -ORYX.I18N.SyntaxChecker.BPMN_MESSAGE_FLOW_NOT_ALLOWED = "ここではメッセージフローは許可されません。"; - -/** New Language Properties 27.11.2009 */ -ORYX.I18N.SyntaxChecker.BPMN2_EVENT_BASED_WITH_TOO_LESS_INCOMING_SEQUENCE_FLOWS = "インスタンス化ではないイベントゲートウェイは最低でも1つの入力シーケンスフローを必要とします。"; -ORYX.I18N.SyntaxChecker.BPMN2_TOO_FEW_INITIATING_PARTICIPANTS = "コレオグラフィーアクティビティーには開始する参加者(白)が必要です。"; -ORYX.I18N.SyntaxChecker.BPMN2_TOO_MANY_INITIATING_PARTICIPANTS = "コレオグラフィーアクティビティーには開始する参加者(白)を複数設定することはできません。" - -ORYX.I18N.SyntaxChecker.COMMUNICATION_AT_LEAST_TWO_PARTICIPANTS = "コミュニケーションには最低でも2つの参加者が必要です。"; -ORYX.I18N.SyntaxChecker.MESSAGEFLOW_START_MUST_BE_PARTICIPANT = "メッセージフローのソースは参加者である必要があります。"; -ORYX.I18N.SyntaxChecker.MESSAGEFLOW_END_MUST_BE_PARTICIPANT = "メッセージフローのターゲットは参加者である必要があります。"; -ORYX.I18N.SyntaxChecker.CONV_LINK_CANNOT_CONNECT_CONV_NODES = "カンバセーションのリンクはコミュニケーションか参加者付きのサブカンバセーションノードと接続する必要があります。"; diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_signavio_de.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_signavio_de.js deleted file mode 100644 index 192834ff..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_signavio_de.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -Ext.PagingToolbar.prototype.firstText = "Erste Seite"; -Ext.PagingToolbar.prototype.prevText = "Vorherige Seite"; -Ext.PagingToolbar.prototype.nextText = "Nächste Seite"; -Ext.PagingToolbar.prototype.lastText = "Letzte Seite"; - - -ORYX.I18N.PropertyWindow.dateFormat = "d.m.y"; - - -ORYX.I18N.View.East = "Attribute"; -ORYX.I18N.View.West = "Modellierungselemente"; - -ORYX.I18N.Oryx.pleaseWait = "Der Signavio Process Editor wird geladen. Bitte warten..."; -ORYX.I18N.AddDocker.add = "Docker hinzufügen"; -ORYX.I18N.AddDocker.del = "Docker löschen"; -ORYX.I18N.ERDFSupport.noCanvas = "Das XML Dokument enthält keinen Canvas Knoten."; -ORYX.I18N.ERDFSupport.deprText = "Der Export nach eRDF wird nicht empfohlen, da dieses Format in zukünftigen Versionen des Signavio Process Editors nicht mehr unterstützt wird. Verwenden Sie stattdessen den Export nach JSON, falls möglich. Wollen Sie dennoch das Model nach eRDF exportieren?"; -ORYX.I18N.Save.unsavedData = "Das Diagramm enthält nicht gespeicherte Daten. Sind Sie sicher, dass Sie den Editor schließen möchten?"; -ORYX.I18N.Save.pleaseWait = "Bitte warten Sie, während
das Diagramm gespeichert wird."; -ORYX.I18N.File.info = "Info"; -ORYX.I18N.File.infoDesc = "Info"; -ORYX.I18N.PropertyWindow.name = "Attribut"; -ORYX.I18N.View.zoomStandard = "Zoom: Originalgröße"; -ORYX.I18N.View.zoomStandardDesc = "Zoom: Originalgröße"; -ORYX.I18N.View.zoomFitToModel = "Zoom: Modellgröße"; -ORYX.I18N.View.zoomFitToModelDesc = "Zoom: Modellgröße"; -ORYX.I18N.ShapeRepository.title = "Modellierungselemente"; -ORYX.I18N.Save.dialogLabelComment = "Änderungs-\nkommentar"; - -ORYX.I18N.Save.saveAs = "Kopie speichern..."; -ORYX.I18N.Save.saveAsDesc = "Kopie speichern..."; -ORYX.I18N.Save.saveAsTitle = "Kopie speichern..."; -ORYX.I18N.Save.savedAs = "Kopie gespeichert"; -ORYX.I18N.Save.savedDescription = "Das kopierte Diagramm ist unter folgendem Link gespeichert"; -ORYX.I18N.Save.notAuthorized = "Sie sind derzeit nicht angemeldet. Bitte melden Sie sich in einem neuen Fenstern an, damit Sie diese Model speichern können." -ORYX.I18N.Save.transAborted = "Die Anfrage zum Speichern Ihres Diagramms hat zu lange gedauert. Bitte benutzen Sie eine schnellere Internetverbindung. Wenn Sie eine kabellose Internetverbindung benutzen, dann überprüfen Sie bitte die Signalstärke."; -ORYX.I18N.Save.noRights = "Sie haben nicht die benötigten Rechte, um das Diagramm abzuspeichern. Bitte überprüfen Sie im Signavio Explorer, ob Sie noch die benötigten Rechte im Zielordner besitzen."; -ORYX.I18N.Save.comFailed = "Die Kommunikation mit dem Signavio Server ist fehlgeschlagen. Bitte überprüfen Sie Ihre Internetverbindung. Wenn das Problem weiterhin besteht, wenden Sie sich bitte an den Signavio Support über das Briefumschlagssymbol in der Toolbar."; -ORYX.I18N.Save.failed = "Beim Speichern Ihres Diagramms ist ein Problem aufgetreten. Bitte versuchen Sie es erneut. Wenn das Problem weiterhin besteht, wenden Sie sich bitte an den Signavio Support über das Briefumschlagssymbol in der Toolbar."; -ORYX.I18N.Save.exception = "Beim Speichern Ihres Diagramms sind einige Probleme aufgetreten. Bitte versuchen Sie es erneut. Wenn das Problem weiterhin besteht, wenden Sie sich bitte an den Signavio Support über das Briefumschlagssymbol in der Toolbar."; -ORYX.I18N.Save.retrieveData = "Bitte warten, Daten werden geladen"; - -/** New Language Properties: 10.6.09*/ -if(!ORYX.I18N.ShapeMenuPlugin) ORYX.I18N.ShapeMenuPlugin = {}; -ORYX.I18N.ShapeMenuPlugin.morphMsg = "Umwandeln"; -ORYX.I18N.ShapeMenuPlugin.morphWarningTitleMsg = "Umwandeln"; -ORYX.I18N.ShapeMenuPlugin.morphWarningMsg = "Einige Kindelemente können nicht im neuen Element enthalten sein.
Möchten Sie dennoch das Element umwandeln?"; - -if (!Signavio) { var Signavio = {}; } -if (!Signavio.I18N) { Signavio.I18N = {} } -if (!Signavio.I18N.Editor) { Signavio.I18N.Editor = {} } - -if (!Signavio.I18N.Editor.Linking) { Signavio.I18N.Editor.Linking = {} } -Signavio.I18N.Editor.Linking.CreateDiagram = "Neues Diagramm erstellen:"; -Signavio.I18N.Editor.Linking.UseDiagram = "Vorhandenes Diagramm verwenden"; -Signavio.I18N.Editor.Linking.UseLink = "Web-Link verwenden"; -Signavio.I18N.Editor.Linking.CreateTitle = "Verlinkung setzen"; -Signavio.I18N.Editor.Linking.Close = "Schließen"; -Signavio.I18N.Editor.Linking.Cancel = "Abbrechen"; -Signavio.I18N.Editor.Linking.UseName = "Diagrammnamen übernehmen"; -Signavio.I18N.Editor.Linking.UseNameHint = "Ersetzt den Bezeichner des aktuellen Elements ({type}) durch den Namen des zu verlinkenden Diagramms."; -Signavio.I18N.Editor.Linking.AlertSelectModel = "Bitte selektieren Sie ein Diagramm."; -Signavio.I18N.Editor.Linking.ButtonLink = "Verlinkung setzen"; -Signavio.I18N.Editor.Linking.LinkNoAccess = "Sie haben keine Berechtigung für das Diagramm."; -Signavio.I18N.Editor.Linking.LinkUnavailable = "Das Diagramm ist nicht verfügbar."; -Signavio.I18N.Editor.Linking.RemoveLink = "Link löschen"; -Signavio.I18N.Editor.Linking.EditLink = "Link ändern"; -Signavio.I18N.Editor.Linking.OpenLink = "Öffnen"; -Signavio.I18N.Editor.Linking.BrokenLink = "Der Link ist nicht verfügbar!"; -Signavio.I18N.Editor.Linking.PreviewTitle = "Vorschau"; - -if(!ORYX.I18N.PropertyWindow) ORYX.I18N.PropertyWindow = {}; -ORYX.I18N.PropertyWindow.oftenUsed = "Hauptattribute"; -ORYX.I18N.PropertyWindow.moreProps = "Weitere Attribute"; -ORYX.I18N.PropertyWindow.characteristicNr = "Kennzahlen"; -ORYX.I18N.PropertyWindow.meta = "Eigene Attribute"; - -if(!ORYX.I18N.PropertyWindow.Category){ORYX.I18N.PropertyWindow.Category = {}} -ORYX.I18N.PropertyWindow.Category.popular = "Hauptattribute"; -ORYX.I18N.PropertyWindow.Category.characteristicnr = "Kennzahlen"; -ORYX.I18N.PropertyWindow.Category.others = "Weitere Attribute"; -ORYX.I18N.PropertyWindow.Category.meta = "Eigene Attribute"; - -if(!ORYX.I18N.PropertyWindow.ListView) ORYX.I18N.PropertyWindow.ListView = {}; -ORYX.I18N.PropertyWindow.ListView.title = "Attribut: "; -ORYX.I18N.PropertyWindow.ListView.dataViewLabel = "Bereits vorhandene Einträge"; -ORYX.I18N.PropertyWindow.ListView.dataViewEmptyText = "Es sind noch keine Einträge vorhanden."; -ORYX.I18N.PropertyWindow.ListView.addEntryLabel = "Neuen Eintrag hinzufügen"; -ORYX.I18N.PropertyWindow.ListView.buttonAdd = "Hinzufügen"; -ORYX.I18N.PropertyWindow.ListView.save = "Speichern"; -ORYX.I18N.PropertyWindow.ListView.cancel = "Abbrachen"; - -if(!Signavio.I18N.Buttons) Signavio.I18N.Buttons = {}; -Signavio.I18N.Buttons.save = "Speichern"; -Signavio.I18N.Buttons.cancel = "Abbrechen"; -Signavio.I18N.Buttons.remove = "Entfernen"; - -if(!Signavio.I18N.btn) {Signavio.I18N.btn = {};} -Signavio.I18N.btn.btnEdit = "Editieren"; -Signavio.I18N.btn.btnRemove = "Löschen"; -Signavio.I18N.btn.moveUp = "Nach oben"; -Signavio.I18N.btn.moveDown = "Nach unten"; - -if(!Signavio.I18N.field) {Signavio.I18N.field = {};} -Signavio.I18N.field.Url = "URL"; -Signavio.I18N.field.UrlLabel = "Label"; \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_signavio_en_us.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_signavio_en_us.js deleted file mode 100644 index c21240dc..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_signavio_en_us.js +++ /dev/null @@ -1,138 +0,0 @@ -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -ORYX.I18N.PropertyWindow.dateFormat = "d/m/y"; - -ORYX.I18N.View.East = "Attributes"; -ORYX.I18N.View.West = "Modeling Elements"; - -ORYX.I18N.Oryx.title = "Signavio"; -ORYX.I18N.Oryx.pleaseWait = "Please wait while the Signavio Process Editor is loading..."; -ORYX.I18N.Edit.cutDesc = "Cuts the selection into the clipboard"; -ORYX.I18N.Edit.copyDesc = "Copies the selection into the clipboard"; -ORYX.I18N.Edit.pasteDesc = "Pastes the clipboard to the canvas"; -ORYX.I18N.ERDFSupport.noCanvas = "The xml document has no canvas node included!"; -ORYX.I18N.ERDFSupport.noSS = "The Signavio Process Editor canvas node has no stencil set definition included!"; -ORYX.I18N.ERDFSupport.deprText = "Exporting to eRDF is not recommended anymore because the support will be stopped in future versions of the Signavio Process Editor. If possible, export the model to JSON. Do you want to export anyway?"; -ORYX.I18N.Save.pleaseWait = "Please wait
while saving..."; - -ORYX.I18N.Save.saveAs = "Save a copy..."; -ORYX.I18N.Save.saveAsDesc = "Save a copy..."; -ORYX.I18N.Save.saveAsTitle = "Save a copy..."; -ORYX.I18N.Save.savedAs = "Copy saved"; -ORYX.I18N.Save.savedDescription = "The process diagram is stored under"; -ORYX.I18N.Save.notAuthorized = "You are currently not logged in. Please log in in a new window so that you can save the current diagram." -ORYX.I18N.Save.transAborted = "The saving request took too long. You may use a faster internet connection. If you use wireless LAN, please check the strength of your connection."; -ORYX.I18N.Save.noRights = "You do not have the required rights to store that model. Please check in the Signavio Explorer, if you still have the rights to write in the target directory."; -ORYX.I18N.Save.comFailed = "The communication with the Signavio server failed. Please check your internet connection. If the problem resides, please contact the Signavio Support via the envelope symbol in the toolbar."; -ORYX.I18N.Save.failed = "Something went wrong when trying to save your diagram. Please try again. If the problem resides, please contact the Signavio Support via the envelope symbol in the toolbar."; -ORYX.I18N.Save.exception = "Some exceptions are raised while trying to save your diagram. Please try again. If the problem resides, please contact the Signavio Support via the envelope symbol in the toolbar."; -ORYX.I18N.Save.retrieveData = "Please wait, data is retrieving."; - -/** New Language Properties: 10.6.09*/ -if(!ORYX.I18N.ShapeMenuPlugin) ORYX.I18N.ShapeMenuPlugin = {}; -ORYX.I18N.ShapeMenuPlugin.morphMsg = "Transform shape"; -ORYX.I18N.ShapeMenuPlugin.morphWarningTitleMsg = "Transform shape"; -ORYX.I18N.ShapeMenuPlugin.morphWarningMsg = "There are child shape which can not be contained in the transformed element.
Do you want to transform anyway?"; - -if (!Signavio) { var Signavio = {}; } -if (!Signavio.I18N) { Signavio.I18N = {} } -if (!Signavio.I18N.Editor) { Signavio.I18N.Editor = {} } - -if (!Signavio.I18N.Editor.Linking) { Signavio.I18N.Editor.Linking = {} } -Signavio.I18N.Editor.Linking.CreateDiagram = "Create a new diagram"; -Signavio.I18N.Editor.Linking.UseDiagram = "Use existing diagram"; -Signavio.I18N.Editor.Linking.UseLink = "Use web link"; -Signavio.I18N.Editor.Linking.Close = "Close"; -Signavio.I18N.Editor.Linking.Cancel = "Cancel"; -Signavio.I18N.Editor.Linking.UseName = "Adopt diagram name"; -Signavio.I18N.Editor.Linking.UseNameHint = "Replaces the current name of the modeling element ({type}) with the name of the linked diagram."; -Signavio.I18N.Editor.Linking.CreateTitle = "Establish link"; -Signavio.I18N.Editor.Linking.AlertSelectModel = "You have to select a model."; -Signavio.I18N.Editor.Linking.ButtonLink = "Link diagram"; -Signavio.I18N.Editor.Linking.LinkNoAccess = "You have no access to this diagram."; -Signavio.I18N.Editor.Linking.LinkUnavailable = "The diagram is unavailable."; -Signavio.I18N.Editor.Linking.RemoveLink = "Remove link"; -Signavio.I18N.Editor.Linking.EditLink = "Edit Link"; -Signavio.I18N.Editor.Linking.OpenLink = "Open"; -Signavio.I18N.Editor.Linking.BrokenLink = "The link is broken!"; -Signavio.I18N.Editor.Linking.PreviewTitle = "Preview"; - -if(!Signavio.I18N.Glossary_Support) { Signavio.I18N.Glossary_Support = {}; } -Signavio.I18N.Glossary_Support.renameEmpty = "No dictionary entry"; -Signavio.I18N.Glossary_Support.renameLoading = "Searching..."; - -/** New Language Properties: 08.09.2009*/ -if(!ORYX.I18N.PropertyWindow) ORYX.I18N.PropertyWindow = {}; -ORYX.I18N.PropertyWindow.oftenUsed = "Main properties"; -ORYX.I18N.PropertyWindow.moreProps = "More properties"; - -ORYX.I18N.PropertyWindow.btnOpen = "Open"; -ORYX.I18N.PropertyWindow.btnRemove = "Remove"; -ORYX.I18N.PropertyWindow.btnEdit = "Edit"; -ORYX.I18N.PropertyWindow.btnUp = "Move up"; -ORYX.I18N.PropertyWindow.btnDown = "Move down"; -ORYX.I18N.PropertyWindow.createNew = "Create new"; - -if(!ORYX.I18N.PropertyWindow) ORYX.I18N.PropertyWindow = {}; -ORYX.I18N.PropertyWindow.oftenUsed = "Main attributes"; -ORYX.I18N.PropertyWindow.moreProps = "More attributes"; -ORYX.I18N.PropertyWindow.characteristicNr = "Cost & Resource Analysis"; -ORYX.I18N.PropertyWindow.meta = "Custom attributes"; - -if(!ORYX.I18N.PropertyWindow.Category){ORYX.I18N.PropertyWindow.Category = {}} -ORYX.I18N.PropertyWindow.Category.popular = "Main Attributes"; -ORYX.I18N.PropertyWindow.Category.characteristicnr = "Cost & Resource Analysis"; -ORYX.I18N.PropertyWindow.Category.others = "More Attributes"; -ORYX.I18N.PropertyWindow.Category.meta = "Custom Attributes"; - -if(!ORYX.I18N.PropertyWindow.ListView) ORYX.I18N.PropertyWindow.ListView = {}; -ORYX.I18N.PropertyWindow.ListView.title = "Edit: "; -ORYX.I18N.PropertyWindow.ListView.dataViewLabel = "Already existing entries."; -ORYX.I18N.PropertyWindow.ListView.dataViewEmptyText = "No list entries."; -ORYX.I18N.PropertyWindow.ListView.addEntryLabel = "Add a new entry"; -ORYX.I18N.PropertyWindow.ListView.buttonAdd = "Add"; -ORYX.I18N.PropertyWindow.ListView.save = "Save"; -ORYX.I18N.PropertyWindow.ListView.cancel = "Cancel"; - -if(!Signavio.I18N.Buttons) Signavio.I18N.Buttons = {}; -Signavio.I18N.Buttons.save = "Save"; -Signavio.I18N.Buttons.cancel = "Cancel"; -Signavio.I18N.Buttons.remove = "Remove"; - -if(!Signavio.I18N.btn) {Signavio.I18N.btn = {};} -Signavio.I18N.btn.btnEdit = "Edit"; -Signavio.I18N.btn.btnRemove = "Remove"; -Signavio.I18N.btn.moveUp = "Move up"; -Signavio.I18N.btn.moveDown = "Move down"; - -if(!Signavio.I18N.field) {Signavio.I18N.field = {};} -Signavio.I18N.field.Url = "URL"; -Signavio.I18N.field.UrlLabel = "Label"; diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_signavio_ja_jp.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_signavio_ja_jp.js deleted file mode 100644 index df904915..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/i18n/translation_signavio_ja_jp.js +++ /dev/null @@ -1,138 +0,0 @@ -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -ORYX.I18N.PropertyWindow.dateFormat = "y/m/d"; - -ORYX.I18N.View.East = "属性"; -ORYX.I18N.View.West = "モデリング要素"; - -ORYX.I18N.Oryx.title = "Signavio"; -ORYX.I18N.Oryx.pleaseWait = "Signavioプロセスエディターの起動中..."; -ORYX.I18N.Edit.cutDesc = "選択部分をクリップボードへカット"; -ORYX.I18N.Edit.copyDesc = "選択部分をクリップボードへコピー"; -ORYX.I18N.Edit.pasteDesc = "クリップボードからキャンバスへ貼り付け"; -ORYX.I18N.ERDFSupport.noCanvas = "XML文書にキャンバスノードが含まれていません。"; -ORYX.I18N.ERDFSupport.noSS = "Signavioプロセスエディターのキャンバスノードにステンシルセットの定義が含まれていません。"; -ORYX.I18N.ERDFSupport.deprText = "eRDFエクスポートは将来のバージョンでサポートされなくなるため推奨されません。エクスポートを実行しますか? "; -ORYX.I18N.Save.pleaseWait = "しばらくお待ちください
保存中..."; - -ORYX.I18N.Save.saveAs = "複製を保存..."; -ORYX.I18N.Save.saveAsDesc = "複製を保存..."; -ORYX.I18N.Save.saveAsTitle = "複製を保存..."; -ORYX.I18N.Save.savedAs = "複製が保存されました。"; -ORYX.I18N.Save.savedDescription = "プロセス図が保存されました。"; -ORYX.I18N.Save.notAuthorized = "ログインしていません。 ログイン してから、保存してください。" -ORYX.I18N.Save.transAborted = "保存処理に時間がかかりすぎています。より高速なインターネット接続を試してください。無線LANの場合は接続の強度を確認してください。 "; -ORYX.I18N.Save.noRights = "モデルを保存するための権限がありません。Signavio Explorerで、保存先ディレクトリーへの書き込み権限があることを確認してください。"; -ORYX.I18N.Save.comFailed = "Signavioサーバーとの通信に失敗しました。インターネット接続を確認してください。問題が解決しない場合、ツールバーの封筒アイコンからSignavioサポートへコンタクトしてください。"; -ORYX.I18N.Save.failed = "保存に失敗しました。もう一度試してみてください。問題が解決しない場合、ツールバーの封筒アイコンからSignavioサポートへコンタクトしてください。"; -ORYX.I18N.Save.exception = "保存時に例外が発生しました。もう一度試してみてください。問題が解決しない場合、ツールバーの封筒アイコンからSignavioサポートへコンタクトしてください。"; -ORYX.I18N.Save.retrieveData = "しばらくお待ちください。データを取得中です。"; - -/** New Language Properties: 10.6.09*/ -if(!ORYX.I18N.ShapeMenuPlugin) ORYX.I18N.ShapeMenuPlugin = {}; -ORYX.I18N.ShapeMenuPlugin.morphMsg = "図形を変形"; -ORYX.I18N.ShapeMenuPlugin.morphWarningTitleMsg = "図形を変形"; -ORYX.I18N.ShapeMenuPlugin.morphWarningMsg = "変形した要素には所属できない子図形があります。
変形を実行しますか?"; - -if (!Signavio) { var Signavio = {}; } -if (!Signavio.I18N) { Signavio.I18N = {} } -if (!Signavio.I18N.Editor) { Signavio.I18N.Editor = {} } - -if (!Signavio.I18N.Editor.Linking) { Signavio.I18N.Editor.Linking = {} } -Signavio.I18N.Editor.Linking.CreateDiagram = "新規作成"; -Signavio.I18N.Editor.Linking.UseDiagram = "既存のダイアグラムを使用"; -Signavio.I18N.Editor.Linking.UseLink = "Webリンクを使用"; -Signavio.I18N.Editor.Linking.Close = "閉じる"; -Signavio.I18N.Editor.Linking.Cancel = "キャンセル"; -Signavio.I18N.Editor.Linking.UseName = "名前をあわせる"; -Signavio.I18N.Editor.Linking.UseNameHint = "モデリング要素({type})の名前をリンクしたダイアグラムの名前で置き換える。"; -Signavio.I18N.Editor.Linking.CreateTitle = "リンクを作成"; -Signavio.I18N.Editor.Linking.AlertSelectModel = "モデルを選ぶ必要があります。"; -Signavio.I18N.Editor.Linking.ButtonLink = "ダイアグラムをリンク"; -Signavio.I18N.Editor.Linking.LinkNoAccess = "このダイアグラムへの権限がありません。"; -Signavio.I18N.Editor.Linking.LinkUnavailable = "ダイアグラムが利用不能です。"; -Signavio.I18N.Editor.Linking.RemoveLink = "リンクを削除"; -Signavio.I18N.Editor.Linking.EditLink = "リンクを編集"; -Signavio.I18N.Editor.Linking.OpenLink = "開く"; -Signavio.I18N.Editor.Linking.BrokenLink = "リンクが壊れています。"; -Signavio.I18N.Editor.Linking.PreviewTitle = "プレビュー"; - -if(!Signavio.I18N.Glossary_Support) { Signavio.I18N.Glossary_Support = {}; } -Signavio.I18N.Glossary_Support.renameEmpty = "辞書エントリーがありません"; -Signavio.I18N.Glossary_Support.renameLoading = "検索中..."; - -/** New Language Properties: 08.09.2009*/ -if(!ORYX.I18N.PropertyWindow) ORYX.I18N.PropertyWindow = {}; -ORYX.I18N.PropertyWindow.oftenUsed = "主な属性"; -ORYX.I18N.PropertyWindow.moreProps = "その他の属性"; - -ORYX.I18N.PropertyWindow.btnOpen = "開く"; -ORYX.I18N.PropertyWindow.btnRemove = "削除"; -ORYX.I18N.PropertyWindow.btnEdit = "編集"; -ORYX.I18N.PropertyWindow.btnUp = "上へ移動"; -ORYX.I18N.PropertyWindow.btnDown = "下へ移動"; -ORYX.I18N.PropertyWindow.createNew = "新規作成"; - -if(!ORYX.I18N.PropertyWindow) ORYX.I18N.PropertyWindow = {}; -ORYX.I18N.PropertyWindow.oftenUsed = "主な属性"; -ORYX.I18N.PropertyWindow.moreProps = "その他の属性"; -ORYX.I18N.PropertyWindow.characteristicNr = "コスト & リソース分析"; -ORYX.I18N.PropertyWindow.meta = "カスタム属性"; - -if(!ORYX.I18N.PropertyWindow.Category){ORYX.I18N.PropertyWindow.Category = {}} -ORYX.I18N.PropertyWindow.Category.popular = "主な属性"; -ORYX.I18N.PropertyWindow.Category.characteristicnr = "コスト & リソース分析"; -ORYX.I18N.PropertyWindow.Category.others = "その他の属性"; -ORYX.I18N.PropertyWindow.Category.meta = "カスタム属性"; - -if(!ORYX.I18N.PropertyWindow.ListView) ORYX.I18N.PropertyWindow.ListView = {}; -ORYX.I18N.PropertyWindow.ListView.title = "編集: "; -ORYX.I18N.PropertyWindow.ListView.dataViewLabel = "すでにエントリーが存在します。"; -ORYX.I18N.PropertyWindow.ListView.dataViewEmptyText = "エントリーがありません。"; -ORYX.I18N.PropertyWindow.ListView.addEntryLabel = "新しいエントリーの追加"; -ORYX.I18N.PropertyWindow.ListView.buttonAdd = "追加"; -ORYX.I18N.PropertyWindow.ListView.save = "保存"; -ORYX.I18N.PropertyWindow.ListView.cancel = "キャンセル"; - -if(!Signavio.I18N.Buttons) Signavio.I18N.Buttons = {}; -Signavio.I18N.Buttons.save = "保存"; -Signavio.I18N.Buttons.cancel = "キャンセル"; -Signavio.I18N.Buttons.remove = "削除"; - -if(!Signavio.I18N.btn) {Signavio.I18N.btn = {};} -Signavio.I18N.btn.btnEdit = "編集"; -Signavio.I18N.btn.btnRemove = "削除"; -Signavio.I18N.btn.moveUp = "上へ移動"; -Signavio.I18N.btn.moveDown = "下へ移動"; - -if(!Signavio.I18N.field) {Signavio.I18N.field = {};} -Signavio.I18N.field.Url = "URL"; -Signavio.I18N.field.UrlLabel = "ラベル"; diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/oryx.debug.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/oryx.debug.js deleted file mode 100644 index eab3c720..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/oryx.debug.js +++ /dev/null @@ -1,26934 +0,0 @@ -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * @namespace Oryx name space for different utility methods - * @name ORYX.Utils -*/ - -if(!ORYX) var ORYX = {}; - -ORYX.Utils = { - /** - * General helper method for parsing a param out of current location url - * @example - * // Current url in Browser => "http://oryx.org?param=value" - * ORYX.Utils.getParamFromUrl("param") // => "value" - * @param {Object} name - */ - getParamFromUrl: function(name){ - name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); - var regexS = "[\\?&]" + name + "=([^]*)"; - var regex = new RegExp(regexS); - var results = regex.exec(window.location.href); - if (results == null) { - return null; - } - else { - return results[1]; - } - }, - - adjustLightness: function(){ - return arguments[0]; - }, - - adjustGradient: function(gradient, reference){ - - if (ORYX.CONFIG.DISABLE_GRADIENT && gradient){ - - var col = reference.getAttributeNS(null, "stop-color") || "#ffffff"; - - $A(gradient.getElementsByTagName("stop")).each(function(stop){ - if (stop == reference){ return; } - stop.setAttributeNS(null, "stop-color", col); - }); - } - } -} -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -XMLNS = { - ATOM: "http://www.w3.org/2005/Atom", - XHTML: "http://www.w3.org/1999/xhtml", - ERDF: "http://purl.org/NET/erdf/profile", - RDFS: "http://www.w3.org/2000/01/rdf-schema#", - RDF: "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - RAZIEL: "http://b3mn.org/Raziel", - - SCHEMA: "" -}; - -//TODO kann kickstart sich vielleicht auch um die erzeugung von paketen/ -// namespaces k�mmern? z.b. requireNamespace("ORYX.Core.SVG"); -var Kickstart = { - started: false, - callbacks: [], - alreadyLoaded: [], - PATH: '', - - load: function() { Kickstart.kick(); }, - - kick: function() { - //console.profile("loading"); - if(!Kickstart.started) { - Kickstart.started = true; - Kickstart.callbacks.each(function(callback){ - // call the registered callback asynchronously. - window.setTimeout(callback, 1); - }); - } - }, - - register: function(callback) { - //TODO Add some mutual exclusion between kick and register calls. - with(Kickstart) { - if(started) window.setTimeout(callback, 1); - else Kickstart.callbacks.push(callback) - } - }, - - /** - * Loads a js, assuring that it has only been downloaded once. - * @param {String} url the script to load. - */ - require: function(url) { - // if not already loaded, include it. - if(Kickstart.alreadyLoaded.member(url)) - return false; - return Kickstart.include(url); - }, - - /** - * Loads a js, regardless of whether it has only been already downloaded. - * @param {String} url the script to load. - */ - include: function(url) { - - // prepare a script tag and place it in html head. - var head = document.getElementsByTagNameNS(XMLNS.XHTML, 'head')[0]; - var s = document.createElementNS(XMLNS.XHTML, "script"); - s.setAttributeNS(XMLNS.XHTML, 'type', 'text/javascript'); - s.src = Kickstart.PATH + url; - - //TODO macht es sinn, dass neue skript als letztes kind in den head - // einzubinden (stichwort reihenfolge der skript tags)? - head.appendChild(s); - - // remember this url. - Kickstart.alreadyLoaded.push(url); - - return true; - } -} - -// register kickstart as the new onload event listener on current window. -// previous listener(s) are triggered to launch with kickstart. -Event.observe(window, 'load', Kickstart.load);/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -var ERDF = { - - LITERAL: 0x01, - RESOURCE: 0x02, - DELIMITERS: ['.', '-'], - HASH: '#', - HYPHEN: "-", - - schemas: [], - callback: undefined, - log: undefined, - - init: function(callback) { - - // init logging. - //ERDF.log = Log4js.getLogger("oryx"); - //ERDF.log.setLevel(Log4js.Level.ALL); - //ERDF.log.addAppender(new ConsoleAppender(ERDF.log, false)); - - //if(ERDF.log.isTraceEnabled()) - // ERDF.log.trace("ERDF Parser is initialized."); - - // register callbacks and default schemas. - ERDF.callback = callback; - ERDF.registerSchema('schema', XMLNS.SCHEMA); - ERDF.registerSchema('rdfs', XMLNS.RDFS); - }, - - run: function() { - - //if(ERDF.log.isTraceEnabled()) - // ERDF.log.trace("ERDF Parser is running."); - - // do the work. - return ERDF._checkProfile() && ERDF.parse(); - }, - - parse: function() { - - //(ERDF.log.isDebugEnabled()) - // ERDF.log.debug("Begin parsing document metadata."); - - // time measuring - ERDF.__startTime = new Date(); - - var bodies = document.getElementsByTagNameNS(XMLNS.XHTML, 'body'); - var subject = {type: ERDF.RESOURCE, value: ''}; - - var result = ERDF._parseDocumentMetadata() && - ERDF._parseFromTag(bodies[0], subject); - - // time measuring - ERDF.__stopTime = new Date(); - - var duration = (ERDF.__stopTime - ERDF.__startTime)/1000.; - //alert('ERDF parsing took ' + duration + ' s.'); - - return result; - }, - - _parseDocumentMetadata: function() { - - // get links from head element. - var heads = document.getElementsByTagNameNS(XMLNS.XHTML, 'head'); - var links = heads[0].getElementsByTagNameNS(XMLNS.XHTML, 'link'); - var metas = heads[0].getElementsByTagNameNS(XMLNS.XHTML, 'meta'); - - // process links first, since they could contain schema definitions. - $A(links).each(function(link) { - var properties = link.getAttribute('rel'); - var reversedProperties = link.getAttribute('rev'); - var value = link.getAttribute('href'); - - ERDF._parseTriplesFrom( - ERDF.RESOURCE, '', - properties, - ERDF.RESOURCE, value); - - ERDF._parseTriplesFrom( - ERDF.RESOURCE, value, - reversedProperties, - ERDF.RESOURCE, ''); - }); - - // continue with metas. - $A(metas).each(function(meta) { - var property = meta.getAttribute('name'); - var value = meta.getAttribute('content'); - - ERDF._parseTriplesFrom( - ERDF.RESOURCE, '', - property, - ERDF.LITERAL, value); - }); - - return true; - }, - - _parseFromTag: function(node, subject, depth) { - - // avoid parsing non-xhtml content. - if(!node || !node.namespaceURI || node.namespaceURI != XMLNS.XHTML) { return; } - - // housekeeping. - if(!depth) depth=0; - var id = node.getAttribute('id'); - - // some logging. - //if(ERDF.log.isTraceEnabled()) - // ERDF.log.trace(">".times(depth) + " Parsing " + node.nodeName + " ("+node.nodeType+") for data on " + - // ((subject.type == ERDF.RESOURCE) ? ('<' + subject.value + '>') : '') + - // ((subject.type == ERDF.LITERAL) ? '"' + subject.value + '"' : '')); - - /* triple finding! */ - - // in a-tags... - if(node.nodeName.endsWith(':a') || node.nodeName == 'a') { - var properties = node.getAttribute('rel'); - var reversedProperties = node.getAttribute('rev'); - var value = node.getAttribute('href'); - var title = node.getAttribute('title'); - var content = node.textContent; - - // rel triples - ERDF._parseTriplesFrom( - subject.type, subject.value, - properties, - ERDF.RESOURCE, value, - function(triple) { - var label = title? title : content; - - // label triples - ERDF._parseTriplesFrom( - triple.object.type, triple.object.value, - 'rdfs.label', - ERDF.LITERAL, label); - }); - - // rev triples - ERDF._parseTriplesFrom( - subject.type, subject.value, - reversedProperties, - ERDF.RESOURCE, ''); - - // type triples - ERDF._parseTypeTriplesFrom( - subject.type, subject.value, - properties); - - // in img-tags... - } else if(node.nodeName.endsWith(':img') || node.nodeName == 'img') { - var properties = node.getAttribute('class'); - var value = node.getAttribute('src'); - var alt = node.getAttribute('alt'); - - ERDF._parseTriplesFrom( - subject.type, subject.value, - properties, - ERDF.RESOURCE, value, - function(triple) { - var label = alt; - - // label triples - ERDF._parseTriplesFrom( - triple.object.type, triple.object.value, - 'rdfs.label', - ERDF.LITERAL, label); - }); - - } - - // in every tag - var properties = node.getAttribute('class'); - var title = node.getAttribute('title'); - var content = node.textContent; - var label = title ? title : content; - - // regular triples - ERDF._parseTriplesFrom( - subject.type, subject.value, - properties, - ERDF.LITERAL, label); - - if(id) subject = {type: ERDF.RESOURCE, value: ERDF.HASH+id}; - - // type triples - ERDF._parseTypeTriplesFrom( - subject.type, subject.value, - properties); - - // parse all children that are element nodes. - var children = node.childNodes; - if(children) $A(children).each(function(_node) { - if(_node.nodeType == _node.ELEMENT_NODE) - ERDF._parseFromTag(_node, subject, depth+1); }); - }, - - _parseTriplesFrom: function(subjectType, subject, properties, - objectType, object, callback) { - - if(!properties) return; - properties.toLowerCase().split(' ').each( function(property) { - - //if(ERDF.log.isTraceEnabled()) - // ERDF.log.trace("Going for property " + property); - - var schema = ERDF.schemas.find( function(schema) { - return false || ERDF.DELIMITERS.find( function(delimiter) { - return property.startsWith(schema.prefix + delimiter); - }); - }); - - if(schema && object) { - property = property.substring( - schema.prefix.length+1, property.length); - var triple = ERDF.registerTriple( - new ERDF.Resource(subject), - {prefix: schema.prefix, name: property}, - (objectType == ERDF.RESOURCE) ? - new ERDF.Resource(object) : - new ERDF.Literal(object)); - - if(callback) callback(triple); - } - }); - }, - - _parseTypeTriplesFrom: function(subjectType, subject, properties, callback) { - - if(!properties) return; - properties.toLowerCase().split(' ').each( function(property) { - - //if(ERDF.log.isTraceEnabled()) - // ERDF.log.trace("Going for property " + property); - - var schema = ERDF.schemas.find( function(schema) { - return false || ERDF.DELIMITERS.find( function(delimiter) { - return property.startsWith(ERDF.HYPHEN + schema.prefix + delimiter); - }); - }); - - if(schema && subject) { - property = property.substring(schema.prefix.length+2, property.length); - var triple = ERDF.registerTriple( - (subjectType == ERDF.RESOURCE) ? - new ERDF.Resource(subject) : - new ERDF.Literal(subject), - {prefix: 'rdf', name: 'type'}, - new ERDF.Resource(schema.namespace+property)); - if(callback) callback(triple); - } - }); - }, - - /** - * Checks for ERDF profile declaration in head of document. - */ - _checkProfile: function() { - - // get profiles from head element. - var heads = document.getElementsByTagNameNS(XMLNS.XHTML, 'head'); - var profiles = heads[0].getAttribute("profile"); - var found = false; - - // if erdf profile is contained. - if(profiles && profiles.split(" ").member(XMLNS.ERDF)) { - - // pass check. - //if(ERDF.log.isTraceEnabled()) - // ERDF.log.trace("Found ERDF profile " + XMLNS.ERDF); - return true; - - } else { - - // otherwise fail check. - //if(ERDF.log.isFatalEnabled()) - // ERDF.log.fatal("No ERDF profile found."); - return false; - } - }, - - __stripHashes: function(s) { - return (s && (typeof s.substring == 'function') && s.substring(0, 1)=='#') ? s.substring(1, s.length) : s; - }, - - registerSchema: function(prefix, namespace) { - - // TODO check whether already registered, if so, complain. - ERDF.schemas.push({ - prefix: prefix, - namespace: namespace - }); - - //if(ERDF.log.isDebugEnabled()) - // ERDF.log.debug("Prefix '"+prefix+"' for '"+namespace+"' registered."); - }, - - registerTriple: function(subject, predicate, object) { - - // if prefix is schema, this is a schema definition. - if(predicate.prefix.toLowerCase() == 'schema') - this.registerSchema(predicate.name, object.value); - - var triple = new ERDF.Triple(subject, predicate, object); - ERDF.callback(triple); - - //if(ERDF.log.isInfoEnabled()) - // ERDF.log.info(triple) - - // return the registered triple. - return triple; - }, - - __enhanceObject: function() { - - /* Resource state querying methods */ - this.isResource = function() { - return this.type == ERDF.RESOURCE }; - this.isLocal = function() { - return this.isResource() && this.value.startsWith('#') }; - this.isCurrentDocument = function() { - return this.isResource() && (this.value == '') }; - - /* Resource getter methods.*/ - this.getId = function() { - return this.isLocal() ? ERDF.__stripHashes(this.value) : false; }; - - /* Liiteral state querying methods */ - this.isLiteral = function() { - return this.type == ERDF.LIITERAL }; - }, - - serialize: function(literal) { - - if(!literal){ - return ""; - }else if(literal.constructor == String) { - return literal; - } else if(literal.constructor == Boolean) { - return literal? 'true':'false'; - } else { - return literal.toString(); - } - } -}; - - -ERDF.Triple = function(subject, predicate, object) { - - this.subject = subject; - this.predicate = predicate; - this.object = object; - - this.toString = function() { - - return "[ERDF.Triple] " + - this.subject.toString() + ' ' + - this.predicate.prefix + ':' + this.predicate.name + ' ' + - this.object.toString(); - }; -}; - -ERDF.Resource = function(uri) { - - this.type = ERDF.RESOURCE; - this.value = uri; - ERDF.__enhanceObject.apply(this); - - this.toString = function() { - return '<' + this.value + '>'; - } - -}; - -ERDF.Literal = function(literal) { - - this.type = ERDF.LITERAL; - this.value = ERDF.serialize(literal); - ERDF.__enhanceObject.apply(this); - - this.toString = function() { - return '"' + this.value + '"'; - } -};/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/* - * Save and triple generation behaviour. Use this area to configure - * data management to your needs. - */ -var USE_ASYNCHRONOUS_REQUESTS = true; -var DISCARD_UNUSED_TRIPLES = true; -var PREFER_SPANS_OVER_DIVS = true; -var PREFER_TITLE_OVER_TEXTNODE = false; -var RESOURCE_ID_PREFIX = 'resource'; - -var SHOW_DEBUG_ALERTS_WHEN_SAVING = false; -var SHOW_EXTENDED_DEBUG_INFORMATION = false; - -/* - * Back end specific workarounds. - */ - -var USE_ARESS_WORKAROUNDS = true; - -/* - * Data management constants. Do not change these, as they are used - * both internally and externally to communicate on events and to identify - * command object actions in triple production and embedding rules. - */ - -// Resource constants -var RESOURCE_CREATED = 0x01; -var RESOURCE_REMOVED = 0x02; -var RESOURCE_SAVED = 0x04; -var RESOURCE_RELOADED = 0x08; -var RESOURCE_SYNCHRONIZED = 0x10; - -// Triple constants -var TRIPLE_REMOVE = 0x01; -var TRIPLE_ADD = 0x02; -var TRIPLE_RELOAD = 0x04; -var TRIPLE_SAVE = 0x08; - -var PROCESSDATA_REF = 'processdata'; - -// HTTP status code constants -// -//// 2xx -//const 200_OK = 'Ok'; -//const 201_CREATED = 'Created'; -//const 202_ACCEPTED = 'Accepted'; -//const 204_NO_CONTENT = 'No Content'; -// -//// 3xx -//const 301_MOVED_PERMANENTLY = 'Moved Permanently'; -//const 302_MOVED_TEMPORARILY = 'Moved Temporarily'; -//const 304_NOT_MODIFIED = 'Not Modified'; -// -//// 4xx -//const 400_BAD_REQUEST = 'Bad Request'; -//const 401_UNAUTHORIZED = 'Unauthorized'; -//const 403_FORBIDDEN = 'Forbidden'; -//const 404_NOT_FOUND = 'Not Found'; -//const 409_CONFLICT = 'Conflict'; -// -//// 5xx -//const 500_INTERNAL_SERVER_ERROR = 'Internal Server Error'; -//const 501_NOT_IMPLEMENTED = 'Not Implemented'; -//const 502_BAD_GATEWAY = 'Bad Gateway'; -//const 503_SERVICE_UNAVAILABLE = 'Service Unavailable'; -// -/** - * The Data Management object. Use this one when interacting with page internal - * data. Initialize data management by DataManager.init(); - * @class DataManager - */ -var DataManager = { - - /** - * The init method should be called once in the DataManagers lifetime. - * It causes the DataManager to initialize itself, the erdf parser, do all - * neccessary registrations and configurations, to run the parser and - * from then on deliver all resulting triples. - * No parameters needed are needed in a call to this method. - */ - init: function() { - ERDF.init(DataManager._registerTriple); - DataManager.__synclocal(); - }, - - /** - * This triple array is meant to be the whole knowledge of the DataManager. - */ - _triples: [], - - /** - * This method is meant for callback from erdf parsing. It is not to be - * used in another way than to add triples to the triple store. - * @param {Object} triple the triple to add to the triple store. - */ - _registerTriple: function(triple) { - DataManager._triples.push(triple) - }, - - /** - * The __synclocal method is for internal usage only. - * It performs synchronization with the local document, that is, the triple - * store is adjustet to the content of the document, which could have been - * changed by any other applications running on the same page. - */ - __synclocal: function() { - DataManager._triples = []; - ERDF.run(); - }, - - /** - * Makes the shape passed into this method synchronize itself with the DOM. - * This method returns the shapes resource object for further manipulation. - * @param {Object} shape - */ - __synchronizeShape: function(shape) { - - var r = ResourceManager.getResource(shape.resourceId); - var serialize = shape.serialize(); - - // store all serialize values - serialize.each( function(ser) { - - var resource = (ser.type == 'resource'); - var _triple = new ERDF.Triple( - new ERDF.Resource(shape.resourceId), - {prefix: ser.prefix, name: ser.name}, - resource ? - new ERDF.Resource(ser.value) : - new ERDF.Literal(ser.value) - ); - DataManager.setObject(_triple); - }); - - return r; - }, - - __storeShape: function(shape) { - - // first synchronize the shape, - var resource = DataManager.__synchronizeShape(shape); - - // then save the synchronized dom. - resource.save(); - }, - - __forceExistance: function(shape) { - - if(!$(shape.resourceId)) { - - if(!$$('.' + PROCESSDATA_REF)[0]) - DataManager.graft(XMLNS.XHTML, - document.getElementsByTagNameNS(XMLNS.XHTML, 'body').item(0), ['div', {'class': PROCESSDATA_REF, 'style':'display:none;'}]); - - // object is literal - DataManager.graft(XMLNS.XHTML, - $$('.' + PROCESSDATA_REF)[0], [ - - 'div', { - 'id': shape.resourceId, - //This should be done in a more dynamic way!!!!! - 'class': (shape instanceof ORYX.Core.Canvas) ? "-oryx-canvas" : undefined - } - ]); - - } else { - var resource = $(shape.resourceId) - var children = $A(resource.childNodes) - children.each( function(child) { - resource.removeChild(child); - }); - }; - }, - - __persistShape: function(shape) { - - // a shape serialization. - var shapeData = shape.serialize(); - - // initialize a triple array and construct a shape resource - // to be used in triple generation. - var triplesArray = []; - var shapeResource = new ERDF.Resource(shape.resourceId); - - // remove all triples for this particular shape's resource - DataManager.removeTriples( DataManager.query( - shapeResource, undefined, undefined)); - - // for each data set in the shape's serialization - shapeData.each( function(data) { - - // construct a triple's value - var value = (data.type == 'resource') ? - new ERDF.Resource(data.value) : - new ERDF.Literal(data.value); - - // construct triple and add it to the DOM. - DataManager.addTriple( new ERDF.Triple( - shapeResource, - {prefix: data.prefix, name: data.name}, - value - )); - }); - }, - - __persistDOM: function(facade) { - - // getChildShapes gets all shapes (nodes AND edges), deep flag - // makes it return a flattened child hierarchy. - - var canvas = facade.getCanvas(); - var shapes = canvas.getChildShapes(true); - var result = ''; - - // persist all shapes. - shapes.each( function(shape) { - DataManager.__forceExistance(shape); - }); - //DataManager.__synclocal(); - - DataManager.__renderCanvas(facade); - result += DataManager.serialize( - $(ERDF.__stripHashes(facade.getCanvas().resourceId)), true); - - shapes.each( function(shape) { - - DataManager.__persistShape(shape); - result += DataManager.serialize( - $(ERDF.__stripHashes(shape.resourceId)), true); - }); - - //result += DataManager.__renderCanvas(facade); - - return result; - }, - - __renderCanvas: function(facade) { - - var canvas = facade.getCanvas(); - var stencilSets = facade.getStencilSets(); - var shapes = canvas.getChildShapes(true); - - DataManager.__forceExistance(canvas); - - DataManager.__persistShape(canvas); - - var shapeResource = new ERDF.Resource(canvas.resourceId); - - // remove all triples for this particular shape's resource - DataManager.removeTriples( DataManager.query( - shapeResource, undefined, undefined)); - - DataManager.addTriple( new ERDF.Triple( - shapeResource, - {prefix: "oryx", name: "mode"}, - new ERDF.Literal("writable") - )); - - DataManager.addTriple( new ERDF.Triple( - shapeResource, - {prefix: "oryx", name: "mode"}, - new ERDF.Literal("fullscreen") - )); - - stencilSets.values().each(function(stencilset) { - DataManager.addTriple( new ERDF.Triple( - shapeResource, - {prefix: "oryx", name: "stencilset"}, - new ERDF.Resource(stencilset.source().replace(/&/g, "%26")) - )); - - DataManager.addTriple( new ERDF.Triple( - shapeResource, - {prefix: "oryx", name: "ssnamespace"}, - new ERDF.Resource(stencilset.namespace()) - )); - - stencilset.extensions().keys().each(function(extension) { - DataManager.addTriple( new ERDF.Triple( - shapeResource, - {prefix: "oryx", name: "ssextension"}, - new ERDF.Literal(extension) - )); - }); - }); - - shapes.each(function(shape) { - DataManager.addTriple( new ERDF.Triple( - shapeResource, - {prefix: "oryx", name: "render"}, - new ERDF.Resource("#" + shape.resourceId) - )); - }); - }, - - __counter: 0, - __provideId: function() { - - while($(RESOURCE_ID_PREFIX+DataManager.__counter)) - DataManager.__counter++; - - return RESOURCE_ID_PREFIX+DataManager.__counter; - }, - - serializeDOM: function(facade) { - - return DataManager.__persistDOM(facade); - }, - - syncGlobal: function(facade) { - - return DataManager.__syncglobal(facade); - }, - - /** - * This method is used to synchronize local DOM with remote resources. - * Local changes are commited to the server, and remote changes are - * performed to the local document. - * @param {Object} facade The facade of the editor that holds certain - * resource representations as shapes. - */ - __syncglobal: function(facade) { - - // getChildShapes gets all shapes (nodes AND edges), deep flag - // makes it return a flattened child hierarchy. - - var canvas = facade.getCanvas(); - var shapes = canvas.getChildShapes(true); - - // create dummy resource representations in the dom - // for all shapes that were newly created. - - shapes.select( function(shape) { - - // select shapes without resource id. - - return !($(shape.resourceId)); - - }).each( function(shape) { - - // create new resources for them. - if(USE_ARESS_WORKAROUNDS) { - - /* - * This is a workaround due to a bug in aress. Resources are - * ignoring changes to raziel:type property once they are - * created. As long as this is not fixed, the resource is now - * being created using a randomly guessed id, this temporary id - * is then used in references and the appropriate div is being - * populated with properties. - * - * AFTER THIS PHASE THE DATA IS INCONSISTENT AS REFERENCES POINT - * TO IDS THAT ARE UNKNOWN TO THE BACK END. - * - * After the resource is actually created in aress, it gets an id - * that is persistent. All shapes are then being populated with the - * correct id references and stored on the server. - * - * AFTER THE SAVE PROCESS HAS RETURNED, THE DATA IS CONSISTENT - * REGARDING THE ID REFERENCES AGAIN. - */ - - var razielType = shape.properties['raziel-type']; - - var div = '' + - ''+razielType+''; - - var r = ResourceManager.__createResource(div); - shape.resourceId = r.id(); - - } else { - - var r = ResourceManager.__createResource(); - shape.resourceId = r.id(); - } - - }); - - shapes.each( function(shape) { - - // store all shapes. - DataManager.__storeShape(shape); - }); - }, - - /** - * This method serializes a single div into a string that satisfies the - * client/server communication protocol. It ingnores all elements that have - * an attribute named class that includes 'transient'. - * @param {Object} node the element to serialize. - * @param {Object} preserveNamespace whether to preserve the parent's - * namespace. If you are not sure about namespaces, provide - * just the element to be serialized. - */ - serialize: function(node, preserveNamespace) { - - if (node.nodeType == node.ELEMENT_NODE) { - // serialize an element node. - - var children = $A(node.childNodes); - var attributes = $A(node.attributes); - var clazz = new String(node.getAttribute('class')); - var ignore = clazz.split(' ').member('transient'); - - // ignore transients. - - if(ignore) - return ''; - - // start serialization. - - var result = '<' + node.nodeName; - - // preserve namespace? - if(!preserveNamespace) - result += ' xmlns="' + (node.namespaceURI ? node.namespaceURI : XMLNS.XHTML) + '" xmlns:oryx="http://oryx-editor.org"'; - - // add all attributes. - - attributes.each(function(attribute) { - result += ' ' + attribute.nodeName + '="' + - attribute.nodeValue + '"';}); - - // close if no children. - - if(children.length == 0) - result += '/>'; - - else { - - // serialize all children. - - result += '>'; - children.each(function(_node) { - result += DataManager.serialize(_node, true)}); - result += '' + node.nodeName + '>' - } - - return result; - - } else if (node.nodeType == node.TEXT_NODE) { - - // serialize a text node. - return node.nodeValue; - } - - //TODO serialize cdata areas also. - //TODO work on namespace awareness. - }, - - addTriple: function(triple) { - - // assert the subject is a resource - - if(!triple.subject.type == ERDF.LITERAL) - throw 'Cannot add the triple ' + triple.toString() + - ' because the subject is not a resource.' - - // get the element which represents this triple's subject. - var elementId = ERDF.__stripHashes(triple.subject.value); - var element = $(elementId); - - // assert the subject is inside this document. - if(!element) - throw 'Cannot add the triple ' + triple.toString() + - ' because the subject "'+elementId+'" is not in the document.'; - - if(triple.object.type == ERDF.LITERAL) - - // object is literal - DataManager.graft(XMLNS.XHTML, element, [ - 'span', {'class': (triple.predicate.prefix + "-" + - triple.predicate.name)}, triple.object.value.escapeHTML() - ]); - - else { - - // object is resource - DataManager.graft(XMLNS.XHTML, element, [ - 'a', {'rel': (triple.predicate.prefix + "-" + - triple.predicate.name), 'href': triple.object.value} - ]); - - } - - return true; - }, - - removeTriples: function(triples) { - - // alert('Removing ' +triples.length+' triples.'); - - // from all the triples select those ... - var removed = triples.select( - - function(triple) { - - // TODO remove also from triple store. - // ... that were actually removed. - return DataManager.__removeTriple(triple); - }); - - // sync and return removed triples. - // DataManager.__synclocal(); - return removed; - }, - - removeTriple: function(triple) { - - // remember whether the triple was actually removed. - var result = DataManager.__removeTriple(triple); - - // sync and return removed triples. - // DataManager.__synclocal(); - return result; - }, - - __removeTriple: function(triple) { - - // assert the subject is a resource - if(!triple.subject.type == ERDF.LITERAL) - - throw 'Cannot remove the triple ' + triple.toString() + - ' because the subject is not a resource.'; - - // get the element which represents this triple's subject. - var elementId = ERDF.__stripHashes(triple.subject.value); - var element = $(elementId); - - // assert the subject is inside this document. - if(!element) - - throw 'Cannot remove the triple ' + triple.toString() + - ' because the subject is not in the document.'; - - if(triple.object.type == ERDF.LITERAL) { - - // continue searching actively for the triple. - var result = DataManager.__removeTripleRecursively(triple, element); - return result; - } - }, - - __removeTripleRecursively: function(triple, continueFrom) { - - // return when this node is not an element node. - if(continueFrom.nodeType != continueFrom.ELEMENT_NODE) - return false; - - var classes = new String(continueFrom.getAttribute('class')); - var children = $A(continueFrom.childNodes); - - if(classes.include(triple.predicate.prefix + '-' + triple.predicate.name)) { - - var content = continueFrom.textContent; - if( (triple.object.type == ERDF.LITERAL) && - (triple.object.value == content)) - - continueFrom.parentNode.removeChild(continueFrom); - - return true; - - } else { - - children.each(function(_node) { - DataManager.__removeTripleRecursively(triple, _node)}); - return false; - } - - }, - - /** - * graft() function - * Originally by Sean M. Burke from interglacial.com, altered for usage with - * SVG and namespace (xmlns) support. Be sure you understand xmlns before - * using this funtion, as it creates all grafted elements in the xmlns - * provided by you and all element's attribures in default xmlns. If you - * need to graft elements in a certain xmlns and wish to assign attributes - * in both that and another xmlns, you will need to do stepwise grafting, - * adding non-default attributes yourself or you'll have to enhance this - * function. Latter, I would appreciate: martin�apfelfabrik.de - * @param {Object} namespace The namespace in which - * elements should be grafted. - * @param {Object} parent The element that should contain the grafted - * structure after the function returned. - * @param {Object} t the crafting structure. - * @param {Object} doc the document in which grafting is performed. - */ - graft: function(namespace, parent, t, doc) { - - doc = (doc || (parent && parent.ownerDocument) || document); - var e; - if(t === undefined) { - echo( "Can't graft an undefined value"); - } else if(t.constructor == String) { - e = doc.createTextNode( t ); - } else { - for(var i = 0; i < t.length; i++) { - if( i === 0 && t[i].constructor == String ) { - var snared = t[i].match( /^([a-z][a-z0-9]*)\.([^\s\.]+)$/i ); - if( snared ) { - e = doc.createElementNS(namespace, snared[1]); - e.setAttributeNS(null, 'class', snared[2] ); - continue; - } - snared = t[i].match( /^([a-z][a-z0-9]*)$/i ); - if( snared ) { - e = doc.createElementNS(namespace, snared[1]); // but no class - continue; - } - - // Otherwise: - e = doc.createElementNS(namespace, "span"); - e.setAttribute(null, "class", "namelessFromLOL" ); - } - - if( t[i] === undefined ) { - echo("Can't graft an undefined value in a list!"); - } else if( t[i].constructor == String || t[i].constructor == Array) { - this.graft(namespace, e, t[i], doc ); - } else if( t[i].constructor == Number ) { - this.graft(namespace, e, t[i].toString(), doc ); - } else if( t[i].constructor == Object ) { - // hash's properties => element's attributes - for(var k in t[i]) { e.setAttributeNS(null, k, t[i][k] ); } - } else if( t[i].constructor == Boolean ) { - this.graft(namespace, e, t[i] ? 'true' : 'false', doc ); - } else - throw "Object " + t[i] + " is inscrutable as an graft arglet."; - } - } - - if(parent) parent.appendChild(e); - - return Element.extend(e); // return the topmost created node - }, - - setObject: function(triple) { - - /** - * Erwartungen von Arvid an diese Funktion: - * - Es existiert genau ein triple mit dem Subjekt und Praedikat, - * das uebergeben wurde, und dieses haelt uebergebenes Objekt. - */ - - var triples = DataManager.query( - triple.subject, - triple.predicate, - undefined - ); - - DataManager.removeTriples(triples); - - DataManager.addTriple(triple); - - return true; - }, - - query: function(subject, predicate, object) { - - /* - * Typical triple. - * {value: subject, type: subjectType}, - * {prefix: schema.prefix, name: property}, - * {value: object, type: objectType}); - */ - - return DataManager._triples.select(function(triple) { - - var select = ((subject) ? - (triple.subject.type == subject.type) && - (triple.subject.value == subject.value) : true); - if(predicate) { - select = select && ((predicate.prefix) ? - (triple.predicate.prefix == predicate.prefix) : true); - select = select && ((predicate.name) ? - (triple.predicate.name == predicate.name) : true); - } - select = select && ((object) ? - (triple.object.type == object.type) && - (triple.object.value == object.value) : true); - return select; - }); - } -} - -Kickstart.register(DataManager.init); - -function assert(expr, m) { if(!expr) throw m; }; - -function DMCommand(action, triple) { - - // store action and triple. - this.action = action; - this.triple = triple; - - this.toString = function() { - return 'Command('+action+', '+triple+')'; - }; -} - -function DMCommandHandler(nextHandler) { - - /** - * Private method to set the next handler in the Chain of Responsibility - * (see http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern for - * details). - * @param {DMCommandHandler} handler The handler that is next in the chain. - */ - this.__setNext = function(handler) { - var _next = this.__next; - this.__next = nextHandler; - return _next ? _next : true; - }; - this.__setNext(nextHandler); - - /** - * Invokes the next handler. If there is no next handler, this method - * returns false, otherwise it forwards the result of the handling. - * @param {Object} command The command object to be processed. - */ - this.__invokeNext = function(command) { - return this.__next ? this.__next.handle(command) : false; - }; - - /** - * Handles a command. The abstract method process() is called with the - * command object that has been passed. If the process method catches the - * command (returns true on completion), the handle() method returns true. - * If the process() method doesn't catch the command, the next handler will - * be invoked. - * @param {Object} command The command object to be processed. - */ - this.handle = function(command) { - return this.process(command) ? true : this.__invokeNext(command); - } - - /** - * Empty process() method returning false. If javascript knew abstract - * class members, this would be one. - * @param {Object} command The command object to process. - */ - this.process = function(command) { return false; }; -}; - -/** - * This Handler manages the addition and the removal of meta elements in the - * head of the document. - * @param {DMCommandHandler} next The handler that is next in the chain. - */ -function MetaTagHandler(next) { - - DMCommandHandler.apply(this, [next]); - this.process = function(command) { - - with(command.triple) { - - /* assert prerequisites */ - if( !( - (subject instanceof ERDF.Resource) && - (subject.isCurrentDocument()) && - (object instanceof ERDF.Literal) - )) return false; - } - - }; -}; - -var chain = new MetaTagHandler(); -var command = new DMCommand(TRIPLE_ADD, new ERDF.Triple( - new ERDF.Resource(''), - 'rdf:tool', - new ERDF.Literal('') -)); - -/* -if(chain.handle(command)) - alert('Handled!'); -*/ - -ResourceManager = { - - __corrupt: false, - __latelyCreatedResource: undefined, - __listeners: $H(), - __token: 1, - - addListener: function(listener, mask) { - - if(!(listener instanceof Function)) - throw 'Resource event listener is not a function!'; - if(!(mask)) - throw 'Invalid mask for resource event listener registration.'; - - // construct controller and token. - var controller = {listener: listener, mask: mask}; - var token = ResourceManager.__token++; - - // add new listener. - ResourceManager.__listeners[token] = controller; - - // return the token generated. - return token; - }, - - removeListener: function(token) { - - // remove the listener with the token and return it. - return ResourceManager.__listners.remove(token); - }, - - __Event: function(action, resourceId) { - this.action = action; - this.resourceId = resourceId; - }, - - __dispatchEvent: function(event) { - - // get all listeners. for each listener, ... - ResourceManager.__listeners.values().each(function(controller) { - - // .. if listener subscribed to this type of event ... - if(event.action & controller.mask) - return controller.listener(event); - }); - }, - - getResource: function(id) { - - // get all possible resources for this. - id = ERDF.__stripHashes(id); - var resources = DataManager.query( - new ERDF.Resource('#'+id), - {prefix: 'raziel', name: 'entry'}, - undefined - ); - - // check for consistency. - if((resources.length == 1) && (resources[0].object.isResource())) { - var entryUrl = resources[0].object.value; - return new ResourceManager.__Resource(id, entryUrl); - } - - // else throw an error message. - throw ('Resource with id ' +id+ ' not recognized as such. ' + - ((resources.length > 1) ? - ' There is more than one raziel:entry URL.' : - ' There is no raziel:entry URL.')); - - return false; - }, - - __createResource: function(alternativeDiv) { - - var collectionUrls = DataManager.query( - new ERDF.Resource(''), - // TODO This will become raziel:collection in near future. - {prefix: 'raziel', name: 'collection'}, - undefined - ); - - // check for consistency. - - if( (collectionUrls.length == 1) && - (collectionUrls[0].object.isResource())) { - - // get the collection url. - - var collectionUrl = collectionUrls[0].object.value; - var resource = undefined; - - // if there is an old id, serialize the dummy div from there, - // otherwise create a dummy div on the fly. - - var serialization = alternativeDiv? alternativeDiv : - ''; - - ResourceManager.__request( - 'POST', collectionUrl, serialization, - - // on success - function() { - - // get div and id that have been generated by the server. - - var response = (this.responseXML); - var div = response.childNodes[0]; - var id = div.getAttribute('id'); - - // store div in DOM - if(!$$('.' + PROCESSDATA_REF)[0]) - DataManager.graft(XMLNS.XHTML, - document.getElementsByTagNameNS(XMLNS.XHTML, 'body').item(0), ['div', {'class': PROCESSDATA_REF, 'style':'display:none;'}]); - - $$('.' + PROCESSDATA_REF)[0].appendChild(div.cloneNode(true)); - - // parse local erdf data once more. - - DataManager.__synclocal(); - - // get new resource object. - - resource = new ResourceManager.getResource(id); - - // set up an action informing of the creation. - - ResourceManager.__resourceActionSucceeded( - this, RESOURCE_CREATED, undefined); - }, - - function() { ResourceManager.__resourceActionFailed( - this, RESOURCE_CREATED, undefined);}, - false - ); - - return resource; - } - - // else - throw 'Could not create resource! raziel:collection URL is missing!'; - return false; - - }, - - __Resource: function(id, url) { - - this.__id = id; - this.__url = url; - - /* - * Process URL is no longer needed to refer to the shape element on the - * canvas. AReSS uses the id's to gather information on fireing - * behaviour now. - */ - -// // find the process url. -// var processUrl = undefined; -// -// var urls = DataManager.query( -// new ERDF.Resource('#'+this.__id), -// {prefix: 'raziel', name: 'process'}, -// undefined -// ); -// -// if(urls.length == 0) { throw 'The resource with the id ' +id+ ' has no process url.'}; -// -// urls.each( function(triple) { -// -// // if there are more urls, use the last one. -// processUrl = triple.object.value; -// }); -// -// this.__processUrl = processUrl; -// -// // convenience function for getting the process url. -// this.processUrl = function() { -// return this.__processUrl; -// } - - - // convenience finction for getting the id. - this.id = function() { - return this.__id; - } - - // convenience finction for getting the entry url. - this.url = function() { - return this.__url; - } - - this.reload = function() { - var _url = this.__url; - var _id = this.__id; - ResourceManager.__request( - 'GET', _url, null, - function() { ResourceManager.__resourceActionSucceeded( - this, RESOURCE_RELOADED, _id); }, - function() { ResourceManager.__resourceActionFailed( - this, RESURCE_RELOADED, _id); }, - USE_ASYNCHRONOUS_REQUESTS - ); - }; - - this.save = function(synchronize) { - var _url = this.__url; - var _id = this.__id; - data = DataManager.serialize($(_id)); - ResourceManager.__request( - 'PUT', _url, data, - function() { ResourceManager.__resourceActionSucceeded( - this, synchronize ? RESOURCE_SAVED | RESOURCE_SYNCHRONIZED : RESOURCE_SAVED, _id); }, - function() { ResourceManager.__resourceActionFailed( - this, synchronize ? RESOURCE_SAVED | RESOURCE_SYNCHRONIZED : RESOURCE.SAVED, _id); }, - USE_ASYNCHRONOUS_REQUESTS - ); - }; - - this.remove = function() { - var _url = this.__url; - var _id = this.__id; - ResourceManager.__request( - 'DELETE', _url, null, - function() { ResourceManager.__resourceActionSucceeded( - this, RESOURCE_REMOVED, _id); }, - function() { ResourceManager.__resourceActionFailed( - this, RESOURCE_REMOVED, _id);}, - USE_ASYNCHRONOUS_REQUESTS - ); - }; - }, - - request: function(url, requestOptions) { - - var options = { - method: 'get', - asynchronous: true, - parameters: {} - }; - - Object.extend(options, requestOptions || {}); - - var params = Hash.toQueryString(options.parameters); - if (params) - url += (url.include('?') ? '&' : '?') + params; - - return ResourceManager.__request( - options.method, - url, - options.data, - (options.onSuccess instanceof Function ? function() { options.onSuccess(this); } : undefined ), - (options.onFailure instanceof Function ? function() { options.onFailure(this); } : undefined ), - options.asynchronous && USE_ASYNCHRONOUS_REQUESTS, - options.headers); - }, - - __request: function(method, url, data, success, error, async, headers) { - - // get a request object - var httpRequest = Try.these( - - /* do the Mozilla/Safari/Opera stuff */ - function() { return new XMLHttpRequest(); }, - - /* do the IE stuff */ - function() { return new ActiveXObject("Msxml2.XMLHTTP"); }, - function() { return new ActiveXObject("Microsoft.XMLHTTP") } - ); - - // if there is no request object ... - if (!httpRequest) { - if(!this.__corrupt) - throw 'This browser does not provide any AJAX functionality. You will not be able to use the software provided with the page you are viewing. Please consider installing appropriate extensions.'; - this.__corrupt = true; - return false; - } - - if(success instanceof Function) - httpRequest.onload = success; - if(error instanceof Function) { - httpRequest.onerror = error; - } - - var h = $H(headers) - h.keys().each(function(key) { - - httpRequest.setRequestHeader(key, h[key]); - }); - - try { - - if(SHOW_DEBUG_ALERTS_WHEN_SAVING) - - alert(method + ' ' + url + '\n' + - SHOW_EXTENDED_DEBUG_INFORMATION ? data : ''); - - // TODO Remove synchronous calls to the server as soon as xenodot - // handles asynchronous requests without failure. - httpRequest.open(method, url, !async?false:true); - httpRequest.send(data); - - } catch(e) { - return false; - } - return true; - }, - - __resourceActionSucceeded: function(transport, action, id) { - - var status = transport.status; - var response = transport.responseText; - - if(SHOW_DEBUG_ALERTS_WHEN_SAVING) - - alert(status + ' ' + url + '\n' + - SHOW_EXTENDED_DEBUG_INFORMATION ? data : ''); - - // if the status code is not in 2xx, throw an error. - if(status >= 300) - throw 'The server responded with an error: ' + status + '\n' + (SHOW_EXTENDED_DEBUG_INFORMATION ? + data : 'If you need additional information here, including the data sent by the server, consider setting SHOW_EXTENDED_DEBUG_INFORMATION to true.'); - - switch(action) { - - case RESOURCE_REMOVED: - - // get div and id - var response = (transport.responseXML); - var div = response.childNodes[0]; - var id = div.getAttribute('id'); - - // remove the resource from DOM - var localDiv = document.getElementById(id); - localDiv.parentNode.removeChild(localDiv); - break; - - case RESOURCE_CREATED: - - // nothing remains to be done. - break; - - case RESOURCE_SAVED | RESOURCE_SYNCHRONIZED: - - DataManager.__synclocal(); - - case RESOURCE_SAVED: - - // nothing remains to be done. - break; - - case RESOURCE_RELOADED: - - // get div and id - var response = (transport.responseXML); - var div = response.childNodes[0]; - var id = div.getAttribute('id'); - - // remove the local resource representation from DOM - var localDiv = document.getElementById(id) - localDiv.parentNode.removeChild(localDiv); - - // store div in DOM - if(!$$(PROCESSDATA_REF)[0]) - DataManager.graft(XMLNS.XHTML, - document.getElementsByTagNameNS(XMLNS.XHTML, 'body').item(0), ['div', {'class': PROCESSDATA_REF, 'style':'display:none;'}]); - - $$(PROCESSDATA_REF)[0].appendChild(div.cloneNode(true)); - DataManager.__synclocal(); - break; - - default: - DataManager.__synclocal(); - - } - - // dispatch to all listeners ... - ResourceManager.__dispatchEvent( - - // ... an event describing the change that happened here. - new ResourceManager.__Event(action, id) - ); - }, - - __resourceActionFailed: function(transport, action, id) { - throw "Fatal: Resource action failed. There is something horribly " + - "wrong with either the server, the transport protocol or your " + - "online status. Sure you're online?"; - } -}/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * The super class for all classes in ORYX. Adds some OOP feeling to javascript. - * See article "Object Oriented Super Class Method Calling with JavaScript" on - * http://truecode.blogspot.com/2006/08/object-oriented-super-class-method.html - * for a documentation on this. Fairly good article that points out errors in - * Douglas Crockford's inheritance and super method calling approach. - * Worth reading. - * @class Clazz - */ -var Clazz = function() {}; - -/** - * Empty constructor. - * @methodOf Clazz.prototype - */ -Clazz.prototype.construct = function() {}; - -/** - * Can be used to build up inheritances of classes. - * @example - * var MyClass = Clazz.extend({ - * construct: function(myParam){ - * // Do sth. - * } - * }); - * var MySubClass = MyClass.extend({ - * construct: function(myParam){ - * // Use this to call constructor of super class - * arguments.callee.$.construct.apply(this, arguments); - * // Do sth. - * } - * }); - * @param {Object} def The definition of the new class. - */ -Clazz.extend = function(def) { - var classDef = function() { - if (arguments[0] !== Clazz) { this.construct.apply(this, arguments); } - }; - - var proto = new this(Clazz); - var superClass = this.prototype; - - for (var n in def) { - var item = def[n]; - if (item instanceof Function) item.$ = superClass; - proto[n] = item; - } - - classDef.prototype = proto; - - //Give this new class the same static extend method - classDef.extend = this.extend; - return classDef; -};/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!ORYX) var ORYX = {}; - -if(!ORYX.CONFIG) ORYX.CONFIG = {}; - -/** - * This file contains URI constants that may be used for XMLHTTPRequests. - */ - -ORYX.CONFIG.ROOT_PATH = "editor/"; //TODO: Remove last slash!! -ORYX.CONFIG.EXPLORER_PATH = "explorer"; -ORYX.CONFIG.LIBS_PATH = "libs"; - -/** - * Regular Config - */ -ORYX.CONFIG.SERVER_HANDLER_ROOT = "service"; -ORYX.CONFIG.SERVER_EDITOR_HANDLER = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/editor"; -ORYX.CONFIG.SERVER_MODEL_HANDLER = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/model"; -ORYX.CONFIG.STENCILSET_HANDLER = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/editor_stencilset?embedsvg=true&url=true&namespace="; -ORYX.CONFIG.STENCIL_SETS_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/editor_stencilset"; - -ORYX.CONFIG.PLUGINS_CONFIG = "editor-app/plugins.xml"; -ORYX.CONFIG.SYNTAXCHECKER_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/syntaxchecker"; -ORYX.CONFIG.DEPLOY_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/model/deploy"; -ORYX.CONFIG.MODEL_LIST_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/models"; -ORYX.CONFIG.FORM_FLOW_LIST_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/formflows"; -ORYX.CONFIG.FORM_FLOW_IMAGE_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/formflow"; -ORYX.CONFIG.FORM_LIST_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/forms"; -ORYX.CONFIG.FORM_IMAGE_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/form"; -ORYX.CONFIG.SUB_PROCESS_LIST_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/subprocesses"; -ORYX.CONFIG.SUB_PROCESS_IMAGE_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/subprocess"; -ORYX.CONFIG.TEST_SERVICE_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/service/"; - -ORYX.CONFIG.SERVICE_LIST_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/services"; -ORYX.CONFIG.CONDITION_ELEMENT_LIST_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/conditionelements"; -ORYX.CONFIG.VARIABLEDEF_ELEMENT_LIST_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/variabledefinitionelements"; -ORYX.CONFIG.VALIDATOR_LIST_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/validators"; - -ORYX.CONFIG.SS_EXTENSIONS_FOLDER = ORYX.CONFIG.ROOT_PATH + "stencilsets/extensions/"; -ORYX.CONFIG.SS_EXTENSIONS_CONFIG = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/editor_ssextensions"; -ORYX.CONFIG.ORYX_NEW_URL = "/new"; -ORYX.CONFIG.BPMN_LAYOUTER = ORYX.CONFIG.ROOT_PATH + "bpmnlayouter"; - -ORYX.CONFIG.EXPRESSION_METADATA_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/expression-metadata"; -ORYX.CONFIG.DATASOURCE_METADATA_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/datasource-metadata";/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!ORYX) var ORYX = {}; - -if(!ORYX.CONFIG) ORYX.CONFIG = {}; - -/** - * Signavio specific variables - */ -ORYX.CONFIG.BACKEND_SWITCH = true; -ORYX.CONFIG.PANEL_LEFT_WIDTH = 250; -ORYX.CONFIG.PANEL_RIGHT_COLLAPSED = true; -ORYX.CONFIG.PANEL_RIGHT_WIDTH = 300; -ORYX.CONFIG.APPNAME = 'Flowable'; -ORYX.CONFIG.WEB_URL = "."; - -ORYX.CONFIG.BLANK_IMAGE = ORYX.CONFIG.LIBS_PATH + '/ext-2.0.2/resources/images/default/s.gif'; - -/* Specify offset of header */ -ORYX.CONFIG.OFFSET_HEADER = 61; - -/* Show grid line while dragging */ -ORYX.CONFIG.SHOW_GRIDLINE = true; - - /* Editor-Mode */ -ORYX.CONFIG.MODE_READONLY = "readonly"; -ORYX.CONFIG.MODE_FULLSCREEN = "fullscreen"; -ORYX.CONFIG.WINDOW_HEIGHT = 800; -ORYX.CONFIG.PREVENT_LOADINGMASK_AT_READY = false; - - /* Plugins */ -ORYX.CONFIG.PLUGINS_ENABLED = true; -ORYX.CONFIG.PLUGINS_FOLDER = "Plugins/"; - -ORYX.CONFIG.BPMN20_SCHEMA_VALIDATION_ON = true; - - /* Namespaces */ -ORYX.CONFIG.NAMESPACE_ORYX = "http://www.b3mn.org/oryx"; -ORYX.CONFIG.NAMESPACE_SVG = "http://www.w3.org/2000/svg"; - - /* UI */ -ORYX.CONFIG.CANVAS_WIDTH = 1200; -ORYX.CONFIG.CANVAS_HEIGHT = 1050; -ORYX.CONFIG.CANVAS_RESIZE_INTERVAL = 100; -ORYX.CONFIG.CANVAS_MIN_WIDTH = 800; -ORYX.CONFIG.CANVAS_MIN_HEIGHT = 300; -ORYX.CONFIG.SELECTED_AREA_PADDING = 4; -ORYX.CONFIG.CANVAS_BACKGROUND_COLOR = "none"; -ORYX.CONFIG.GRID_DISTANCE = 30; -ORYX.CONFIG.GRID_ENABLED = true; -ORYX.CONFIG.ZOOM_OFFSET = 0.1; -ORYX.CONFIG.DEFAULT_SHAPE_MARGIN = 60; -ORYX.CONFIG.SCALERS_SIZE = 7; -ORYX.CONFIG.MINIMUM_SIZE = 20; -ORYX.CONFIG.MAXIMUM_SIZE = 10000; -ORYX.CONFIG.OFFSET_MAGNET = 15; -ORYX.CONFIG.OFFSET_EDGE_LABEL_TOP = 8; -ORYX.CONFIG.OFFSET_EDGE_LABEL_BOTTOM = 8; -ORYX.CONFIG.OFFSET_EDGE_BOUNDS = 5; -ORYX.CONFIG.COPY_MOVE_OFFSET = 30; - -ORYX.CONFIG.BORDER_OFFSET = 14; - -ORYX.CONFIG.MAX_NUM_SHAPES_NO_GROUP = 20; // Updated so the form editor shows all elements at once - -ORYX.CONFIG.SHAPEMENU_CREATE_OFFSET_CORNER = 30; -ORYX.CONFIG.SHAPEMENU_CREATE_OFFSET = 45; - - /* Shape-Menu Align */ -ORYX.CONFIG.SHAPEMENU_RIGHT = "Oryx_Right"; -ORYX.CONFIG.SHAPEMENU_BOTTOM = "Oryx_Bottom"; -ORYX.CONFIG.SHAPEMENU_LEFT = "Oryx_Left"; -ORYX.CONFIG.SHAPEMENU_TOP = "Oryx_Top"; - - - /* Morph-Menu Item */ -ORYX.CONFIG.MORPHITEM_DISABLED = "Oryx_MorphItem_disabled"; - - /* Property type names */ -ORYX.CONFIG.TYPE_STRING = "string"; -ORYX.CONFIG.TYPE_BOOLEAN = "boolean"; -ORYX.CONFIG.TYPE_INTEGER = "integer"; -ORYX.CONFIG.TYPE_FLOAT = "float"; -ORYX.CONFIG.TYPE_COLOR = "color"; -ORYX.CONFIG.TYPE_DATE = "date"; -ORYX.CONFIG.TYPE_CHOICE = "choice"; -ORYX.CONFIG.TYPE_URL = "url"; -ORYX.CONFIG.TYPE_DIAGRAM_LINK = "diagramlink"; -ORYX.CONFIG.TYPE_COMPLEX = "complex"; -ORYX.CONFIG.TYPE_MULTIPLECOMPLEX = "multiplecomplex"; -ORYX.CONFIG.TYPE_TEXT = "text"; -ORYX.CONFIG.TYPE_FLOWABLE_MULTIINSTANCE = "flowable-multiinstance"; -ORYX.CONFIG.TYPE_MODEL_LINK = "modellink"; -ORYX.CONFIG.TYPE_FORM_FLOW_LINK = "formflowlink"; -ORYX.CONFIG.TYPE_FORM_LINK = "formlink"; -ORYX.CONFIG.TYPE_SUB_PROCESS_LINK = "subprocess-link"; -ORYX.CONFIG.TYPE_SERVICE_LINK = "servicelink"; -ORYX.CONFIG.TYPE_CONDITIONS = "conditions"; -ORYX.CONFIG.TYPE_VARIABLES = "variables"; -ORYX.CONFIG.TYPE_LISTENER = "listener"; -ORYX.CONFIG.TYPE_EPC_FREQ = "epcfrequency"; -ORYX.CONFIG.TYPE_GLOSSARY_LINK = "glossarylink"; -ORYX.CONFIG.TYPE_EXPRESSION = "expression"; -ORYX.CONFIG.TYPE_DATASOURCE = "datasource"; -ORYX.CONFIG.TYPE_DATASOURCE_MINIMAL = "datasource-minimal"; -ORYX.CONFIG.TYPE_VALIDATORS = "validators"; -ORYX.CONFIG.TYPE_FLOWABLE_HTTP_REQUEST_METHOD = "flowable-http-request-method"; - - - /* Vertical line distance of multiline labels */ -ORYX.CONFIG.LABEL_LINE_DISTANCE = 2; -ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT = 12; - - /* Open Morph Menu with Hover */ -ORYX.CONFIG.ENABLE_MORPHMENU_BY_HOVER = false; - - - /* Editor constants come here */ -ORYX.CONFIG.EDITOR_ALIGN_BOTTOM = 0x01; -ORYX.CONFIG.EDITOR_ALIGN_MIDDLE = 0x02; -ORYX.CONFIG.EDITOR_ALIGN_TOP = 0x04; -ORYX.CONFIG.EDITOR_ALIGN_LEFT = 0x08; -ORYX.CONFIG.EDITOR_ALIGN_CENTER = 0x10; -ORYX.CONFIG.EDITOR_ALIGN_RIGHT = 0x20; -ORYX.CONFIG.EDITOR_ALIGN_SIZE = 0x30; - - /* Event types */ -ORYX.CONFIG.EVENT_MOUSEDOWN = "mousedown"; -ORYX.CONFIG.EVENT_MOUSEUP = "mouseup"; -ORYX.CONFIG.EVENT_MOUSEOVER = "mouseover"; -ORYX.CONFIG.EVENT_MOUSEOUT = "mouseout"; -ORYX.CONFIG.EVENT_MOUSEMOVE = "mousemove"; -ORYX.CONFIG.EVENT_DBLCLICK = "dblclick"; -ORYX.CONFIG.EVENT_KEYDOWN = "keydown"; -ORYX.CONFIG.EVENT_KEYUP = "keyup"; - -ORYX.CONFIG.EVENT_LOADED = "editorloaded"; -ORYX.CONFIG.EVENT_SAVED = "editorSaved"; - -ORYX.CONFIG.EVENT_EXECUTE_COMMANDS = "executeCommands"; -ORYX.CONFIG.EVENT_STENCIL_SET_LOADED = "stencilSetLoaded"; -ORYX.CONFIG.EVENT_SELECTION_CHANGED = "selectionchanged"; -ORYX.CONFIG.EVENT_SHAPEADDED = "shapeadded"; -ORYX.CONFIG.EVENT_SHAPEREMOVED = "shaperemoved"; -ORYX.CONFIG.EVENT_PROPERTY_CHANGED = "propertyChanged"; -ORYX.CONFIG.EVENT_DRAGDROP_START = "dragdrop.start"; -ORYX.CONFIG.EVENT_SHAPE_MENU_CLOSE = "shape.menu.close"; -ORYX.CONFIG.EVENT_DRAGDROP_END = "dragdrop.end"; -ORYX.CONFIG.EVENT_RESIZE_START = "resize.start"; -ORYX.CONFIG.EVENT_RESIZE_END = "resize.end"; -ORYX.CONFIG.EVENT_DRAGDOCKER_DOCKED = "dragDocker.docked"; -ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW = "highlight.showHighlight"; -ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE = "highlight.hideHighlight"; -ORYX.CONFIG.EVENT_LOADING_ENABLE = "loading.enable"; -ORYX.CONFIG.EVENT_LOADING_DISABLE = "loading.disable"; -ORYX.CONFIG.EVENT_LOADING_STATUS = "loading.status"; -ORYX.CONFIG.EVENT_OVERLAY_SHOW = "overlay.show"; -ORYX.CONFIG.EVENT_OVERLAY_HIDE = "overlay.hide"; -ORYX.CONFIG.EVENT_ARRANGEMENT_TOP = "arrangement.setToTop"; -ORYX.CONFIG.EVENT_ARRANGEMENT_BACK = "arrangement.setToBack"; -ORYX.CONFIG.EVENT_ARRANGEMENT_FORWARD = "arrangement.setForward"; -ORYX.CONFIG.EVENT_ARRANGEMENT_BACKWARD = "arrangement.setBackward"; -ORYX.CONFIG.EVENT_PROPWINDOW_PROP_CHANGED = "propertyWindow.propertyChanged"; -ORYX.CONFIG.EVENT_LAYOUT_ROWS = "layout.rows"; -ORYX.CONFIG.EVENT_LAYOUT_BPEL = "layout.BPEL"; -ORYX.CONFIG.EVENT_LAYOUT_BPEL_VERTICAL = "layout.BPEL.vertical"; -ORYX.CONFIG.EVENT_LAYOUT_BPEL_HORIZONTAL = "layout.BPEL.horizontal"; -ORYX.CONFIG.EVENT_LAYOUT_BPEL_SINGLECHILD = "layout.BPEL.singlechild"; -ORYX.CONFIG.EVENT_LAYOUT_BPEL_AUTORESIZE = "layout.BPEL.autoresize"; -ORYX.CONFIG.EVENT_AUTOLAYOUT_LAYOUT = "autolayout.layout"; -ORYX.CONFIG.EVENT_UNDO_EXECUTE = "undo.execute"; -ORYX.CONFIG.EVENT_UNDO_ROLLBACK = "undo.rollback"; -ORYX.CONFIG.EVENT_UNDO_RESET = "undo.reset"; -ORYX.CONFIG.EVENT_BUTTON_UPDATE = "toolbar.button.update"; -ORYX.CONFIG.EVENT_LAYOUT = "layout.dolayout"; -ORYX.CONFIG.EVENT_GLOSSARY_LINK_EDIT = "glossary.link.edit"; -ORYX.CONFIG.EVENT_GLOSSARY_SHOW = "glossary.show.info"; -ORYX.CONFIG.EVENT_GLOSSARY_NEW = "glossary.show.new"; -ORYX.CONFIG.EVENT_DOCKERDRAG = "dragTheDocker"; -ORYX.CONFIG.EVENT_CANVAS_SCROLL = "canvas.scroll"; - -ORYX.CONFIG.EVENT_SHOW_PROPERTYWINDOW = "propertywindow.show"; -ORYX.CONFIG.EVENT_ABOUT_TO_SAVE = "file.aboutToSave"; - -//extra events -ORYX.CONFIG.EVENT_EDITOR_INIT_COMPLETED = "editor.init.completed"; - -//actions events that are fired when a button or key was pressed after completing the initial logic. -ORYX.CONFIG.ACTION_DELETE_COMPLETED = 'delete.action.completed'; - - /* Selection Shapes Highlights */ -ORYX.CONFIG.SELECTION_HIGHLIGHT_SIZE = 5; -ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR = "#4444FF"; -ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR2 = "#9999FF"; - -ORYX.CONFIG.SELECTION_HIGHLIGHT_STYLE_CORNER = "corner"; -ORYX.CONFIG.SELECTION_HIGHLIGHT_STYLE_RECTANGLE = "rectangle"; - -ORYX.CONFIG.SELECTION_VALID_COLOR = "#00FF00"; -ORYX.CONFIG.SELECTION_INVALID_COLOR = "#FF0000"; - - -ORYX.CONFIG.DOCKER_DOCKED_COLOR = "#00FF00"; -ORYX.CONFIG.DOCKER_UNDOCKED_COLOR = "#FF0000"; -ORYX.CONFIG.DOCKER_SNAP_OFFSET = 10; - - /* Copy & Paste */ -ORYX.CONFIG.EDIT_OFFSET_PASTE = 10; - - /* Key-Codes */ -ORYX.CONFIG.KEY_CODE_X = 88; -ORYX.CONFIG.KEY_CODE_C = 67; -ORYX.CONFIG.KEY_CODE_V = 86; -ORYX.CONFIG.KEY_CODE_DELETE = 46; -ORYX.CONFIG.KEY_CODE_META = 224; -ORYX.CONFIG.KEY_CODE_BACKSPACE = 8; -ORYX.CONFIG.KEY_CODE_LEFT = 37; -ORYX.CONFIG.KEY_CODE_RIGHT = 39; -ORYX.CONFIG.KEY_CODE_UP = 38; -ORYX.CONFIG.KEY_CODE_DOWN = 40; - - // TODO Determine where the lowercase constants are still used and remove them from here. -ORYX.CONFIG.KEY_Code_enter = 12; -ORYX.CONFIG.KEY_Code_left = 37; -ORYX.CONFIG.KEY_Code_right = 39; -ORYX.CONFIG.KEY_Code_top = 38; -ORYX.CONFIG.KEY_Code_bottom = 40; - -/* Supported Meta Keys */ - -ORYX.CONFIG.META_KEY_META_CTRL = "metactrl"; -ORYX.CONFIG.META_KEY_ALT = "alt"; -ORYX.CONFIG.META_KEY_SHIFT = "shift"; - -/* Key Actions */ - -ORYX.CONFIG.KEY_ACTION_DOWN = "down"; -ORYX.CONFIG.KEY_ACTION_UP = "up"; - - -/* Form Rowlayouting */ -ORYX.CONFIG.FORM_ROW_WIDTH = 350; -ORYX.CONFIG.FORM_GROUP_MARGIN = 5; -ORYX.CONFIG.FORM_GROUP_EMPTY_HEIGHT = 100; - -/* Form element types */ -ORYX.CONFIG.FORM_ELEMENT_ID_PREFIX = 'http://b3mn.org/stencilset/xforms'; -ORYX.CONFIG.FORM_ELEMENT_TYPE_ROOT = 'http://b3mn.org/stencilset/xforms#XForm'; -ORYX.CONFIG.FORM_ELEMENT_TYPE_GROUP = 'http://b3mn.org/stencilset/xforms#Group'; -ORYX.CONFIG.FORM_ELEMENT_TYPE_REPEATING_GROUP = 'http://b3mn.org/stencilset/xforms#RepeatingGroup'; -ORYX.CONFIG.FORM_ELEMENT_TYPE_LABEL_FIELD = 'http://b3mn.org/stencilset/xforms#LabelField'; - - /** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -function printf() { - - var result = arguments[0]; - for (var i=1; i= ORYX_LOGLEVEL_TRACE) - ORYX.Log.__log('TRACE', arguments); }, - debug: function() { if(ORYX_LOGLEVEL >= ORYX_LOGLEVEL_DEBUG) - ORYX.Log.__log('DEBUG', arguments); }, - info: function() { if(ORYX_LOGLEVEL >= ORYX_LOGLEVEL_INFO) - ORYX.Log.__log('INFO', arguments); }, - warn: function() { if(ORYX_LOGLEVEL >= ORYX_LOGLEVEL_WARN) - ORYX.Log.__log('WARN', arguments); }, - error: function() { if(ORYX_LOGLEVEL >= ORYX_LOGLEVEL_ERROR) - ORYX.Log.__log('ERROR', arguments); }, - fatal: function() { if(ORYX_LOGLEVEL >= ORYX_LOGLEVEL_FATAL) - ORYX.Log.__log('FATAL', arguments); }, - - __log: function(prefix, messageParts) { - - messageParts[0] = (new Date()).getTime() + " " - + prefix + " " + messageParts[0]; - var message = printf.apply(null, messageParts); - - ORYX.Log.__appenders.each(function(appender) { - appender.append(message); - }); - }, - - addAppender: function(appender) { - ORYX.Log.__appenders.push(appender); - } - }, - - /** - * First bootstrapping layer. The Oryx loading procedure begins. In this - * step, all preliminaries that are not in the responsibility of Oryx to be - * met have to be checked here, such as the existance of the prototpe - * library in the current execution environment. After that, the second - * bootstrapping layer is being invoked. Failing to ensure that any - * preliminary condition is not met has to fail with an error. - */ - load: function() { - - ORYX.Log.debug("Oryx begins loading procedure."); - - // check for prototype - if( (typeof Prototype=='undefined') || - (typeof Element == 'undefined') || - (typeof Element.Methods=='undefined') || - parseFloat(Prototype.Version.split(".")[0] + "." + - Prototype.Version.split(".")[1]) < 1.5) - - throw("Application requires the Prototype JavaScript framework >= 1.5.3"); - - ORYX.Log.debug("Prototype > 1.5 found."); - - // continue loading. - ORYX._load(); - }, - - /** - * Second bootstrapping layer. The oryx configuration is checked. When not - * yet loaded, config.js is being requested from the server. A repeated - * error in retrieving the configuration will result in an error to be - * thrown after a certain time of retries. Once the configuration is there, - * all urls that are registered with oryx loading are being requested from - * the server. Once everything is loaded, the third layer is being invoked. - */ - _load: function() { - ORYX.loadPlugins(); - }, - - /** - * Third bootstrapping layer. This is where first the plugin coniguration - * file is loaded into oryx, analyzed, and where all plugins are being - * requested by the server. Afterwards, all editor instances will be - * initialized. - */ - loadPlugins: function() { - - // load plugins if enabled. - if(ORYX.CONFIG.PLUGINS_ENABLED) - ORYX._loadPlugins() - else - ORYX.Log.warn("Ignoring plugins, loading Core only."); - - // init the editor instances. - init(); - }, - - _loadPlugins: function(plugins) { - - ORYX.availablePlugins.length = 0; - - // get plugins.xml content - var resultXml = jQuery.parseXML(plugins); //jquery parser - - // TODO: Describe how properties are handled. - // Get the globale Properties - var globalProperties = []; - var preferences = $A(resultXml.getElementsByTagName("properties")); - preferences.each( function(p) { - - var props = $A(p.childNodes); - props.each( function(prop) { - var property = new Hash(); - - // get all attributes from the node and set to global properties - var attributes = $A(prop.attributes) - attributes.each(function(attr) { - property.set(attr.nodeName, attr.nodeValue); - }); - if(attributes.length > 0) { - globalProperties.push(property) - }; - }); - }); - - - // TODO Why are we using XML if we don't respect structure anyway? - // for each plugin element in the configuration.. - var plugin = resultXml.getElementsByTagName("plugin"); - $A(plugin).each( function(node) { - - // get all element's attributes. - // TODO: What about: var pluginData = $H(node.attributes) !? - var pluginData = new Hash(); - $A(node.attributes).each( function(attr){ - pluginData.set(attr.nodeName,attr.nodeValue); - }); - - // ensure there's a name attribute. - if(!pluginData.get('name')) { - ORYX.Log.error("A plugin is not providing a name. Ingnoring this plugin."); - return; - } - - // ensure there's a source attribute. - if(!pluginData.get('source')) { - ORYX.Log.error("Plugin with name '%0' doesn't provide a source attribute.", pluginData.get('name')); - return; - } - - // Get all private Properties - var propertyNodes = node.getElementsByTagName("property"); - var properties = []; - $A(propertyNodes).each(function(prop) { - var property = new Hash(); - - // Get all Attributes from the Node - var attributes = $A(prop.attributes) - attributes.each(function(attr){ - property.set(attr.nodeName,attr.nodeValue); - }); - - if(attributes.length > 0) { - properties.push(property) - }; - - }); - - // Set all Global-Properties to the Properties - properties = properties.concat(globalProperties); - - // Set Properties to Plugin-Data - pluginData.set('properties',properties); - - // Get the RequieredNodes - var requireNodes = node.getElementsByTagName("requires"); - var requires; - $A(requireNodes).each(function(req) { - var namespace = $A(req.attributes).find(function(attr){ return attr.name == "namespace"}) - if( namespace && namespace.nodeValue ){ - if( !requires ){ - requires = {namespaces:[]} - } - - requires.namespaces.push(namespace.nodeValue) - } - }); - - // Set Requires to the Plugin-Data, if there is one - if( requires ){ - pluginData.set('requires',requires); - } - - - // Get the RequieredNodes - var notUsesInNodes = node.getElementsByTagName("notUsesIn"); - var notUsesIn; - $A(notUsesInNodes).each(function(not) { - var namespace = $A(not.attributes).find(function(attr){ return attr.name == "namespace"}) - if( namespace && namespace.nodeValue ){ - if( !notUsesIn ){ - notUsesIn = {namespaces:[]} - } - - notUsesIn.namespaces.push(namespace.nodeValue) - } - }); - - // Set Requires to the Plugin-Data, if there is one - if( notUsesIn ){ - pluginData.set('notUsesIn',notUsesIn); - } - - - var url = ORYX.PATH + ORYX.CONFIG.PLUGINS_FOLDER + pluginData.get('source'); - - ORYX.Log.debug("Requireing '%0'", url); - - // Add the Script-Tag to the Site - //Kickstart.require(url); - - ORYX.Log.info("Plugin '%0' successfully loaded.", pluginData.get('name')); - - // Add the Plugin-Data to all available Plugins - ORYX.availablePlugins.push(pluginData); - - }); - - }, - - _loadPluginsOnFails: function(result) { - - ORYX.Log.error("Plugin configuration file not available."); - } -}); - - -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.SVG) {ORYX.Core.SVG = {};} - - -/** - * EditPathHandler - * - * Edit SVG paths' coordinates according to specified from-to movement and - * horizontal and vertical scaling factors. - * The resulting path's d attribute is stored in instance variable d. - * - * @constructor - */ -ORYX.Core.SVG.EditPathHandler = Clazz.extend({ - - construct: function() { - arguments.callee.$.construct.apply(this, arguments); - - this.x = 0; - this.y = 0; - this.oldX = 0; - this.oldY = 0; - this.deltaWidth = 1; - this.deltaHeight = 1; - - this.d = ""; - }, - - /** - * init - * - * @param {float} x Target point's x-coordinate - * @param {float} y Target point's y-coordinate - * @param {float} oldX Reference point's x-coordinate - * @param {float} oldY Reference point's y-coordinate - * @param {float} deltaWidth Horizontal scaling factor - * @param {float} deltaHeight Vertical scaling factor - */ - init: function(x, y, oldX, oldY, deltaWidth, deltaHeight) { - this.x = x; - this.y = y; - this.oldX = oldX; - this.oldY = oldY; - this.deltaWidth = deltaWidth; - this.deltaHeight = deltaHeight; - - this.d = ""; - }, - - /** - * editPointsAbs - * - * @param {Array} points Array of absolutePoints - */ - editPointsAbs: function(points) { - if(points instanceof Array) { - var newPoints = []; - var x, y; - for(var i = 0; i < points.length; i++) { - x = (parseFloat(points[i]) - this.oldX)*this.deltaWidth + this.x; - i++; - y = (parseFloat(points[i]) - this.oldY)*this.deltaHeight + this.y; - newPoints.push(x); - newPoints.push(y); - } - - return newPoints; - } else { - //TODO error - } - }, - - /** - * editPointsRel - * - * @param {Array} points Array of absolutePoints - */ - editPointsRel: function(points) { - if(points instanceof Array) { - var newPoints = []; - var x, y; - for(var i = 0; i < points.length; i++) { - x = parseFloat(points[i])*this.deltaWidth; - i++; - y = parseFloat(points[i])*this.deltaHeight; - newPoints.push(x); - newPoints.push(y); - } - - return newPoints; - } else { - //TODO error - } - }, - - /** - * arcAbs - A - * - * @param {Number} rx - * @param {Number} ry - * @param {Number} xAxisRotation - * @param {Boolean} largeArcFlag - * @param {Boolean} sweepFlag - * @param {Number} x - * @param {Number} y - */ - arcAbs: function(rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y) { - var pointsAbs = this.editPointsAbs([x, y]); - var pointsRel = this.editPointsRel([rx, ry]); - - this.d = this.d.concat(" A" + pointsRel[0] + " " + pointsRel[1] + - " " + xAxisRotation + " " + largeArcFlag + - " " + sweepFlag + " " + pointsAbs[0] + " " + - pointsAbs[1] + " "); - }, - - /** - * arcRel - a - * - * @param {Number} rx - * @param {Number} ry - * @param {Number} xAxisRotation - * @param {Boolean} largeArcFlag - * @param {Boolean} sweepFlag - * @param {Number} x - * @param {Number} y - */ - arcRel: function(rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y) { - var pointsRel = this.editPointsRel([rx, ry, x, y]); - - this.d = this.d.concat(" a" + pointsRel[0] + " " + pointsRel[1] + - " " + xAxisRotation + " " + largeArcFlag + - " " + sweepFlag + " " + pointsRel[2] + " " + - pointsRel[3] + " "); - }, - - /** - * curvetoCubicAbs - C - * - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} x2 - * @param {Number} y2 - * @param {Number} x - * @param {Number} y - */ - curvetoCubicAbs: function(x1, y1, x2, y2, x, y) { - var pointsAbs = this.editPointsAbs([x1, y1, x2, y2, x, y]); - - this.d = this.d.concat(" C" + pointsAbs[0] + " " + pointsAbs[1] + - " " + pointsAbs[2] + " " + pointsAbs[3] + - " " + pointsAbs[4] + " " + pointsAbs[5] + " "); - }, - - /** - * curvetoCubicRel - c - * - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} x2 - * @param {Number} y2 - * @param {Number} x - * @param {Number} y - */ - curvetoCubicRel: function(x1, y1, x2, y2, x, y) { - var pointsRel = this.editPointsRel([x1, y1, x2, y2, x, y]); - - this.d = this.d.concat(" c" + pointsRel[0] + " " + pointsRel[1] + - " " + pointsRel[2] + " " + pointsRel[3] + - " " + pointsRel[4] + " " + pointsRel[5] + " "); - }, - - /** - * linetoHorizontalAbs - H - * - * @param {Number} x - */ - linetoHorizontalAbs: function(x) { - var pointsAbs = this.editPointsAbs([x, 0]); - - this.d = this.d.concat(" H" + pointsAbs[0] + " "); - }, - - /** - * linetoHorizontalRel - h - * - * @param {Number} x - */ - linetoHorizontalRel: function(x) { - var pointsRel = this.editPointsRel([x, 0]); - - this.d = this.d.concat(" h" + pointsRel[0] + " "); - }, - - /** - * linetoAbs - L - * - * @param {Number} x - * @param {Number} y - */ - linetoAbs: function(x, y) { - var pointsAbs = this.editPointsAbs([x, y]); - - this.d = this.d.concat(" L" + pointsAbs[0] + " " + pointsAbs[1] + " "); - }, - - /** - * linetoRel - l - * - * @param {Number} x - * @param {Number} y - */ - linetoRel: function(x, y) { - var pointsRel = this.editPointsRel([x, y]); - - this.d = this.d.concat(" l" + pointsRel[0] + " " + pointsRel[1] + " "); - }, - - /** - * movetoAbs - M - * - * @param {Number} x - * @param {Number} y - */ - movetoAbs: function(x, y) { - var pointsAbs = this.editPointsAbs([x, y]); - - this.d = this.d.concat(" M" + pointsAbs[0] + " " + pointsAbs[1] + " "); - }, - - /** - * movetoRel - m - * - * @param {Number} x - * @param {Number} y - */ - movetoRel: function(x, y) { - var pointsRel; - if(this.d === "") { - pointsRel = this.editPointsAbs([x, y]); - } else { - pointsRel = this.editPointsRel([x, y]); - } - - this.d = this.d.concat(" m" + pointsRel[0] + " " + pointsRel[1] + " "); - }, - - /** - * curvetoQuadraticAbs - Q - * - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} x - * @param {Number} y - */ - curvetoQuadraticAbs: function(x1, y1, x, y) { - var pointsAbs = this.editPointsAbs([x1, y1, x, y]); - - this.d = this.d.concat(" Q" + pointsAbs[0] + " " + pointsAbs[1] + " " + - pointsAbs[2] + " " + pointsAbs[3] + " "); - }, - - /** - * curvetoQuadraticRel - q - * - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} x - * @param {Number} y - */ - curvetoQuadraticRel: function(x1, y1, x, y) { - var pointsRel = this.editPointsRel([x1, y1, x, y]); - - this.d = this.d.concat(" q" + pointsRel[0] + " " + pointsRel[1] + " " + - pointsRel[2] + " " + pointsRel[3] + " "); - }, - - /** - * curvetoCubicSmoothAbs - S - * - * @param {Number} x2 - * @param {Number} y2 - * @param {Number} x - * @param {Number} y - */ - curvetoCubicSmoothAbs: function(x2, y2, x, y) { - var pointsAbs = this.editPointsAbs([x2, y2, x, y]); - - this.d = this.d.concat(" S" + pointsAbs[0] + " " + pointsAbs[1] + " " + - pointsAbs[2] + " " + pointsAbs[3] + " "); - }, - - /** - * curvetoCubicSmoothRel - s - * - * @param {Number} x2 - * @param {Number} y2 - * @param {Number} x - * @param {Number} y - */ - curvetoCubicSmoothRel: function(x2, y2, x, y) { - var pointsRel = this.editPointsRel([x2, y2, x, y]); - - this.d = this.d.concat(" s" + pointsRel[0] + " " + pointsRel[1] + " " + - pointsRel[2] + " " + pointsRel[3] + " "); - }, - - /** - * curvetoQuadraticSmoothAbs - T - * - * @param {Number} x - * @param {Number} y - */ - curvetoQuadraticSmoothAbs: function(x, y) { - var pointsAbs = this.editPointsAbs([x, y]); - - this.d = this.d.concat(" T" + pointsAbs[0] + " " + pointsAbs[1] + " "); - }, - - /** - * curvetoQuadraticSmoothRel - t - * - * @param {Number} x - * @param {Number} y - */ - curvetoQuadraticSmoothRel: function(x, y) { - var pointsRel = this.editPointsRel([x, y]); - - this.d = this.d.concat(" t" + pointsRel[0] + " " + pointsRel[1] + " "); - }, - - /** - * linetoVerticalAbs - V - * - * @param {Number} y - */ - linetoVerticalAbs: function(y) { - var pointsAbs = this.editPointsAbs([0, y]); - - this.d = this.d.concat(" V" + pointsAbs[1] + " "); - }, - - /** - * linetoVerticalRel - v - * - * @param {Number} y - */ - linetoVerticalRel: function(y) { - var pointsRel = this.editPointsRel([0, y]); - - this.d = this.d.concat(" v" + pointsRel[1] + " "); - }, - - /** - * closePath - z or Z - */ - closePath: function() { - this.d = this.d.concat(" z"); - } - -});/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.SVG) {ORYX.Core.SVG = {};} - - -/** - * MinMaxPathHandler - * - * Determine the minimum and maximum of a SVG path's absolute coordinates. - * For relative coordinates the absolute value is computed for consideration. - * The values are stored in attributes minX, minY, maxX, and maxY. - * - * @constructor - */ -ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({ - - construct: function() { - arguments.callee.$.construct.apply(this, arguments); - - this.minX = undefined; - this.minY = undefined; - this.maxX = undefined; - this.maxY = undefined; - - this._lastAbsX = undefined; - this._lastAbsY = undefined; - }, - - /** - * Store minimal and maximal coordinates of passed points to attributes minX, maxX, minY, maxY - * - * @param {Array} points Array of absolutePoints - */ - calculateMinMax: function(points) { - if(points instanceof Array) { - var x, y; - for(var i = 0; i < points.length; i++) { - x = parseFloat(points[i]); - i++; - y = parseFloat(points[i]); - - this.minX = (this.minX !== undefined) ? Math.min(this.minX, x) : x; - this.maxX = (this.maxX !== undefined) ? Math.max(this.maxX, x) : x; - this.minY = (this.minY !== undefined) ? Math.min(this.minY, y) : y; - this.maxY = (this.maxY !== undefined) ? Math.max(this.maxY, y) : y; - - this._lastAbsX = x; - this._lastAbsY = y; - } - } else { - //TODO error - } - }, - - /** - * arcAbs - A - * - * @param {Number} rx - * @param {Number} ry - * @param {Number} xAxisRotation - * @param {Boolean} largeArcFlag - * @param {Boolean} sweepFlag - * @param {Number} x - * @param {Number} y - */ - arcAbs: function(rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y) { - this.calculateMinMax([x, y]); - }, - - /** - * arcRel - a - * - * @param {Number} rx - * @param {Number} ry - * @param {Number} xAxisRotation - * @param {Boolean} largeArcFlag - * @param {Boolean} sweepFlag - * @param {Number} x - * @param {Number} y - */ - arcRel: function(rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y) { - this.calculateMinMax([this._lastAbsX + x, this._lastAbsY + y]); - }, - - /** - * curvetoCubicAbs - C - * - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} x2 - * @param {Number} y2 - * @param {Number} x - * @param {Number} y - */ - curvetoCubicAbs: function(x1, y1, x2, y2, x, y) { - this.calculateMinMax([x1, y1, x2, y2, x, y]); - }, - - /** - * curvetoCubicRel - c - * - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} x2 - * @param {Number} y2 - * @param {Number} x - * @param {Number} y - */ - curvetoCubicRel: function(x1, y1, x2, y2, x, y) { - this.calculateMinMax([this._lastAbsX + x1, this._lastAbsY + y1, - this._lastAbsX + x2, this._lastAbsY + y2, - this._lastAbsX + x, this._lastAbsY + y]); - }, - - /** - * linetoHorizontalAbs - H - * - * @param {Number} x - */ - linetoHorizontalAbs: function(x) { - this.calculateMinMax([x, this._lastAbsY]); - }, - - /** - * linetoHorizontalRel - h - * - * @param {Number} x - */ - linetoHorizontalRel: function(x) { - this.calculateMinMax([this._lastAbsX + x, this._lastAbsY]); - }, - - /** - * linetoAbs - L - * - * @param {Number} x - * @param {Number} y - */ - linetoAbs: function(x, y) { - this.calculateMinMax([x, y]); - }, - - /** - * linetoRel - l - * - * @param {Number} x - * @param {Number} y - */ - linetoRel: function(x, y) { - this.calculateMinMax([this._lastAbsX + x, this._lastAbsY + y]); - }, - - /** - * movetoAbs - M - * - * @param {Number} x - * @param {Number} y - */ - movetoAbs: function(x, y) { - this.calculateMinMax([x, y]); - }, - - /** - * movetoRel - m - * - * @param {Number} x - * @param {Number} y - */ - movetoRel: function(x, y) { - if(this._lastAbsX && this._lastAbsY) { - this.calculateMinMax([this._lastAbsX + x, this._lastAbsY + y]); - } else { - this.calculateMinMax([x, y]); - } - }, - - /** - * curvetoQuadraticAbs - Q - * - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} x - * @param {Number} y - */ - curvetoQuadraticAbs: function(x1, y1, x, y) { - this.calculateMinMax([x1, y1, x, y]); - }, - - /** - * curvetoQuadraticRel - q - * - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} x - * @param {Number} y - */ - curvetoQuadraticRel: function(x1, y1, x, y) { - this.calculateMinMax([this._lastAbsX + x1, this._lastAbsY + y1, this._lastAbsX + x, this._lastAbsY + y]); - }, - - /** - * curvetoCubicSmoothAbs - S - * - * @param {Number} x2 - * @param {Number} y2 - * @param {Number} x - * @param {Number} y - */ - curvetoCubicSmoothAbs: function(x2, y2, x, y) { - this.calculateMinMax([x2, y2, x, y]); - }, - - /** - * curvetoCubicSmoothRel - s - * - * @param {Number} x2 - * @param {Number} y2 - * @param {Number} x - * @param {Number} y - */ - curvetoCubicSmoothRel: function(x2, y2, x, y) { - this.calculateMinMax([this._lastAbsX + x2, this._lastAbsY + y2, this._lastAbsX + x, this._lastAbsY + y]); - }, - - /** - * curvetoQuadraticSmoothAbs - T - * - * @param {Number} x - * @param {Number} y - */ - curvetoQuadraticSmoothAbs: function(x, y) { - this.calculateMinMax([x, y]); - }, - - /** - * curvetoQuadraticSmoothRel - t - * - * @param {Number} x - * @param {Number} y - */ - curvetoQuadraticSmoothRel: function(x, y) { - this.calculateMinMax([this._lastAbsX + x, this._lastAbsY + y]); - }, - - /** - * linetoVerticalAbs - V - * - * @param {Number} y - */ - linetoVerticalAbs: function(y) { - this.calculateMinMax([this._lastAbsX, y]); - }, - - /** - * linetoVerticalRel - v - * - * @param {Number} y - */ - linetoVerticalRel: function(y) { - this.calculateMinMax([this._lastAbsX, this._lastAbsY + y]); - }, - - /** - * closePath - z or Z - */ - closePath: function() { - return;// do nothing - } - -});/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.SVG) {ORYX.Core.SVG = {};} - - -/** - * PathHandler - * - * Determine absolute points of a SVG path. The coordinates are stored - * sequentially in the attribute points (x-coordinates at even indices, - * y-coordinates at odd indices). - * - * @constructor - */ -ORYX.Core.SVG.PointsPathHandler = Clazz.extend({ - - construct: function() { - arguments.callee.$.construct.apply(this, arguments); - - this.points = []; - - this._lastAbsX = undefined; - this._lastAbsY = undefined; - }, - - /** - * addPoints - * - * @param {Array} points Array of absolutePoints - */ - addPoints: function(points) { - if(points instanceof Array) { - var x, y; - for(var i = 0; i < points.length; i++) { - x = parseFloat(points[i]); - i++; - y = parseFloat(points[i]); - - this.points.push(x); - this.points.push(y); - //this.points.push({x:x, y:y}); - - this._lastAbsX = x; - this._lastAbsY = y; - } - } else { - //TODO error - } - }, - - /** - * arcAbs - A - * - * @param {Number} rx - * @param {Number} ry - * @param {Number} xAxisRotation - * @param {Boolean} largeArcFlag - * @param {Boolean} sweepFlag - * @param {Number} x - * @param {Number} y - */ - arcAbs: function(rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y) { - this.addPoints([x, y]); - }, - - /** - * arcRel - a - * - * @param {Number} rx - * @param {Number} ry - * @param {Number} xAxisRotation - * @param {Boolean} largeArcFlag - * @param {Boolean} sweepFlag - * @param {Number} x - * @param {Number} y - */ - arcRel: function(rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y) { - this.addPoints([this._lastAbsX + x, this._lastAbsY + y]); - }, - - /** - * curvetoCubicAbs - C - * - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} x2 - * @param {Number} y2 - * @param {Number} x - * @param {Number} y - */ - curvetoCubicAbs: function(x1, y1, x2, y2, x, y) { - this.addPoints([x, y]); - }, - - /** - * curvetoCubicRel - c - * - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} x2 - * @param {Number} y2 - * @param {Number} x - * @param {Number} y - */ - curvetoCubicRel: function(x1, y1, x2, y2, x, y) { - this.addPoints([this._lastAbsX + x, this._lastAbsY + y]); - }, - - /** - * linetoHorizontalAbs - H - * - * @param {Number} x - */ - linetoHorizontalAbs: function(x) { - this.addPoints([x, this._lastAbsY]); - }, - - /** - * linetoHorizontalRel - h - * - * @param {Number} x - */ - linetoHorizontalRel: function(x) { - this.addPoints([this._lastAbsX + x, this._lastAbsY]); - }, - - /** - * linetoAbs - L - * - * @param {Number} x - * @param {Number} y - */ - linetoAbs: function(x, y) { - this.addPoints([x, y]); - }, - - /** - * linetoRel - l - * - * @param {Number} x - * @param {Number} y - */ - linetoRel: function(x, y) { - this.addPoints([this._lastAbsX + x, this._lastAbsY + y]); - }, - - /** - * movetoAbs - M - * - * @param {Number} x - * @param {Number} y - */ - movetoAbs: function(x, y) { - this.addPoints([x, y]); - }, - - /** - * movetoRel - m - * - * @param {Number} x - * @param {Number} y - */ - movetoRel: function(x, y) { - if(this._lastAbsX && this._lastAbsY) { - this.addPoints([this._lastAbsX + x, this._lastAbsY + y]); - } else { - this.addPoints([x, y]); - } - }, - - /** - * curvetoQuadraticAbs - Q - * - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} x - * @param {Number} y - */ - curvetoQuadraticAbs: function(x1, y1, x, y) { - this.addPoints([x, y]); - }, - - /** - * curvetoQuadraticRel - q - * - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} x - * @param {Number} y - */ - curvetoQuadraticRel: function(x1, y1, x, y) { - this.addPoints([this._lastAbsX + x, this._lastAbsY + y]); - }, - - /** - * curvetoCubicSmoothAbs - S - * - * @param {Number} x2 - * @param {Number} y2 - * @param {Number} x - * @param {Number} y - */ - curvetoCubicSmoothAbs: function(x2, y2, x, y) { - this.addPoints([x, y]); - }, - - /** - * curvetoCubicSmoothRel - s - * - * @param {Number} x2 - * @param {Number} y2 - * @param {Number} x - * @param {Number} y - */ - curvetoCubicSmoothRel: function(x2, y2, x, y) { - this.addPoints([this._lastAbsX + x, this._lastAbsY + y]); - }, - - /** - * curvetoQuadraticSmoothAbs - T - * - * @param {Number} x - * @param {Number} y - */ - curvetoQuadraticSmoothAbs: function(x, y) { - this.addPoints([x, y]); - }, - - /** - * curvetoQuadraticSmoothRel - t - * - * @param {Number} x - * @param {Number} y - */ - curvetoQuadraticSmoothRel: function(x, y) { - this.addPoints([this._lastAbsX + x, this._lastAbsY + y]); - }, - - /** - * linetoVerticalAbs - V - * - * @param {Number} y - */ - linetoVerticalAbs: function(y) { - this.addPoints([this._lastAbsX, y]); - }, - - /** - * linetoVerticalRel - v - * - * @param {Number} y - */ - linetoVerticalRel: function(y) { - this.addPoints([this._lastAbsX, this._lastAbsY + y]); - }, - - /** - * closePath - z or Z - */ - closePath: function() { - return;// do nothing - } - -});/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * - * Config variables - */ -NAMESPACE_ORYX = "http://www.b3mn.org/oryx"; -NAMESPACE_SVG = "http://www.w3.org/2000/svg/"; - -/** - * @classDescription This class wraps the manipulation of a SVG marker. - * @namespace ORYX.Core.SVG - * uses Inheritance (Clazz) - * uses Prototype 1.5.0 - * - */ - -/** - * Init package - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.SVG) {ORYX.Core.SVG = {};} - -ORYX.Core.SVG.SVGMarker = Clazz.extend({ - - /** - * Constructor - * @param markerElement {SVGMarkerElement} - */ - construct: function(markerElement) { - arguments.callee.$.construct.apply(this, arguments); - - this.id = undefined; - this.element = markerElement; - this.refX = undefined; - this.refY = undefined; - this.markerWidth = undefined; - this.markerHeight = undefined; - this.oldRefX = undefined; - this.oldRefY = undefined; - this.oldMarkerWidth = undefined; - this.oldMarkerHeight = undefined; - this.optional = false; - this.enabled = true; - this.minimumLength = undefined; - this.resize = false; - - this.svgShapes = []; - - this._init(); //initialisation of all the properties declared above. - }, - - /** - * Initializes the values that are defined in the constructor. - */ - _init: function() { - //check if this.element is a SVGMarkerElement - if(!( this.element == "[object SVGMarkerElement]")) { - throw "SVGMarker: Argument is not an instance of SVGMarkerElement."; - } - - this.id = this.element.getAttributeNS(null, "id"); - - //init svg marker attributes - var refXValue = this.element.getAttributeNS(null, "refX"); - if(refXValue) { - this.refX = parseFloat(refXValue); - } else { - this.refX = 0; - } - var refYValue = this.element.getAttributeNS(null, "refY"); - if(refYValue) { - this.refY = parseFloat(refYValue); - } else { - this.refY = 0; - } - var markerWidthValue = this.element.getAttributeNS(null, "markerWidth"); - if(markerWidthValue) { - this.markerWidth = parseFloat(markerWidthValue); - } else { - this.markerWidth = 3; - } - var markerHeightValue = this.element.getAttributeNS(null, "markerHeight"); - if(markerHeightValue) { - this.markerHeight = parseFloat(markerHeightValue); - } else { - this.markerHeight = 3; - } - - this.oldRefX = this.refX; - this.oldRefY = this.refY; - this.oldMarkerWidth = this.markerWidth; - this.oldMarkerHeight = this.markerHeight; - - //init oryx attributes - var optionalAttr = this.element.getAttributeNS(NAMESPACE_ORYX, "optional"); - if(optionalAttr) { - optionalAttr = optionalAttr.strip(); - this.optional = (optionalAttr.toLowerCase() === "yes"); - } else { - this.optional = false; - } - - var enabledAttr = this.element.getAttributeNS(NAMESPACE_ORYX, "enabled"); - if(enabledAttr) { - enabledAttr = enabledAttr.strip(); - this.enabled = !(enabledAttr.toLowerCase() === "no"); - } else { - this.enabled = true; - } - - var minLengthAttr = this.element.getAttributeNS(NAMESPACE_ORYX, "minimumLength"); - if(minLengthAttr) { - this.minimumLength = parseFloat(minLengthAttr); - } - - var resizeAttr = this.element.getAttributeNS(NAMESPACE_ORYX, "resize"); - if(resizeAttr) { - resizeAttr = resizeAttr.strip(); - this.resize = (resizeAttr.toLowerCase() === "yes"); - } else { - this.resize = false; - } - - //init SVGShape objects - //this.svgShapes = this._getSVGShapes(this.element); - }, - - /** - * - */ - _getSVGShapes: function(svgElement) { - if(svgElement.hasChildNodes) { - var svgShapes = []; - var me = this; - $A(svgElement.childNodes).each(function(svgChild) { - try { - var svgShape = new ORYX.Core.SVG.SVGShape(svgChild); - svgShapes.push(svgShape); - } catch (e) { - svgShapes = svgShapes.concat(me._getSVGShapes(svgChild)); - } - }); - return svgShapes; - } - }, - - /** - * Writes the changed values into the SVG marker. - */ - update: function() { - //TODO mache marker resizebar!!! aber erst wenn der rest der connectingshape funzt! - -// //update marker attributes -// if(this.refX != this.oldRefX) { -// this.element.setAttributeNS(null, "refX", this.refX); -// } -// if(this.refY != this.oldRefY) { -// this.element.setAttributeNS(null, "refY", this.refY); -// } -// if(this.markerWidth != this.oldMarkerWidth) { -// this.element.setAttributeNS(null, "markerWidth", this.markerWidth); -// } -// if(this.markerHeight != this.oldMarkerHeight) { -// this.element.setAttributeNS(null, "markerHeight", this.markerHeight); -// } -// -// //update SVGShape objects -// var widthDelta = this.markerWidth / this.oldMarkerWidth; -// var heightDelta = this.markerHeight / this.oldMarkerHeight; -// if(widthDelta != 1 && heightDelta != 1) { -// this.svgShapes.each(function(svgShape) { -// -// }); -// } - - //update old values to prepare the next update - this.oldRefX = this.refX; - this.oldRefY = this.refY; - this.oldMarkerWidth = this.markerWidth; - this.oldMarkerHeight = this.markerHeight; - }, - - toString: function() { return (this.element) ? "SVGMarker " + this.element.id : "SVGMarker " + this.element;} - });/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * - * Config variables - */ -NAMESPACE_ORYX = "http://www.b3mn.org/oryx"; -NAMESPACE_SVG = "http://www.w3.org/2000/svg/"; - -/** - * @classDescription This class wraps the manipulation of a SVG basic shape or a path. - * @namespace ORYX.Core.SVG - * uses Inheritance (Clazz) - * uses Prototype 1.5.0 - * uses PathParser by Kevin Lindsey (http://kevlindev.com/) - * uses MinMaxPathHandler - * uses EditPathHandler - * - */ - -//init package -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.SVG) {ORYX.Core.SVG = {};} - -ORYX.Core.SVG.SVGShape = Clazz.extend({ - - /** - * Constructor - * @param svgElem {SVGElement} An SVGElement that is a basic shape or a path. - */ - construct: function(svgElem) { - arguments.callee.$.construct.apply(this, arguments); - - this.type; - this.element = svgElem; - this.x = undefined; - this.y = undefined; - this.width = undefined; - this.height = undefined; - this.oldX = undefined; - this.oldY = undefined; - this.oldWidth = undefined; - this.oldHeight = undefined; - this.radiusX = undefined; - this.radiusY = undefined; - this.isHorizontallyResizable = false; - this.isVerticallyResizable = false; - //this.anchors = []; - this.anchorLeft = false; - this.anchorRight = false; - this.anchorTop = false; - this.anchorBottom = false; - - //attributes of path elements of edge objects - this.allowDockers = true; - this.resizeMarkerMid = false; - - this.editPathParser; - this.editPathHandler; - - this.init(); //initialisation of all the properties declared above. - }, - - /** - * Initializes the values that are defined in the constructor. - */ - init: function() { - - /**initialize position and size*/ - if(ORYX.Editor.checkClassType(this.element, SVGRectElement) || ORYX.Editor.checkClassType(this.element, SVGImageElement)) { - this.type = "Rect"; - - var xAttr = this.element.getAttributeNS(null, "x"); - if(xAttr) { - this.oldX = parseFloat(xAttr); - } else { - throw "Missing attribute in element " + this.element; - } - var yAttr = this.element.getAttributeNS(null, "y"); - if(yAttr) { - this.oldY = parseFloat(yAttr); - } else { - throw "Missing attribute in element " + this.element; - } - var widthAttr = this.element.getAttributeNS(null, "width"); - if(widthAttr) { - this.oldWidth = parseFloat(widthAttr); - } else { - throw "Missing attribute in element " + this.element; - } - var heightAttr = this.element.getAttributeNS(null, "height"); - if(heightAttr) { - this.oldHeight = parseFloat(heightAttr); - } else { - throw "Missing attribute in element " + this.element; - } - - } else if(ORYX.Editor.checkClassType(this.element, SVGCircleElement)) { - this.type = "Circle"; - - var cx = undefined; - var cy = undefined; - //var r = undefined; - - var cxAttr = this.element.getAttributeNS(null, "cx"); - if(cxAttr) { - cx = parseFloat(cxAttr); - } else { - throw "Missing attribute in element " + this.element; - } - var cyAttr = this.element.getAttributeNS(null, "cy"); - if(cyAttr) { - cy = parseFloat(cyAttr); - } else { - throw "Missing attribute in element " + this.element; - } - var rAttr = this.element.getAttributeNS(null, "r"); - if(rAttr) { - //r = parseFloat(rAttr); - this.radiusX = parseFloat(rAttr); - } else { - throw "Missing attribute in element " + this.element; - } - this.oldX = cx - this.radiusX; - this.oldY = cy - this.radiusX; - this.oldWidth = 2*this.radiusX; - this.oldHeight = 2*this.radiusX; - - } else if(ORYX.Editor.checkClassType(this.element, SVGEllipseElement)) { - this.type = "Ellipse"; - - var cx = undefined; - var cy = undefined; - //var rx = undefined; - //var ry = undefined; - var cxAttr = this.element.getAttributeNS(null, "cx"); - if(cxAttr) { - cx = parseFloat(cxAttr); - } else { - throw "Missing attribute in element " + this.element; - } - var cyAttr = this.element.getAttributeNS(null, "cy"); - if(cyAttr) { - cy = parseFloat(cyAttr); - } else { - throw "Missing attribute in element " + this.element; - } - var rxAttr = this.element.getAttributeNS(null, "rx"); - if(rxAttr) { - this.radiusX = parseFloat(rxAttr); - } else { - throw "Missing attribute in element " + this.element; - } - var ryAttr = this.element.getAttributeNS(null, "ry"); - if(ryAttr) { - this.radiusY = parseFloat(ryAttr); - } else { - throw "Missing attribute in element " + this.element; - } - this.oldX = cx - this.radiusX; - this.oldY = cy - this.radiusY; - this.oldWidth = 2*this.radiusX; - this.oldHeight = 2*this.radiusY; - - } else if(ORYX.Editor.checkClassType(this.element, SVGLineElement)) { - this.type = "Line"; - - var x1 = undefined; - var y1 = undefined; - var x2 = undefined; - var y2 = undefined; - var x1Attr = this.element.getAttributeNS(null, "x1"); - if(x1Attr) { - x1 = parseFloat(x1Attr); - } else { - throw "Missing attribute in element " + this.element; - } - var y1Attr = this.element.getAttributeNS(null, "y1"); - if(y1Attr) { - y1 = parseFloat(y1Attr); - } else { - throw "Missing attribute in element " + this.element; - } - var x2Attr = this.element.getAttributeNS(null, "x2"); - if(x2Attr) { - x2 = parseFloat(x2Attr); - } else { - throw "Missing attribute in element " + this.element; - } - var y2Attr = this.element.getAttributeNS(null, "y2"); - if(y2Attr) { - y2 = parseFloat(y2Attr); - } else { - throw "Missing attribute in element " + this.element; - } - this.oldX = Math.min(x1,x2); - this.oldY = Math.min(y1,y2); - this.oldWidth = Math.abs(x1-x2); - this.oldHeight = Math.abs(y1-y2); - - } else if(ORYX.Editor.checkClassType(this.element, SVGPolylineElement) || ORYX.Editor.checkClassType(this.element, SVGPolygonElement)) { - this.type = "Polyline"; - - var pointsArray = []; - if (this.element.points&&this.element.points.numberOfItems){ - for(var i=0, size=this.element.points.numberOfItems; i 1) { - var minX = parseFloat(pointsArray[0]); - var minY = parseFloat(pointsArray[1]); - var maxX = parseFloat(pointsArray[0]); - var maxY = parseFloat(pointsArray[1]); - - for(var i = 0; i < pointsArray.length; i++) { - minX = Math.min(minX, parseFloat(pointsArray[i])); - maxX = Math.max(maxX, parseFloat(pointsArray[i])); - i++; - minY = Math.min(minY, parseFloat(pointsArray[i])); - maxY = Math.max(maxY, parseFloat(pointsArray[i])); - } - - this.oldX = minX; - this.oldY = minY; - this.oldWidth = maxX-minX; - this.oldHeight = maxY-minY; - } else { - throw "Missing attribute in element " + this.element; - } - - } else if(ORYX.Editor.checkClassType(this.element, SVGPathElement)) { - this.type = "Path"; - - this.editPathParser = new PathParser(); - this.editPathHandler = new ORYX.Core.SVG.EditPathHandler(); - this.editPathParser.setHandler(this.editPathHandler); - - var parser = new PathParser(); - var handler = new ORYX.Core.SVG.MinMaxPathHandler(); - parser.setHandler(handler); - parser.parsePath(this.element); - - this.oldX = handler.minX; - this.oldY = handler.minY; - this.oldWidth = handler.maxX - handler.minX; - this.oldHeight = handler.maxY - handler.minY; - - delete parser; - delete handler; - } else { - throw "Element is not a shape."; - } - - /** initialize attributes of oryx namespace */ - //resize - var resizeAttr = this.element.getAttributeNS(NAMESPACE_ORYX, "resize"); - if(resizeAttr) { - resizeAttr = resizeAttr.toLowerCase(); - if(resizeAttr.match(/horizontal/)) { - this.isHorizontallyResizable = true; - } else { - this.isHorizontallyResizable = false; - } - if(resizeAttr.match(/vertical/)) { - this.isVerticallyResizable = true; - } else { - this.isVerticallyResizable = false; - } - } else { - this.isHorizontallyResizable = false; - this.isVerticallyResizable = false; - } - - //anchors - var anchorAttr = this.element.getAttributeNS(NAMESPACE_ORYX, "anchors"); - if(anchorAttr) { - anchorAttr = anchorAttr.replace("/,/g", " "); - var anchors = anchorAttr.split(" ").without(""); - - for(var i = 0; i < anchors.length; i++) { - switch(anchors[i].toLowerCase()) { - case "left": - this.anchorLeft = true; - break; - case "right": - this.anchorRight = true; - break; - case "top": - this.anchorTop = true; - break; - case "bottom": - this.anchorBottom = true; - break; - } - } - } - - //allowDockers and resizeMarkerMid - if(ORYX.Editor.checkClassType(this.element, SVGPathElement)) { - var allowDockersAttr = this.element.getAttributeNS(NAMESPACE_ORYX, "allowDockers"); - if(allowDockersAttr) { - if(allowDockersAttr.toLowerCase() === "no") { - this.allowDockers = false; - } else { - this.allowDockers = true; - } - } - - var resizeMarkerMidAttr = this.element.getAttributeNS(NAMESPACE_ORYX, "resizeMarker-mid"); - if(resizeMarkerMidAttr) { - if(resizeMarkerMidAttr.toLowerCase() === "yes") { - this.resizeMarkerMid = true; - } else { - this.resizeMarkerMid = false; - } - } - } - - this.x = this.oldX; - this.y = this.oldY; - this.width = this.oldWidth; - this.height = this.oldHeight; - }, - - /** - * Writes the changed values into the SVG element. - */ - update: function() { - - if(this.x !== this.oldX || this.y !== this.oldY || this.width !== this.oldWidth || this.height !== this.oldHeight) { - switch(this.type) { - case "Rect": - if(this.x !== this.oldX) this.element.setAttributeNS(null, "x", this.x); - if(this.y !== this.oldY) this.element.setAttributeNS(null, "y", this.y); - if(this.width !== this.oldWidth) this.element.setAttributeNS(null, "width", this.width); - if(this.height !== this.oldHeight) this.element.setAttributeNS(null, "height", this.height); - break; - case "Circle": - //calculate the radius - //var r; -// if(this.width/this.oldWidth <= this.height/this.oldHeight) { -// this.radiusX = ((this.width > this.height) ? this.width : this.height)/2.0; -// } else { - this.radiusX = ((this.width < this.height) ? this.width : this.height)/2.0; - //} - - this.element.setAttributeNS(null, "cx", this.x + this.width/2.0); - this.element.setAttributeNS(null, "cy", this.y + this.height/2.0); - this.element.setAttributeNS(null, "r", this.radiusX); - break; - case "Ellipse": - this.radiusX = this.width/2; - this.radiusY = this.height/2; - - this.element.setAttributeNS(null, "cx", this.x + this.radiusX); - this.element.setAttributeNS(null, "cy", this.y + this.radiusY); - this.element.setAttributeNS(null, "rx", this.radiusX); - this.element.setAttributeNS(null, "ry", this.radiusY); - break; - case "Line": - if(this.x !== this.oldX) - this.element.setAttributeNS(null, "x1", this.x); - - if(this.y !== this.oldY) - this.element.setAttributeNS(null, "y1", this.y); - - if(this.x !== this.oldX || this.width !== this.oldWidth) - this.element.setAttributeNS(null, "x2", this.x + this.width); - - if(this.y !== this.oldY || this.height !== this.oldHeight) - this.element.setAttributeNS(null, "y2", this.y + this.height); - break; - case "Polyline": - var points = this.element.getAttributeNS(null, "points"); - if(points) { - points = points.replace(/,/g, " ").split(" ").without(""); - - if(points && points.length && points.length > 1) { - - //TODO what if oldWidth == 0? - var widthDelta = (this.oldWidth === 0) ? 0 : this.width / this.oldWidth; - var heightDelta = (this.oldHeight === 0) ? 0 : this.height / this.oldHeight; - - var updatedPoints = ""; - for(var i = 0; i < points.length; i++) { - var x = (parseFloat(points[i])-this.oldX)*widthDelta + this.x; - i++; - var y = (parseFloat(points[i])-this.oldY)*heightDelta + this.y; - updatedPoints += x + " " + y + " "; - } - this.element.setAttributeNS(null, "points", updatedPoints); - } else { - //TODO error - } - } else { - //TODO error - } - break; - case "Path": - //calculate scaling delta - //TODO what if oldWidth == 0? - var widthDelta = (this.oldWidth === 0) ? 0 : this.width / this.oldWidth; - var heightDelta = (this.oldHeight === 0) ? 0 : this.height / this.oldHeight; - - //use path parser to edit each point of the path - this.editPathHandler.init(this.x, this.y, this.oldX, this.oldY, widthDelta, heightDelta); - this.editPathParser.parsePath(this.element); - - //change d attribute of path - this.element.setAttributeNS(null, "d", this.editPathHandler.d); - break; - } - - this.oldX = this.x; - this.oldY = this.y; - this.oldWidth = this.width; - this.oldHeight = this.height; - } - - // Remove cached variables - delete this.visible; - delete this.handler; - }, - - isPointIncluded: function(pointX, pointY) { - - // Check if there are the right arguments and if the node is visible - if(!pointX || !pointY || !this.isVisible()) { - return false; - } - - switch(this.type) { - case "Rect": - return (pointX >= this.x && pointX <= this.x + this.width && - pointY >= this.y && pointY <= this.y+this.height); - break; - case "Circle": - //calculate the radius -// var r; -// if(this.width/this.oldWidth <= this.height/this.oldHeight) { -// r = ((this.width > this.height) ? this.width : this.height)/2.0; -// } else { -// r = ((this.width < this.height) ? this.width : this.height)/2.0; -// } - return ORYX.Core.Math.isPointInEllipse(pointX, pointY, this.x + this.width/2.0, this.y + this.height/2.0, this.radiusX, this.radiusX); - break; - case "Ellipse": - return ORYX.Core.Math.isPointInEllipse(pointX, pointY, this.x + this.radiusX, this.y + this.radiusY, this.radiusX, this.radiusY); - break; - case "Line": - return ORYX.Core.Math.isPointInLine(pointX, pointY, this.x, this.y, this.x + this.width, this.y + this.height); - break; - case "Polyline": - var points = this.element.getAttributeNS(null, "points"); - - if(points) { - points = points.replace(/,/g , " ").split(" ").without(""); - - points = points.collect(function(n) { - return parseFloat(n); - }); - - return ORYX.Core.Math.isPointInPolygone(pointX, pointY, points); - } else { - return false; - } - break; - case "Path": - - // Cache Path handler - if (!this.handler) { - var parser = new PathParser(); - this.handler = new ORYX.Core.SVG.PointsPathHandler(); - parser.setHandler(this.handler); - parser.parsePath(this.element); - } - - return ORYX.Core.Math.isPointInPolygone(pointX, pointY, this.handler.points); - - break; - default: - return false; - } - }, - - /** - * Returns true if the element is visible - * @param {SVGElement} elem - * @return boolean - */ - isVisible: function(elem) { - - if (this.visible !== undefined){ - return this.visible; - } - - if (!elem) { - elem = this.element; - } - - var hasOwnerSVG = false; - try { - hasOwnerSVG = !!elem.ownerSVGElement; - } catch(e){} - - // Is SVG context - if ( hasOwnerSVG ) { - // IF G-Element - if (ORYX.Editor.checkClassType(elem, SVGGElement)) { - if (elem.className && elem.className.baseVal == "me") { - this.visible = true; - return this.visible; - } - } - - // Check if fill or stroke is set - var fill = elem.getAttributeNS(null, "fill"); - var stroke = elem.getAttributeNS(null, "stroke"); - if (fill && fill == "none" && stroke && stroke == "none") { - this.visible = false; - } else { - // Check if displayed - var attr = elem.getAttributeNS(null, "display"); - if(!attr) - this.visible = this.isVisible(elem.parentNode); - else if (attr == "none") - this.visible = false; - else - this.visible = true; - } - } else { - this.visible = true; - } - - return this.visible; - }, - - toString: function() { return (this.element) ? "SVGShape " + this.element.id : "SVGShape " + this.element;} - });/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.SVG) {ORYX.Core.SVG = {};} - -/** - * @classDescription Class for adding text to a shape. - * - */ -ORYX.Core.SVG.Label = Clazz.extend({ - - _characterSets:[ - "%W", - "@", - "m", - "wDGMOQ√ñ#+=<>~^", - "ABCHKNRSUVXZ√ú√Ñ&", - "bdghnopqux√∂√ºETY1234567890√ü_¬ß${}*¬¥`¬µ‚Ǩ", - "aeksvyz√§FLP?¬∞¬≤¬≥", - "c-", - "rtJ\"/()[]:;!|\\", - "fjI., ", - "'", - "il" - ], - _characterSetValues:[15,14,13,11,10,9,8,7,6,5,4,3], - - /** - * Constructor - * @param options {Object} : - * textElement - * - */ - construct: function(options) { - arguments.callee.$.construct.apply(this, arguments); - - if(!options.textElement) { - throw "Label: No parameter textElement." - } else if (!ORYX.Editor.checkClassType( options.textElement, SVGTextElement ) ) { - throw "Label: Parameter textElement is not an SVGTextElement." - } - - this.invisibleRenderPoint = -5000; - - this.node = options.textElement; - - - this.node.setAttributeNS(null, 'stroke-width', '0pt'); - this.node.setAttributeNS(null, 'letter-spacing', '0px'); - - this.shapeId = options.shapeId; - - this.id; - - this.fitToElemId; - - this.edgePosition; - - this.x; - this.y; - this.oldX; - this.oldY; - - this.isVisible = true; - - this._text; - this._verticalAlign; - this._horizontalAlign; - this._rotate; - this._rotationPoint; - - //this.anchors = []; - this.anchorLeft; - this.anchorRight; - this.anchorTop; - this.anchorBottom; - - this._isChanged = true; - - //if the text element already has an id, don't change it. - var _id = this.node.getAttributeNS(null, 'id'); - if(_id) { - this.id = _id; - } - - //initialization - - //set referenced element the text is fit to - this.fitToElemId = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'fittoelem'); - if(this.fitToElemId) - this.fitToElemId = this.shapeId + this.fitToElemId; - - //set alignment - var alignValues = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'align'); - if(alignValues) { - alignValues = alignValues.replace(/,/g, " "); - alignValues = alignValues.split(" "); - alignValues = alignValues.without(""); - - alignValues.each((function(alignValue) { - switch (alignValue) { - case 'top': - case 'middle': - case 'bottom': - if(!this._verticalAlign){this._originVerticalAlign = this._verticalAlign = alignValue;} - break; - case 'left': - case 'center': - case 'right': - if(!this._horizontalAlign){this._originHorizontalAlign = this._horizontalAlign = alignValue;} - break; - } - }).bind(this)); - } - - //set edge position (only in case the label belongs to an edge) - this.edgePosition = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'edgePosition'); - if(this.edgePosition) { - this.originEdgePosition = this.edgePosition = this.edgePosition.toLowerCase(); - } - - - //get offset top - this.offsetTop = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'offsetTop') || ORYX.CONFIG.OFFSET_EDGE_LABEL_TOP; - if(this.offsetTop) { - this.offsetTop = parseInt(this.offsetTop); - } - - //get offset top - this.offsetBottom = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'offsetBottom') || ORYX.CONFIG.OFFSET_EDGE_LABEL_BOTTOM; - if(this.offsetBottom) { - this.offsetBottom = parseInt(this.offsetBottom); - } - - - //set rotation - var rotateValue = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'rotate'); - if(rotateValue) { - try { - this._rotate = parseFloat(rotateValue); - } catch (e) { - this._rotate = 0; - } - } else { - this._rotate = 0; - } - - //anchors - var anchorAttr = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "anchors"); - if(anchorAttr) { - anchorAttr = anchorAttr.replace("/,/g", " "); - var anchors = anchorAttr.split(" ").without(""); - - for(var i = 0; i < anchors.length; i++) { - switch(anchors[i].toLowerCase()) { - case "left": - this.originAnchorLeft = this.anchorLeft = true; - break; - case "right": - this.originAnchorRight = this.anchorRight = true; - break; - case "top": - this.originAnchorTop = this.anchorTop = true; - break; - case "bottom": - this.originAnchorBottom = this.anchorBottom = true; - break; - } - } - } - - //if no alignment defined, set default alignment - if(!this._verticalAlign) { this._verticalAlign = 'bottom'; } - if(!this._horizontalAlign) { this._horizontalAlign = 'left'; } - - var xValue = this.node.getAttributeNS(null, 'x'); - if(xValue) { - this.oldX = this.x = parseFloat(xValue); - } else { - //TODO error - } - - var yValue = this.node.getAttributeNS(null, 'y'); - if(yValue) { - this.oldY = this.y = parseFloat(yValue); - } else { - //TODO error - } - - //set initial text - this.text(this.node.textContent); - }, - - /** - * Reset the anchor position to the original value - * which was specified in the stencil set - * - */ - resetAnchorPosition: function(){ - this.anchorLeft = this.originAnchorLeft || false; - this.anchorRight = this.originAnchorRight || false; - this.anchorTop = this.originAnchorTop || false; - this.anchorBottom = this.originAnchorBottom || false; - }, - - isOriginAnchorLeft: function(){ return this.originAnchorLeft || false; }, - isOriginAnchorRight: function(){ return this.originAnchorRight || false; }, - isOriginAnchorTop: function(){ return this.originAnchorTop || false; }, - isOriginAnchorBottom: function(){ return this.originAnchorBottom || false; }, - - - isAnchorLeft: function(){ return this.anchorLeft || false; }, - isAnchorRight: function(){ return this.anchorRight || false; }, - isAnchorTop: function(){ return this.anchorTop || false; }, - isAnchorBottom: function(){ return this.anchorBottom || false; }, - - /** - * Returns the x coordinate - * @return {number} - */ - getX: function(){ - try { - var x = this.node.x.baseVal.getItem(0).value; - switch(this.horizontalAlign()){ - case "left": return x; - case "center": return x - (this.getWidth()/2); - case "right": return x - this.getWidth(); - } - return this.node.getBBox().x; - } catch(e){ - return this.x; - } - }, - - setX: function(x){ - if (this.position) - this.position.x = x; - else - this.setOriginX(x); - }, - - - /** - * Returns the y coordinate - * @return {number} - */ - getY: function(){ - try { - return this.node.getBBox().y; - } catch(e){ - return this.y; - } - }, - - setY: function(y){ - if (this.position) - this.position.y = y; - else - this.setOriginY(y); - }, - - setOriginX: function(x){ - this.x = x; - }, - - setOriginY: function(y){ - this.y = y; - }, - - - /** - * Returns the width of the label - * @return {number} - */ - getWidth: function(){ - try { - try { - var width, cn = this.node.childNodes; - if (cn.length == 0) { - width = this.node.getBBox().width; - } else { - for (var i = 0, size = cn.length; i < size; ++i) { - var w = cn[i].getComputedTextLength(); - if ("undefined" == typeof width || width < w) { - width = w; - } - } - } - return width+(width%2==0?0:1); - } catch (ee) { - return this.node.getBBox().width; - } - } catch(e){ - return 0; - } - }, - - getOriginUpperLeft: function(){ - var x = this.x, y = this.y; - switch (this._horizontalAlign){ - case 'center' : - x -= this.getWidth()/2; - break; - case 'right' : - x -= this.getWidth(); - break; - } - switch (this._verticalAlign){ - case 'middle' : - y -= this.getHeight()/2; - break; - case 'bottom' : - y -= this.getHeight(); - break; - } - return {x:x, y:y}; - }, - - /** - * Returns the height of the label - * @return {number} - */ - getHeight: function(){ - try { - return this.node.getBBox().height; - } catch(e){ - return 0; - } - }, - - /** - * Returns the relative center position of the label - * to its parent shape. - * @return {Object} - */ - getCenter: function(){ - var up = {x: this.getX(), y: this.getY()}; - up.x += this.getWidth()/2; - up.y += this.getHeight()/2; - return up; - }, - - /** - * Sets the position of a label relative to the parent. - * @param {Object} position - */ - setPosition: function(position){ - if (!position || position.x === undefined || position.y === undefined) { - delete this.position; - } else { - this.position = position; - } - - if (this.position){ - delete this._referencePoint; - delete this.edgePosition; - } - - this._isChanged = true; - this.update(); - }, - - /** - * Return the position - */ - getPosition: function(){ - return this.position; - }, - - setReferencePoint: function(ref){ - if (ref) { - this._referencePoint = ref; - } else { - delete this._referencePoint; - } - if (this._referencePoint){ - delete this.position; - } - }, - - getReferencePoint: function(){ - return this._referencePoint || undefined; - }, - - changed: function() { - this._isChanged = true; - }, - - /** - * Register a callback which will be called if the label - * was rendered. - * @param {Object} fn - */ - registerOnChange: function(fn){ - if (!this.changeCallbacks){ - this.changeCallbacks = []; - } - if (fn instanceof Function && !this.changeCallbacks.include(fn)){ - this.changeCallbacks.push(fn); - } - }, - - /** - * Unregister the callback for changes. - * @param {Object} fn - */ - unregisterOnChange: function(fn){ - if (this.changeCallbacks && fn instanceof Function && this.changeCallbacks.include(fn)){ - this.changeCallbacks = this.changeCallbacks.without(fn); - } - }, - - /** - * Returns TRUE if the labe is currently in - * the update mechanism. - * @return {Boolean} - */ - isUpdating: function(){ - return !!this._isUpdating; - }, - - - getOriginEdgePosition: function(){ - return this.originEdgePosition; - }, - - /** - * Returns the edgeposition. - * - * @return {String} "starttop", "startmiddle", "startbottom", - * "midtop", "midbottom", "endtop", "endbottom" or null - */ - getEdgePosition: function(){ - return this.edgePosition || null; - }, - - /** - * Set the edge position, must be one of the valid - * edge positions (see getEdgePosition). - * Removes the reference point and the absolute position as well. - * - * @param {Object} position - */ - setEdgePosition: function(position){ - if (["starttop", "startmiddle", "startbottom", - "midtop", "midbottom", "endtop", "endbottom"].include(position)){ - this.edgePosition = position; - delete this.position; - delete this._referencePoint; - } else { - delete this.edgePosition; - } - }, - - /** - * Update the SVG text element. - */ - update: function(force) { - - var x = this.x, y = this.y; - if (this.position){ - x = this.position.x; - y = this.position.y; - } - x = Math.floor(x); y = Math.floor(y); - - if(this._isChanged || x !== this.oldX || y !== this.oldY || force === true) { - if (this.isVisible) { - this._isChanged = false; - this._isUpdating = true; - - this.node.setAttributeNS(null, 'x', x); - this.node.setAttributeNS(null, 'y', y); - this.node.removeAttributeNS(null, "fill-opacity"); - - //this.node.setAttributeNS(null, 'font-size', this._fontSize); - //this.node.setAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'align', this._horizontalAlign + " " + this._verticalAlign); - - this.oldX = x; - this.oldY = y; - - //set rotation - if (!this.position && !this.getReferencePoint()) { - if (this._rotate !== undefined) { - if (this._rotationPoint) - this.node.setAttributeNS(null, 'transform', 'rotate(' + this._rotate + ' ' + Math.floor(this._rotationPoint.x) + ' ' + Math.floor(this._rotationPoint.y) + ')'); - else - this.node.setAttributeNS(null, 'transform', 'rotate(' + this._rotate + ' ' + Math.floor(x) + ' ' + Math.floor(y) + ')'); - } - } else { - this.node.removeAttributeNS(null, 'transform'); - } - - var textLines = this._text.split("\n"); - while (textLines.last() == "") - textLines.pop(); - - - if (this.node.ownerDocument) { - // Only reset the tspans if the text - // has changed or has to be wrapped - if (this.fitToElemId || this._textHasChanged){ - this.node.textContent = ""; // Remove content - textLines.each((function(textLine, index){ - var tspan = this.node.ownerDocument.createElementNS(ORYX.CONFIG.NAMESPACE_SVG, 'tspan'); - tspan.textContent = textLine.trim(); - if (this.fitToElemId) { - tspan.setAttributeNS(null, 'x', this.invisibleRenderPoint); - tspan.setAttributeNS(null, 'y', this.invisibleRenderPoint); - } - - /* - * Chrome's getBBox() method fails, if a text node contains an empty tspan element. - * So, we add a whitespace to such a tspan element. - */ - if(tspan.textContent === "") { - tspan.textContent = " "; - } - - //append tspan to text node - this.node.appendChild(tspan); - }).bind(this)); - delete this._textHasChanged; - delete this.indices; - } - - //Work around for Mozilla bug 293581 - if (this.isVisible && this.fitToElemId) { - this.node.setAttributeNS(null, 'visibility', 'hidden'); - } - - if (this.fitToElemId) { - window.setTimeout(this._checkFittingToReferencedElem.bind(this), 0); - //this._checkFittingToReferencedElem(); - } else { - window.setTimeout(this._positionText.bind(this), 0); - //this._positionText(); - } - } - } else { - this.node.textContent = ""; - //this.node.setAttributeNS(null, "fill-opacity", "0.2"); - } - } - }, - - _checkFittingToReferencedElem: function() { - try { - var tspans = $A(this.node.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'tspan')); - - //only do this in firefox 3. all other browsers do not support word wrapping!!!!! - //if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent) && new Number(RegExp.$1)>=3) { - var newtspans = []; - - var refNode = this.node.ownerDocument.getElementById(this.fitToElemId); - - if (refNode) { - var refbb = refNode.getBBox(); - - var fontSize = this.getFontSize(); - - for (var j = 0; j < tspans.length; j++) { - var tspan = tspans[j]; - - var textLength = this._getRenderedTextLength(tspan, undefined, undefined, fontSize); - - var refBoxLength = (this._rotate != 0 - && this._rotate % 180 != 0 - && this._rotate % 90 == 0 ? - refbb.height : refbb.width); - - if (textLength > refBoxLength) { - - var startIndex = 0; - var lastSeperatorIndex = 0; - - var numOfChars = this.getTrimmedTextLength(tspan.textContent); - for (var i = 0; i < numOfChars; i++) { - var sslength = this._getRenderedTextLength(tspan, startIndex, i-startIndex, fontSize); - - if (sslength > refBoxLength - 2) { - var newtspan = this.node.ownerDocument.createElementNS(ORYX.CONFIG.NAMESPACE_SVG, 'tspan'); - if (lastSeperatorIndex <= startIndex) { - lastSeperatorIndex = (i == 0) ? i : i-1; - newtspan.textContent = tspan.textContent.slice(startIndex, lastSeperatorIndex).trim(); - //lastSeperatorIndex = i; - } - else { - newtspan.textContent = tspan.textContent.slice(startIndex, ++lastSeperatorIndex).trim(); - } - - newtspan.setAttributeNS(null, 'x', this.invisibleRenderPoint); - newtspan.setAttributeNS(null, 'y', this.invisibleRenderPoint); - - //insert tspan to text node - //this.node.insertBefore(newtspan, tspan); - newtspans.push(newtspan); - - startIndex = lastSeperatorIndex; - } - else { - var curChar = tspan.textContent.charAt(i); - if (curChar == ' ' || - curChar == '-' || - curChar == "." || - curChar == "," || - curChar == ";" || - curChar == ":") { - lastSeperatorIndex = i; - } - } - } - - tspan.textContent = tspan.textContent.slice(startIndex).trim(); - } - - newtspans.push(tspan); - } - - while (this.node.hasChildNodes()) - this.node.removeChild(this.node.childNodes[0]); - - while (newtspans.length > 0) { - this.node.appendChild(newtspans.shift()); - } - } - //} - } catch (e) { - ORYX.Log.fatal("Error " + e); - } - window.setTimeout(this._positionText.bind(this), 0); - //this._positionText(); - }, - - /** - * This is a work around method for Mozilla bug 293581. - * Before the method getComputedTextLength works, the text has to be rendered. - */ - _positionText: function() { - try { - - var tspans = this.node.childNodes; - - var fontSize = this.getFontSize(this.node); - - var invalidTSpans = []; - - var x = this.x, y = this.y; - if (this.position){ - x = this.position.x; - y = this.position.y; - } - x = Math.floor(x); y = Math.floor(y); - - var i = 0, indic = []; // Cache indices if the _positionText is called again, before update is called - var is =(this.indices || $R(0,tspans.length-1).toArray()); - var length = is.length; - is.each((function(index){ - if ("undefined" == typeof index){ - return; - } - - var tspan = tspans[i++]; - - if(tspan.textContent.trim() === "") { - invalidTSpans.push(tspan); - } else { - //set vertical position - var dy = 0; - switch (this._verticalAlign) { - case 'bottom': - dy = -(length - index - 1) * (fontSize); - break; - case 'middle': - dy = -(length / 2.0 - index - 1) * (fontSize); - dy -= ORYX.CONFIG.LABEL_LINE_DISTANCE / 2; - break; - case 'top': - dy = index * (fontSize); - dy += fontSize; - break; - } - tspan.setAttributeNS(null, 'dy', Math.floor(dy)); - - tspan.setAttributeNS(null, 'x', x); - tspan.setAttributeNS(null, 'y', y); - indic.push(index); - } - - }).bind(this)); - - indic.length = tspans.length; - this.indices = this.indices || indic; - - invalidTSpans.each(function(tspan) { - this.node.removeChild(tspan) - }.bind(this)); - - //set horizontal alignment - switch (this._horizontalAlign) { - case 'left': - this.node.setAttributeNS(null, 'text-anchor', 'start'); - break; - case 'center': - this.node.setAttributeNS(null, 'text-anchor', 'middle'); - break; - case 'right': - this.node.setAttributeNS(null, 'text-anchor', 'end'); - break; - } - - } catch(e) { - //console.log(e); - this._isChanged = true; - } - - - if(this.isVisible) { - this.node.removeAttributeNS(null, 'visibility'); - } - - - // Finished - delete this._isUpdating; - - // Raise change event - (this.changeCallbacks||[]).each(function(fn){ - fn.apply(fn); - }) - - }, - - /** - * Returns the text length of the text content of an SVG tspan element. - * For all browsers but Firefox 3 the values are estimated. - * @param {TSpanSVGElement} tspan - * @param {int} startIndex Optional, for sub strings - * @param {int} endIndex Optional, for sub strings - */ - _getRenderedTextLength: function(tspan, startIndex, endIndex, fontSize) { - //if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent) && new Number(RegExp.$1) >= 3) { - if(startIndex === undefined) { -//test string: abcdefghijklmnopqrstuvwxyz√∂√§√º,.-#+ 1234567890√üABCDEFGHIJKLMNOPQRSTUVWXYZ;:_'*√ú√Ñ√ñ!"¬ß$%&/()=?[]{}|<>'~¬¥`\^¬∞¬µ@‚Ǩ¬≤¬≥ -// for(var i = 0; i < tspan.textContent.length; i++) { -// console.log(tspan.textContent.charAt(i), tspan.getSubStringLength(i,1), this._estimateCharacterWidth(tspan.textContent.charAt(i))*(fontSize/14.0)); -// } - return tspan.getComputedTextLength(); - } else { - return tspan.getSubStringLength(startIndex, endIndex); - } - /*} else { - if(startIndex === undefined) { - return this._estimateTextWidth(tspan.textContent, fontSize); - } else { - return this._estimateTextWidth(tspan.textContent.substr(startIndex, endIndex).trim(), fontSize); - } - }*/ - }, - - /** - * Estimates the text width for a string. - * Used for word wrapping in all browser but FF3. - * @param {Object} text - */ - _estimateTextWidth: function(text, fontSize) { - var sum = 0.0; - for(var i = 0; i < text.length; i++) { - sum += this._estimateCharacterWidth(text.charAt(i)); - } - - return sum*(fontSize/14.0); - }, - - /** - * Estimates the width of a single character for font size 14. - * Used for word wrapping in all browser but FF3. - * @param {Object} character - */ - _estimateCharacterWidth: function(character) { - for(var i = 0; i < this._characterSets.length; i++) { - if(this._characterSets[i].indexOf(character) >= 0) { - return this._characterSetValues[i]; - } - } - return 9; - }, - - getReferencedElementWidth: function() { - var refNode = this.node.ownerDocument.getElementById(this.fitToElemId); - - if(refNode) { - var refbb = refNode.getBBox(); - - if(refbb) { - return (this._rotate != 0 - && this._rotate % 180 != 0 - && this._rotate % 90 == 0 ? - refbb.height : refbb.width); - } - } - - return undefined; - }, - - /** - * If no parameter is provided, this method returns the current text. - * @param text {String} Optional. Replaces the old text with this one. - */ - text: function() { - switch (arguments.length) { - case 0: - return this._text - break; - - case 1: - var oldText = this._text; - if(arguments[0]) { - // Filter out multiple spaces to fix issue in chrome for line-wrapping - this._text = arguments[0].toString(); - if(this._text != null && this._text != undefined) { - this._text = this._text.replace(/ {2,}/g,' '); - } - } else { - this._text = ""; - } - if(oldText !== this._text) { - this._isChanged = true; - this._textHasChanged = true; - } - break; - - default: - //TODO error - break; - } - }, - - getOriginVerticalAlign: function(){ - return this._originVerticalAlign; - }, - - verticalAlign: function() { - switch(arguments.length) { - case 0: - return this._verticalAlign; - case 1: - if(['top', 'middle', 'bottom'].member(arguments[0])) { - var oldValue = this._verticalAlign; - this._verticalAlign = arguments[0]; - if(this._verticalAlign !== oldValue) { - this._isChanged = true; - } - } - break; - - default: - //TODO error - break; - } - }, - - getOriginHorizontalAlign: function(){ - return this._originHorizontalAlign; - }, - - horizontalAlign: function() { - switch(arguments.length) { - case 0: - return this._horizontalAlign; - case 1: - if(['left', 'center', 'right'].member(arguments[0])) { - var oldValue = this._horizontalAlign; - this._horizontalAlign = arguments[0]; - if(this._horizontalAlign !== oldValue) { - this._isChanged = true; - } - } - break; - - default: - //TODO error - break; - } - }, - - rotate: function() { - switch(arguments.length) { - case 0: - return this._rotate; - case 1: - if (this._rotate != arguments[0]) { - this._rotate = arguments[0]; - this._rotationPoint = undefined; - this._isChanged = true; - } - case 2: - if(this._rotate != arguments[0] || - !this._rotationPoint || - this._rotationPoint.x != arguments[1].x || - this._rotationPoint.y != arguments[1].y) { - this._rotate = arguments[0]; - this._rotationPoint = arguments[1]; - this._isChanged = true; - } - - } - }, - - hide: function() { - if(this.isVisible) { - this.isVisible = false; - this._isChanged = true; - } - }, - - show: function() { - if(!this.isVisible) { - this.isVisible = true; - this._isChanged = true; - - // Since text is removed from the tspan when "hidden", mark - // the text as changed to get it redrawn - this._textHasChanged = true; - } - }, - - /** - * iterates parent nodes till it finds a SVG font-size - * attribute. - * @param {SVGElement} node - */ - getInheritedFontSize: function(node) { - if(!node || !node.getAttributeNS) - return; - - var attr = node.getAttributeNS(null, "font-size"); - if(attr) { - return parseFloat(attr); - } else if(!ORYX.Editor.checkClassType(node, SVGSVGElement)) { - return this.getInheritedFontSize(node.parentNode); - } - }, - - getFontSize: function(node) { - var tspans = this.node.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'tspan'); - - //trying to get an inherited font-size attribute - //NO CSS CONSIDERED! - var fontSize = this.getInheritedFontSize(this.node); - - if (!fontSize) { - //because this only works in firefox 3, all other browser use the default line height - if (tspans[0] && /Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent) && new Number(RegExp.$1) >= 3) { - fontSize = tspans[0].getExtentOfChar(0).height; - } - else { - fontSize = ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT; - } - - //handling of unsupported method in webkit - if (fontSize <= 0) { - fontSize = ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT; - } - } - - if(fontSize) - this.node.setAttribute("oryx:fontSize", fontSize); - - return fontSize; - }, - - /** - * Get trimmed text length for use with - * getExtentOfChar and getSubStringLength. - * @param {String} text - */ - getTrimmedTextLength: function(text) { - text = text.strip().gsub(' ', ' '); - - var oldLength; - do { - oldLength = text.length; - text = text.gsub(' ', ' '); - } while (oldLength > text.length); - - return text.length; - }, - - /** - * Returns the offset from - * edge to the label which is - * positioned under the edge - * @return {int} - */ - getOffsetBottom: function(){ - return this.offsetBottom; - }, - - - /** - * Returns the offset from - * edge to the label which is - * positioned over the edge - * @return {int} - */ - getOffsetTop: function(){ - return this.offsetTop; - }, - - /** - * - * @param {Object} obj - */ - deserialize: function(obj, shape){ - if (obj && "undefined" != typeof obj.x && "undefined" != typeof obj.y){ - this.setPosition({x:obj.x, y:obj.y}); - - if ("undefined" != typeof obj.distance){ - var from = shape.dockers[obj.from]; - var to = shape.dockers[obj.to]; - if (from && to){ - this.setReferencePoint({ - dirty : true, - distance : obj.distance, - intersection : {x: obj.x, y: obj.y}, - orientation : obj.orientation, - segment: { - from: from, - fromIndex: obj.from, - fromPosition: from.bounds.center(), - to: to, - toIndex: obj.to, - toPosition: to.bounds.center() - } - }) - } - } - - if (obj.left) this.anchorLeft = true; - if (obj.right) this.anchorRight = true; - if (obj.top) this.anchorTop = true; - if (obj.bottom) this.anchorBottom = true; - if (obj.valign) this.verticalAlign(obj.valign); - if (obj.align) this.horizontalAlign(obj.align); - - } else if (obj && "undefined" != typeof obj.edge){ - this.setEdgePosition(obj.edge); - } - }, - - /** - * - * @return {Object} - */ - serialize: function(){ - - // On edge position - if (this.getEdgePosition()){ - if (this.getOriginEdgePosition() !== this.getEdgePosition()){ - return {edge: this.getEdgePosition()}; - } else { - return null; - } - } - - // On self defined position - if (this.position){ - var pos = {x: this.position.x, y: this.position.y}; - if (this.isAnchorLeft() && this.isAnchorLeft() !== this.isOriginAnchorLeft()){ - pos.left = true; - } - if (this.isAnchorRight() && this.isAnchorRight() !== this.isOriginAnchorRight()){ - pos.right = true; - } - if (this.isAnchorTop() && this.isAnchorTop() !== this.isOriginAnchorTop()){ - pos.top = true; - } - if (this.isAnchorBottom() && this.isAnchorBottom() !== this.isOriginAnchorBottom()){ - pos.bottom = true; - } - - if (this.getOriginVerticalAlign() !== this.verticalAlign()){ - pos.valign = this.verticalAlign(); - } - if (this.getOriginHorizontalAlign() !== this.horizontalAlign()){ - pos.align = this.horizontalAlign(); - } - - return pos; - } - - // On reference point which is interesting for edges - if (this.getReferencePoint()){ - var ref = this.getReferencePoint(); - return { - distance : ref.distance, - x : ref.intersection.x, - y : ref.intersection.y, - from : ref.segment.fromIndex, - to : ref.segment.toIndex, - orientation : ref.orientation, - valign : this.verticalAlign(), - align : this.horizontalAlign() - } - } - return null; - }, - - toString: function() { return "Label " + this.id } - });/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.Math) {ORYX.Core.Math = {};} - -/** - * Calculate the middle point between two given points - * @param {x:double, y:double} point1 - * @param {x:double, y:double} point2 - * @return the middle point - */ -ORYX.Core.Math.midPoint = function(point1, point2) { - return { - x: (point1.x + point2.x) / 2.0, - y: (point1.y + point2.y) / 2.0 - } -} - -/** - * Returns a TRUE if the point is over a line (defined by - * point1 and point 2). In Addition a threshold can be set, - * which defines the weight of those line. - * - * @param {int} pointX - Point X - * @param {int} pointY - Point Y - * @param {int} lPoint1X - Line first Point X - * @param {int} lPoint1Y - Line first Point Y - * @param {int} lPoint2X - Line second Point X - * @param {int} lPoint2Y - Line second Point y - * @param {int} offset {optional} - maximal distance to line - * @class ORYX.Core.Math.prototype - */ -ORYX.Core.Math.isPointInLine = function (pointX, pointY, lPoint1X, lPoint1Y, lPoint2X, lPoint2Y, offset) { - - offset = offset ? Math.abs(offset) : 1; - - // Check if the edge is vertical - if(Math.abs(lPoint1X-lPoint2X)<=offset && Math.abs(pointX-lPoint1X)<=offset && pointY-Math.max(lPoint1Y, lPoint2Y)<=offset && Math.min(lPoint1Y, lPoint2Y)-pointY<=offset) { - return true - } - - // Check if the edge is horizontal - if(Math.abs(lPoint1Y-lPoint2Y)<=offset && Math.abs(pointY-lPoint1Y)<=offset && pointX-Math.max(lPoint1X, lPoint2X)<=offset && Math.min(lPoint1X, lPoint2X)-pointX<=offset) { - return true - } - - if(pointX > Math.max(lPoint1X, lPoint2X) || pointX < Math.min(lPoint1X, lPoint2X)) { - return false - } - - if(pointY > Math.max(lPoint1Y, lPoint2Y) || pointY < Math.min(lPoint1Y, lPoint2Y)) { - return false - } - - var s = (lPoint1Y - lPoint2Y) / (lPoint1X - lPoint2X); - - return Math.abs(pointY - ((s * pointX) + lPoint1Y - s * lPoint1X)) < offset -} - -/** - * Get a boolean if the point is in the polygone - * - */ -ORYX.Core.Math.isPointInEllipse = function (pointX, pointY, cx, cy, rx, ry) { - - if(cx === undefined || cy === undefined || rx === undefined || ry === undefined) { - throw "ORYX.Core.Math.isPointInEllipse needs a ellipse with these properties: x, y, radiusX, radiusY" - } - - var tx = (pointX - cx) / rx; - var ty = (pointY - cy) / ry; - - return tx * tx + ty * ty < 1.0; -} - -/** - * Get a boolean if the point is in the polygone - * @param {int} pointX - * @param {int} pointY - * @param {[int]} Cornerpoints of the Polygone (x,y,x,y,...) - */ -ORYX.Core.Math.isPointInPolygone = function(pointX, pointY, polygone){ - - if (arguments.length < 3) { - throw "ORYX.Core.Math.isPointInPolygone needs two arguments" - } - - var lastIndex = polygone.length-1; - - if (polygone[0] !== polygone[lastIndex - 1] || polygone[1] !== polygone[lastIndex]) { - polygone.push(polygone[0]); - polygone.push(polygone[1]); - } - - var crossings = 0; - - var x1, y1, x2, y2, d; - - for (var i = 0; i < polygone.length - 3; ) { - x1=polygone[i]; - y1=polygone[++i]; - x2=polygone[++i]; - y2=polygone[i+1]; - d=(pointY - y1) * (x2 - x1) - (pointX - x1) * (y2 - y1); - - if ((y1 >= pointY) != (y2 >= pointY)) { - crossings += y2 - y1 >= 0 ? d >= 0 : d <= 0; - } - if (!d && Math.min(x1,x2) <= pointX && pointX <= Math.max(x1,x2) - && Math.min(y1,y2) <= pointY && pointY <= Math.max(y1,y2)) { - return true; - } - } - return (crossings%2)?true:false; -} - -/** - * Calculates the distance between a point and a line. It is also testable, if - * the distance orthogonal to the line, matches the segment of the line. - * - * @param {float} lineP1 - * The starting point of the line segment - * @param {float} lineP2 - * The end point of the line segment - * @param {Point} point - * The point to calculate the distance to. - * @param {boolean} toSegmentOnly - * Flag to signal if only the segment of the line shell be evaluated. - */ -ORYX.Core.Math.distancePointLinie = function( - lineP1, - lineP2, - point, - toSegmentOnly) { - - var intersectionPoint = - ORYX.Core.Math.getPointOfIntersectionPointLine(lineP1, - lineP2, - point, - toSegmentOnly); - - if(!intersectionPoint) { - return null; - } - - return ORYX.Core.Math.getDistancePointToPoint(point, intersectionPoint); -}; - -/** - * Calculates the distance between two points. - * - * @param {point} point1 - * @param {point} point2 - */ -ORYX.Core.Math.getDistancePointToPoint = function(point1, point2) { - return Math.sqrt(Math.pow(point1.x - point2.x, 2) + Math.pow(point1.y - point2.y, 2)); -}; - -/** - * Calculates the relative distance of a point which is between two other points. - * - * @param {point} between1 - * @param {point} between2 - * @param {point} point - */ -ORYX.Core.Math.getDistanceBetweenTwoPoints = function(between1, between2, point) { - return ORYX.Core.Math.getDistancePointToPoint(point, between1) / - ORYX.Core.Math.getDistancePointToPoint(between1, between2); -}; - - -/** - * Returns true, if the point is of the left hand - * side of the regarding the line. - * - * @param {point} lineP1 Line first point - * @param {point} lineP2 Line second point - * @param {point} point - */ -ORYX.Core.Math.pointIsLeftOfLine = function(lineP1, lineP2, point){ - - var vec1 = ORYX.Core.Math.getVector(lineP1, lineP2); - var vec2 = ORYX.Core.Math.getVector(lineP1, point); - // if the cross produkt is more than 0 - return ((vec1.x*vec2.y) - (vec2.x*vec1.y)) > 0 -}; - -/** - * Calculates the a point which is relatively between two other points. - * - * @param {point} point1 - * @param {point} point2 - * @param {number} relative Relative which is between 0 and 1 - */ -ORYX.Core.Math.getPointBetweenTwoPoints = function(point1, point2, relative) { - relative = Math.max(Math.min(relative || 0, 1), 0); - - if (relative === 0){ - return point1; - } else if (relative === 1){ - return point2; - } - - return { - x: point1.x + ((point2.x - point1.x) * relative), - y: point1.y + ((point2.y - point1.y) * relative) - } -}; - - -/** - * Returns the vector of the both points - * - * @param {point} point1 - * @param {point} point2 - */ -ORYX.Core.Math.getVector = function(point1, point2){ - return { - x: point2.x - point1.x, - y: point2.y - point1.y - } -} - -/** - * Returns the an identity vector of the given vector, - * which has the length ot one. - * - * @param {point} vector - * or - * @param {point} point1 - * @param {point} point2 - */ -ORYX.Core.Math.getIdentityVector = function(vector){ - - if (arguments.length == 2){ - vector = ORYX.Core.Math.getVector(arguments[0], arguments[1]); - } - - var length = Math.sqrt((vector.x*vector.x)+(vector.y*vector.y)) - return { - x: vector.x / (length || 1), - y: vector.y / (length || 1) - } -} - - -ORYX.Core.Math.getOrthogonalIdentityVector = function(point1, point2){ - var vec = arguments.length == 1 ? point1 : ORYX.Core.Math.getIdentityVector(point1, point2); - return { - x: vec.y, - y: -vec.x - } -} - - -/** - * Returns the intersection point of a line and a point that defines a line - * orthogonal to the given line. - * - * @param {float} lineP1 - * The starting point of the line segment - * @param {float} lineP2 - * The end point of the line segment - * @param {Point} point - * The point to calculate the distance to. - * @param {boolean} onSegmentOnly - * Flag to signal if only the segment of the line shell be evaluated. - */ -ORYX.Core.Math.getPointOfIntersectionPointLine = function( - lineP1, - lineP2, - point, - onSegmentOnly) { - - /* - * [P3 - P1 - u(P2 - P1)] dot (P2 - P1) = 0 - * u =((x3-x1)(x2-x1)+(y3-y1)(y2-y1))/(p2-p1)² - */ - var denominator = Math.pow(lineP2.x - lineP1.x, 2) - + Math.pow(lineP2.y - lineP1.y, 2); - if(denominator == 0) { - return undefined; - } - - var u = ((point.x - lineP1.x) * (lineP2.x - lineP1.x) - + (point.y - lineP1.y) * (lineP2.y - lineP1.y)) - / denominator; - - if(onSegmentOnly) { - if (!(0 <= u && u <= 1)) { - return undefined; - } - } - - pointOfIntersection = new Object(); - pointOfIntersection.x = lineP1.x + u * (lineP2.x - lineP1.x); - pointOfIntersection.y = lineP1.y + u * (lineP2.y - lineP1.y); - - return pointOfIntersection; -}; - -/** - * Translated the point with the given matrix. - * @param {Point} point - * @param {Matrix} matrix - * @return {Object} Includes x, y - */ -ORYX.Core.Math.getTranslatedPoint = function(point, matrix){ - var x = matrix.a*point.x+matrix.c*point.y+matrix.e*1; - var y = matrix.b*point.x+matrix.d*point.y+matrix.f*1; - return {x:x, y:y} -} - - -/** - * Returns the inverse matrix of the given SVG transformation matrix - * @param {SVGTransformationMatrix} matrix - * @return {Matrix} - */ -ORYX.Core.Math.getInverseMatrix = function(matrix){ - - var det = ORYX.Core.Math.getDeterminant(matrix), m = matrix; - // +- -+ - // | a c e | - // | b d f | - // | 0 0 1 | - // +- -+ - return { - a: det * ((m.d*1)-(m.f*0)), - b: det * ((m.f*0)-(m.b*1)), - c: det * ((m.e*0)-(m.c*1)), - d: det * ((m.a*1)-(m.e*0)), - e: det * ((m.c*m.f)-(m.e*m.d)), - f: det * ((m.e*m.b)-(m.a*m.f)) - } -} - -/** - * Returns the determinant of the svg transformation matrix - * @param {SVGTranformationMatrix} matrix - * @return {Number} - * - */ -ORYX.Core.Math.getDeterminant = function(m){ - // a11a22a33+a12a23a31+a13a21a32-a13a22a31-a12a21a33-a11a23a32 - return (m.a*m.d*1)+(m.c*m.f*0)+(m.e*m.b*0)-(m.e*m.d*0)-(m.c*m.b*1)-(m.a*m.f*0); -} - -/** - * Returns the bounding box of the given node. Translates the - * origin bounding box with the tranlation matrix. - * @param {SVGElement} node - * @return {Object} Includes x, y, width, height - */ -ORYX.Core.Math.getTranslatedBoundingBox = function(node){ - var matrix = node.getCTM(); - var bb = node.getBBox(); - var ul = ORYX.Core.Math.getTranslatedPoint({x:bb.x, y:bb.y}, matrix); - var ll = ORYX.Core.Math.getTranslatedPoint({x:bb.x, y:bb.y+bb.height}, matrix); - var ur = ORYX.Core.Math.getTranslatedPoint({x:bb.x+bb.width, y:bb.y}, matrix); - var lr = ORYX.Core.Math.getTranslatedPoint({x:bb.x+bb.width, y:bb.y+bb.height}, matrix); - - var minPoint = { - x: Math.min(ul.x, ll.x, ur.x, lr.x), - y: Math.min(ul.y, ll.y, ur.y, lr.y) - } - var maxPoint = { - x: Math.max(ul.x, ll.x, ur.x, lr.x), - y: Math.max(ul.y, ll.y, ur.y, lr.y) - } - return { - x: minPoint.x, - y: minPoint.y, - width: maxPoint.x - minPoint.x, - height: maxPoint.y - minPoint.y - } -}; - - -/** - * Returns the angle of the given line, which is representated by the two points - * @param {Point} p1 - * @param {Point} p2 - * @return {Number} 0 <= x <= 359.99999 - */ -ORYX.Core.Math.getAngle = function(p1, p2){ - if(p1.x == p2.x && p1.y == p2.y) - return 0; - - var angle = Math.asin(Math.sqrt(Math.pow(p1.y-p2.y, 2)) - /(Math.sqrt(Math.pow(p2.x-p1.x, 2)+Math.pow(p1.y-p2.y, 2)))) - *180/Math.PI; - - if(p2.x >= p1.x && p2.y <= p1.y) - return angle; - else if(p2.x < p1.x && p2.y <= p1.y) - return 180 - angle; - else if(p2.x < p1.x && p2.y > p1.y) - return 180 + angle; - else - return 360 - angle; -}; - - -/** - * Implementation of the cohen-sutherland algorithm - */ -new function(){ - - var RIGHT = 2, TOP = 8, BOTTOM = 4, LEFT = 1; - - function computeOutCode (x, y, xmin, ymin, xmax, ymax) { - var code = 0; - if (y > ymax) - code |= TOP; - else if (y < ymin) - code |= BOTTOM; - if (x > xmax) - code |= RIGHT; - else if (x < xmin) - code |= LEFT; - return code; - } - - /** - * Returns TRUE if the rectangle is over the edge and has intersection points or includes it - * @param {Object} x1 Point A of the line - * @param {Object} y1 - * @param {Object} x2 Point B of the line - * @param {Object} y2 - * @param {Object} xmin Point A of the rectangle - * @param {Object} ymin - * @param {Object} xmax Point B of the rectangle - * @param {Object} ymax - */ - ORYX.Core.Math.isRectOverLine = function(x1, y1, x2, y2, xmin, ymin, xmax, ymax){ - return !!ORYX.Core.Math.clipLineOnRect.apply(ORYX.Core.Math, arguments); - } - - /** - * Returns the clipped line on the given rectangle. If there is - * no intersection, it will return NULL. - * - * @param {Object} x1 Point A of the line - * @param {Object} y1 - * @param {Object} x2 Point B of the line - * @param {Object} y2 - * @param {Object} xmin Point A of the rectangle - * @param {Object} ymin - * @param {Object} xmax Point B of the rectangle - * @param {Object} ymax - */ - ORYX.Core.Math.clipLineOnRect = function(x1, y1, x2, y2, xmin, ymin, xmax, ymax){ - //Outcodes for P0, P1, and whatever point lies outside the clip rectangle - var outcode0, outcode1, outcodeOut, hhh = 0; - var accept = false, done = false; - - //compute outcodes - outcode0 = computeOutCode(x1, y1, xmin, ymin, xmax, ymax); - outcode1 = computeOutCode(x2, y2, xmin, ymin, xmax, ymax); - - do { - if ((outcode0 | outcode1) == 0 ){ - accept = true; - done = true; - } else if ( (outcode0 & outcode1) > 0 ) { - done = true; - } else { - //failed both tests, so calculate the line segment to clip - //from an outside point to an intersection with clip edge - var x = 0, y = 0; - //At least one endpoint is outside the clip rectangle; pick it. - outcodeOut = outcode0 != 0 ? outcode0: outcode1; - //Now find the intersection point; - //use formulas y = y0 + slope * (x - x0), x = x0 + (1/slope)* (y - y0) - if ( (outcodeOut & TOP) > 0 ) { - x = x1 + (x2 - x1) * (ymax - y1)/(y2 - y1); - y = ymax; - } else if ((outcodeOut & BOTTOM) > 0 ) { - x = x1 + (x2 - x1) * (ymin - y1)/(y2 - y1); - y = ymin; - } else if ((outcodeOut & RIGHT)> 0) { - y = y1 + (y2 - y1) * (xmax - x1)/(x2 - x1); - x = xmax; - } else if ((outcodeOut & LEFT) > 0) { - y = y1 + (y2 - y1) * (xmin - x1)/(x2 - x1); - x = xmin; - } - - //Now we move outside point to intersection point to clip - //and get ready for next pass. - if (outcodeOut == outcode0) { - x1 = x; - y1 = y; - outcode0 = computeOutCode (x1, y1, xmin, ymin, xmax, ymax); - } else { - x2 = x; - y2 = y; - outcode1 = computeOutCode (x2, y2, xmin, ymin, xmax, ymax); - } - } - hhh ++; - } while (done != true && hhh < 5000); - - if(accept) { - return {a:{x:x1, y:y1}, b:{x:x2, y:y2}}; - } - return null; - } -}(); - - -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespace - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.StencilSet) {ORYX.Core.StencilSet = {};} - -/** - * Class Stencil - * uses Prototpye 1.5.0 - * uses Inheritance - * - * This class represents one stencil of a stencil set. - */ -ORYX.Core.StencilSet.Stencil = { - - /** - * Constructor - */ - construct: function(jsonStencil, namespace, source, stencilSet, propertyPackages, defaultPosition) { - arguments.callee.$.construct.apply(this, arguments); // super(); - - // check arguments and set defaults. - if(!jsonStencil) throw "Stencilset seems corrupt."; - if(!namespace) throw "Stencil does not provide namespace."; - if(!source) throw "Stencil does not provide SVG source."; - if(!stencilSet) throw "Fatal internal error loading stencilset."; - //if(!propertyPackages) throw "Fatal internal error loading stencilset."; - - this._source = source; - this._jsonStencil = jsonStencil; - this._stencilSet = stencilSet; - this._namespace = namespace; - this._propertyPackages = propertyPackages; - - if(defaultPosition && !this._jsonStencil.position) - this._jsonStencil.position = defaultPosition; - - this._view; - this._properties = new Hash(); - - //init all JSON values - if(!this._jsonStencil.type || !(this._jsonStencil.type === "edge" || this._jsonStencil.type === "node")) { - throw "ORYX.Core.StencilSet.Stencil(construct): Type is not defined."; - } - if(!this._jsonStencil.id || this._jsonStencil.id === "") { - throw "ORYX.Core.StencilSet.Stencil(construct): Id is not defined."; - } - if(!this._jsonStencil.title || this._jsonStencil.title === "") { - throw "ORYX.Core.StencilSet.Stencil(construct): Title is not defined."; - } - - if(!this._jsonStencil.description) { this._jsonStencil.description = ""; }; - if(!this._jsonStencil.groups) { this._jsonStencil.groups = []; } - if(!this._jsonStencil.roles) { this._jsonStencil.roles = []; } - - //add id of stencil to its roles - this._jsonStencil.roles.push(this._jsonStencil.id); - - //prepend namespace to each role - this._jsonStencil.roles.each((function(role, index) { - this._jsonStencil.roles[index] = namespace + role; - }).bind(this)); - - //delete duplicate roles - this._jsonStencil.roles = this._jsonStencil.roles.uniq(); - - //make id unique by prepending namespace of stencil set - this._jsonStencil.id = namespace + this._jsonStencil.id; - - this.postProcessProperties(); - - // init serialize callback - if(!this._jsonStencil.serialize) { - this._jsonStencil.serialize = {}; - //this._jsonStencil.serialize = function(shape, data) { return data;}; - } - - // init deserialize callback - if(!this._jsonStencil.deserialize) { - this._jsonStencil.deserialize = {}; - //this._jsonStencil.deserialize = function(shape, data) { return data;}; - } - - // init layout callback - if(!this._jsonStencil.layout) { - this._jsonStencil.layout = [] - //this._jsonStencil.layout = function() {return true;} - } - - //TODO does not work correctly, if the url does not exist - //How to guarantee that the view is loaded correctly before leaving the constructor??? - var url = source + "view/" + jsonStencil.view; - // override content type when this is webkit. - - /* - if(Prototype.Browser.WebKit) { - - var req = new XMLHttpRequest; - req.open("GET", url, false); - req.overrideMimeType('text/xml'); - req.send(null); - req.onload = (function() { _loadSVGOnSuccess(req.responseXML); }).bind(this); - - // else just do it. - } else - */ - - if(this._jsonStencil.view.trim().match(/)) { - var parser = new DOMParser(); - var xml = parser.parseFromString( this._jsonStencil.view ,"text/xml"); - - //check if result is a SVG document - if( ORYX.Editor.checkClassType( xml.documentElement, SVGSVGElement )) { - - this._view = xml.documentElement; - - } else { - throw "ORYX.Core.StencilSet.Stencil(_loadSVGOnSuccess): The response is not a valid SVG document." - } - } else { - new Ajax.Request( - url, { - asynchronous:false, method:'get', - onSuccess:this._loadSVGOnSuccess.bind(this), - onFailure:this._loadSVGOnFailure.bind(this) - }); - } - }, - - postProcessProperties: function() { - - // add image path to icon - this._jsonStencil.icon = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/stencilsetitem/" + this._jsonStencil.objectId + "/image"; - - // init property packages - if(this._jsonStencil.propertyPackages && this._jsonStencil.propertyPackages instanceof Array) { - - var hiddenPropertyPackages = this._jsonStencil.hiddenPropertyPackages; - - this._jsonStencil.propertyPackages.each((function(ppId) { - var pp = this._propertyPackages.get(ppId); - - if(pp) { - pp.each((function(prop){ - var oProp = new ORYX.Core.StencilSet.Property(prop, this._namespace, this); - var key = oProp.prefix() + "-" + oProp.id(); - this._properties.set(key,oProp); - - // Check if we need to hide this property (ie it is there for display purposes, - // if the user has filled it in, but it can no longer be edited) - if (hiddenPropertyPackages.indexOf(oProp.id()) > -1) { - oProp.hide(); - } - - }).bind(this)); - } - }).bind(this)); - } - - // init properties - if(this._jsonStencil.properties && this._jsonStencil.properties instanceof Array) { - this._jsonStencil.properties.each((function(prop) { - var oProp = new ORYX.Core.StencilSet.Property(prop, this._namespace, this); - var key = oProp.prefix() + "-" + oProp.id(); - this._properties.set(key, oProp); - }).bind(this)); - } - - - }, - - /** - * @param {ORYX.Core.StencilSet.Stencil} stencil - * @return {Boolean} True, if stencil has the same namespace and type. - */ - equals: function(stencil) { - return (this.id() === stencil.id()); - }, - - stencilSet: function() { - return this._stencilSet; - }, - - type: function() { - return this._jsonStencil.type; - }, - - namespace: function() { - return this._namespace; - }, - - id: function() { - return this._jsonStencil.id; - }, - - idWithoutNs: function(){ - return this.id().replace(this.namespace(),""); - }, - - title: function() { - return ORYX.Core.StencilSet.getTranslation(this._jsonStencil, "title"); - }, - - description: function() { - return ORYX.Core.StencilSet.getTranslation(this._jsonStencil, "description"); - }, - - groups: function() { - return ORYX.Core.StencilSet.getTranslation(this._jsonStencil, "groups"); - }, - - position: function() { - return (isNaN(this._jsonStencil.position) ? 0 : this._jsonStencil.position); - }, - - view: function() { - return this._view.cloneNode(true) || this._view; - }, - - icon: function() { - return this._jsonStencil.icon; - }, - - fixedAspectRatio: function() { - return this._jsonStencil.fixedAspectRatio === true; - }, - - hasMultipleRepositoryEntries: function() { - return (this.getRepositoryEntries().length > 0); - }, - - getRepositoryEntries: function() { - return (this._jsonStencil.repositoryEntries) ? - $A(this._jsonStencil.repositoryEntries) : $A([]); - }, - - properties: function() { - return this._properties.values(); - }, - - property: function(id) { - return this._properties.get(id); - }, - - roles: function() { - return this._jsonStencil.roles; - }, - - defaultAlign: function() { - if(!this._jsonStencil.defaultAlign) - return "east"; - return this._jsonStencil.defaultAlign; - }, - - serialize: function(shape, data) { - return this._jsonStencil.serialize; - //return this._jsonStencil.serialize(shape, data); - }, - - deserialize: function(shape, data) { - return this._jsonStencil.deserialize; - //return this._jsonStencil.deserialize(shape, data); - }, - - // in which case is targetShape used? -// layout: function(shape, targetShape) { -// return this._jsonStencil.layout(shape, targetShape); -// }, - // layout property to store events for layouting in plugins - layout: function(shape) { - return this._jsonStencil.layout - }, - - addProperty: function(property, namespace) { - if(property && namespace) { - var oProp = new ORYX.Core.StencilSet.Property(property, namespace, this); - this._properties[oProp.prefix() + "-" + oProp.id()] = oProp; - } - }, - - removeProperty: function(propertyId) { - if(propertyId) { - var oProp = this._properties.values().find(function(prop) { - return (propertyId == prop.id()); - }); - if(oProp) - delete this._properties[oProp.prefix() + "-" + oProp.id()]; - } - }, - - _loadSVGOnSuccess: function(result) { - - var xml = null; - - /* - * We want to get a dom object for the requested file. Unfortunately, - * safari has some issues here. this is meant as a fallback for all - * browsers that don't recognize the svg mimetype as XML but support - * data: urls on Ajax calls. - */ - - // responseXML != undefined. - // if(!(result.responseXML)) - - // get the dom by data: url. - // xml = _evenMoreEvilHack(result.responseText, 'text/xml'); - - // else - - // get it the usual way. - xml = result.responseXML; - - //check if result is a SVG document - if( ORYX.Editor.checkClassType( xml.documentElement, SVGSVGElement )) { - - this._view = xml.documentElement; - - } else { - throw "ORYX.Core.StencilSet.Stencil(_loadSVGOnSuccess): The response is not a SVG document." - } - }, - - _loadSVGOnFailure: function(result) { - throw "ORYX.Core.StencilSet.Stencil(_loadSVGOnFailure): Loading SVG document failed." - }, - - toString: function() { return "Stencil " + this.title() + " (" + this.id() + ")"; } -}; - -ORYX.Core.StencilSet.Stencil = Clazz.extend(ORYX.Core.StencilSet.Stencil); - -/** - * Transform a string into an xml document, the Safari way, as long as - * the nightlies are broken. Even more evil version. - * @param {Object} str - * @param {Object} contentType - */ -function _evenMoreEvilHack(str, contentType) { - - /* - * This even more evil hack was taken from - * http://web-graphics.com/mtarchive/001606.php#chatty004999 - */ - - if (window.ActiveXObject) { - var d = new ActiveXObject("MSXML.DomDocument"); - d.loadXML(str); - return d; - } else if (window.XMLHttpRequest) { - var req = new XMLHttpRequest; - req.open("GET", "data:" + (contentType || "application/xml") + - ";charset=utf-8," + encodeURIComponent(str), false); - if (req.overrideMimeType) { - req.overrideMimeType(contentType); - } - req.send(null); - return req.responseXML; - } -} - -/** - * Transform a string into an xml document, the Safari way, as long as - * the nightlies are broken. - * @param {Object} result the xml document object. - */ -function _evilSafariHack(serializedXML) { - - /* - * The Dave way. Taken from: - * http://web-graphics.com/mtarchive/001606.php - * - * There is another possibility to parse XML in Safari, by implementing - * the DOMParser in javascript. However, in the latest nightlies of - * WebKit, DOMParser is already available, but still buggy. So, this is - * the best compromise for the time being. - */ - - var xml = serializedXML; - var url = "data:text/xml;charset=utf-8," + encodeURIComponent(xml); - var dom = null; - - // your standard AJAX stuff - var req = new XMLHttpRequest(); - req.open("GET", url); - req.onload = function() { dom = req.responseXML; } - req.send(null); - - return dom; -} - /** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespace - */ -if (!ORYX) { - var ORYX = {}; -} -if (!ORYX.Core) { - ORYX.Core = {}; -} -if (!ORYX.Core.StencilSet) { - ORYX.Core.StencilSet = {}; -} - -/** - * Class Property - * uses Prototpye 1.5.0 - * uses Inheritance - */ -ORYX.Core.StencilSet.Property = Clazz.extend({ - - /** - * Constructor - */ - construct: function(jsonProp, namespace, stencil){ - arguments.callee.$.construct.apply(this, arguments); - - this._jsonProp = jsonProp || ORYX.Log.error("Parameter jsonProp is not defined."); - this._namespace = namespace || ORYX.Log.error("Parameter namespace is not defined."); - this._stencil = stencil || ORYX.Log.error("Parameter stencil is not defined."); - - this._items = {}; - this._complexItems = {}; - - // Flag to indicate whether or not the property should be hidden - // This can be for example when the stencil set is upgraded, but the model - // has a value for that specific property filled in which we still want to show. - // If the value is missing, the property can simply be not shown. - this._hidden = false; - - jsonProp.id = jsonProp.id || ORYX.Log.error("ORYX.Core.StencilSet.Property(construct): Id is not defined."); - jsonProp.id = jsonProp.id.toLowerCase(); - - if (!jsonProp.type) { - ORYX.Log.info("Type is not defined for stencil '%0', id '%1'. Falling back to 'String'.", stencil, jsonProp.id); - jsonProp.type = "string"; - } - else { - jsonProp.type = jsonProp.type.toLowerCase(); - } - - jsonProp.prefix = jsonProp.prefix || "oryx"; - jsonProp.title = jsonProp.title || ""; - jsonProp.value = jsonProp.value || ""; - jsonProp.description = jsonProp.description || ""; - jsonProp.readonly = jsonProp.readonly || false; - jsonProp.optional = jsonProp.optional !== false; - - //init refToView - if (this._jsonProp.refToView) { - if (!(this._jsonProp.refToView instanceof Array)) { - this._jsonProp.refToView = [this._jsonProp.refToView]; - } - } - else { - this._jsonProp.refToView = []; - } - - var globalMin = this.getMinForType(jsonProp.type); - if (jsonProp.min === undefined || jsonProp.min === null) { - jsonProp.min =globalMin; - } else if (jsonProp.min < globalMin) { - jsonProp.min = globalMin; - } - - var globalMax = this.getMaxForType(jsonProp.type); - if (jsonProp.max === undefined || jsonProp.max === null) { - jsonProp.max = globalMax; - } else if (jsonProp.max > globalMax) { - jsonProp.min = globalMax; - } - - if (!jsonProp.fillOpacity) { - jsonProp.fillOpacity = false; - } - - if ("number" != typeof jsonProp.lightness) { - jsonProp.lightness = 1; - } else { - jsonProp.lightness = Math.max(0, Math.min(1, jsonProp.lightness)); - } - - if (!jsonProp.strokeOpacity) { - jsonProp.strokeOpacity = false; - } - - if (jsonProp.length === undefined || jsonProp.length === null) { - jsonProp.length = Number.MAX_VALUE; - } - - if (!jsonProp.wrapLines) { - jsonProp.wrapLines = false; - } - - if (!jsonProp.dateFormat) { - jsonProp.dateFormat = ORYX.I18N.PropertyWindow.dateFormat || "m/d/y"; - } - - if (!jsonProp.fill) { - jsonProp.fill = false; - } - - if (!jsonProp.stroke) { - jsonProp.stroke = false; - } - - if(!jsonProp.inverseBoolean) { - jsonProp.inverseBoolean = false; - } - - if(!jsonProp.directlyEditable && jsonProp.directlyEditable != false) { - jsonProp.directlyEditable = true; - } - - if(jsonProp.visible !== false) { - jsonProp.visible = true; - } - - if(jsonProp.isList !== true) { - jsonProp.isList = false; - - if(!jsonProp.list || !(jsonProp.list instanceof Array)) { - jsonProp.list = []; - } - } - - if(!jsonProp.category) { - if (jsonProp.popular) { - jsonProp.category = "popular"; - } else { - jsonProp.category = "others"; - } - } - - if(!jsonProp.alwaysAppearInMultiselect) { - jsonProp.alwaysAppearInMultiselect = false; - } - - if (jsonProp.type === ORYX.CONFIG.TYPE_CHOICE) { - if (jsonProp.items && jsonProp.items instanceof Array) { - jsonProp.items.each((function(jsonItem){ - // why is the item's value used as the key??? - this._items[jsonItem.value.toLowerCase()] = new ORYX.Core.StencilSet.PropertyItem(jsonItem, namespace, this); - }).bind(this)); - } - else { - throw "ORYX.Core.StencilSet.Property(construct): No property items defined." - } - // extended by Kerstin (start) - } - else - if (jsonProp.type === ORYX.CONFIG.TYPE_COMPLEX || jsonProp.type == ORYX.CONFIG.TYPE_MULTIPLECOMPLEX) { - if (jsonProp.complexItems && jsonProp.complexItems instanceof Array) { - jsonProp.complexItems.each((function(jsonComplexItem){ - this._complexItems[jsonComplexItem.id.toLowerCase()] = new ORYX.Core.StencilSet.ComplexPropertyItem(jsonComplexItem, namespace, this); - }).bind(this)); - } - } - // extended by Kerstin (end) - }, - - getMinForType : function(type) { - if (type.toLowerCase() == ORYX.CONFIG.TYPE_INTEGER) { - return -Math.pow(2,31) - } else { - return -Number.MAX_VALUE+1; - } - }, - getMaxForType : function(type) { - if (type.toLowerCase() == ORYX.CONFIG.TYPE_INTEGER) { - return Math.pow(2,31)-1 - } else { - return Number.MAX_VALUE; - } - }, - - /** - * @param {ORYX.Core.StencilSet.Property} property - * @return {Boolean} True, if property has the same namespace and id. - */ - equals: function(property){ - return (this._namespace === property.namespace() && - this.id() === property.id()) ? true : false; - }, - - namespace: function(){ - return this._namespace; - }, - - stencil: function(){ - return this._stencil; - }, - - id: function(){ - return this._jsonProp.id; - }, - - prefix: function(){ - return this._jsonProp.prefix; - }, - - type: function(){ - return this._jsonProp.type; - }, - - inverseBoolean: function() { - return this._jsonProp.inverseBoolean; - }, - - category: function() { - return this._jsonProp.category; - }, - - setCategory: function(value) { - this._jsonProp.category = value; - }, - - directlyEditable: function() { - return this._jsonProp.directlyEditable; - }, - - visible: function() { - return this._jsonProp.visible; - }, - - title: function(){ - return ORYX.Core.StencilSet.getTranslation(this._jsonProp, "title"); - }, - - value: function(){ - return this._jsonProp.value; - }, - - readonly: function(){ - return this._jsonProp.readonly; - }, - - optional: function(){ - return this._jsonProp.optional; - }, - - description: function(){ - return ORYX.Core.StencilSet.getTranslation(this._jsonProp, "description"); - }, - - /** - * An optional link to a SVG element so that the property affects the - * graphical representation of the stencil. - */ - refToView: function(){ - return this._jsonProp.refToView; - }, - - /** - * If type is integer or float, min is the lower bounds of value. - */ - min: function(){ - return this._jsonProp.min; - }, - - /** - * If type ist integer or float, max is the upper bounds of value. - */ - max: function(){ - return this._jsonProp.max; - }, - - /** - * If type is float, this method returns if the fill-opacity property should - * be set. - * @return {Boolean} - */ - fillOpacity: function(){ - return this._jsonProp.fillOpacity; - }, - - /** - * If type is float, this method returns if the stroke-opacity property should - * be set. - * @return {Boolean} - */ - strokeOpacity: function(){ - return this._jsonProp.strokeOpacity; - }, - - /** - * If type is string or richtext, length is the maximum length of the text. - * TODO how long can a string be. - */ - length: function(){ - return this._jsonProp.length ? this._jsonProp.length : Number.MAX_VALUE; - }, - - wrapLines: function(){ - return this._jsonProp.wrapLines; - }, - - /** - * If type is date, dateFormat specifies the format of the date. The format - * specification of the ext library is used: - * - * Format Output Description - * ------ ---------- -------------------------------------------------------------- - * d 10 Day of the month, 2 digits with leading zeros - * D Wed A textual representation of a day, three letters - * j 10 Day of the month without leading zeros - * l Wednesday A full textual representation of the day of the week - * S th English ordinal day of month suffix, 2 chars (use with j) - * w 3 Numeric representation of the day of the week - * z 9 The julian date, or day of the year (0-365) - * W 01 ISO-8601 2-digit week number of year, weeks starting on Monday (00-52) - * F January A full textual representation of the month - * m 01 Numeric representation of a month, with leading zeros - * M Jan Month name abbreviation, three letters - * n 1 Numeric representation of a month, without leading zeros - * t 31 Number of days in the given month - * L 0 Whether its a leap year (1 if it is a leap year, else 0) - * Y 2007 A full numeric representation of a year, 4 digits - * y 07 A two digit representation of a year - * a pm Lowercase Ante meridiem and Post meridiem - * A PM Uppercase Ante meridiem and Post meridiem - * g 3 12-hour format of an hour without leading zeros - * G 15 24-hour format of an hour without leading zeros - * h 03 12-hour format of an hour with leading zeros - * H 15 24-hour format of an hour with leading zeros - * i 05 Minutes with leading zeros - * s 01 Seconds, with leading zeros - * O -0600 Difference to Greenwich time (GMT) in hours - * T CST Timezone setting of the machine running the code - * Z -21600 Timezone offset in seconds (negative if west of UTC, positive if east) - * - * Example: - * F j, Y, g:i a -> January 10, 2007, 3:05 pm - */ - dateFormat: function(){ - return this._jsonProp.dateFormat; - }, - - /** - * If type is color, this method returns if the fill property should - * be set. - * @return {Boolean} - */ - fill: function(){ - return this._jsonProp.fill; - }, - - /** - * Lightness defines the satiation of the color - * 0 is the pure color - * 1 is white - * @return {Integer} lightness - */ - lightness: function(){ - return this._jsonProp.lightness; - }, - - /** - * If type is color, this method returns if the stroke property should - * be set. - * @return {Boolean} - */ - stroke: function(){ - return this._jsonProp.stroke; - }, - - /** - * If type is choice, items is a hash map with all alternative values - * (PropertyItem objects) with id as keys. - */ - items: function(){ - return $H(this._items).values(); - }, - - item: function(value){ - if (value) { - return this._items[value.toLowerCase()]; - } else { - return null; - } - }, - - toString: function(){ - return "Property " + this.title() + " (" + this.id() + ")"; - }, - - complexItems: function(){ - return $H(this._complexItems).values(); - }, - - complexItem: function(id){ - if(id) { - return this._complexItems[id.toLowerCase()]; - } else { - return null; - } - - }, - - complexAttributeToView: function(){ - return this._jsonProp.complexAttributeToView || ""; - }, - - isList: function() { - return !!this._jsonProp.isList; - }, - - getListItems: function() { - return this._jsonProp.list; - }, - - /** - * If type is glossary link, the - * type of category can be defined where - * the link only can go to. - * @return {String} The glossary category id - */ - linkableType: function(){ - return this._jsonProp.linkableType || ""; - }, - - alwaysAppearInMultiselect : function() { - return this._jsonProp.alwaysAppearInMultiselect; - }, - - popular: function() { - return this._jsonProp.popular || false; - }, - - setPopular: function() { - this._jsonProp.popular = true; - }, - - hide: function() { - this._hidden = true; - }, - - isHidden: function() { - return this._hidden; - } - -}); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespace - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.StencilSet) {ORYX.Core.StencilSet = {};} - -/** - * Class Stencil - * uses Prototpye 1.5.0 - * uses Inheritance - */ -ORYX.Core.StencilSet.PropertyItem = Clazz.extend({ - - /** - * Constructor - */ - construct: function(jsonItem, namespace, property) { - arguments.callee.$.construct.apply(this, arguments); - - if(!jsonItem) { - throw "ORYX.Core.StencilSet.PropertyItem(construct): Parameter jsonItem is not defined."; - } - if(!namespace) { - throw "ORYX.Core.StencilSet.PropertyItem(construct): Parameter namespace is not defined."; - } - if(!property) { - throw "ORYX.Core.StencilSet.PropertyItem(construct): Parameter property is not defined."; - } - - this._jsonItem = jsonItem; - this._namespace = namespace; - this._property = property; - - //init all values - if(!jsonItem.value) { - throw "ORYX.Core.StencilSet.PropertyItem(construct): Value is not defined."; - } - - if(this._jsonItem.refToView) { - if(!(this._jsonItem.refToView instanceof Array)) { - this._jsonItem.refToView = [this._jsonItem.refToView]; - } - } else { - this._jsonItem.refToView = []; - } - }, - - /** - * @param {ORYX.Core.StencilSet.PropertyItem} item - * @return {Boolean} True, if item has the same namespace and id. - */ - equals: function(item) { - return (this.property().equals(item.property()) && - this.value() === item.value()); - }, - - namespace: function() { - return this._namespace; - }, - - property: function() { - return this._property; - }, - - value: function() { - return this._jsonItem.value; - }, - - title: function() { - return ORYX.Core.StencilSet.getTranslation(this._jsonItem, "title"); - }, - - refToView: function() { - return this._jsonItem.refToView; - }, - - icon: function() { - return (this._jsonItem.icon) ? this.property().stencil()._source + "icons/" + this._jsonItem.icon : ""; - }, - - toString: function() { return "PropertyItem " + this.property() + " (" + this.value() + ")"; } -});/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.StencilSet) {ORYX.Core.StencilSet = {};} - -/** - * Class Stencil - * uses Prototpye 1.5.0 - * uses Inheritance - */ -ORYX.Core.StencilSet.ComplexPropertyItem = Clazz.extend({ - - /** - * Constructor - */ - construct: function(jsonItem, namespace, property) { - arguments.callee.$.construct.apply(this, arguments); - - if(!jsonItem) { - throw "ORYX.Core.StencilSet.ComplexPropertyItem(construct): Parameter jsonItem is not defined."; - } - if(!namespace) { - throw "ORYX.Core.StencilSet.ComplexPropertyItem(construct): Parameter namespace is not defined."; - } - if(!property) { - throw "ORYX.Core.StencilSet.ComplexPropertyItem(construct): Parameter property is not defined."; - } - - this._jsonItem = jsonItem; - this._namespace = namespace; - this._property = property; - this._items = new Hash(); - this._complexItems = new Hash(); - - //init all values - if(!jsonItem.name) { - throw "ORYX.Core.StencilSet.ComplexPropertyItem(construct): Name is not defined."; - } - - if(!jsonItem.type) { - throw "ORYX.Core.StencilSet.ComplexPropertyItem(construct): Type is not defined."; - } else { - jsonItem.type = jsonItem.type.toLowerCase(); - } - - if(jsonItem.type === ORYX.CONFIG.TYPE_CHOICE) { - if(jsonItem.items && jsonItem.items instanceof Array) { - jsonItem.items.each((function(item) { - this._items[item.value] = new ORYX.Core.StencilSet.PropertyItem(item, namespace, this); - }).bind(this)); - } else { - throw "ORYX.Core.StencilSet.Property(construct): No property items defined." - } - } else if(jsonItem.type === ORYX.CONFIG.TYPE_COMPLEX) { - if(jsonItem.complexItems && jsonItem.complexItems instanceof Array) { - jsonItem.complexItems.each((function(complexItem) { - this._complexItems[complexItem.id] = new ORYX.Core.StencilSet.ComplexPropertyItem(complexItem, namespace, this); - }).bind(this)); - } else { - throw "ORYX.Core.StencilSet.Property(construct): No property items defined." - } - } - }, - - /** - * @param {ORYX.Core.StencilSet.PropertyItem} item - * @return {Boolean} True, if item has the same namespace and id. - */ - equals: function(item) { - return (this.property().equals(item.property()) && - this.name() === item.name()); - }, - - namespace: function() { - return this._namespace; - }, - - property: function() { - return this._property; - }, - - name: function() { - return ORYX.Core.StencilSet.getTranslation(this._jsonItem, "name"); - }, - - id: function() { - return this._jsonItem.id; - }, - - type: function() { - return this._jsonItem.type; - }, - - optional: function() { - return this._jsonItem.optional; - }, - - width: function() { - return this._jsonItem.width; - }, - - value: function() { - return this._jsonItem.value; - }, - - items: function() { - return this._items.values(); - }, - - complexItems: function() { - return this._complexItems.values(); - }, - - disable: function() { - return this._jsonItem.disable; - } -});/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.StencilSet) {ORYX.Core.StencilSet = {};} - -/** - * Class Rules uses Prototpye 1.5.0 uses Inheritance - * - * This class implements the API to check the stencil sets' rules. - */ -ORYX.Core.StencilSet.Rules = { - - /** - * Constructor - */ - construct: function() { - arguments.callee.$.construct.apply(this, arguments); - - this._stencilSets = []; - this._stencils = []; - this._containerStencils = []; - - this._cachedConnectSET = new Hash(); - this._cachedConnectSE = new Hash(); - this._cachedConnectTE = new Hash(); - this._cachedCardSE = new Hash(); - this._cachedCardTE = new Hash(); - this._cachedContainPC = new Hash(); - this._cachedMorphRS = new Hash(); - - this._connectionRules = new Hash(); - this._cardinalityRules = new Hash(); - this._containmentRules = new Hash(); - this._morphingRules = new Hash(); - this._layoutRules = new Hash(); - }, - - /** - * Call this method to initialize the rules for a stencil set and all of its - * active extensions. - * - * @param {Object} - * stencilSet - */ - initializeRules: function(stencilSet) { - - var existingSS = this._stencilSets.find(function(ss) { - return (ss.namespace() == stencilSet.namespace()); - }); - if (existingSS) { - // reinitialize all rules - var stencilsets = this._stencilSets.clone(); - stencilsets = stencilsets.without(existingSS); - stencilsets.push(stencilSet); - - this._stencilSets = []; - this._stencils = []; - this._containerStencils = []; - - this._cachedConnectSET = new Hash(); - this._cachedConnectSE = new Hash(); - this._cachedConnectTE = new Hash(); - this._cachedCardSE = new Hash(); - this._cachedCardTE = new Hash(); - this._cachedContainPC = new Hash(); - this._cachedMorphRS = new Hash(); - - this._connectionRules = new Hash(); - this._cardinalityRules = new Hash(); - this._containmentRules = new Hash(); - this._morphingRules = new Hash(); - this._layoutRules = new Hash(); - - stencilsets.each(function(ss){ - this.initializeRules(ss); - }.bind(this)); - return; - } - else { - this._stencilSets.push(stencilSet); - - var jsonRules = new Hash(stencilSet.jsonRules()); - var namespace = stencilSet.namespace(); - var stencils = stencilSet.stencils(); - - stencilSet.extensions().values().each(function(extension) { - if(extension.rules) { - if(extension.rules.connectionRules) - jsonRules.connectionRules = jsonRules.connectionRules.concat(extension.rules.connectionRules); - if(extension.rules.cardinalityRules) - jsonRules.cardinalityRules = jsonRules.cardinalityRules.concat(extension.rules.cardinalityRules); - if(extension.rules.containmentRules) - jsonRules.containmentRules = jsonRules.containmentRules.concat(extension.rules.containmentRules); - if(extension.rules.morphingRules) - jsonRules.morphingRules = jsonRules.morphingRules.concat(extension.rules.morphingRules); - } - if(extension.stencils) - stencils = stencils.concat(extension.stencils); - }); - - this._stencils = this._stencils.concat(stencilSet.stencils()); - - // init connection rules - var cr = this._connectionRules; - if (jsonRules.get('connectionRules')) { - jsonRules.get('connectionRules').each((function(rules){ - if (this._isRoleOfOtherNamespace(rules.role)) { - if (!cr.get(rules.role)) { - cr.set(rules.role, new Hash()); - } - } - else { - if (!cr.get(namespace + rules.role)) - cr.set(namespace + rules.role, new Hash()); - } - - rules.connects.each((function(connect){ - var toRoles = []; - if (connect.to) { - if (!(connect.to instanceof Array)) { - connect.to = [connect.to]; - } - connect.to.each((function(to){ - if (this._isRoleOfOtherNamespace(to)) { - toRoles.push(to); - } - else { - toRoles.push(namespace + to); - } - }).bind(this)); - } - - var role, from; - if (this._isRoleOfOtherNamespace(rules.role)) - role = rules.role; - else - role = namespace + rules.role; - - if (this._isRoleOfOtherNamespace(connect.from)) - from = connect.from; - else - from = namespace + connect.from; - - if (!cr.get(role).get(from)) - cr.get(role).set(from, toRoles); - else - cr.get(role).set(from, cr.get(role).get(from).concat(toRoles)); - - }).bind(this)); - }).bind(this)); - } - - // init cardinality rules - var cardr = this._cardinalityRules; - if (jsonRules.get('cardinalityRules')) { - jsonRules.get('cardinalityRules').each((function(rules){ - var cardrKey; - if (this._isRoleOfOtherNamespace(rules.role)) { - cardrKey = rules.role; - } - else { - cardrKey = namespace + rules.role; - } - - if (!cardr.get(cardrKey)) { - cardr.set(cardrKey, {}); - for (i in rules) { - cardr.get(cardrKey)[i] = rules[i]; - } - } - - var oe = new Hash(); - if (rules.outgoingEdges) { - rules.outgoingEdges.each((function(rule){ - if (this._isRoleOfOtherNamespace(rule.role)) { - oe.set(rule.role,rule); - } - else { - oe.set(namespace + rule.role,rule); - } - }).bind(this)); - } - cardr.get(cardrKey).outgoingEdges = oe; - var ie = new Hash(); - if (rules.incomingEdges) { - rules.incomingEdges.each((function(rule){ - if (this._isRoleOfOtherNamespace(rule.role)) { - ie.set(rule.role, rule); - } - else { - ie.set(namespace + rule.role,rule); - } - }).bind(this)); - } - cardr.get(cardrKey).incomingEdges = ie; - }).bind(this)); - } - - // init containment rules - var conr = this._containmentRules; - if (jsonRules.get('containmentRules')) { - jsonRules.get('containmentRules').each((function(rules){ - var conrKey; - if (this._isRoleOfOtherNamespace(rules.role)) { - conrKey = rules.role; - } - else { - this._containerStencils.push(namespace + rules.role); - conrKey = namespace + rules.role; - } - if (!conr.get(conrKey)) { - conr.set(conrKey, []); - } - (rules.contains||[]).each((function(containRole){ - if (this._isRoleOfOtherNamespace(containRole)) { - conr.get(conrKey).push(containRole); - } - else { - conr.get(conrKey).push(namespace + containRole); - } - }).bind(this)); - }).bind(this)); - } - - // init morphing rules - var morphr = this._morphingRules; - if (jsonRules.get('morphingRules')) { - jsonRules.get('morphingRules').each((function(rules){ - var morphrKey; - if (this._isRoleOfOtherNamespace(rules.role)) { - morphrKey = rules.role; - } - else { - morphrKey = namespace + rules.role; - } - if (!morphr.get(morphrKey)) { - morphr.set(morphrKey,[]); - } - if(!rules.preserveBounds) { - rules.preserveBounds = false; - } - rules.baseMorphs.each((function(baseMorphStencilId){ - var morphStencil = this._getStencilById(namespace + baseMorphStencilId); - if(morphStencil) { - morphr.get(morphrKey).push(morphStencil); - } - }).bind(this)); - }).bind(this)); - } - - // init layouting rules - var layoutRules = this._layoutRules; - if (jsonRules.get('layoutRules')) { - - var getDirections = function(o){ - return { - "edgeRole":o.edgeRole||undefined, - "t": o["t"]||1, - "r": o["r"]||1, - "b": o["b"]||1, - "l": o["l"]||1 - } - } - - jsonRules.get('layoutRules').each(function(rules){ - var layoutKey; - if (this._isRoleOfOtherNamespace(rules.role)) { - layoutKey = rules.role; - } - else { - layoutKey = namespace + rules.role; - } - if (!layoutRules.get(layoutKey)) { - layoutRules.set(layoutKey,{}); - } - if (rules["in"]){ - layoutRules.get(layoutKey)["in"] = getDirections(rules["in"]); - } - if (rules["ins"]){ - layoutRules.get(layoutKey)["ins"] = (rules["ins"]||[]).map(function(e){ return getDirections(e) }) - } - if (rules["out"]) { - layoutRules.get(layoutKey)["out"] = getDirections(rules["out"]); - } - if (rules["outs"]){ - layoutRules.get(layoutKey)["outs"] = (rules["outs"]||[]).map(function(e){ return getDirections(e) }) - } - }.bind(this)); - } - } - }, - - _getStencilById: function(id) { - return this._stencils.find(function(stencil) { - return stencil.id()==id; - }); - }, - - _cacheConnect: function(args) { - result = this._canConnect(args); - - if (args.sourceStencil && args.targetStencil) { - var source = this._cachedConnectSET[args.sourceStencil.id()]; - - if(!source) { - source = new Hash(); - this._cachedConnectSET[args.sourceStencil.id()] = source; - } - - var edge = source[args.edgeStencil.id()]; - - if(!edge) { - edge = new Hash(); - source[args.edgeStencil.id()] = edge; - } - - edge[args.targetStencil.id()] = result; - - } else if (args.sourceStencil) { - var source = this._cachedConnectSE[args.sourceStencil.id()]; - - if(!source) { - source = new Hash(); - this._cachedConnectSE[args.sourceStencil.id()] = source; - } - - source[args.edgeStencil.id()] = result; - - } else { - var target = this._cachedConnectTE[args.targetStencil.id()]; - - if(!target) { - target = new Hash(); - this._cachedConnectTE[args.targetStencil.id()] = target; - } - - target[args.edgeStencil.id()] = result; - } - - return result; - }, - - _cacheCard: function(args) { - - if(args.sourceStencil) { - var source = this._cachedCardSE[args.sourceStencil.id()] - - if(!source) { - source = new Hash(); - this._cachedCardSE[args.sourceStencil.id()] = source; - } - - var max = this._getMaximumNumberOfOutgoingEdge(args); - if(max == undefined) - max = -1; - - source[args.edgeStencil.id()] = max; - } - - if(args.targetStencil) { - var target = this._cachedCardTE[args.targetStencil.id()] - - if(!target) { - target = new Hash(); - this._cachedCardTE[args.targetStencil.id()] = target; - } - - var max = this._getMaximumNumberOfIncomingEdge(args); - if(max == undefined) - max = -1; - - target[args.edgeStencil.id()] = max; - } - }, - - _cacheContain: function(args) { - - var result = [this._canContain(args), - this._getMaximumOccurrence(args.containingStencil, args.containedStencil)] - - if(result[1] == undefined) - result[1] = -1; - - var children = this._cachedContainPC[args.containingStencil.id()]; - - if(!children) { - children = new Hash(); - this._cachedContainPC[args.containingStencil.id()] = children; - } - - children[args.containedStencil.id()] = result; - - return result; - }, - - /** - * Returns all stencils belonging to a morph group. (calculation result is - * cached) - */ - _cacheMorph: function(role) { - - var morphs = this._cachedMorphRS[role]; - - if(!morphs) { - morphs = []; - - if(this._morphingRules.keys().include(role)) { - morphs = this._stencils.select(function(stencil) { - return stencil.roles().include(role); - }); - } - - this._cachedMorphRS[role] = morphs; - } - return morphs; - }, - - /** Begin connection rules' methods */ - - /** - * - * @param {Object} - * args sourceStencil: ORYX.Core.StencilSet.Stencil | undefined - * sourceShape: ORYX.Core.Shape | undefined - * - * At least sourceStencil or sourceShape has to be specified - * - * @return {Array} Array of stencils of edges that can be outgoing edges of - * the source. - */ - outgoingEdgeStencils: function(args) { - // check arguments - if(!args.sourceShape && !args.sourceStencil) { - return []; - } - - // init arguments - if(args.sourceShape) { - args.sourceStencil = args.sourceShape.getStencil(); - } - - var _edges = []; - - // test each edge, if it can connect to source - this._stencils.each((function(stencil) { - if(stencil.type() === "edge") { - var newArgs = Object.clone(args); - newArgs.edgeStencil = stencil; - if(this.canConnect(newArgs)) { - _edges.push(stencil); - } - } - }).bind(this)); - - return _edges; - }, - - /** - * - * @param {Object} - * args targetStencil: ORYX.Core.StencilSet.Stencil | undefined - * targetShape: ORYX.Core.Shape | undefined - * - * At least targetStencil or targetShape has to be specified - * - * @return {Array} Array of stencils of edges that can be incoming edges of - * the target. - */ - incomingEdgeStencils: function(args) { - // check arguments - if(!args.targetShape && !args.targetStencil) { - return []; - } - - // init arguments - if(args.targetShape) { - args.targetStencil = args.targetShape.getStencil(); - } - - var _edges = []; - - // test each edge, if it can connect to source - this._stencils.each((function(stencil) { - if(stencil.type() === "edge") { - var newArgs = Object.clone(args); - newArgs.edgeStencil = stencil; - if(this.canConnect(newArgs)) { - _edges.push(stencil); - } - } - }).bind(this)); - - return _edges; - }, - - /** - * - * @param {Object} - * args edgeStencil: ORYX.Core.StencilSet.Stencil | undefined - * edgeShape: ORYX.Core.Edge | undefined targetStencil: - * ORYX.Core.StencilSet.Stencil | undefined targetShape: - * ORYX.Core.Node | undefined - * - * At least edgeStencil or edgeShape has to be specified!!! - * - * @return {Array} Returns an array of stencils that can be source of the - * specified edge. - */ - sourceStencils: function(args) { - // check arguments - if(!args || - !args.edgeShape && !args.edgeStencil) { - return []; - } - - // init arguments - if(args.targetShape) { - args.targetStencil = args.targetShape.getStencil(); - } - - if(args.edgeShape) { - args.edgeStencil = args.edgeShape.getStencil(); - } - - var _sources = []; - - // check each stencil, if it can be a source - this._stencils.each((function(stencil) { - var newArgs = Object.clone(args); - newArgs.sourceStencil = stencil; - if(this.canConnect(newArgs)) { - _sources.push(stencil); - } - }).bind(this)); - - return _sources; - }, - - /** - * - * @param {Object} - * args edgeStencil: ORYX.Core.StencilSet.Stencil | undefined - * edgeShape: ORYX.Core.Edge | undefined sourceStencil: - * ORYX.Core.StencilSet.Stencil | undefined sourceShape: - * ORYX.Core.Node | undefined - * - * At least edgeStencil or edgeShape has to be specified!!! - * - * @return {Array} Returns an array of stencils that can be target of the - * specified edge. - */ - targetStencils: function(args) { - // check arguments - if(!args || - !args.edgeShape && !args.edgeStencil) { - return []; - } - - // init arguments - if(args.sourceShape) { - args.sourceStencil = args.sourceShape.getStencil(); - } - - if(args.edgeShape) { - args.edgeStencil = args.edgeShape.getStencil(); - } - - var _targets = []; - - // check stencil, if it can be a target - this._stencils.each((function(stencil) { - var newArgs = Object.clone(args); - newArgs.targetStencil = stencil; - if(this.canConnect(newArgs)) { - _targets.push(stencil); - } - }).bind(this)); - - return _targets; - }, - - /** - * - * @param {Object} - * args edgeStencil: ORYX.Core.StencilSet.Stencil edgeShape: - * ORYX.Core.Edge |undefined sourceStencil: - * ORYX.Core.StencilSet.Stencil | undefined sourceShape: - * ORYX.Core.Node |undefined targetStencil: - * ORYX.Core.StencilSet.Stencil | undefined targetShape: - * ORYX.Core.Node |undefined - * - * At least source or target has to be specified!!! - * - * @return {Boolean} Returns, if the edge can connect source and target. - */ - canConnect: function(args) { - // check arguments - if(!args || - (!args.sourceShape && !args.sourceStencil && - !args.targetShape && !args.targetStencil) || - !args.edgeShape && !args.edgeStencil) { - return false; - } - - // init arguments - if(args.sourceShape) { - args.sourceStencil = args.sourceShape.getStencil(); - } - if(args.targetShape) { - args.targetStencil = args.targetShape.getStencil(); - } - if(args.edgeShape) { - args.edgeStencil = args.edgeShape.getStencil(); - } - - var result; - - if(args.sourceStencil && args.targetStencil) { - var source = this._cachedConnectSET[args.sourceStencil.id()]; - - if(!source) - result = this._cacheConnect(args); - else { - var edge = source[args.edgeStencil.id()]; - - if(!edge) - result = this._cacheConnect(args); - else { - var target = edge[args.targetStencil.id()]; - - if(target == undefined) - result = this._cacheConnect(args); - else - result = target; - } - } - } else if (args.sourceStencil) { - var source = this._cachedConnectSE[args.sourceStencil.id()]; - - if(!source) - result = this._cacheConnect(args); - else { - var edge = source[args.edgeStencil.id()]; - - if(edge == undefined) - result = this._cacheConnect(args); - else - result = edge; - } - } else { // args.targetStencil - var target = this._cachedConnectTE[args.targetStencil.id()]; - - if(!target) - result = this._cacheConnect(args); - else { - var edge = target[args.edgeStencil.id()]; - - if(edge == undefined) - result = this._cacheConnect(args); - else - result = edge; - } - } - - // check cardinality - if (result) { - if(args.sourceShape) { - var source = this._cachedCardSE[args.sourceStencil.id()]; - - if(!source) { - this._cacheCard(args); - source = this._cachedCardSE[args.sourceStencil.id()]; - } - - var max = source[args.edgeStencil.id()]; - - if(max == undefined) { - this._cacheCard(args); - } - - max = source[args.edgeStencil.id()]; - - if(max != -1) { - result = args.sourceShape.getOutgoingShapes().all(function(cs) { - if((cs.getStencil().id() === args.edgeStencil.id()) && - ((args.edgeShape) ? cs !== args.edgeShape : true)) { - max--; - return (max > 0) ? true : false; - } else { - return true; - } - }); - } - } - - if (args.targetShape) { - var target = this._cachedCardTE[args.targetStencil.id()]; - - if(!target) { - this._cacheCard(args); - target = this._cachedCardTE[args.targetStencil.id()]; - } - - var max = target[args.edgeStencil.id()]; - - if(max == undefined) { - this._cacheCard(args); - } - - max = target[args.edgeStencil.id()]; - - if(max != -1) { - result = args.targetShape.getIncomingShapes().all(function(cs){ - if ((cs.getStencil().id() === args.edgeStencil.id()) && - ((args.edgeShape) ? cs !== args.edgeShape : true)) { - max--; - return (max > 0) ? true : false; - } - else { - return true; - } - }); - } - } - } - - return result; - }, - - /** - * - * @param {Object} - * args edgeStencil: ORYX.Core.StencilSet.Stencil edgeShape: - * ORYX.Core.Edge |undefined sourceStencil: - * ORYX.Core.StencilSet.Stencil | undefined sourceShape: - * ORYX.Core.Node |undefined targetStencil: - * ORYX.Core.StencilSet.Stencil | undefined targetShape: - * ORYX.Core.Node |undefined - * - * At least source or target has to be specified!!! - * - * @return {Boolean} Returns, if the edge can connect source and target. - */ - _canConnect: function(args) { - // check arguments - if(!args || - (!args.sourceShape && !args.sourceStencil && - !args.targetShape && !args.targetStencil) || - !args.edgeShape && !args.edgeStencil) { - return false; - } - - // init arguments - if(args.sourceShape) { - args.sourceStencil = args.sourceShape.getStencil(); - } - if(args.targetShape) { - args.targetStencil = args.targetShape.getStencil(); - } - if(args.edgeShape) { - args.edgeStencil = args.edgeShape.getStencil(); - } - - // 1. check connection rules - var resultCR; - - // get all connection rules for this edge - var edgeRules = this._getConnectionRulesOfEdgeStencil(args.edgeStencil); - - // check connection rules, if the source can be connected to the target - // with the specified edge. - if(edgeRules.keys().length === 0) { - resultCR = false; - } else { - if(args.sourceStencil) { - resultCR = args.sourceStencil.roles().any(function(sourceRole) { - var targetRoles = edgeRules.get(sourceRole); - - if(!targetRoles) {return false;} - - if(args.targetStencil) { - return (targetRoles.any(function(targetRole) { - return args.targetStencil.roles().member(targetRole); - })); - } else { - return true; - } - }); - } else { // !args.sourceStencil -> there is args.targetStencil - resultCR = edgeRules.values().any(function(targetRoles) { - return args.targetStencil.roles().any(function(targetRole) { - return targetRoles.member(targetRole); - }); - }); - } - } - - return resultCR; - }, - - /** End connection rules' methods */ - - - /** Begin containment rules' methods */ - - isContainer: function(shape) { - return this._containerStencils.member(shape.getStencil().id()); - }, - - /** - * - * @param {Object} - * args containingStencil: ORYX.Core.StencilSet.Stencil - * containingShape: ORYX.Core.AbstractShape containedStencil: - * ORYX.Core.StencilSet.Stencil containedShape: ORYX.Core.Shape - */ - canContain: function(args) { - if(!args || - !args.containingStencil && !args.containingShape || - !args.containedStencil && !args.containedShape) { - return false; - } - - // init arguments - if(args.containedShape) { - args.containedStencil = args.containedShape.getStencil(); - } - - if(args.containingShape) { - args.containingStencil = args.containingShape.getStencil(); - } - - //if(args.containingStencil.type() == 'edge' || args.containedStencil.type() == 'edge') - // return false; - if(args.containedStencil.type() == 'edge') - return false; - - var childValues; - - var parent = this._cachedContainPC[args.containingStencil.id()]; - - if(!parent) - childValues = this._cacheContain(args); - else { - childValues = parent[args.containedStencil.id()]; - - if(!childValues) - childValues = this._cacheContain(args); - } - - if(!childValues[0]) - return false; - else if (childValues[1] == -1) - return true; - else { - if(args.containingShape) { - var max = childValues[1]; - return args.containingShape.getChildShapes(false).all(function(as) { - if(as.getStencil().id() === args.containedStencil.id()) { - max--; - return (max > 0) ? true : false; - } else { - return true; - } - }); - } else { - return true; - } - } - }, - - /** - * - * @param {Object} - * args containingStencil: ORYX.Core.StencilSet.Stencil - * containingShape: ORYX.Core.AbstractShape containedStencil: - * ORYX.Core.StencilSet.Stencil containedShape: ORYX.Core.Shape - */ - _canContain: function(args) { - if(!args || - !args.containingStencil && !args.containingShape || - !args.containedStencil && !args.containedShape) { - return false; - } - - // init arguments - if(args.containedShape) { - args.containedStencil = args.containedShape.getStencil(); - } - - if(args.containingShape) { - args.containingStencil = args.containingShape.getStencil(); - } - -// if(args.containingShape) { -// if(args.containingShape instanceof ORYX.Core.Edge) { -// // edges cannot contain other shapes -// return false; -// } -// } - - - var result; - - // check containment rules - result = args.containingStencil.roles().any((function(role) { - var roles = this._containmentRules.get(role); - if(roles) { - return roles.any(function(role) { - return args.containedStencil.roles().member(role); - }); - } else { - return false; - } - }).bind(this)); - - return result; - }, - - /** End containment rules' methods */ - - - /** Begin morphing rules' methods */ - - /** - * - * @param {Object} - * args - * stencil: ORYX.Core.StencilSet.Stencil | undefined - * shape: ORYX.Core.Shape | undefined - * - * At least stencil or shape has to be specified - * - * @return {Array} Array of stencils that the passed stencil/shape can be - * transformed to (including the current stencil itself) - */ - morphStencils: function(args) { - // check arguments - if(!args.stencil && !args.shape) { - return []; - } - - // init arguments - if(args.shape) { - args.stencil = args.shape.getStencil(); - } - - var _morphStencils = []; - args.stencil.roles().each(function(role) { - this._cacheMorph(role).each(function(stencil) { - _morphStencils.push(stencil); - }) - }.bind(this)); - - - var baseMorphs = this.baseMorphs(); - // BaseMorphs should be in the front of the array - _morphStencils = _morphStencils.uniq().sort(function(a,b){ return baseMorphs.include(a)&&!baseMorphs.include(b) ? -1 : (baseMorphs.include(b)&&!baseMorphs.include(a) ? 1 : 0)}) - return _morphStencils; - }, - - /** - * @return {Array} An array of all base morph stencils - */ - baseMorphs: function() { - var _baseMorphs = []; - this._morphingRules.each(function(pair) { - pair.value.each(function(baseMorph) { - _baseMorphs.push(baseMorph); - }); - }); - return _baseMorphs; - }, - - /** - * Returns true if there are morphing rules defines - * @return {boolean} - */ - containsMorphingRules: function(){ - return this._stencilSets.any(function(ss){ return !!ss.jsonRules().morphingRules}); - }, - - /** - * - * @param {Object} - * args - * sourceStencil: - * ORYX.Core.StencilSet.Stencil | undefined - * sourceShape: - * ORYX.Core.Node |undefined - * targetStencil: - * ORYX.Core.StencilSet.Stencil | undefined - * targetShape: - * ORYX.Core.Node |undefined - * - * - * @return {Stencil} Returns, the stencil for the connecting edge - * or null if connection is not possible - */ - connectMorph: function(args) { - // check arguments - if(!args || - (!args.sourceShape && !args.sourceStencil && - !args.targetShape && !args.targetStencil)) { - return false; - } - - // init arguments - if(args.sourceShape) { - args.sourceStencil = args.sourceShape.getStencil(); - } - if(args.targetShape) { - args.targetStencil = args.targetShape.getStencil(); - } - - var incoming = this.incomingEdgeStencils(args); - var outgoing = this.outgoingEdgeStencils(args); - - var edgeStencils = incoming.select(function(e) { return outgoing.member(e); }); // intersection of sets - var baseEdgeStencils = this.baseMorphs().select(function(e) { return edgeStencils.member(e); }); // again: intersection of sets - - if(baseEdgeStencils.size()>0) - return baseEdgeStencils[0]; // return any of the possible base morphs - else if(edgeStencils.size()>0) - return edgeStencils[0]; // return any of the possible stencils - - return null; //connection not possible - }, - - /** - * Return true if the stencil should be located in the shape menu - * @param {ORYX.Core.StencilSet.Stencil} morph - * @return {Boolean} Returns true if the morphs in the morph group of the - * specified morph shall be displayed in the shape menu - */ - showInShapeMenu: function(stencil) { - return this._stencilSets.any(function(ss){ - return ss.jsonRules().morphingRules - .any(function(r){ - return stencil.roles().include(ss.namespace() + r.role) - && r.showInShapeMenu !== false; - }) - }); - }, - - preserveBounds: function(stencil) { - return this._stencilSets.any(function(ss) { - return ss.jsonRules().morphingRules.any(function(r) { - - - return stencil.roles().include(ss.namespace() + r.role) - && r.preserveBounds; - }) - }) - }, - - /** End morphing rules' methods */ - - - /** Begin layouting rules' methods */ - - /** - * Returns a set on "in" and "out" layouting rules for a given shape - * @param {Object} shape - * @param {Object} edgeShape (Optional) - * @return {Object} "in" and "out" with a default value of {"t":1, "r":1, "b":1, "r":1} if not specified in the json - */ - getLayoutingRules : function(shape, edgeShape){ - - if (!shape||!(shape instanceof ORYX.Core.Shape)){ return } - - var layout = {"in":{},"out":{}}; - - var parseValues = function(o, v){ - if (o && o[v]){ - ["t","r","b","l"].each(function(d){ - layout[v][d]=Math.max(o[v][d],layout[v][d]||0); - }); - } - if (o && o[v+"s"] instanceof Array){ - ["t","r","b","l"].each(function(d){ - var defaultRule = o[v+"s"].find(function(e){ return !e.edgeRole }); - var edgeRule; - if (edgeShape instanceof ORYX.Core.Edge) { - edgeRule = o[v + "s"].find(function(e){return this._hasRole(edgeShape, e.edgeRole) }.bind(this)); - } - layout[v][d]=Math.max(edgeRule?edgeRule[d]:defaultRule[d],layout[v][d]||0); - }.bind(this)); - } - }.bind(this) - - // For each role - shape.getStencil().roles().each(function(role) { - // check if there are layout information - if (this._layoutRules[role]){ - // if so, parse those information to the 'layout' variable - parseValues(this._layoutRules[role], "in"); - parseValues(this._layoutRules[role], "out"); - } - }.bind(this)); - - // Make sure, that every attribute has an value, - // otherwise set 1 - ["in","out"].each(function(v){ - ["t","r","b","l"].each(function(d){ - layout[v][d]=layout[v][d]!==undefined?layout[v][d]:1; - }); - }) - - return layout; - }, - - /** End layouting rules' methods */ - - /** Helper methods */ - - /** - * Checks wether a shape contains the given role or the role is equal the stencil id - * @param {ORYX.Core.Shape} shape - * @param {String} role - */ - _hasRole: function(shape, role){ - if (!(shape instanceof ORYX.Core.Shape)||!role){ return } - var isRole = shape.getStencil().roles().any(function(r){ return r == role}); - - return isRole || shape.getStencil().id() == (shape.getStencil().namespace()+role); - }, - - /** - * - * @param {String} - * role - * - * @return {Array} Returns an array of stencils that can act as role. - */ - _stencilsWithRole: function(role) { - return this._stencils.findAll(function(stencil) { - return (stencil.roles().member(role)) ? true : false; - }); - }, - - /** - * - * @param {String} - * role - * - * @return {Array} Returns an array of stencils that can act as role and - * have the type 'edge'. - */ - _edgesWithRole: function(role) { - return this._stencils.findAll(function(stencil) { - return (stencil.roles().member(role) && stencil.type() === "edge") ? true : false; - }); - }, - - /** - * - * @param {String} - * role - * - * @return {Array} Returns an array of stencils that can act as role and - * have the type 'node'. - */ - _nodesWithRole: function(role) { - return this._stencils.findAll(function(stencil) { - return (stencil.roles().member(role) && stencil.type() === "node") ? true : false; - }); - }, - - /** - * - * @param {ORYX.Core.StencilSet.Stencil} - * parent - * @param {ORYX.Core.StencilSet.Stencil} - * child - * - * @returns {Boolean} Returns the maximum occurrence of shapes of the - * stencil's type inside the parent. - */ - _getMaximumOccurrence: function(parent, child) { - var max; - child.roles().each((function(role) { - var cardRule = this._cardinalityRules.get(role); - if(cardRule && cardRule.maximumOccurrence) { - if(max) { - max = Math.min(max, cardRule.maximumOccurrence); - } else { - max = cardRule.maximumOccurrence; - } - } - }).bind(this)); - - return max; - }, - - - /** - * - * @param {Object} - * args sourceStencil: ORYX.Core.Node edgeStencil: - * ORYX.Core.StencilSet.Stencil - * - * @return {Boolean} Returns, the maximum number of outgoing edges of the - * type specified by edgeStencil of the sourceShape. - */ - _getMaximumNumberOfOutgoingEdge: function(args) { - if(!args || - !args.sourceStencil || - !args.edgeStencil) { - return false; - } - - var max; - args.sourceStencil.roles().each((function(role) { - var cardRule = this._cardinalityRules.get(role); - - if(cardRule && cardRule.outgoingEdges) { - args.edgeStencil.roles().each(function(edgeRole) { - var oe = cardRule.outgoingEdges[edgeRole]; - - if(oe && oe.maximum) { - if(max) { - max = Math.min(max, oe.maximum); - } else { - max = oe.maximum; - } - } - }); - } - }).bind(this)); - - return max; - }, - - /** - * - * @param {Object} - * args targetStencil: ORYX.Core.StencilSet.Stencil edgeStencil: - * ORYX.Core.StencilSet.Stencil - * - * @return {Boolean} Returns the maximum number of incoming edges of the - * type specified by edgeStencil of the targetShape. - */ - _getMaximumNumberOfIncomingEdge: function(args) { - if(!args || - !args.targetStencil || - !args.edgeStencil) { - return false; - } - - var max; - args.targetStencil.roles().each((function(role) { - var cardRule = this._cardinalityRules[role]; - if(cardRule && cardRule.incomingEdges) { - args.edgeStencil.roles().each(function(edgeRole) { - var ie = cardRule.incomingEdges[edgeRole]; - if(ie && ie.maximum) { - if(max) { - max = Math.min(max, ie.maximum); - } else { - max = ie.maximum; - } - } - }); - } - }).bind(this)); - - return max; - }, - - /** - * - * @param {ORYX.Core.StencilSet.Stencil} - * edgeStencil - * - * @return {Hash} Returns a hash map of all connection rules for - * edgeStencil. - */ - _getConnectionRulesOfEdgeStencil: function(edgeStencil) { - var edgeRules = new Hash(); - edgeStencil.roles().each((function(role) { - if(this._connectionRules.get(role)) { - this._connectionRules.get(role).each(function(cr) { - if (edgeRules.get(cr.key)) { - edgeRules.set(cr.key,edgeRules.get([cr.key]).concat(cr.value)); - } else { - edgeRules.set(cr.key,cr.value); - } - }); - } - }).bind(this)); - - return edgeRules; - }, - - _isRoleOfOtherNamespace: function(role) { - return (role.indexOf("#") > 0); - }, - - toString: function() { return "Rules"; } -} -ORYX.Core.StencilSet.Rules = Clazz.extend(ORYX.Core.StencilSet.Rules); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespace - */ -if (!ORYX) { - var ORYX = {}; -} -if (!ORYX.Core) { - ORYX.Core = {}; -} -if (!ORYX.Core.StencilSet) { - ORYX.Core.StencilSet = {}; -} - -/** - * This class represents a stencil set. It offers methods for accessing - * the attributes of the stencil set description JSON file and the stencil set's - * stencils. - */ -ORYX.Core.StencilSet.StencilSet = Clazz.extend({ - - /** - * Constructor - * @param source {URL} A reference to the stencil set specification. - * - */ - construct: function(baseUrl, data) { - - this._extensions = new Hash(); - - this._baseUrl = baseUrl; - this._jsonObject = {}; - - this._stencils = new Hash(); - this._availableStencils = new Hash(); - this._init(data); - }, - - /** - * Finds a root stencil in this stencil set. There may be many of these. If - * there are, the first one found will be used. In Firefox, this is the - * topmost definition in the stencil set description file. - */ - findRootStencilName: function(){ - - // find any stencil that may be root. - var rootStencil = this._stencils.values().find(function(stencil){ - return stencil._jsonStencil.mayBeRoot - }); - - // if there is none, just guess the first. - if (!rootStencil) { - ORYX.Log.warn("Did not find any stencil that may be root. Taking a guess."); - rootStencil = this._stencils.values()[0]; - } - - // return its id. - return rootStencil.id(); - }, - - /** - * @param {ORYX.Core.StencilSet.StencilSet} stencilSet - * @return {Boolean} True, if stencil set has the same namespace. - */ - equals: function(stencilSet){ - return (this.namespace() === stencilSet.namespace()); - }, - - /** - * - * @param {Oryx.Core.StencilSet.Stencil} rootStencil If rootStencil is defined, it only returns stencils - * that could be (in)direct child of that stencil. - */ - stencils: function(rootStencil, rules, sortByGroup){ - if(rootStencil && rules) { - var stencils = this._availableStencils.values(); - var containers = [rootStencil]; - var checkedContainers = []; - - var result = []; - - while (containers.size() > 0) { - var container = containers.pop(); - checkedContainers.push(container); - var children = stencils.findAll(function(stencil){ - var args = { - containingStencil: container, - containedStencil: stencil - }; - return rules.canContain(args); - }); - for(var i = 0; i < children.size(); i++) { - if (!checkedContainers.member(children[i])) { - containers.push(children[i]); - } - } - result = result.concat(children).uniq(); - } - - // Sort the result to the origin order - result = result.sortBy(function(stencil) { - return stencils.indexOf(stencil); - }); - - - if(sortByGroup) { - result = result.sortBy(function(stencil) { - return stencil.groups().first(); - }); - } - - var edges = stencils.findAll(function(stencil) { - return stencil.type() == "edge"; - }); - result = result.concat(edges); - - return result; - - } else { - if(sortByGroup) { - return this._availableStencils.values().sortBy(function(stencil) { - return stencil.groups().first(); - }); - } else { - return this._availableStencils.values(); - } - } - }, - - nodes: function(){ - return this._availableStencils.values().findAll(function(stencil){ - return (stencil.type() === 'node') - }); - }, - - edges: function(){ - return this._availableStencils.values().findAll(function(stencil){ - return (stencil.type() === 'edge') - }); - }, - - stencil: function(id){ - return this._stencils.get(id); - }, - - title: function(){ - return ORYX.Core.StencilSet.getTranslation(this._jsonObject, "title"); - }, - - description: function(){ - return ORYX.Core.StencilSet.getTranslation(this._jsonObject, "description"); - }, - - namespace: function(){ - return this._jsonObject ? this._jsonObject.namespace : null; - }, - - jsonRules: function(){ - return this._jsonObject ? this._jsonObject.rules : null; - }, - - source: function(){ - return this._source; - }, - - extensions: function() { - return this._extensions; - }, - - addExtension: function(url) { - - new Ajax.Request(url, { - method: 'GET', - asynchronous: false, - onSuccess: (function(transport) { - this.addExtensionDirectly(transport.responseText); - }).bind(this), - onFailure: (function(transport) { - ORYX.Log.debug("Loading stencil set extension file failed. The request returned an error." + transport); - }).bind(this), - onException: (function(transport) { - ORYX.Log.debug("Loading stencil set extension file failed. The request returned an error." + transport); - }).bind(this) - - }); - }, - - addExtensionDirectly: function(str){ - - try { - eval("var jsonExtension = " + str); - - if(!(jsonExtension["extends"].endsWith("#"))) - jsonExtension["extends"] += "#"; - - if(jsonExtension["extends"] == this.namespace()) { - this._extensions.set(jsonExtension.namespace, jsonExtension); - - var defaultPosition = this._stencils.keys().size(); - //load new stencils - if(jsonExtension.stencils) { - $A(jsonExtension.stencils).each(function(stencil) { - defaultPosition++; - var oStencil = new ORYX.Core.StencilSet.Stencil(stencil, this.namespace(), this._baseUrl, this, undefined, defaultPosition); - this._stencils.set(oStencil.id(),oStencil); - this._availableStencils.set(oStencil.id(),oStencil); - }.bind(this)); - } - - //load additional properties - if (jsonExtension.properties) { - var stencils = this._stencils.values(); - - stencils.each(function(stencil){ - var roles = stencil.roles(); - - jsonExtension.properties.each(function(prop){ - prop.roles.any(function(role){ - role = jsonExtension["extends"] + role; - if (roles.member(role)) { - prop.properties.each(function(property){ - stencil.addProperty(property, jsonExtension.namespace); - }); - - return true; - } - else - return false; - }) - }) - }.bind(this)); - } - - //remove stencil properties - if(jsonExtension.removeproperties) { - jsonExtension.removeproperties.each(function(remprop) { - var stencil = this.stencil(jsonExtension["extends"] + remprop.stencil); - if(stencil) { - remprop.properties.each(function(propId) { - stencil.removeProperty(propId); - }); - } - }.bind(this)); - } - - //remove stencils - if(jsonExtension.removestencils) { - $A(jsonExtension.removestencils).each(function(remstencil) { - delete this._availableStencils[jsonExtension["extends"] + remstencil]; - }.bind(this)); - } - } - } catch (e) { - ORYX.Log.debug("StencilSet.addExtension: Something went wrong when initialising the stencil set extension. " + e); - } - }, - - removeExtension: function(namespace) { - var jsonExtension = this._extensions[namespace]; - if(jsonExtension) { - - //unload extension's stencils - if(jsonExtension.stencils) { - $A(jsonExtension.stencils).each(function(stencil) { - var oStencil = new ORYX.Core.StencilSet.Stencil(stencil, this.namespace(), this._baseUrl, this); - this._stencils.unset(oStencil.id()); - this._availableStencils.unset(oStencil.id()); - }.bind(this)); - } - - //unload extension's properties - if (jsonExtension.properties) { - var stencils = this._stencils.values(); - - stencils.each(function(stencil){ - var roles = stencil.roles(); - - jsonExtension.properties.each(function(prop){ - prop.roles.any(function(role){ - role = jsonExtension["extends"] + role; - if (roles.member(role)) { - prop.properties.each(function(property){ - stencil.removeProperty(property.id); - }); - - return true; - } - else - return false; - }) - }) - }.bind(this)); - } - - //restore removed stencil properties - if(jsonExtension.removeproperties) { - jsonExtension.removeproperties.each(function(remprop) { - var stencil = this.stencil(jsonExtension["extends"] + remprop.stencil); - if(stencil) { - var stencilJson = $A(this._jsonObject.stencils).find(function(s) { return s.id == stencil.id() }); - remprop.properties.each(function(propId) { - var propertyJson = $A(stencilJson.properties).find(function(p) { return p.id == propId }); - stencil.addProperty(propertyJson, this.namespace()); - }.bind(this)); - } - }.bind(this)); - } - - //restore removed stencils - if(jsonExtension.removestencils) { - $A(jsonExtension.removestencils).each(function(remstencil) { - var sId = jsonExtension["extends"] + remstencil; - this._availableStencils.set(sId, this._stencils.get(sId)); - }.bind(this)); - } - } - delete this._extensions[namespace]; - }, - - __handleStencilset: function(response){ - - this._jsonObject = response; - - // assert it was parsed. - if (!this._jsonObject) { - throw "Error evaluating stencilset. It may be corrupt."; - } - - with (this._jsonObject) { - - // assert there is a namespace. - if (!namespace || namespace === "") - throw "Namespace definition missing in stencilset."; - - if (!(stencils instanceof Array)) - throw "Stencilset corrupt."; - - // assert namespace ends with '#'. - if (!namespace.endsWith("#")) - namespace = namespace + "#"; - - // assert title and description are strings. - if (!title) - title = ""; - if (!description) - description = ""; - } - }, - - /** - * This method is called when the HTTP request to get the requested stencil - * set succeeds. The response is supposed to be a JSON representation - * according to the stencil set specification. - * @param {Object} response The JSON representation according to the - * stencil set specification. - */ - _init: function(response){ - - // init and check consistency. - this.__handleStencilset(response); - - var pps = new Hash(); - - // init property packages - if(this._jsonObject.propertyPackages) { - $A(this._jsonObject.propertyPackages).each((function(pp) { - pps.set(pp.name, pp.properties); - }).bind(this)); - } - - var defaultPosition = 0; - - // init each stencil - $A(this._jsonObject.stencils).each((function(stencil){ - defaultPosition++; - - // instantiate normally. - var oStencil = new ORYX.Core.StencilSet.Stencil(stencil, this.namespace(), this._baseUrl, this, pps, defaultPosition); - this._stencils.set(oStencil.id(), oStencil); - this._availableStencils.set(oStencil.id(), oStencil); - - }).bind(this)); - }, - - _cancelInit: function(response){ - this.errornous = true; - }, - - toString: function(){ - return "StencilSet " + this.title() + " (" + this.namespace() + ")"; - } -}); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespace - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.StencilSet) {ORYX.Core.StencilSet = {};} - -/** - * Class StencilSets - * uses Prototpye 1.5.0 - * uses Inheritance - * - * Singleton - */ -//storage for loaded stencil sets by namespace -ORYX.Core.StencilSet._stencilSetsByNamespace = new Hash(); - -//storage for stencil sets by url -ORYX.Core.StencilSet._stencilSetsByUrl = new Hash(); - -//storage for stencil set namespaces by editor instances -ORYX.Core.StencilSet._StencilSetNSByEditorInstance = new Hash(); - -//storage for rules by editor instances -ORYX.Core.StencilSet._rulesByEditorInstance = new Hash(); - -/** - * - * @param {String} editorId - * - * @return {Hash} Returns a hash map with all stencil sets that are loaded by - * the editor with the editorId. - */ -ORYX.Core.StencilSet.stencilSets = function(editorId) { - var stencilSetNSs = ORYX.Core.StencilSet._StencilSetNSByEditorInstance.get(editorId); - var stencilSets = new Hash(); - if(stencilSetNSs) { - stencilSetNSs.each(function(stencilSetNS) { - var stencilSet = ORYX.Core.StencilSet.stencilSet(stencilSetNS) - stencilSets.set(stencilSet.namespace(), stencilSet); - }); - } - return stencilSets; -}; - -/** - * - * @param {String} namespace - * - * @return {ORYX.Core.StencilSet.StencilSet} Returns the stencil set with the specified - * namespace. - * - * The method can handle namespace strings like - * http://www.example.org/stencilset - * http://www.example.org/stencilset# - * http://www.example.org/stencilset#ANode - */ -ORYX.Core.StencilSet.stencilSet = function(namespace) { - ORYX.Log.trace("Getting stencil set %0", namespace); - var splitted = namespace.split("#", 1); - if(splitted.length === 1) { - ORYX.Log.trace("Getting stencil set %0", splitted[0]); - return ORYX.Core.StencilSet._stencilSetsByNamespace.get(splitted[0] + "#"); - } else { - return undefined; - } -}; - -/** - * - * @param {String} id - * - * @return {ORYX.Core.StencilSet.Stencil} Returns the stencil specified by the id. - * - * The id must be unique and contains the namespace of the stencil's stencil set. - * e.g. http://www.example.org/stencilset#ANode - */ -ORYX.Core.StencilSet.stencil = function(id) { - ORYX.Log.trace("Getting stencil for %0", id); - var ss = ORYX.Core.StencilSet.stencilSet(id); - if(ss) { - return ss.stencil(id); - } else { - - ORYX.Log.trace("Cannot fild stencil for %0", id); - return undefined; - } -}; - -/** - * - * @param {String} editorId - * - * @return {ORYX.Core.StencilSet.Rules} Returns the rules object for the editor - * specified by its editor id. - */ -ORYX.Core.StencilSet.rules = function(editorId) { - if(!ORYX.Core.StencilSet._rulesByEditorInstance.get(editorId)) { - ORYX.Core.StencilSet._rulesByEditorInstance.set(editorId, new ORYX.Core.StencilSet.Rules()); - } - return ORYX.Core.StencilSet._rulesByEditorInstance.get(editorId); -}; - -/** - * - * @param {String} url - * @param {String} editorId - * - * Loads a stencil set from url, if it is not already loaded. - * It also stores which editor instance loads the stencil set and - * initializes the Rules object for the editor instance. - */ -ORYX.Core.StencilSet.loadStencilSet = function(url, stencilSet, editorId) { - - //store stencil set - ORYX.Core.StencilSet._stencilSetsByNamespace.set(stencilSet.namespace(),stencilSet); - - //store stencil set by url - ORYX.Core.StencilSet._stencilSetsByUrl.set(url,stencilSet); - - var namespace = stencilSet.namespace(); - - //store which editorInstance loads the stencil set - if(ORYX.Core.StencilSet._StencilSetNSByEditorInstance.get(editorId)) { - ORYX.Core.StencilSet._StencilSetNSByEditorInstance.get(editorId).push(namespace); - } else { - ORYX.Core.StencilSet._StencilSetNSByEditorInstance.set(editorId, [namespace]); - } - - //store the rules for the editor instance - if(ORYX.Core.StencilSet._rulesByEditorInstance.get(editorId)) { - ORYX.Core.StencilSet._rulesByEditorInstance.get(editorId).initializeRules(stencilSet); - } else { - var rules = new ORYX.Core.StencilSet.Rules(); - rules.initializeRules(stencilSet); - ORYX.Core.StencilSet._rulesByEditorInstance.set(editorId, rules); - } -}; - -/** - * Returns the translation of an attribute in jsonObject specified by its name - * according to navigator.language - */ -ORYX.Core.StencilSet.getTranslation = function(jsonObject, name) { - var lang = ORYX.I18N.Language.toLowerCase(); - - var result = jsonObject[name + "_" + lang]; - - if(result) - return result; - - result = jsonObject[name + "_" + lang.substr(0, 2)]; - - if(result) - return result; - - return jsonObject[name]; -}; -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} - - -/** - * @classDescription With Bounds you can set and get position and size of UIObjects. - */ -ORYX.Core.Command = Clazz.extend({ - - /** - * Constructor - */ - construct: function() { - - }, - - execute: function(){ - throw "Command.execute() has to be implemented!" - }, - - rollback: function(){ - throw "Command.rollback() has to be implemented!" - } - - - });/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} - - -/** - * @classDescription With Bounds you can set and get position and size of UIObjects. - */ -ORYX.Core.Bounds = { - - /** - * Constructor - */ - construct: function() { - this._changedCallbacks = []; //register a callback with changedCallacks.push(this.method.bind(this)); - this.a = {}; - this.b = {}; - this.set.apply(this, arguments); - this.suspendChange = false; - this.changedWhileSuspend = false; - }, - - /** - * Calls all registered callbacks. - */ - _changed: function(sizeChanged) { - if(!this.suspendChange) { - this._changedCallbacks.each(function(callback) { - callback(this, sizeChanged); - }.bind(this)); - this.changedWhileSuspend = false; - } else - this.changedWhileSuspend = true; - }, - - /** - * Registers a callback that is called, if the bounds changes. - * @param callback {Function} The callback function. - */ - registerCallback: function(callback) { - if(!this._changedCallbacks.member(callback)) { - this._changedCallbacks.push(callback); - } - }, - - /** - * Unregisters a callback. - * @param callback {Function} The callback function. - */ - unregisterCallback: function(callback) { - this._changedCallbacks = this._changedCallbacks.without(callback); - }, - - /** - * Sets position and size of the shape dependent of four coordinates - * (set(ax, ay, bx, by);), two points (set({x: ax, y: ay}, {x: bx, y: by});) - * or one bound (set({a: {x: ax, y: ay}, b: {x: bx, y: by}});). - */ - set: function() { - - var changed = false; - - switch (arguments.length) { - - case 1: - if(this.a.x !== arguments[0].a.x) { - changed = true; - this.a.x = arguments[0].a.x; - } - if(this.a.y !== arguments[0].a.y) { - changed = true; - this.a.y = arguments[0].a.y; - } - if(this.b.x !== arguments[0].b.x) { - changed = true; - this.b.x = arguments[0].b.x; - } - if(this.b.y !== arguments[0].b.y) { - changed = true; - this.b.y = arguments[0].b.y; - } - break; - - case 2: - var ax = Math.min(arguments[0].x, arguments[1].x); - var ay = Math.min(arguments[0].y, arguments[1].y); - var bx = Math.max(arguments[0].x, arguments[1].x); - var by = Math.max(arguments[0].y, arguments[1].y); - if(this.a.x !== ax) { - changed = true; - this.a.x = ax; - } - if(this.a.y !== ay) { - changed = true; - this.a.y = ay; - } - if(this.b.x !== bx) { - changed = true; - this.b.x = bx; - } - if(this.b.y !== by) { - changed = true; - this.b.y = by; - } - break; - - case 4: - var ax = Math.min(arguments[0], arguments[2]); - var ay = Math.min(arguments[1], arguments[3]); - var bx = Math.max(arguments[0], arguments[2]); - var by = Math.max(arguments[1], arguments[3]); - if(this.a.x !== ax) { - changed = true; - this.a.x = ax; - } - if(this.a.y !== ay) { - changed = true; - this.a.y = ay; - } - if(this.b.x !== bx) { - changed = true; - this.b.x = bx; - } - if(this.b.y !== by) { - changed = true; - this.b.y = by; - } - break; - } - - if(changed) { - this._changed(true); - } - }, - - /** - * Moves the bounds so that the point p will be the new upper left corner. - * @param {Point} p - * or - * @param {Number} x - * @param {Number} y - */ - moveTo: function() { - - var currentPosition = this.upperLeft(); - switch (arguments.length) { - case 1: - this.moveBy({ - x: arguments[0].x - currentPosition.x, - y: arguments[0].y - currentPosition.y - }); - break; - case 2: - this.moveBy({ - x: arguments[0] - currentPosition.x, - y: arguments[1] - currentPosition.y - }); - break; - default: - //TODO error - } - - }, - - /** - * Moves the bounds relatively by p. - * @param {Point} p - * or - * @param {Number} x - * @param {Number} y - * - */ - moveBy: function() { - var changed = false; - - switch (arguments.length) { - case 1: - var p = arguments[0]; - if(p.x !== 0 || p.y !== 0) { - changed = true; - this.a.x += p.x; - this.b.x += p.x; - this.a.y += p.y; - this.b.y += p.y; - } - break; - case 2: - var x = arguments[0]; - var y = arguments[1]; - if(x !== 0 || y !== 0) { - changed = true; - this.a.x += x; - this.b.x += x; - this.a.y += y; - this.b.y += y; - } - break; - default: - //TODO error - } - - if(changed) { - this._changed(); - } - }, - - /*** - * Includes the bounds b into the current bounds. - * @param {Bounds} b - */ - include: function(b) { - - if( (this.a.x === undefined) && (this.a.y === undefined) && - (this.b.x === undefined) && (this.b.y === undefined)) { - return b; - }; - - var cx = Math.min(this.a.x,b.a.x); - var cy = Math.min(this.a.y,b.a.y); - - var dx = Math.max(this.b.x,b.b.x); - var dy = Math.max(this.b.y,b.b.y); - - - this.set(cx, cy, dx, dy); - }, - - /** - * Relatively extends the bounds by p. - * @param {Point} p - */ - extend: function(p) { - - if(p.x !== 0 || p.y !== 0) { - // this is over cross for the case that a and b have same coordinates. - //((this.a.x > this.b.x) ? this.a : this.b).x += p.x; - //((this.b.y > this.a.y) ? this.b : this.a).y += p.y; - this.b.x += p.x; - this.b.y += p.y; - - this._changed(true); - } - }, - - /** - * Widens the scope of the bounds by x. - * @param {Number} x - */ - widen: function(x) { - if (x !== 0) { - this.suspendChange = true; - this.moveBy({x: -x, y: -x}); - this.extend({x: 2*x, y: 2*x}); - this.suspendChange = false; - if(this.changedWhileSuspend) { - this._changed(true); - } - } - }, - - /** - * Returns the upper left corner's point regardless of the - * bound delimiter points. - */ - upperLeft: function() { - var result = {}; - result.x = this.a.x; - result.y = this.a.y; - return result; - }, - - /** - * Returns the lower Right left corner's point regardless of the - * bound delimiter points. - */ - lowerRight: function() { - var result = {}; - result.x = this.b.x; - result.y = this.b.y; - return result; - }, - - /** - * @return {Number} Width of bounds. - */ - width: function() { - return this.b.x - this.a.x; - }, - - /** - * @return {Number} Height of bounds. - */ - height: function() { - return this.b.y - this.a.y; - }, - - /** - * @return {Point} The center point of this bounds. - */ - center: function() { - var center = {}; - center.x =(this.a.x + this.b.x)/2.0; - center.y =(this.a.y + this.b.y)/2.0; - return center; - }, - - - /** - * @return {Point} The center point of this bounds relative to upperLeft. - */ - midPoint: function() { - - var midpoint = {}; - midpoint.x = (this.b.x - this.a.x)/2.0; - midpoint.y = (this.b.y - this.a.y)/2.0; - return midpoint; - }, - - /** - * Moves the center point of this bounds to the new position. - * @param p {Point} - * or - * @param x {Number} - * @param y {Number} - */ - centerMoveTo: function() { - var currentPosition = this.center(); - - switch (arguments.length) { - - case 1: - this.moveBy(arguments[0].x - currentPosition.x, - arguments[0].y - currentPosition.y); - break; - - case 2: - this.moveBy(arguments[0] - currentPosition.x, - arguments[1] - currentPosition.y); - break; - } - }, - - isIncluded: function(point, offset) { - - var pointX, pointY, offset; - - // Get the the two Points - switch(arguments.length) { - case 1: - pointX = arguments[0].x; - pointY = arguments[0].y; - offset = 0; - - break; - case 2: - if(arguments[0].x && arguments[0].y) { - pointX = arguments[0].x; - pointY = arguments[0].y; - offset = Math.abs(arguments[1]); - } else { - pointX = arguments[0]; - pointY = arguments[1]; - offset = 0; - } - break; - case 3: - pointX = arguments[0]; - pointY = arguments[1]; - offset = Math.abs(arguments[2]); - break; - default: - throw "isIncluded needs one, two or three arguments"; - } - - var ul = this.upperLeft(); - var lr = this.lowerRight(); - - if(pointX >= ul.x - offset - && pointX <= lr.x + offset && pointY >= ul.y - offset - && pointY <= lr.y + offset) - return true; - else - return false; - }, - - /** - * @return {Bounds} A copy of this bounds. - */ - clone: function() { - - //Returns a new bounds object without the callback - // references of the original bounds - return new ORYX.Core.Bounds(this); - }, - - toString: function() { - - return "( "+this.a.x+" | "+this.a.y+" )/( "+this.b.x+" | "+this.b.y+" )"; - }, - - serializeForERDF: function() { - - return this.a.x+","+this.a.y+","+this.b.x+","+this.b.y; - } - }; - -ORYX.Core.Bounds = Clazz.extend(ORYX.Core.Bounds);/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} - - -/** - * @classDescription Abstract base class for all objects that have a graphical representation - * within the editor. - * @extends Clazz - */ -ORYX.Core.UIObject = { - /** - * Constructor of the UIObject class. - */ - construct: function(options) { - - this.isChanged = true; //Flag, if UIObject has been changed since last update. - this.isResized = true; - this.isVisible = true; //Flag, if UIObject's display attribute is set to 'inherit' or 'none' - this.isSelectable = false; //Flag, if UIObject is selectable. - this.isResizable = false; //Flag, if UIObject is resizable. - this.isMovable = false; //Flag, if UIObject is movable. - - this.id = ORYX.Editor.provideId(); //get unique id - this.parent = undefined; //parent is defined, if this object is added to another uiObject. - this.node = undefined; //this is a reference to the SVG representation, either locally or in DOM. - this.children = []; //array for all add uiObjects - - this.bounds = new ORYX.Core.Bounds(); //bounds with undefined values - - this._changedCallback = this._changed.bind(this); //callback reference for calling _changed - this.bounds.registerCallback(this._changedCallback); //set callback in bounds - - if(options && options.eventHandlerCallback) { - this.eventHandlerCallback = options.eventHandlerCallback; - } - }, - - /** - * Sets isChanged flag to true. Callback for the bounds object. - */ - _changed: function(bounds, isResized) { - this.isChanged = true; - if(this.bounds == bounds) - this.isResized = isResized || this.isResized; - }, - - /** - * If something changed, this method calls the refresh method that must be implemented by subclasses. - */ - update: function() { - if(this.isChanged) { - this.refresh(); - this.isChanged = false; - - //call update of all children - this.children.each(function(value) { - value.update(); - }); - } - }, - - /** - * Is called in update method, if isChanged is set to true. Sub classes should call the super class method. - */ - refresh: function() { - - }, - - /** - * @return {Array} Array of all child UIObjects. - */ - getChildren: function() { - return this.children.clone(); - }, - - /** - * @return {Array} Array of all parent UIObjects. - */ - getParents: function(){ - var parents = []; - var parent = this.parent; - while(parent){ - parents.push(parent); - parent = parent.parent; - } - return parents; - }, - - /** - * Returns TRUE if the given parent is one of the UIObjects parents or the UIObject themselves, otherwise FALSE. - * @param {UIObject} parent - * @return {Boolean} - */ - isParent: function(parent){ - var cparent = this; - while(cparent){ - if (cparent === parent){ - return true; - } - cparent = cparent.parent; - } - return false; - }, - - /** - * @return {String} Id of this UIObject - */ - getId: function() { - return this.id; - }, - - /** - * Method for accessing child uiObjects by id. - * @param {String} id - * @param {Boolean} deep - * - * @return {UIObject} If found, it returns the UIObject with id. - */ - getChildById: function(id, deep) { - return this.children.find(function(uiObj) { - if(uiObj.getId() === id) { - return uiObj; - } else { - if(deep) { - var obj = uiObj.getChildById(id, deep); - if(obj) { - return obj; - } - } - } - }); - }, - - /** - * Adds an UIObject to this UIObject and sets the parent of the - * added UIObject. It is also added to the SVG representation of this - * UIObject. - * @param {UIObject} uiObject - */ - add: function(uiObject) { - //add uiObject, if it is not already a child of this object - if (!(this.children.member(uiObject))) { - //if uiObject is child of another parent, remove it from that parent. - if(uiObject.parent) { - uiObject.remove(uiObject); - } - - //add uiObject to children - this.children.push(uiObject); - - //set parent reference - uiObject.parent = this; - - //add uiObject.node to this.node - uiObject.node = this.node.appendChild(uiObject.node); - - //register callback to get informed, if child is changed - uiObject.bounds.registerCallback(this._changedCallback); - - //uiObject.update(); - } else { - ORYX.Log.info("add: ORYX.Core.UIObject is already a child of this object."); - } - }, - - /** - * Removes UIObject from this UIObject. The SVG representation will also - * be removed from this UIObject's SVG representation. - * @param {UIObject} uiObject - */ - remove: function(uiObject) { - //if uiObject is a child of this object, remove it. - if (this.children.member(uiObject)) { - //remove uiObject from children - this.children = this._uiObjects.without(uiObject); - - //delete parent reference of uiObject - uiObject.parent = undefined; - - //delete uiObject.node from this.node - uiObject.node = this.node.removeChild(uiObject.node); - - //unregister callback to get informed, if child is changed - uiObject.bounds.unregisterCallback(this._changedCallback); - } else { - ORYX.Log.info("remove: ORYX.Core.UIObject is not a child of this object."); - } - - }, - - /** - * Calculates absolute bounds of this UIObject. - */ - absoluteBounds: function() { - if(this.parent) { - var absUL = this.absoluteXY(); - return new ORYX.Core.Bounds(absUL.x, absUL.y, - absUL.x + this.bounds.width(), - absUL.y + this.bounds.height()); - } else { - return this.bounds.clone(); - } - }, - - /** - * @return {Point} The absolute position of this UIObject. - */ - absoluteXY: function() { - if(this.parent) { - var pXY = this.parent.absoluteXY(); - var result = {}; - result.x = pXY.x + this.bounds.upperLeft().x; - result.y = pXY.y + this.bounds.upperLeft().y; - return result; - } else { - var result = {}; - result.x = this.bounds.upperLeft().x; - result.y = this.bounds.upperLeft().y; - return result; - } - }, - - /** - * @return {Point} The absolute position from the Center of this UIObject. - */ - absoluteCenterXY: function() { - if(this.parent) { - var pXY = this.parent.absoluteXY(); - var result = {}; - result.x = pXY.x + this.bounds.center().x; - result.y = pXY.y + this.bounds.center().y; - return result; - - } else { - var result = {}; - result.x = this.bounds.center().x; - result.y = this.bounds.center().y; - return result; - } - }, - - /** - * Hides this UIObject and all its children. - */ - hide: function() { - this.node.setAttributeNS(null, 'display', 'none'); - this.isVisible = false; - this.children.each(function(uiObj) { - uiObj.hide(); - }); - }, - - /** - * Enables visibility of this UIObject and all its children. - */ - show: function() { - this.node.setAttributeNS(null, 'display', 'inherit'); - this.isVisible = true; - this.children.each(function(uiObj) { - uiObj.show(); - }); - }, - - addEventHandlers: function(node) { - - node.addEventListener(ORYX.CONFIG.EVENT_MOUSEDOWN, this._delegateEvent.bind(this), false); - node.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this._delegateEvent.bind(this), false); - node.addEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this._delegateEvent.bind(this), false); - node.addEventListener(ORYX.CONFIG.EVENT_MOUSEOVER, this._delegateEvent.bind(this), false); - node.addEventListener(ORYX.CONFIG.EVENT_MOUSEOUT, this._delegateEvent.bind(this), false); - node.addEventListener('click', this._delegateEvent.bind(this), false); - node.addEventListener(ORYX.CONFIG.EVENT_DBLCLICK, this._delegateEvent.bind(this), false); - - }, - - _delegateEvent: function(event) { - if(this.eventHandlerCallback) { - this.eventHandlerCallback(event, this); - } - }, - - toString: function() { return "UIObject " + this.id } - }; - ORYX.Core.UIObject = Clazz.extend(ORYX.Core.UIObject);/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} - -/** - * Top Level uiobject. - * @class ORYX.Core.AbstractShape - * @extends ORYX.Core.UIObject - */ -ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend( -/** @lends ORYX.Core.AbstractShape.prototype */ -{ - - /** - * Constructor - */ - construct: function(options, stencil, facade) { - - arguments.callee.$.construct.apply(this, arguments); - - this.resourceId = ORYX.Editor.provideId(); //Id of resource in DOM - - // stencil reference - this._stencil = stencil; - // if the stencil defines a super stencil that should be used for its instances, set it. - if (this._stencil._jsonStencil.superId){ - stencilId = this._stencil.id() - superStencilId = stencilId.substring(0, stencilId.indexOf("#") + 1) + stencil._jsonStencil.superId; - stencilSet = this._stencil.stencilSet(); - this._stencil = stencilSet.stencil(superStencilId); - } - - //Hash map for all properties. Only stores the values of the properties. - this.properties = new Hash(); - this.propertiesChanged = new Hash(); - - // List of properties which are not included in the stencilset, - // but which gets (de)serialized - this.hiddenProperties = new Hash(); - - - //Initialization of property map and initial value. - this._stencil.properties().each((function(property) { - var key = property.prefix() + "-" + property.id(); - this.properties.set(key, property.value()); - this.propertiesChanged.set(key, true); - }).bind(this)); - - // if super stencil was defined, also regard stencil's properties: - if (stencil._jsonStencil.superId) { - stencil.properties().each((function(property) { - var key = property.prefix() + "-" + property.id(); - var value = property.value(); - var oldValue = this.properties.get(key); - this.properties.set(key,value); - this.propertiesChanged.set(key,true); - - // Raise an event, to show that the property has changed - // required for plugins like processLink.js - //window.setTimeout( function(){ - - this._delegateEvent({ - type : ORYX.CONFIG.EVENT_PROPERTY_CHANGED, - name : key, - value : value, - oldValue: oldValue - }); - - //}.bind(this), 10) - - }).bind(this)); - } - - }, - - layout: function() { - - }, - - /** - * Returns the stencil object specifiing the type of the shape. - */ - getStencil: function() { - return this._stencil; - }, - - /** - * - * @param {Object} resourceId - */ - getChildShapeByResourceId: function(resourceId) { - - resourceId = ERDF.__stripHashes(resourceId); - - return this.getChildShapes(true).find(function(shape) { - return shape.resourceId == resourceId - }); - }, - /** - * - * @param {Object} deep - * @param {Object} iterator - */ - getChildShapes: function(deep, iterator) { - var result = []; - - this.children.each(function(uiObject) { - if(uiObject instanceof ORYX.Core.Shape && uiObject.isVisible ) { - if(iterator) { - iterator(uiObject); - } - result.push(uiObject); - if(deep) { - result = result.concat(uiObject.getChildShapes(deep, iterator)); - } - } - }); - - return result; - }, - - /** - * @param {Object} shape - * @return {boolean} true if any of shape's childs is given shape - */ - hasChildShape: function(shape){ - return this.getChildShapes().any(function(child){ - return (child === shape) || child.hasChildShape(shape); - }); - }, - - /** - * - * @param {Object} deep - * @param {Object} iterator - */ - getChildNodes: function(deep, iterator) { - var result = []; - - this.children.each(function(uiObject) { - if(uiObject instanceof ORYX.Core.Node && uiObject.isVisible) { - if(iterator) { - iterator(uiObject); - } - result.push(uiObject); - } - if(uiObject instanceof ORYX.Core.Shape) { - if(deep) { - result = result.concat(uiObject.getChildNodes(deep, iterator)); - } - } - }); - - return result; - }, - - /** - * - * @param {Object} deep - * @param {Object} iterator - */ - getChildEdges: function(deep, iterator) { - var result = []; - - this.children.each(function(uiObject) { - if(uiObject instanceof ORYX.Core.Edge && uiObject.isVisible) { - if(iterator) { - iterator(uiObject); - } - result.push(uiObject); - } - if(uiObject instanceof ORYX.Core.Shape) { - if(deep) { - result = result.concat(uiObject.getChildEdges(deep, iterator)); - } - } - }); - - return result; - }, - - /** - * Returns a sorted array of ORYX.Core.Node objects. - * Ordered in z Order, the last object has the highest z Order. - */ - //TODO deep iterator - getAbstractShapesAtPosition: function() { - var x, y; - switch (arguments.length) { - case 1: - x = arguments[0].x; - y = arguments[0].y; - break; - case 2: //two or more arguments - x = arguments[0]; - y = arguments[1]; - break; - default: - throw "getAbstractShapesAtPosition needs 1 or 2 arguments!" - } - - if(this.isPointIncluded(x, y)) { - - var result = []; - result.push(this); - - //check, if one child is at that position - - - var childNodes = this.getChildNodes(); - var childEdges = this.getChildEdges(); - - [childNodes, childEdges].each(function(ne){ - var nodesAtPosition = new Hash(); - - ne.each(function(node) { - if(!node.isVisible){ return } - var candidates = node.getAbstractShapesAtPosition( x , y ); - if(candidates.length > 0) { - var nodesInZOrder = $A(node.node.parentNode.childNodes); - var zOrderIndex = nodesInZOrder.indexOf(node.node); - nodesAtPosition.set(zOrderIndex, candidates); - } - }); - - nodesAtPosition.keys().sort().each(function(key) { - result = result.concat(nodesAtPosition.get(key)); - }); - }); - - return result; - - } else { - return []; - } - }, - - /** - * - * @param key {String} Must be 'prefix-id' of property - * @param value {Object} Can be of type String or Number according to property type. - */ - setProperty: function(key, value, force) { - var oldValue = this.properties.get(key); - if(oldValue !== value || force === true) { - this.properties.set(key, value); - this.propertiesChanged.set(key, true); - this._changed(); - - // Raise an event, to show that the property has changed - //window.setTimeout( function(){ - - if (!this._isInSetProperty) { - this._isInSetProperty = true; - - this._delegateEvent({ - type : ORYX.CONFIG.EVENT_PROPERTY_CHANGED, - elements : [this], - name : key, - value : value, - oldValue: oldValue - }); - - delete this._isInSetProperty; - } - //}.bind(this), 10) - } - }, - - /** - * Returns TRUE if one of the properties is flagged as dirty - * @return {boolean} - */ - isPropertyChanged: function(){ - return this.propertiesChanged.any(function(property){ return property.value }); - }, - - /** - * - * @param {String} Must be 'prefix-id' of property - * @param {Object} Can be of type String or Number according to property type. - */ - setHiddenProperty: function(key, value) { - // IF undefined, Delete - if (value === undefined) { - this.hiddenProperties.unset(key); - return; - } - var oldValue = this.hiddenProperties.get(key); - if (oldValue !== value) { - this.hiddenProperties.set(key, value); - } - }, - /** - * Calculate if the point is inside the Shape - * @param {Point} - */ - isPointIncluded: function(pointX, pointY, absoluteBounds) { - var absBounds = absoluteBounds ? absoluteBounds : this.absoluteBounds(); - return absBounds.isIncluded(pointX, pointY); - - }, - - /** - * Get the serialized object - * return Array with hash-entrees (prefix, name, value) - * Following values will given: - * Type - * Properties - */ - serialize: function() { - var serializedObject = []; - - // Add the type - serializedObject.push({name: 'type', prefix:'oryx', value: this.getStencil().id(), type: 'literal'}); - - // Add hidden properties - this.hiddenProperties.each(function(prop){ - serializedObject.push({name: prop.key.replace("oryx-", ""), prefix: "oryx", value: prop.value, type: 'literal'}); - }.bind(this)); - - // Add all properties - this.getStencil().properties().each((function(property){ - - var prefix = property.prefix(); // Get prefix - var name = property.id(); // Get name - - //if(typeof this.properties[prefix+'-'+name] == 'boolean' || this.properties[prefix+'-'+name] != "") - serializedObject.push({name: name, prefix: prefix, value: this.properties.get(prefix+'-'+name), type: 'literal'}); - - }).bind(this)); - - return serializedObject; - }, - - - deserialize: function(serialize){ - // Search in Serialize - var initializedDocker = 0; - - // Sort properties so that the hidden properties are first in the list - serialize = serialize.sort(function(a,b){ a = Number(this.properties.keys().member(a.prefix+"-"+a.name)); b = Number(this.properties.keys().member(b.prefix+"-"+b.name)); return a > b ? 1 : (a < b ? -1 : 0) }.bind(this)); - - serialize.each((function(obj){ - - var name = obj.name; - var prefix = obj.prefix; - var value = obj.value; - - // Complex properties can be real json objects, encode them to a string - if (Object.prototype.toString.call(value) === "Object") value = JSON.stringify(value); - - switch(prefix + "-" + name){ - case 'raziel-parent': - // Set parent - if(!this.parent) {break}; - - // Set outgoing Shape - var parent = this.getCanvas().getChildShapeByResourceId(value); - if(parent) { - parent.add(this); - } - - break; - default: - // If list, eval as an array - var prop = this.getStencil().property(prefix+"-"+name); - if (prop && prop.isList() && typeof value === "string"){ - if ((value||"").strip()&&!value.startsWith("[")&&!value.startsWith("]")) - value = "[\""+value.strip()+"\"]"; - value = ((value||"").strip()||"[]").evalJSON(); - } - - // Set property - if(this.properties.keys().member(prefix+"-"+name)) { - this.setProperty(prefix+"-"+name, value); - } else if(!(name === "bounds"||name === "parent"||name === "target"||name === "dockers"||name === "docker"||name === "outgoing"||name === "incoming")) { - this.setHiddenProperty(prefix+"-"+name, value); - } - - } - }).bind(this)); - }, - - toString: function() { return "ORYX.Core.AbstractShape " + this.id }, - - /** - * Converts the shape to a JSON representation. - * @return {Object} A JSON object with included ORYX.Core.AbstractShape.JSONHelper and getShape() method. - */ - toJSON: function() { - - //upgrade to prototype 1.6/1.7 breaks the jquery extend call. rebuilding the properties here. - var mergedProperties = this.properties.merge(this.hiddenProperties); - var resultProperties = new Hash(); - mergedProperties.each(function(pair){ - var key = pair.key; - var value = pair.value; - - //If complex property, value should be a json object - if ( this.getStencil().property(key) - && this.getStencil().property(key).type() === ORYX.CONFIG.TYPE_COMPLEX - && Object.prototype.toString.call(value) === "String"){ - - try {value = JSON.parse(value);} catch(error){} - - // Parse date - } else if (value instanceof Date&&this.getStencil().property(key)){ - try { - value = value.format(this.getStencil().property(key).dateFormat()); - } catch(e){} - } - - // Takes "my_property" instead of "oryx-my_property" as key - key = key.replace(/^[\w_]+-/, ""); - resultProperties.set(key,value); - - }.bind(this)); - - var json = { - resourceId: this.resourceId, - properties: resultProperties.toObject(), - stencil: { - id: this.getStencil().idWithoutNs() - }, - childShapes: this.getChildShapes().map(function(shape){ - return shape.toJSON(); - }) - }; - - if(this.getOutgoingShapes){ - json.outgoing = this.getOutgoingShapes().map(function(shape){ - return { - resourceId: shape.resourceId - }; - }); - } - - if(this.bounds){ - json.bounds = { - lowerRight: this.bounds.lowerRight(), - upperLeft: this.bounds.upperLeft() - }; - } - - if(this.dockers){ - json.dockers = this.dockers.map(function(docker){ - var d = docker.getDockedShape() && docker.referencePoint ? docker.referencePoint : docker.bounds.center(); - d.getDocker = function(){return docker;}; - return d; - }); - } - - jQuery.extend(json, ORYX.Core.AbstractShape.JSONHelper); - - // do not pollute the json attributes (for serialization), so put the corresponding - // shape is encapsulated in a method - json.getShape = function(){ - return this; - }.bind(this); - - return json; - } - }); - -/** - * @namespace Collection of methods which can be used on a shape json object (ORYX.Core.AbstractShape#toJSON()). - * @example - * jQuery.extend(shapeAsJson, ORYX.Core.AbstractShape.JSONHelper); - */ -ORYX.Core.AbstractShape.JSONHelper = { - /** - * Iterates over each child shape. - * @param {Object} iterator Iterator function getting a child shape and his parent as arguments. - * @param {boolean} [deep=false] Iterate recursively (childShapes of childShapes) - * @param {boolean} [modify=false] If true, the result of the iterator function is taken as new shape, return false to delete it. This enables modifying the object while iterating through the child shapes. - * @example - * // Increases the lowerRight x value of each direct child shape by one. - * myShapeAsJson.eachChild(function(shape, parentShape){ - * shape.bounds.lowerRight.x = shape.bounds.lowerRight.x + 1; - * return shape; - * }, false, true); - */ - eachChild: function(iterator, deep, modify){ - if(!this.childShapes) return; - - var newChildShapes = []; //needed if modify = true - - this.childShapes.each(function(shape){ - if (!(shape.eachChild instanceof Function)){ - jQuery.extend(shape, ORYX.Core.AbstractShape.JSONHelper); - } - var res = iterator(shape, this); - if(res) newChildShapes.push(res); //if false is returned, and modify = true, current shape is deleted. - - if(deep) shape.eachChild(iterator, deep, modify); - }.bind(this)); - - if(modify) this.childShapes = newChildShapes; - }, - - getShape: function(){ - return null; - }, - getChildShapes: function(deep){ - var allShapes = this.childShapes; - - if(deep){ - this.eachChild(function(shape){ - if (!(shape.getChildShapes instanceof Function)){ - jQuery.extend(shape, ORYX.Core.AbstractShape.JSONHelper); - } - allShapes = allShapes.concat(shape.getChildShapes(deep)); - }, true); - } - - return allShapes; - }, - - /** - * @return {String} Serialized JSON object - */ - serialize: function(){ - return JSON.stringify(this); - } - } -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} - -/** - @namespace Namespace for the Oryx core elements. - @name ORYX.Core -*/ -if(!ORYX.Core) {ORYX.Core = {};} - -/** - * @class Oryx canvas. - * @extends ORYX.Core.AbstractShape - * - */ -ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({ - /** @lends ORYX.Core.Canvas.prototype */ - - /** - * Defines the current zoom level - */ - zoomLevel:1, - - /** - * Constructor - */ - construct: function(options, stencil, facade) { - arguments.callee.$.construct.apply(this, arguments); - - if(!(options && options.width && options.height)) { - - ORYX.Log.fatal("Canvas is missing mandatory parameters options.width and options.height."); - return; - } - this.facade = facade; - //TODO: set document resource id - this.resourceId = options.id; - - this.nodes = []; - - this.edges = []; - - // Row highlighting states - this.colHighlightState = 0; - - this.colHighlightEnabled = false; - - //init svg document - this.rootNode = ORYX.Editor.graft("http://www.w3.org/2000/svg", options.parentNode, - ['svg', {id: this.id, width: options.width, height: options.height}, - ['defs', {}] - ]); - - this.rootNode.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); - this.rootNode.setAttribute("xmlns:svg", "http://www.w3.org/2000/svg"); - - this._htmlContainer = ORYX.Editor.graft("http://www.w3.org/1999/xhtml", options.parentNode, - ['div', {id: "oryx_canvas_htmlContainer", style:"position:absolute; top:5px"}]); - - // Additional SVG-node BELOW the stencils to allow underlays (if that is even a word) by plugins - this.underlayNode = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.rootNode, - ['svg', {id: "underlay-container"}]); - - // Create 2 svg-elements in the svg-container - this.columnHightlight1 = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.underlayNode, - ['rect', {x: 0, width: ORYX.CONFIG.FORM_ROW_WIDTH + 35, height: "100%", style: "fill: #fff6d5", visibility: "hidden"}]); - - this.columnHightlight2 = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.underlayNode, - ['rect', {x: ORYX.CONFIG.FORM_ROW_WIDTH + 35, width: ORYX.CONFIG.FORM_ROW_WIDTH + 25, height: "100%", style: "fill: #fff6d5", visibility: "hidden"}]); - - this.node = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.rootNode, - ['g', {}, - ['g', {"class": "stencils"}, - ['g', {"class": "me"}], - ['g', {"class": "children"}], - ['g', {"class": "edge"}] - ], - ['g', {"class":"svgcontainer"}] - ]); - - /* - var off = 2 * ORYX.CONFIG.GRID_DISTANCE; - var size = 3; - var d = ""; - for(var i = 0; i <= options.width; i += off) - for(var j = 0; j <= options.height; j += off) - d = d + "M" + (i - size) + " " + j + " l" + (2*size) + " 0 m" + (-size) + " " + (-size) + " l0 " + (2*size) + " m0" + (-size) + " "; - - ORYX.Editor.graft("http://www.w3.org/2000/svg", this.node.firstChild.firstChild, - ['path', {d:d , stroke:'#000000', 'stroke-width':'0.15px'},]); - */ - - //Global definition of default font for shapes - //Definitions in the SVG definition of a stencil will overwrite these settings for - // that stencil. - /*if(navigator.platform.indexOf("Mac") > -1) { - this.node.setAttributeNS(null, 'stroke', 'black'); - this.node.setAttributeNS(null, 'stroke-width', '0.5px'); - this.node.setAttributeNS(null, 'font-family', 'Skia'); - //this.node.setAttributeNS(null, 'letter-spacing', '2px'); - this.node.setAttributeNS(null, 'font-size', ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT); - } else { - this.node.setAttributeNS(null, 'stroke', 'none'); - this.node.setAttributeNS(null, 'font-family', 'Verdana'); - this.node.setAttributeNS(null, 'font-size', ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT); - }*/ - - this.node.setAttributeNS(null, 'stroke', 'none'); - this.node.setAttributeNS(null, 'font-family', 'Verdana, sans-serif'); - this.node.setAttributeNS(null, 'font-size-adjust', 'none'); - this.node.setAttributeNS(null, 'font-style', 'normal'); - this.node.setAttributeNS(null, 'font-variant', 'normal'); - this.node.setAttributeNS(null, 'font-weight', 'normal'); - this.node.setAttributeNS(null, 'line-heigth', 'normal'); - - this.node.setAttributeNS(null, 'font-size', ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT); - - this.bounds.set(0,0,options.width, options.height); - - this.addEventHandlers(this.rootNode.parentNode); - - //disable context menu - this.rootNode.oncontextmenu = function() {return false;}; - }, - - focus: function(){ - - }, - - setHightlightState: function(state) { - if(this.colHighlightEnabled && this.colHighlightState != state) { - if(state == 0) { - this.columnHightlight1.setAttribute("visibility", "hidden"); - this.columnHightlight2.setAttribute("visibility", "hidden"); - } else if(state == 1) { - this.columnHightlight1.setAttribute("visibility", "visible"); - this.columnHightlight2.setAttribute("visibility", "hidden"); - } else if(state == 2) { - this.columnHightlight1.setAttribute("visibility", "hidden"); - this.columnHightlight2.setAttribute("visibility", "visible"); - } else if(state == 3) { - this.columnHightlight1.setAttribute("visibility", "visible"); - this.columnHightlight2.setAttribute("visibility", "visible"); - } - this.colHighlightState = state; - } - }, - - setHightlightStateBasedOnX : function(x) { - if(x > ORYX.CONFIG.FORM_ROW_WIDTH + 30) { - this.setHightlightState(2); - } else { - this.setHightlightState(1); - } - }, - - update: function() { - - this.nodes.each(function(node) { - this._traverseForUpdate(node); - }.bind(this)); - - // call stencil's layout callback - // (needed for row layouting of xforms) - //this.getStencil().layout(this); - - var layoutEvents = this.getStencil().layout(); - - if(layoutEvents) { - layoutEvents.each(function(event) { - - // setup additional attributes - event.shape = this; - event.forceExecution = true; - event.target = this.rootNode; - - // do layouting - - this._delegateEvent(event); - }.bind(this)) - } - - this.nodes.invoke("_update"); - - this.edges.invoke("_update", true); - - /*this.children.each(function(child) { - child._update(); - });*/ - }, - - _traverseForUpdate: function(shape) { - var childRet = shape.isChanged; - shape.getChildNodes(false, function(child) { - if(this._traverseForUpdate(child)) { - childRet = true; - } - }.bind(this)); - - if(childRet) { - shape.layout(); - return true; - } else { - return false; - } - }, - - layout: function() { - - - - }, - - /** - * - * @param {Object} deep - * @param {Object} iterator - */ - getChildNodes: function(deep, iterator) { - if(!deep && !iterator) { - return this.nodes.clone(); - } else { - var result = []; - this.nodes.each(function(uiObject) { - if(iterator) { - iterator(uiObject); - } - result.push(uiObject); - - if(deep && uiObject instanceof ORYX.Core.Shape) { - result = result.concat(uiObject.getChildNodes(deep, iterator)); - } - }); - - return result; - } - }, - - /** - * buggy crap! use base class impl instead! - * @param {Object} iterator - */ -/* getChildEdges: function(iterator) { - if(iterator) { - this.edges.each(function(edge) { - iterator(edge); - }); - } - - return this.edges.clone(); - }, -*/ - /** - * Overrides the UIObject.add method. Adds uiObject to the correct sub node. - * @param {UIObject} uiObject - */ - add: function(uiObject, index, silent) { - //if uiObject is child of another UIObject, remove it. - if(uiObject instanceof ORYX.Core.UIObject) { - if (!(this.children.member(uiObject))) { - //if uiObject is child of another parent, remove it from that parent. - if(uiObject.parent) { - uiObject.parent.remove(uiObject, true); - } - - //add uiObject to the Canvas - //add uiObject to this Shape - if(index != undefined) - this.children.splice(index, 0, uiObject); - else - this.children.push(uiObject); - - //set parent reference - uiObject.parent = this; - - //add uiObject.node to this.node depending on the type of uiObject - if(uiObject instanceof ORYX.Core.Shape) { - if(uiObject instanceof ORYX.Core.Edge) { - uiObject.addMarkers(this.rootNode.getElementsByTagNameNS(NAMESPACE_SVG, "defs")[0]); - uiObject.node = this.node.childNodes[0].childNodes[2].appendChild(uiObject.node); - this.edges.push(uiObject); - } else { - uiObject.node = this.node.childNodes[0].childNodes[1].appendChild(uiObject.node); - this.nodes.push(uiObject); - } - } else { //UIObject - uiObject.node = this.node.appendChild(uiObject.node); - } - - uiObject.bounds.registerCallback(this._changedCallback); - - if(this.eventHandlerCallback && silent !== true) - this.eventHandlerCallback({type:ORYX.CONFIG.EVENT_SHAPEADDED,shape:uiObject}) - } else { - - ORYX.Log.warn("add: ORYX.Core.UIObject is already a child of this object."); - } - } else { - - ORYX.Log.fatal("add: Parameter is not of type ORYX.Core.UIObject."); - } - }, - - /** - * Overrides the UIObject.remove method. Removes uiObject. - * @param {UIObject} uiObject - */ - remove: function(uiObject, silent) { - //if uiObject is a child of this object, remove it. - if (this.children.member(uiObject)) { - //remove uiObject from children - var parent = uiObject.parent; - - this.children = this.children.without(uiObject); - - //delete parent reference of uiObject - uiObject.parent = undefined; - - //delete uiObject.node from this.node - if(uiObject instanceof ORYX.Core.Shape) { - if(uiObject instanceof ORYX.Core.Edge) { - uiObject.removeMarkers(); - uiObject.node = this.node.childNodes[0].childNodes[2].removeChild(uiObject.node); - this.edges = this.edges.without(uiObject); - } else { - uiObject.node = this.node.childNodes[0].childNodes[1].removeChild(uiObject.node); - this.nodes = this.nodes.without(uiObject); - } - } else { //UIObject - uiObject.node = this.node.removeChild(uiObject.node); - } - - if(this.eventHandlerCallback && silent !== true) - this.eventHandlerCallback({type:ORYX.CONFIG.EVENT_SHAPEREMOVED,shape:uiObject, parent:parent}); - - uiObject.bounds.unregisterCallback(this._changedCallback); - } else { - - ORYX.Log.warn("remove: ORYX.Core.UIObject is not a child of this object."); - } - }, - - removeAll: function() { - var childShapes = this.getChildShapes(); - for (var i = 0; i < childShapes.length; i++) { - var childObject = childShapes[i]; - this.remove(childObject); - } - }, - - /** - * Creates shapes out of the given collection of shape objects and adds them to the canvas. - * @example - * canvas.addShapeObjects({ - bounds:{ lowerRight:{ y:510, x:633 }, upperLeft:{ y:146, x:210 } }, - resourceId:"oryx_F0715955-50F2-403D-9851-C08CFE70F8BD", - childShapes:[], - properties:{}, - stencil:{ - id:"Subprocess" - }, - outgoing:[{resourceId: 'aShape'}], - target: {resourceId: 'aShape'} - }); - * @param {Object} shapeObjects - * @param {Function} [eventHandler] An event handler passed to each newly created shape (as eventHandlerCallback) - * @return {Array} A collection of ORYX.Core.Shape - * @methodOf ORYX.Core.Canvas.prototype - */ - addShapeObjects: function(shapeObjects, eventHandler){ - if(!shapeObjects) return; - - this.initializingShapes = true; - - /*FIXME This implementation is very evil! At first, all shapes are created on - canvas. In a second step, the attributes are applied. There must be a distinction - between the configuration phase (where the outgoings, for example, are just named), - and the creation phase (where the outgoings are evaluated). This must be reflected - in code to provide a nicer API/ implementation!!! */ - - var addShape = function(shape, parent){ - // Create a new Stencil - var stencil = ORYX.Core.StencilSet.stencil(this.getStencil().namespace() + shape.stencil.id ); - - // Create a new Shape - var ShapeClass = (stencil.type() == "node") ? ORYX.Core.Node : ORYX.Core.Edge; - var newShape = new ShapeClass( - {'eventHandlerCallback': eventHandler}, - stencil, this.facade); - - // Set the resource id - newShape.resourceId = shape.resourceId; - newShape.node.id = "svg-" + shape.resourceId; - - // Set parent to json object to be used later - // Due to the nested json structure, normally shape.parent is not set/ must not be set. - // In special cases, it can be easier to set this directly instead of a nested structure. - shape.parent = "#" + ((shape.parent && shape.parent.resourceId) || parent.resourceId); - - // Add the shape to the canvas - this.add( newShape ); - - return { - json: shape, - object: newShape - }; - }.bind(this); - - /** Builds up recursively a flatted array of shapes, including a javascript object and json representation - * @param {Object} shape Any object that has Object#childShapes - */ - var addChildShapesRecursively = function(shape){ - var addedShapes = []; - - if (shape.childShapes && shape.childShapes.constructor == String) - { - shape.childShapes = JSON.parse(shape.childShapes); - } - - shape.childShapes.each(function(childShape){ - addedShapes.push(addShape(childShape, shape)); - addedShapes = addedShapes.concat(addChildShapesRecursively(childShape)); - }); - - return addedShapes; - }.bind(this); - - var shapes = addChildShapesRecursively({ - childShapes: shapeObjects, - resourceId: this.resourceId - }); - - - // prepare deserialisation parameter - shapes.each(function(shape){ - var properties = []; - for(field in shape.json.properties){ - properties.push({ - prefix: 'oryx', - name: field, - value: shape.json.properties[field] - }); - } - - // Outgoings - shape.json.outgoing.each(function(out){ - properties.push({ - prefix: 'raziel', - name: 'outgoing', - value: "#"+out.resourceId - }); - }); - - // Target - // (because of a bug, the first outgoing is taken when there is no target, - // can be removed after some time) - if(shape.object instanceof ORYX.Core.Edge) { - var target = shape.json.target || shape.json.outgoing[0]; - if(target){ - properties.push({ - prefix: 'raziel', - name: 'target', - value: "#"+target.resourceId - }); - } - } - - // Bounds - if (shape.json.bounds) { - properties.push({ - prefix: 'oryx', - name: 'bounds', - value: shape.json.bounds.upperLeft.x + "," + shape.json.bounds.upperLeft.y + "," + shape.json.bounds.lowerRight.x + "," + shape.json.bounds.lowerRight.y - }); - } - - //Dockers [{x:40, y:50}, {x:30, y:60}] => "40 50 30 60 #" - if(shape.json.dockers){ - properties.push({ - prefix: 'oryx', - name: 'dockers', - value: shape.json.dockers.inject("", function(dockersStr, docker){ - return dockersStr + docker.x + " " + docker.y + " "; - }) + " #" - }); - } - - //Parent - properties.push({ - prefix: 'raziel', - name: 'parent', - value: shape.json.parent - }); - - shape.__properties = properties; - }.bind(this) - ); - - // Deserialize the properties from the shapes - // This can't be done earlier because Shape#deserialize expects that all referenced nodes are already there - - // first, deserialize all nodes - shapes.each(function(shape) { - if(shape.object instanceof ORYX.Core.Node) { - shape.object.deserialize(shape.__properties, shape.json); - } - }); - - // second, deserialize all edges - shapes.each(function(shape) { - if(shape.object instanceof ORYX.Core.Edge) { - shape.object.deserialize(shape.__properties, shape.json); - shape.object._oldBounds = shape.object.bounds.clone(); - shape.object._update(); - } - }); - - delete this.initializingShapes; - return shapes.pluck("object"); - }, - - /** - * Updates the size of the canvas, regarding to the containg shapes. - */ - updateSize: function(){ - // Check the size for the canvas - var maxWidth = 0; - var maxHeight = 0; - var offset = 100; - this.getChildShapes(true, function(shape){ - var b = shape.bounds; - maxWidth = Math.max( maxWidth, b.lowerRight().x + offset) - maxHeight = Math.max( maxHeight, b.lowerRight().y + offset) - }); - - if( this.bounds.width() < maxWidth || this.bounds.height() < maxHeight ){ - this.setSize({width: Math.max(this.bounds.width(), maxWidth), height: Math.max(this.bounds.height(), maxHeight)}) - } - }, - - getRootNode: function() { - return this.rootNode; - }, - - getUnderlayNode: function() { - return this.underlayNode; - }, - - getSvgContainer: function() { - return this.node.childNodes[1]; - }, - - getHTMLContainer: function() { - return this._htmlContainer; - }, - - /** - * Return all elements of the same highest level - * @param {Object} elements - */ - getShapesWithSharedParent: function(elements) { - - // If there is no elements, return [] - if(!elements || elements.length < 1) { return []; } - // If there is one element, return this element - if(elements.length == 1) { return elements;} - - return elements.findAll(function(value){ - var parentShape = value.parent; - while(parentShape){ - if(elements.member(parentShape)) return false; - parentShape = parentShape.parent; - } - return true; - }); - - }, - - setSize: function(size, dontSetBounds) { - if(!size || !size.width || !size.height){return;}; - - if(this.rootNode.parentNode){ - this.rootNode.parentNode.style.width = size.width + 'px'; - this.rootNode.parentNode.style.height = size.height + 'px'; - } - - this.rootNode.setAttributeNS(null, 'width', size.width); - this.rootNode.setAttributeNS(null, 'height', size.height); - - //this._htmlContainer.style.top = "-" + (size.height + 4) + 'px'; - if( !dontSetBounds ){ - this.bounds.set({a:{x:0,y:0},b:{x:size.width/this.zoomLevel,y:size.height/this.zoomLevel}}); - } - }, - - /** - * Returns an SVG document of the current process. - * @param {Boolean} escapeText Use true, if you want to parse it with an XmlParser, - * false, if you want to use the SVG document in browser on client side. - */ - getSVGRepresentation: function(escapeText) { - // Get the serialized svg image source - var svgClone = this.getRootNode().cloneNode(true); - - this._removeInvisibleElements(svgClone); - - var x1, y1, x2, y2; - this.getChildShapes(true).each(function(shape) { - var absBounds = shape.absoluteBounds(); - var ul = absBounds.upperLeft(); - var lr = absBounds.lowerRight(); - if(x1 == undefined) { - x1 = ul.x; - y1 = ul.y; - x2 = lr.x; - y2 = lr.y; - } else { - x1 = Math.min(x1, ul.x); - y1 = Math.min(y1, ul.y); - x2 = Math.max(x2, lr.x); - y2 = Math.max(y2, lr.y); - } - }); - - var margin = 50; - var width, height, tx, ty; - if(x1 == undefined) { - width = 0; - height = 0; - tx = 0; - ty = 0; - } else { - width = x2; - height = y2; - tx = -x1+margin/2; - ty = -y1+margin/2; - } - - // Set the width and height - svgClone.setAttributeNS(null, 'width', width + margin); - svgClone.setAttributeNS(null, 'height', height + margin); - - //remove scale factor - svgClone.childNodes[1].removeAttributeNS(null, 'transform'); - - try{ - var svgCont = svgClone.childNodes[1].childNodes[1]; - svgCont.parentNode.removeChild(svgCont); - } catch(e) {} - - if(escapeText) { - $A(svgClone.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'tspan')).each(function(elem) { - elem.textContent = elem.textContent.escapeHTML(); - }); - - $A(svgClone.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'text')).each(function(elem) { - if(elem.childNodes.length == 0) - elem.textContent = elem.textContent.escapeHTML(); - }); - } - - // generating absolute urls for the pdf-exporter - $A(svgClone.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'image')).each(function(elem) { - var href = elem.getAttributeNS("http://www.w3.org/1999/xlink","href"); - - if(!href.match("^(http|https)://")) { - href = window.location.protocol + "//" + window.location.host + href; - elem.setAttributeNS("http://www.w3.org/1999/xlink", "href", href); - } - }); - - - // escape all links - $A(svgClone.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'a')).each(function(elem) { - elem.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", (elem.getAttributeNS("http://www.w3.org/1999/xlink","href")||"").escapeHTML()); - }); - - return svgClone; - }, - - /** - * Removes all nodes (and its children) that has the - * attribute visibility set to "hidden" - */ - _removeInvisibleElements: function(element) { - var index = 0; - while(index < element.childNodes.length) { - var child = element.childNodes[index]; - if(child.getAttributeNS && - child.getAttributeNS(null, "visibility") === "hidden") { - element.removeChild(child); - } else { - this._removeInvisibleElements(child); - index++; - } - } - - }, - - /** - * This method checks all shapes on the canvas and removes all shapes that - * contain invalid bounds values or dockers values(NaN) - */ - /*cleanUp: function(parent) { - if (!parent) { - parent = this; - } - parent.getChildShapes().each(function(shape){ - var a = shape.bounds.a; - var b = shape.bounds.b; - if (isNaN(a.x) || isNaN(a.y) || isNaN(b.x) || isNaN(b.y)) { - parent.remove(shape); - } - else { - shape.getDockers().any(function(docker) { - a = docker.bounds.a; - b = docker.bounds.b; - if (isNaN(a.x) || isNaN(a.y) || isNaN(b.x) || isNaN(b.y)) { - parent.remove(shape); - return true; - } - return false; - }); - shape.getMagnets().any(function(magnet) { - a = magnet.bounds.a; - b = magnet.bounds.b; - if (isNaN(a.x) || isNaN(a.y) || isNaN(b.x) || isNaN(b.y)) { - parent.remove(shape); - return true; - } - return false; - }); - this.cleanUp(shape); - } - }.bind(this)); - },*/ - - _delegateEvent: function(event) { - if(this.eventHandlerCallback && ( event.target == this.rootNode || event.target == this.rootNode.parentNode )) { - this.eventHandlerCallback(event, this); - } - }, - - toString: function() { return "Canvas " + this.id }, - - /** - * Calls {@link ORYX.Core.AbstractShape#toJSON} and adds some stencil set information. - */ - toJSON: function() { - var json = arguments.callee.$.toJSON.apply(this, arguments); - -// if(ORYX.CONFIG.STENCILSET_HANDLER.length > 0) { -// json.stencilset = { -// url: this.getStencil().stencilSet().namespace() -// }; -// } else { - json.stencilset = { - url: this.getStencil().stencilSet().source(), - namespace: this.getStencil().stencilSet().namespace() - }; -// } - - - return json; - } - });/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -var idCounter = 0; -var ID_PREFIX = "resource"; - -/** - * Main initialization method. To be called when loading - * of the document, including all scripts, is completed. - */ -function init() { - - ORYX.Log.debug("Querying editor instances"); - - // Hack for WebKit to set the SVGElement-Classes - ORYX.Editor.setMissingClasses(); - - // If someone wants to create the editor instance himself - if (window.onOryxResourcesLoaded) { - window.onOryxResourcesLoaded(); - } - // Else fetch the model from server and display editor - else { - var modelId = window.location.search.substring(4); - var modelUrl = "./service/model/" + modelId + "/json"; - - ORYX.Editor.createByUrl(modelUrl); - } -} - -/** - @namespace Global Oryx name space - @name ORYX -*/ -if(!ORYX) {var ORYX = {};} - -/** - * The Editor class. - * @class ORYX.Editor - * @extends Clazz - * @param {Object} config An editor object, passed to {@link ORYX.Editor#loadSerialized} - * @param {String} config.id Any ID that can be used inside the editor. If fullscreen=false, any HTML node with this id must be present to render the editor to this node. - * @param {boolean} [config.fullscreen=true] Render editor in fullscreen mode or not. - * @param {String} config.stencilset.url Stencil set URL. - * @param {String} [config.stencil.id] Stencil type used for creating the canvas. - * @param {Object} config.properties Any properties applied to the canvas. -*/ -ORYX.Editor = { - /** @lends ORYX.Editor.prototype */ - // Defines the global dom event listener - DOMEventListeners: new Hash(), - - // Defines the selection - selection: [], - - // Defines the current zoom level - zoomLevel:1.0, - - construct: function(config) { - - // initialization. - this._eventsQueue = []; - this.loadedPlugins = []; - this.pluginsData = []; - - - //meta data about the model for the signavio warehouse - //directory, new, name, description, revision, model (the model data) - - var model = config; - - this.id = model.modelId; - - if(config.model) { - model = config.model; - } - - if(!this.id) { - this.id = model.id; - if(!this.id) { - this.id = ORYX.Editor.provideId(); - } - } - - // Defines if the editor should be fullscreen or not - this.fullscreen = config.fullscreen !== false; - - // Initialize the eventlistener - this._initEventListener(); - - // CREATES the canvas - this._createCanvas(model.stencil ? model.stencil.id : null, model.properties); - - // GENERATES the whole EXT.VIEWPORT - this._generateGUI(); - - // Initializing of a callback to check loading ends - var loadPluginFinished = false; - var loadContentFinished = false; - var initFinished = function(){ - if( !loadPluginFinished || !loadContentFinished ){ return } - this._finishedLoading(); - }.bind(this) - - // LOAD the plugins - window.setTimeout(function(){ - this.loadPlugins(); - loadPluginFinished = true; - initFinished(); - }.bind(this), 100); - - // LOAD the content of the current editor instance - window.setTimeout(function(){ - this.loadSerialized(model, true); // Request the meta data as well - this.getCanvas().update(); - loadContentFinished = true; - initFinished(); - this.handleEvents({type: ORYX.CONFIG.EVENT_EDITOR_INIT_COMPLETED}); - }.bind(this), 200); - }, - - _finishedLoading: function() { - // Raise Loaded Event - this.handleEvents( {type:ORYX.CONFIG.EVENT_LOADED} ) - }, - - _initEventListener: function(){ - - // Register on Events - - document.documentElement.addEventListener(ORYX.CONFIG.EVENT_KEYDOWN, this.catchKeyDownEvents.bind(this), false); - document.documentElement.addEventListener(ORYX.CONFIG.EVENT_KEYUP, this.catchKeyUpEvents.bind(this), false); - - // Enable Key up and down Event - this._keydownEnabled = true; - this._keyupEnabled = true; - - this.DOMEventListeners.set(ORYX.CONFIG.EVENT_MOUSEDOWN,[]); - this.DOMEventListeners.set(ORYX.CONFIG.EVENT_MOUSEUP,[]); - this.DOMEventListeners.set(ORYX.CONFIG.EVENT_MOUSEOVER,[]); - this.DOMEventListeners.set(ORYX.CONFIG.EVENT_MOUSEOUT,[]); - this.DOMEventListeners.set(ORYX.CONFIG.EVENT_SELECTION_CHANGED,[]); - this.DOMEventListeners.set(ORYX.CONFIG.EVENT_MOUSEMOVE, []); - - }, - - /** - * Generate the whole viewport of the - * Editor and initialized the Ext-Framework - * - */ - _generateGUI: function() { - - // Defines the layout height if it's NOT fullscreen - var layoutHeight = ORYX.CONFIG.WINDOW_HEIGHT; - var canvasParent = this.getCanvas().rootNode.parentNode; - - jQuery("#canvasSection").append(canvasParent); - if (canvasParent.parentNode) { - // Set the editor to the center, and refresh the size - canvasParent.parentNode.setAttributeNS(null, 'align', 'center'); - canvasParent.setAttributeNS(null, 'align', 'left'); - this.getCanvas().setSize({ - width : ORYX.CONFIG.CANVAS_WIDTH, - height : ORYX.CONFIG.CANVAS_HEIGHT - }); - } - - }, - - getAvailablePlugins: function(){ - var curAvailablePlugins=ORYX.availablePlugins.clone(); - curAvailablePlugins.each(function(plugin){ - if(this.loadedPlugins.find(function(loadedPlugin){ - return loadedPlugin.type==this.name; - }.bind(plugin))){ - plugin.engaged=true; - }else{ - plugin.engaged=false; - } - }.bind(this)); - return curAvailablePlugins; - }, - - loadScript: function (url, callback){ - var script = document.createElement("script") - script.type = "text/javascript"; - if (script.readyState){ //IE - script.onreadystatechange = function(){ - if (script.readyState == "loaded" || script.readyState == "complete"){ - script.onreadystatechange = null; - callback(); - } - }; - } else { //Others - script.onload = function(){ - callback(); - }; - } - script.src = url; - document.getElementsByTagName("head")[0].appendChild(script); - }, - /** - * activate Plugin - * - * @param {String} name - * @param {Function} callback - * callback(sucess, [errorCode]) - * errorCodes: NOTUSEINSTENCILSET, REQUIRESTENCILSET, NOTFOUND, YETACTIVATED - */ - activatePluginByName: function(name, callback, loadTry){ - - var match=this.getAvailablePlugins().find(function(value){return value.name==name}); - if(match && (!match.engaged || (match.engaged==='false'))){ - var loadedStencilSetsNamespaces = this.getStencilSets().keys(); - var facade = this._getPluginFacade(); - var newPlugin; - var me=this; - ORYX.Log.debug("Initializing plugin '%0'", match.name); - - if (!match.requires || !match.requires.namespaces || match.requires.namespaces.any(function(req){ return loadedStencilSetsNamespaces.indexOf(req) >= 0 }) ){ - if(!match.notUsesIn || !match.notUsesIn.namespaces || !match.notUsesIn.namespaces.any(function(req){ return loadedStencilSetsNamespaces.indexOf(req) >= 0 })){ - - try { - - var className = eval(match.name); - var newPlugin = new className(facade, match); - newPlugin.type = match.name; - - // If there is an GUI-Plugin, they get all Plugins-Offer-Meta-Data - if (newPlugin.registryChanged) - newPlugin.registryChanged(me.pluginsData); - - // If there have an onSelection-Method it will pushed to the Editor Event-Handler - if (newPlugin.onSelectionChanged) - me.registerOnEvent(ORYX.CONFIG.EVENT_SELECTION_CHANGED, newPlugin.onSelectionChanged.bind(newPlugin)); - this.loadedPlugins.push(newPlugin); - this.loadedPlugins.each(function(loaded){ - if(loaded.registryChanged) - loaded.registryChanged(this.pluginsData); - }.bind(me)); - callback(true); - - } catch(e) { - ORYX.Log.warn("Plugin %0 is not available", match.name); - if(!!loadTry){ - callback(false,"INITFAILED"); - return; - } - this.loadScript("plugins/scripts/"+match.source, this.activatePluginByName.bind(this,match.name,callback,true)); - } - }else{ - callback(false,"NOTUSEINSTENCILSET"); - ORYX.Log.info("Plugin need a stencilset which is not loaded'", match.name); - } - - } else { - callback(false,"REQUIRESTENCILSET"); - ORYX.Log.info("Plugin need a stencilset which is not loaded'", match.name); - } - - - }else{ - callback(false, match?"NOTFOUND":"YETACTIVATED"); - //TODO error handling - } - }, - - /** - * Laden der Plugins - */ - loadPlugins: function() { - - // if there should be plugins but still are none, try again. - // TODO this should wait for every plugin respectively. - /*if (!ORYX.Plugins && ORYX.availablePlugins.length > 0) { - window.setTimeout(this.loadPlugins.bind(this), 100); - return; - }*/ - - var me = this; - var newPlugins = []; - - - var loadedStencilSetsNamespaces = this.getStencilSets().keys(); - - // Available Plugins will be initalize - var facade = this._getPluginFacade(); - - // If there is an Array where all plugins are described, than only take those - // (that comes from the usage of oryx with a mashup api) - if( ORYX.MashupAPI && ORYX.MashupAPI.loadablePlugins && ORYX.MashupAPI.loadablePlugins instanceof Array ){ - - // Get the plugins from the available plugins (those who are in the plugins.xml) - ORYX.availablePlugins = $A(ORYX.availablePlugins).findAll(function(value){ - return ORYX.MashupAPI.loadablePlugins.include( value.name ) - }); - - // Add those plugins to the list, which are only in the loadablePlugins list - ORYX.MashupAPI.loadablePlugins.each(function( className ){ - if( !(ORYX.availablePlugins.find(function(val){ return val.name == className }))){ - ORYX.availablePlugins.push( {name: className } ); - } - }); - } - - - ORYX.availablePlugins.each(function(value) { - ORYX.Log.debug("Initializing plugin '%0'", value.get("name")); - - if( (!value.get("requires") || !value.get("requires").namespaces || value.get("requires").namespaces.any(function(req){ return loadedStencilSetsNamespaces.indexOf(req) >= 0 }) ) && - (!value.get("notUsesIn")|| !value.get("notUsesIn").namespaces || !value.get("notUsesIn").namespaces.any(function(req){ return loadedStencilSetsNamespaces.indexOf(req) >= 0 }) )&& - /*only load activated plugins or undefined */ - (value.get("engaged") || (value.get("engaged")===undefined)) ){ - - try { - var className = eval(value.get("name")); // wow funcky code here! - if( className ){ - var plugin = new className(facade, value); - plugin.type = value.get("name"); - newPlugins.push( plugin ); - plugin.engaged=true; - } - } catch(e) { - ORYX.Log.warn("Plugin %0 is not available %1", value.get("name"), e); - } - - } else { - ORYX.Log.info("Plugin need a stencilset which is not loaded'", value.get("name")); - } - - }); - - newPlugins.each(function(value) { - // If there is an GUI-Plugin, they get all Plugins-Offer-Meta-Data - if (value.registryChanged) - value.registryChanged(me.pluginsData); - - // If there have an onSelection-Method it will pushed to the Editor Event-Handler - if (value.onSelectionChanged) - me.registerOnEvent(ORYX.CONFIG.EVENT_SELECTION_CHANGED, value.onSelectionChanged.bind(value)); - }); - - this.loadedPlugins = newPlugins; - - this.registerPluginsOnKeyEvents(); - - this.setSelection(); - - }, - - /** - * Creates the Canvas - * @param {String} [stencilType] The stencil type used for creating the canvas. If not given, a stencil with myBeRoot = true from current stencil set is taken. - * @param {Object} [canvasConfig] Any canvas properties (like language). - */ - _createCanvas: function(stencilType, canvasConfig) { - if (stencilType) { - // Add namespace to stencilType - if (stencilType.search(/^http/) === -1) { - stencilType = this.getStencilSets().values()[0].namespace() + stencilType; - } - } - else { - // Get any root stencil type - stencilType = this.getStencilSets().values()[0].findRootStencilName(); - } - - // get the stencil associated with the type - var canvasStencil = ORYX.Core.StencilSet.stencil(stencilType); - - if (!canvasStencil) - ORYX.Log.fatal("Initialisation failed, because the stencil with the type %0 is not part of one of the loaded stencil sets.", stencilType); - - // create all dom - // TODO fix border, so the visible canvas has a double border and some spacing to the scrollbars - var div = ORYX.Editor.graft("http://www.w3.org/1999/xhtml", null, ['div']); - // set class for custom styling - div.addClassName("ORYX_Editor"); - - // create the canvas - this._canvas = new ORYX.Core.Canvas({ - width : ORYX.CONFIG.CANVAS_WIDTH, - height : ORYX.CONFIG.CANVAS_HEIGHT, - 'eventHandlerCallback' : this.handleEvents.bind(this), - id : this.id, - parentNode : div - }, canvasStencil, this._getPluginFacade()); - - if (canvasConfig) { - // Migrate canvasConfig to an RDF-like structure - //FIXME this isn't nice at all because we don't want rdf any longer - var properties = []; - for(field in canvasConfig){ - properties.push({ - prefix: 'oryx', - name: field, - value: canvasConfig[field] - }); - } - - this._canvas.deserialize(properties); - } - - }, - - /** - * Returns a per-editor singleton plugin facade. - * To be used in plugin initialization. - */ - _getPluginFacade: function() { - - // if there is no pluginfacade already created: - if(!(this._pluginFacade)) - - // create it. - this._pluginFacade = { - - activatePluginByName: this.activatePluginByName.bind(this), - //deactivatePluginByName: this.deactivatePluginByName.bind(this), - getAvailablePlugins: this.getAvailablePlugins.bind(this), - offer: this.offer.bind(this), - getStencilSets: this.getStencilSets.bind(this), - getStencilSetExtensionDefinition:function(){ return Object.clone(this.ss_extensions_def||{})}.bind(this), - getRules: this.getRules.bind(this), - loadStencilSet: this.loadStencilSet.bind(this), - createShape: this.createShape.bind(this), - deleteShape: this.deleteShape.bind(this), - getSelection: this.getSelection.bind(this), - setSelection: this.setSelection.bind(this), - updateSelection: this.updateSelection.bind(this), - getCanvas: this.getCanvas.bind(this), - - importJSON: this.importJSON.bind(this), - getJSON: this.getJSON.bind(this), - getSerializedJSON: this.getSerializedJSON.bind(this), - - executeCommands: this.executeCommands.bind(this), - isExecutingCommands: this.isExecutingCommands.bind(this), - - registerOnEvent: this.registerOnEvent.bind(this), - unregisterOnEvent: this.unregisterOnEvent.bind(this), - raiseEvent: this.handleEvents.bind(this), - enableEvent: this.enableEvent.bind(this), - disableEvent: this.disableEvent.bind(this), - - eventCoordinates: this.eventCoordinates.bind(this), - eventCoordinatesXY: this.eventCoordinatesXY.bind(this), - - getModelMetaData: this.getModelMetaData.bind(this) - }; - - // return it. - return this._pluginFacade; - }, - - isExecutingCommands: function(){ - return !!this.commandExecuting; - }, - - /** - * Implementes the command pattern - * (The real usage of the command pattern - * is implemented and shown in the Plugins/undo.js) - * - * @param [] Array of commands - */ - executeCommands: function(commands){ - - if (!this.commandStack){ - this.commandStack = []; - } - if (!this.commandStackExecuted){ - this.commandStackExecuted = []; - } - - - this.commandStack = [].concat(this.commandStack) - .concat(commands); - - // Check if already executes - if (this.commandExecuting){ return; } - - // Start execution - this.commandExecuting = true; - - // Iterate over all commands - while(this.commandStack.length > 0){ - var command = this.commandStack.shift(); - // and execute it - command.execute(); - this.commandStackExecuted.push(command); - } - - // Raise event for executing commands - this.handleEvents({ - type : ORYX.CONFIG.EVENT_EXECUTE_COMMANDS, - commands : this.commandStackExecuted - }); - - // Remove temporary vars - delete this.commandStack; - delete this.commandStackExecuted; - delete this.commandExecuting; - - - this.updateSelection(); - - }, - - /** - * Returns JSON of underlying canvas (calls ORYX.Canvas#toJSON()). - * @return {Object} Returns JSON representation as JSON object. - */ - getJSON: function(){ - var canvasJSON = this.getCanvas().toJSON(); - canvasJSON.ssextensions = this.getStencilSets().values()[0].extensions().keys().findAll(function(sse){ return !sse.endsWith('/meta#') }); - return canvasJSON; - }, - - /** - * Serializes a call to toJSON(). - * @return {String} Returns JSON representation as string. - */ - getSerializedJSON: function(){ - return JSON.stringify(this.getJSON()); - }, - - /** - * Imports shapes in JSON as expected by {@link ORYX.Editor#loadSerialized} - * @param {Object|String} jsonObject The (serialized) json object to be imported - * @param {boolean } [noSelectionAfterImport=false] Set to true if no shapes should be selected after import - * @throws {SyntaxError} If the serialized json object contains syntax errors - */ - importJSON: function(jsonObject, noSelectionAfterImport) { - - try { - jsonObject = this.renewResourceIds(jsonObject); - } catch(error){ - throw error; - } - //check, if the imported json model can be loaded in this editor - // (stencil set has to fit) - if(jsonObject.stencilset.namespace && jsonObject.stencilset.namespace !== this.getCanvas().getStencil().stencilSet().namespace()) { - alert(String.format(ORYX.I18N.JSONImport.wrongSS, jsonObject.stencilset.namespace, this.getCanvas().getStencil().stencilSet().namespace())); - return null; - } else { - var commandClass = ORYX.Core.Command.extend({ - construct: function(jsonObject, loadSerializedCB, noSelectionAfterImport, facade){ - this.jsonObject = jsonObject; - this.noSelection = noSelectionAfterImport; - this.facade = facade; - this.shapes; - this.connections = []; - this.parents = new Hash(); - this.selection = this.facade.getSelection(); - this.loadSerialized = loadSerializedCB; - }, - execute: function(){ - - if (!this.shapes) { - // Import the shapes out of the serialization - this.shapes = this.loadSerialized( this.jsonObject ); - - //store all connections - this.shapes.each(function(shape) { - - if (shape.getDockers) { - var dockers = shape.getDockers(); - if (dockers) { - if (dockers.length > 0) { - this.connections.push([dockers.first(), dockers.first().getDockedShape(), dockers.first().referencePoint]); - } - if (dockers.length > 1) { - this.connections.push([dockers.last(), dockers.last().getDockedShape(), dockers.last().referencePoint]); - } - } - } - - //store parents - this.parents[shape.id] = shape.parent; - }.bind(this)); - } else { - this.shapes.each(function(shape) { - this.parents[shape.id].add(shape); - }.bind(this)); - - this.connections.each(function(con) { - con[0].setDockedShape(con[1]); - con[0].setReferencePoint(con[2]); - con[0].update(); - }); - } - - //this.parents.values().uniq().invoke("update"); - this.facade.getCanvas().update(); - - if(!this.noSelection) - this.facade.setSelection(this.shapes); - else - this.facade.updateSelection(); - - // call updateSize again, because during loadSerialized the edges' bounds - // are not yet initialized properly - this.facade.getCanvas().updateSize(); - - }, - rollback: function(){ - var selection = this.facade.getSelection(); - - this.shapes.each(function(shape) { - selection = selection.without(shape); - this.facade.deleteShape(shape); - }.bind(this)); - - /*this.parents.values().uniq().each(function(parent) { - if(!this.shapes.member(parent)) - parent.update(); - }.bind(this));*/ - - this.facade.getCanvas().update(); - - this.facade.setSelection(selection); - } - }) - - var command = new commandClass(jsonObject, - this.loadSerialized.bind(this), - noSelectionAfterImport, - this._getPluginFacade()); - - this.executeCommands([command]); - - return command.shapes.clone(); - } - }, - - /** - * This method renew all resource Ids and according references. - * Warning: The implementation performs a substitution on the serialized object for - * easier implementation. This results in a low performance which is acceptable if this - * is only used when importing models. - * @param {Object|String} jsonObject - * @throws {SyntaxError} If the serialized json object contains syntax errors. - * @return {Object} The jsonObject with renewed ids. - * @private - */ - renewResourceIds: function(jsonObject){ - // For renewing resource ids, a serialized and object version is needed - if(Object.prototype.toString.call(jsonObject) === "String"){ - try { - var serJsonObject = jsonObject; - jsonObject = JSON.parse(jsonObject); - } catch(error){ - throw new SyntaxError(error.message); - } - } else { - var serJsonObject = JSON.stringify(jsonObject); - } - - // collect all resourceIds recursively - var collectResourceIds = function(shapes){ - if(!shapes) return []; - - return shapes.map(function(shape){ - return collectResourceIds(shape.childShapes).concat(shape.resourceId); - }).flatten(); - } - var resourceIds = collectResourceIds(jsonObject.childShapes); - - // Replace each resource id by a new one - resourceIds.each(function(oldResourceId){ - var newResourceId = ORYX.Editor.provideId(); - serJsonObject = serJsonObject.replace(new RegExp(oldResourceId, 'g'), newResourceId); - }); - - return JSON.parse(serJsonObject); - }, - - /** - * Loads serialized model to the oryx. - * @example - * editor.loadSerialized({ - * resourceId: "mymodel1", - * childShapes: [ - * { - * stencil:{ id:"Subprocess" }, - * outgoing:[{resourceId: 'aShape'}], - * target: {resourceId: 'aShape'}, - * bounds:{ lowerRight:{ y:510, x:633 }, upperLeft:{ y:146, x:210 } }, - * resourceId: "myshape1", - * childShapes:[], - * properties:{}, - * } - * ], - * properties:{ - * language: "English" - * }, - * stencilset:{ - * url:"http://localhost:8080/oryx/stencilsets/bpmn1.1/bpmn1.1.json" - * }, - * stencil:{ - * id:"BPMNDiagram" - * } - * }); - * @param {Object} model Description of the model to load. - * @param {Array} [model.ssextensions] List of stenctil set extensions. - * @param {String} model.stencilset.url - * @param {String} model.stencil.id - * @param {Array} model.childShapes - * @param {Array} [model.properties] - * @param {String} model.resourceId - * @return {ORYX.Core.Shape[]} List of created shapes - * @methodOf ORYX.Editor.prototype - */ - loadSerialized: function(model, requestMeta){ - var canvas = this.getCanvas(); - - // Bugfix (cf. http://code.google.com/p/oryx-editor/issues/detail?id=240) - // Deserialize the canvas' stencil set extensions properties first! - this.loadSSExtensions(model.ssextensions); - - // Load Meta Data Extension if available - // #Signavio - if (requestMeta === true) { - var metaDataExtension = this.getExtensionForMetaData(); - if (metaDataExtension) { - this.loadSSExtension(metaDataExtension); - } - } - - var shapes = this.getCanvas().addShapeObjects(model.childShapes, this.handleEvents.bind(this)); - - if(model.properties) { - for(key in model.properties) { - var value = model.properties[key]; - var prop = this.getCanvas().getStencil().property("oryx-"+key); - if (!(typeof value === "string") && (!prop || !prop.isList())) { - value = JSON.stringify(value); - } - this.getCanvas().setProperty("oryx-" + key, value); - } - } - - - this.getCanvas().updateSize(); - - // Force to update the selection - this.selection = [null]; - this.setSelection([]); - - return shapes; - }, - - /** - * Return the namespace of the extension which - * provided all the self defined meta data - * @return {String} Returns null if no extension is defined, otherwise the namespace - * - */ - getExtensionForMetaData: function(){ - if (!this.ss_extensions_def||!(this.ss_extensions_def.extensions instanceof Array)){ - return null; - } - - var stencilsets = this.getStencilSets(); - var extension = this.ss_extensions_def.extensions.find(function(ex){ - return !!stencilsets[ex["extends"]] && ex.namespace.endsWith("/meta#"); - }); - - return extension ? extension.namespace || null : null; - }, - - /** - * Calls ORYX.Editor.prototype.ss_extension_namespace for each element - * @param {Array} ss_extension_namespaces An array of stencil set extension namespaces. - */ - loadSSExtensions: function(ss_extension_namespaces){ - if(!ss_extension_namespaces) return; - - ss_extension_namespaces.each(function(ss_extension_namespace){ - this.loadSSExtension(ss_extension_namespace); - }.bind(this)); - }, - - /** - * Loads a stencil set extension. - * The stencil set extensions definiton file must already - * be loaded when the editor is initialized. - */ - loadSSExtension: function(ss_extension_namespace) { - - if (this.ss_extensions_def) { - var extension = this.ss_extensions_def.extensions.find(function(ex){ - return (ex.namespace == ss_extension_namespace); - }); - - if (!extension) { - return; - } - - var stencilset = this.getStencilSets()[extension["extends"]]; - - if (!stencilset) { - return; - } - - // Check if absolute or relative url - if ((extension["definition"]||"").startsWith("/")){ - stencilset.addExtension(extension["definition"]) - } else { - stencilset.addExtension(ORYX.CONFIG.SS_EXTENSIONS_FOLDER + extension["definition"]) - } - - //stencilset.addExtension("/oryx/build/stencilsets/extensions/" + extension["definition"]) - this.getRules().initializeRules(stencilset); - - this._getPluginFacade().raiseEvent({ - type: ORYX.CONFIG.EVENT_STENCIL_SET_LOADED - }); - } - - }, - - disableEvent: function(eventType){ - if(eventType == ORYX.CONFIG.EVENT_KEYDOWN) { - this._keydownEnabled = false; - } - if(eventType == ORYX.CONFIG.EVENT_KEYUP) { - this._keyupEnabled = false; - } - if(this.DOMEventListeners.keys().member(eventType)) { - var value = this.DOMEventListeners.unset(eventType); - this.DOMEventListeners.set('disable_' + eventType, value); - } - }, - - enableEvent: function(eventType){ - if(eventType == ORYX.CONFIG.EVENT_KEYDOWN) { - this._keydownEnabled = true; - } - - if(eventType == ORYX.CONFIG.EVENT_KEYUP) { - this._keyupEnabled = true; - } - - if(this.DOMEventListeners.keys().member("disable_" + eventType)) { - var value = this.DOMEventListeners.unset("disable_" + eventType); - this.DOMEventListeners.set(eventType,value); - } - }, - - /** - * Methods for the PluginFacade - */ - registerOnEvent: function(eventType, callback) { - if(!(this.DOMEventListeners.keys().member(eventType))) { - this.DOMEventListeners.set(eventType,[]); - } - - this.DOMEventListeners.get(eventType).push(callback); - }, - - unregisterOnEvent: function(eventType, callback) { - if(this.DOMEventListeners.keys().member(eventType)) { - this.DOMEventListeners.set(eventType,this.DOMEventListeners.get(eventType).without(callback)); - } else { - // Event is not supported - // TODO: Error Handling - } - }, - - getSelection: function() { - return this.selection || []; - }, - - getStencilSets: function() { - return ORYX.Core.StencilSet.stencilSets(this.id); - }, - - getRules: function() { - return ORYX.Core.StencilSet.rules(this.id); - }, - - loadStencilSet: function(source) { - try { - ORYX.Core.StencilSet.loadStencilSet(source, this.modelMetaData, this.id); - this.handleEvents({type:ORYX.CONFIG.EVENT_STENCIL_SET_LOADED}); - } catch (e) { - ORYX.Log.warn("Requesting stencil set file failed. (" + e + ")"); - } - }, - - offer: function(pluginData) { - if(!this.pluginsData.member(pluginData)){ - this.pluginsData.push(pluginData); - } - }, - - /** - * It creates an new event or adds the callback, if already existing, - * for the key combination that the plugin passes in keyCodes attribute - * of the offer method. - * - * The new key down event fits the schema: - * key.event[.metactrl][.alt][.shift].'thekeyCode' - */ - registerPluginsOnKeyEvents: function() { - this.pluginsData.each(function(pluginData) { - - if(pluginData.keyCodes) { - - pluginData.keyCodes.each(function(keyComb) { - var eventName = "key.event"; - - /* Include key action */ - eventName += '.' + keyComb.keyAction; - - if(keyComb.metaKeys) { - /* Register on ctrl or apple meta key as meta key */ - if(keyComb.metaKeys. - indexOf(ORYX.CONFIG.META_KEY_META_CTRL) > -1) { - eventName += "." + ORYX.CONFIG.META_KEY_META_CTRL; - } - - /* Register on alt key as meta key */ - if(keyComb.metaKeys. - indexOf(ORYX.CONFIG.META_KEY_ALT) > -1) { - eventName += '.' + ORYX.CONFIG.META_KEY_ALT; - } - - /* Register on shift key as meta key */ - if(keyComb.metaKeys. - indexOf(ORYX.CONFIG.META_KEY_SHIFT) > -1) { - eventName += '.' + ORYX.CONFIG.META_KEY_SHIFT; - } - } - - /* Register on the actual key */ - if(keyComb.keyCode) { - eventName += '.' + keyComb.keyCode; - } - - /* Register the event */ - ORYX.Log.debug("Register Plugin on Key Event: %0", eventName); - if (pluginData.toggle === true && pluginData.buttonInstance) { - this.registerOnEvent(eventName, function(){ - pluginData.buttonInstance.toggle(!pluginData.buttonInstance.pressed); // Toggle - pluginData.functionality.call(pluginData, pluginData.buttonInstance, pluginData.buttonInstance.pressed); // Call function - }); - } else { - this.registerOnEvent(eventName, pluginData.functionality) - } - - }.bind(this)); - } - }.bind(this)); - }, - - isEqual: function(a,b){ - return a === b || (a.length === b.length && a.all(function(r){ return b.include(r) })) - }, - - isDirty: function(a){ - return a.any(function(shape){ return shape.isPropertyChanged() }) - }, - - setSelection: function(elements, subSelectionElement, force) { - - if (!elements) { elements = []; } - if (!(elements instanceof Array)) { elements = [elements]; } - - elements = elements.findAll(function(n){ return n && n instanceof ORYX.Core.Shape }); - - if (elements[0] instanceof ORYX.Core.Canvas) { - elements = []; - } - - if (!force && this.isEqual(this.selection, elements) && !this.isDirty(elements)){ - return; - } - - this.selection = elements; - this._subSelection = subSelectionElement; - - this.handleEvents({type:ORYX.CONFIG.EVENT_SELECTION_CHANGED, elements:elements, subSelection: subSelectionElement, force: !!force}) - }, - - updateSelection: function() { - this.setSelection(this.selection, this._subSelection, true); - /*var s = this.selection; - this.setSelection(); - this.setSelection(s);*/ - }, - - getCanvas: function() { - return this._canvas; - }, - - - /** - * option = { - * type: string, - * position: {x:int, y:int}, - * connectingType: uiObj-Class - * connectedShape: uiObj - * draggin: bool - * namespace: url - * parent: ORYX.Core.AbstractShape - * template: a template shape that the newly created inherits properties from. - * } - */ - createShape: function(option) { - - if(option && option.serialize && option.serialize instanceof Array){ - - var type = option.serialize.find(function(obj){return (obj.prefix+"-"+obj.name) == "oryx-type"}); - var stencil = ORYX.Core.StencilSet.stencil(type.value); - - if(stencil.type() == 'node'){ - var newShapeObject = new ORYX.Core.Node({'eventHandlerCallback':this.handleEvents.bind(this)}, stencil, this._getPluginFacade()); - } else { - var newShapeObject = new ORYX.Core.Edge({'eventHandlerCallback':this.handleEvents.bind(this)}, stencil, this._getPluginFacade()); - } - - this.getCanvas().add(newShapeObject); - newShapeObject.deserialize(option.serialize); - - return newShapeObject; - } - - // If there is no argument, throw an exception - if(!option || !option.type || !option.namespace) { throw "To create a new shape you have to give an argument with type and namespace";} - - var canvas = this.getCanvas(); - var newShapeObject; - - // Get the shape type - var shapetype = option.type; - - // Get the stencil set - var sset = ORYX.Core.StencilSet.stencilSet(option.namespace); - // Create an New Shape, dependents on an Edge or a Node - if(sset.stencil(shapetype).type() == "node") { - newShapeObject = new ORYX.Core.Node({'eventHandlerCallback':this.handleEvents.bind(this)}, sset.stencil(shapetype), this._getPluginFacade()) - } else { - newShapeObject = new ORYX.Core.Edge({'eventHandlerCallback':this.handleEvents.bind(this)}, sset.stencil(shapetype), this._getPluginFacade()) - } - - // when there is a template, inherit the properties. - if(option.template) { - - newShapeObject._jsonStencil.properties = option.template._jsonStencil.properties; - newShapeObject.postProcessProperties(); - } - - // Add to the canvas - if(option.parent && newShapeObject instanceof ORYX.Core.Node) { - option.parent.add(newShapeObject); - } else { - canvas.add(newShapeObject); - } - - - // Set the position - var point = option.position ? option.position : {x:100, y:200}; - - - var con; - // If there is create a shape and in the argument there is given an ConnectingType and is instance of an edge - if(option.connectingType && option.connectedShape && !(newShapeObject instanceof ORYX.Core.Edge)) { - - // there will be create a new Edge - con = new ORYX.Core.Edge({'eventHandlerCallback':this.handleEvents.bind(this)}, sset.stencil(option.connectingType)); - - // And both endings dockers will be referenced to the both shapes - con.dockers.first().setDockedShape(option.connectedShape); - - var magnet = option.connectedShape.getDefaultMagnet() - var cPoint = magnet ? magnet.bounds.center() : option.connectedShape.bounds.midPoint(); - con.dockers.first().setReferencePoint( cPoint ); - con.dockers.last().setDockedShape(newShapeObject); - con.dockers.last().setReferencePoint(newShapeObject.getDefaultMagnet().bounds.center()); - - // The Edge will be added to the canvas and be updated - canvas.add(con); - //con.update(); - - } - - // Move the new Shape to the position - if(newShapeObject instanceof ORYX.Core.Edge && option.connectedShape) { - - newShapeObject.dockers.first().setDockedShape(option.connectedShape); - - if( option.connectedShape instanceof ORYX.Core.Node ){ - newShapeObject.dockers.first().setReferencePoint(option.connectedShape.getDefaultMagnet().bounds.center()); - newShapeObject.dockers.last().bounds.centerMoveTo(point); - } else { - newShapeObject.dockers.first().setReferencePoint(option.connectedShape.bounds.midPoint()); - } - - var start = newShapeObject.dockers.first(); - var end = newShapeObject.dockers.last(); - - if(start.getDockedShape() && end.getDockedShape()) { - var startPoint = start.getAbsoluteReferencePoint(); - var endPoint = end.getAbsoluteReferencePoint(); - - var docker = newShapeObject.createDocker(); - docker.bounds.centerMoveTo({ - x: startPoint.x + (endPont.x - startPoint.x) / 2, - y: startPoint.y + (endPont.y - startPoint.y) / 2 - }); - } - - } else { - - var b = newShapeObject.bounds - if( newShapeObject instanceof ORYX.Core.Node && newShapeObject.dockers.length == 1){ - b = newShapeObject.dockers.first().bounds - } - - b.centerMoveTo(point); - - var upL = b.upperLeft(); - b.moveBy( -Math.min(upL.x, 0) , -Math.min(upL.y, 0) ) - - var lwR = b.lowerRight(); - b.moveBy( -Math.max(lwR.x-canvas.bounds.width(), 0) , -Math.max(lwR.y-canvas.bounds.height(), 0) ) - - } - - // Update the shape - if (newShapeObject instanceof ORYX.Core.Edge) { - newShapeObject._update(false); - } - - // And refresh the selection - if(!(newShapeObject instanceof ORYX.Core.Edge)&&!(option.dontUpdateSelection)) { - this.setSelection([newShapeObject]); - } - - if(con && con.alignDockers) { - //con.alignDockers(); - } - if(newShapeObject.alignDockers) { - newShapeObject.alignDockers(); - } - - return newShapeObject; - }, - - deleteShape: function(shape) { - - if (!shape || !shape.parent){ return } - - //remove shape from parent - // this also removes it from DOM - shape.parent.remove(shape); - - //delete references to outgoing edges - shape.getOutgoingShapes().each(function(os) { - var docker = os.getDockers().first(); - if(docker && docker.getDockedShape() == shape) { - docker.setDockedShape(undefined); - } - }); - - //delete references to incoming edges - shape.getIncomingShapes().each(function(is) { - var docker = is.getDockers().last(); - if(docker && docker.getDockedShape() == shape) { - docker.setDockedShape(undefined); - } - }); - - //delete references of the shape's dockers - shape.getDockers().each(function(docker) { - docker.setDockedShape(undefined); - }); - }, - - /** - * Returns an object with meta data about the model. - * Like name, description, ... - * - * Empty object with the current backend. - * - * @return {Object} Meta data about the model - */ - getModelMetaData: function() { - return this.modelMetaData; - }, - - /* Event-Handler Methods */ - - /** - * Helper method to execute an event immediately. The event is not - * scheduled in the _eventsQueue. Needed to handle Layout-Callbacks. - */ - _executeEventImmediately: function(eventObj) { - if(this.DOMEventListeners.keys().member(eventObj.event.type)) { - this.DOMEventListeners.get(eventObj.event.type).each((function(value) { - value(eventObj.event, eventObj.arg); - }).bind(this)); - } - }, - - _executeEvents: function() { - this._queueRunning = true; - while(this._eventsQueue.length > 0) { - var val = this._eventsQueue.shift(); - this._executeEventImmediately(val); - } - this._queueRunning = false; - }, - - /** - * Leitet die Events an die Editor-Spezifischen Event-Methoden weiter - * @param {Object} event Event , welches gefeuert wurde - * @param {Object} uiObj Target-UiObj - */ - handleEvents: function(event, uiObj) { - - ORYX.Log.trace("Dispatching event type %0 on %1", event.type, uiObj); - - switch(event.type) { - case ORYX.CONFIG.EVENT_MOUSEDOWN: - this._handleMouseDown(event, uiObj); - break; - case ORYX.CONFIG.EVENT_MOUSEMOVE: - this._handleMouseMove(event, uiObj); - break; - case ORYX.CONFIG.EVENT_MOUSEUP: - this._handleMouseUp(event, uiObj); - break; - case ORYX.CONFIG.EVENT_MOUSEOVER: - this._handleMouseHover(event, uiObj); - break; - case ORYX.CONFIG.EVENT_MOUSEOUT: - this._handleMouseOut(event, uiObj); - break; - } - /* Force execution if necessary. Used while handle Layout-Callbacks. */ - if(event.forceExecution) { - this._executeEventImmediately({event: event, arg: uiObj}); - } else { - this._eventsQueue.push({event: event, arg: uiObj}); - } - - if(!this._queueRunning) { - this._executeEvents(); - } - - // TODO: Make this return whether no listener returned false. - // So that, when one considers bubbling undesireable, it won't happen. - return false; - }, - - isValidEvent: function(e){ - try { - var isInput = ["INPUT", "TEXTAREA"].include(e.target.tagName.toUpperCase()); - var gridHasFocus = e.target.className.include("x-grid3-focus") && !e.target.className.include("x-grid3-focus-canvas"); - return !isInput && !gridHasFocus; - } catch(e){ - return false; - } - }, - - catchKeyUpEvents: function(event) { - if(!this._keyupEnabled) { - return; - } - /* assure we have the current event. */ - if (!event) - event = window.event; - - // Checks if the event comes from some input field - if (!this.isValidEvent(event)){ - return; - } - - /* Create key up event type */ - var keyUpEvent = this.createKeyCombEvent(event, ORYX.CONFIG.KEY_ACTION_UP); - - ORYX.Log.debug("Key Event to handle: %0", keyUpEvent); - - /* forward to dispatching. */ - this.handleEvents({type: keyUpEvent, event:event}); - }, - - /** - * Catches all key down events and forward the appropriated event to - * dispatching concerning to the pressed keys. - * - * @param {Event} - * The key down event to handle - */ - catchKeyDownEvents: function(event) { - if(!this._keydownEnabled) { - return; - } - /* Assure we have the current event. */ - if (!event) - event = window.event; - - /* Fixed in FF3 */ - // This is a mac-specific fix. The mozilla event object has no knowledge - // of meta key modifier on osx, however, it is needed for certain - // shortcuts. This fix adds the metaKey field to the event object, so - // that all listeners that registered per Oryx plugin facade profit from - // this. The original bug is filed in - // https://bugzilla.mozilla.org/show_bug.cgi?id=418334 - //if (this.__currentKey == ORYX.CONFIG.KEY_CODE_META) { - // event.appleMetaKey = true; - //} - //this.__currentKey = pressedKey; - - // Checks if the event comes from some input field - if (!this.isValidEvent(event)){ - return; - } - - /* Create key up event type */ - var keyDownEvent = this.createKeyCombEvent(event, ORYX.CONFIG.KEY_ACTION_DOWN); - - ORYX.Log.debug("Key Event to handle: %0", keyDownEvent); - - /* Forward to dispatching. */ - this.handleEvents({type: keyDownEvent,event: event}); - }, - - /** - * Creates the event type name concerning to the pressed keys. - * - * @param {Event} keyDownEvent - * The source keyDownEvent to build up the event name - */ - createKeyCombEvent: function(keyEvent, keyAction) { - - /* Get the currently pressed key code. */ - var pressedKey = keyEvent.which || keyEvent.keyCode; - //this.__currentKey = pressedKey; - - /* Event name */ - var eventName = "key.event"; - - /* Key action */ - if(keyAction) { - eventName += "." + keyAction; - } - - /* Ctrl or apple meta key is pressed */ - if(keyEvent.ctrlKey || keyEvent.metaKey) { - eventName += "." + ORYX.CONFIG.META_KEY_META_CTRL; - } - - /* Alt key is pressed */ - if(keyEvent.altKey) { - eventName += "." + ORYX.CONFIG.META_KEY_ALT; - } - - /* Alt key is pressed */ - if(keyEvent.shiftKey) { - eventName += "." + ORYX.CONFIG.META_KEY_SHIFT; - } - - /* Return the composed event name */ - return eventName + "." + pressedKey; - }, - - _handleMouseDown: function(event, uiObj) { - - // get canvas. - var canvas = this.getCanvas(); - // Try to get the focus - canvas.focus() - - // find the shape that is responsible for this element's id. - var element = event.currentTarget; - var elementController = uiObj; - - // gather information on selection. - var currentIsSelectable = (elementController !== null) && - (elementController !== undefined) && (elementController.isSelectable); - var currentIsMovable = (elementController !== null) && - (elementController !== undefined) && (elementController.isMovable); - var modifierKeyPressed = event.shiftKey || event.ctrlKey; - var noObjectsSelected = this.selection.length === 0; - var currentIsSelected = this.selection.member(elementController); - - - // Rule #1: When there is nothing selected, select the clicked object. - if(currentIsSelectable && noObjectsSelected) { - - this.setSelection([elementController]); - - ORYX.Log.trace("Rule #1 applied for mouse down on %0", element.id); - - // Rule #3: When at least one element is selected, and there is no - // control key pressed, and the clicked object is not selected, select - // the clicked object. - } else if(currentIsSelectable && !noObjectsSelected && - !modifierKeyPressed && !currentIsSelected) { - - this.setSelection([elementController]); - - //var objectType = elementController.readAttributes(); - //alert(objectType[0] + ": " + objectType[1]); - - ORYX.Log.trace("Rule #3 applied for mouse down on %0", element.id); - - // Rule #4: When the control key is pressed, and the current object is - // not selected, add it to the selection. - } else if(currentIsSelectable && modifierKeyPressed - && !currentIsSelected) { - - var newSelection = this.selection.clone(); - newSelection.push(elementController) - this.setSelection(newSelection) - - ORYX.Log.trace("Rule #4 applied for mouse down on %0", element.id); - - // Rule #6 - } else if(currentIsSelectable && currentIsSelected && - modifierKeyPressed) { - - var newSelection = this.selection.clone(); - this.setSelection(newSelection.without(elementController)) - - ORYX.Log.trace("Rule #6 applied for mouse down on %0", elementController.id); - - // Rule #5: When there is at least one object selected and no control - // key pressed, we're dragging. - /*} else if(currentIsSelectable && !noObjectsSelected - && !modifierKeyPressed) { - - if(this.log.isTraceEnabled()) - this.log.trace("Rule #5 applied for mouse down on "+element.id); -*/ - // Rule #2: When clicked on something that is neither - // selectable nor movable, clear the selection, and return. - } else if (!currentIsSelectable && !currentIsMovable) { - - this.setSelection([]); - - ORYX.Log.trace("Rule #2 applied for mouse down on %0", element.id); - - return; - - // Rule #7: When the current object is not selectable but movable, - // it is probably a control. Leave the selection unchanged but set - // the movedObject to the current one and enable Drag. Dockers will - // be processed in the dragDocker plugin. - } else if(!currentIsSelectable && currentIsMovable && !(elementController instanceof ORYX.Core.Controls.Docker)) { - - // TODO: If there is any moveable elements, do this in a plugin - //ORYX.Core.UIEnableDrag(event, elementController); - - ORYX.Log.trace("Rule #7 applied for mouse down on %0", element.id); - - // Rule #8: When the element is selectable and is currently selected and no - // modifier key is pressed - } else if(currentIsSelectable && currentIsSelected && - !modifierKeyPressed) { - - this._subSelection = this._subSelection != elementController ? elementController : undefined; - - this.setSelection(this.selection, this._subSelection); - - ORYX.Log.trace("Rule #8 applied for mouse down on %0", element.id); - } - - - // prevent event from bubbling, return. - //Event.stop(event); - return; - }, - - _handleMouseMove: function(event, uiObj) { - return; - }, - - _handleMouseUp: function(event, uiObj) { - // get canvas. - var canvas = this.getCanvas(); - - // find the shape that is responsible for this elemement's id. - var elementController = uiObj; - - //get event position - var evPos = this.eventCoordinates(event); - - //Event.stop(event); - }, - - _handleMouseHover: function(event, uiObj) { - return; - }, - - _handleMouseOut: function(event, uiObj) { - return; - }, - - /** - * Calculates the event coordinates to SVG document coordinates. - * @param {Event} event - * @return {SVGPoint} The event coordinates in the SVG document - */ - eventCoordinates: function(event) { - - var canvas = this.getCanvas(); - - var svgPoint = canvas.node.ownerSVGElement.createSVGPoint(); - svgPoint.x = event.clientX; - svgPoint.y = event.clientY; - - var additionalIEZoom = 1; - if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { - var ua = navigator.userAgent; - if (ua.indexOf('MSIE') >= 0) { - //IE 10 and below - var zoom = Math.round((screen.deviceXDPI / screen.logicalXDPI) * 100); - if (zoom !== 100) { - additionalIEZoom = zoom / 100 - } - } - } - - if (additionalIEZoom !== 1) { - svgPoint.x = svgPoint.x * additionalIEZoom; - svgPoint.y = svgPoint.y * additionalIEZoom; - } - - var matrix = canvas.node.getScreenCTM(); - return svgPoint.matrixTransform(matrix.inverse()); - }, - - eventCoordinatesXY: function(x, y) { - - var canvas = this.getCanvas(); - - var svgPoint = canvas.node.ownerSVGElement.createSVGPoint(); - svgPoint.x = x; - svgPoint.y = y; - - var additionalIEZoom = 1; - if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { - var ua = navigator.userAgent; - if (ua.indexOf('MSIE') >= 0) { - //IE 10 and below - var zoom = Math.round((screen.deviceXDPI / screen.logicalXDPI) * 100); - if (zoom !== 100) { - additionalIEZoom = zoom / 100 - } - } - } - - if (additionalIEZoom !== 1) { - svgPoint.x = svgPoint.x * additionalIEZoom; - svgPoint.y = svgPoint.y * additionalIEZoom; - } - - var matrix = canvas.node.getScreenCTM(); - return svgPoint.matrixTransform(matrix.inverse()); - } -}; -ORYX.Editor = Clazz.extend(ORYX.Editor); - -/** - * Creates a new ORYX.Editor instance by fetching a model from given url and passing it to the constructur - * @param {String} modelUrl The JSON URL of a model. - * @param {Object} config Editor config passed to the constructur, merged with the response of the request to modelUrl - */ -ORYX.Editor.createByUrl = function(modelUrl){ - new Ajax.Request(modelUrl, { - method: 'GET', - onSuccess: function(transport) { - var editorConfig = JSON.parse(transport.responseText); - new ORYX.Editor(editorConfig); - }.bind(this) - }); -} - -// TODO Implement namespace awareness on attribute level. -/** - * graft() function - * Originally by Sean M. Burke from interglacial.com, altered for usage with - * SVG and namespace (xmlns) support. Be sure you understand xmlns before - * using this funtion, as it creates all grafted elements in the xmlns - * provided by you and all element's attribures in default xmlns. If you - * need to graft elements in a certain xmlns and wish to assign attributes - * in both that and another xmlns, you will need to do stepwise grafting, - * adding non-default attributes yourself or you'll have to enhance this - * function. Latter, I would appreciate: martin�apfelfabrik.de - * @param {Object} namespace The namespace in which - * elements should be grafted. - * @param {Object} parent The element that should contain the grafted - * structure after the function returned. - * @param {Object} t the crafting structure. - * @param {Object} doc the document in which grafting is performed. - */ -ORYX.Editor.graft = function(namespace, parent, t, doc) { - - doc = (doc || (parent && parent.ownerDocument) || document); - var e; - if(t === undefined) { - throw "Can't graft an undefined value"; - } else if(t.constructor == String) { - e = doc.createTextNode( t ); - } else { - for(var i = 0; i < t.length; i++) { - if( i === 0 && t[i].constructor == String ) { - var snared; - snared = t[i].match( /^([a-z][a-z0-9]*)\.([^\s\.]+)$/i ); - if( snared ) { - e = doc.createElementNS(namespace, snared[1] ); - e.setAttributeNS(null, 'class', snared[2] ); - continue; - } - snared = t[i].match( /^([a-z][a-z0-9]*)$/i ); - if( snared ) { - e = doc.createElementNS(namespace, snared[1] ); // but no class - continue; - } - - // Otherwise: - e = doc.createElementNS(namespace, "span" ); - e.setAttribute(null, "class", "namelessFromLOL" ); - } - - if( t[i] === undefined ) { - throw "Can't graft an undefined value in a list!"; - } else if( t[i].constructor == String || t[i].constructor == Array ) { - this.graft(namespace, e, t[i], doc ); - } else if( t[i].constructor == Number ) { - this.graft(namespace, e, t[i].toString(), doc ); - } else if( t[i].constructor == Object ) { - // hash's properties => element's attributes - for(var k in t[i]) { e.setAttributeNS(null, k, t[i][k] ); } - } else { - - } - } - } - if(parent && parent.appendChild) { - parent.appendChild( e ); - } else { - - } - return e; // return the topmost created node -}; - -ORYX.Editor.provideId = function() { - var res = [], hex = '0123456789ABCDEF'; - - for (var i = 0; i < 36; i++) res[i] = Math.floor(Math.random()*0x10); - - res[14] = 4; - res[19] = (res[19] & 0x3) | 0x8; - - for (var i = 0; i < 36; i++) res[i] = hex[res[i]]; - - res[8] = res[13] = res[18] = res[23] = '-'; - - return "oryx_" + res.join(''); -}; - -/** - * When working with Ext, conditionally the window needs to be resized. To do - * so, use this class method. Resize is deferred until 100ms, and all subsequent - * resizeBugFix calls are ignored until the initially requested resize is - * performed. - */ -ORYX.Editor.resizeFix = function() { - if (!ORYX.Editor._resizeFixTimeout) { - ORYX.Editor._resizeFixTimeout = window.setTimeout(function() { - window.resizeBy(1,1); - window.resizeBy(-1,-1); - ORYX.Editor._resizefixTimeout = null; - }, 100); - } -}; - -ORYX.Editor.Cookie = { - - callbacks:[], - - onChange: function( callback, interval ){ - - this.callbacks.push(callback); - this.start( interval ) - - }, - - start: function( interval ){ - - if( this.pe ){ - return; - } - - var currentString = document.cookie; - - this.pe = new PeriodicalExecuter( function(){ - - if( currentString != document.cookie ){ - currentString = document.cookie; - this.callbacks.each(function(callback){ callback(this.getParams()) }.bind(this)); - } - - }.bind(this), ( interval || 10000 ) / 1000); - }, - - stop: function(){ - - if( this.pe ){ - this.pe.stop(); - this.pe = null; - } - }, - - getParams: function(){ - var res = {}; - - var p = document.cookie; - p.split("; ").each(function(param){ res[param.split("=")[0]] = param.split("=")[1];}); - - return res; - }, - - toString: function(){ - return document.cookie; - } -}; - -/** - * Workaround for SAFARI/Webkit, because - * when trying to check SVGSVGElement of instanceof there is - * raising an error - * - */ -ORYX.Editor.SVGClassElementsAreAvailable = true; -ORYX.Editor.setMissingClasses = function() { - - try { - SVGElement; - } catch(e) { - ORYX.Editor.SVGClassElementsAreAvailable = false; - SVGSVGElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg').toString(); - SVGGElement = document.createElementNS('http://www.w3.org/2000/svg', 'g').toString(); - SVGPathElement = document.createElementNS('http://www.w3.org/2000/svg', 'path').toString(); - SVGTextElement = document.createElementNS('http://www.w3.org/2000/svg', 'text').toString(); - //SVGMarkerElement = document.createElementNS('http://www.w3.org/2000/svg', 'marker').toString(); - SVGRectElement = document.createElementNS('http://www.w3.org/2000/svg', 'rect').toString(); - SVGImageElement = document.createElementNS('http://www.w3.org/2000/svg', 'image').toString(); - SVGCircleElement = document.createElementNS('http://www.w3.org/2000/svg', 'circle').toString(); - SVGEllipseElement = document.createElementNS('http://www.w3.org/2000/svg', 'ellipse').toString(); - SVGLineElement = document.createElementNS('http://www.w3.org/2000/svg', 'line').toString(); - SVGPolylineElement = document.createElementNS('http://www.w3.org/2000/svg', 'polyline').toString(); - SVGPolygonElement = document.createElementNS('http://www.w3.org/2000/svg', 'polygon').toString(); - - } - -} -ORYX.Editor.checkClassType = function( classInst, classType ) { - - if( ORYX.Editor.SVGClassElementsAreAvailable ){ - return classInst instanceof classType - } else { - return classInst == classType - } -}; -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} - - -new function(){ - - ORYX.Core.UIEnableDrag = function(event, uiObj, option) { - - this.uiObj = uiObj; - var upL = uiObj.bounds.upperLeft(); - - var a = uiObj.node.getScreenCTM(); - this.faktorXY= {x: a.a, y: a.d}; - - this.scrollNode = uiObj.node.ownerSVGElement.parentNode.parentNode; - - this.offSetPosition = { - x: Event.pointerX(event) - (upL.x * this.faktorXY.x), - y: Event.pointerY(event) - (upL.y * this.faktorXY.y)}; - - this.offsetScroll = {x:this.scrollNode.scrollLeft,y:this.scrollNode.scrollTop}; - - this.dragCallback = ORYX.Core.UIDragCallback.bind(this); - this.disableCallback = ORYX.Core.UIDisableDrag.bind(this); - - this.movedCallback = option ? option.movedCallback : undefined; - this.upCallback = option ? option.upCallback : undefined; - - document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this.disableCallback, true); - document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.dragCallback , false); - - }; - - ORYX.Core.UIDragCallback = function(event) { - - var position = { - x: Event.pointerX(event) - this.offSetPosition.x, - y: Event.pointerY(event) - this.offSetPosition.y} - - position.x -= this.offsetScroll.x - this.scrollNode.scrollLeft; - position.y -= this.offsetScroll.y - this.scrollNode.scrollTop; - - position.x /= this.faktorXY.x; - position.y /= this.faktorXY.y; - - this.uiObj.bounds.moveTo(position); - //this.uiObj.update(); - - if(this.movedCallback) - this.movedCallback(event); - - //Event.stop(event); - - }; - - ORYX.Core.UIDisableDrag = function(event) { - document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.dragCallback, false); - document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this.disableCallback, true); - - if(this.upCallback) - this.upCallback(event); - - this.upCallback = undefined; - this.movedCallback = undefined; - - Event.stop(event); - }; - - - - - /** - * Implements a command to move docker by an offset. - * - * @class ORYX.Core.MoveDockersCommand - * @param {Object} object An object with the docker id as key and docker and offset as object value - * - */ - ORYX.Core.MoveDockersCommand = ORYX.Core.Command.extend({ - construct: function(dockers){ - this.dockers = new Hash(dockers); - this.edges = new Hash(); - }, - execute: function(){ - if (this.changes) { - this.executeAgain(); - return; - } else { - this.changes = new Hash(); - } - - this.dockers.values().each(function(docker){ - var edge = docker.docker.parent; - if (!edge){ return } - - if (!this.changes.get(edge.getId())) { - this.changes.set(edge.getId(), { - edge : edge, - oldDockerPositions : edge.dockers.map(function(r){ return r.bounds.center() }) - }); - } - docker.docker.bounds.moveBy(docker.offset); - this.edges.set(edge.getId(),edge); - docker.docker.update(); - }.bind(this)); - this.edges.each(function(edge){ - this.updateEdge(edge.value); - if (this.changes[edge.value.getId()]) - this.changes[edge.value.getId()].dockerPositions = edge.value.dockers.map(function(r){ return r.bounds.center() }) - }.bind(this)); - }, - updateEdge: function(edge){ - edge._update(true); - [edge.getOutgoingShapes(), edge.getIncomingShapes()].flatten().invoke("_update", [true]) - }, - executeAgain: function(){ - this.changes.values().each(function(change){ - // Reset the dockers - this.removeAllDocker(change.edge); - change.dockerPositions.each(function(pos, i){ - if (i==0||i==change.dockerPositions.length-1){ return } - var docker = change.edge.createDocker(undefined, pos); - docker.bounds.centerMoveTo(pos); - docker.update(); - }.bind(this)); - this.updateEdge(change.edge); - }.bind(this)); - }, - rollback: function(){ - this.changes.values().each(function(change){ - // Reset the dockers - this.removeAllDocker(change.edge); - change.oldDockerPositions.each(function(pos, i){ - if (i==0||i==change.oldDockerPositions.length-1){ return } - var docker = change.edge.createDocker(undefined, pos); - docker.bounds.centerMoveTo(pos); - docker.update(); - }.bind(this)); - this.updateEdge(change.edge); - }.bind(this)); - }, - removeAllDocker: function(edge){ - edge.dockers.slice(1, edge.dockers.length-1).each(function(docker){ - edge.removeDocker(docker); - }) - } - }); - -}(); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} - -/** - * @classDescription Base class for Shapes. - * @extends ORYX.Core.AbstractShape - */ -ORYX.Core.Shape = { - - /** - * Constructor - */ - construct: function(options, stencil, facade) { - // call base class constructor - arguments.callee.$.construct.apply(this, arguments); - - this.facade = facade; - this.dockers = []; - this.magnets = []; - - this._defaultMagnet; - - this.incoming = []; - this.outgoing = []; - - this.nodes = []; - - this._dockerChangedCallback = this._dockerChanged.bind(this); - - //Hash map for all labels. Labels are not treated as children of shapes. - this._labels = new Hash(); - - // create SVG node - this.node = ORYX.Editor.graft("http://www.w3.org/2000/svg", - null, - ['g', {id:"svg-" + this.resourceId}, - ['g', {"class": "stencils"}, - ['g', {"class": "me"}], - ['g', {"class": "children", style:"overflow:hidden"}], - ['g', {"class": "edge"}] - ], - ['g', {"class": "controls"}, - ['g', {"class": "dockers"}], - ['g', {"class": "magnets"}] - ] - ]); - }, - - /** - * If changed flag is set, refresh method is called. - */ - update: function() { - //if(this.isChanged) { - //this.layout(); - //} - }, - - /** - * !!!Not called from any sub class!!! - */ - _update: function() { - - }, - - /** - * Calls the super class refresh method - * and updates the svg elements that are referenced by a property. - */ - refresh: function() { - //call base class refresh method - arguments.callee.$.refresh.apply(this, arguments); - - if(this.node.ownerDocument) { - //adjust SVG to properties' values - var me = this; - this.propertiesChanged.each((function(propChanged) { - if(propChanged.value) { - var prop = this.properties.get(propChanged.key); - var property = this.getStencil().property(propChanged.key); - if (property != undefined) { - this.propertiesChanged.set(propChanged.key, false); - - //handle choice properties - if(property.type() == ORYX.CONFIG.TYPE_CHOICE) { - //iterate all references to SVG elements - property.refToView().each((function(ref) { - //if property is referencing a label, update the label - if(ref !== "") { - var label = this._labels.get(this.id + ref); - if (label && property.item(prop)) { - label.text(property.item(prop).title()); - } - } - }).bind(this)); - - //if the choice's items are referencing SVG elements - // show the selected and hide all other referenced SVG - // elements - var refreshedSvgElements = new Hash(); - property.items().each((function(item) { - item.refToView().each((function(itemRef) { - if(itemRef == "") { return; } - - var svgElem = this.node.ownerDocument.getElementById(this.id + itemRef); - - if(!svgElem) { return; } - - - /* Do not refresh the same svg element multiple times */ - if (!refreshedSvgElements.get(svgElem.id) || prop == item.value()) { - svgElem.setAttributeNS(null, 'display', ((prop == item.value()) ? 'inherit' : 'none')); - refreshedSvgElements.set(svgElem.id, svgElem); - } - - // Reload the href if there is an image-tag - if(ORYX.Editor.checkClassType(svgElem, SVGImageElement)) { - svgElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', svgElem.getAttributeNS('http://www.w3.org/1999/xlink', 'href')); - } - }).bind(this)); - }).bind(this)); - - } else { //handle properties that are not of type choice - //iterate all references to SVG elements - property.refToView().each((function(ref) { - //if the property does not reference an SVG element, - // do nothing - if(ref === "") { return; } - - var refId = this.id + ref; - - if (property.type() === ORYX.CONFIG.TYPE_FLOWABLE_MULTIINSTANCE) - { - if (ref === "multiinstance") { - - var svgElemParallel = this.node.ownerDocument.getElementById(this.id + 'parallel'); - if(svgElemParallel) - { - if (prop === 'Parallel') - { - svgElemParallel.setAttributeNS(null, 'display', 'inherit'); - } - else - { - svgElemParallel.setAttributeNS(null, 'display', 'none'); - } - } - - var svgElemSequential = this.node.ownerDocument.getElementById(this.id + 'sequential'); - - if(svgElemSequential) - { - if (prop === 'Sequential') - { - svgElemSequential.setAttributeNS(null, 'display', 'inherit'); - } - else - { - svgElemSequential.setAttributeNS(null, 'display', 'none'); - } - } - } - return; - - } - else if (property.type() === "cancelactivity") - { - var svgElemFrame = this.node.ownerDocument.getElementById(this.id + 'frame'); - var svgElemFrame2 = this.node.ownerDocument.getElementById(this.id + 'frame2'); - - if (prop === 'true') - { - svgElemFrame.setAttributeNS(null, 'display', 'inherit'); - svgElemFrame2.setAttributeNS(null, 'display', 'inherit'); - } - else - { - svgElemFrame.setAttributeNS(null, 'display', 'none'); - svgElemFrame2.setAttributeNS(null, 'display', 'none'); - } - } - - //get the SVG element - var svgElem = this.node.ownerDocument.getElementById(refId); - - //if the SVG element can not be found - if(!svgElem || !(svgElem.ownerSVGElement)) { - //if the referenced SVG element is a SVGAElement, it cannot - // be found with getElementById (Firefox bug). - // this is a work around - if(property.type() === ORYX.CONFIG.TYPE_URL || property.type() === ORYX.CONFIG.TYPE_DIAGRAM_LINK) { - var svgElems = this.node.ownerDocument.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'a'); - - svgElem = $A(svgElems).find(function(elem) { - return elem.getAttributeNS(null, 'id') === refId; - }); - - if(!svgElem) { return; } - } else { - //this.propertiesChanged[propChanged.key] = true; - return; - } - } - - if (property.complexAttributeToView()) { - var label = this._labels.get(refId); - if (label) { - try { - propJson = prop.evalJSON(); - var value = propJson[property.complexAttributeToView()] - label.text(value ? value : prop); - } catch (e) { - label.text(prop); - } - } - - } else { - switch (property.type()) { - case ORYX.CONFIG.TYPE_BOOLEAN: - if (typeof prop == "string") - prop = prop === "true" - - svgElem.setAttributeNS(null, 'display', (!(prop === property.inverseBoolean())) ? 'inherit' : 'none'); - - break; - case ORYX.CONFIG.TYPE_COLOR: - if(property.fill()) { - if (svgElem.tagName.toLowerCase() === "stop"){ - if (prop){ - - if (property.lightness() && property.lightness() !== 1){ - prop = ORYX.Utils.adjustLightness(prop, property.lightness()); - } - - svgElem.setAttributeNS(null, "stop-color", prop); - - // Adjust stop color of the others - if (svgElem.parentNode.tagName.toLowerCase() === "radialgradient"){ - ORYX.Utils.adjustGradient(svgElem.parentNode, svgElem); - } - } - - // If there is no value, set opaque - if (svgElem.parentNode.tagName.toLowerCase() === "radialgradient"){ - $A(svgElem.parentNode.getElementsByTagName('stop')).each(function(stop){ - stop.setAttributeNS(null, "stop-opacity", prop ? stop.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'default-stop-opacity') || 1 : 0); - }.bind(this)) - } - } else { - svgElem.setAttributeNS(null, 'fill', prop); - } - } - if(property.stroke()) { - svgElem.setAttributeNS(null, 'stroke', prop); - } - break; - case ORYX.CONFIG.TYPE_STRING: - var label = this._labels.get(refId); - if (label) { - label.text(prop); - } - break; - case ORYX.CONFIG.TYPE_EXPRESSION: - var label = this._labels.get(refId); - if (label) { - label.text(prop); - } - break; - case ORYX.CONFIG.TYPE_DATASOURCE: - var label = this._labels.get(refId); - if (label) { - label.text(prop); - } - break; - case ORYX.CONFIG.TYPE_INTEGER: - var label = this._labels.get(refId); - if (label) { - label.text(prop); - } - break; - case ORYX.CONFIG.TYPE_FLOAT: - if(property.fillOpacity()) { - svgElem.setAttributeNS(null, 'fill-opacity', prop); - } - if(property.strokeOpacity()) { - svgElem.setAttributeNS(null, 'stroke-opacity', prop); - } - if(!property.fillOpacity() && !property.strokeOpacity()) { - var label = this._labels.get(refId); - if (label) { - label.text(prop); - } - } - break; - - case ORYX.CONFIG.TYPE_SUB_PROCESS_LINK: - if (ref == "subprocesslink") { - var onclickAttr = svgElem.getAttributeNodeNS('', 'onclick'); - var styleAttr = svgElem.getAttributeNodeNS('', 'style'); - - if (onclickAttr) { - if (prop && prop.id) { - if (styleAttr) { - styleAttr.textContent = "cursor:pointer;" - } - onclickAttr.textContent = "FLOWABLE.TOOLBAR.ACTIONS.navigateToProcess(" + prop.id + ");return false;"; - } else { - if (styleAttr) { - styleAttr.textContent = "cursor:default;" - } - onclickAttr.textContent = "return false;"; - } - } - } - break; - - case ORYX.CONFIG.TYPE_URL: - break; - - } - } - }).bind(this)); - - - } - } - - } - }).bind(this)); - - //update labels - this._labels.values().each(function(label) { - label.update(); - }); - } - }, - - layout: function() { - //this.getStencil().layout(this) - var layoutEvents = this.getStencil().layout() - if (layoutEvents) { - layoutEvents.each(function(event) { - - // setup additional attributes - event.shape = this; - event.forceExecution = true; - - // do layouting - this._delegateEvent(event); - }.bind(this)) - - } - }, - - /** - * Returns an array of Label objects. - */ - getLabels: function() { - return this._labels.values(); - }, - - /** - * Returns the label for a given ref - * @return {ORYX.Core.Label} Returns null if there is no label - */ - getLabel: function(ref){ - if (!ref){ - return null; - } - return (this._labels.find(function(o){ - return o.key.endsWith(ref); - })||{}).value || null; - }, - - /** - * Hides all related labels - * - */ - hideLabels: function(){ - this.getLabels().invoke("hide"); - }, - - /** - * Shows all related labels - * - */ - showLabels: function(){ - var labels = this.getLabels(); - labels.invoke("show"); - labels.each(function(label) { - label.update(); - }); - }, - - setOpacity: function(value, animate){ - - value = Math.max(Math.min((typeof value == "number" ? value : 1.0), 1.0), 0.0); - - if (value !== 1.0){ - value = String(value); - this.node.setAttributeNS(null, "fill-opacity", value) - this.node.setAttributeNS(null, "stroke-opacity", value) - } else { - this.node.removeAttributeNS(null, "fill-opacity"); - this.node.removeAttributeNS(null, "stroke-opacity"); - } - }, - - /** - * Returns an array of dockers of this object. - */ - getDockers: function() { - return this.dockers; - }, - - getMagnets: function() { - return this.magnets; - }, - - getDefaultMagnet: function() { - if(this._defaultMagnet) { - return this._defaultMagnet; - } else if (this.magnets.length > 0) { - return this.magnets[0]; - } else { - return undefined; - } - }, - - getParentShape: function() { - return this.parent; - }, - - getIncomingShapes: function(iterator) { - if(iterator) { - this.incoming.each(iterator); - } - return this.incoming; - }, - - getIncomingNodes: function(iterator) { - return this.incoming.select(function(incoming){ - var isNode = (incoming instanceof ORYX.Core.Node); - if(isNode && iterator) iterator(incoming); - return isNode; - }); - }, - - - getOutgoingShapes: function(iterator) { - if(iterator) { - this.outgoing.each(iterator); - } - return this.outgoing; - }, - - getOutgoingNodes: function(iterator) { - return this.outgoing.select(function(out){ - var isNode = (out instanceof ORYX.Core.Node); - if(isNode && iterator) iterator(out); - return isNode; - }); - }, - - getAllDockedShapes: function(iterator) { - var result = this.incoming.concat(this.outgoing); - if(iterator) { - result.each(iterator); - } - return result - }, - - getCanvas: function() { - if(this.parent instanceof ORYX.Core.Canvas) { - return this.parent; - } else if(this.parent instanceof ORYX.Core.Shape) { - return this.parent.getCanvas(); - } else { - return undefined; - } - }, - - /** - * - * @param {Object} deep - * @param {Object} iterator - */ - getChildNodes: function(deep, iterator) { - if(!deep && !iterator) { - return this.nodes.clone(); - } else { - var result = []; - this.nodes.each(function(uiObject) { - if(!uiObject.isVisible){return} - if(iterator) { - iterator(uiObject); - } - result.push(uiObject); - - if(deep && uiObject instanceof ORYX.Core.Shape) { - result = result.concat(uiObject.getChildNodes(deep, iterator)); - } - }); - - return result; - } - }, - - /** - * Overrides the UIObject.add method. Adds uiObject to the correct sub node. - * @param {UIObject} uiObject - * @param {Number} index - */ - add: function(uiObject, index, silent) { - //parameter has to be an UIObject, but - // must not be an Edge. - if(uiObject instanceof ORYX.Core.UIObject - && !(uiObject instanceof ORYX.Core.Edge)) { - - if (!(this.children.member(uiObject))) { - //if uiObject is child of another parent, remove it from that parent. - if(uiObject.parent) { - uiObject.parent.remove(uiObject, true); - } - - //add uiObject to this Shape - if(index != undefined) - this.children.splice(index, 0, uiObject); - else - this.children.push(uiObject); - - //set parent reference - uiObject.parent = this; - - //add uiObject.node to this.node depending on the type of uiObject - var parent; - if(uiObject instanceof ORYX.Core.Node) { - parent = this.node.childNodes[0].childNodes[1]; - this.nodes.push(uiObject); - } else if(uiObject instanceof ORYX.Core.Controls.Control) { - var ctrls = this.node.childNodes[1]; - if(uiObject instanceof ORYX.Core.Controls.Docker) { - parent = ctrls.childNodes[0]; - if (this.dockers.length >= 2){ - this.dockers.splice(index!==undefined?Math.min(index, this.dockers.length-1):this.dockers.length-1, 0, uiObject); - } else { - this.dockers.push(uiObject); - } - } else if(uiObject instanceof ORYX.Core.Controls.Magnet) { - parent = ctrls.childNodes[1]; - this.magnets.push(uiObject); - } else { - parent = ctrls; - } - } else { //UIObject - parent = this.node; - } - - if(index != undefined && index < parent.childNodes.length) - uiObject.node = parent.insertBefore(uiObject.node, parent.childNodes[index]); - else - uiObject.node = parent.appendChild(uiObject.node); - - this._changed(); - //uiObject.bounds.registerCallback(this._changedCallback); - - - if(this.eventHandlerCallback && silent !== true) - this.eventHandlerCallback({type:ORYX.CONFIG.EVENT_SHAPEADDED,shape:uiObject}) - - } else { - - ORYX.Log.warn("add: ORYX.Core.UIObject is already a child of this object."); - } - } else { - - ORYX.Log.warn("add: Parameter is not of type ORYX.Core.UIObject."); - } - }, - - /** - * Overrides the UIObject.remove method. Removes uiObject. - * @param {UIObject} uiObject - */ - remove: function(uiObject, silent) { - //if uiObject is a child of this object, remove it. - if (this.children.member(uiObject)) { - //remove uiObject from children - var parent = uiObject.parent; - - this.children = this.children.without(uiObject); - - //delete parent reference of uiObject - uiObject.parent = undefined; - - //delete uiObject.node from this.node - if(uiObject instanceof ORYX.Core.Shape) { - if(uiObject instanceof ORYX.Core.Edge) { - uiObject.removeMarkers(); - uiObject.node = this.node.childNodes[0].childNodes[2].removeChild(uiObject.node); - } else { - uiObject.node = this.node.childNodes[0].childNodes[1].removeChild(uiObject.node); - this.nodes = this.nodes.without(uiObject); - } - } else if(uiObject instanceof ORYX.Core.Controls.Control) { - if (uiObject instanceof ORYX.Core.Controls.Docker) { - uiObject.node = this.node.childNodes[1].childNodes[0].removeChild(uiObject.node); - this.dockers = this.dockers.without(uiObject); - } else if (uiObject instanceof ORYX.Core.Controls.Magnet) { - uiObject.node = this.node.childNodes[1].childNodes[1].removeChild(uiObject.node); - this.magnets = this.magnets.without(uiObject); - } else { - uiObject.node = this.node.childNodes[1].removeChild(uiObject.node); - } - } - - if(this.eventHandlerCallback && silent !== true) - this.eventHandlerCallback({type: ORYX.CONFIG.EVENT_SHAPEREMOVED, shape: uiObject, parent: parent}); - - this._changed(); - //uiObject.bounds.unregisterCallback(this._changedCallback); - } else { - - ORYX.Log.warn("remove: ORYX.Core.UIObject is not a child of this object."); - } - }, - - /** - * Calculate the Border Intersection Point between two points - * @param {PointA} - * @param {PointB} - */ - getIntersectionPoint: function() { - - var pointAX, pointAY, pointBX, pointBY; - - // Get the the two Points - switch(arguments.length) { - case 2: - pointAX = arguments[0].x; - pointAY = arguments[0].y; - pointBX = arguments[1].x; - pointBY = arguments[1].y; - break; - case 4: - pointAX = arguments[0]; - pointAY = arguments[1]; - pointBX = arguments[2]; - pointBY = arguments[3]; - break; - default: - throw "getIntersectionPoints needs two or four arguments"; - } - - - - // Defined an include and exclude point - var includePointX, includePointY, excludePointX, excludePointY; - - var bounds = this.absoluteBounds(); - - if(this.isPointIncluded(pointAX, pointAY, bounds)){ - includePointX = pointAX; - includePointY = pointAY; - } else { - excludePointX = pointAX; - excludePointY = pointAY; - } - - if(this.isPointIncluded(pointBX, pointBY, bounds)){ - includePointX = pointBX; - includePointY = pointBY; - } else { - excludePointX = pointBX; - excludePointY = pointBY; - } - - // If there is no inclue or exclude Shape, than return - if(!includePointX || !includePointY || !excludePointX || !excludePointY) { - return undefined; - } - - var midPointX = 0; - var midPointY = 0; - - var refPointX, refPointY; - - var minDifferent = 1; - // Get the UpperLeft and LowerRight - //var ul = bounds.upperLeft(); - //var lr = bounds.lowerRight(); - - var i = 0; - - while(true) { - // Calculate the midpoint of the current to points - var midPointX = Math.min(includePointX, excludePointX) + ((Math.max(includePointX, excludePointX) - Math.min(includePointX, excludePointX)) / 2.0); - var midPointY = Math.min(includePointY, excludePointY) + ((Math.max(includePointY, excludePointY) - Math.min(includePointY, excludePointY)) / 2.0); - - - // Set the new midpoint by the means of the include of the bounds - if(this.isPointIncluded(midPointX, midPointY, bounds)){ - includePointX = midPointX; - includePointY = midPointY; - } else { - excludePointX = midPointX; - excludePointY = midPointY; - } - - // Calc the length of the line - var length = Math.sqrt(Math.pow(includePointX - excludePointX, 2) + Math.pow(includePointY - excludePointY, 2)) - // Calc a point one step from the include point - refPointX = includePointX + ((excludePointX - includePointX) / length), - refPointY = includePointY + ((excludePointY - includePointY) / length) - - - // If the reference point not in the bounds, break - if(!this.isPointIncluded(refPointX, refPointY, bounds)) { - break - } - - - } - - // Return the last includepoint - return {x:refPointX , y:refPointY}; - }, - - - - /** - * Calculate if the point is inside the Shape - * @param {PointX} - * @param {PointY} - */ - isPointIncluded: function(){ - return false - }, - - /** - * Returns TRUE if the given node - * is a child node of the shapes node - * @param {Element} node - * @return {Boolean} - * - */ - containsNode: function(node){ - var me = this.node.firstChild.firstChild; - while(node){ - if (node == me){ - return true; - } - node = node.parentNode; - } - return false - }, - - /** - * Calculate if the point is over an special offset area - * @param {Point} - */ - isPointOverOffset: function(){ - return this.isPointIncluded.apply( this , arguments ) - }, - - _dockerChanged: function() { - - }, - - /** - * Create a Docker for this Edge - * - */ - createDocker: function(index, position) { - var docker = new ORYX.Core.Controls.Docker({eventHandlerCallback: this.eventHandlerCallback}); - docker.bounds.registerCallback(this._dockerChangedCallback); - if (position) { - docker.bounds.centerMoveTo(position); - } - this.add(docker, index); - - return docker - }, - - /** - * Get the serialized object - * return Array with hash-entrees (prefix, name, value) - * Following values will given: - * Bounds - * Outgoing Shapes - * Parent - */ - serialize: function() { - var serializedObject = arguments.callee.$.serialize.apply(this); - - // Add the bounds - serializedObject.push({name: 'bounds', prefix:'oryx', value: this.bounds.serializeForERDF(), type: 'literal'}); - - // Add the outgoing shapes - this.getOutgoingShapes().each((function(followingShape){ - serializedObject.push({name: 'outgoing', prefix:'raziel', value: '#'+ERDF.__stripHashes(followingShape.resourceId), type: 'resource'}); - }).bind(this)); - - // Add the parent shape, if the parent not the canvas - //if(this.parent instanceof ORYX.Core.Shape){ - serializedObject.push({name: 'parent', prefix:'raziel', value: '#'+ERDF.__stripHashes(this.parent.resourceId), type: 'resource'}); - //} - - return serializedObject; - }, - - - deserialize: function(serialize, json){ - arguments.callee.$.deserialize.apply(this, arguments); - - // Set the Bounds - var bounds = serialize.find(function(ser){ return 'oryx-bounds' === (ser.prefix+"-"+ser.name) }); - if (bounds) { - var b = bounds.value.replace(/,/g, " ").split(" ").without(""); - if (this instanceof ORYX.Core.Edge) { - if (!this.dockers.first().isChanged) - this.dockers.first().bounds.centerMoveTo(parseFloat(b[0]), parseFloat(b[1])); - if (!this.dockers.last().isChanged) - this.dockers.last().bounds.centerMoveTo(parseFloat(b[2]), parseFloat(b[3])); - } else { - this.bounds.set(parseFloat(b[0]), parseFloat(b[1]), parseFloat(b[2]), parseFloat(b[3])); - } - } - - if (json && json.labels instanceof Array){ - json.labels.each(function(slabel){ - var label = this.getLabel(slabel.ref); - if (label){ - label.deserialize(slabel, this); - } - }.bind(this)) - } - }, - - toJSON: function(){ - var json = arguments.callee.$.toJSON.apply(this, arguments); - - var labels = [], id = this.id; - this._labels.each(function(obj){ - var slabel = obj.value.serialize(); - if (slabel){ - slabel.ref = obj.key.replace(id, ''); - labels.push(slabel); - } - }); - - if (labels.length > 0){ - json.labels = labels; - } - return json; - }, - - - /** - * Private methods. - */ - - /** - * Child classes have to overwrite this method for initializing a loaded - * SVG representation. - * @param {SVGDocument} svgDocument - */ - _init: function(svgDocument) { - //adjust ids - this._adjustIds(svgDocument, 0); - }, - - _adjustIds: function(element, idIndex) { - if(element instanceof Element) { - var eid = element.getAttributeNS(null, 'id'); - if(eid && eid !== "") { - element.setAttributeNS(null, 'id', this.id + eid); - } else { - element.setAttributeNS(null, 'id', this.id + "_" + this.id + "_" + idIndex); - idIndex++; - } - - // Replace URL in fill attribute - var fill = element.getAttributeNS(null, 'fill'); - if (fill&&fill.include("url(#")){ - fill = fill.replace(/url\(#/g, 'url(#'+this.id); - element.setAttributeNS(null, 'fill', fill); - } - - if(element.hasChildNodes()) { - for(var i = 0; i < element.childNodes.length; i++) { - idIndex = this._adjustIds(element.childNodes[i], idIndex); - } - } - } - return idIndex; - }, - - toString: function() { return "ORYX.Core.Shape " + this.getId() } -}; -ORYX.Core.Shape = ORYX.Core.AbstractShape.extend(ORYX.Core.Shape);/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.Controls) {ORYX.Core.Controls = {};} - - -/** - * @classDescription Abstract base class for all Controls. - */ -ORYX.Core.Controls.Control = ORYX.Core.UIObject.extend({ - - toString: function() { return "Control " + this.id; } - });/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.Controls) {ORYX.Core.Controls = {};} - - -/** - * @classDescription Represents a movable docker that can be bound to a shape. Dockers are used - * for positioning shape objects. - * @extends {Control} - * - * TODO absoluteXY und absoluteCenterXY von einem Docker liefern falsche Werte!!! - */ -ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({ - /** - * Constructor - */ - construct: function() { - arguments.callee.$.construct.apply(this, arguments); - - this.isMovable = true; // Enables movability - this.bounds.set(0, 0, 16, 16); // Set the bounds - this.referencePoint = undefined; // Refrenzpoint - this._dockedShapeBounds = undefined; - this._dockedShape = undefined; - this._oldRefPoint1 = undefined; - this._oldRefPoint2 = undefined; - - //this.anchors = []; - this.anchorLeft; - this.anchorRight; - this.anchorTop; - this.anchorBottom; - - this.node = ORYX.Editor.graft("http://www.w3.org/2000/svg", - null, - ['g']); - - // The DockerNode reprasentation - this._dockerNode = ORYX.Editor.graft("http://www.w3.org/2000/svg", - this.node, - ['g', {"pointer-events":"all"}, - ['circle', {cx:"8", cy:"8", r:"8", stroke:"none", fill:"none"}], - ['circle', {cx:"8", cy:"8", r:"3", stroke:"black", fill:"red", "stroke-width":"1"}] - ]); - - // The ReferenzNode reprasentation - this._referencePointNode = ORYX.Editor.graft("http://www.w3.org/2000/svg", - this.node, - ['g', {"pointer-events":"none"}, - ['circle', {cx: this.bounds.upperLeft().x, cy: this.bounds.upperLeft().y, r: 3, fill:"red", "fill-opacity":0.4}]]); - - // Hide the Docker - this.hide(); - - //Add to the EventHandler - this.addEventHandlers(this._dockerNode); - - // Buffer the Update Callback for un-/register on Event-Handler - this._updateCallback = this._changed.bind(this); - }, - - update: function() { - // If there have an DockedShape - if(this._dockedShape) { - if(this._dockedShapeBounds && this._dockedShape instanceof ORYX.Core.Node) { - // Calc the delta of width and height of the lastBounds and the current Bounds - var dswidth = this._dockedShapeBounds.width(); - var dsheight = this._dockedShapeBounds.height(); - if(!dswidth) - dswidth = 1; - if(!dsheight) - dsheight = 1; - var widthDelta = this._dockedShape.bounds.width() / dswidth; - var heightDelta = this._dockedShape.bounds.height() / dsheight; - - // If there is an different - if(widthDelta !== 1.0 || heightDelta !== 1.0) { - // Set the delta - this.referencePoint.x *= widthDelta; - this.referencePoint.y *= heightDelta; - } - - // Clone these bounds - this._dockedShapeBounds = this._dockedShape.bounds.clone(); - } - - // Get the first and the last Docker of the parent Shape - var dockerIndex = this.parent.dockers.indexOf(this) - var dock1 = this; - var dock2 = this.parent.dockers.length > 1 ? - (dockerIndex === 0? // If there is the first element - this.parent.dockers[dockerIndex + 1]: // then take the next docker - this.parent.dockers[dockerIndex - 1]): // if not, then take the docker before - undefined; - - // Calculate the first absolute Refenzpoint - var absoluteReferenzPoint1 = dock1.getDockedShape() ? - dock1.getAbsoluteReferencePoint() : - dock1.bounds.center(); - - // Calculate the last absolute Refenzpoint - var absoluteReferenzPoint2 = dock2 && dock2.getDockedShape() ? - dock2.getAbsoluteReferencePoint() : - dock2 ? - dock2.bounds.center() : - undefined; - - // If there is no last absolute Referenzpoint - if(!absoluteReferenzPoint2) { - // Calculate from the middle of the DockedShape - var center = this._dockedShape.absoluteCenterXY(); - var minDimension = this._dockedShape.bounds.width() * this._dockedShape.bounds.height(); - absoluteReferenzPoint2 = { - x: absoluteReferenzPoint1.x + (center.x - absoluteReferenzPoint1.x) * -minDimension, - y: absoluteReferenzPoint1.y + (center.y - absoluteReferenzPoint1.y) * -minDimension - } - } - - var newPoint = undefined; - - /*if (!this._oldRefPoint1 || !this._oldRefPoint2 || - absoluteReferenzPoint1.x !== this._oldRefPoint1.x || - absoluteReferenzPoint1.y !== this._oldRefPoint1.y || - absoluteReferenzPoint2.x !== this._oldRefPoint2.x || - absoluteReferenzPoint2.y !== this._oldRefPoint2.y) {*/ - - // Get the new point for the Docker, calucalted by the intersection point of the Shape and the two points - newPoint = this._dockedShape.getIntersectionPoint(absoluteReferenzPoint1, absoluteReferenzPoint2); - - // If there is new point, take the referencepoint as the new point - if(!newPoint) { - newPoint = this.getAbsoluteReferencePoint(); - } - - if(this.parent && this.parent.parent) { - var grandParentPos = this.parent.parent.absoluteXY(); - newPoint.x -= grandParentPos.x; - newPoint.y -= grandParentPos.y; - } - - // Set the bounds to the new point - this.bounds.centerMoveTo(newPoint) - - this._oldRefPoint1 = absoluteReferenzPoint1; - this._oldRefPoint2 = absoluteReferenzPoint2; - } - /*else { - newPoint = this.bounds.center(); - }*/ - - - // } - - // Call the super class - arguments.callee.$.update.apply(this, arguments); - }, - - /** - * Calls the super class refresh method and updates the view of the docker. - */ - refresh: function() { - arguments.callee.$.refresh.apply(this, arguments); - - // Refresh the dockers node - var p = this.bounds.upperLeft(); - this._dockerNode.setAttributeNS(null, 'transform','translate(' + p.x + ', ' + p.y + ')'); - - // Refresh the referencepoints node - p = Object.clone(this.referencePoint); - - if(p && this._dockedShape){ - var upL - if(this.parent instanceof ORYX.Core.Edge) { - upL = this._dockedShape.absoluteXY(); - } else { - upL = this._dockedShape.bounds.upperLeft(); - } - p.x += upL.x; - p.y += upL.y; - } else { - p = this.bounds.center(); - } - - this._referencePointNode.setAttributeNS(null, 'transform','translate(' + p.x + ', ' + p.y + ')'); - }, - - /** - * Set the reference point - * @param {Object} point - */ - setReferencePoint: function(point) { - // Set the referencepoint - if(this.referencePoint !== point && - (!this.referencePoint || - !point || - this.referencePoint.x !== point.x || - this.referencePoint.y !== point.y)) { - - this.referencePoint = point; - this._changed(); - } - - - // Update directly, because the referencepoint has no influence of the bounds - //this.refresh(); - }, - - /** - * Get the absolute referencepoint - */ - getAbsoluteReferencePoint: function() { - if(!this.referencePoint || !this._dockedShape) { - return undefined; - } else { - var absUL = this._dockedShape.absoluteXY(); - return { - x: this.referencePoint.x + absUL.x, - y: this.referencePoint.y + absUL.y - } - } - }, - - /** - * Set the docked Shape from the docker - * @param {Object} shape - */ - setDockedShape: function(shape) { - - // If there is an old docked Shape - if(this._dockedShape) { - this._dockedShape.bounds.unregisterCallback(this._updateCallback) - - // Delete the Shapes from the incoming and outgoing array - // If this Docker the incoming of the Shape - if(this === this.parent.dockers.first()) { - - this.parent.incoming = this.parent.incoming.without(this._dockedShape); - this._dockedShape.outgoing = this._dockedShape.outgoing.without(this.parent); - - // If this Docker the outgoing of the Shape - } else if (this === this.parent.dockers.last()){ - - this.parent.outgoing = this.parent.outgoing.without(this._dockedShape); - this._dockedShape.incoming = this._dockedShape.incoming.without(this.parent); - - } - - } - - - // Set the new Shape - this._dockedShape = shape; - this._dockedShapeBounds = undefined; - var referencePoint = undefined; - - // If there is an Shape, register the updateCallback if there are changes in the shape bounds - if(this._dockedShape) { - - // Add the Shapes to the incoming and outgoing array - // If this Docker the incoming of the Shape - if(this === this.parent.dockers.first()) { - - this.parent.incoming.push(shape); - shape.outgoing.push(this.parent); - - // If this Docker the outgoing of the Shape - } else if (this === this.parent.dockers.last()){ - - this.parent.outgoing.push(shape); - shape.incoming.push(this.parent); - - } - - // Get the bounds and set the new referencepoint - var bounds = this.bounds; - var absUL = shape.absoluteXY(); - - /*if(shape.parent){ - var b = shape.parent.bounds.upperLeft(); - absUL.x -= b.x; - absUL.y -= b.y; - }*/ - - referencePoint = { - x: bounds.center().x - absUL.x, - y: bounds.center().y - absUL.y - } - - this._dockedShapeBounds = this._dockedShape.bounds.clone(); - - this._dockedShape.bounds.registerCallback(this._updateCallback); - - // Set the color of the docker as docked - this.setDockerColor(ORYX.CONFIG.DOCKER_DOCKED_COLOR); - } else { - // Set the color of the docker as undocked - this.setDockerColor(ORYX.CONFIG.DOCKER_UNDOCKED_COLOR); - } - - // Set the referencepoint - this.setReferencePoint(referencePoint); - this._changed(); - //this.update(); - }, - - /** - * Get the docked Shape - */ - getDockedShape: function() { - return this._dockedShape; - }, - - /** - * Returns TRUE if the docker has a docked shape - */ - isDocked: function() { - return !!this._dockedShape; - }, - - /** - * Set the Color of the Docker - * @param {Object} color - */ - setDockerColor: function(color) { - this._dockerNode.lastChild.setAttributeNS(null, "fill", color); - }, - - preventHiding: function(prevent){ - this._preventHiding = Math.max(0, (this._preventHiding||0) + (prevent ? 1 : -1)); - }, - - /** - * Hides this UIObject and all its children. - */ - hide: function() { - if (this._preventHiding){ - return false; - } - - // Hide docker and reference point - this.node.setAttributeNS(null, 'visibility', 'hidden'); - this._referencePointNode.setAttributeNS(null, 'visibility', 'hidden'); - - this.children.each(function(uiObj) { - uiObj.hide(); - }); - }, - - /** - * Enables visibility of this UIObject and all its children. - */ - show: function() { - // Show docker - this.node.setAttributeNS(null, 'visibility', 'visible'); - - // Hide reference point if the connected shape is an edge - if (this.getDockedShape() instanceof ORYX.Core.Edge){ - this._referencePointNode.setAttributeNS(null, 'visibility', 'hidden'); - } else { - this._referencePointNode.setAttributeNS(null, 'visibility', 'visible'); - } - - this.children.each(function(uiObj) { - uiObj.show(); - }); - }, - - toString: function() { return "Docker " + this.id } -});/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if(!ORYX) {var ORYX = {};} -if(!ORYX.Core) {ORYX.Core = {};} -if(!ORYX.Core.Controls) {ORYX.Core.Controls = {};} - - -/** - * @classDescription Represents a magnet that is part of another shape and can - * be attached to dockers. Magnets are used for linking edge objects - * to other Shape objects. - * @extends {Control} - */ -ORYX.Core.Controls.Magnet = ORYX.Core.Controls.Control.extend({ - - /** - * Constructor - */ - construct: function() { - arguments.callee.$.construct.apply(this, arguments); - - //this.anchors = []; - this.anchorLeft; - this.anchorRight; - this.anchorTop; - this.anchorBottom; - - this.bounds.set(0, 0, 16, 16); - - //graft magnet's root node into owner's control group. - this.node = ORYX.Editor.graft("http://www.w3.org/2000/svg", - null, - ['g', {"pointer-events":"all"}, - ['circle', {cx:"8", cy:"8", r:"4", stroke:"none", fill:"red", "fill-opacity":"0.3"}], - ]); - - this.hide(); - }, - - update: function() { - arguments.callee.$.update.apply(this, arguments); - - //this.isChanged = true; - }, - - _update: function() { - arguments.callee.$.update.apply(this, arguments); - - //this.isChanged = true; - }, - - refresh: function() { - arguments.callee.$.refresh.apply(this, arguments); - - var p = this.bounds.upperLeft(); - /*if(this.parent) { - var parentPos = this.parent.bounds.upperLeft(); - p.x += parentPos.x; - p.y += parentPos.y; - }*/ - - this.node.setAttributeNS(null, 'transform','translate(' + p.x + ', ' + p.y + ')'); - }, - - show: function() { - //this.refresh(); - arguments.callee.$.show.apply(this, arguments); - }, - - toString: function() { - return "Magnet " + this.id; - } -}); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * Init namespaces - */ -if (!ORYX) { - var ORYX = {}; -} -if (!ORYX.Core) { - ORYX.Core = {}; -} - -/** - * @classDescription Abstract base class for all Nodes. - * @extends ORYX.Core.Shape - */ -ORYX.Core.Node = { - - /** - * Constructor - * @param options {Object} A container for arguments. - * @param stencil {Stencil} - */ - construct: function(options, stencil, facade){ - arguments.callee.$.construct.apply(this, arguments); - - this.isSelectable = true; - this.isMovable = true; - this._dockerUpdated = false; - this.facade = facade; - - this._oldBounds = new ORYX.Core.Bounds(); //init bounds with undefined values - this._svgShapes = []; //array of all SVGShape objects of - // SVG representation - - //TODO vielleicht in shape verschieben? - this.minimumSize = undefined; // {width:..., height:...} - this.maximumSize = undefined; - - //TODO vielleicht in shape oder uiobject verschieben? - // vielleicht sogar isResizable ersetzen? - this.isHorizontallyResizable = false; - this.isVerticallyResizable = false; - - this.dataId = undefined; - - this._init(this._stencil.view()); - this.forcedHeight = -1; - }, - - /** - * This method checks whether the shape is resized correctly and calls the - * super class update method. - */ - _update: function(){ - - this.dockers.invoke("update"); - if (this.isChanged) { - - var bounds = this.bounds; - var oldBounds = this._oldBounds; - - if (this.isResized) { - - var widthDelta = bounds.width() / oldBounds.width(); - var heightDelta = bounds.height() / oldBounds.height(); - - //iterate over all relevant svg elements and resize them - this._svgShapes.each(function(svgShape){ - //adjust width - if (svgShape.isHorizontallyResizable) { - svgShape.width = svgShape.oldWidth * widthDelta; - } - //adjust height - if (svgShape.isVerticallyResizable) { - svgShape.height = svgShape.oldHeight * heightDelta; - } - - //check, if anchors are set - var anchorOffset; - var leftIncluded = svgShape.anchorLeft; - var rightIncluded = svgShape.anchorRight; - - if (rightIncluded) { - anchorOffset = oldBounds.width() - (svgShape.oldX + svgShape.oldWidth); - if (leftIncluded) { - svgShape.width = bounds.width() - svgShape.x - anchorOffset; - } - else { - svgShape.x = bounds.width() - (anchorOffset + svgShape.width); - } - } - else - if (!leftIncluded) { - svgShape.x = widthDelta * svgShape.oldX; - if (!svgShape.isHorizontallyResizable) { - svgShape.x = svgShape.x + svgShape.width * widthDelta / 2 - svgShape.width / 2; - } - } - - var topIncluded = svgShape.anchorTop; - var bottomIncluded = svgShape.anchorBottom; - - if (bottomIncluded) { - anchorOffset = oldBounds.height() - (svgShape.oldY + svgShape.oldHeight); - if (topIncluded) { - svgShape.height = bounds.height() - svgShape.y - anchorOffset; - } - else { - // Hack for choreography task layouting - if (!svgShape._isYLocked) { - svgShape.y = bounds.height() - (anchorOffset + svgShape.height); - } - } - } - else - if (!topIncluded) { - svgShape.y = heightDelta * svgShape.oldY; - if (!svgShape.isVerticallyResizable) { - svgShape.y = svgShape.y + svgShape.height * heightDelta / 2 - svgShape.height / 2; - } - } - }); - - //check, if the current bounds is unallowed horizontally or vertically resized - var p = { - x: 0, - y: 0 - }; - if (!this.isHorizontallyResizable && bounds.width() !== oldBounds.width()) { - p.x = oldBounds.width() - bounds.width(); - } - if (!this.isVerticallyResizable && bounds.height() !== oldBounds.height()) { - p.y = oldBounds.height() - bounds.height(); - } - if (p.x !== 0 || p.y !== 0) { - bounds.extend(p); - } - - //check, if the current bounds are between maximum and minimum bounds - p = { - x: 0, - y: 0 - }; - var widthDifference, heightDifference; - if (this.minimumSize) { - - ORYX.Log.debug("Shape (%0)'s min size: (%1x%2)", this, this.minimumSize.width, this.minimumSize.height); - widthDifference = this.minimumSize.width - bounds.width(); - if (widthDifference > 0) { - p.x += widthDifference; - } - heightDifference = this.minimumSize.height - bounds.height(); - if (heightDifference > 0) { - p.y += heightDifference; - } - } - if (this.maximumSize) { - - ORYX.Log.debug("Shape (%0)'s max size: (%1x%2)", this, this.maximumSize.width, this.maximumSize.height); - widthDifference = bounds.width() - this.maximumSize.width; - if (widthDifference > 0) { - p.x -= widthDifference; - } - heightDifference = bounds.height() - this.maximumSize.height; - if (heightDifference > 0) { - p.y -= heightDifference; - } - } - if (p.x !== 0 || p.y !== 0) { - bounds.extend(p); - } - - //update magnets - - var widthDelta = bounds.width() / oldBounds.width(); - var heightDelta = bounds.height() / oldBounds.height(); - - var leftIncluded, rightIncluded, topIncluded, bottomIncluded, center, newX, newY; - - this.magnets.each(function(magnet){ - leftIncluded = magnet.anchorLeft; - rightIncluded = magnet.anchorRight; - topIncluded = magnet.anchorTop; - bottomIncluded = magnet.anchorBottom; - - center = magnet.bounds.center(); - - if (leftIncluded) { - newX = center.x; - } - else - if (rightIncluded) { - newX = bounds.width() - (oldBounds.width() - center.x) - } - else { - newX = center.x * widthDelta; - } - - if (topIncluded) { - newY = center.y; - } - else - if (bottomIncluded) { - newY = bounds.height() - (oldBounds.height() - center.y); - } - else { - newY = center.y * heightDelta; - } - - if (center.x !== newX || center.y !== newY) { - magnet.bounds.centerMoveTo(newX, newY); - } - }); - - //set new position of labels - this.getLabels().each(function(label){ - // Set the position dependings on it anchor - if (!label.isAnchorLeft()) { - if (label.isAnchorRight()) { - label.setX(bounds.width() - (oldBounds.width() - label.oldX)) - } else { - label.setX((label.position?label.position.x:label.x) * widthDelta); - } - } - if (!label.isAnchorTop()) { - if (label.isAnchorBottom()) { - label.setY(bounds.height() - (oldBounds.height() - label.oldY)); - } else { - label.setY((label.position?label.position.y:label.y) * heightDelta); - } - } - - // If there is an position, - // set the origin position as well - if (label.position){ - if (!label.isOriginAnchorLeft()) { - if (label.isOriginAnchorRight()) { - label.setOriginX(bounds.width() - (oldBounds.width() - label.oldX)) - } else { - label.setOriginX(label.x * widthDelta); - } - } - if (!label.isOriginAnchorTop()) { - if (label.isOriginAnchorBottom()) { - label.setOriginY(bounds.height() - (oldBounds.height() - label.oldY)); - } else { - label.setOriginY(label.y * heightDelta); - } - } - } - }); - - //update docker - var docker = this.dockers[0]; - if (docker) { - docker.bounds.unregisterCallback(this._dockerChangedCallback); - if (!this._dockerUpdated) { - docker.bounds.centerMoveTo(this.bounds.center()); - this._dockerUpdated = false; - } - - docker.update(); - docker.bounds.registerCallback(this._dockerChangedCallback); - } - this.isResized = false; - } - - this.refresh(); - - this.isChanged = false; - - this._oldBounds = this.bounds.clone(); - } - - this.children.each(function(value) { - if(!(value instanceof ORYX.Core.Controls.Docker)) { - value._update(); - } - }); - - if (this.dockers.length > 0&&!this.dockers.first().getDockedShape()) { - this.dockers.each(function(docker){ - docker.bounds.centerMoveTo(this.bounds.center()) - }.bind(this)) - } - - /*this.incoming.each((function(edge) { - if(!(this.dockers[0] && this.dockers[0].getDockedShape() instanceof ORYX.Core.Node)) - edge._update(true); - }).bind(this)); - - this.outgoing.each((function(edge) { - if(!(this.dockers[0] && this.dockers[0].getDockedShape() instanceof ORYX.Core.Node)) - edge._update(true); - }).bind(this)); */ - }, - - /** - * This method repositions and resizes the SVG representation - * of the shape. - */ - refresh: function(){ - arguments.callee.$.refresh.apply(this, arguments); - - /** Movement */ - var x = this.bounds.upperLeft().x; - var y = this.bounds.upperLeft().y; - - // Move owner element - this.node.firstChild.setAttributeNS(null, "transform", "translate(" + x + ", " + y + ")"); - // Move magnets - this.node.childNodes[1].childNodes[1].setAttributeNS(null, "transform", "translate(" + x + ", " + y + ")"); - - /** Resize */ - - //iterate over all relevant svg elements and update them - this._svgShapes.each(function(svgShape){ - svgShape.update(); - }); - }, - - _dockerChanged: function(){ - var docker = this.dockers[0]; - - //set the bounds of the the association - this.bounds.centerMoveTo(docker.bounds.center()); - - this._dockerUpdated = true; - //this._update(true); - }, - - /** - * This method traverses a tree of SVGElements and returns - * all SVGShape objects. For each basic shape or path element - * a SVGShape object is initialized. - * - * @param svgNode {SVGElement} - * @return {Array} Array of SVGShape objects - */ - _initSVGShapes: function(svgNode){ - var svgShapes = []; - try { - var svgShape = new ORYX.Core.SVG.SVGShape(svgNode); - svgShapes.push(svgShape); - } - catch (e) { - //do nothing - } - - if (svgNode.hasChildNodes()) { - for (var i = 0; i < svgNode.childNodes.length; i++) { - svgShapes = svgShapes.concat(this._initSVGShapes(svgNode.childNodes[i])); - } - } - - return svgShapes; - }, - - /** - * Calculate if the point is inside the Shape - * @param {PointX} - * @param {PointY} - * @param {absoluteBounds} optional: for performance - */ - isPointIncluded: function(pointX, pointY, absoluteBounds){ - // If there is an arguments with the absoluteBounds - var absBounds = absoluteBounds && absoluteBounds instanceof ORYX.Core.Bounds ? absoluteBounds : this.absoluteBounds(); - - if (!absBounds.isIncluded(pointX, pointY)) { - return false; - } else { - - } - - - //point = Object.clone(point); - var ul = absBounds.upperLeft(); - var x = pointX - ul.x; - var y = pointY - ul.y; - - var i=0; - do { - var isPointIncluded = this._svgShapes[i++].isPointIncluded( x, y ); - } while( !isPointIncluded && i < this._svgShapes.length) - - return isPointIncluded; - - /*return this._svgShapes.any(function(svgShape){ - return svgShape.isPointIncluded(point); - });*/ - }, - - - /** - * Calculate if the point is over an special offset area - * @param {Point} - */ - isPointOverOffset: function( pointX, pointY ){ - var isOverEl = arguments.callee.$.isPointOverOffset.apply( this , arguments ); - - if (isOverEl) { - - // If there is an arguments with the absoluteBounds - var absBounds = this.absoluteBounds(); - absBounds.widen( - ORYX.CONFIG.BORDER_OFFSET ); - - if ( !absBounds.isIncluded( pointX, pointY )) { - return true; - } - } - - return false; - - }, - - serialize: function(){ - var result = arguments.callee.$.serialize.apply(this); - - // Add the docker's bounds - // nodes only have at most one docker! - this.dockers.each((function(docker){ - if (docker.getDockedShape()) { - var center = docker.referencePoint; - center = center ? center : docker.bounds.center(); - result.push({ - name: 'docker', - prefix: 'oryx', - value: $H(center).values().join(','), - type: 'literal' - }); - } - }).bind(this)); - - // Get the spezific serialized object from the stencil - try { - //result = this.getStencil().serialize(this, result); - - var serializeEvent = this.getStencil().serialize(); - - /* - * call serialize callback by reference, result should be found - * in serializeEvent.result - */ - if(serializeEvent.type) { - serializeEvent.shape = this; - serializeEvent.data = result; - serializeEvent.result = undefined; - serializeEvent.forceExecution = true; - - this._delegateEvent(serializeEvent); - - if(serializeEvent.result) { - result = serializeEvent.result; - } - } - } - catch (e) { - } - return result; - }, - - deserialize: function(data){ - arguments.callee.$.deserialize.apply(this, arguments); - - try { - //data = this.getStencil().deserialize(this, data); - - var deserializeEvent = this.getStencil().deserialize(); - - /* - * call serialize callback by reference, result should be found - * in serializeEventInfo.result - */ - if(deserializeEvent.type) { - deserializeEvent.shape = this; - deserializeEvent.data = data; - deserializeEvent.result = undefined; - deserializeEvent.forceExecution = true; - - this._delegateEvent(deserializeEvent); - if(deserializeEvent.result) { - data = deserializeEvent.result; - } - } - } - catch (e) { - } - - // Set the outgoing shapes - var outgoing = data.findAll(function(ser){ return (ser.prefix+"-"+ser.name) == 'raziel-outgoing'}); - outgoing.each((function(obj){ - // TODO: Look at Canvas - if(!this.parent) {return}; - - // Set outgoing Shape - var next = this.getCanvas().getChildShapeByResourceId(obj.value); - - if(next){ - if(next instanceof ORYX.Core.Edge) { - //Set the first docker of the next shape - next.dockers.first().setDockedShape(this); - next.dockers.first().setReferencePoint(next.dockers.first().bounds.center()); - } else if(next.dockers.length > 0) { //next is a node and next has a docker - next.dockers.first().setDockedShape(this); - //next.dockers.first().setReferencePoint({x: this.bounds.width() / 2.0, y: this.bounds.height() / 2.0}); - } - } - - }).bind(this)); - - if (this.dockers.length === 1) { - var dockerPos; - dockerPos = data.find(function(entry){ - return (entry.prefix + "-" + entry.name === "oryx-dockers"); - }); - - if (dockerPos) { - var points = dockerPos.value.replace(/,/g, " ").split(" ").without("").without("#"); - if (points.length === 2 && this.dockers[0].getDockedShape()) { - this.dockers[0].setReferencePoint({ - x: parseFloat(points[0]), - y: parseFloat(points[1]) - }); - } - else { - this.dockers[0].bounds.centerMoveTo(parseFloat(points[0]), parseFloat(points[1])); - } - } - } - }, - - /** - * This method excepts the SVGDoucment that is the SVG representation - * of this shape. - * The bounds of the shape are calculated, the SVG representation's upper left point - * is moved to 0,0 and it the method sets if this shape is resizable. - * - * @param {SVGDocument} svgDocument - */ - _init: function(svgDocument){ - arguments.callee.$._init.apply(this, arguments); - - var svgNode = svgDocument.getElementsByTagName("g")[0]; //outer most g node - // set all required attributes - var attributeTitle = svgDocument.ownerDocument.createAttribute("title"); - attributeTitle.nodeValue = this.getStencil().title(); - svgNode.setAttributeNode(attributeTitle); - - var attributeId = svgDocument.ownerDocument.createAttribute("id"); - attributeId.nodeValue = this.id; - svgNode.setAttributeNode(attributeId); - - // - var stencilTargetNode = this.node.childNodes[0].childNodes[0]; // " - svgNode = stencilTargetNode.appendChild(svgNode); - - // Add to the EventHandler - this.addEventHandlers(svgNode.parentNode); - - /**set minimum and maximum size*/ - var minSizeAttr = svgNode.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "minimumSize"); - if (minSizeAttr) { - minSizeAttr = minSizeAttr.replace("/,/g", " "); - var minSizeValues = minSizeAttr.split(" "); - minSizeValues = minSizeValues.without(""); - - if (minSizeValues.length > 1) { - this.minimumSize = { - width: parseFloat(minSizeValues[0]), - height: parseFloat(minSizeValues[1]) - }; - } - else { - //set minimumSize to (1,1), so that width and height of the stencil can never be (0,0) - this.minimumSize = { - width: 1, - height: 1 - }; - } - } - - var maxSizeAttr = svgNode.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "maximumSize"); - if (maxSizeAttr) { - maxSizeAttr = maxSizeAttr.replace("/,/g", " "); - var maxSizeValues = maxSizeAttr.split(" "); - maxSizeValues = maxSizeValues.without(""); - - if (maxSizeValues.length > 1) { - this.maximumSize = { - width: parseFloat(maxSizeValues[0]), - height: parseFloat(maxSizeValues[1]) - }; - } - } - - if (this.minimumSize && this.maximumSize && - (this.minimumSize.width > this.maximumSize.width || - this.minimumSize.height > this.maximumSize.height)) { - - //TODO wird verschluckt!!! - throw this + ": Minimum Size must be greater than maxiumSize."; - } - - /**get current bounds and adjust it to upperLeft == (0,0)*/ - //initialize all SVGShape objects - this._svgShapes = this._initSVGShapes(svgNode); - - //get upperLeft and lowerRight of stencil - var upperLeft = { - x: undefined, - y: undefined - }; - var lowerRight = { - x: undefined, - y: undefined - }; - var me = this; - this._svgShapes.each(function(svgShape){ - upperLeft.x = (upperLeft.x !== undefined) ? Math.min(upperLeft.x, svgShape.x) : svgShape.x; - upperLeft.y = (upperLeft.y !== undefined) ? Math.min(upperLeft.y, svgShape.y) : svgShape.y; - lowerRight.x = (lowerRight.x !== undefined) ? Math.max(lowerRight.x, svgShape.x + svgShape.width) : svgShape.x + svgShape.width; - lowerRight.y = (lowerRight.y !== undefined) ? Math.max(lowerRight.y, svgShape.y + svgShape.height) : svgShape.y + svgShape.height; - - /** set if resizing is enabled */ - //TODO isResizable durch die beiden anderen booleans ersetzen? - if (svgShape.isHorizontallyResizable) { - me.isHorizontallyResizable = true; - me.isResizable = true; - } - if (svgShape.isVerticallyResizable) { - me.isVerticallyResizable = true; - me.isResizable = true; - } - if (svgShape.anchorTop && svgShape.anchorBottom) { - me.isVerticallyResizable = true; - me.isResizable = true; - } - if (svgShape.anchorLeft && svgShape.anchorRight) { - me.isHorizontallyResizable = true; - me.isResizable = true; - } - }); - - //move all SVGShapes by -upperLeft - this._svgShapes.each(function(svgShape){ - svgShape.x -= upperLeft.x; - svgShape.y -= upperLeft.y; - svgShape.update(); - }); - - //set bounds of shape - //the offsets are also needed for positioning the magnets and the docker - var offsetX = upperLeft.x; - var offsetY = upperLeft.y; - - lowerRight.x -= offsetX; - lowerRight.y -= offsetY; - upperLeft.x = 0; - upperLeft.y = 0; - - //prevent that width or height of initial bounds is 0 - if (lowerRight.x === 0) { - lowerRight.x = 1; - } - if (lowerRight.y === 0) { - lowerRight.y = 1; - } - - this._oldBounds.set(upperLeft, lowerRight); - this.bounds.set(upperLeft, lowerRight); - - /**initialize magnets */ - - var magnets = svgDocument.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_ORYX, "magnets"); - - if (magnets && magnets.length > 0) { - - magnets = $A(magnets[0].getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_ORYX, "magnet")); - - var me = this; - magnets.each(function(magnetElem){ - var magnet = new ORYX.Core.Controls.Magnet({ - eventHandlerCallback: me.eventHandlerCallback - }); - var cx = parseFloat(magnetElem.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "cx")); - var cy = parseFloat(magnetElem.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "cy")); - magnet.bounds.centerMoveTo({ - x: cx - offsetX, - y: cy - offsetY - }); - - //get anchors - var anchors = magnetElem.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "anchors"); - if (anchors) { - anchors = anchors.replace("/,/g", " "); - anchors = anchors.split(" ").without(""); - for(var i = 0; i < anchors.length; i++) { - switch(anchors[i].toLowerCase()) { - case "left": - magnet.anchorLeft = true; - break; - case "right": - magnet.anchorRight = true; - break; - case "top": - magnet.anchorTop = true; - break; - case "bottom": - magnet.anchorBottom = true; - break; - } - } - } - - me.add(magnet); - - //check, if magnet is default magnet - if (!this._defaultMagnet) { - var defaultAttr = magnetElem.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "default"); - if (defaultAttr && defaultAttr.toLowerCase() === "yes") { - me._defaultMagnet = magnet; - } - } - }); - } - else { - // Add a Magnet in the Center of Shape - var magnet = new ORYX.Core.Controls.Magnet(); - magnet.bounds.centerMoveTo(this.bounds.width() / 2, this.bounds.height() / 2); - this.add(magnet); - } - - /**initialize docker */ - var dockerElem = svgDocument.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_ORYX, "docker"); - - if (dockerElem && dockerElem.length > 0) { - dockerElem = dockerElem[0]; - var docker = this.createDocker(); - var cx = parseFloat(dockerElem.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "cx")); - var cy = parseFloat(dockerElem.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "cy")); - docker.bounds.centerMoveTo({ - x: cx - offsetX, - y: cy - offsetY - }); - - //get anchors - var anchors = dockerElem.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "anchors"); - if (anchors) { - anchors = anchors.replace("/,/g", " "); - anchors = anchors.split(" ").without(""); - - for(var i = 0; i < anchors.length; i++) { - switch(anchors[i].toLowerCase()) { - case "left": - docker.anchorLeft = true; - break; - case "right": - docker.anchorRight = true; - break; - case "top": - docker.anchorTop = true; - break; - case "bottom": - docker.anchorBottom = true; - break; - } - } - } - } - - /**initialize labels*/ - var textElems = svgNode.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'text'); - $A(textElems).each((function(textElem){ - var label = new ORYX.Core.SVG.Label({ - textElement: textElem, - shapeId: this.id - }); - label.x -= offsetX; - label.y -= offsetY; - this._labels.set(label.id, label); - - label.registerOnChange(this.layout.bind(this)); - - // Only apply fitting on form-components - if(this._stencil.id().indexOf(ORYX.CONFIG.FORM_ELEMENT_ID_PREFIX) == 0) { - label.registerOnChange(this.fitToLabels.bind(this)); - } - - }).bind(this)); - }, - - fitToLabels: function() { - var y = 0; - - this.getLabels().each(function(label){ - var lr = label.getY() + label.getHeight(); - if(lr > y) { - y = lr; - } - }); - - var bounds = this.bounds; - var boundsChanged = false; - - if(this.minimumSize) { - // Check if y-value exceeds the min-value. If not, stick to this value. - var minHeight = this.minimumSize.height; - if(y < minHeight && bounds.height() > minHeight && minHeight > this.forcedHeight) { - bounds.set(bounds.upperLeft().x, bounds.upperLeft().y, bounds.lowerRight().x, bounds.upperLeft().y + minHeight); - boundsChanged = true; - } else if(y > minHeight && bounds.height() != y && y > this.forcedHeight){ - bounds.set(bounds.upperLeft().x, bounds.upperLeft().y, bounds.lowerRight().x, bounds.upperLeft().y + y); - boundsChanged = true; - } else if(bounds.height() > this.forcedHeight && this.forcedHeight > 0) { - bounds.set(bounds.upperLeft().x, bounds.upperLeft().y, bounds.lowerRight().x, bounds.upperLeft().y + this.forcedHeight); - boundsChanged = true; - } - } - - if(boundsChanged) { - // Force facade to re-layout since bounds are changed AFTER layout has been performed - if(this.facade.getCanvas() != null) { - this.facade.getCanvas().update(); - } - - // Re-select if needed to force the select - if(this.facade.getSelection().member(this)) { - var selectedNow = this.facade.getSelection(); - this.facade.setSelection([]); - this.facade.setSelection(selectedNow); - } - } - }, - - /** - * Override the Method, that a docker is not shown - * - */ - createDocker: function() { - var docker = new ORYX.Core.Controls.Docker({eventHandlerCallback: this.eventHandlerCallback}); - docker.bounds.registerCallback(this._dockerChangedCallback); - - this.dockers.push( docker ); - docker.parent = this; - docker.bounds.registerCallback(this._changedCallback); - - return docker - }, - - toString: function(){ - return this._stencil.title() + " " + this.id - } -}; -ORYX.Core.Node = ORYX.Core.Shape.extend(ORYX.Core.Node); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -NAMESPACE_SVG = "http://www.w3.org/2000/svg"; -NAMESPACE_ORYX = "http://www.b3mn.org/oryx"; - - -/** - * Init namespaces - */ -if (!ORYX) { - var ORYX = {}; -} -if (!ORYX.Core) { - ORYX.Core = {}; -} - - -/** - * @classDescription Abstract base class for all connections. - * @extends {ORYX.Core.Shape} - * @param options {Object} - * - * TODO da die verschiebung der Edge nicht ueber eine - * translation gemacht wird, die sich auch auf alle kind UIObjects auswirkt, - * muessen die kinder hier beim verschieben speziell betrachtet werden. - * Das sollte ueberarbeitet werden. - * - */ -ORYX.Core.Edge = { - /** - * Constructor - * @param {Object} options - * @param {Stencil} stencil - */ - construct: function(options, stencil, facade){ - arguments.callee.$.construct.apply(this, arguments); - - this.isMovable = true; - this.isSelectable = true; - - this._dockerUpdated = false; - - this._markers = new Hash(); //a hash map of SVGMarker objects where keys are the marker ids - this._paths = []; - this._interactionPaths = []; - this._dockersByPath = new Hash(); - this._markersByPath = new Hash(); - - /* Data structures to store positioning information of attached child nodes */ - this.attachedNodePositionData = new Hash(); - - //TODO was muss hier initial erzeugt werden? - var stencilNode = this.node.childNodes[0].childNodes[0]; - stencilNode = ORYX.Editor.graft("http://www.w3.org/2000/svg", stencilNode, ['g', { - "pointer-events": "painted" - }]); - - //Add to the EventHandler - this.addEventHandlers(stencilNode.parentNode); - - - this._oldBounds = this.bounds.clone(); - - //load stencil - this._init(this._stencil.view()); - - if (stencil instanceof Array) { - this.deserialize(stencil); - } - - }, - - _update: function(force){ - if(this._dockerUpdated || this.isChanged || force) { - - this.dockers.invoke("update"); - - if (false && (this.bounds.width() === 0 || this.bounds.height() === 0)) { - var width = this.bounds.width(); - var height = this.bounds.height(); - this.bounds.extend({ - x: width === 0 ? 2 : 0, - y: height === 0 ? 2 : 0 - }); - this.bounds.moveBy({ - x: width === 0 ? -1 : 0, - y: height === 0 ? -1 : 0 - }); - - } - - // TODO: Bounds muss abhaengig des Eltern-Shapes gesetzt werden - var upL = this.bounds.upperLeft(); - var oldUpL = this._oldBounds.upperLeft(); - var oldWidth = this._oldBounds.width() === 0 ? this.bounds.width() : this._oldBounds.width(); - var oldHeight = this._oldBounds.height() === 0 ? this.bounds.height() : this._oldBounds.height(); - var diffX = upL.x - oldUpL.x; - var diffY = upL.y - oldUpL.y; - var diffWidth = (this.bounds.width() / oldWidth) || 1; - var diffHeight = (this.bounds.height() / oldHeight) || 1; - - this.dockers.each((function(docker){ - // Unregister on BoundsChangedCallback - docker.bounds.unregisterCallback(this._dockerChangedCallback); - - // If there is any changes at the edge and is there is not an DockersUpdate - // set the new bounds to the docker - if (!this._dockerUpdated) { - docker.bounds.moveBy(diffX, diffY); - - if (diffWidth !== 1 || diffHeight !== 1) { - var relX = docker.bounds.upperLeft().x - upL.x; - var relY = docker.bounds.upperLeft().y - upL.y; - - docker.bounds.moveTo(upL.x + relX * diffWidth, upL.y + relY * diffHeight); - } - } - // Do Docker update and register on DockersBoundChange - docker.update(); - docker.bounds.registerCallback(this._dockerChangedCallback); - - }).bind(this)); - - if (this._dockerUpdated) { - var a = this.dockers.first().bounds.center(); - var b = this.dockers.first().bounds.center(); - - this.dockers.each((function(docker){ - var center = docker.bounds.center(); - a.x = Math.min(a.x, center.x); - a.y = Math.min(a.y, center.y); - b.x = Math.max(b.x, center.x); - b.y = Math.max(b.y, center.y); - }).bind(this)); - - //set the bounds of the the association - this.bounds.set(Object.clone(a), Object.clone(b)); - } - - upL = this.bounds.upperLeft(); oldUpL = this._oldBounds.upperLeft(); - diffWidth = (this.bounds.width() / (oldWidth||this.bounds.width())); diffHeight = (this.bounds.height() / (oldHeight||this.bounds.height())); - diffX = upL.x - oldUpL.x; diffY = upL.y - oldUpL.y; - - //reposition labels - this.getLabels().each(function(label) { - - if (label.getReferencePoint()){ - var ref = label.getReferencePoint(); - var from = ref.segment.from, to = ref.segment.to; - if (!from || !from.parent || !to || !to.parent) { - return; - } - - var fromPosition = from.bounds.center(), toPosition = to.bounds.center(); - - if (fromPosition.x === ref.segment.fromPosition.x && fromPosition.y === ref.segment.fromPosition.y && - toPosition.x === ref.segment.toPosition.x && toPosition.y === ref.segment.toPosition.y && !ref.dirty){ - return; - } - - if (!this.parent.initializingShapes) { - var oldDistance = ORYX.Core.Math.getDistanceBetweenTwoPoints(ref.segment.fromPosition, ref.segment.toPosition, ref.intersection); - var newIntersection = ORYX.Core.Math.getPointBetweenTwoPoints(fromPosition, toPosition, isNaN(oldDistance) ? 0.5 : oldDistance); - - /** - * Set position - */ - // Get the orthogonal identity vector of the current segment - var oiv = ORYX.Core.Math.getOrthogonalIdentityVector(fromPosition, toPosition); - var isHor = Math.abs(oiv.y)===1, isVer = Math.abs(oiv.x)===1; - oiv.x *= ref.distance; oiv.y *= ref.distance; // vector * distance - oiv.x += newIntersection.x; oiv.y += newIntersection.y; // vector + the intersection point - var mx = isHor && ref.orientation && (ref.iorientation||ref.orientation).endsWith("r") ? -label.getWidth() : 0; - var my = isVer && ref.orientation && (ref.iorientation||ref.orientation).startsWith("l") ? -label.getHeight()+2 : 0; - label.setX(oiv.x+mx); label.setY(oiv.y+my); - - // Update the reference point - this.updateReferencePointOfLabel(label, newIntersection, from, to); - } else { - var oiv = ORYX.Core.Math.getOrthogonalIdentityVector(fromPosition, toPosition); - oiv.x *= ref.distance; oiv.y *= ref.distance; // vector * distance - oiv.x += ref.intersection.x; oiv.y += ref.intersection.y; // vector + the intersection point - label.setX(oiv.x); label.setY(oiv.y); - ref.segment.fromPosition = fromPosition; ref.segment.toPosition = toPosition; - } - - return; - } - - // Update label position if no reference point is set - if (label.position && !this.parent.initializingShapes){ - var x = label.position.x + (diffX * (diffWidth||1)); - if (x > this.bounds.lowerRight().x){ - x += this.bounds.width()-(this.bounds.width()/(diffWidth||1)); - } - - var y = label.position.y + (diffY * (diffHeight||1)); - if (y > this.bounds.lowerRight().y){ - y += this.bounds.height()-(this.bounds.height()/(diffHeight||1)); - } - label.setX(x);label.setY(y); - return; - } - - switch (label.getEdgePosition()) { - case "starttop": - var angle = this._getAngle(this.dockers[0], this.dockers[1]); - var pos = this.dockers.first().bounds.center(); - - if (angle <= 90 || angle > 270) { - label.horizontalAlign("left"); - label.verticalAlign("bottom"); - label.x = pos.x + label.getOffsetTop(); - label.y = pos.y - label.getOffsetTop(); - label.rotate(360 - angle, pos); - } else { - label.horizontalAlign("right"); - label.verticalAlign("bottom"); - label.x = pos.x - label.getOffsetTop(); - label.y = pos.y - label.getOffsetTop(); - label.rotate(180 - angle, pos); - } - - break; - - case "startmiddle": - var angle = this._getAngle(this.dockers[0], this.dockers[1]); - var pos = this.dockers.first().bounds.center(); - - if (angle <= 90 || angle > 270) { - label.horizontalAlign("left"); - label.verticalAlign("bottom"); - label.x = pos.x + 2; - label.y = pos.y + 4; - label.rotate(360 - angle, pos); - } else { - label.horizontalAlign("right"); - label.verticalAlign("bottom"); - label.x = pos.x + 1; - label.y = pos.y + 4; - label.rotate(180 - angle, pos); - } - - break; - - case "startbottom": - var angle = this._getAngle(this.dockers[0], this.dockers[1]); - var pos = this.dockers.first().bounds.center(); - - if (angle <= 90 || angle > 270) { - label.horizontalAlign("left"); - label.verticalAlign("top"); - label.x = pos.x + label.getOffsetBottom(); - label.y = pos.y + label.getOffsetBottom(); - label.rotate(360 - angle, pos); - } else { - label.horizontalAlign("right"); - label.verticalAlign("top"); - label.x = pos.x - label.getOffsetBottom(); - label.y = pos.y + label.getOffsetBottom(); - label.rotate(180 - angle, pos); - } - - break; - case "midtop": - var numOfDockers = this.dockers.length; - if(numOfDockers%2 == 0) { - var angle = this._getAngle(this.dockers[numOfDockers/2-1], this.dockers[numOfDockers/2]) - var pos1 = this.dockers[numOfDockers/2-1].bounds.center(); - var pos2 = this.dockers[numOfDockers/2].bounds.center(); - var pos = {x:(pos1.x + pos2.x)/2.0, y:(pos1.y+pos2.y)/2.0}; - - label.horizontalAlign("center"); - label.verticalAlign("bottom"); - label.x = pos.x; - label.y = pos.y - label.getOffsetTop(); - - if (angle <= 90 || angle > 270) { - label.rotate(360 - angle, pos); - } else { - label.rotate(180 - angle, pos); - } - } else { - var index = parseInt(numOfDockers/2); - var angle = this._getAngle(this.dockers[index], this.dockers[index+1]) - var pos = this.dockers[index].bounds.center(); - - if (angle <= 90 || angle > 270) { - label.horizontalAlign("left"); - label.verticalAlign("bottom"); - label.x = pos.x + label.getOffsetTop(); - label.y = pos.y - label.getOffsetTop(); - label.rotate(360 - angle, pos); - } else { - label.horizontalAlign("right"); - label.verticalAlign("bottom"); - label.x = pos.x - label.getOffsetTop(); - label.y = pos.y - label.getOffsetTop(); - label.rotate(180 - angle, pos); - } - } - - break; - case "midbottom": - var numOfDockers = this.dockers.length; - if(numOfDockers%2 == 0) { - var angle = this._getAngle(this.dockers[numOfDockers/2-1], this.dockers[numOfDockers/2]) - var pos1 = this.dockers[numOfDockers/2-1].bounds.center(); - var pos2 = this.dockers[numOfDockers/2].bounds.center(); - var pos = {x:(pos1.x + pos2.x)/2.0, y:(pos1.y+pos2.y)/2.0}; - - label.horizontalAlign("center"); - label.verticalAlign("top"); - label.x = pos.x; - label.y = pos.y + label.getOffsetTop(); - - if (angle <= 90 || angle > 270) { - label.rotate(360 - angle, pos); - } else { - label.rotate(180 - angle, pos); - } - } else { - var index = parseInt(numOfDockers/2); - var angle = this._getAngle(this.dockers[index], this.dockers[index+1]) - var pos = this.dockers[index].bounds.center(); - - if (angle <= 90 || angle > 270) { - label.horizontalAlign("left"); - label.verticalAlign("top"); - label.x = pos.x + label.getOffsetBottom(); - label.y = pos.y + label.getOffsetBottom(); - label.rotate(360 - angle, pos); - } else { - label.horizontalAlign("right"); - label.verticalAlign("top"); - label.x = pos.x - label.getOffsetBottom(); - label.y = pos.y + label.getOffsetBottom(); - label.rotate(180 - angle, pos); - } - } - - break; - case "endtop": - var length = this.dockers.length; - var angle = this._getAngle(this.dockers[length-2], this.dockers[length-1]); - var pos = this.dockers.last().bounds.center(); - - if (angle <= 90 || angle > 270) { - label.horizontalAlign("right"); - label.verticalAlign("bottom"); - label.x = pos.x - label.getOffsetTop(); - label.y = pos.y - label.getOffsetTop(); - label.rotate(360 - angle, pos); - } else { - label.horizontalAlign("left"); - label.verticalAlign("bottom"); - label.x = pos.x + label.getOffsetTop(); - label.y = pos.y - label.getOffsetTop(); - label.rotate(180 - angle, pos); - } - - break; - case "endbottom": - var length = this.dockers.length; - var angle = this._getAngle(this.dockers[length-2], this.dockers[length-1]); - var pos = this.dockers.last().bounds.center(); - - if (angle <= 90 || angle > 270) { - label.horizontalAlign("right"); - label.verticalAlign("top"); - label.x = pos.x - label.getOffsetBottom(); - label.y = pos.y + label.getOffsetBottom(); - label.rotate(360 - angle, pos); - } else { - label.horizontalAlign("left"); - label.verticalAlign("top"); - label.x = pos.x + label.getOffsetBottom(); - label.y = pos.y + label.getOffsetBottom(); - label.rotate(180 - angle, pos); - } - - break; - } - }.bind(this)); - - this.children.each(function(value) { - if(value instanceof ORYX.Core.Node) { - this.calculatePositionOfAttachedChildNode.call(this, value); - } - }.bind(this)); - - this.refreshAttachedNodes(); - this.refresh(); - - this.isChanged = false; - this._dockerUpdated = false; - - this._oldBounds = this.bounds.clone(); - } - - - // IE10 specific fix, start and end-markes get left behind when moving path - var userAgent = navigator.userAgent; - if (navigator.appVersion.indexOf("MSIE 10") !== -1 || (userAgent.indexOf('Trident') !== -1 && userAgent.indexOf('rv:11') !== -1)) - { - this.node.parentNode.insertBefore(this.node, this.node); - } - }, - - /** - * Moves a point to the upperLeft of a node's bounds. - * - * @param {point} point - * The point to move - * @param {ORYX.Core.Bounds} bounds - * The Bounds of the related noe - */ - movePointToUpperLeftOfNode: function(point, bounds) { - point.x -= bounds.width()/2; - point.y -= bounds.height()/2; - }, - - /** - * Refreshes the visual representation of edge's attached nodes. - */ - refreshAttachedNodes: function() { - this.attachedNodePositionData.values().each(function(nodeData) { - var startPoint = nodeData.segment.docker1.bounds.center(); - var endPoint = nodeData.segment.docker2.bounds.center(); - this.relativizePoint(startPoint); - this.relativizePoint(endPoint); - - var newNodePosition = new Object(); - - /* Calculate new x-coordinate */ - newNodePosition.x = startPoint.x - + nodeData.relativDistanceFromDocker1 - * (endPoint.x - startPoint.x); - - /* Calculate new y-coordinate */ - newNodePosition.y = startPoint.y - + nodeData.relativDistanceFromDocker1 - * (endPoint.y - startPoint.y); - - /* Convert new position to the upper left of the node */ - this.movePointToUpperLeftOfNode(newNodePosition, nodeData.node.bounds); - - /* Move node to its new position */ - nodeData.node.bounds.moveTo(newNodePosition); - nodeData.node._update(); - - }.bind(this)); - }, - - /** - * Calculates the position of an edge's child node. The node is placed on - * the path of the edge. - * - * @param {node} - * The node to calculate the new position - * @return {Point} - * The calculated upper left point of the node's shape. - */ - calculatePositionOfAttachedChildNode: function(node) { - /* Initialize position */ - var position = new Object(); - position.x = 0; - position.y = 0; - - /* Case: Node was just added */ - if(!this.attachedNodePositionData.get(node.getId())) { - this.attachedNodePositionData.set(node.getId(),new Object()); - this.attachedNodePositionData.get(node.getId()).relativDistanceFromDocker1 = 0; - this.attachedNodePositionData.get(node.getId()).node = node; - this.attachedNodePositionData.get(node.getId()).segment = new Object(); - this.findEdgeSegmentForNode(node); - } else if(node.isChanged) { - this.findEdgeSegmentForNode(node); - } - - - - }, - - /** - * Finds the appropriate edge segement for a node. - * The segment is choosen, which has the smallest distance to the node. - * - * @param {ORYX.Core.Node} node - * The concerning node - */ - findEdgeSegmentForNode: function(node) { - var length = this.dockers.length; - var smallestDistance = undefined; - - for(i=1;i 0) { - var x = this.bounds.upperLeft().x; - var y = this.bounds.upperLeft().y; - - this.node.firstChild.childNodes[1].setAttributeNS(null, "transform", "translate(" + x + ", " + y + ")"); - } - - }, - - /** - * Calculate the Border Intersection Point between two points - * @param {PointA} - * @param {PointB} - */ - getIntersectionPoint: function(){ - - var length = Math.floor(this.dockers.length / 2) - - return ORYX.Core.Math.midPoint(this.dockers[length - 1].bounds.center(), this.dockers[length].bounds.center()) - }, - - /** - * Returns TRUE if the bounds is over the edge - * @param {Bounds} - * - */ - isBoundsIncluded: function(bounds){ - var dockers = this.dockers, size = dockers.length; - return dockers.any(function(docker, i){ - if (i == size-1){ return false; } - var a = docker.bounds.center(); - var b = dockers[i+1].bounds.center(); - - return ORYX.Core.Math.isRectOverLine(a.x, a.y, b.x, b.y, bounds.a.x, bounds.a.y, bounds.b.x, bounds.b.y); - }); - }, - - /** - * Calculate if the point is inside the Shape - * @param {PointX} - * @param {PointY} - */ - isPointIncluded: function(pointX, pointY){ - - var isbetweenAB = this.absoluteBounds().isIncluded(pointX, pointY, - ORYX.CONFIG.OFFSET_EDGE_BOUNDS); - - var isPointIncluded = undefined; - - if (isbetweenAB && this.dockers.length > 0) { - - var i = 0; - var point1, point2; - - - do { - - point1 = this.dockers[i].bounds.center(); - point2 = this.dockers[++i].bounds.center(); - - isPointIncluded = ORYX.Core.Math.isPointInLine(pointX, pointY, - point1.x, point1.y, - point2.x, point2.y, - ORYX.CONFIG.OFFSET_EDGE_BOUNDS); - - } while (!isPointIncluded && i < this.dockers.length - 1) - - } - - return isPointIncluded; - - }, - - - /** - * Calculate if the point is over an special offset area - * @param {Point} - */ - isPointOverOffset: function(){ - return false - }, - - /** - * Returns TRUE if the given node - * is a child node of the shapes node - * @param {Element} node - * @return {Boolean} - * - */ - containsNode: function(node){ - if (this._paths.include(node) || - this._interactionPaths.include(node)){ - return true; - } - return false; - }, - - /** - * Returns the angle of the line between two dockers - * (0 - 359.99999999) - */ - _getAngle: function(docker1, docker2) { - var p1 = docker1 instanceof ORYX.Core.Controls.Docker ? docker1.absoluteCenterXY() : docker1; - var p2 = docker2 instanceof ORYX.Core.Controls.Docker ? docker2.absoluteCenterXY() : docker2; - - return ORYX.Core.Math.getAngle(p1, p2); - }, - - alignDockers: function(){ - this._update(true); - - var firstPoint = this.dockers.first().bounds.center(); - var lastPoint = this.dockers.last().bounds.center(); - - var deltaX = lastPoint.x - firstPoint.x; - var deltaY = lastPoint.y - firstPoint.y; - - var numOfDockers = this.dockers.length - 1; - - this.dockers.each((function(docker, index){ - var part = index / numOfDockers; - docker.bounds.unregisterCallback(this._dockerChangedCallback); - docker.bounds.moveTo(firstPoint.x + part * deltaX, firstPoint.y + part * deltaY); - docker.bounds.registerCallback(this._dockerChangedCallback); - }).bind(this)); - - this._dockerChanged(); - }, - - add: function(shape){ - arguments.callee.$.add.apply(this, arguments); - - // If the new shape is a Docker which is not contained - if (shape instanceof ORYX.Core.Controls.Docker && this.dockers.include(shape)){ - // Add it to the dockers list ordered by paths - var pathArray = this._dockersByPath.values()[0]; - if (pathArray) { - pathArray.splice(this.dockers.indexOf(shape), 0, shape); - } - - /* Perform nessary adjustments on the edge's child shapes */ - this.handleChildShapesAfterAddDocker(shape); - } - }, - - /** - * Performs nessary adjustments on the edge's child shapes. - * - * @param {ORYX.Core.Controls.Docker} docker - * The added docker - */ - handleChildShapesAfterAddDocker: function(docker) { - /* Ensure type of Docker */ - if(!docker instanceof ORYX.Core.Controls.Docker) {return undefined;} - - var index = this.dockers.indexOf(docker); - if(!(0 < index && index < this.dockers.length - 1)) { - /* Exception: Expect added docker between first and last node of the edge */ - return undefined; - } - - /* Get child nodes concerning the segment of the new docker */ - var startDocker = this.dockers[index-1]; - var endDocker = this.dockers[index+1]; - - /* Adjust the position of edge's child nodes */ - var segmentElements = - this.getAttachedNodePositionDataForSegment(startDocker, endDocker); - - var lengthSegmentPart1 = ORYX.Core.Math.getDistancePointToPoint( - startDocker.bounds.center(), - docker.bounds.center()); - var lengthSegmentPart2 = ORYX.Core.Math.getDistancePointToPoint( - endDocker.bounds.center(), - docker.bounds.center()); - - if(!(lengthSegmentPart1 + lengthSegmentPart2)) {return;} - - var relativDockerPosition = lengthSegmentPart1 / (lengthSegmentPart1 + lengthSegmentPart2); - - segmentElements.each(function(nodePositionData) { - /* Assign child node to the new segment */ - if(nodePositionData.value.relativDistanceFromDocker1 < relativDockerPosition) { - /* Case: before added Docker */ - nodePositionData.value.segment.docker2 = docker; - nodePositionData.value.relativDistanceFromDocker1 = - nodePositionData.value.relativDistanceFromDocker1 / relativDockerPosition; - } else { - /* Case: after added Docker */ - nodePositionData.value.segment.docker1 = docker; - var newFullDistance = 1 - relativDockerPosition; - var relativPartOfSegment = - nodePositionData.value.relativDistanceFromDocker1 - - relativDockerPosition; - - nodePositionData.value.relativDistanceFromDocker1 = - relativPartOfSegment / newFullDistance; - - } - }) - - - // Update all labels reference points - this.getLabels().each(function(label){ - - var ref = label.getReferencePoint(); - if (!ref) { - return; - } - var index = this.dockers.indexOf(docker); - if (index >= ref.segment.fromIndex && index <= ref.segment.toIndex){ - - var segment = this.findSegment(ref.intersection); - if (!segment){ - // Choose whether the first of the last segment - segment.fromDocker = ref.segment.fromIndex >= (this.dockers.length/2) ? this.dockers[0] : this.dockers[this.dockers.length-2]; - segment.toDocker = this.dockers[this.dockers.indexOf(from)+1]; // The next one if the to docker - } - - var fromPosition = segment.fromDocker.bounds.center(), toPosition = segment.toDocker.bounds.center(); - - var intersection = ORYX.Core.Math.getPointOfIntersectionPointLine( - fromPosition, // P1 - Center of the first docker - toPosition, // P2 - Center of the second docker - ref.intersection, // P3 - Center of the label - true); - //var oldDistance = ORYX.Core.Math.getDistanceBetweenTwoPoints(ref.segment.fromPosition, ref.segment.toPosition, ref.intersection); - //intersection = ORYX.Core.Math.getPointBetweenTwoPoints(fromPosition, toPosition, isNaN(oldDistance) ? 0.5 : (lengthOld*oldDistance)/lengthNew); - - // Update the reference point - this.updateReferencePointOfLabel(label, intersection, segment.fromDocker, segment.toDocker, true); - } - }.bind(this)); - - /* Update attached nodes visual representation */ - this.refreshAttachedNodes(); - }, - - /** - * Returns elements from {@link attachedNodePositiondata} that match the - * segement defined by startDocker and endDocker. - * - * @param {ORYX.Core.Controls.Docker} startDocker - * The docker defining the begin of the segment. - * @param {ORYX.Core.Controls.Docker} endDocker - * The docker defining the begin of the segment. - * - * @return {Hash} attachedNodePositionData - * Child elements matching the segment - */ - getAttachedNodePositionDataForSegment: function(startDocker, endDocker) { - /* Ensure that the segment is defined correctly */ - if(!((startDocker instanceof ORYX.Core.Controls.Docker) - && (endDocker instanceof ORYX.Core.Controls.Docker))) { - return []; - } - - /* Get elements of the segment */ - var elementsOfSegment = - this.attachedNodePositionData.findAll(function(nodePositionData) { - return nodePositionData.value.segment.docker1 === startDocker && - nodePositionData.value.segment.docker2 === endDocker; - }); - - /* Return a Hash in each case */ - if(!elementsOfSegment) {return [];} - - return elementsOfSegment; - }, - - /** - * Removes an edge's child shape - */ - remove: function(shape) { - arguments.callee.$.remove.apply(this, arguments); - - if(this.attachedNodePositionData.get(shape.getId())) { - this.attachedNodePositionData.unset[shape.getId()]; - } - - /* Adjust child shapes if neccessary */ - if(shape instanceof ORYX.Core.Controls.Docker) { - this.handleChildShapesAfterRemoveDocker(shape); - } - }, - - updateReferencePointOfLabel: function(label, intersection, from, to, dirty){ - if (!label.getReferencePoint() || !label.isVisible) { - return; - } - - var ref = label.getReferencePoint(); - - // - if (ref.orientation && ref.orientation !== "ce"){ - var angle = this._getAngle(from, to); - if (ref.distance >= 0){ - if(angle == 0){ - label.horizontalAlign("left");//ref.orientation == "lr" ? "right" : "left"); - label.verticalAlign("bottom"); - } else if (angle > 0 && angle < 90){ - label.horizontalAlign("right"); - label.verticalAlign("bottom"); - } else if (angle == 90){ - label.horizontalAlign("right"); - label.verticalAlign("top");//ref.orientation == "lr" ? "bottom" : "top"); - } else if (angle > 90 && angle < 180){ - label.horizontalAlign("right"); - label.verticalAlign("top"); - } else if (angle == 180){ - label.horizontalAlign("left");//ref.orientation == "ur" ? "right" : "left"); - label.verticalAlign("top"); - } else if (angle > 180 && angle < 270){ - label.horizontalAlign("left"); - label.verticalAlign("top"); - } else if (angle == 270){ - label.horizontalAlign("left"); - label.verticalAlign("top");//ref.orientation == "ll" ? "bottom" : "top"); - } else if (angle > 270 && angle <= 360){ - label.horizontalAlign("left"); - label.verticalAlign("bottom"); - } - } else { - if(angle == 0){ - label.horizontalAlign("left");//ref.orientation == "ur" ? "right" : "left"); - label.verticalAlign("top"); - } else if (angle > 0 && angle < 90){ - label.horizontalAlign("left"); - label.verticalAlign("top"); - } else if (angle == 90){ - label.horizontalAlign("left"); - label.verticalAlign("top");//ref.orientation == "ll" ? "bottom" : "top"); - } else if (angle > 90 && angle < 180){ - label.horizontalAlign("left"); - label.verticalAlign("bottom"); - } else if (angle == 180){ - label.horizontalAlign("left");//ref.orientation == "lr" ? "right" : "left"); - label.verticalAlign("bottom"); - } else if (angle > 180 && angle < 270){ - label.horizontalAlign("right"); - label.verticalAlign("bottom"); - } else if (angle == 270){ - label.horizontalAlign("right"); - label.verticalAlign("top");//ref.orientation == "lr" ? "bottom" : "top"); - } else if (angle > 270 && angle <= 360){ - label.horizontalAlign("right"); - label.verticalAlign("top"); - } - } - ref.iorientation = ref.iorientation || ref.orientation; - ref.orientation = (label.verticalAlign()=="top"?"u":"l") + (label.horizontalAlign()=="left"?"l":"r"); - } - - label.setReferencePoint(jQuery.extend({},{ - intersection: intersection, - segment: { - from: from, - fromIndex: this.dockers.indexOf(from), - fromPosition: from.bounds.center(), - to: to, - toIndex: this.dockers.indexOf(to), - toPosition: to.bounds.center() - }, - dirty: dirty || false - },ref)) - }, - /** - * Adjusts the child shapes of an edges after a docker was removed. - * - * @param{ORYX.Core.Controls.Docker} docker - * The removed docker. - */ - handleChildShapesAfterRemoveDocker: function(docker) { - /* Ensure docker type */ - if(!(docker instanceof ORYX.Core.Controls.Docker)) {return;} - - this.attachedNodePositionData.each(function(nodePositionData) { - if(nodePositionData.value.segment.docker1 === docker) { - /* The new start of the segment is the predecessor of docker2. */ - var index = this.dockers.indexOf(nodePositionData.value.segment.docker2); - if(index == -1) {return;} - nodePositionData.value.segment.docker1 = this.dockers[index - 1]; - } - else if(nodePositionData.value.segment.docker2 === docker) { - /* The new end of the segment is the successor of docker1. */ - var index = this.dockers.indexOf(nodePositionData.value.segment.docker1); - if(index == -1) {return;} - nodePositionData.value.segment.docker2 = this.dockers[index + 1]; - } - }.bind(this)); - - // Update all labels reference points - this.getLabels().each(function(label){ - - var ref = label.getReferencePoint(); - if (!ref) { - return; - } - var from = ref.segment.from; - var to = ref.segment.to; - - if (from !== docker && to !== docker){ - return; - } - - var segment = this.findSegment(ref.intersection); - if (!segment){ - from = segment.fromDocker; - to = segment.toDocker; - } else { - from = from === docker ? this.dockers[this.dockers.indexOf(to)-1] : from; - to = this.dockers[this.dockers.indexOf(from)+1]; - } - - var intersection = ORYX.Core.Math.getPointOfIntersectionPointLine(from.bounds.center(), to.bounds.center(), ref.intersection, true); - // Update the reference point - this.updateReferencePointOfLabel(label, intersection, from, to, true); - }.bind(this)); - - /* Update attached nodes visual representation */ - this.refreshAttachedNodes(); - }, - - /** - *@deprecated Use the .createDocker() Method and set the point via the bounds - */ - addDocker: function(position, exDocker){ - var lastDocker; - var result; - this._dockersByPath.any((function(pair){ - return pair.value.any((function(docker, index){ - if (!lastDocker) { - lastDocker = docker; - return false; - } - else { - var point1 = lastDocker.bounds.center(); - var point2 = docker.bounds.center(); - - var additionalIEZoom = 1; - if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { - var ua = navigator.userAgent; - if (ua.indexOf('MSIE') >= 0) { - //IE 10 and below - var zoom = Math.round((screen.deviceXDPI / screen.logicalXDPI) * 100); - if (zoom !== 100) { - additionalIEZoom = zoom / 100 - } - } - } - - if (additionalIEZoom !== 1) { - position.x = position.x / additionalIEZoom; - position.y = position.y / additionalIEZoom; - } - - if (ORYX.Core.Math.isPointInLine(position.x, position.y, point1.x, point1.y, point2.x, point2.y, 10)) { - var path = this._paths.find(function(path){ - return path.id === pair.key; - }); - if (path) { - var allowAttr = path.getAttributeNS(NAMESPACE_ORYX, 'allowDockers'); - if (allowAttr && allowAttr.toLowerCase() === "no") { - return true; - } - } - - var newDocker = (exDocker) ? exDocker : this.createDocker(this.dockers.indexOf(lastDocker) + 1, position); - newDocker.bounds.centerMoveTo(position); - if(exDocker) - this.add(newDocker, this.dockers.indexOf(lastDocker) + 1); - result = newDocker; - return true; - } - else { - lastDocker = docker; - return false; - } - } - }).bind(this)); - }).bind(this)); - return result; - }, - - removeDocker: function(docker){ - if (this.dockers.length > 2 && !(this.dockers.first() === docker)) { - this._dockersByPath.any((function(pair){ - if (pair.value.member(docker)) { - if (docker === pair.value.last()) { - return true; - } - else { - this.remove(docker); - this._dockersByPath.set(pair.key,pair.value.without(docker)); - this.isChanged = true; - this._dockerChanged(); - return true; - } - } - return false; - }).bind(this)); - } - }, - - /** - * Removes all dockers from the edge which are on - * the line between two dockers - * @return {Object} Removed dockers in an indicied array - * (key is the removed position of the docker, value is docker themselve) - */ - removeUnusedDockers:function(){ - var marked = new Hash(); - - this.dockers.each(function(docker, i){ - if (i==0||i==this.dockers.length-1){ return } - var previous = this.dockers[i-1]; - - /* Do not consider already removed dockers */ - if(marked.values().indexOf(previous) != -1 && this.dockers[i-2]) { - previous = this.dockers[i-2]; - } - var next = this.dockers[i+1]; - - var cp = previous.getDockedShape() && previous.referencePoint ? previous.getAbsoluteReferencePoint() : previous.bounds.center(); - var cn = next.getDockedShape() && next.referencePoint ? next.getAbsoluteReferencePoint() : next.bounds.center(); - var cd = docker.bounds.center(); - - if (ORYX.Core.Math.isPointInLine(cd.x, cd.y, cp.x, cp.y, cn.x, cn.y, 1)){ - marked.set(i, docker); - } - }.bind(this)) - - marked.each(function(docker){ - this.removeDocker(docker.value); - }.bind(this)) - - if (marked.values().length > 0){ - this._update(true); - } - - return marked; - }, - - /** - * Initializes the Edge after loading the SVG representation of the edge. - * @param {SVGDocument} svgDocument - */ - _init: function(svgDocument){ - arguments.callee.$._init.apply(this, arguments); - - var minPointX, minPointY, maxPointX, maxPointY; - - //init markers - var defs = svgDocument.getElementsByTagNameNS(NAMESPACE_SVG, "defs"); - if (defs.length > 0) { - defs = defs[0]; - var markerElements = $A(defs.getElementsByTagNameNS(NAMESPACE_SVG, "marker")); - var marker; - var me = this; - markerElements.each(function(markerElement){ - try { - marker = new ORYX.Core.SVG.SVGMarker(markerElement.cloneNode(true)); - me._markers.set(marker.id, marker); - var textElements = $A(marker.element.getElementsByTagNameNS(NAMESPACE_SVG, "text")); - var label; - textElements.each(function(textElement){ - label = new ORYX.Core.SVG.Label({ - textElement: textElement, - shapeId: this.id - }); - me._labels.set(label.id, label); - }); - } - catch (e) { - } - }); - } - - - var gs = svgDocument.getElementsByTagNameNS(NAMESPACE_SVG, "g"); - if (gs.length <= 0) { - throw "Edge: No g element found."; - } - var g = gs[0]; - - - g.setAttributeNS(null, "id", null); - - var isFirst = true; - - $A(g.childNodes).each((function(path, index){ - if (ORYX.Editor.checkClassType(path, SVGPathElement)) { - path = path.cloneNode(false); - - var pathId = this.id + "_" + index; - path.setAttributeNS(null, "id", pathId); - this._paths.push(path); - - //check, if markers are set and update the id - var markersByThisPath = []; - var markerUrl = path.getAttributeNS(null, "marker-start"); - - if (markerUrl && markerUrl !== "") { - markerUrl = markerUrl.strip(); - markerUrl = markerUrl.replace(/^url\(#/, ''); - - var markerStartId = this.getValidMarkerId(markerUrl); - path.setAttributeNS(null, "marker-start", "url(#" + markerStartId + ")"); - - markersByThisPath.push(this._markers.get(markerStartId)); - } - - markerUrl = path.getAttributeNS(null, "marker-mid"); - - if (markerUrl && markerUrl !== "") { - markerUrl = markerUrl.strip(); - markerUrl = markerUrl.replace(/^url\(#/, ''); - var markerMidId = this.getValidMarkerId(markerUrl); - path.setAttributeNS(null, "marker-mid", "url(#" + markerMidId + ")"); - - markersByThisPath.push(this._markers.get(markerMidId)); - } - - markerUrl = path.getAttributeNS(null, "marker-end"); - - if (markerUrl && markerUrl !== "") { - markerUrl = markerUrl.strip(); - - var markerEndId = this.getValidMarkerId(markerUrl); - path.setAttributeNS(null, "marker-end", "url(#" + markerEndId + ")"); - - markersByThisPath.push(this._markers.get(markerEndId)); - } - - this._markersByPath[pathId] = markersByThisPath; - - //init dockers - var parser = new PathParser(); - var handler = new ORYX.Core.SVG.PointsPathHandler(); - parser.setHandler(handler); - parser.parsePath(path); - - if (handler.points.length < 4) { - throw "Edge: Path has to have two or more points specified."; - } - - this._dockersByPath.set(pathId, []); - - for (var i = 0; i < handler.points.length; i += 2) { - //handler.points.each((function(point, pIndex){ - var x = handler.points[i]; - var y = handler.points[i+1]; - if (isFirst || i > 0) { - var docker = new ORYX.Core.Controls.Docker({ - eventHandlerCallback: this.eventHandlerCallback - }); - docker.bounds.centerMoveTo(x,y); - docker.bounds.registerCallback(this._dockerChangedCallback); - this.add(docker, this.dockers.length); - - //this._dockersByPath[pathId].push(docker); - - //calculate minPoint and maxPoint - if (minPointX) { - minPointX = Math.min(x, minPointX); - minPointY = Math.min(y, minPointY); - } - else { - minPointX = x; - minPointY = y; - } - - if (maxPointX) { - maxPointX = Math.max(x, maxPointX); - maxPointY = Math.max(y, maxPointY); - } - else { - maxPointX = x; - maxPointY = y; - } - } - //}).bind(this)); - } - isFirst = false; - } - }).bind(this)); - - this.bounds.set(minPointX, minPointY, maxPointX, maxPointY); - - if (false&&(this.bounds.width() === 0 || this.bounds.height() === 0)) { - var width = this.bounds.width(); - var height = this.bounds.height(); - - this.bounds.extend({ - x: width === 0 ? 2 : 0, - y: height === 0 ? 2 : 0 - }); - - this.bounds.moveBy({ - x: width === 0 ? -1 : 0, - y: height === 0 ? -1 : 0 - }); - - } - - this._oldBounds = this.bounds.clone(); - - //add paths to this.node - this._paths.reverse(); - var paths = []; - this._paths.each((function(path){ - paths.push(this.node.childNodes[0].childNodes[0].childNodes[0].appendChild(path)); - }).bind(this)); - - this._paths = paths; - - //init interaction path - this._paths.each((function(path){ - var iPath = path.cloneNode(false); - iPath.setAttributeNS(null, "id", undefined); - iPath.setAttributeNS(null, "stroke-width", 10); - iPath.setAttributeNS(null, "visibility", "hidden"); - iPath.setAttributeNS(null, "stroke-dasharray", null); - iPath.setAttributeNS(null, "stroke", "black"); - iPath.setAttributeNS(null, "fill", "none"); - iPath.setAttributeNS(null, "title", this.getStencil().title()); - this._interactionPaths.push(this.node.childNodes[0].childNodes[0].childNodes[0].appendChild(iPath)); - }).bind(this)); - - this._paths.reverse(); - this._interactionPaths.reverse(); - - /**initialize labels*/ - var textElems = svgDocument.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'text'); - - $A(textElems).each((function(textElem){ - var label = new ORYX.Core.SVG.Label({ - textElement: textElem, - shapeId: this.id - }); - this.node.childNodes[0].childNodes[0].appendChild(label.node); - this._labels.set(label.id, label); - - label.registerOnChange(this.layout.bind(this)); - }).bind(this)); - - - this.propertiesChanged.each(function(pair){ - pair.value = true; - }); - - - //if(this.dockers.length == 2) { - - - - // } - - //this._update(true); - }, - - getValidMarkerId: function(markerUrl) { - if(markerUrl.indexOf("url(\"#") >= 0) { - // Fix for IE9, additional quotes are added to the 0) { - defs = defs[0]; - this._markers.each(function(marker){ - var foundMarker = defs.ownerDocument.getElementById(marker.value.id); - if (foundMarker) { - marker.value.element = defs.removeChild(marker.value.element); - } - }); - } - } - }, - - /** - * Calls when a docker has changed - */ - _dockerChanged: function(){ - - //this._update(true); - this._dockerUpdated = true; - - }, - - serialize: function(){ - var result = arguments.callee.$.serialize.apply(this); - - //add dockers triple - var value = ""; - this._dockersByPath.each((function(pair){ - pair.value.each(function(docker){ - var position = docker.getDockedShape() && docker.referencePoint ? docker.referencePoint : docker.bounds.center(); - value = value.concat(position.x + " " + position.y + " "); - }); - - value += " # "; - }).bind(this)); - result.push({ - name: 'dockers', - prefix: 'oryx', - value: value, - type: 'literal' - }); - - //add parent triple dependant on the dockedShapes - //TODO change this when canvas becomes a resource -/* var source = this.dockers.first().getDockedShape(); - var target = this.dockers.last().getDockedShape(); - var sharedParent; - if (source && target) { - //get shared parent - while (source.parent) { - source = source.parent; - if (source instanceof ORYX.Core.Canvas) { - sharedParent = source; - break; - } - else { - var targetParent = target.parent; - var found; - while (targetParent) { - if (source === targetParent) { - sharedParent = source; - found = true; - break; - } - else { - targetParent = targetParent.parent; - } - } - if (found) { - break; - } - } - } - } - else - if (source) { - sharedParent = source.parent; - } - else - if (target) { - sharedParent = target.parent; - } -*/ - //if (sharedParent) { -/* result.push({ - name: 'parent', - prefix: 'raziel', - //value: '#' + ERDF.__stripHashes(sharedParent.resourceId), - value: '#' + ERDF.__stripHashes(this.getCanvas().resourceId), - type: 'resource' - });*/ - //} - - //serialize target and source - var lastDocker = this.dockers.last(); - - var target = lastDocker.getDockedShape(); - - if(target) { - result.push({ - name: 'target', - prefix: 'raziel', - value: '#' + ERDF.__stripHashes(target.resourceId), - type: 'resource' - }); - } - - try { - //result = this.getStencil().serialize(this, result); - var serializeEvent = this.getStencil().serialize(); - - /* - * call serialize callback by reference, result should be found - * in serializeEvent.result - */ - if(serializeEvent.type) { - serializeEvent.shape = this; - serializeEvent.data = result; - serializeEvent.result = undefined; - serializeEvent.forceExecution = true; - - this._delegateEvent(serializeEvent); - - if(serializeEvent.result) { - result = serializeEvent.result; - } - } - } - catch (e) { - } - return result; - }, - - deserialize: function(data){ - try { - //data = this.getStencil().deserialize(this, data); - - var deserializeEvent = this.getStencil().deserialize(); - - /* - * call serialize callback by reference, result should be found - * in serializeEventInfo.result - */ - if(deserializeEvent.type) { - deserializeEvent.shape = this; - deserializeEvent.data = data; - deserializeEvent.result = undefined; - deserializeEvent.forceExecution = true; - - this._delegateEvent(deserializeEvent); - if(deserializeEvent.result) { - data = deserializeEvent.result; - } - } - } - catch (e) { - } - - // Set the outgoing shapes - var target = data.find(function(ser) {return (ser.prefix+"-"+ser.name) == 'raziel-target'}); - var targetShape; - if(target) { - targetShape = this.getCanvas().getChildShapeByResourceId(target.value); - } - - var outgoing = data.findAll(function(ser){ return (ser.prefix+"-"+ser.name) == 'raziel-outgoing'}); - outgoing.each((function(obj){ - // TODO: Look at Canvas - if(!this.parent) {return}; - - // Set outgoing Shape - var next = this.getCanvas().getChildShapeByResourceId(obj.value); - - if(next){ - if(next == targetShape) { - // If this is an edge, set the last docker to the next shape - this.dockers.last().setDockedShape(next); - this.dockers.last().setReferencePoint({x: next.bounds.width() / 2.0, y: next.bounds.height() / 2.0}); - } else if(next instanceof ORYX.Core.Edge) { - //Set the first docker of the next shape - next.dockers.first().setDockedShape(this); - //next.dockers.first().setReferencePoint({x: this.bounds.width() / 2.0, y: this.bounds.height() / 2.0}); - } /*else if(next.dockers.length > 0) { //next is a node and next has a docker - next.dockers.first().setDockedShape(this); - next.dockers.first().setReferencePoint({x: this.bounds.width() / 2.0, y: this.bounds.height() / 2.0}); - }*/ - } - - }).bind(this)); - - - var oryxDockers = data.find(function(obj){ - return (obj.prefix === "oryx" && - obj.name === "dockers"); - }); - - if (oryxDockers) { - var dataByPath = oryxDockers.value.split("#").without("").without(" "); - - dataByPath.each((function(data, index){ - var values = data.replace(/,/g, " ").split(" ").without(""); - - //for each docker two values must be defined - if (values.length % 2 === 0) { - var path = this._paths[index]; - - if (path) { - if (index === 0) { - while (this._dockersByPath.get(path.id).length > 2) { - this.removeDocker(this._dockersByPath.get(path.id)[1]); - } - } - else { - while (this._dockersByPath.get(path.id).length > 1) { - this.removeDocker(this._dockersByPath.get(path.id)[0]); - } - } - - var dockersByPath = this._dockersByPath.get(path.id); - - if (index === 0) { - //set position of first docker - var x = parseFloat(values.shift()); - var y = parseFloat(values.shift()); - - if (dockersByPath.first().getDockedShape()) { - dockersByPath.first().setReferencePoint({ - x: x, - y: y - }); - } - else { - dockersByPath.first().bounds.centerMoveTo(x, y); - } - } - - //set position of last docker - y = parseFloat(values.pop()); - x = parseFloat(values.pop()); - - if (dockersByPath.last().getDockedShape()) { - dockersByPath.last().setReferencePoint({ - x: x, - y: y - }); - } else { - dockersByPath.last().bounds.centerMoveTo(x, y); - } - - //add additional dockers - for (var i = 0; i < values.length; i++) { - x = parseFloat(values[i]); - y = parseFloat(values[++i]); - - var newDocker = this.createDocker(); - newDocker.bounds.centerMoveTo(x, y); - - //this.dockers = this.dockers.without(newDocker); - //this.dockers.splice(this.dockers.indexOf(dockersByPath.last()), 0, newDocker); - //dockersByPath.splice(this.dockers.indexOf(dockersByPath.last()), 0, newDocker); - } - } - } - }).bind(this)); - } else { - this.alignDockers(); - } - - arguments.callee.$.deserialize.apply(this, arguments); - - this._changed(); - }, - - toString: function(){ - return this.getStencil().title() + " " + this.id; - }, - - /** - * @return {ORYX.Core.Shape} Returns last docked shape or null. - */ - getTarget: function(){ - return this.dockers.last() ? this.dockers.last().getDockedShape() : null; - }, - - /** - * @return {ORYX.Core.Shape} Returns the first docked shape or null - */ - getSource: function() { - return this.dockers.first() ? this.dockers.first().getDockedShape() : null; - }, - - /** - * Checks whether the edge is at least docked to one shape. - * - * @return {boolean} True if edge is docked - */ - isDocked: function() { - var isDocked = false; - this.dockers.each(function(docker) { - if(docker.isDocked()) { - isDocked = true; - throw $break; - } - }); - return isDocked; - }, - - /** - * Calls {@link ORYX.Core.AbstractShape#toJSON} and add a some stencil set information. - */ - toJSON: function() { - var json = arguments.callee.$.toJSON.apply(this, arguments); - - if(this.getTarget()) { - json.target = { - resourceId: this.getTarget().resourceId - }; - } - - return json; - } -}; -ORYX.Core.Edge = ORYX.Core.Shape.extend(ORYX.Core.Edge); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!ORYX){ var ORYX = {} } -if(!ORYX.Plugins){ ORYX.Plugins = {} } - -/** - This abstract plugin class can be used to build plugins on. - It provides some more basic functionality like registering events (on*-handlers)... - @example - ORYX.Plugins.MyPlugin = ORYX.Plugins.AbstractPlugin.extend({ - construct: function() { - // Call super class constructor - arguments.callee.$.construct.apply(this, arguments); - - [...] - }, - [...] - }); - - @class ORYX.Plugins.AbstractPlugin - @constructor Creates a new instance - @author Willi Tscheschner -*/ -ORYX.Plugins.AbstractPlugin = Clazz.extend({ - /** - * The facade which offer editor-specific functionality - * @type Facade - * @memberOf ORYX.Plugins.AbstractPlugin.prototype - */ - facade: null, - - construct: function( facade ){ - this.facade = facade; - - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADED, this.onLoaded.bind(this)); - }, - - /** - Overwrite to handle load event. TODO: Document params!!! - @methodOf ORYX.Plugins.AbstractPlugin.prototype - */ - onLoaded: function(){}, - - /** - Overwrite to handle selection changed event. TODO: Document params!!! - @methodOf ORYX.Plugins.AbstractPlugin.prototype - */ - onSelectionChanged: function(){}, - - /** - Show overlay on given shape. - @methodOf ORYX.Plugins.AbstractPlugin.prototype - @example - showOverlay( - myShape, - { stroke: "green" }, - ORYX.Editor.graft("http://www.w3.org/2000/svg", null, ['path', { - "title": "Click the element to execute it!", - "stroke-width": 2.0, - "stroke": "black", - "d": "M0,-5 L5,0 L0,5 Z", - "line-captions": "round" - }]) - ) - @param {Oryx.XXX.Shape[]} shapes One shape or array of shapes the overlay should be put on - @param {Oryx.XXX.Attributes} attributes some attributes... - @param {Oryx.svg.node} svgNode The svg node which should be used as overlay - @param {String} [svgNode="NW"] The svg node position where the overlay should be placed - */ - showOverlay: function(shapes, attributes, svgNode, svgNodePosition ){ - - if( !(shapes instanceof Array) ){ - shapes = [shapes] - } - - // Define Shapes - shapes = shapes.map(function(shape){ - var el = shape; - if( typeof shape == "string" ){ - el = this.facade.getCanvas().getChildShapeByResourceId( shape ); - el = el || this.facade.getCanvas().getChildById( shape, true ); - } - return el; - }.bind(this)).compact(); - - // Define unified id - if( !this.overlayID ){ - this.overlayID = this.type + ORYX.Editor.provideId(); - } - - this.facade.raiseEvent({ - type : ORYX.CONFIG.EVENT_OVERLAY_SHOW, - id : this.overlayID, - shapes : shapes, - attributes : attributes, - node : svgNode, - nodePosition: svgNodePosition || "NW" - }); - - }, - - /** - Hide current overlay. - @methodOf ORYX.Plugins.AbstractPlugin.prototype - */ - hideOverlay: function(){ - this.facade.raiseEvent({ - type : ORYX.CONFIG.EVENT_OVERLAY_HIDE, - id : this.overlayID - }); - }, - - /** - Does a transformation with the given xslt stylesheet. - @methodOf ORYX.Plugins.AbstractPlugin.prototype - @param {String} data The data (e.g. eRDF) which should be transformed - @param {String} stylesheet URL of a stylesheet which should be used for transforming data. - */ - doTransform: function( data, stylesheet ) { - - if( !stylesheet || !data ){ - return "" - } - - var parser = new DOMParser(); - var parsedData = parser.parseFromString(data, "text/xml"); - source=stylesheet; - new Ajax.Request(source, { - asynchronous: false, - method: 'get', - onSuccess: function(transport){ - xsl = transport.responseText - }.bind(this), - onFailure: (function(transport){ - ORYX.Log.error("XSL load failed" + transport); - }).bind(this) - }); - var xsltProcessor = new XSLTProcessor(); - var domParser = new DOMParser(); - var xslObject = domParser.parseFromString(xsl, "text/xml"); - xsltProcessor.importStylesheet(xslObject); - - try { - - var newData = xsltProcessor.transformToFragment(parsedData, document); - var serializedData = (new XMLSerializer()).serializeToString(newData); - - /* Firefox 2 to 3 problem?! */ - serializedData = !serializedData.startsWith("" + serializedData : serializedData; - - return serializedData; - - }catch (error) { - return -1; - } - - }, - - /** - * Opens a new window that shows the given XML content. - * @methodOf ORYX.Plugins.AbstractPlugin.prototype - * @param {Object} content The XML content to be shown. - * @example - * openDownloadWindow( "my.xml", " " ); - */ - openXMLWindow: function(content) { - var win = window.open( - 'data:application/xml,' + encodeURIComponent( - content - ), - '_blank', "resizable=yes,width=600,height=600,toolbar=0,scrollbars=yes" - ); - }, - - /** - * Opens a download window for downloading the given content. - * @methodOf ORYX.Plugins.AbstractPlugin.prototype - * @param {String} filename The content's file name - * @param {String} content The content to download - */ - openDownloadWindow: function(filename, content) { - var win = window.open(""); - if (win != null) { - win.document.open(); - win.document.write(""); - var submitForm = win.document.createElement("form"); - win.document.body.appendChild(submitForm); - - var createHiddenElement = function(name, value) { - var newElement = document.createElement("input"); - newElement.name=name; - newElement.type="hidden"; - newElement.value = value; - return newElement - } - - submitForm.appendChild( createHiddenElement("download", content) ); - submitForm.appendChild( createHiddenElement("file", filename) ); - - - submitForm.method = "POST"; - win.document.write(""); - win.document.close(); - submitForm.action= ORYX.PATH + "/download"; - submitForm.submit(); - } - }, - - /** - * Serializes DOM. - * @methodOf ORYX.Plugins.AbstractPlugin.prototype - * @type {String} Serialized DOM - */ - getSerializedDOM: function(){ - // Force to set all resource IDs - var serializedDOM = DataManager.serializeDOM( this.facade ); - - //add namespaces - serializedDOM = '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - ' ' + - '' + - serializedDOM + - ''; - - return serializedDOM; - }, - - /** - * Sets the editor in read only mode: Edges/ dockers cannot be moved anymore, - * shapes cannot be selected anymore. - * @methodOf ORYX.Plugins.AbstractPlugin.prototype - */ - enableReadOnlyMode: function(){ - //Edges cannot be moved anymore - this.facade.disableEvent(ORYX.CONFIG.EVENT_MOUSEDOWN); - - // Stop the user from editing the diagram while the plugin is active - this._stopSelectionChange = function(){ - if(this.facade.getSelection().length > 0) { - this.facade.setSelection([]); - } - }; - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_SELECTION_CHANGED, this._stopSelectionChange.bind(this)); - }, - /** - * Disables read only mode, see @see - * @methodOf ORYX.Plugins.AbstractPlugin.prototype - * @see ORYX.Plugins.AbstractPlugin.prototype.enableReadOnlyMode - */ - disableReadOnlyMode: function(){ - // Edges can be moved now again - this.facade.enableEvent(ORYX.CONFIG.EVENT_MOUSEDOWN); - - if (this._stopSelectionChange) { - this.facade.unregisterOnEvent(ORYX.CONFIG.EVENT_SELECTION_CHANGED, this._stopSelectionChange.bind(this)); - this._stopSelectionChange = undefined; - } - }, - - /** - * Extracts RDF from DOM. - * @methodOf ORYX.Plugins.AbstractPlugin.prototype - * @type {String} Extracted RFD. Null if there are transformation errors. - */ - getRDFFromDOM: function(){ - //convert to RDF - try { - var xsl = ""; - source=ORYX.PATH + "lib/extract-rdf.xsl"; - new Ajax.Request(source, { - asynchronous: false, - method: 'get', - onSuccess: function(transport){ - xsl = transport.responseText - }.bind(this), - onFailure: (function(transport){ - ORYX.Log.error("XSL load failed" + transport); - }).bind(this) - }); - - var domParser = new DOMParser(); - var xmlObject = domParser.parseFromString(this.getSerializedDOM(), "text/xml"); - var xslObject = domParser.parseFromString(xsl, "text/xml"); - var xsltProcessor = new XSLTProcessor(); - xsltProcessor.importStylesheet(xslObject); - var result = xsltProcessor.transformToFragment(xmlObject, document); - - var serializer = new XMLSerializer(); - - return serializer.serializeToString(result); - } catch(e){ - console.log("error serializing " + e); - return ""; - } - - - }, - - /** - * Checks if a certain stencil set is loaded right now. - * - */ - isStencilSetExtensionLoaded: function(stencilSetExtensionNamespace) { - return this.facade.getStencilSets().values().any( - function(ss){ - return ss.extensions().keys().any( - function(extensionKey) { - return extensionKey == stencilSetExtensionNamespace; - }.bind(this) - ); - }.bind(this) - ); - }, - - /** - * Raises an event so that registered layouters does - * have the posiblility to layout the given shapes - * For further reading, have a look into the AbstractLayouter - * class - * @param {Object} shapes - */ - doLayout: function(shapes){ - // Raises a do layout event - if (this.facade.raiseEvent) - { - this.facade.raiseEvent({ - type : ORYX.CONFIG.EVENT_LAYOUT, - shapes : shapes - }); - } - else - { - this.facade.handleEvents({ - type : ORYX.CONFIG.EVENT_LAYOUT, - shapes : shapes - }); - } - }, - - - /** - * Does a primitive layouting with the incoming/outgoing - * edges (set the dockers to the right position) and if - * necessary, it will be called the real layouting - * @param {ORYX.Core.Node} node - * @param {Array} edges - */ - layoutEdges : function(node, allEdges, offset){ - - if (!this.facade.isExecutingCommands()){ return } - - var Command = ORYX.Core.Command.extend({ - construct: function(edges, node, offset, plugin){ - this.edges = edges; - this.node = node; - this.plugin = plugin; - this.offset = offset; - - // Get the new absolute center - var center = node.absoluteXY(); - this.ulo = {x: center.x - offset.x, y:center.y - offset.y}; - - - }, - execute: function(){ - - if (this.changes){ - this.executeAgain(); - return; - } else { - this.changes = []; - this.edges.each(function(edge){ - this.changes.push({ - edge: edge, - oldDockerPositions: edge.dockers.map(function(r){ return r.bounds.center() }) - }) - }.bind(this)); - } - - // Find all edges, which are related to the node and - // have more than two dockers - this.edges - // Find all edges with more than two dockers - .findAll(function(r){ return r.dockers.length > 2 }.bind(this)) - // For every edge, check second and one before last docker - // if there are horizontal/vertical on the same level - // and if so, align the the bounds - .each(function(edge){ - if (edge.dockers.first().getDockedShape() === this.node){ - var second = edge.dockers[1]; - if (this.align(second.bounds, edge.dockers.first())){ second.update(); } - } else if (edge.dockers.last().getDockedShape() === this.node) { - var beforeLast = edge.dockers[edge.dockers.length-2]; - if (this.align(beforeLast.bounds, edge.dockers.last())){ beforeLast.update(); } - } - edge._update(true); - edge.removeUnusedDockers(); - if (this.isBendPointIncluded(edge)){ - this.plugin.doLayout(edge); - return; - } - }.bind(this)); - - - // Find all edges, which have only to dockers - // and is located horizontal/vertical. - // Do layout with those edges - this.edges - // Find all edges with exactly two dockers - .each(function(edge){ - if (edge.dockers.length == 2){ - var p1 = edge.dockers.first().getAbsoluteReferencePoint() || edge.dockers.first().bounds.center(); - var p2 = edge.dockers.last().getAbsoluteReferencePoint() || edge.dockers.first().bounds.center(); - // Find all horizontal/vertical edges - if (Math.abs(-Math.abs(p1.x - p2.x) + Math.abs(this.offset.x)) < 2 || Math.abs(-Math.abs(p1.y - p2.y) + Math.abs(this.offset.y)) < 2){ - this.plugin.doLayout(edge); - } - } - }.bind(this)); - - this.edges.each(function(edge, i){ - this.changes[i].dockerPositions = edge.dockers.map(function(r){ return r.bounds.center() }); - }.bind(this)); - - }, - /** - * Align the bounds if the center is - * the same than the old center - * @params {Object} bounds - * @params {Object} bounds2 - */ - align: function(bounds, refDocker){ - - var abRef = refDocker.getAbsoluteReferencePoint() || refDocker.bounds.center(); - - var xdif = bounds.center().x-abRef.x; - var ydif = bounds.center().y-abRef.y; - if (Math.abs(-Math.abs(xdif) + Math.abs(this.offset.x)) < 3 && this.offset.xs === undefined){ - bounds.moveBy({x:-xdif, y:0}) - } - if (Math.abs(-Math.abs(ydif) + Math.abs(this.offset.y)) < 3 && this.offset.ys === undefined){ - bounds.moveBy({y:-ydif, x:0}) - } - - if (this.offset.xs !== undefined || this.offset.ys !== undefined){ - var absPXY = refDocker.getDockedShape().absoluteXY(); - xdif = bounds.center().x-(absPXY.x+((abRef.x-absPXY.x)/this.offset.xs)); - ydif = bounds.center().y-(absPXY.y+((abRef.y-absPXY.y)/this.offset.ys)); - - if (Math.abs(-Math.abs(xdif) + Math.abs(this.offset.x)) < 3){ - bounds.moveBy({x:-(bounds.center().x-abRef.x), y:0}) - } - - if (Math.abs(-Math.abs(ydif) + Math.abs(this.offset.y)) < 3){ - bounds.moveBy({y:-(bounds.center().y-abRef.y), x:0}) - } - } - }, - - /** - * Returns a TRUE if there are bend point which overlay the shape - */ - isBendPointIncluded: function(edge){ - // Get absolute bounds - var ab = edge.dockers.first().getDockedShape(); - var bb = edge.dockers.last().getDockedShape(); - - if (ab) { - ab = ab.absoluteBounds(); - ab.widen(5); - } - - if (bb) { - bb = bb.absoluteBounds(); - bb.widen(20); // Wide with 20 because of the arrow from the edge - } - - return edge.dockers - .any(function(docker, i){ - var c = docker.bounds.center(); - // Dont count first and last - return i != 0 && i != edge.dockers.length-1 && - // Check if the point is included to the absolute bounds - ((ab && ab.isIncluded(c)) || (bb && bb.isIncluded(c))) - }) - }, - - removeAllDocker: function(edge){ - edge.dockers.slice(1, edge.dockers.length-1).each(function(docker){ - edge.removeDocker(docker); - }) - }, - executeAgain: function(){ - this.changes.each(function(change){ - // Reset the dockers - this.removeAllDocker(change.edge); - change.dockerPositions.each(function(pos, i){ - if (i==0||i==change.dockerPositions.length-1){ return } - var docker = change.edge.createDocker(undefined, pos); - docker.bounds.centerMoveTo(pos); - docker.update(); - }.bind(this)); - change.edge._update(true); - }.bind(this)); - }, - rollback: function(){ - this.changes.each(function(change){ - // Reset the dockers - this.removeAllDocker(change.edge); - change.oldDockerPositions.each(function(pos, i){ - if (i==0||i==change.oldDockerPositions.length-1){ return } - var docker = change.edge.createDocker(undefined, pos); - docker.bounds.centerMoveTo(pos); - docker.update(); - }.bind(this)); - change.edge._update(true); - }.bind(this)); - } - }); - - this.facade.executeCommands([new Command(allEdges, node, offset, this)]); - - } -});/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!ORYX){ var ORYX = {} } -if(!ORYX.Plugins){ ORYX.Plugins = {} } - -/** - This abstract plugin implements the core behaviour of layout - - @class ORYX.Plugins.AbstractLayouter - @constructor Creates a new instance - @author Willi Tscheschner -*/ -ORYX.Plugins.AbstractLayouter = ORYX.Plugins.AbstractPlugin.extend({ - - /** - * 'layouted' defined all types of shapes which will be layouted. - * It can be one value or an array of values. The value - * can be a Stencil ID (as String) or an class type of either - * a ORYX.Core.Node or ORYX.Core.Edge - * @type Array|String|Object - * @memberOf ORYX.Plugins.AbstractLayouter.prototype - */ - layouted : [], - - /** - * Constructor - * @param {Object} facade - * @memberOf ORYX.Plugins.AbstractLayouter.prototype - */ - construct: function( facade ){ - arguments.callee.$.construct.apply(this, arguments); - - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LAYOUT, this._initLayout.bind(this)); - }, - - /** - * Proofs if this shape should be layouted or not - * @param {Object} shape - * @memberOf ORYX.Plugins.AbstractLayouter.prototype - */ - isIncludedInLayout: function(shape){ - if (!(this.layouted instanceof Array)){ - this.layouted = [this.layouted].compact(); - } - - // If there are no elements - if (this.layouted.length <= 0) { - // Return TRUE - return true; - } - - // Return TRUE if there is any correlation between - // the 'layouted' attribute and the shape themselve. - return this.layouted.any(function(s){ - if (typeof s == "string") { - return shape.getStencil().id().include(s); - } else { - return shape instanceof s; - } - }) - }, - - /** - * Callback to start the layouting - * @param {Object} event Layout event - * @param {Object} shapes Given shapes - * @memberOf ORYX.Plugins.AbstractLayouter.prototype - */ - _initLayout: function(event){ - - // Get the shapes - var shapes = [event.shapes].flatten().compact(); - - // Find all shapes which should be layouted - var toLayout = shapes.findAll(function(shape){ - return this.isIncludedInLayout(shape) - }.bind(this)) - - // If there are shapes left - if (toLayout.length > 0){ - // Do layout - this.layout(toLayout); - } - }, - - /** - * Implementation of layouting a set on shapes - * @param {Object} shapes Given shapes - * @memberOf ORYX.Plugins.AbstractLayouter.prototype - */ - layout: function(shapes){ - throw new Error("Layouter has to implement the layout function.") - } -});/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if (!ORYX.Plugins) - ORYX.Plugins = new Object(); - -ORYX.Plugins.Edit = Clazz.extend({ - - construct: function(facade){ - - this.facade = facade; - this.clipboard = new ORYX.Plugins.Edit.ClipBoard(); - - //this.facade.registerOnEvent(ORYX.CONFIG.EVENT_KEYDOWN, this.keyHandler.bind(this)); - - this.facade.offer({ - name: ORYX.I18N.Edit.cut, - description: ORYX.I18N.Edit.cutDesc, - icon: ORYX.PATH + "images/cut.png", - keyCodes: [{ - metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL], - keyCode: 88, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.callEdit.bind(this, this.editCut), - group: ORYX.I18N.Edit.group, - index: 1, - minShape: 1 - }); - - this.facade.offer({ - name: ORYX.I18N.Edit.copy, - description: ORYX.I18N.Edit.copyDesc, - icon: ORYX.PATH + "images/page_copy.png", - keyCodes: [{ - metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL], - keyCode: 67, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.callEdit.bind(this, this.editCopy, [true, false]), - group: ORYX.I18N.Edit.group, - index: 2, - minShape: 1 - }); - - this.facade.offer({ - name: ORYX.I18N.Edit.paste, - description: ORYX.I18N.Edit.pasteDesc, - icon: ORYX.PATH + "images/page_paste.png", - keyCodes: [{ - metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL], - keyCode: 86, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.callEdit.bind(this, this.editPaste), - isEnabled: this.clipboard.isOccupied.bind(this.clipboard), - group: ORYX.I18N.Edit.group, - index: 3, - minShape: 0, - maxShape: 0 - }); - - this.facade.offer({ - name: ORYX.I18N.Edit.del, - description: ORYX.I18N.Edit.delDesc, - icon: ORYX.PATH + "images/cross.png", - keyCodes: [{ - metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL], - keyCode: 8, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - }, - { - keyCode: 46, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.callEdit.bind(this, this.editDelete), - group: ORYX.I18N.Edit.group, - index: 4, - minShape: 1 - }); - }, - - callEdit: function(fn, args){ - window.setTimeout(function(){ - fn.apply(this, (args instanceof Array ? args : [])); - }.bind(this), 1); - }, - - /** - * Handles the mouse down event and starts the copy-move-paste action, if - * control or meta key is pressed. - */ - handleMouseDown: function(event) { - if(this._controlPressed) { - this._controlPressed = false; - this.editCopy(); -// console.log("copiedEle: %0",this.clipboard.shapesAsJson) -// console.log("mousevent: %o",event) - this.editPaste(); - event.forceExecution = true; - this.facade.raiseEvent(event, this.clipboard.shapesAsJson); - - } - }, - - /** - * The key handler for this plugin. Every action from the set of cut, copy, - * paste and delete should be accessible trough simple keyboard shortcuts. - * This method checks whether any event triggers one of those actions. - * - * @param {Object} event The keyboard event that should be analysed for - * triggering of this plugin. - */ -// keyHandler: function(event){ -// //TODO document what event.which is. -// -// ORYX.Log.debug("edit.js handles a keyEvent."); -// -// // assure we have the current event. -// if (!event) -// event = window.event; -// -// -// // get the currently pressed key and state of control key. -// var pressedKey = event.which || event.keyCode; -// var ctrlPressed = event.ctrlKey; -// -// // if the object is to be deleted, do so, and return immediately. -// if ((pressedKey == ORYX.CONFIG.KEY_CODE_DELETE) || -// ((pressedKey == ORYX.CONFIG.KEY_CODE_BACKSPACE) && -// (event.metaKey || event.appleMetaKey))) { -// -// ORYX.Log.debug("edit.js deletes the shape."); -// this.editDelete(); -// return; -// } -// -// // if control key is not pressed, we're not interested anymore. -// if (!ctrlPressed) -// return; -// -// // when ctrl is pressed, switch trough the possibilities. -// switch (pressedKey) { -// -// // cut. -// case ORYX.CONFIG.KEY_CODE_X: -// this.editCut(); -// break; -// -// // copy. -// case ORYX.CONFIG.KEY_CODE_C: -// this.editCopy(); -// break; -// -// // paste. -// case ORYX.CONFIG.KEY_CODE_V: -// this.editPaste(); -// break; -// } -// }, - - /** - * Returns a list of shapes which should be considered while copying. - * Besides the shapes of given ones, edges and attached nodes are added to the result set. - * If one of the given shape is a child of another given shape, it is not put into the result. - */ - getAllShapesToConsider: function(shapes){ - var shapesToConsider = []; // only top-level shapes - var childShapesToConsider = []; // all child shapes of top-level shapes - - shapes.each(function(shape){ - //Throw away these shapes which have a parent in given shapes - isChildShapeOfAnother = shapes.any(function(s2){ - return s2.hasChildShape(shape); - }); - if(isChildShapeOfAnother) return; - - // This shape should be considered - shapesToConsider.push(shape); - // Consider attached nodes (e.g. intermediate events) - if (shape instanceof ORYX.Core.Node) { - var attached = shape.getOutgoingNodes(); - attached = attached.findAll(function(a){ return !shapes.include(a) }); - shapesToConsider = shapesToConsider.concat(attached); - } - - childShapesToConsider = childShapesToConsider.concat(shape.getChildShapes(true)); - }.bind(this)); - - // All edges between considered child shapes should be considered - // Look for these edges having incoming and outgoing in childShapesToConsider - var edgesToConsider = this.facade.getCanvas().getChildEdges().select(function(edge){ - // Ignore if already added - if(shapesToConsider.include(edge)) return false; - // Ignore if there are no docked shapes - if(edge.getAllDockedShapes().size() === 0) return false; - // True if all docked shapes are in considered child shapes - return edge.getAllDockedShapes().all(function(shape){ - // Remember: Edges can have other edges on outgoing, that is why edges must not be included in childShapesToConsider - return shape instanceof ORYX.Core.Edge || childShapesToConsider.include(shape); - }); - }); - shapesToConsider = shapesToConsider.concat(edgesToConsider); - - return shapesToConsider; - }, - - /** - * Performs the cut operation by first copy-ing and then deleting the - * current selection. - */ - editCut: function(){ - //TODO document why this returns false. - //TODO document what the magic boolean parameters are supposed to do. - - this.editCopy(false, true); - this.editDelete(true); - return false; - }, - - /** - * Performs the copy operation. - * @param {Object} will_not_update ?? - */ - editCopy: function( will_update, useNoOffset ){ - var selection = this.facade.getSelection(); - - //if the selection is empty, do not remove the previously copied elements - if(selection.length == 0) return; - - this.clipboard.refresh(selection, this.getAllShapesToConsider(selection), this.facade.getCanvas().getStencil().stencilSet().namespace(), useNoOffset); - - if( will_update ) this.facade.updateSelection(); - }, - - /** - * Performs the paste operation. - */ - editPaste: function(){ - // Create a new canvas with childShapes - //and stencilset namespace to be JSON Import conform - var canvas = { - childShapes: this.clipboard.shapesAsJson, - stencilset:{ - namespace:this.clipboard.SSnamespace - } - }; - // Apply json helper to iterate over json object - jQuery.extend(canvas, ORYX.Core.AbstractShape.JSONHelper); - - var childShapeResourceIds = canvas.getChildShapes(true).pluck("resourceId"); - var outgoings = {}; - // Iterate over all shapes - canvas.eachChild(function(shape, parent){ - // Throw away these references where referenced shape isn't copied - shape.outgoing = shape.outgoing.select(function(out){ - return childShapeResourceIds.include(out.resourceId); - }); - shape.outgoing.each(function(out){ - if (!outgoings[out.resourceId]){ outgoings[out.resourceId] = []; } - outgoings[out.resourceId].push(shape); - }); - - return shape; - }.bind(this), true, true); - - - // Iterate over all shapes - canvas.eachChild(function(shape, parent){ - - // Check if there has a valid target - if(shape.target && !(childShapeResourceIds.include(shape.target.resourceId))){ - shape.target = undefined; - shape.targetRemoved = true; - } - - // Check if the first docker is removed - if( shape.dockers && - shape.dockers.length >= 1 && - shape.dockers[0].getDocker && - ((shape.dockers[0].getDocker().getDockedShape() && - !childShapeResourceIds.include(shape.dockers[0].getDocker().getDockedShape().resourceId)) || - !shape.getShape().dockers[0].getDockedShape()&&!outgoings[shape.resourceId])) { - - shape.sourceRemoved = true; - } - - return shape; - }.bind(this), true, true); - - - // Iterate over top-level shapes - canvas.eachChild(function(shape, parent){ - // All top-level shapes should get an offset in their bounds - // Move the shape occording to COPY_MOVE_OFFSET - if (this.clipboard.useOffset) { - shape.bounds = { - lowerRight: { - x: shape.bounds.lowerRight.x + ORYX.CONFIG.COPY_MOVE_OFFSET, - y: shape.bounds.lowerRight.y + ORYX.CONFIG.COPY_MOVE_OFFSET - }, - upperLeft: { - x: shape.bounds.upperLeft.x + ORYX.CONFIG.COPY_MOVE_OFFSET, - y: shape.bounds.upperLeft.y + ORYX.CONFIG.COPY_MOVE_OFFSET - } - }; - } - // Only apply offset to shapes with a target - if (shape.dockers){ - shape.dockers = shape.dockers.map(function(docker, i){ - // If shape had a target but the copied does not have anyone anymore, - // migrate the relative dockers to absolute ones. - if( (shape.targetRemoved === true && i == shape.dockers.length - 1&&docker.getDocker) || - (shape.sourceRemoved === true && i == 0&&docker.getDocker)){ - - docker = docker.getDocker().bounds.center(); - } - - // If it is the first docker and it has a docked shape, - // just return the coordinates - if ((i == 0 && docker.getDocker instanceof Function && - shape.sourceRemoved !== true && (docker.getDocker().getDockedShape() || ((outgoings[shape.resourceId]||[]).length > 0 && (!(shape.getShape() instanceof ORYX.Core.Node) || outgoings[shape.resourceId][0].getShape() instanceof ORYX.Core.Node)))) || - (i == shape.dockers.length - 1 && docker.getDocker instanceof Function && - shape.targetRemoved !== true && (docker.getDocker().getDockedShape() || shape.target))){ - - return { - x: docker.x, - y: docker.y, - getDocker: docker.getDocker - } - } else if (this.clipboard.useOffset) { - return { - x: docker.x + ORYX.CONFIG.COPY_MOVE_OFFSET, - y: docker.y + ORYX.CONFIG.COPY_MOVE_OFFSET, - getDocker: docker.getDocker - }; - } else { - return { - x: docker.x, - y: docker.y, - getDocker: docker.getDocker - }; - } - }.bind(this)); - - } else if (shape.getShape() instanceof ORYX.Core.Node && shape.dockers && shape.dockers.length > 0 && (!shape.dockers.first().getDocker || shape.sourceRemoved === true || !(shape.dockers.first().getDocker().getDockedShape() || outgoings[shape.resourceId]))){ - - shape.dockers = shape.dockers.map(function(docker, i){ - - if((shape.sourceRemoved === true && i == 0&&docker.getDocker)){ - docker = docker.getDocker().bounds.center(); - } - - if (this.clipboard.useOffset) { - return { - x: docker.x + ORYX.CONFIG.COPY_MOVE_OFFSET, - y: docker.y + ORYX.CONFIG.COPY_MOVE_OFFSET, - getDocker: docker.getDocker - }; - } else { - return { - x: docker.x, - y: docker.y, - getDocker: docker.getDocker - }; - } - }.bind(this)); - } - - return shape; - }.bind(this), false, true); - - this.clipboard.useOffset = true; - this.facade.importJSON(canvas); - }, - - /** - * Performs the delete operation. No more asking. - */ - editDelete: function(){ - var selection = this.facade.getSelection(); - - if (selection.length > 0) { - //only update the command stack if something was performed... - var clipboard = new ORYX.Plugins.Edit.ClipBoard(); - clipboard.refresh(selection, this.getAllShapesToConsider(selection)); - - var command = new ORYX.Plugins.Edit.DeleteCommand(clipboard , this.facade); - - this.facade.executeCommands([command]); - } - } -}); - -ORYX.Plugins.Edit.ClipBoard = Clazz.extend({ - construct: function(){ - this.shapesAsJson = []; - this.selection = []; - this.SSnamespace=""; - this.useOffset=true; - }, - isOccupied: function(){ - return this.shapesAsJson.length > 0; - }, - refresh: function(selection, shapes, namespace, useNoOffset){ - this.selection = selection; - this.SSnamespace=namespace; - // Store outgoings, targets and parents to restore them later on - this.outgoings = {}; - this.parents = {}; - this.targets = {}; - this.useOffset = useNoOffset !== true; - - this.shapesAsJson = shapes.map(function(shape){ - var s = shape.toJSON(); - s.parent = {resourceId : shape.getParentShape().resourceId}; - s.parentIndex = shape.getParentShape().getChildShapes().indexOf(shape) - return s; - }); - } -}); - -ORYX.Plugins.Edit.DeleteCommand = ORYX.Core.Command.extend({ - construct: function(clipboard, facade){ - this.clipboard = clipboard; - this.shapesAsJson = clipboard.shapesAsJson; - this.facade = facade; - - // Store dockers of deleted shapes to restore connections - this.dockers = this.shapesAsJson.map(function(shapeAsJson) { - var shape = shapeAsJson.getShape(); - var incomingDockers = shape.getIncomingShapes().map(function(s){return s.getDockers().last();}); - var outgoingDockers = shape.getOutgoingShapes().map(function(s){return s.getDockers().first();}); - var dockers = shape.getDockers().concat(incomingDockers, outgoingDockers).compact().map(function(docker){ - return { - object: docker, - referencePoint: docker.referencePoint, - dockedShape: docker.getDockedShape() - }; - }); - return dockers; - }).flatten(); - }, - execute: function(){ - this.shapesAsJson.each(function(shapeAsJson){ - // Delete shape - this.facade.deleteShape(shapeAsJson.getShape()); - }.bind(this)); - - this.facade.setSelection([]); - this.facade.getCanvas().update(); - this.facade.updateSelection(); - this.facade.handleEvents({type: ORYX.CONFIG.ACTION_DELETE_COMPLETED}); - - }, - rollback: function(){ - this.shapesAsJson.each(function(shapeAsJson) { - var shape = shapeAsJson.getShape(); - var parent = this.facade.getCanvas().getChildShapeByResourceId(shapeAsJson.parent.resourceId) || this.facade.getCanvas(); - parent.add(shape, shape.parentIndex); - }.bind(this)); - - //reconnect shapes - this.dockers.each(function(d) { - d.object.setDockedShape(d.dockedShape); - d.object.setReferencePoint(d.referencePoint); - }.bind(this)); - - this.facade.setSelection(this.selectedShapes); - this.facade.getCanvas().update(); - this.facade.updateSelection(); - - } -});/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -/** - * @namespace Oryx name space for plugins - * @name ORYX.Plugins -*/ -if(!ORYX.Plugins) - ORYX.Plugins = new Object(); - -/** - * The view plugin offers all of zooming functionality accessible over the - * tool bar. This are zoom in, zoom out, zoom to standard, zoom fit to model. - * - * @class ORYX.Plugins.View - * @extends Clazz - * @param {Object} facade The editor facade for plugins. -*/ -ORYX.Plugins.View = { - /** @lends ORYX.Plugins.View.prototype */ - facade: undefined, - - construct: function(facade, ownPluginData) { - this.facade = facade; - //Standard Values - this.zoomLevel = 1.0; - this.maxFitToScreenLevel=1.5; - this.minZoomLevel = 0.1; - this.maxZoomLevel = 2.5; - this.diff=5; //difference between canvas and view port, s.th. like toolbar?? - - //Read properties - if (ownPluginData !== undefined && ownPluginData !== null) { - ownPluginData.get('properties').each( function(property) { - if (property.zoomLevel) {this.zoomLevel = Number(1.0);} - if (property.maxFitToScreenLevel) {this.maxFitToScreenLevel=Number(property.maxFitToScreenLevel);} - if (property.minZoomLevel) {this.minZoomLevel = Number(property.minZoomLevel);} - if (property.maxZoomLevel) {this.maxZoomLevel = Number(property.maxZoomLevel);} - }.bind(this)); - } - - - /* Register zoom in */ - this.facade.offer({ - 'name':ORYX.I18N.View.zoomIn, - 'functionality': this.zoom.bind(this, [1.0 + ORYX.CONFIG.ZOOM_OFFSET]), - 'group': ORYX.I18N.View.group, - 'icon': ORYX.PATH + "images/magnifier_zoom_in.png", - 'description': ORYX.I18N.View.zoomInDesc, - 'index': 1, - 'minShape': 0, - 'maxShape': 0, - 'isEnabled': function(){return this.zoomLevel < this.maxZoomLevel }.bind(this)}); - - /* Register zoom out */ - this.facade.offer({ - 'name':ORYX.I18N.View.zoomOut, - 'functionality': this.zoom.bind(this, [1.0 - ORYX.CONFIG.ZOOM_OFFSET]), - 'group': ORYX.I18N.View.group, - 'icon': ORYX.PATH + "images/magnifier_zoom_out.png", - 'description': ORYX.I18N.View.zoomOutDesc, - 'index': 2, - 'minShape': 0, - 'maxShape': 0, - 'isEnabled': function(){ return this._checkSize() }.bind(this)}); - - /* Register zoom standard */ - this.facade.offer({ - 'name':ORYX.I18N.View.zoomStandard, - 'functionality': this.setAFixZoomLevel.bind(this, 1), - 'group': ORYX.I18N.View.group, - 'icon': ORYX.PATH + "images/zoom_standard.png", - 'cls' : 'icon-large', - 'description': ORYX.I18N.View.zoomStandardDesc, - 'index': 3, - 'minShape': 0, - 'maxShape': 0, - 'isEnabled': function(){return this.zoomLevel != 1}.bind(this) - }); - - /* Register zoom fit to model */ - this.facade.offer({ - 'name':ORYX.I18N.View.zoomFitToModel, - 'functionality': this.zoomFitToModel.bind(this), - 'group': ORYX.I18N.View.group, - 'icon': ORYX.PATH + "images/image.png", - 'description': ORYX.I18N.View.zoomFitToModelDesc, - 'index': 4, - 'minShape': 0, - 'maxShape': 0 - }); - }, - - /** - * It sets the zoom level to a fix value and call the zooming function. - * - * @param {Number} zoomLevel - * the zoom level - */ - setAFixZoomLevel : function(zoomLevel) { - this.zoomLevel = zoomLevel; - this._checkZoomLevelRange(); - this.zoom(1); - }, - - /** - * It does the actual zooming. It changes the viewable size of the canvas - * and all to its child elements. - * - * @param {Number} factor - * the factor to adjust the zoom level - */ - zoom: function(factor) { - // TODO: Zoomen auf allen Objekten im SVG-DOM - - this.zoomLevel *= factor; - var scrollNode = this.facade.getCanvas().getHTMLContainer().parentNode.parentNode; - var canvas = this.facade.getCanvas(); - var newWidth = canvas.bounds.width() * this.zoomLevel; - var newHeight = canvas.bounds.height() * this.zoomLevel; - - /* Set new top offset */ - var offsetTop = (canvas.node.parentNode.parentNode.parentNode.offsetHeight - newHeight) / 2.0; - offsetTop = offsetTop > 20 ? offsetTop - 20 : 0; - canvas.node.parentNode.parentNode.style.marginTop = offsetTop + "px"; - offsetTop += 5; - canvas.getHTMLContainer().style.top = offsetTop + "px"; - - /*readjust scrollbar*/ - var newScrollTop= scrollNode.scrollTop - Math.round((canvas.getHTMLContainer().parentNode.getHeight()-newHeight) / 2)+this.diff; - var newScrollLeft= scrollNode.scrollLeft - Math.round((canvas.getHTMLContainer().parentNode.getWidth()-newWidth) / 2)+this.diff; - - /* Set new Zoom-Level */ - canvas.setSize({width: newWidth, height: newHeight}, true); - - /* Set Scale-Factor */ - canvas.node.setAttributeNS(null, "transform", "scale(" +this.zoomLevel+ ")"); - - /* Refresh the Selection */ - this.facade.updateSelection(); - scrollNode.scrollTop=newScrollTop; - scrollNode.scrollLeft=newScrollLeft; - - /* Update the zoom-level*/ - canvas.zoomLevel = this.zoomLevel; - }, - - - /** - * It calculates the zoom level to fit whole model into the visible area - * of the canvas. Than the model gets zoomed and the position of the - * scroll bars are adjusted. - * - */ - zoomFitToModel: function() { - - /* Get the size of the visible area of the canvas */ - var scrollNode = this.facade.getCanvas().getHTMLContainer().parentNode.parentNode; - var visibleHeight = scrollNode.getHeight() - 30; - var visibleWidth = scrollNode.getWidth() - 30; - - var nodes = this.facade.getCanvas().getChildShapes(); - - if(!nodes || nodes.length < 1) { - return false; - } - - /* Calculate size of canvas to fit the model */ - var bounds = nodes[0].absoluteBounds().clone(); - nodes.each(function(node) { - bounds.include(node.absoluteBounds().clone()); - }); - - - /* Set new Zoom Level */ - var scaleFactorWidth = visibleWidth / bounds.width(); - var scaleFactorHeight = visibleHeight / bounds.height(); - - /* Choose the smaller zoom level to fit the whole model */ - var zoomFactor = scaleFactorHeight < scaleFactorWidth ? scaleFactorHeight : scaleFactorWidth; - - /*Test if maximum zoom is reached*/ - if(zoomFactor>this.maxFitToScreenLevel){zoomFactor=this.maxFitToScreenLevel} - /* Do zooming */ - this.setAFixZoomLevel(zoomFactor); - - /* Set scroll bar position */ - scrollNode.scrollTop = Math.round(bounds.upperLeft().y * this.zoomLevel) - 5; - scrollNode.scrollLeft = Math.round(bounds.upperLeft().x * this.zoomLevel) - 5; - - }, - - /** - * It checks if the zoom level is less or equal to the level, which is required - * to schow the whole canvas. - * - * @private - */ - _checkSize:function(){ - var canvasParent=this.facade.getCanvas().getHTMLContainer().parentNode; - var minForCanvas= Math.min((canvasParent.parentNode.getWidth()/canvasParent.getWidth()),(canvasParent.parentNode.getHeight()/canvasParent.getHeight())); - return 1.05 > minForCanvas; - - }, - /** - * It checks if the zoom level is included in the definined zoom - * level range. - * - * @private - */ - _checkZoomLevelRange: function() { - /*var canvasParent=this.facade.getCanvas().getHTMLContainer().parentNode; - var maxForCanvas= Math.max((canvasParent.parentNode.getWidth()/canvasParent.getWidth()),(canvasParent.parentNode.getHeight()/canvasParent.getHeight())); - if(this.zoomLevel > maxForCanvas) { - this.zoomLevel = maxForCanvas; - }*/ - if(this.zoomLevel < this.minZoomLevel) { - this.zoomLevel = this.minZoomLevel; - } - - if(this.zoomLevel > this.maxZoomLevel) { - this.zoomLevel = this.maxZoomLevel; - } - } -}; - -ORYX.Plugins.View = Clazz.extend(ORYX.Plugins.View); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!Signavio){ var Signavio = {} }; - if (!Signavio.Core) { Signavio.Core = {} }; - Signavio.Core.Version = "1.0"; - /** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if (!Signavio) { - var Signavio = new Object(); -} - -if (!Signavio.Plugins) { - Signavio.Plugins = new Object(); -} - -if (!Signavio.Plugins.Utils) { - Signavio.Plugins.Utils = new Object(); -} - -if (!Signavio.Helper) { - Signavio.Helper = new Object(); -} - - -new function() { - - /** - * Provides an uniq id - * @overwrite - * @return {String} - * - */ - ORYX.Editor.provideId = function() { - var res = [], hex = '0123456789ABCDEF'; - - for (var i = 0; i < 36; i++) res[i] = Math.floor(Math.random()*0x10); - - res[14] = 4; - res[19] = (res[19] & 0x3) | 0x8; - - for (var i = 0; i < 36; i++) res[i] = hex[res[i]]; - - res[8] = res[13] = res[18] = res[23] = '-'; - - return "sid-" + res.join(''); - }; - - -}(); - -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if (!ORYX.Plugins) { - ORYX.Plugins = new Object(); -} - -/** - * This plugin is responsible for displaying loading indicators and to prevent - * the user from accidently unloading the page by, e.g., pressing the backspace - * button and returning to the previous site in history. - * @param {Object} facade The editor plugin facade to register enhancements with. - */ -ORYX.Plugins.Loading = { - - construct: function(facade){ - - this.facade = facade; - - // The parent Node - this.node = ORYX.Editor.graft("http://www.w3.org/1999/xhtml", this.facade.getCanvas().getHTMLContainer().parentNode, ['div', { - 'class': 'LoadingIndicator' - }, '']); - - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADING_ENABLE, this.enableLoading.bind(this)); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADING_DISABLE, this.disableLoading.bind(this)); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADING_STATUS, this.showStatus.bind(this)); - - this.disableLoading(); - }, - - enableLoading: function(options){ - if(options.text) - this.node.innerHTML = options.text + "..."; - else - this.node.innerHTML = ORYX.I18N.Loading.waiting; - this.node.removeClassName('StatusIndicator'); - this.node.addClassName('LoadingIndicator'); - this.node.style.display = "block"; - - var pos = this.facade.getCanvas().rootNode.parentNode.parentNode.parentNode.parentNode; - - this.node.style.top = pos.offsetTop + 'px'; - this.node.style.left = pos.offsetLeft +'px'; - - }, - - disableLoading: function(){ - this.node.style.display = "none"; - }, - - showStatus: function(options) { - if(options.text) { - this.node.innerHTML = options.text; - this.node.addClassName('StatusIndicator'); - this.node.removeClassName('LoadingIndicator'); - this.node.style.display = 'block'; - - var pos = this.facade.getCanvas().rootNode.parentNode.parentNode.parentNode.parentNode; - - this.node.style.top = pos.offsetTop + 'px'; - this.node.style.left = pos.offsetLeft +'px'; - - var tout = options.timeout ? options.timeout : 2000; - - window.setTimeout((function(){ - - this.disableLoading(); - - }).bind(this), tout); - } - - } -} - -ORYX.Plugins.Loading = Clazz.extend(ORYX.Plugins.Loading); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if (!ORYX.Plugins) { - ORYX.Plugins = new Object(); -} - - - -/** - * This plugin is responsible for resizing the canvas. - * @param {Object} facade The editor plugin facade to register enhancements with. - */ -ORYX.Plugins.CanvasResize = Clazz.extend({ - - construct: function(facade){ - - this.facade = facade; - new ORYX.Plugins.CanvasResizeButton( this.facade.getCanvas(), "N", this.resize.bind(this)); - new ORYX.Plugins.CanvasResizeButton( this.facade.getCanvas(), "W", this.resize.bind(this)); - new ORYX.Plugins.CanvasResizeButton( this.facade.getCanvas(), "E", this.resize.bind(this)); - new ORYX.Plugins.CanvasResizeButton( this.facade.getCanvas(), "S", this.resize.bind(this)); - - window.setTimeout(function(){jQuery(window).trigger('resize');}); - - }, - - resize: function( position, shrink ){ - - resizeCanvas = function(position, extentionSize, facade) { - var canvas = facade.getCanvas(); - var b = canvas.bounds; - var scrollNode = facade.getCanvas().getHTMLContainer().parentNode.parentNode; - - if( position == "E" || position == "W"){ - canvas.setSize({width: (b.width() + extentionSize)*canvas.zoomLevel, height: (b.height())*canvas.zoomLevel}) - - } else if( position == "S" || position == "N"){ - canvas.setSize({width: (b.width())*canvas.zoomLevel, height: (b.height() + extentionSize)*canvas.zoomLevel}) - } - - if( position == "N" || position == "W"){ - - var move = position == "N" ? {x: 0, y: extentionSize}: {x: extentionSize, y: 0 }; - - // Move all children - canvas.getChildNodes(false, function(shape){ shape.bounds.moveBy(move) }) - // Move all dockers, when the edge has at least one docked shape - var edges = canvas.getChildEdges().findAll(function(edge){ return edge.getAllDockedShapes().length > 0}) - var dockers = edges.collect(function(edge){ return edge.dockers.findAll(function(docker){ return !docker.getDockedShape() })}).flatten(); - dockers.each(function(docker){ docker.bounds.moveBy(move)}) - } else if( position == "S" ){ - scrollNode.scrollTop += extentionSize; - } else if( position == "E" ){ - scrollNode.scrollLeft += extentionSize; - } - - jQuery(window).trigger('resize'); - - canvas.update(); - facade.updateSelection(); - } - - var commandClass = ORYX.Core.Command.extend({ - construct: function(position, extentionSize, facade){ - this.position = position; - this.extentionSize = extentionSize; - this.facade = facade; - }, - execute: function(){ - resizeCanvas(this.position, this.extentionSize, this.facade); - }, - rollback: function(){ - resizeCanvas(this.position, -this.extentionSize, this.facade); - }, - update:function(){ - } - }); - - var extentionSize = ORYX.CONFIG.CANVAS_RESIZE_INTERVAL; - if(shrink) extentionSize = -extentionSize; - var command = new commandClass(position, extentionSize, this.facade); - - this.facade.executeCommands([command]); - - } - -}); - - -ORYX.Plugins.CanvasResizeButton = Clazz.extend({ - - construct: function(canvas, position, callback){ - this.canvas = canvas; - var parentNode = canvas.getHTMLContainer().parentNode; - - window.myParent=parentNode; - - var actualScrollNode = jQuery('#canvasSection')[0]; - var scrollNode = actualScrollNode; - var canvasNode = $$("#canvasSection .ORYX_Editor")[0]; - var svgRootNode = canvasNode.children[0]; - - var iconClass = 'glyphicon glyphicon-chevron-'; - var iconClassShrink = 'glyphicon glyphicon-chevron-'; - if(position == 'N') { - iconClass += 'up'; - iconClassShrink += 'down'; - } else if(position == 'S') { - iconClass += 'down'; - iconClassShrink += 'up'; - } else if(position == 'E') { - iconClass += 'right'; - iconClassShrink += 'left'; - } else if(position == 'W') { - iconClass += 'left'; - iconClassShrink += 'right'; - } - - // The buttons - var idGrow = 'canvas-shrink-' + position; - var idShrink = 'canvas-grow-' + position; - - var buttonGrow = ORYX.Editor.graft("http://www.w3.org/1999/xhtml", parentNode, ['div', {'class': 'canvas_resize_indicator canvas_resize_indicator_grow' + ' ' + position, 'id': idGrow ,'title':ORYX.I18N.RESIZE.tipGrow+ORYX.I18N.RESIZE[position]}, - ['i', {'class' : iconClass}] - ]); - var buttonShrink = ORYX.Editor.graft("http://www.w3.org/1999/xhtml", parentNode, ['div', {'class': 'canvas_resize_indicator canvas_resize_indicator_shrink' + ' ' + position, 'id': idShrink ,'title':ORYX.I18N.RESIZE.tipGrow+ORYX.I18N.RESIZE[position]}, - ['i', {'class' : iconClassShrink}] - ]); - // Defines a callback which gives back - // a boolean if the current mouse event - // is over the particular button area - var offSetWidth = 60; - var isOverOffset = function(event) { - - var isOverButton = event.target.id.indexOf("canvas-shrink") != -1 - || event.target.id.indexOf("canvas-grow") != -1 - || event.target.parentNode.id.indexOf("canvas-shrink") != -1 - || event.target.parentNode.id.indexOf("canvas-grow") != -1; - if(isOverButton) { - if(event.target.id == idGrow || event.target.id == idShrink || - event.target.parentNode.id == idGrow || event.target.parentNode.id == idShrink ) { - return true; - } else { - return false; - } - } - - if(event.target!=parentNode && event.target!=scrollNode&& event.target!=scrollNode.firstChild&& event.target!=svgRootNode&& event.target!=scrollNode){ return false; } - - //if(inCanvas){offSetWidth=30}else{offSetWidth=30*2} - //Safari work around - var X=event.offsetX !== undefined ? event.offsetX : event.layerX; - var Y=event.offsetY !== undefined ? event.offsetY : event.layerY; - - var canvasOffset = 0; - if(canvasNode.clientWidth < actualScrollNode.clientWidth) { - var widthDiff = actualScrollNode.clientWidth - canvasNode.clientWidth; - canvasOffset = widthDiff / 2; - } - - // Adjust to relative location to the actual viewport - Y = Y - actualScrollNode.scrollTop; - X = X - actualScrollNode.scrollLeft; - - - if(position == "N"){ - return Y < offSetWidth; - } else if(position == "W"){ - return X < offSetWidth + canvasOffset; - } else if(position == "E"){ - return actualScrollNode.clientWidth - X < offSetWidth + canvasOffset; - } else if(position == "S"){ - return actualScrollNode.clientHeight - Y < offSetWidth; - } - - return false; - }; - - var showButtons = (function() { - buttonGrow.show(); - - var w = canvas.bounds.width(); - var h = canvas.bounds.height(); - - if(position=="N" && (h - ORYX.CONFIG.CANVAS_RESIZE_INTERVAL > ORYX.CONFIG.CANVAS_MIN_HEIGHT)) buttonShrink.show(); - else if(position=="E" && (w - ORYX.CONFIG.CANVAS_RESIZE_INTERVAL > ORYX.CONFIG.CANVAS_MIN_WIDTH)) buttonShrink.show(); - else if(position=="S" && (h - ORYX.CONFIG.CANVAS_RESIZE_INTERVAL > ORYX.CONFIG.CANVAS_MIN_HEIGHT)) buttonShrink.show(); - else if(position=="W" && (w - ORYX.CONFIG.CANVAS_RESIZE_INTERVAL > ORYX.CONFIG.CANVAS_MIN_WIDTH)) buttonShrink.show(); - else buttonShrink.hide(); - - - }).bind(this); - - var hideButtons = function() { - buttonGrow.hide(); - buttonShrink.hide(); - }; - - // If the mouse move is over the button area, show the button - parentNode.parentNode.addEventListener( ORYX.CONFIG.EVENT_MOUSEMOVE, function(event){ if( isOverOffset(event) ){showButtons();} else {hideButtons()}} , false ); - // If the mouse is over the button, show them - buttonGrow.addEventListener( ORYX.CONFIG.EVENT_MOUSEOVER, function(event){showButtons();}, true ); - buttonShrink.addEventListener( ORYX.CONFIG.EVENT_MOUSEOVER, function(event){showButtons();}, true ); - // If the mouse is out, hide the button - //scrollNode.addEventListener( ORYX.CONFIG.EVENT_MOUSEOUT, function(event){button.hide()}, true ) - parentNode.parentNode.addEventListener( ORYX.CONFIG.EVENT_MOUSEOUT, function(event){hideButtons()} , true ); - //svgRootNode.addEventListener( ORYX.CONFIG.EVENT_MOUSEOUT, function(event){ inCanvas = false } , true ); - - // Hide the button initialy - hideButtons(); - - // Add the callbacks - buttonGrow.addEventListener('click', function(){callback( position ); showButtons();}, true); - buttonShrink.addEventListener('click', function(){callback( position, true ); showButtons();}, true); - - } - - -}); - -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if (!ORYX.Plugins) - ORYX.Plugins = new Object(); - -ORYX.Plugins.RenameShapes = Clazz.extend({ - - facade: undefined, - - construct: function(facade){ - - this.facade = facade; - - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_CANVAS_SCROLL, this.hideField.bind(this)); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_DBLCLICK, this.actOnDBLClick.bind(this)); - this.facade.offer({ - keyCodes: [{ - keyCode: 113, // F2-Key - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.renamePerF2.bind(this) - }); - - - document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEDOWN, this.hide.bind(this), true); - }, - - /** - * This method handles the "F2" key down event. The selected shape are looked - * up and the editing of title/name of it gets started. - */ - renamePerF2 : function() { - var selectedShapes = this.facade.getSelection(); - this.actOnDBLClick(undefined, selectedShapes.first()); - }, - - actOnDBLClick: function(evt, shape){ - - if( !(shape instanceof ORYX.Core.Shape) ){ return; } - - // Destroys the old input, if there is one - this.destroy(); - - // Get all properties which where at least one ref to view is set - var props = shape.getStencil().properties().findAll(function(item){ - return (item.refToView() - && item.refToView().length > 0 - && item.directlyEditable()); - }); - // from these, get all properties where write access are and the type is String or Expression - props = props.findAll(function(item){ return !item.readonly() && (item.type() == ORYX.CONFIG.TYPE_STRING || item.type() == ORYX.CONFIG.TYPE_EXPRESSION || item.type() == ORYX.CONFIG.TYPE_DATASOURCE); }); - - // Get all ref ids - var allRefToViews = props.collect(function(prop){ return prop.refToView(); }).flatten().compact(); - // Get all labels from the shape with the ref ids - var labels = shape.getLabels().findAll(function(label){ return allRefToViews.any(function(toView){ return label.id.endsWith(toView); }); }); - - // If there are no referenced labels --> return - if( labels.length == 0 ){ return; } - - // Define the nearest label - var nearestLabel = labels.length <= 1 ? labels[0] : null; - if( !nearestLabel ){ - nearestLabel = labels.find(function(label){ return label.node == evt.target || label.node == evt.target.parentNode; }); - if( !nearestLabel ){ - - var evtCoord = this.facade.eventCoordinates(evt); - - var additionalIEZoom = 1; - if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { - var ua = navigator.userAgent; - if (ua.indexOf('MSIE') >= 0) { - //IE 10 and below - var zoom = Math.round((screen.deviceXDPI / screen.logicalXDPI) * 100); - if (zoom !== 100) { - additionalIEZoom = zoom / 100 - } - } - } - - if (additionalIEZoom !== 1) { - evtCoord.x = evtCoord.x / additionalIEZoom; - evtCoord.y = evtCoord.y / additionalIEZoom; - } - - evtCoord.y += $("editor-header").clientHeight - $("canvasSection").scrollTop - 5; - if (FLOWABLE.HEADER_CONFIG.showAppTitle == false) - { - evtCoord.y += 61; - } - - evtCoord.x -= $("canvasSection").scrollLeft; - - var trans = this.facade.getCanvas().rootNode.lastChild.getScreenCTM(); - evtCoord.x *= trans.a; - evtCoord.y *= trans.d; - - var diff = labels.collect(function(label){ - var center = this.getCenterPosition( label.node ); - var len = Math.sqrt( Math.pow(center.x - evtCoord.x, 2) + Math.pow(center.y - evtCoord.y, 2)); - return {diff: len, label: label}; - }.bind(this)); - - diff.sort(function(a, b){ return a.diff > b.diff; }); - - nearestLabel = diff[0].label; - - } - } - // Get the particular property for the label - var prop = props.find(function(item){ return item.refToView().any(function(toView){ return nearestLabel.id == shape.id + toView; });}); - - // Get the center position from the nearest label - var width = Math.min(Math.max(100, shape.bounds.width()), 200); - var center = this.getCenterPosition( nearestLabel.node, shape ); - center.x -= (width/2); - var propId = prop.prefix() + "-" + prop.id(); - var textInput = document.createElement("textarea"); - textInput.id = 'shapeTextInput'; - textInput.style.position = 'absolute'; - textInput.style.width = width + 'px'; - textInput.style.left = (center.x < 10) ? 10 : center.x + 'px'; - textInput.style.top = (center.y - 15) + 'px'; - textInput.className = 'x-form-textarea x-form-field x_form_text_set_absolute'; - textInput.value = shape.properties.get(propId); - this.oldValueText = shape.properties.get(propId); - document.getElementById('canvasSection').appendChild(textInput); - this.shownTextField = textInput; - - - // Value change listener needs to be defined now since we reference it in the text field - this.updateValueFunction = function(newValue, oldValue) { - var currentEl = shape; - var facade = this.facade; - - if (oldValue != newValue) { - // Implement the specific command for property change - var commandClass = ORYX.Core.Command.extend({ - construct: function(){ - this.el = currentEl; - this.propId = propId; - this.oldValue = oldValue; - this.newValue = newValue; - this.facade = facade; - }, - execute: function(){ - this.el.setProperty(this.propId, this.newValue); - //this.el.update(); - this.facade.setSelection([this.el]); - this.facade.getCanvas().update(); - this.facade.updateSelection(); - }, - rollback: function(){ - this.el.setProperty(this.propId, this.oldValue); - //this.el.update(); - this.facade.setSelection([this.el]); - this.facade.getCanvas().update(); - this.facade.updateSelection(); - } - }); - // Instantiated the class - var command = new commandClass(); - - // Execute the command - this.facade.executeCommands([command]); - } - }.bind(this); - - jQuery("#shapeTextInput").focus(); - - jQuery("#shapeTextInput").autogrow(); - - // Disable the keydown in the editor (that when hitting the delete button, the shapes not get deleted) - this.facade.disableEvent(ORYX.CONFIG.EVENT_KEYDOWN); - - }, - - getCenterPosition: function(svgNode, shape){ - - if (!svgNode) { return {x:0, y:0}; } - - var scale = this.facade.getCanvas().node.getScreenCTM(); - var absoluteXY = shape.bounds.upperLeft(); - - var hasParent = true; - var searchShape = shape; - while (hasParent) - { - if (searchShape.getParentShape().getStencil().idWithoutNs() === 'BPMNDiagram' || searchShape.getParentShape().getStencil().idWithoutNs() === 'CMMNDiagram' || searchShape.getParentShape().getStencil().idWithoutNs() === 'DMNDiagram') - { - hasParent = false; - } - else - { - var parentXY = searchShape.getParentShape().bounds.upperLeft(); - absoluteXY.x += parentXY.x; - absoluteXY.y += parentXY.y; - searchShape = searchShape.getParentShape(); - } - } - - var center = shape.bounds.midPoint(); - center.x += absoluteXY.x + scale.e; - center.y += absoluteXY.y + scale.f; - - center.x *= scale.a; - center.y *= scale.d; - - var additionalIEZoom = 1; - if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { - var ua = navigator.userAgent; - if (ua.indexOf('MSIE') >= 0) { - //IE 10 and below - var zoom = Math.round((screen.deviceXDPI / screen.logicalXDPI) * 100); - if (zoom !== 100) { - additionalIEZoom = zoom / 100 - } - } - } - - if (additionalIEZoom === 1) { - center.y = center.y - jQuery("#canvasSection").offset().top + 5; - center.x -= jQuery("#canvasSection").offset().left; - - } else { - var canvasOffsetLeft = jQuery("#canvasSection").offset().left; - var canvasScrollLeft = jQuery("#canvasSection").scrollLeft(); - var canvasScrollTop = jQuery("#canvasSection").scrollTop(); - - var offset = scale.e - (canvasOffsetLeft * additionalIEZoom); - var additionaloffset = 0; - if (offset > 10) { - additionaloffset = (offset / additionalIEZoom) - offset; - } - center.y = center.y - (jQuery("#canvasSection").offset().top * additionalIEZoom) + 5 + ((canvasScrollTop * additionalIEZoom) - canvasScrollTop); - center.x = center.x - (canvasOffsetLeft * additionalIEZoom) + additionaloffset + ((canvasScrollLeft * additionalIEZoom) - canvasScrollLeft); - } - - - return center; - }, - - hide: function(e){ - if (this.shownTextField && (!e || e.target !== this.shownTextField)) { - var newValue = this.shownTextField.value; - if (newValue !== this.oldValueText) - { - this.updateValueFunction(newValue, this.oldValueText); - } - this.destroy(); - } - }, - - hideField: function(e){ - if (this.shownTextField) { - this.destroy(); - } - }, - - destroy: function(e){ - var textInputComp = jQuery("#shapeTextInput"); - if( textInputComp ){ - textInputComp.remove(); - delete this.shownTextField; - - this.facade.enableEvent(ORYX.CONFIG.EVENT_KEYDOWN); - } - } -}); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!ORYX.Plugins) - ORYX.Plugins = new Object(); - -/** - * Supports EPCs by offering a syntax check and export and import ability.. - * - * - */ -ORYX.Plugins.ProcessLink = Clazz.extend({ - - facade: undefined, - - /** - * Offers the plugin functionality: - * - */ - construct: function(facade) { - - this.facade = facade; - - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_PROPERTY_CHANGED, this.propertyChanged.bind(this) ); - - }, - - - /** - * - * @param {Object} option - */ - propertyChanged: function( option, node){ - - if( option.name !== "oryx-refuri" || !node instanceof ORYX.Core.Node ){ return } - - - if( option.value && option.value.length > 0 && option.value != "undefined"){ - - this.show( node, option.value ); - - } else { - - this.hide( node ); - - } - - }, - - /** - * Shows the Link for a particular shape with a specific url - * - * @param {Object} shape - * @param {Object} url - */ - show: function( shape, url){ - - - // Generate the svg-representation of a link - var link = ORYX.Editor.graft("http://www.w3.org/2000/svg", null , - [ 'a', - {'target': '_blank'}, - ['path', - { "stroke-width": 1.0, "stroke":"#00DD00", "fill": "#00AA00", "d": "M3,3 l0,-2.5 l7.5,0 l0,-2.5 l7.5,4.5 l-7.5,3.5 l0,-2.5 l-8,0", "line-captions": "round"} - ] - ]); - - var link = ORYX.Editor.graft("http://www.w3.org/2000/svg", null , - [ 'a', - {'target': '_blank'}, - ['path', { "style": "fill:#92BFFC;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72", "d": "M0 1.44 L0 15.05 L11.91 15.05 L11.91 5.98 L7.37 1.44 L0 1.44 Z"}], - ['path', { "style": "stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72;fill:none;", "transform": "translate(7.5, -8.5)", "d": "M0 10.51 L0 15.05 L4.54 15.05"}], - ['path', { "style": "fill:#f28226;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72", "transform": "translate(-3, -1)", "d": "M0 8.81 L0 13.06 L5.95 13.06 L5.95 15.05 A50.2313 50.2313 -175.57 0 0 10.77 11.08 A49.9128 49.9128 -1.28 0 0 5.95 6.54 L5.95 8.81 L0 8.81 Z"}], - ]); - - /* - * - * [ 'a', - {'target': '_blank'}, - ['path', { "style": "fill:none;stroke-width:0.5px; stroke:#000000", "d": "M7,4 l0,2"}], - ['path', { "style": "fill:none;stroke-width:0.5px; stroke:#000000", "d": "M4,8 l-2,0 l0,6"}], - ['path', { "style": "fill:none;stroke-width:0.5px; stroke:#000000", "d": "M10,8 l2,0 l0,6"}], - ['rect', { "style": "fill:#96ff96;stroke:#000000;stroke-width:1", "width": 6, "height": 4, "x": 4, "y": 0}], - ['rect', { "style": "fill:#ffafff;stroke:#000000;stroke-width:1", "width": 6, "height": 4, "x": 4, "y": 6}], - ['rect', { "style": "fill:#96ff96;stroke:#000000;stroke-width:1", "width": 6, "height": 4, "x": 0, "y": 12}], - ['rect', { "style": "fill:#96ff96;stroke:#000000;stroke-width:1", "width": 6, "height": 4, "x": 8, "y": 12}], - ['rect', { "style": "fill:none;stroke:none;pointer-events:all", "width": 14, "height": 16, "x": 0, "y": 0}] - ]); - */ - - // Set the link with the special namespace - link.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", url); - - - // Shows the link in the overlay - this.facade.raiseEvent({ - type: ORYX.CONFIG.EVENT_OVERLAY_SHOW, - id: "arissupport.urlref_" + shape.id, - shapes: [shape], - node: link, - nodePosition: "SE" - }); - - }, - - /** - * Hides the Link for a particular shape - * - * @param {Object} shape - */ - hide: function( shape ){ - - this.facade.raiseEvent({ - type: ORYX.CONFIG.EVENT_OVERLAY_HIDE, - id: "arissupport.urlref_" + shape.id - }); - - } -});/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -Array.prototype.insertFrom = function(from, to){ - to = Math.max(0, to); - from = Math.min( Math.max(0, from), this.length-1 ); - - var el = this[from]; - var old = this.without(el); - var newA = old.slice(0, to); - newA.push(el); - if(old.length > to ){ - newA = newA.concat(old.slice(to)) - }; - return newA; -} - -if(!ORYX.Plugins) - ORYX.Plugins = new Object(); - -ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({ - - facade: undefined, - - construct: function(facade) { - this.facade = facade; - - // Z-Ordering - /** Hide for SIGNAVIO - - this.facade.offer({ - 'name':ORYX.I18N.Arrangement.btf, - 'functionality': this.setZLevel.bind(this, this.setToTop), - 'group': ORYX.I18N.Arrangement.groupZ, - 'icon': ORYX.PATH + "images/shape_move_front.png", - 'description': ORYX.I18N.Arrangement.btfDesc, - 'index': 1, - 'minShape': 1}); - - this.facade.offer({ - 'name':ORYX.I18N.Arrangement.btb, - 'functionality': this.setZLevel.bind(this, this.setToBack), - 'group': ORYX.I18N.Arrangement.groupZ, - 'icon': ORYX.PATH + "images/shape_move_back.png", - 'description': ORYX.I18N.Arrangement.btbDesc, - 'index': 2, - 'minShape': 1}); - - this.facade.offer({ - 'name':ORYX.I18N.Arrangement.bf, - 'functionality': this.setZLevel.bind(this, this.setForward), - 'group': ORYX.I18N.Arrangement.groupZ, - 'icon': ORYX.PATH + "images/shape_move_forwards.png", - 'description': ORYX.I18N.Arrangement.bfDesc, - 'index': 3, - 'minShape': 1}); - - this.facade.offer({ - 'name':ORYX.I18N.Arrangement.bb, - 'functionality': this.setZLevel.bind(this, this.setBackward), - 'group': ORYX.I18N.Arrangement.groupZ, - 'icon': ORYX.PATH + "images/shape_move_backwards.png", - 'description': ORYX.I18N.Arrangement.bbDesc, - 'index': 4, - 'minShape': 1}); - - // Aligment - this.facade.offer({ - 'name':ORYX.I18N.Arrangement.ab, - 'functionality': this.alignShapes.bind(this, [ORYX.CONFIG.EDITOR_ALIGN_BOTTOM]), - 'group': ORYX.I18N.Arrangement.groupA, - 'icon': ORYX.PATH + "images/shape_align_bottom.png", - 'description': ORYX.I18N.Arrangement.abDesc, - 'index': 1, - 'minShape': 2}); - - - - this.facade.offer({ - 'name':ORYX.I18N.Arrangement.at, - 'functionality': this.alignShapes.bind(this, [ORYX.CONFIG.EDITOR_ALIGN_TOP]), - 'group': ORYX.I18N.Arrangement.groupA, - 'icon': ORYX.PATH + "images/shape_align_top.png", - 'description': ORYX.I18N.Arrangement.atDesc, - 'index': 3, - 'minShape': 2}); - - this.facade.offer({ - 'name':ORYX.I18N.Arrangement.al, - 'functionality': this.alignShapes.bind(this, [ORYX.CONFIG.EDITOR_ALIGN_LEFT]), - 'group': ORYX.I18N.Arrangement.groupA, - 'icon': ORYX.PATH + "images/shape_align_left.png", - 'description': ORYX.I18N.Arrangement.alDesc, - 'index': 4, - 'minShape': 2}); - - this.facade.offer({ - 'name':ORYX.I18N.Arrangement.ar, - 'functionality': this.alignShapes.bind(this, [ORYX.CONFIG.EDITOR_ALIGN_RIGHT]), - 'group': ORYX.I18N.Arrangement.groupA, - 'icon': ORYX.PATH + "images/shape_align_right.png", - 'description': ORYX.I18N.Arrangement.arDesc, - 'index': 6, - 'minShape': 2}); - - **/ - - this.facade.offer({ - 'name':ORYX.I18N.Arrangement.am, - 'functionality': this.alignShapes.bind(this, [ORYX.CONFIG.EDITOR_ALIGN_MIDDLE]), - 'group': ORYX.I18N.Arrangement.groupA, - 'icon': ORYX.PATH + "images/shape_align_middle.png", - 'description': ORYX.I18N.Arrangement.amDesc, - 'index': 1, - 'minShape': 2}); - - this.facade.offer({ - 'name':ORYX.I18N.Arrangement.ac, - 'functionality': this.alignShapes.bind(this, [ORYX.CONFIG.EDITOR_ALIGN_CENTER]), - 'group': ORYX.I18N.Arrangement.groupA, - 'icon': ORYX.PATH + "images/shape_align_center.png", - 'description': ORYX.I18N.Arrangement.acDesc, - 'index': 2, - 'minShape': 2}); - - - this.facade.offer({ - 'name':ORYX.I18N.Arrangement.as, - 'functionality': this.alignShapes.bind(this, [ORYX.CONFIG.EDITOR_ALIGN_SIZE]), - 'group': ORYX.I18N.Arrangement.groupA, - 'icon': ORYX.PATH + "images/shape_align_size.png", - 'description': ORYX.I18N.Arrangement.asDesc, - 'index': 3, - 'minShape': 2}); - - - - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_TOP, this.setZLevel.bind(this, this.setToTop) ); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_BACK, this.setZLevel.bind(this, this.setToBack) ); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_FORWARD, this.setZLevel.bind(this, this.setForward) ); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_BACKWARD, this.setZLevel.bind(this, this.setBackward) ); - - - }, - - onSelectionChanged: function(elemnt){ - var selection = this.facade.getSelection(); - if (selection.length === 1 && selection[0] instanceof ORYX.Core.Edge) { - this.setToTop(selection); - } - }, - - setZLevel:function(callback, event){ - - //Command-Pattern for dragging one docker - var zLevelCommand = ORYX.Core.Command.extend({ - construct: function(callback, elements, facade){ - this.callback = callback; - this.elements = elements; - // For redo, the previous elements get stored - this.elAndIndex = elements.map(function(el){ return {el:el, previous:el.parent.children[el.parent.children.indexOf(el)-1]} }) - this.facade = facade; - }, - execute: function(){ - - // Call the defined z-order callback with the elements - this.callback( this.elements ) - this.facade.setSelection( this.elements ) - }, - rollback: function(){ - - // Sort all elements on the index of there containment - var sortedEl = this.elAndIndex.sortBy( function( el ) { - var value = el.el; - var t = $A(value.node.parentNode.childNodes); - return t.indexOf(value.node); - }); - - // Every element get setted back bevor the old previous element - for(var i=0; i maxSize.width) { - newBounds.a.x = shape.bounds.upperLeft().x - - (maxSize.width - shape.bounds.width())/2; - - newBounds.b.x = shape.bounds.lowerRight().x + (maxSize.width - shape.bounds.width())/2 - } - - /* If the new height of shape exceeds the maximum height, set height value to maximum. */ - if(this.maxHeight > maxSize.height) { - newBounds.a.y = shape.bounds.upperLeft().y - - (maxSize.height - shape.bounds.height())/2; - - newBounds.b.y = shape.bounds.lowerRight().y + (maxSize.height - shape.bounds.height())/2 - } - - /* set bounds of shape */ - shape.bounds.set(newBounds); - - }, - execute: function(){ - // align each shape according to the way that was specified. - this.elements.each(function(shape, index) { - this.orgPos[index] = shape.bounds.upperLeft(); - - var relBounds = this.bounds.clone(); - var newCoordinates; - if (shape.parent && !(shape.parent instanceof ORYX.Core.Canvas) ) { - var upL = shape.parent.absoluteBounds().upperLeft(); - relBounds.moveBy(-upL.x, -upL.y); - } - - switch (this.way) { - // align the shapes in the requested way. - case ORYX.CONFIG.EDITOR_ALIGN_BOTTOM: - newCoordinates = { - x: shape.bounds.upperLeft().x, - y: relBounds.b.y - shape.bounds.height() - }; break; - - case ORYX.CONFIG.EDITOR_ALIGN_MIDDLE: - newCoordinates = { - x: shape.bounds.upperLeft().x, - y: (relBounds.a.y + relBounds.b.y - shape.bounds.height()) / 2 - }; break; - - case ORYX.CONFIG.EDITOR_ALIGN_TOP: - newCoordinates = { - x: shape.bounds.upperLeft().x, - y: relBounds.a.y - }; break; - - case ORYX.CONFIG.EDITOR_ALIGN_LEFT: - newCoordinates = { - x: relBounds.a.x, - y: shape.bounds.upperLeft().y - }; break; - - case ORYX.CONFIG.EDITOR_ALIGN_CENTER: - newCoordinates = { - x: (relBounds.a.x + relBounds.b.x - shape.bounds.width()) / 2, - y: shape.bounds.upperLeft().y - }; break; - - case ORYX.CONFIG.EDITOR_ALIGN_RIGHT: - newCoordinates = { - x: relBounds.b.x - shape.bounds.width(), - y: shape.bounds.upperLeft().y - }; break; - - case ORYX.CONFIG.EDITOR_ALIGN_SIZE: - if(shape.isResizable) { - this.orgPos[index] = {a: shape.bounds.upperLeft(), b: shape.bounds.lowerRight()}; - this.setBounds(shape, shape.maximumSize); - } - break; - } - - if (newCoordinates){ - var offset = { - x: shape.bounds.upperLeft().x - newCoordinates.x, - y: shape.bounds.upperLeft().y - newCoordinates.y - } - // Set the new position - shape.bounds.moveTo(newCoordinates); - this.plugin.layoutEdges(shape, shape.getAllDockedShapes(),offset); - //shape.update() - } - }.bind(this)); - - //this.facade.getCanvas().update(); - //this.facade.updateSelection(); - }, - rollback: function(){ - this.elements.each(function(shape, index) { - if (this.way == ORYX.CONFIG.EDITOR_ALIGN_SIZE) { - if(shape.isResizable) {shape.bounds.set(this.orgPos[index]);} - } else {shape.bounds.moveTo(this.orgPos[index]);} - }.bind(this)); - - //this.facade.getCanvas().update(); - //this.facade.updateSelection(); - } - }) - - var command = new commandClass(elements, bounds, maxHeight, maxWidth, parseInt(way), this); - - this.facade.executeCommands([command]); - } -});/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if (!ORYX.Plugins) - ORYX.Plugins = new Object(); - -ORYX.Plugins.Save = Clazz.extend({ - - facade: undefined, - - processURI: undefined, - - changeSymbol : "*", - - construct: function(facade){ - this.facade = facade; - - document.addEventListener("keydown", function(e){ - if (e.ctrlKey&&e.keyCode === 83){ - Event.stop(e); - } - }, false); - - window.onbeforeunload = this.onUnLoad.bind(this); - - this.changeDifference = 0; - - // Register on event for executing commands --> store all commands in a stack - // --> Execute - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_UNDO_EXECUTE, function(){ this.changeDifference++; this.updateTitle(); }.bind(this) ); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_EXECUTE_COMMANDS, function(){ this.changeDifference++; this.updateTitle(); }.bind(this) ); - // --> Saved from other places in the editor - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_SAVED, function(){ this.changeDifference = 0; this.updateTitle(); }.bind(this) ); - - // --> Rollback - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_UNDO_ROLLBACK, function(){ this.changeDifference--; this.updateTitle(); }.bind(this) ); - - //TODO very critical for load time performance!!! - //this.serializedDOM = DataManager.__persistDOM(this.facade); - - this.hasChanges = this._hasChanges.bind(this); - }, - - updateTitle: function(){ - - var value = window.document.title || document.getElementsByTagName("title")[0].childNodes[0].nodeValue; - - if (this.changeDifference === 0 && value.startsWith(this.changeSymbol)){ - window.document.title = value.slice(1); - } else if (this.changeDifference !== 0 && !value.startsWith(this.changeSymbol)){ - window.document.title = this.changeSymbol + "" + value; - } - }, - - _hasChanges: function() { - return this.changeDifference !== 0 || (this.facade.getModelMetaData()['new'] && this.facade.getCanvas().getChildShapes().size() > 0); - }, - - onUnLoad: function(){ - if(this._hasChanges()) { - return ORYX.I18N.Save.unsavedData; - } - } -}); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!ORYX.Plugins) - ORYX.Plugins = new Object(); - -ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({ - - /** - * Constructor - * @param {Object} Facade: The Facade of the Editor - */ - construct: function(facade) { - this.facade = facade; - - // Initialize variables - this.currentShapes = []; // Current selected Shapes - //this.pluginsData = []; // Available Plugins - this.toMoveShapes = []; // Shapes there will be moved - this.distPoints = []; // Distance Points for Snap on Grid - this.isResizing = false; // Flag: If there was currently resized - this.dragEnable = false; // Flag: If Dragging is enabled - this.dragIntialized = false; // Flag: If the Dragging is initialized - this.edgesMovable = true; // Flag: If an edge is docked it is not movable - this.offSetPosition = {x: 0, y: 0}; // Offset of the Dragging - this.faktorXY = {x: 1, y: 1}; // The Current Zoom-Faktor - this.containmentParentNode; // the current future parent node for the dragged shapes - this.isAddingAllowed = false; // flag, if adding current selected shapes to containmentParentNode is allowed - this.isAttachingAllowed = false; // flag, if attaching to the current shape is allowed - - this.callbackMouseMove = this.handleMouseMove.bind(this); - this.callbackMouseUp = this.handleMouseUp.bind(this); - - // Get the SVG-Containernode - var containerNode = this.facade.getCanvas().getSvgContainer(); - - // Create the Selected Rectangle in the SVG - this.selectedRect = new ORYX.Plugins.SelectedRect(containerNode); - - // Show grid line if enabled - if (ORYX.CONFIG.SHOW_GRIDLINE) { - this.vLine = new ORYX.Plugins.GridLine(containerNode, ORYX.Plugins.GridLine.DIR_VERTICAL); - this.hLine = new ORYX.Plugins.GridLine(containerNode, ORYX.Plugins.GridLine.DIR_HORIZONTAL); - } - - // Get a HTML-ContainerNode - containerNode = this.facade.getCanvas().getHTMLContainer(); - - this.scrollNode = this.facade.getCanvas().rootNode.parentNode.parentNode; - - // Create the southeastern button for resizing - this.resizerSE = new ORYX.Plugins.Resizer(containerNode, "southeast", this.facade); - this.resizerSE.registerOnResize(this.onResize.bind(this)); // register the resize callback - this.resizerSE.registerOnResizeEnd(this.onResizeEnd.bind(this)); // register the resize end callback - this.resizerSE.registerOnResizeStart(this.onResizeStart.bind(this)); // register the resize start callback - - // Create the northwestern button for resizing - this.resizerNW = new ORYX.Plugins.Resizer(containerNode, "northwest", this.facade); - this.resizerNW.registerOnResize(this.onResize.bind(this)); // register the resize callback - this.resizerNW.registerOnResizeEnd(this.onResizeEnd.bind(this)); // register the resize end callback - this.resizerNW.registerOnResizeStart(this.onResizeStart.bind(this)); // register the resize start callback - - // For the Drag and Drop - // Register on MouseDown-Event on a Shape - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_MOUSEDOWN, this.handleMouseDown.bind(this)); - }, - - /** - * On Mouse Down - * - */ - handleMouseDown: function(event, uiObj) { - // If the selection Bounds not intialized and the uiObj is not member of current selectio - // then return - if(!this.dragBounds || !this.currentShapes.member(uiObj) || !this.toMoveShapes.length) {return;}; - - // Start Dragging - this.dragEnable = true; - this.dragIntialized = true; - this.edgesMovable = true; - - // Calculate the current zoom factor - var a = this.facade.getCanvas().node.getScreenCTM(); - this.faktorXY.x = a.a; - this.faktorXY.y = a.d; - - var eventX = Event.pointerX(event); - var eventY = Event.pointerY(event); - - // Set the offset position of dragging - var upL = this.dragBounds.upperLeft(); - this.offSetPosition = { - x: eventX - (upL.x * this.faktorXY.x), - y: eventY - (upL.y * this.faktorXY.y)}; - - this.offsetScroll = {x:this.scrollNode.scrollLeft,y:this.scrollNode.scrollTop}; - - // Register on Global Mouse-MOVE Event - document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.callbackMouseMove, false); - // Register on Global Mouse-UP Event - document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this.callbackMouseUp, true); - - return; - }, - - /** - * On Key Mouse Up - * - */ - handleMouseUp: function(event) { - - //disable containment highlighting - this.facade.raiseEvent({ - type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, - highlightId:"dragdropresize.contain" - }); - - this.facade.raiseEvent({ - type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, - highlightId:"dragdropresize.attached" - }); - - // If Dragging is finished - if(this.dragEnable) { - - // and update the current selection - if(!this.dragIntialized) { - - // Do Method after Dragging - this.afterDrag(); - - // Check if the Shape is allowed to dock to the other Shape - if ( this.isAttachingAllowed && - this.toMoveShapes.length == 1 && this.toMoveShapes[0] instanceof ORYX.Core.Node && - this.toMoveShapes[0].dockers.length > 0) { - - // Get the position and the docker - var position = this.facade.eventCoordinates( event ); - var docker = this.toMoveShapes[0].dockers[0]; - - - - //Command-Pattern for dragging several Shapes - var dockCommand = ORYX.Core.Command.extend({ - construct: function(docker, position, newDockedShape, facade){ - this.docker = docker; - this.newPosition = position; - this.newDockedShape = newDockedShape; - this.newParent = newDockedShape.parent || facade.getCanvas(); - this.oldPosition = docker.parent.bounds.center(); - this.oldDockedShape = docker.getDockedShape(); - this.oldParent = docker.parent.parent || facade.getCanvas(); - this.facade = facade; - - if( this.oldDockedShape ){ - this.oldPosition = docker.parent.absoluteBounds().center(); - } - - }, - execute: function(){ - this.dock( this.newDockedShape, this.newParent, this.newPosition ); - - // Raise Event for having the docked shape on top of the other shape - this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_ARRANGEMENT_TOP, excludeCommand: true}) - }, - rollback: function(){ - this.dock( this.oldDockedShape, this.oldParent, this.oldPosition ); - }, - dock:function( toDockShape, parent, pos ){ - // Add to the same parent Shape - parent.add( this.docker.parent ) - - - // Set the Docker to the new Shape - this.docker.setDockedShape( undefined ); - this.docker.bounds.centerMoveTo( pos ) - this.docker.setDockedShape( toDockShape ); - //this.docker.update(); - - this.facade.setSelection( [this.docker.parent] ); - this.facade.getCanvas().update(); - this.facade.updateSelection(); - - - } - }); - - // Instanziate the dockCommand - var commands = [new dockCommand(docker, position, this.containmentParentNode, this.facade)]; - this.facade.executeCommands(commands); - - - // Check if adding is allowed to the other Shape - } else if( this.isAddingAllowed ) { - - - // Refresh all Shapes --> Set the new Bounds - this.refreshSelectedShapes(); - - } - - this.facade.updateSelection(); - - //this.currentShapes.each(function(shape) {shape.update()}) - // Raise Event: Dragging is finished - this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_DRAGDROP_END}); - } - - if (this.vLine) - this.vLine.hide(); - if (this.hLine) - this.hLine.hide(); - } - - // Disable - this.dragEnable = false; - - - // UnRegister on Global Mouse-UP/-Move Event - document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this.callbackMouseUp, true); - document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.callbackMouseMove, false); - - return; - }, - - /** - * On Key Mouse Move - * - */ - handleMouseMove: function(event) { - // If dragging is not enabled, go return - if(!this.dragEnable) { return }; - // If Dragging is initialized - if(this.dragIntialized) { - // Raise Event: Drag will be started - this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_DRAGDROP_START}); - this.dragIntialized = false; - - // And hide the resizers and the highlighting - this.resizerSE.hide(); - this.resizerNW.hide(); - - // if only edges are selected, containmentParentNode must be the canvas - this._onlyEdges = this.currentShapes.all(function(currentShape) { - return (currentShape instanceof ORYX.Core.Edge); - }); - - // Do method before Drag - this.beforeDrag(); - - this._currentUnderlyingNodes = []; - - } - - - // Calculate the new position - var position = { - x: Event.pointerX(event) - this.offSetPosition.x, - y: Event.pointerY(event) - this.offSetPosition.y} - - position.x -= this.offsetScroll.x - this.scrollNode.scrollLeft; - position.y -= this.offsetScroll.y - this.scrollNode.scrollTop; - - // If not the Control-Key are pressed - var modifierKeyPressed = event.shiftKey || event.ctrlKey; - if(ORYX.CONFIG.GRID_ENABLED && !modifierKeyPressed) { - // Snap the current position to the nearest Snap-Point - position = this.snapToGrid(position); - } else { - if (this.vLine) - this.vLine.hide(); - if (this.hLine) - this.hLine.hide(); - } - - // Adjust the point by the zoom faktor - position.x /= this.faktorXY.x; - position.y /= this.faktorXY.y; - - // Set that the position is not lower than zero - position.x = Math.max( 0 , position.x) - position.y = Math.max( 0 , position.y) - - // Set that the position is not bigger than the canvas - var c = this.facade.getCanvas(); - position.x = Math.min( c.bounds.width() - this.dragBounds.width(), position.x) - position.y = Math.min( c.bounds.height() - this.dragBounds.height(), position.y) - - - // Drag this bounds - this.dragBounds.moveTo(position); - - // Update all selected shapes and the selection rectangle - //this.refreshSelectedShapes(); - this.resizeRectangle(this.dragBounds); - - this.isAttachingAllowed = false; - - //check, if a node can be added to the underlying node - var eventCoordinates = this.facade.eventCoordinates(event); - - var additionalIEZoom = 1; - if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { - var ua = navigator.userAgent; - if (ua.indexOf('MSIE') >= 0) { - //IE 10 and below - var zoom = Math.round((screen.deviceXDPI / screen.logicalXDPI) * 100); - if (zoom !== 100) { - additionalIEZoom = zoom / 100 - } - } - } - - if (additionalIEZoom !== 1) { - eventCoordinates.x = eventCoordinates.x / additionalIEZoom; - eventCoordinates.y = eventCoordinates.y / additionalIEZoom; - } - - var underlyingNodes = $A(this.facade.getCanvas().getAbstractShapesAtPosition(eventCoordinates)); - - var checkIfAttachable = this.toMoveShapes.length == 1 && this.toMoveShapes[0] instanceof ORYX.Core.Node && this.toMoveShapes[0].dockers.length > 0 - checkIfAttachable = checkIfAttachable && underlyingNodes.length != 1 - - - if (!checkIfAttachable && - underlyingNodes.length === this._currentUnderlyingNodes.length && - underlyingNodes.all(function(node, index){return this._currentUnderlyingNodes[index] === node}.bind(this))) { - - return - - } else if(this._onlyEdges) { - - this.isAddingAllowed = true; - this.containmentParentNode = this.facade.getCanvas(); - - } else { - - /* Check the containment and connection rules */ - var options = { - event : event, - underlyingNodes : underlyingNodes, - checkIfAttachable : checkIfAttachable - }; - this.checkRules(options); - - } - - this._currentUnderlyingNodes = underlyingNodes.reverse(); - - //visualize the containment result - if( this.isAttachingAllowed ) { - - this.facade.raiseEvent({ - type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW, - highlightId: "dragdropresize.attached", - elements: [this.containmentParentNode], - style: ORYX.CONFIG.SELECTION_HIGHLIGHT_STYLE_RECTANGLE, - color: ORYX.CONFIG.SELECTION_VALID_COLOR - }); - - } else { - - this.facade.raiseEvent({ - type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, - highlightId:"dragdropresize.attached" - }); - } - - if( !this.isAttachingAllowed ){ - if( this.isAddingAllowed ) { - - this.facade.raiseEvent({ - type:ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW, - highlightId:"dragdropresize.contain", - elements:[this.containmentParentNode], - color: ORYX.CONFIG.SELECTION_VALID_COLOR - }); - - } else { - - this.facade.raiseEvent({ - type:ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW, - highlightId:"dragdropresize.contain", - elements:[this.containmentParentNode], - color: ORYX.CONFIG.SELECTION_INVALID_COLOR - }); - - } - } else { - this.facade.raiseEvent({ - type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, - highlightId:"dragdropresize.contain" - }); - } - - // Stop the Event - //Event.stop(event); - return; - }, - -// /** -// * Rollbacks the docked shape of an edge, if the edge is not movable. -// */ -// redockEdges: function() { -// this._undockedEdgesCommand.dockers.each(function(el){ -// el.docker.setDockedShape(el.dockedShape); -// el.docker.setReferencePoint(el.refPoint); -// }) -// }, - - /** - * Checks the containment and connection rules for the selected shapes. - */ - checkRules : function(options) { - var event = options.event; - var underlyingNodes = options.underlyingNodes; - var checkIfAttachable = options.checkIfAttachable; - var noEdges = options.noEdges; - - //get underlying node that is not the same than one of the currently selected shapes or - // a child of one of the selected shapes with the highest z Order. - // The result is a shape or the canvas - this.containmentParentNode = underlyingNodes.reverse().find((function(node) { - return (node instanceof ORYX.Core.Canvas) || - (((node instanceof ORYX.Core.Node) || ((node instanceof ORYX.Core.Edge) && !noEdges)) - && (!(this.currentShapes.member(node) || - this.currentShapes.any(function(shape) { - return (shape.children.length > 0 && shape.getChildNodes(true).member(node)); - })))); - }).bind(this)); - - if( checkIfAttachable ){ - - this.isAttachingAllowed = this.facade.getRules().canConnect({ - sourceShape: this.containmentParentNode, - edgeShape: this.toMoveShapes[0], - targetShape: this.toMoveShapes[0] - }); - - if ( this.isAttachingAllowed ) { - var point = this.facade.eventCoordinates(event); - this.isAttachingAllowed = this.containmentParentNode.isPointOverOffset( point.x, point.y ); - } - } - - if( !this.isAttachingAllowed ){ - //check all selected shapes, if they can be added to containmentParentNode - this.isAddingAllowed = this.toMoveShapes.all((function(currentShape) { - if(currentShape instanceof ORYX.Core.Edge || - currentShape instanceof ORYX.Core.Controls.Docker || - this.containmentParentNode === currentShape.parent) { - return true; - } else if(this.containmentParentNode !== currentShape) { - - if(!(this.containmentParentNode instanceof ORYX.Core.Edge) || !noEdges) { - - if(this.facade.getRules().canContain({containingShape:this.containmentParentNode, - containedShape:currentShape})) { - return true; - } - } - } - return false; - }).bind(this)); - } - - if(!this.isAttachingAllowed && !this.isAddingAllowed && - (this.containmentParentNode instanceof ORYX.Core.Edge)) { - options.noEdges = true; - options.underlyingNodes.reverse(); - this.checkRules(options); - } - }, - - /** - * Redraw the selected Shapes. - * - */ - refreshSelectedShapes: function() { - // If the selection bounds not initialized, return - if(!this.dragBounds) {return} - - // Calculate the offset between the bounds and the old bounds - var upL = this.dragBounds.upperLeft(); - var oldUpL = this.oldDragBounds.upperLeft(); - var offset = { - x: upL.x - oldUpL.x, - y: upL.y - oldUpL.y }; - - // Instanciate the dragCommand - var commands = [new ORYX.Core.Command.Move(this.toMoveShapes, offset, this.containmentParentNode, this.currentShapes, this)]; - // If the undocked edges command is setted, add this command - if( this._undockedEdgesCommand instanceof ORYX.Core.Command ){ - commands.unshift( this._undockedEdgesCommand ); - } - // Execute the commands - this.facade.executeCommands( commands ); - - // copy the bounds to the old bounds - if( this.dragBounds ) - this.oldDragBounds = this.dragBounds.clone(); - - }, - - /** - * Callback for Resize - * - */ - onResize: function(bounds) { - // If the selection bounds not initialized, return - if(!this.dragBounds) {return} - - this.dragBounds = bounds; - this.isResizing = true; - - // Update the rectangle - this.resizeRectangle(this.dragBounds); - }, - - onResizeStart: function() { - this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_RESIZE_START}); - }, - - onResizeEnd: function() { - - if (!(this.currentShapes instanceof Array)||this.currentShapes.length<=0) { - return; - } - - // If Resizing finished, the Shapes will be resize - if(this.isResizing) { - - var commandClass = ORYX.Core.Command.extend({ - construct: function(shape, newBounds, plugin){ - this.shape = shape; - this.oldBounds = shape.bounds.clone(); - this.newBounds = newBounds; - this.plugin = plugin; - }, - execute: function(){ - this.shape.bounds.set(this.newBounds.a, this.newBounds.b); - this.update(this.getOffset(this.oldBounds, this.newBounds)); - - }, - rollback: function(){ - this.shape.bounds.set(this.oldBounds.a, this.oldBounds.b); - this.update(this.getOffset(this.newBounds, this.oldBounds)) - }, - - getOffset:function(b1, b2){ - return { - x: b2.a.x - b1.a.x, - y: b2.a.y - b1.a.y, - xs: b2.width()/b1.width(), - ys: b2.height()/b1.height() - } - }, - update:function(offset){ - this.shape.getLabels().each(function(label) { - label.changed(); - }); - - var allEdges = [].concat(this.shape.getIncomingShapes()) - .concat(this.shape.getOutgoingShapes()) - // Remove all edges which are included in the selection from the list - .findAll(function(r){ return r instanceof ORYX.Core.Edge }.bind(this)) - - this.plugin.layoutEdges(this.shape, allEdges, offset); - - this.plugin.facade.setSelection([this.shape]); - this.plugin.facade.getCanvas().update(); - this.plugin.facade.updateSelection(); - } - }); - - var bounds = this.dragBounds.clone(); - var shape = this.currentShapes[0]; - - if(shape.parent) { - var parentPosition = shape.parent.absoluteXY(); - bounds.moveBy(-parentPosition.x, -parentPosition.y); - } - - var command = new commandClass(shape, bounds, this); - - this.facade.executeCommands([command]); - - this.isResizing = false; - - this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_RESIZE_END}); - } - }, - - - /** - * Prepare the Dragging - * - */ - beforeDrag: function(){ - - var undockEdgeCommand = ORYX.Core.Command.extend({ - construct: function(moveShapes){ - this.dockers = moveShapes.collect(function(shape){ return shape instanceof ORYX.Core.Controls.Docker ? {docker:shape, dockedShape:shape.getDockedShape(), refPoint:shape.referencePoint} : undefined }).compact(); - }, - execute: function(){ - this.dockers.each(function(el){ - el.docker.setDockedShape(undefined); - }) - }, - rollback: function(){ - this.dockers.each(function(el){ - el.docker.setDockedShape(el.dockedShape); - el.docker.setReferencePoint(el.refPoint); - //el.docker.update(); - }) - } - }); - - this._undockedEdgesCommand = new undockEdgeCommand( this.toMoveShapes ); - this._undockedEdgesCommand.execute(); - - }, - - hideAllLabels: function(shape) { - - // Hide all labels from the shape - shape.getLabels().each(function(label) { - label.hide(); - }); - // Hide all labels from docked shapes - shape.getAllDockedShapes().each(function(dockedShape) { - var labels = dockedShape.getLabels(); - if(labels.length > 0) { - labels.each(function(label) { - label.hide(); - }); - } - }); - - // Do this recursive for all child shapes - // EXP-NICO use getShapes - shape.getChildren().each((function(value) { - if(value instanceof ORYX.Core.Shape) - this.hideAllLabels(value); - }).bind(this)); - }, - - /** - * Finished the Dragging - * - */ - afterDrag: function(){ - - }, - - /** - * Show all Labels at these shape - * - */ - showAllLabels: function(shape) { - - // Show the label of these shape - //shape.getLabels().each(function(label) { - for(var i=0; i 0) { - labels.each(function(label) { - label.show(); - }); - } - }//); - - // Do this recursive - //shape.children.each((function(value) { - for(var i=0; i 2 && hasF && hasL){ - this.toMoveShapes = this.toMoveShapes.concat(dks.findAll(function(el,index){ return index > 0 && index < dks.length-1})); - } - - }).bind(this)); - - // Calculate the new area-bounds of the selection - var newBounds = undefined; - this.toMoveShapes.each(function(value) { - var shape = value; - if(value instanceof ORYX.Core.Controls.Docker) { - /* Get the Shape */ - shape = value.parent; - } - - if(!newBounds){ - newBounds = shape.absoluteBounds(); - } - else { - newBounds.include(shape.absoluteBounds()); - } - }.bind(this)); - - if(!newBounds){ - elements.each(function(value){ - if(!newBounds) { - newBounds = value.absoluteBounds(); - } else { - newBounds.include(value.absoluteBounds()); - } - }); - } - - // Set the new bounds - this.dragBounds = newBounds; - this.oldDragBounds = newBounds.clone(); - - // Update and show the rectangle - this.resizeRectangle(newBounds); - this.selectedRect.show(); - - // Show the resize button, if there is only one element and this is resizeable - if(elements.length == 1 && elements[0].isResizable) { - var aspectRatio = elements[0].getStencil().fixedAspectRatio() ? elements[0].bounds.width() / elements[0].bounds.height() : undefined; - this.resizerSE.setBounds(this.dragBounds, elements[0].minimumSize, elements[0].maximumSize, aspectRatio); - this.resizerSE.show(); - this.resizerNW.setBounds(this.dragBounds, elements[0].minimumSize, elements[0].maximumSize, aspectRatio); - this.resizerNW.show(); - } else { - this.resizerSE.setBounds(undefined); - this.resizerNW.setBounds(undefined); - } - - // If Snap-To-Grid is enabled, the Snap-Point will be calculate - if(ORYX.CONFIG.GRID_ENABLED) { - - // Reset all points - this.distPoints = []; - - if (this.distPointTimeout) - window.clearTimeout(this.distPointTimeout) - - this.distPointTimeout = window.setTimeout(function(){ - // Get all the shapes, there will consider at snapping - // Consider only those elements who shares the same parent element - var distShapes = this.facade.getCanvas().getChildShapes(true).findAll(function(value){ - var parentShape = value.parent; - while(parentShape){ - if(elements.member(parentShape)) return false; - parentShape = parentShape.parent - } - return true; - }) - - // The current selection will delete from this array - //elements.each(function(shape) { - // distShapes = distShapes.without(shape); - //}); - - // For all these shapes - distShapes.each((function(value) { - if(!(value instanceof ORYX.Core.Edge)) { - var ul = value.absoluteXY(); - var width = value.bounds.width(); - var height = value.bounds.height(); - - // Add the upperLeft, center and lowerRight - Point to the distancePoints - this.distPoints.push({ - ul: { - x: ul.x, - y: ul.y - }, - c: { - x: ul.x + (width / 2), - y: ul.y + (height / 2) - }, - lr: { - x: ul.x + width, - y: ul.y + height - } - }); - } - }).bind(this)); - - }.bind(this), 10) - - - } - } - }, - - /** - * Adjust an Point to the Snap Points - * - */ - snapToGrid: function(position) { - - // Get the current Bounds - var bounds = this.dragBounds; - - var point = {}; - - var ulThres = 6; - var cThres = 10; - var lrThres = 6; - - var scale = this.vLine ? this.vLine.getScale() : 1; - - var ul = { x: (position.x/scale), y: (position.y/scale)}; - var c = { x: (position.x/scale) + (bounds.width()/2), y: (position.y/scale) + (bounds.height()/2)}; - var lr = { x: (position.x/scale) + (bounds.width()), y: (position.y/scale) + (bounds.height())}; - - var offsetX, offsetY; - var gridX, gridY; - - // For each distant point - this.distPoints.each(function(value) { - - var x, y, gx, gy; - if (Math.abs(value.c.x-c.x) < cThres){ - x = value.c.x-c.x; - gx = value.c.x; - }/* else if (Math.abs(value.ul.x-ul.x) < ulThres){ - x = value.ul.x-ul.x; - gx = value.ul.x; - } else if (Math.abs(value.lr.x-lr.x) < lrThres){ - x = value.lr.x-lr.x; - gx = value.lr.x; - } */ - - - if (Math.abs(value.c.y-c.y) < cThres){ - y = value.c.y-c.y; - gy = value.c.y; - }/* else if (Math.abs(value.ul.y-ul.y) < ulThres){ - y = value.ul.y-ul.y; - gy = value.ul.y; - } else if (Math.abs(value.lr.y-lr.y) < lrThres){ - y = value.lr.y-lr.y; - gy = value.lr.y; - } */ - - if (x !== undefined) { - offsetX = offsetX === undefined ? x : (Math.abs(x) < Math.abs(offsetX) ? x : offsetX); - if (offsetX === x) - gridX = gx; - } - - if (y !== undefined) { - offsetY = offsetY === undefined ? y : (Math.abs(y) < Math.abs(offsetY) ? y : offsetY); - if (offsetY === y) - gridY = gy; - } - }); - - - if (offsetX !== undefined) { - ul.x += offsetX; - ul.x *= scale; - if (this.vLine&&gridX) - this.vLine.update(gridX); - } else { - ul.x = (position.x - (position.x % (ORYX.CONFIG.GRID_DISTANCE/2))); - if (this.vLine) - this.vLine.hide() - } - - if (offsetY !== undefined) { - ul.y += offsetY; - ul.y *= scale; - if (this.hLine&&gridY) - this.hLine.update(gridY); - } else { - ul.y = (position.y - (position.y % (ORYX.CONFIG.GRID_DISTANCE/2))); - if (this.hLine) - this.hLine.hide(); - } - - return ul; - }, - - showGridLine: function(){ - - }, - - - /** - * Redraw of the Rectangle of the SelectedArea - * @param {Object} bounds - */ - resizeRectangle: function(bounds) { - // Resize the Rectangle - this.selectedRect.resize(bounds); - } - -}); - - -ORYX.Plugins.SelectedRect = Clazz.extend({ - - construct: function(parentId) { - - this.parentId = parentId; - - this.node = ORYX.Editor.graft("http://www.w3.org/2000/svg", $(parentId), - ['g']); - - this.dashedArea = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.node, - ['rect', {x: 0, y: 0, - 'stroke-width': 1, stroke: '#777777', fill: 'none', - 'stroke-dasharray': '2,2', - 'pointer-events': 'none'}]); - - this.hide(); - - }, - - hide: function() { - this.node.setAttributeNS(null, 'display', 'none'); - }, - - show: function() { - this.node.setAttributeNS(null, 'display', ''); - }, - - resize: function(bounds) { - var upL = bounds.upperLeft(); - - var padding = ORYX.CONFIG.SELECTED_AREA_PADDING; - - this.dashedArea.setAttributeNS(null, 'width', bounds.width() + 2*padding); - this.dashedArea.setAttributeNS(null, 'height', bounds.height() + 2*padding); - this.node.setAttributeNS(null, 'transform', "translate("+ (upL.x - padding) +", "+ (upL.y - padding) +")"); - } - - -}); - - - -ORYX.Plugins.GridLine = Clazz.extend({ - - construct: function(parentId, direction) { - - if (ORYX.Plugins.GridLine.DIR_HORIZONTAL !== direction && ORYX.Plugins.GridLine.DIR_VERTICAL !== direction) { - direction = ORYX.Plugins.GridLine.DIR_HORIZONTAL - } - - - this.parent = $(parentId); - this.direction = direction; - this.node = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.parent, - ['g']); - - this.line = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.node, - ['path', { - 'stroke-width': 1, stroke: 'silver', fill: 'none', - 'stroke-dasharray': '5,5', - 'pointer-events': 'none'}]); - - this.hide(); - - }, - - hide: function() { - this.node.setAttributeNS(null, 'display', 'none'); - }, - - show: function() { - this.node.setAttributeNS(null, 'display', ''); - }, - - getScale: function(){ - try { - return this.parent.parentNode.transform.baseVal.getItem(0).matrix.a; - } catch(e) { - return 1; - } - }, - - update: function(pos) { - - if (this.direction === ORYX.Plugins.GridLine.DIR_HORIZONTAL) { - var y = pos instanceof Object ? pos.y : pos; - var cWidth = this.parent.parentNode.parentNode.width.baseVal.value/this.getScale(); - this.line.setAttributeNS(null, 'd', 'M 0 '+y+ ' L '+cWidth+' '+y); - } else { - var x = pos instanceof Object ? pos.x : pos; - var cHeight = this.parent.parentNode.parentNode.height.baseVal.value/this.getScale(); - this.line.setAttributeNS(null, 'd', 'M'+x+ ' 0 L '+x+' '+cHeight); - } - - this.show(); - } - - -}); - -ORYX.Plugins.GridLine.DIR_HORIZONTAL = "hor"; -ORYX.Plugins.GridLine.DIR_VERTICAL = "ver"; - -ORYX.Plugins.Resizer = Clazz.extend({ - - construct: function(parentId, orientation, facade) { - - this.parentId = parentId; - this.orientation = orientation; - this.facade = facade; - - this.node = ORYX.Editor.graft("http://www.w3.org/1999/xhtml", $('canvasSection'), - ['div', {'class': 'resizer_'+ this.orientation, style:'left:0px; top:0px;position:absolute;'}]); - - this.node.addEventListener(ORYX.CONFIG.EVENT_MOUSEDOWN, this.handleMouseDown.bind(this), true); - document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this.handleMouseUp.bind(this), true); - document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.handleMouseMove.bind(this), false); - - this.dragEnable = false; - this.offSetPosition = {x: 0, y: 0}; - this.bounds = undefined; - - this.canvasNode = this.facade.getCanvas().node; - - this.minSize = undefined; - this.maxSize = undefined; - - this.aspectRatio = undefined; - - this.resizeCallbacks = []; - this.resizeStartCallbacks = []; - this.resizeEndCallbacks = []; - this.hide(); - - // Calculate the Offset - this.scrollNode = this.node.parentNode.parentNode.parentNode; - - }, - - handleMouseDown: function(event) { - this.dragEnable = true; - - this.offsetScroll = {x:this.scrollNode.scrollLeft,y:this.scrollNode.scrollTop}; - - this.offSetPosition = { - x: Event.pointerX(event) - this.position.x, - y: Event.pointerY(event) - this.position.y}; - - this.resizeStartCallbacks.each((function(value) { - value(this.bounds); - }).bind(this)); - - }, - - handleMouseUp: function(event) { - this.dragEnable = false; - this.containmentParentNode = null; - this.resizeEndCallbacks.each((function(value) { - value(this.bounds); - }).bind(this)); - - }, - - handleMouseMove: function(event) { - if(!this.dragEnable) { return } - - if(event.shiftKey || event.ctrlKey) { - this.aspectRatio = this.bounds.width() / this.bounds.height(); - } else { - this.aspectRatio = undefined; - } - - var position = { - x: Event.pointerX(event) - this.offSetPosition.x, - y: Event.pointerY(event) - this.offSetPosition.y}; - - - position.x -= this.offsetScroll.x - this.scrollNode.scrollLeft; - position.y -= this.offsetScroll.y - this.scrollNode.scrollTop; - - position.x = Math.min( position.x, this.facade.getCanvas().bounds.width()); - position.y = Math.min( position.y, this.facade.getCanvas().bounds.height()); - - var offset = { - x: position.x - this.position.x, - y: position.y - this.position.y - }; - - if(this.aspectRatio) { - // fixed aspect ratio - newAspectRatio = (this.bounds.width()+offset.x) / (this.bounds.height()+offset.y); - if(newAspectRatio>this.aspectRatio) { - offset.x = this.aspectRatio * (this.bounds.height()+offset.y) - this.bounds.width(); - } else if(newAspectRatio this.maxSize.width) { - offset.x = -(this.maxSize.width - this.bounds.width()); - if(this.aspectRatio) - offset.y = this.aspectRatio * offset.x; - } - if(this.bounds.width()-offset.x < this.minSize.width) { - offset.x = -(this.minSize.width - this.bounds.width()); - if(this.aspectRatio) - offset.y = this.aspectRatio * offset.x; - } - if(this.bounds.height()-offset.y > this.maxSize.height) { - offset.y = -(this.maxSize.height - this.bounds.height()); - if(this.aspectRatio) - offset.x = offset.y / this.aspectRatio; - } - if(this.bounds.height()-offset.y < this.minSize.height) { - offset.y = -(this.minSize.height - this.bounds.height()); - if(this.aspectRatio) - offset.x = offset.y / this.aspectRatio; - } - - } else { // defaults to southeast - if(this.bounds.width()+offset.x > this.maxSize.width) { - offset.x = this.maxSize.width - this.bounds.width(); - if(this.aspectRatio) - offset.y = this.aspectRatio * offset.x; - } - if(this.bounds.width()+offset.x < this.minSize.width) { - offset.x = this.minSize.width - this.bounds.width(); - if(this.aspectRatio) - offset.y = this.aspectRatio * offset.x; - } - if(this.bounds.height()+offset.y > this.maxSize.height) { - offset.y = this.maxSize.height - this.bounds.height(); - if(this.aspectRatio) - offset.x = offset.y / this.aspectRatio; - } - if(this.bounds.height()+offset.y < this.minSize.height) { - offset.y = this.minSize.height - this.bounds.height(); - if(this.aspectRatio) - offset.x = offset.y / this.aspectRatio; - } - } - - if(this.orientation==="northwest") { - this.bounds.extend({x:-offset.x, y:-offset.y}); - this.bounds.moveBy(offset); - } else { // defaults to southeast - this.bounds.extend(offset); - } - - this.update(); - - this.resizeCallbacks.each((function(value) { - value(this.bounds); - }).bind(this)); - - Event.stop(event); - - }, - - registerOnResizeStart: function(callback) { - if(!this.resizeStartCallbacks.member(callback)) { - this.resizeStartCallbacks.push(callback); - } - }, - - unregisterOnResizeStart: function(callback) { - if(this.resizeStartCallbacks.member(callback)) { - this.resizeStartCallbacks = this.resizeStartCallbacks.without(callback); - } - }, - - registerOnResizeEnd: function(callback) { - if(!this.resizeEndCallbacks.member(callback)) { - this.resizeEndCallbacks.push(callback); - } - }, - - unregisterOnResizeEnd: function(callback) { - if(this.resizeEndCallbacks.member(callback)) { - this.resizeEndCallbacks = this.resizeEndCallbacks.without(callback); - } - }, - - registerOnResize: function(callback) { - if(!this.resizeCallbacks.member(callback)) { - this.resizeCallbacks.push(callback); - } - }, - - unregisterOnResize: function(callback) { - if(this.resizeCallbacks.member(callback)) { - this.resizeCallbacks = this.resizeCallbacks.without(callback); - } - }, - - hide: function() { - this.node.style.display = "none"; - }, - - show: function() { - if(this.bounds) - this.node.style.display = ""; - }, - - setBounds: function(bounds, min, max, aspectRatio) { - this.bounds = bounds; - - if(!min) - min = {width: ORYX.CONFIG.MINIMUM_SIZE, height: ORYX.CONFIG.MINIMUM_SIZE}; - - if(!max) - max = {width: ORYX.CONFIG.MAXIMUM_SIZE, height: ORYX.CONFIG.MAXIMUM_SIZE}; - - this.minSize = min; - this.maxSize = max; - - this.aspectRatio = aspectRatio; - - this.update(); - }, - - update: function() { - if(!this.bounds) { return; } - - var upL = this.bounds.upperLeft(); - - if(this.bounds.width() < this.minSize.width) { this.bounds.set(upL.x, upL.y, upL.x + this.minSize.width, upL.y + this.bounds.height());}; - if(this.bounds.height() < this.minSize.height) { this.bounds.set(upL.x, upL.y, upL.x + this.bounds.width(), upL.y + this.minSize.height);}; - if(this.bounds.width() > this.maxSize.width) { this.bounds.set(upL.x, upL.y, upL.x + this.maxSize.width, upL.y + this.bounds.height());}; - if(this.bounds.height() > this.maxSize.height) { this.bounds.set(upL.x, upL.y, upL.x + this.bounds.width(), upL.y + this.maxSize.height);}; - - var a = this.canvasNode.getScreenCTM(); - - upL.x *= a.a; - upL.y *= a.d; - - var additionalIEZoom = 1; - if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { - var ua = navigator.userAgent; - if (ua.indexOf('MSIE') >= 0) { - //IE 10 and below - var zoom = Math.round((screen.deviceXDPI / screen.logicalXDPI) * 100); - if (zoom !== 100) { - additionalIEZoom = zoom / 100 - } - } - } - - if (additionalIEZoom === 1) { - upL.y = upL.y - jQuery("#canvasSection").offset().top + a.f; - upL.x = upL.x - jQuery("#canvasSection").offset().left + a.e; - - } else { - var canvasOffsetLeft = jQuery("#canvasSection").offset().left; - var canvasScrollLeft = jQuery("#canvasSection").scrollLeft(); - var canvasScrollTop = jQuery("#canvasSection").scrollTop(); - - var offset = a.e - (canvasOffsetLeft * additionalIEZoom); - var additionaloffset = 0; - if (offset > 10) { - additionaloffset = (offset / additionalIEZoom) - offset; - } - upL.y = upL.y - (jQuery("#canvasSection").offset().top * additionalIEZoom) + ((canvasScrollTop * additionalIEZoom) - canvasScrollTop) + a.f; - upL.x = upL.x - (canvasOffsetLeft * additionalIEZoom) + additionaloffset + ((canvasScrollLeft * additionalIEZoom) - canvasScrollLeft) + a.e; - } - - if(this.orientation==="northwest") { - upL.x -= 13; - upL.y -= 13; - } else { // defaults to southeast - upL.x += (a.a * this.bounds.width()) + 3 ; - upL.y += (a.d * this.bounds.height()) + 3; - } - - this.position = upL; - - this.node.style.left = this.position.x + "px"; - this.node.style.top = this.position.y + "px"; - } -}); - - - -/** - * Implements a Command to move shapes - * - */ -ORYX.Core.Command.Move = ORYX.Core.Command.extend({ - construct: function(moveShapes, offset, parent, selectedShapes, plugin){ - this.moveShapes = moveShapes; - this.selectedShapes = selectedShapes; - this.offset = offset; - this.plugin = plugin; - // Defines the old/new parents for the particular shape - this.newParents = moveShapes.collect(function(t){ return parent || t.parent }); - this.oldParents = moveShapes.collect(function(shape){ return shape.parent }); - this.dockedNodes= moveShapes.findAll(function(shape){ return shape instanceof ORYX.Core.Node && shape.dockers.length == 1}).collect(function(shape){ return {docker:shape.dockers[0], dockedShape:shape.dockers[0].getDockedShape(), refPoint:shape.dockers[0].referencePoint} }); - }, - execute: function(){ - this.dockAllShapes() - // Moves by the offset - this.move( this.offset); - // Addes to the new parents - this.addShapeToParent( this.newParents ); - // Set the selection to the current selection - this.selectCurrentShapes(); - this.plugin.facade.getCanvas().update(); - this.plugin.facade.updateSelection(); - }, - rollback: function(){ - // Moves by the inverted offset - var offset = { x:-this.offset.x, y:-this.offset.y }; - this.move( offset ); - // Addes to the old parents - this.addShapeToParent( this.oldParents ); - this.dockAllShapes(true) - - // Set the selection to the current selection - this.selectCurrentShapes(); - this.plugin.facade.getCanvas().update(); - this.plugin.facade.updateSelection(); - - }, - move:function(offset, doLayout){ - - // Move all Shapes by these offset - for(var i=0; i i || this.moveShapes.indexOf(r.dockers.last().getDockedShape()) > i}.bind(this)) - - for (var j = 0; j < allSameEdges.length; j++) { - for (var k = 1; k < allSameEdges[j].dockers.length-1; k++) { - var docker = allSameEdges[j].dockers[k]; - if (!docker.getDockedShape() && !this.moveShapes.include(docker)) { - docker.bounds.moveBy(offset); - } - } - } - - /*var i=-1; - var nodes = value.getChildShapes(true); - var allEdges = []; - while(++i = 0) { - //IE 10 and below - var zoom = Math.round((screen.deviceXDPI / screen.logicalXDPI) * 100); - if (zoom !== 100) { - additionalIEZoom = zoom / 100 - } - } - } - - if (additionalIEZoom !== 1) { - eventCoordinates.x = eventCoordinates.x / additionalIEZoom; - eventCoordinates.y = eventCoordinates.y / additionalIEZoom; - } - - // Undocked the Docker from current Shape - if ((!this.isStartDocker && !this.isEndDocker) || !this.docker.isDocked()) { - - this.docker.setDockedShape(undefined); - // Set the Docker to the center of the mouse pointer - this.docker.bounds.centerMoveTo(eventCoordinates); - this.dockerParent._update(); - } else { - this.outerDockerNotMoved = true; - } - - var option = {movedCallback: this.dockerMoved.bind(this), upCallback: this.dockerMovedFinished.bind(this)}; - - this.startEventPos = eventCoordinates; - - // Enable the Docker for Drag'n'Drop, give the mouseMove and mouseUp-Callback with - ORYX.Core.UIEnableDrag(event, uiObj, option); - } - }, - - /** - * Docker MouseMove Handler - * - */ - dockerMoved: function(event) { - this.outerDockerNotMoved = false; - var snapToMagnet = undefined; - - if (this.docker.parent) { - if (this.isStartDocker || this.isEndDocker) { - - // Get the EventPosition and all Shapes on these point - var evPos = this.facade.eventCoordinates(event); - - var additionalIEZoom = 1; - if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { - var ua = navigator.userAgent; - if (ua.indexOf('MSIE') >= 0) { - //IE 10 and below - var zoom = Math.round((screen.deviceXDPI / screen.logicalXDPI) * 100); - if (zoom !== 100) { - additionalIEZoom = zoom / 100 - } - } - } - - if (additionalIEZoom !== 1) { - evPos.x = evPos.x / additionalIEZoom; - evPos.y = evPos.y / additionalIEZoom; - } - - if(this.docker.isDocked()) { - /* Only consider start/end dockers if they are moved over a treshold */ - var distanceDockerPointer = - ORYX.Core.Math.getDistancePointToPoint(evPos, this.initialDockerPosition); - if(distanceDockerPointer < this.undockTreshold) { - this.outerDockerNotMoved = true; - return; - } - - /* Undock the docker */ - this.docker.setDockedShape(undefined); - // Set the Docker to the center of the mouse pointer - //this.docker.bounds.centerMoveTo(evPos); - this.dockerParent._update(); - } - - var shapes = this.facade.getCanvas().getAbstractShapesAtPosition(evPos); - - // Get the top level Shape on these, but not the same as Dockers parent - var uiObj = shapes.pop(); - if (this.docker.parent === uiObj) { - uiObj = shapes.pop(); - } - - // If the top level Shape the same as the last Shape, then return - if (this.lastUIObj == uiObj) { - //return; - - // If the top level uiObj instance of Shape and this isn't the parent of the docker - } - else - if (uiObj instanceof ORYX.Core.Shape) { - - // Ask by the StencilSet if the source, the edge and the target valid connections. - if (this.docker.parent instanceof ORYX.Core.Edge) { - - var highestParent = this.getHighestParentBeforeCanvas(uiObj); - /* Ensure that the shape to dock is not a child shape - * of the same edge. - */ - if (highestParent instanceof ORYX.Core.Edge && this.docker.parent === highestParent) - { - this.isValid = false; - this.dockerParent._update(); - return; - } - this.isValid = false; - var curObj = uiObj, orgObj = uiObj; - while (!this.isValid && curObj && !(curObj instanceof ORYX.Core.Canvas)) - { - uiObj = curObj; - this.isValid = this.facade.getRules().canConnect({ - sourceShape: this.dockerSource ? // Is there a docked source - this.dockerSource : // than set this - (this.isStartDocker ? // if not and if the Docker is the start docker - uiObj : // take the last uiObj - undefined), // if not set it to undefined; - edgeShape: this.docker.parent, - targetShape: this.dockerTarget ? // Is there a docked target - this.dockerTarget : // than set this - (this.isEndDocker ? // if not and if the Docker is not the start docker - uiObj : // take the last uiObj - undefined) // if not set it to undefined; - }); - curObj = curObj.parent; - } - - // Reset uiObj if no - // valid parent is found - if (!this.isValid){ - uiObj = orgObj; - } - - } - else { - this.isValid = this.facade.getRules().canConnect({ - sourceShape: uiObj, - edgeShape: this.docker.parent, - targetShape: this.docker.parent - }); - } - - // If there is a lastUIObj, hide the magnets - if (this.lastUIObj) { - this.hideMagnets(this.lastUIObj); - } - - // If there is a valid connection, show the magnets - if (this.isValid) { - this.showMagnets(uiObj); - } - - // Set the Highlight Rectangle by these value - this.showHighlight(uiObj, this.isValid ? this.VALIDCOLOR : this.INVALIDCOLOR); - - // Buffer the current Shape - this.lastUIObj = uiObj; - } - else { - // If there is no top level Shape, then hide the highligting of the last Shape - this.hideHighlight(); - this.lastUIObj ? this.hideMagnets(this.lastUIObj) : null; - this.lastUIObj = undefined; - this.isValid = false; - } - - // Snap to the nearest Magnet - if (this.lastUIObj && this.isValid && !(event.shiftKey || event.ctrlKey)) { - snapToMagnet = this.lastUIObj.magnets.find(function(magnet){ - return magnet.absoluteBounds().isIncluded(evPos); - }); - - if (snapToMagnet) { - this.docker.bounds.centerMoveTo(snapToMagnet.absoluteCenterXY()); - //this.docker.update() - } - } - } - } - // Snap to on the nearest Docker of the same parent - if(!(event.shiftKey || event.ctrlKey) && !snapToMagnet) { - var minOffset = ORYX.CONFIG.DOCKER_SNAP_OFFSET; - var nearestX = minOffset + 1; - var nearestY = minOffset + 1; - - var dockerCenter = this.docker.bounds.center(); - - if (this.docker.parent) { - - this.docker.parent.dockers.each((function(docker){ - if (this.docker == docker) { - return - }; - - var center = docker.referencePoint ? docker.getAbsoluteReferencePoint() : docker.bounds.center(); - - nearestX = Math.abs(nearestX) > Math.abs(center.x - dockerCenter.x) ? center.x - dockerCenter.x : nearestX; - nearestY = Math.abs(nearestY) > Math.abs(center.y - dockerCenter.y) ? center.y - dockerCenter.y : nearestY; - - - }).bind(this)); - - if (Math.abs(nearestX) < minOffset || Math.abs(nearestY) < minOffset) { - nearestX = Math.abs(nearestX) < minOffset ? nearestX : 0; - nearestY = Math.abs(nearestY) < minOffset ? nearestY : 0; - - this.docker.bounds.centerMoveTo(dockerCenter.x + nearestX, dockerCenter.y + nearestY); - //this.docker.update() - } else { - - - - var previous = this.docker.parent.dockers[Math.max(this.docker.parent.dockers.indexOf(this.docker)-1, 0)]; - var next = this.docker.parent.dockers[Math.min(this.docker.parent.dockers.indexOf(this.docker)+1, this.docker.parent.dockers.length-1)]; - - if (previous && next && previous !== this.docker && next !== this.docker){ - var cp = previous.bounds.center(); - var cn = next.bounds.center(); - var cd = this.docker.bounds.center(); - - // Checks if the point is on the line between previous and next - if (ORYX.Core.Math.isPointInLine(cd.x, cd.y, cp.x, cp.y, cn.x, cn.y, 10)) { - // Get the rise - var raise = (Number(cn.y)-Number(cp.y))/(Number(cn.x)-Number(cp.x)); - // Calculate the intersection point - var intersecX = ((cp.y-(cp.x*raise))-(cd.y-(cd.x*(-Math.pow(raise,-1)))))/((-Math.pow(raise,-1))-raise); - var intersecY = (cp.y-(cp.x*raise))+(raise*intersecX); - - if(isNaN(intersecX) || isNaN(intersecY)) {return;} - - this.docker.bounds.centerMoveTo(intersecX, intersecY); - } - } - - } - } - } - //this.facade.getCanvas().update(); - this.dockerParent._update(); - }, - - /** - * Docker MouseUp Handler - * - */ - dockerMovedFinished: function(event) { - - /* Reset to buffered shape selection */ - this.facade.setSelection(this.shapeSelection); - - // Hide the border - this.hideHighlight(); - - // Show all Labels from Docker - this.dockerParent.getLabels().each(function(label){ - label.show(); - //label.update(); - }); - - // If there is a last top level Shape - if(this.lastUIObj && (this.isStartDocker || this.isEndDocker)){ - // If there is a valid connection, the set as a docked Shape to them - if(this.isValid) { - - this.docker.setDockedShape(this.lastUIObj); - - this.facade.raiseEvent({ - type :ORYX.CONFIG.EVENT_DRAGDOCKER_DOCKED, - docker : this.docker, - parent : this.docker.parent, - target : this.lastUIObj - }); - } - - this.hideMagnets(this.lastUIObj); - } - - // Hide the Docker - this.docker.hide(); - - if(this.outerDockerNotMoved) { - // Get the EventPosition and all Shapes on these point - var evPos = this.facade.eventCoordinates(event); - var shapes = this.facade.getCanvas().getAbstractShapesAtPosition(evPos); - - /* Remove edges from selection */ - var shapeWithoutEdges = shapes.findAll(function(node) { - return node instanceof ORYX.Core.Node; - }); - shapes = shapeWithoutEdges.length ? shapeWithoutEdges : shapes; - this.facade.setSelection(shapes); - } else { - //Command-Pattern for dragging one docker - var dragDockerCommand = ORYX.Core.Command.extend({ - construct: function(docker, newPos, oldPos, newDockedShape, oldDockedShape, facade){ - this.docker = docker; - this.index = docker.parent.dockers.indexOf(docker); - this.newPosition = newPos; - this.newDockedShape = newDockedShape; - this.oldPosition = oldPos; - this.oldDockedShape = oldDockedShape; - this.facade = facade; - this.index = docker.parent.dockers.indexOf(docker); - this.shape = docker.parent; - - }, - execute: function(){ - if (!this.docker.parent){ - this.docker = this.shape.dockers[this.index]; - } - this.dock( this.newDockedShape, this.newPosition ); - this.removedDockers = this.shape.removeUnusedDockers(); - this.facade.updateSelection(); - }, - rollback: function(){ - this.dock( this.oldDockedShape, this.oldPosition ); - (this.removedDockers||$H({})).each(function(d){ - this.shape.add(d.value, Number(d.key)); - this.shape._update(true); - }.bind(this)); - this.facade.updateSelection(); - }, - dock:function( toDockShape, pos ){ - // Set the Docker to the new Shape - this.docker.setDockedShape( undefined ); - if( toDockShape ){ - this.docker.setDockedShape( toDockShape ); - this.docker.setReferencePoint( pos ); - //this.docker.update(); - //this.docker.parent._update(); - } else { - this.docker.bounds.centerMoveTo( pos ); - } - - this.facade.getCanvas().update(); - } - }); - - - if (this.docker.parent){ - // Instanziate the dockCommand - var command = new dragDockerCommand(this.docker, this.docker.getDockedShape() ? this.docker.referencePoint : this.docker.bounds.center(), this._commandArg.refPoint, this.docker.getDockedShape(), this._commandArg.dockedShape, this.facade); - this.facade.executeCommands( [command] ); - } - } - - // Update all Shapes - //this.facade.updateSelection(); - - // Undefined all variables - this.docker = undefined; - this.dockerParent = undefined; - this.dockerSource = undefined; - this.dockerTarget = undefined; - this.lastUIObj = undefined; - }, - - /** - * Hide the highlighting - */ - hideHighlight: function() { - this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, highlightId:'validDockedShape'}); - }, - - /** - * Show the highlighting - * - */ - showHighlight: function(uiObj, color) { - - this.facade.raiseEvent({ - type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW, - highlightId:'validDockedShape', - elements: [uiObj], - color: color - }); - }, - - showMagnets: function(uiObj){ - uiObj.magnets.each(function(magnet) { - magnet.show(); - }); - }, - - hideMagnets: function(uiObj){ - uiObj.magnets.each(function(magnet) { - magnet.hide(); - }); - }, - - getHighestParentBeforeCanvas: function(shape) { - if(!(shape instanceof ORYX.Core.Shape)) {return undefined;} - - var parent = shape.parent; - while(parent && !(parent.parent instanceof ORYX.Core.Canvas)) { - parent = parent.parent; - } - - return parent; - } - -}); - -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!ORYX.Plugins) - ORYX.Plugins = new Object(); - -ORYX.Plugins.AddDocker = Clazz.extend({ - - /** - * Constructor - * @param {Object} Facade: The Facade of the Editor - */ - construct: function(facade) { - this.facade = facade; - this.enableAdd = false; - this.enableRemove = false; - - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_MOUSEDOWN, this.handleMouseDown.bind(this)); - }, - - setEnableAdd: function(enable){ - this.enableAdd = enable; - - if(this.enableAdd) { - jQuery("#add-bendpoint-button").addClass('pressed'); - } else { - jQuery("#add-bendpoint-button").removeClass('pressed'); - jQuery("#add-bendpoint-button").blur(); - } - }, - setEnableRemove: function(enable){ - this.enableRemove = enable; - - if(this.enableRemove) { - jQuery("#remove-bendpoint-button").addClass('pressed'); - } else { - jQuery("#remove-bendpoint-button").removeClass('pressed'); - jQuery("#remove-bendpoint-button").blur(); - } - }, - - enabledAdd: function(enable){ - return this.enableAdd; - }, - enabledRemove: function(){ - return this.enableRemove; - }, - - /** - * MouseDown Handler - * - */ - handleMouseDown: function(event, uiObj) { - if (this.enabledAdd() && uiObj instanceof ORYX.Core.Edge) { - this.newDockerCommand({ - edge: uiObj, - position: this.facade.eventCoordinates(event) - }); - this.setEnableAdd(false); - - } else if (this.enabledRemove() && - uiObj instanceof ORYX.Core.Controls.Docker && - uiObj.parent instanceof ORYX.Core.Edge) { - this.newDockerCommand({ - edge: uiObj.parent, - docker: uiObj - }); - this.setEnableRemove(false); - } - document.body.style.cursor = 'default'; - }, - - // Options: edge (required), position (required if add), docker (required if delete) - newDockerCommand: function(options){ - if(!options.edge) - return; - - var commandClass = ORYX.Core.Command.extend({ - construct: function(addEnabled, deleteEnabled, edge, docker, pos, facade){ - this.addEnabled = addEnabled; - this.deleteEnabled = deleteEnabled; - this.edge = edge; - this.docker = docker; - this.pos = pos; - this.facade = facade; - }, - execute: function(){ - if (this.addEnabled) { - if (!this.docker){ - this.docker = this.edge.addDocker(this.pos); - this.index = this.edge.dockers.indexOf(this.docker); - } else { - this.edge.add(this.docker, this.index); - } - } - else if (this.deleteEnabled) { - this.index = this.edge.dockers.indexOf(this.docker); - this.pos = this.docker.bounds.center(); - this.edge.removeDocker(this.docker); - } - this.edge.getLabels().invoke("show"); - this.facade.getCanvas().update(); - this.facade.updateSelection(); - }, - rollback: function(){ - if (this.addEnabled) { - if (this.docker instanceof ORYX.Core.Controls.Docker) { - this.edge.removeDocker(this.docker); - } - } - else if (this.deleteEnabled) { - this.edge.add(this.docker, this.index); - } - this.edge.getLabels().invoke("show"); - this.facade.getCanvas().update(); - this.facade.updateSelection(); - } - }) - - var command = new commandClass(this.enabledAdd(), this.enabledRemove(), options.edge, options.docker, options.position, this.facade); - - this.facade.executeCommands([command]); - } -}); - -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!ORYX.Plugins) - ORYX.Plugins = new Object(); - - ORYX.Plugins.SelectionFrame = Clazz.extend({ - - construct: function(facade) { - this.facade = facade; - - // Register on MouseEvents - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_MOUSEDOWN, this.handleMouseDown.bind(this)); - document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this.handleMouseUp.bind(this), true); - - // Some initiale variables - this.position = {x:0, y:0}; - this.size = {width:0, height:0}; - this.offsetPosition = {x: 0, y: 0}; - - // (Un)Register Mouse-Move Event - this.moveCallback = undefined; - this.offsetScroll = {x:0,y:0}; - // HTML-Node of Selection-Frame - this.node = ORYX.Editor.graft("http://www.w3.org/1999/xhtml", $('canvasSection'), - ['div', {'class':'Oryx_SelectionFrame'}]); - - this.hide(); - }, - - handleMouseDown: function(event, uiObj) { - // If there is the Canvas - if( uiObj instanceof ORYX.Core.Canvas ) { - // Calculate the Offset - var scrollNode = uiObj.rootNode.parentNode.parentNode; - - var a = this.facade.getCanvas().node.getScreenCTM(); - this.offsetPosition = { - x: a.e, - y: a.f - }; - - // Set the new Position - this.setPos({ - x: Event.pointerX(event) - jQuery("#canvasSection").offset().left, - y: Event.pointerY(event) - jQuery("#canvasSection").offset().top + 5 - }); - - // Reset the size - this.resize({width:0, height:0}); - this.moveCallback = this.handleMouseMove.bind(this); - - // Register Mouse-Move Event - document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.moveCallback, false); - - this.offsetScroll = {x:scrollNode.scrollLeft,y:scrollNode.scrollTop}; - - // Show the Frame - this.show(); - } - - Event.stop(event); - }, - - handleMouseUp: function(event) { - // If there was an MouseMoving - if(this.moveCallback) { - // Hide the Frame - this.hide(); - - // Unregister Mouse-Move - document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.moveCallback, false); - - this.moveCallback = undefined; - - var corrSVG = this.facade.getCanvas().node.getScreenCTM(); - - // Calculate the positions of the Frame - var a = { - x: this.size.width > 0 ? this.position.x : this.position.x + this.size.width, - y: this.size.height > 0 ? this.position.y : this.position.y + this.size.height - }; - - var b = { - x: a.x + Math.abs(this.size.width), - y: a.y + Math.abs(this.size.height) - }; - - var additionalIEZoom = 1; - if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { - var ua = navigator.userAgent; - if (ua.indexOf('MSIE') >= 0) { - //IE 10 and below - var zoom = Math.round((screen.deviceXDPI / screen.logicalXDPI) * 100); - if (zoom !== 100) { - additionalIEZoom = zoom / 100 - } - } - } - - if (additionalIEZoom === 1) { - a.x = a.x - (corrSVG.e - jQuery("#canvasSection").offset().left); - a.y = a.y - (corrSVG.f - jQuery("#canvasSection").offset().top); - b.x = b.x - (corrSVG.e - jQuery("#canvasSection").offset().left); - b.y = b.y - (corrSVG.f - jQuery("#canvasSection").offset().top); - - } else { - var canvasOffsetLeft = jQuery("#canvasSection").offset().left; - var canvasScrollLeft = jQuery("#canvasSection").scrollLeft(); - var canvasScrollTop = jQuery("#canvasSection").scrollTop(); - - var offset = a.e - (canvasOffsetLeft * additionalIEZoom); - var additionaloffset = 0; - if (offset > 10) { - additionaloffset = (offset / additionalIEZoom) - offset; - } - - a.x = a.x - (corrSVG.e - (canvasOffsetLeft * additionalIEZoom) + additionaloffset + ((canvasScrollLeft * additionalIEZoom) - canvasScrollLeft)); - a.y = a.y - (corrSVG.f - (jQuery("#canvasSection").offset().top * additionalIEZoom) + ((canvasScrollTop * additionalIEZoom) - canvasScrollTop)); - b.x = b.x - (corrSVG.e - (canvasOffsetLeft * additionalIEZoom) + additionaloffset + ((canvasScrollLeft * additionalIEZoom) - canvasScrollLeft)); - b.y = b.y - (corrSVG.f - (jQuery("#canvasSection").offset().top * additionalIEZoom) + ((canvasScrollTop * additionalIEZoom) - canvasScrollTop)); - } - - - - // Fit to SVG-Coordinates - a.x /= corrSVG.a; a.y /= corrSVG.d; - b.x /= corrSVG.a; b.y /= corrSVG.d; - - // Calculate the elements from the childs of the canvas - var elements = this.facade.getCanvas().getChildShapes(true).findAll(function(value) { - var absBounds = value.absoluteBounds(); - - var bA = absBounds.upperLeft(); - var bB = absBounds.lowerRight(); - - if(bA.x > a.x && bA.y > a.y && bB.x < b.x && bB.y < b.y) - return true; - return false; - }); - - // Set the selection - this.facade.setSelection(elements); - } - }, - - handleMouseMove: function(event) { - // Calculate the size - var size = { - width : Event.pointerX(event) - this.position.x - jQuery("#canvasSection").offset().left, - height : Event.pointerY(event) - this.position.y - jQuery("#canvasSection").offset().top + 5 - }; - - var scrollNode = this.facade.getCanvas().rootNode.parentNode.parentNode; - size.width -= this.offsetScroll.x - scrollNode.scrollLeft; - size.height -= this.offsetScroll.y - scrollNode.scrollTop; - - // Set the size - this.resize(size); - - Event.stop(event); - }, - - hide: function() { - this.node.style.display = "none"; - }, - - show: function() { - this.node.style.display = ""; - }, - - setPos: function(pos) { - // Set the Position - this.node.style.top = pos.y + "px"; - this.node.style.left = pos.x + "px"; - this.position = pos; - }, - - resize: function(size) { - - // Calculate the negative offset - this.setPos(this.position); - this.size = Object.clone(size); - - if(size.width < 0) { - this.node.style.left = (this.position.x + size.width) + "px"; - size.width = - size.width; - } - if(size.height < 0) { - this.node.style.top = (this.position.y + size.height) + "px"; - size.height = - size.height; - } - - // Set the size - this.node.style.width = size.width + "px"; - this.node.style.height = size.height + "px"; - } - -}); - - -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!ORYX.Plugins) - ORYX.Plugins = new Object(); - -ORYX.Plugins.ShapeHighlighting = Clazz.extend({ - - construct: function(facade) { - - this.parentNode = facade.getCanvas().getSvgContainer(); - - // The parent Node - this.node = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.parentNode, - ['g']); - - this.highlightNodes = {}; - - facade.registerOnEvent(ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW, this.setHighlight.bind(this)); - facade.registerOnEvent(ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, this.hideHighlight.bind(this)); - - }, - - setHighlight: function(options) { - if(options && options.highlightId){ - var node = this.highlightNodes[options.highlightId]; - - if(!node){ - node= ORYX.Editor.graft("http://www.w3.org/2000/svg", this.node, - ['path', { - "stroke-width": 2.0, "fill":"none" - }]); - - this.highlightNodes[options.highlightId] = node; - } - - if(options.elements && options.elements.length > 0) { - - this.setAttributesByStyle( node, options ); - this.show(node); - - } else { - - this.hide(node); - - } - - } - }, - - hideHighlight: function(options) { - if(options && options.highlightId && this.highlightNodes[options.highlightId]){ - this.hide(this.highlightNodes[options.highlightId]); - } - }, - - hide: function(node) { - node.setAttributeNS(null, 'display', 'none'); - }, - - show: function(node) { - node.setAttributeNS(null, 'display', ''); - }, - - setAttributesByStyle: function( node, options ){ - - // If the style say, that it should look like a rectangle - if( options.style && options.style == ORYX.CONFIG.SELECTION_HIGHLIGHT_STYLE_RECTANGLE ){ - - // Set like this - var bo = options.elements[0].absoluteBounds(); - - var strWidth = options.strokewidth ? options.strokewidth : ORYX.CONFIG.BORDER_OFFSET - - node.setAttributeNS(null, "d", this.getPathRectangle( bo.a, bo.b , strWidth ) ); - node.setAttributeNS(null, "stroke", options.color ? options.color : ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR); - node.setAttributeNS(null, "stroke-opacity", options.opacity ? options.opacity : 0.2); - node.setAttributeNS(null, "stroke-width", strWidth); - - } else if(options.elements.length == 1 - && options.elements[0] instanceof ORYX.Core.Edge && - options.highlightId != "selection") { - - /* Highlight containment of edge's childs */ - var path = this.getPathEdge(options.elements[0].dockers); - if (path && path.length > 0) - { - node.setAttributeNS(null, "d", path); - } - node.setAttributeNS(null, "stroke", options.color ? options.color : ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR); - node.setAttributeNS(null, "stroke-opacity", options.opacity ? options.opacity : 0.2); - node.setAttributeNS(null, "stroke-width", ORYX.CONFIG.OFFSET_EDGE_BOUNDS); - - }else { - // If not, set just the corners - var path = this.getPathByElements(options.elements); - if (path && path.length > 0) - { - node.setAttributeNS(null, "d", path); - } - node.setAttributeNS(null, "stroke", options.color ? options.color : ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR); - node.setAttributeNS(null, "stroke-opacity", options.opacity ? options.opacity : 1.0); - node.setAttributeNS(null, "stroke-width", options.strokewidth ? options.strokewidth : 2.0); - - } - }, - - getPathByElements: function(elements){ - if(!elements || elements.length <= 0) {return undefined} - - // Get the padding and the size - var padding = ORYX.CONFIG.SELECTED_AREA_PADDING; - - var path = "" - - // Get thru all Elements - elements.each((function(element) { - if(!element) {return} - // Get the absolute Bounds and the two Points - var bounds = element.absoluteBounds(); - bounds.widen(padding) - var a = bounds.upperLeft(); - var b = bounds.lowerRight(); - - path = path + this.getPath(a ,b); - - }).bind(this)); - - return path; - - }, - - getPath: function(a, b){ - - return this.getPathCorners(a, b); - - }, - - getPathCorners: function(a, b){ - - var size = ORYX.CONFIG.SELECTION_HIGHLIGHT_SIZE; - - var path = "" - - // Set: Upper left - path = path + "M" + a.x + " " + (a.y + size) + " l0 -" + size + " l" + size + " 0 "; - // Set: Lower left - path = path + "M" + a.x + " " + (b.y - size) + " l0 " + size + " l" + size + " 0 "; - // Set: Lower right - path = path + "M" + b.x + " " + (b.y - size) + " l0 " + size + " l-" + size + " 0 "; - // Set: Upper right - path = path + "M" + b.x + " " + (a.y + size) + " l0 -" + size + " l-" + size + " 0 "; - - return path; - }, - - getPathRectangle: function(a, b, strokeWidth){ - - var size = ORYX.CONFIG.SELECTION_HIGHLIGHT_SIZE; - - var path = "" - var offset = strokeWidth / 2.0; - - // Set: Upper left - path = path + "M" + (a.x + offset) + " " + (a.y); - path = path + " L" + (a.x + offset) + " " + (b.y - offset); - path = path + " L" + (b.x - offset) + " " + (b.y - offset); - path = path + " L" + (b.x - offset) + " " + (a.y + offset); - path = path + " L" + (a.x + offset) + " " + (a.y + offset); - - return path; - }, - - getPathEdge: function(edgeDockers) { - var length = edgeDockers.length; - var path = "M" + edgeDockers[0].bounds.center().x + " " - + edgeDockers[0].bounds.center().y; - - for(i=1; i 1) { - this.facade.raiseEvent({ - type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW, - highlightId:'selection', - elements: event.elements.without(event.subSelection), - color: ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR, - opacity: !event.subSelection ? this.opacityFull : this.opacityLow - }); - - if(event.subSelection){ - this.facade.raiseEvent({ - type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW, - highlightId:'subselection', - elements: [event.subSelection], - color: ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR, - opacity: this.opacityFull - }); - } else { - this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, highlightId:'subselection'}); - } - - } else { - this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, highlightId:'selection'}); - this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, highlightId:'subselection'}); - } - } -});/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if (!ORYX.Plugins) - ORYX.Plugins = new Object(); - -ORYX.Plugins.Overlay = Clazz.extend({ - - facade: undefined, - - styleNode: undefined, - - construct: function(facade){ - - this.facade = facade; - - this.changes = []; - - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_OVERLAY_SHOW, this.show.bind(this)); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_OVERLAY_HIDE, this.hide.bind(this)); - - this.styleNode = document.createElement('style') - this.styleNode.setAttributeNS(null, 'type', 'text/css') - - document.getElementsByTagName('head')[0].appendChild( this.styleNode ) - - }, - - /** - * Show the overlay for specific nodes - * @param {Object} options - * - * String options.id - MUST - Define the id of the overlay (is needed for the hiding of this overlay) - * ORYX.Core.Shape[] options.shapes - MUST - Define the Shapes for the changes - * attr-name:value options.changes - Defines all the changes which should be shown - * - * - */ - show: function( options ){ - - // Checks if all arguments are available - if( !options || - !options.shapes || !options.shapes instanceof Array || - !options.id || !options.id instanceof String || options.id.length == 0) { - - return - - } - - //if( this.changes[options.id]){ - // this.hide( options ) - //} - - - // Checked if attributes are setted - if( options.attributes ){ - - // FOR EACH - Shape - options.shapes.each(function(el){ - - // Checks if the node is a Shape - if( !el instanceof ORYX.Core.Shape){ return } - - this.setAttributes( el.node , options.attributes ) - - }.bind(this)) - - } - - var isSVG = true - try { - isSVG = options.node && options.node instanceof SVGElement; - } catch(e){} - - // Checks if node is setted and if this is an SVGElement - if ( options.node && isSVG) { - - options["_temps"] = [] - - // FOR EACH - Node - options.shapes.each(function(el, index){ - - // Checks if the node is a Shape - if( !el instanceof ORYX.Core.Shape){ return } - - var _temp = {} - _temp.svg = options.dontCloneNode ? options.node : options.node.cloneNode( true ); - - // Add the svg node to the ORYX-Shape - el.node.firstChild.appendChild( _temp.svg ) - - // If - if (el instanceof ORYX.Core.Edge && !options.nodePosition) { - options['nodePosition'] = "START" - } - - // If the node position is setted, it has to be transformed - if( options.nodePosition ){ - - var b = el.bounds; - var p = options.nodePosition.toUpperCase(); - - // Check the values of START and END - if( el instanceof ORYX.Core.Node && p == "START"){ - p = "NW"; - } else if(el instanceof ORYX.Core.Node && p == "END"){ - p = "SE"; - } else if(el instanceof ORYX.Core.Edge && p == "START"){ - b = el.getDockers().first().bounds - } else if(el instanceof ORYX.Core.Edge && p == "END"){ - b = el.getDockers().last().bounds - } - - // Create a callback for the changing the position - // depending on the position string - _temp.callback = function(){ - - var x = 0; var y = 0; - - if( p == "NW" ){ - // Do Nothing - } else if( p == "N" ) { - x = b.width() / 2; - } else if( p == "NE" ) { - x = b.width(); - } else if( p == "E" ) { - x = b.width(); y = b.height() / 2; - } else if( p == "SE" ) { - x = b.width(); y = b.height(); - } else if( p == "S" ) { - x = b.width() / 2; y = b.height(); - } else if( p == "SW" ) { - y = b.height(); - } else if( p == "W" ) { - y = b.height() / 2; - } else if( p == "START" || p == "END") { - x = b.width() / 2; y = b.height() / 2; - } else { - return - } - - if( el instanceof ORYX.Core.Edge){ - x += b.upperLeft().x ; y += b.upperLeft().y ; - } - - _temp.svg.setAttributeNS(null, "transform", "translate(" + x + ", " + y + ")") - - }.bind(this) - - _temp.element = el; - _temp.callback(); - - b.registerCallback( _temp.callback ); - - } - - - options._temps.push( _temp ) - - }.bind(this)) - - - - } - - - // Store the changes - if( !this.changes[options.id] ){ - this.changes[options.id] = []; - } - - this.changes[options.id].push( options ); - - }, - - /** - * Hide the overlay with the spefic id - * @param {Object} options - */ - hide: function( options ){ - - // Checks if all arguments are available - if( !options || - !options.id || !options.id instanceof String || options.id.length == 0 || - !this.changes[options.id]) { - - return - - } - - - // Delete all added attributes - // FOR EACH - Shape - this.changes[options.id].each(function(option){ - - option.shapes.each(function(el, index){ - - // Checks if the node is a Shape - if( !el instanceof ORYX.Core.Shape){ return } - - this.deleteAttributes( el.node ) - - }.bind(this)); - - - if( option._temps ){ - - option._temps.each(function(tmp){ - // Delete the added Node, if there is one - if( tmp.svg && tmp.svg.parentNode ){ - tmp.svg.parentNode.removeChild( tmp.svg ) - } - - // If - if( tmp.callback && tmp.element){ - // It has to be unregistered from the edge - tmp.element.bounds.unregisterCallback( tmp.callback ) - } - - }.bind(this)) - - } - - - }.bind(this)); - - - this.changes[options.id] = null; - - - }, - - - /** - * Set the given css attributes to that node - * @param {HTMLElement} node - * @param {Object} attributes - */ - setAttributes: function( node, attributes ) { - - - // Get all the childs from ME - var childs = this.getAllChilds( node.firstChild.firstChild ) - - var ids = [] - - // Add all Attributes which have relation to another node in this document and concate the pure id out of it - // This is for example important for the markers of a edge - childs.each(function(e){ ids.push( $A(e.attributes).findAll(function(attr){ return attr.nodeValue.startsWith('url(#')}) )}) - ids = ids.flatten().compact(); - ids = ids.collect(function(s){return s.nodeValue}).uniq(); - ids = ids.collect(function(s){return s.slice(5, s.length-1)}) - - // Add the node ID to the id - ids.unshift( node.id + ' .me') - - var attr = $H(attributes); - var attrValue = attr.toJSON().gsub(',', ';').gsub('"', ''); - var attrMarkerValue = attributes.stroke ? attrValue.slice(0, attrValue.length-1) + "; fill:" + attributes.stroke + ";}" : attrValue; - var attrTextValue; - if( attributes.fill ){ - var copyAttr = Object.clone(attributes); - copyAttr.fill = "black"; - attrTextValue = $H(copyAttr).toJSON().gsub(',', ';').gsub('"', ''); - } - - // Create the CSS-Tags Style out of the ids and the attributes - csstags = ids.collect(function(s, i){return "#" + s + " * " + (!i? attrValue : attrMarkerValue) + "" + (attrTextValue ? " #" + s + " text * " + attrTextValue : "") }) - - // Join all the tags - var s = csstags.join(" ") + "\n" - - // And add to the end of the style tag - this.styleNode.appendChild(document.createTextNode(s)); - - - }, - - /** - * Deletes all attributes which are - * added in a special style sheet for that node - * @param {HTMLElement} node - */ - deleteAttributes: function( node ) { - - // Get all children which contains the node id - var delEl = $A(this.styleNode.childNodes) - .findAll(function(e){ return e.textContent.include( '#' + node.id ) }); - - // Remove all of them - delEl.each(function(el){ - el.parentNode.removeChild(el); - }); - }, - - getAllChilds: function( node ){ - - var childs = $A(node.childNodes) - - $A(node.childNodes).each(function( e ){ - childs.push( this.getAllChilds( e ) ) - }.bind(this)) - - return childs.flatten(); - } - - -}); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if (!ORYX.Plugins) - ORYX.Plugins = new Object(); - -ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({ - - facade: undefined, - - construct: function(facade){ - - this.facade = facade; - this.copyElements = []; - - //this.facade.registerOnEvent(ORYX.CONFIG.EVENT_KEYDOWN, this.keyHandler.bind(this)); - - // SELECT ALL - this.facade.offer({ - keyCodes: [{ - metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL], - keyCode: 65, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.selectAll.bind(this) - }); - - // MOVE LEFT SMALL - this.facade.offer({ - keyCodes: [{ - metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL], - keyCode: ORYX.CONFIG.KEY_CODE_LEFT, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_LEFT, false) - }); - - // MOVE LEFT - this.facade.offer({ - keyCodes: [{ - keyCode: ORYX.CONFIG.KEY_CODE_LEFT, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_LEFT, true) - }); - - // MOVE RIGHT SMALL - this.facade.offer({ - keyCodes: [{ - metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL], - keyCode: ORYX.CONFIG.KEY_CODE_RIGHT, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_RIGHT, false) - }); - - // MOVE RIGHT - this.facade.offer({ - keyCodes: [{ - keyCode: ORYX.CONFIG.KEY_CODE_RIGHT, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_RIGHT, true) - }); - - // MOVE UP SMALL - this.facade.offer({ - keyCodes: [{ - metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL], - keyCode: ORYX.CONFIG.KEY_CODE_UP, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_UP, false) - }); - - // MOVE UP - this.facade.offer({ - keyCodes: [{ - keyCode: ORYX.CONFIG.KEY_CODE_UP, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_UP, true) - }); - - // MOVE DOWN SMALL - this.facade.offer({ - keyCodes: [{ - metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL], - keyCode: ORYX.CONFIG.KEY_CODE_DOWN, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_DOWN, false) - }); - - // MOVE DOWN - this.facade.offer({ - keyCodes: [{ - keyCode: ORYX.CONFIG.KEY_CODE_DOWN, - keyAction: ORYX.CONFIG.KEY_ACTION_DOWN - } - ], - functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_DOWN, true) - }); - - - }, - - /** - * Select all shapes in the editor - * - */ - selectAll: function(e){ - Event.stop(e.event); - this.facade.setSelection(this.facade.getCanvas().getChildShapes(true)) - }, - - move: function(key, far, e) { - - Event.stop(e.event); - - // calculate the distance to move the objects and get the selection. - var distance = far? 20 : 5; - var selection = this.facade.getSelection(); - var currentSelection = this.facade.getSelection(); - var p = {x: 0, y: 0}; - - // switch on the key pressed and populate the point to move by. - switch(key) { - - case ORYX.CONFIG.KEY_CODE_LEFT: - p.x = -1*distance; - break; - case ORYX.CONFIG.KEY_CODE_RIGHT: - p.x = distance; - break; - case ORYX.CONFIG.KEY_CODE_UP: - p.y = -1*distance; - break; - case ORYX.CONFIG.KEY_CODE_DOWN: - p.y = distance; - break; - } - - // move each shape in the selection by the point calculated and update it. - selection = selection.findAll(function(shape){ - // Check if this shape is docked to an shape in the selection - if(shape instanceof ORYX.Core.Node && shape.dockers.length == 1 && selection.include( shape.dockers.first().getDockedShape() )){ - return false - } - - // Check if any of the parent shape is included in the selection - var s = shape.parent; - do{ - if(selection.include(s)){ - return false - } - }while(s = s.parent); - - // Otherwise, return true - return true; - - }); - - /* Edges must not be movable, if only edges are selected and at least - * one of them is docked. - */ - var edgesMovable = true; - var onlyEdgesSelected = selection.all(function(shape) { - if(shape instanceof ORYX.Core.Edge) { - if(shape.isDocked()) { - edgesMovable = false; - } - return true; - } - return false; - }); - - if(onlyEdgesSelected && !edgesMovable) { - /* Abort moving shapes */ - return; - } - - selection = selection.map(function(shape){ - if( shape instanceof ORYX.Core.Node ){ - /*if( shape.dockers.length == 1 ){ - return shape.dockers.first() - } else {*/ - return shape - //} - } else if( shape instanceof ORYX.Core.Edge ) { - - var dockers = shape.dockers; - - if( selection.include( shape.dockers.first().getDockedShape() ) ){ - dockers = dockers.without( shape.dockers.first() ) - } - - if( selection.include( shape.dockers.last().getDockedShape() ) ){ - dockers = dockers.without( shape.dockers.last() ) - } - - return dockers - - } else { - return null - } - - }).flatten().compact(); - - if (selection.size() > 0) { - - //Stop moving at canvas borders - var selectionBounds = [ this.facade.getCanvas().bounds.lowerRight().x, - this.facade.getCanvas().bounds.lowerRight().y, - 0, - 0 ]; - selection.each(function(s) { - selectionBounds[0] = Math.min(selectionBounds[0], s.bounds.upperLeft().x); - selectionBounds[1] = Math.min(selectionBounds[1], s.bounds.upperLeft().y); - selectionBounds[2] = Math.max(selectionBounds[2], s.bounds.lowerRight().x); - selectionBounds[3] = Math.max(selectionBounds[3], s.bounds.lowerRight().y); - }); - if(selectionBounds[0]+p.x < 0) - p.x = -selectionBounds[0]; - if(selectionBounds[1]+p.y < 0) - p.y = -selectionBounds[1]; - if(selectionBounds[2]+p.x > this.facade.getCanvas().bounds.lowerRight().x) - p.x = this.facade.getCanvas().bounds.lowerRight().x - selectionBounds[2]; - if(selectionBounds[3]+p.y > this.facade.getCanvas().bounds.lowerRight().y) - p.y = this.facade.getCanvas().bounds.lowerRight().y - selectionBounds[3]; - - if(p.x!=0 || p.y!=0) { - // Instantiate the moveCommand - var commands = [new ORYX.Core.Command.Move(selection, p, null, currentSelection, this)]; - // Execute the commands - this.facade.executeCommands(commands); - } - - } - }, - - getUndockedCommant: function(shapes){ - - var undockEdgeCommand = ORYX.Core.Command.extend({ - construct: function(moveShapes){ - this.dockers = moveShapes.collect(function(shape){ return shape instanceof ORYX.Core.Controls.Docker ? {docker:shape, dockedShape:shape.getDockedShape(), refPoint:shape.referencePoint} : undefined }).compact(); - }, - execute: function(){ - this.dockers.each(function(el){ - el.docker.setDockedShape(undefined); - }) - }, - rollback: function(){ - this.dockers.each(function(el){ - el.docker.setDockedShape(el.dockedShape); - el.docker.setReferencePoint(el.refPoint); - //el.docker.update(); - }) - } - }); - - command = new undockEdgeCommand( shapes ); - command.execute(); - return command; - }, - -// /** -// * The key handler for this plugin. Every action from the set of cut, copy, -// * paste and delete should be accessible trough simple keyboard shortcuts. -// * This method checks whether any event triggers one of those actions. -// * -// * @param {Object} event The keyboard event that should be analysed for -// * triggering of this plugin. -// */ -// keyHandler: function(event){ -// //TODO document what event.which is. -// -// ORYX.Log.debug("keysMove.js handles a keyEvent."); -// -// // assure we have the current event. -// if (!event) -// event = window.event; -// -// // get the currently pressed key and state of control key. -// var pressedKey = event.which || event.keyCode; -// var ctrlPressed = event.ctrlKey; -// -// // if the key is one of the arrow keys, forward to move and return. -// if ([ORYX.CONFIG.KEY_CODE_LEFT, ORYX.CONFIG.KEY_CODE_RIGHT, -// ORYX.CONFIG.KEY_CODE_UP, ORYX.CONFIG.KEY_CODE_DOWN].include(pressedKey)) { -// -// this.move(pressedKey, !ctrlPressed); -// return; -// } -// -// } - -}); -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!ORYX.Plugins) { ORYX.Plugins = {} } -if(!ORYX.Plugins.Layouter) { ORYX.Plugins.Layouter = {} } - -new function(){ - - /** - * Edge layouter is an implementation to layout an edge - * @class ORYX.Plugins.Layouter.EdgeLayouter - * @author Willi Tscheschner - */ - ORYX.Plugins.Layouter.EdgeLayouter = ORYX.Plugins.AbstractLayouter.extend({ - - /** - * Layout only Edges - */ - layouted : [ "http://b3mn.org/stencilset/bpmn1.1#SequenceFlow", - "http://b3mn.org/stencilset/bpmn1.1#MessageFlow", - "http://b3mn.org/stencilset/timjpdl3#SequenceFlow", - "http://b3mn.org/stencilset/jbpm4#SequenceFlow", - "http://b3mn.org/stencilset/bpmn2.0#MessageFlow", - "http://b3mn.org/stencilset/bpmn2.0#SequenceFlow", - "http://b3mn.org/stencilset/bpmn2.0choreography#MessageFlow", - "http://b3mn.org/stencilset/bpmn2.0choreography#SequenceFlow", - "http://b3mn.org/stencilset/bpmn2.0conversation#ConversationLink", - "http://b3mn.org/stencilset/epc#ControlFlow", - "http://www.signavio.com/stencilsets/processmap#ProcessLink", - "http://www.signavio.com/stencilsets/organigram#connection"], - - /** - * Layout a set on edges - * @param {Object} edges - */ - layout: function(edges){ - edges.each(function(edge){ - this.doLayout(edge) - }.bind(this)) - }, - - /** - * Layout one edge - * @param {Object} edge - */ - doLayout: function(edge){ - // Get from and to node - var from = edge.getIncomingNodes()[0]; - var to = edge.getOutgoingNodes()[0]; - - // Return if one is null - if (!from || !to) { return } - - var positions = this.getPositions(from, to, edge); - - if (positions.length > 0){ - this.setDockers(edge, positions[0].a, positions[0].b); - } - - }, - - /** - * Returns a set on positions which are not containt either - * in the bounds in from or to. - * @param {Object} from Shape where the edge is come from - * @param {Object} to Shape where the edge is leading to - * @param {Object} edge Edge between from and to - */ - getPositions : function(from, to, edge){ - - // Get absolute bounds - var ab = from.absoluteBounds(); - var bb = to.absoluteBounds(); - - // Get center from and to - var a = ab.center(); - var b = bb.center(); - - var am = ab.midPoint(); - var bm = bb.midPoint(); - - // Get first and last reference point - var first = Object.clone(edge.dockers.first().referencePoint); - var last = Object.clone(edge.dockers.last().referencePoint); - // Get the absolute one - var aFirst = edge.dockers.first().getAbsoluteReferencePoint(); - var aLast = edge.dockers.last().getAbsoluteReferencePoint(); - - // IF ------> - // or | - // V - // Do nothing - if (Math.abs(aFirst.x-aLast.x) < 1 || Math.abs(aFirst.y-aLast.y) < 1) { - return [] - } - - // Calc center position, between a and b - // depending on there weight - var m = {} - m.x = a.x < b.x ? - (((b.x - bb.width()/2) - (a.x + ab.width()/2))/2) + (a.x + ab.width()/2): - (((a.x - ab.width()/2) - (b.x + bb.width()/2))/2) + (b.x + bb.width()/2); - - m.y = a.y < b.y ? - (((b.y - bb.height()/2) - (a.y + ab.height()/2))/2) + (a.y + ab.height()/2): - (((a.y - ab.height()/2) - (b.y + bb.height()/2))/2) + (b.y + bb.height()/2); - - - // Enlarge both bounds with 10 - ab.widen(5); // Wide the from less than - bb.widen(20);// the to because of the arrow from the edge - - var positions = []; - var off = this.getOffset.bind(this); - - // Checks ----+ - // | - // V - if (!ab.isIncluded(b.x, a.y)&&!bb.isIncluded(b.x, a.y)) { - positions.push({ - a : {x:b.x+off(last,bm,"x"),y:a.y+off(first,am,"y")}, - z : this.getWeight(from, a.x < b.x ? "r" : "l", to, a.y < b.y ? "t" : "b", edge) - }); - } - - // Checks | - // +---> - if (!ab.isIncluded(a.x, b.y)&&!bb.isIncluded(a.x, b.y)) { - positions.push({ - a : {x:a.x+off(first,am,"x"),y:b.y+off(last,bm,"y")}, - z : this.getWeight(from, a.y < b.y ? "b" : "t", to, a.x < b.x ? "l" : "r", edge) - }); - } - - // Checks --+ - // | - // +---> - if (!ab.isIncluded(m.x, a.y)&&!bb.isIncluded(m.x, b.y)) { - positions.push({ - a : {x:m.x,y:a.y+off(first,am,"y")}, - b : {x:m.x,y:b.y+off(last,bm,"y")}, - z : this.getWeight(from, "r", to, "l", edge, a.x > b.x) - }); - } - - // Checks | - // +---+ - // | - // V - if (!ab.isIncluded(a.x, m.y)&&!bb.isIncluded(b.x, m.y)) { - positions.push({ - a : {x:a.x+off(first,am,"x"),y:m.y}, - b : {x:b.x+off(last,bm,"x"),y:m.y}, - z : this.getWeight(from, "b", to, "t", edge, a.y > b.y) - }); - } - - // Sort DESC of weights - return positions.sort(function(a,b){ return a.z < b.z ? 1 : (a.z == b.z ? -1 : -1)}); - }, - - /** - * Returns a offset for the pos to the center of the bounds - * - * @param {Object} val - * @param {Object} pos2 - * @param {String} dir Direction x|y - */ - getOffset: function(pos, pos2, dir){ - return pos[dir] - pos2[dir]; - }, - - /** - * Returns a value which shows the weight for this configuration - * - * @param {Object} from Shape which is coming from - * @param {String} d1 Direction where is goes - * @param {Object} to Shape which goes to - * @param {String} d2 Direction where it comes to - * @param {Object} edge Edge between from and to - * @param {Boolean} reverse Reverse the direction (e.g. "r" -> "l") - */ - getWeight: function(from, d1, to, d2, edge, reverse){ - - d1 = (d1||"").toLowerCase(); - d2 = (d2||"").toLowerCase(); - - if (!["t","r","b","l"].include(d1)){ d1 = "r"} - if (!["t","r","b","l"].include(d2)){ d1 = "l"} - - // If reverse is set - if (reverse) { - // Reverse d1 and d2 - d1 = d1=="t"?"b":(d1=="r"?"l":(d1=="b"?"t":(d1=="l"?"r":"r"))) - d2 = d2=="t"?"b":(d2=="r"?"l":(d2=="b"?"t":(d2=="l"?"r":"r"))) - } - - - var weight = 0; - // Get rules for from "out" and to "in" - var dr1 = this.facade.getRules().getLayoutingRules(from, edge)["out"]; - var dr2 = this.facade.getRules().getLayoutingRules(to, edge)["in"]; - - var fromWeight = dr1[d1]; - var toWeight = dr2[d2]; - - - /** - * Return a true if the center 1 is in the same direction than center 2 - * @param {Object} direction - * @param {Object} center1 - * @param {Object} center2 - */ - var sameDirection = function(direction, center1, center2){ - switch(direction){ - case "t": return Math.abs(center1.x - center2.x) < 2 && center1.y < center2.y - case "r": return center1.x > center2.x && Math.abs(center1.y - center2.y) < 2 - case "b": return Math.abs(center1.x - center2.x) < 2 && center1.y > center2.y - case "l": return center1.x < center2.x && Math.abs(center1.y - center2.y) < 2 - default: return false; - } - } - - // Check if there are same incoming edges from 'from' - var sameIncomingFrom = from - .getIncomingShapes() - .findAll(function(a){ return a instanceof ORYX.Core.Edge}) - .any(function(e){ - return sameDirection(d1, e.dockers[e.dockers.length-2].bounds.center(), e.dockers.last().bounds.center()); - }); - - // Check if there are same outgoing edges from 'to' - var sameOutgoingTo = to - .getOutgoingShapes() - .findAll(function(a){ return a instanceof ORYX.Core.Edge}) - .any(function(e){ - return sameDirection(d2, e.dockers[1].bounds.center(), e.dockers.first().bounds.center()); - }); - - // If there are equivalent edges, set 0 - //fromWeight = sameIncomingFrom ? 0 : fromWeight; - //toWeight = sameOutgoingTo ? 0 : toWeight; - - // Get the sum of "out" and the direction plus "in" and the direction - return (sameIncomingFrom||sameOutgoingTo?0:fromWeight+toWeight); - }, - - /** - * Removes all current dockers from the node - * (except the start and end) and adds two new - * dockers, on the position a and b. - * @param {Object} edge - * @param {Object} a - * @param {Object} b - */ - setDockers: function(edge, a, b){ - if (!edge){ return } - - // Remove all dockers (implicit, - // start and end dockers will not removed) - edge.dockers.each(function(r){ - edge.removeDocker(r); - }); - - // For a and b (if exists), create - // a new docker and set position - [a, b].compact().each(function(pos){ - var docker = edge.createDocker(undefined, pos); - docker.bounds.centerMoveTo(pos); - }); - - // Update all dockers from the edge - edge.dockers.each(function(docker){ - docker.update() - }) - - // Update edge - //edge.refresh(); - edge._update(true); - - } - }); - - -}() -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!ORYX.Plugins) - ORYX.Plugins = new Object(); - -new function(){ - - ORYX.Plugins.BPMN2_0 = { - - /** - * Constructor - * @param {Object} Facade: The Facade of the Editor - */ - construct: function(facade){ - this.facade = facade; - - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_DRAGDOCKER_DOCKED, this.handleDockerDocked.bind(this)); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_PROPWINDOW_PROP_CHANGED, this.handlePropertyChanged.bind(this)); - this.facade.registerOnEvent('layout.bpmn2_0.pool', this.handleLayoutPool.bind(this)); - this.facade.registerOnEvent('layout.bpmn2_0.subprocess', this.handleSubProcess.bind(this)); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_SHAPEREMOVED, this.handleShapeRemove.bind(this)); - - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADED, this.afterLoad.bind(this)); - - - this.namespace = undefined; - }, - - /** - * Force to update every pool - */ - afterLoad: function(){ - this.facade.getCanvas().getChildNodes().each(function(shape){ - if (shape.getStencil().id().endsWith("Pool")) { - this.handleLayoutPool({ - shape: shape - }); - } - }.bind(this)) - }, - - /** - * If a pool is selected and contains no lane, - * a lane is created automagically - */ - onSelectionChanged: function(event) { - var selection = event.elements; - - if(selection && selection.length === 1) { - var namespace = this.getNamespace(); - var shape = selection[0]; - if(shape.getStencil().idWithoutNs() === "Pool") { - if(shape.getChildNodes().length === 0) { - // create a lane inside the selected pool - var option = { - type:namespace + "Lane", - position:{x:0,y:0}, - namespace:shape.getStencil().namespace(), - parent:shape - }; - this.facade.createShape(option); - this.facade.getCanvas().update(); - this.facade.setSelection([shape]); - } - } - } - - // Preventing selection of all lanes but not the pool - if(selection.any(function(s){ return s instanceof ORYX.Core.Node && s.getStencil().id().endsWith("Lane")})){ - var lanes = selection.findAll(function(s){ - return s instanceof ORYX.Core.Node && s.getStencil().id().endsWith("Lane") - }); - - var pools = []; - var unselectLanes = []; - lanes.each(function(lane){ - pools.push(this.getParentPool(lane)) - }.bind(this)); - - pools = pools.uniq().findAll(function(pool){ - var childLanes = this.getLanes(pool, true); - if (childLanes.all(function(lane){ return lanes.include(lane)})){ - unselectLanes = unselectLanes.concat(childLanes); - return true; - } else if (selection.include(pool) && childLanes.any(function(lane){ return lanes.include(lane)})) { - unselectLanes = unselectLanes.concat(childLanes); - return true; - } else { - return false; - } - }.bind(this)) - - if (unselectLanes.length > 0 && pools.length > 0){ - selection = selection.without.apply(selection, unselectLanes); - selection = selection.concat(pools); - this.facade.setSelection(selection.uniq()); - } - } - }, - - handleShapeRemove: function(option) { - - var sh = option.shape; - var parent = option.parent; - - if (sh instanceof ORYX.Core.Node && sh.getStencil().idWithoutNs() === "Lane" && this.facade.isExecutingCommands()) { - - var pool = this.getParentPool(parent); - if (pool&&pool.parent){ - - var isLeafFn = function(leaf){ - return !leaf.getChildNodes().any(function(r){ return r.getStencil().idWithoutNs() === "Lane"}); - } - - var isLeaf = isLeafFn(sh); - var parentHasMoreLanes = parent.getChildNodes().any(function(r){ return r.getStencil().idWithoutNs() === "Lane"}); - - if (isLeaf && parentHasMoreLanes){ - - var command = new ResizeLanesCommand(sh, parent, pool, this); - this.facade.executeCommands([command]); - - } else if( !isLeaf && - !this.facade.getSelection().any(function(select){ // Find one of the selection, which is a lane and child of "sh" and is a leaf lane - return select instanceof ORYX.Core.Node && select.getStencil().idWithoutNs() === "Lane" && - select.isParent(sh) && isLeafFn(select);})) { - - var Command = ORYX.Core.Command.extend({ - construct: function(shape, facade) { - this.children = shape.getChildNodes(true); - this.facade = facade; - }, - execute: function() { - this.children.each(function(child){ - child.bounds.moveBy(30,0) - }); - //this.facade.getCanvas().update(); - }, - rollback: function() { - this.children.each(function(child){ - child.bounds.moveBy(-30,0) - }) - //this.facade.getCanvas().update(); - } - }); - this.facade.executeCommands([new Command(sh, this.facade)]); - - } else if (isLeaf&&!parentHasMoreLanes&&parent == pool){ - parent.add(sh); - } - } - - } - - }, - - - hashedSubProcesses: {}, - - hashChildShapes: function(shape){ - var children = shape.getChildNodes(); - children.each(function(child){ - if (this.hashedSubProcesses[child.id]){ - this.hashedSubProcesses[child.id] = child.absoluteXY(); - this.hashedSubProcesses[child.id].width = child.bounds.width(); - this.hashedSubProcesses[child.id].height = child.bounds.height(); - this.hashChildShapes(child); - } - }.bind(this)); - }, - - /** - * Handle the layouting of a sub process. - * Mainly to adjust the child dockers of a sub process. - * - */ - handleSubProcess : function(option) { - - var sh = option.shape; - - if (!this.hashedSubProcesses[sh.id]) { - this.hashedSubProcesses[sh.id] = sh.absoluteXY(); - this.hashedSubProcesses[sh.id].width = sh.bounds.width(); - this.hashedSubProcesses[sh.id].height = sh.bounds.height(); - return; - } - - var offset = sh.absoluteXY(); - offset.x -= this.hashedSubProcesses[sh.id].x; - offset.y -= this.hashedSubProcesses[sh.id].y; - - var resized = this.hashedSubProcesses[sh.id].width !== sh.bounds.width() || this.hashedSubProcesses[sh.id].height !== sh.bounds.height(); - - this.hashedSubProcesses[sh.id] = sh.absoluteXY(); - this.hashedSubProcesses[sh.id].width = sh.bounds.width(); - this.hashedSubProcesses[sh.id].height = sh.bounds.height(); - this.hashChildShapes(sh); - - - // Move dockers only if currently is not resizing - if (this.facade.isExecutingCommands()&&!resized) { - this.moveChildDockers(sh, offset); - } - }, - - moveChildDockers: function(shape, offset){ - - if (!offset.x && !offset.y) { - return; - } - - var children = shape.getChildNodes(true); - - // Get all nodes - var dockers = children - // Get all incoming and outgoing edges - .map(function(node){ - return [].concat(node.getIncomingShapes()) - .concat(node.getOutgoingShapes()) - }) - // Flatten all including arrays into one - .flatten() - // Get every edge only once - .uniq() - // Get all dockers - .map(function(edge){ - return edge.dockers.length > 2 ? - edge.dockers.slice(1, edge.dockers.length-1) : - []; - }) - // Flatten the dockers lists - .flatten(); - - var abs = shape.absoluteBounds(); - abs.moveBy(-offset.x, -offset.y) - var obj = {}; - dockers.each(function(docker){ - - if (docker.isChanged){ - return; - } - - var off = Object.clone(offset); - - if (!abs.isIncluded(docker.bounds.center())){ - var index = docker.parent.dockers.indexOf(docker); - var size = docker.parent.dockers.length; - var from = docker.parent.getSource(); - var to = docker.parent.getTarget(); - - var bothAreIncluded = children.include(from) && children.include(to); - - if (!bothAreIncluded){ - var previousIsOver = index !== 0 ? abs.isIncluded(docker.parent.dockers[index-1].bounds.center()) : false; - var nextIsOver = index !== size-1 ? abs.isIncluded(docker.parent.dockers[index+1].bounds.center()) : false; - - if (!previousIsOver && !nextIsOver){ return; } - - var ref = docker.parent.dockers[previousIsOver ? index-1 : index+1]; - if (Math.abs(-Math.abs(ref.bounds.center().x-docker.bounds.center().x)) < 2){ - off.y = 0; - } else if(Math.abs(-Math.abs(ref.bounds.center().y-docker.bounds.center().y)) < 2){ - off.x = 0; - } else { - return; - } - } - - } - - obj[docker.getId()] = { - docker:docker, - offset:off - } - }) - - // Set dockers - this.facade.executeCommands([new ORYX.Core.MoveDockersCommand(obj)]); - - }, - - /** - * DragDocker.Docked Handler - * - */ - handleDockerDocked: function(options) { - var namespace = this.getNamespace(); - - var edge = options.parent; - var edgeSource = options.target; - - if(edge.getStencil().id() === namespace + "SequenceFlow") { - var isGateway = edgeSource.getStencil().groups().find(function(group) { - if(group == "Gateways") - return group; - }); - if(!isGateway && (edge.properties["oryx-conditiontype"] == "Expression")) - // show diamond on edge source - edge.setProperty("oryx-showdiamondmarker", true); - else - // do not show diamond on edge source - edge.setProperty("oryx-showdiamondmarker", false); - - // update edge rendering - //edge.update(); - - this.facade.getCanvas().update(); - } - }, - - /** - * PropertyWindow.PropertyChanged Handler - */ - handlePropertyChanged: function(option) { - var namespace = this.getNamespace(); - - var shapes = option.elements; - var propertyKey = option.key; - var propertyValue = option.value; - - var changed = false; - shapes.each(function(shape){ - if((shape.getStencil().id() === namespace + "SequenceFlow") && - (propertyKey === "oryx-conditiontype")) { - - if(propertyValue != "Expression") - // Do not show the Diamond - shape.setProperty("oryx-showdiamondmarker", false); - else { - var incomingShapes = shape.getIncomingShapes(); - - if(!incomingShapes) { - shape.setProperty("oryx-showdiamondmarker", true); - } - - var incomingGateway = incomingShapes.find(function(aShape) { - var foundGateway = aShape.getStencil().groups().find(function(group) { - if(group == "Gateways") - return group; - }); - if(foundGateway) - return foundGateway; - }); - - if(!incomingGateway) - // show diamond on edge source - shape.setProperty("oryx-showdiamondmarker", true); - else - // do not show diamond - shape.setProperty("oryx-showdiamondmarker", false); - } - - changed = true; - } - }.bind(this)); - - if(changed) {this.facade.getCanvas().update();} - - }, - - hashedPoolPositions : {}, - hashedLaneDepth : {}, - hashedBounds : {}, - hashedPositions: {}, - - /** - * Handler for layouting event 'layout.bpmn2_0.pool' - * @param {Object} event - */ - handleLayoutPool: function(event){ - - - var pool = event.shape; - var selection = this.facade.getSelection(); - var currentShape = selection.include(pool) ? pool : selection.first(); - - currentShape = currentShape || pool; - - this.currentPool = pool; - - // Check if it is a pool or a lane - if (!(currentShape.getStencil().id().endsWith("Pool") || currentShape.getStencil().id().endsWith("Lane"))) { - return; - } - - // Check if the lane is within the pool and is not removed lately - if (currentShape !== pool && !currentShape.isParent(pool) && !this.hashedBounds[pool.id][currentShape.id]){ - return; - } - - - if (!this.hashedBounds[pool.id]) { - this.hashedBounds[pool.id] = {}; - } - - // Find all child lanes - var lanes = this.getLanes(pool); - - if (lanes.length <= 0) { - return - } - - var allLanes = this.getLanes(pool, true), hp; - var considerForDockers = allLanes.clone(); - - var hashedPositions = new Hash(); - allLanes.each(function(lane){ - hashedPositions.set(lane.id, lane.bounds.upperLeft()); - }) - - - - // Show/hide caption regarding the number of lanes - if (lanes.length === 1 && this.getLanes(lanes.first()).length <= 0) { - // TRUE if there is a caption - var caption = lanes.first().properties.get("oryx-name").trim().length > 0; - lanes.first().setProperty("oryx-showcaption", caption); - var rect = lanes.first().node.getElementsByTagName("rect"); - rect[0].setAttributeNS(null, "display", "none"); - } else { - allLanes.invoke("setProperty", "oryx-showcaption", true); - allLanes.each(function(lane){ - var rect = lane.node.getElementsByTagName("rect"); - rect[0].removeAttributeNS(null, "display"); - }) - } - - var deletedLanes = []; - var addedLanes = []; - - // Get all new lanes - var i=-1; - while (++i 0){ - currentShape = addedLanes.first(); - } - - - // Get all deleted lanes - var resourceIds = $H(this.hashedBounds[pool.id]).keys(); - var i=-1; - while (++i 0 || addedLanes.length > 0) { - - if (addedLanes.length === 1 && this.getLanes(addedLanes[0].parent).length === 1){ - // Set height from the pool - height = this.adjustHeight(lanes, addedLanes[0].parent); - } else { - // Set height from the pool - height = this.updateHeight(pool); - } - // Set width from the pool - width = this.adjustWidth(lanes, pool.bounds.width()); - - pool.update(); - } - - /** - * Set width/height depending on the pool - */ - else if (pool == currentShape) { - - if (selection.length === 1 && this.isResized(pool, this.hashedPoolPositions[pool.id])) { - var oldXY = this.hashedPoolPositions[pool.id].upperLeft(); - var xy = pool.bounds.upperLeft(); - var scale = 0; - if (this.shouldScale(pool)){ - var old = this.hashedPoolPositions[pool.id]; - scale = old.height()/pool.bounds.height(); - } - - this.adjustLanes(pool, allLanes, oldXY.x - xy.x, oldXY.y - xy.y, scale); - } - - // Set height from the pool - height = this.adjustHeight(lanes, undefined, pool.bounds.height()); - // Set width from the pool - width = this.adjustWidth(lanes, pool.bounds.width()); - } - - /**‚ - * Set width/height depending on containing lanes - */ - else { - - // Reposition the pool if one shape is selected and the upperleft has changed - if (selection.length === 1 && this.isResized(currentShape, this.hashedBounds[pool.id][currentShape.id])){ - var oldXY = this.hashedBounds[pool.id][currentShape.id].upperLeft(); - var xy = currentShape.absoluteXY(); - x = oldXY.x - xy.x; - y = oldXY.y - xy.y; - - // Adjust all other lanes beneath this lane - if (x||y){ - considerForDockers = considerForDockers.without(currentShape); - this.adjustLanes(pool, this.getAllExcludedLanes(pool, currentShape), x, 0); - } - - // Adjust all child lanes - var childLanes = this.getLanes(currentShape, true); - if (childLanes.length > 0){ - if (this.shouldScale(currentShape)){ - var old = this.hashedBounds[pool.id][currentShape.id]; - var scale = old.height()/currentShape.bounds.height(); - this.adjustLanes(pool, childLanes, x, y, scale); - } else { - this.adjustLanes(pool, childLanes, x, y, 0); - } - } - } - - // Cache all bounds - var changes = allLanes.map(function(lane){ return { - shape: lane, - bounds: lane.bounds.clone() - } }); - - // Get height and adjust child heights - height = this.adjustHeight(lanes, currentShape); - // Check if something has changed and maybe create a command - this.checkForChanges(allLanes, changes); - - // Set width from the current shape - width = this.adjustWidth(lanes, currentShape.bounds.width()+(this.getDepth(currentShape,pool)*30)); - } - - this.setDimensions(pool, width, height, x, y); - - - if (this.facade.isExecutingCommands() && (deletedLanes.length === 0 || addedLanes.length !== 0)){ - // Update all dockers - this.updateDockers(considerForDockers, pool); - - // Check if the order has changed - var poolHashedPositions = this.hashedPositions[pool.id]; - if ( poolHashedPositions && poolHashedPositions.keys().any(function(key, i){ - return (allLanes[i]||{}).id !== key; - })) { - - var LanesHasBeenReordered = ORYX.Core.Command.extend({ - construct: function(originPosition, newPosition, lanes, plugin, poolId) { - this.originPosition = Object.clone(originPosition); - this.newPosition = Object.clone(newPosition); - this.lanes = lanes; - this.plugin = plugin; - this.pool = poolId; - }, - execute: function(){ - if (!this.executed){ - this.executed = true; - this.lanes.each(function(lane){ - if (this.newPosition[lane.id]) - lane.bounds.moveTo(this.newPosition[lane.id]) - }.bind(this)); - this.plugin.hashedPositions[this.pool] = Object.clone(this.newPosition); - } - }, - rollback: function(){ - this.lanes.each(function(lane){ - if (this.originPosition[lane.id]) - lane.bounds.moveTo(this.originPosition[lane.id]) - }.bind(this)); - this.plugin.hashedPositions[this.pool] = Object.clone(this.originPosition); - } - }); - - var hp2 = new Hash(); - allLanes.each(function(lane){ - hp2.set(lane.id, lane.bounds.upperLeft()); - }) - - var command = new LanesHasBeenReordered(hashedPositions, hp2, allLanes, this, pool.id); - this.facade.executeCommands([command]); - - } - } - - this.hashedBounds[pool.id] = {}; - this.hashedPositions[pool.id] = hashedPositions; - - var i=-1; - while (++i < allLanes.length) { - // Cache positions - this.hashedBounds[pool.id][allLanes[i].id] = allLanes[i].absoluteBounds(); - - // Cache also the bounds of child shapes, mainly for child subprocesses - this.hashChildShapes(allLanes[i]); - - this.hashedLaneDepth[allLanes[i].id] = this.getDepth(allLanes[i], pool); - - this.forceToUpdateLane(allLanes[i]); - } - - this.hashedPoolPositions[pool.id] = pool.bounds.clone(); - - - // Update selection - //this.facade.setSelection(selection); - }, - - shouldScale: function(element){ - var childLanes = element.getChildNodes().findAll(function(shape){ return shape.getStencil().id().endsWith("Lane") }) - return childLanes.length > 1 || childLanes.any(function(lane){ return this.shouldScale(lane) }.bind(this)) - }, - - /** - * Lookup if some bounds has changed - * @param {Object} lanes - * @param {Object} changes - */ - checkForChanges: function(lanes, changes){ - // Check if something has changed - if (this.facade.isExecutingCommands() && changes.any(function(change){ - return change.shape.bounds.toString() !== change.bounds.toString(); - })){ - - var Command = ORYX.Core.Command.extend({ - construct: function(changes) { - this.oldState = changes; - this.newState = changes.map(function(s){ return {shape:s.shape, bounds:s.bounds.clone()}}); - }, - execute: function(){ - if (this.executed){ - this.applyState(this.newState); - } - this.executed = true; - }, - rollback: function(){ - this.applyState(this.oldState); - }, - applyState: function(state){ - state.each(function(s){ - s.shape.bounds.set(s.bounds.upperLeft(), s.bounds.lowerRight()); - }) - } - }); - - this.facade.executeCommands([new Command(changes)]); - } - }, - - isResized: function(shape, bounds){ - - if (!bounds||!shape){ - return false; - } - - var oldB = bounds; - //var oldXY = oldB.upperLeft(); - //var xy = shape.absoluteXY(); - return Math.round(oldB.width() - shape.bounds.width()) !== 0 || Math.round(oldB.height() - shape.bounds.height()) !== 0 - }, - - adjustLanes: function(pool, lanes, x, y, scale){ - - scale = scale || 0; - - // For every lane, adjust the child nodes with the offset - lanes.each(function(l){ - l.getChildNodes().each(function(child){ - if (!child.getStencil().id().endsWith("Lane")){ - var cy = scale ? child.bounds.center().y - (child.bounds.center().y/scale) : -y; - child.bounds.moveBy((x||0), -cy); - - if (scale&&child.getStencil().id().endsWith("Subprocess")) { - this.moveChildDockers(child, {x:(0), y:-cy}); - } - - } - }.bind(this)); - this.hashedBounds[pool.id][l.id].moveBy(-(x||0), !scale?-y:0); - if (scale) { - l.isScaled = true; - } - }.bind(this)) - - }, - - getAllExcludedLanes: function(parent, lane){ - var lanes = []; - parent.getChildNodes().each(function(shape){ - if ((!lane || shape !== lane) && shape.getStencil().id().endsWith("Lane")){ - lanes.push(shape); - lanes = lanes.concat(this.getAllExcludedLanes(shape, lane)); - } - }.bind(this)); - return lanes; - }, - - - forceToUpdateLane: function(lane){ - - if (lane.bounds.height() !== lane._svgShapes[0].height) { - lane.isChanged = true; - lane.isResized = true; - lane._update(); - } - }, - - getDepth: function(child, parent){ - - var i=0; - while(child && child.parent && child !== parent){ - child = child.parent; - ++i - } - return i; - }, - - updateDepth: function(lane, fromDepth, toDepth){ - - var xOffset = (fromDepth - toDepth) * 30; - - lane.getChildNodes().each(function(shape){ - shape.bounds.moveBy(xOffset, 0); - - [].concat(children[j].getIncomingShapes()) - .concat(children[j].getOutgoingShapes()) - - }) - - }, - - setDimensions: function(shape, width, height, x, y){ - var isLane = shape.getStencil().id().endsWith("Lane"); - // Set the bounds - shape.bounds.set( - isLane ? 30 : (shape.bounds.a.x - (x || 0)), - isLane ? shape.bounds.a.y : (shape.bounds.a.y - (y || 0)), - width ? shape.bounds.a.x + width - (isLane?30:(x||0)) : shape.bounds.b.x, - height ? shape.bounds.a.y + height - (isLane?0:(y||0)) : shape.bounds.b.y - ); - }, - - setLanePosition: function(shape, y){ - - shape.bounds.moveTo(30, y); - - }, - - adjustWidth: function(lanes, width) { - - // Set width to each lane - (lanes||[]).each(function(lane){ - this.setDimensions(lane, width); - this.adjustWidth(this.getLanes(lane), width-30); - }.bind(this)); - - return width; - }, - - - adjustHeight: function(lanes, changedLane, propagateHeight){ - - var oldHeight = 0; - if (!changedLane && propagateHeight){ - var i=-1; - while (++i 2 && edges[k].dockers[l-1].isDocked()){ - var dockedLane = this.getNextLane(edges[k].dockers[l-1].getDockedShape()); - if (dockedLane != lanes[i]) - continue; - dockers[docker.id] = {docker: docker, offset:offset}; - } - // Check if the next dockers docked shape is from this lane - else if (l == edges[k].dockers.length-2 && edges[k].dockers.length>2 && edges[k].dockers[l+1].isDocked()){ - var dockedLane = this.getNextLane(edges[k].dockers[l+1].getDockedShape()); - if (dockedLane != lanes[i]) - continue; - dockers[docker.id] = {docker: docker, offset:offset}; - } - - else if (isOutSidePool) { - dockers[docker.id] = {docker: docker, offset:this.getOffset(lanes[i], true, pool)}; - }*/ - - - } - } - - } - } - - // Move the moved children - var MoveChildCommand = ORYX.Core.Command.extend({ - construct: function(state){ - this.state = state; - }, - execute: function(){ - if (this.executed){ - this.state.each(function(s){ - s.shape.bounds.moveBy(s.xOffset, 0); - }); - } - this.executed = true; - }, - rollback: function(){ - this.state.each(function(s){ - s.shape.bounds.moveBy(-s.xOffset, 0); - }); - } - }) - - - // Set dockers - this.facade.executeCommands([new ORYX.Core.MoveDockersCommand(dockers), new MoveChildCommand(movedShapes)]); - - }, - - moveBy: function(pos, offset){ - pos.x += offset.x; - pos.y += offset.y; - return pos; - }, - - getHashedBounds: function(shape){ - return this.currentPool && this.hashedBounds[this.currentPool.id][shape.id] ? this.hashedBounds[this.currentPool.id][shape.id] : shape.absoluteBounds(); - }, - - /** - * Returns a set on all child lanes for the given Shape. If recursive is TRUE, also indirect children will be returned (default is FALSE) - * The set is sorted with first child the lowest y-coordinate and the last one the highest. - * @param {ORYX.Core.Shape} shape - * @param {boolean} recursive - */ - getLanes: function(shape, recursive){ - var namespace = this.getNamespace(); - - // Get all the child lanes - var lanes = shape.getChildNodes(recursive||false).findAll(function(node) { return (node.getStencil().id() === namespace + "Lane"); }); - - // Sort all lanes by there y coordinate - lanes = lanes.sort(function(a, b){ - - // Get y coordinates for upper left and lower right - var auy = Math.round(a.bounds.upperLeft().y); - var buy = Math.round(b.bounds.upperLeft().y); - var aly = Math.round(a.bounds.lowerRight().y); - var bly = Math.round(b.bounds.lowerRight().y); - - var ha = this.getHashedBounds(a); - var hb = this.getHashedBounds(b); - - // Get the old y coordinates - var oauy = Math.round(ha.upperLeft().y); - var obuy = Math.round(hb.upperLeft().y); - var oaly = Math.round(ha.lowerRight().y); - var obly = Math.round(hb.lowerRight().y); - - // If equal, than use the old one - if (auy == buy && aly == bly) { - auy = oauy; buy = obuy; aly = oaly; bly = obly; - } - - if (Math.round(a.bounds.height()-ha.height()) === 0 && Math.round(b.bounds.height()-hb.height()) === 0){ - return auy < buy ? -1 : (auy > buy ? 1: 0); - } - - // Check if upper left and lower right is completely above/below - var above = auy < buy && aly < bly; - var below = auy > buy && aly > bly; - // Check if a is above b including the old values - var slightlyAboveBottom = auy < buy && aly >= bly && oaly < obly; - var slightlyAboveTop = auy >= buy && aly < bly && oauy < obuy; - // Check if a is below b including the old values - var slightlyBelowBottom = auy > buy && aly <= bly && oaly > obly; - var slightlyBelowTop = auy <= buy && aly > bly && oauy > obuy; - - // Return -1 if a is above b, 1 if b is above a, or 0 otherwise - return (above || slightlyAboveBottom || slightlyAboveTop ? -1 : (below || slightlyBelowBottom || slightlyBelowTop ? 1 : 0)) - }.bind(this)); - - // Return lanes - return lanes; - }, - - getNamespace: function() { - if(!this.namespace) { - var stencilsets = this.facade.getStencilSets(); - if(stencilsets.keys()) { - this.namespace = stencilsets.keys()[0]; - } else { - return undefined; - } - } - return this.namespace; - } - }; - - var ResizeLanesCommand = ORYX.Core.Command.extend({ - - construct: function(shape, parent, pool, plugin) { - - this.facade = plugin.facade; - this.plugin = plugin; - this.shape = shape; - this.changes; - - this.pool = pool; - - this.parent = parent; - - - this.shapeChildren = []; - - /* - * The Bounds have to be stored - * separate because they would - * otherwise also be influenced - */ - this.shape.getChildShapes().each(function(childShape) { - this.shapeChildren.push({ - shape: childShape, - bounds: { - a: { - x: childShape.bounds.a.x, - y: childShape.bounds.a.y - }, - b: { - x: childShape.bounds.b.x, - y: childShape.bounds.b.y - } - } - }); - }.bind(this)); - - this.shapeUpperLeft = this.shape.bounds.upperLeft(); - - // If there is no parent, - // correct the abs position with the parents abs. - /*if (!this.shape.parent) { - var pAbs = parent.absoluteXY(); - this.shapeUpperLeft.x += pAbs.x; - this.shapeUpperLeft.y += pAbs.y; - }*/ - this.parentHeight = this.parent.bounds.height(); - - }, - - getLeafLanes: function(lane){ - var childLanes = this.plugin.getLanes(lane).map(function(child){ - return this.getLeafLanes(child); - }.bind(this)).flatten(); - return childLanes.length > 0 ? childLanes : [lane]; - }, - - findNewLane: function(){ - - var lanes = this.plugin.getLanes(this.parent); - - var leafLanes = this.getLeafLanes(this.parent); - /*leafLanes = leafLanes.sort(function(a,b){ - var aupl = a.absoluteXY().y; - var bupl = b.absoluteXY().y; - return aupl < bupl ? -1 : (aupl > bupl ? 1 : 0) - })*/ - this.lane = leafLanes.find(function(l){ return l.bounds.upperLeft().y >= this.shapeUpperLeft.y }.bind(this)) || leafLanes.last(); - this.laneUpperLeft = this.lane.bounds.upperLeft(); - }, - - execute: function() { - - if(this.changes) { - this.executeAgain(); - return; - } - - /* - * Rescue all ChildShapes of the deleted - * Shape into the lane that takes its - * place - */ - - if (!this.lane){ - this.findNewLane(); - } - - if(this.lane) { - - var laUpL = this.laneUpperLeft; - var shUpL = this.shapeUpperLeft; - - var depthChange = this.plugin.getDepth(this.lane, this.parent)-1; - - this.changes = $H({}); - - // Selected lane is BELOW the removed lane - if (laUpL.y >= shUpL.y) { - this.lane.getChildShapes().each(function(childShape) { - - /* - * Cache the changes for rollback - */ - if(!this.changes[childShape.getId()]) { - this.changes[childShape.getId()] = this.computeChanges(childShape, this.lane, this.lane, this.shape.bounds.height()); - } - - childShape.bounds.moveBy(0, this.shape.bounds.height()); - }.bind(this)); - - this.plugin.hashChildShapes(this.lane); - - this.shapeChildren.each(function(shapeChild) { - shapeChild.shape.bounds.set(shapeChild.bounds); - shapeChild.shape.bounds.moveBy((shUpL.x-30)-(depthChange*30), 0); - - /* - * Cache the changes for rollback - */ - if(!this.changes[shapeChild.shape.getId()]) { - this.changes[shapeChild.shape.getId()] = this.computeChanges(shapeChild.shape, this.shape, this.lane, 0); - } - - this.lane.add(shapeChild.shape); - - }.bind(this)); - - this.lane.bounds.moveBy(0, shUpL.y-laUpL.y); - - // Selected lane is ABOVE the removed lane - } else if(shUpL.y > laUpL.y){ - - this.shapeChildren.each(function(shapeChild) { - shapeChild.shape.bounds.set(shapeChild.bounds); - shapeChild.shape.bounds.moveBy((shUpL.x-30)-(depthChange*30), this.lane.bounds.height()); - - /* - * Cache the changes for rollback - */ - if(!this.changes[shapeChild.shape.getId()]) { - this.changes[shapeChild.shape.getId()] = this.computeChanges(shapeChild.shape, this.shape, this.lane, 0); - } - - this.lane.add(shapeChild.shape); - - }.bind(this)); - } - - - - - } - - /* - * Adjust the height of the lanes - */ - // Get the height values - var oldHeight = this.lane.bounds.height(); - var newHeight = this.lane.length === 1 ? this.parentHeight : this.lane.bounds.height() + this.shape.bounds.height(); - - // Set height - this.setHeight(newHeight, oldHeight, this.parent, this.parentHeight, true); - - // Cache all sibling lanes - //this.changes[this.shape.getId()] = this.computeChanges(this.shape, this.parent, this.parent, 0); - this.plugin.getLanes(this.parent).each(function(childLane){ - if(!this.changes[childLane.getId()] && childLane !== this.lane && childLane !== this.shape) { - this.changes[childLane.getId()] = this.computeChanges(childLane, this.parent, this.parent, 0); - } - }.bind(this)) - - // Update - this.update(); - }, - - setHeight: function(newHeight, oldHeight, parent, parentHeight, store){ - - // Set heigh of the lane - this.plugin.setDimensions(this.lane, this.lane.bounds.width(), newHeight); - this.plugin.hashedBounds[this.pool.id][this.lane.id] = this.lane.absoluteBounds(); - - // Adjust child lanes - this.plugin.adjustHeight(this.plugin.getLanes(parent), this.lane); - - if (store === true){ - // Store changes - this.changes[this.shape.getId()] = this.computeChanges(this.shape, parent, parent, 0, oldHeight, newHeight); - } - - // Set parents height - this.plugin.setDimensions(parent, parent.bounds.width(), parentHeight); - - if (parent !== this.pool){ - this.plugin.setDimensions(this.pool, this.pool.bounds.width(), this.pool.bounds.height() + (newHeight-oldHeight)); - } - }, - - update: function(){ - - // Hack to prevent the updating of the dockers - this.plugin.hashedBounds[this.pool.id]["REMOVED"] = true; - // Update - //this.facade.getCanvas().update(); - }, - - rollback: function() { - - var laUpL = this.laneUpperLeft; - var shUpL = this.shapeUpperLeft; - - this.changes.each(function(pair) { - - var parent = pair.value.oldParent; - var shape = pair.value.shape; - var parentHeight = pair.value.parentHeight; - var oldHeight = pair.value.oldHeight; - var newHeight = pair.value.newHeight; - - // Move siblings - if (shape.getStencil().id().endsWith("Lane")){ - shape.bounds.moveTo(pair.value.oldPosition); - } - - // If lane - if(oldHeight) { - this.setHeight(oldHeight, newHeight, parent, parent.bounds.height() + (oldHeight - newHeight)); - if (laUpL.y >= shUpL.y) { - this.lane.bounds.moveBy(0, this.shape.bounds.height()-1); - } - } else { - parent.add(shape); - shape.bounds.moveTo(pair.value.oldPosition); - - } - - - }.bind(this)); - - // Update - //this.update(); - - }, - - executeAgain: function() { - - this.changes.each(function(pair) { - var parent = pair.value.newParent; - var shape = pair.value.shape; - var newHeight = pair.value.newHeight; - var oldHeight = pair.value.oldHeight; - - // If lane - if(newHeight) { - var laUpL = this.laneUpperLeft.y; - var shUpL = this.shapeUpperLeft.y; - - if (laUpL >= shUpL) { - this.lane.bounds.moveBy(0, shUpL - laUpL); - } - this.setHeight(newHeight, oldHeight, parent, parent.bounds.height() + (newHeight-oldHeight)); - } else { - parent.add(shape); - shape.bounds.moveTo(pair.value.newPosition); - } - - }.bind(this)); - - // Update - this.update(); - }, - - computeChanges: function(shape, oldParent, parent, yOffset, oldHeight, newHeight) { - - oldParent = this.changes[shape.getId()] ? this.changes[shape.getId()].oldParent : oldParent; - var oldPosition = this.changes[shape.getId()] ? this.changes[shape.getId()].oldPosition : shape.bounds.upperLeft(); - - var sUl = shape.bounds.upperLeft(); - - var pos = {x: sUl.x, y: sUl.y + yOffset}; - - var changes = { - shape : shape, - parentHeight: oldParent.bounds.height(), - oldParent : oldParent, - oldPosition : oldPosition, - oldHeight : oldHeight, - newParent : parent, - newPosition : pos, - newHeight : newHeight - }; - - return changes; - } - - }); - - - ORYX.Plugins.BPMN2_0 = ORYX.Plugins.AbstractPlugin.extend(ORYX.Plugins.BPMN2_0); - -}() /** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - -if(!ORYX.Plugins) - ORYX.Plugins = new Object(); - -new function(){ - - ORYX.Plugins.DMN1_2 = { - - /** - * Constructor - * @param {Object} Facade: The Facade of the Editor - */ - construct: function(facade){ - this.facade = facade; - - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_DRAGDOCKER_DOCKED, this.handleDockerDocked.bind(this)); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_PROPWINDOW_PROP_CHANGED, this.handlePropertyChanged.bind(this)); - this.facade.registerOnEvent('layout.dmn1_2.decision_service', this.handleLayoutDecisionService.bind(this)); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_SHAPEREMOVED, this.handleShapeRemove.bind(this)); - this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADED, this.afterLoad.bind(this)); - - this.namespace = undefined; - }, - - /** - * Force to update every decision service - */ - afterLoad: function(){ - this.facade.getCanvas().getChildNodes().each(function(shape){ - if (shape.getStencil().idWithoutNs() === "ExpandedDecisionService") { - this.handleLayoutDecisionService({ - shape: shape - }); - } - }.bind(this)) - }, - - /** - * If a decision service is selected and contains no section, - * 2 sections are created - */ - onSelectionChanged: function(event) { - var selection = event.elements; - - if(selection && selection.length === 1) { - var namespace = this.getNamespace(); - var shape = selection[0]; - if(shape.getStencil().idWithoutNs() === "ExpandedDecisionService") { - if(shape.getChildNodes().length === 0) { - // create 2 sections inside the selected decision service - var section1 = { - type:namespace + "OutputDecisionsDecisionServiceSection", - position:{x:0,y:0}, - namespace:shape.getStencil().namespace(), - parent:shape - }; - var section2 = { - type:namespace + "EncapsulatedDecisionsDecisionServiceSection", - position:{x:0,y:0}, - namespace:shape.getStencil().namespace(), - parent:shape - }; - this.facade.createShape(section1); - this.facade.createShape(section2); - this.facade.getCanvas().update(); - this.facade.setSelection([shape]); - } - } - } - - // Preventing selection of all sections but not the decision service - if(selection.any(function(s){ return s instanceof ORYX.Core.Node && s.getStencil().id().endsWith("DecisionServiceSection")})){ - var lanes = selection.findAll(function(s){ - return s instanceof ORYX.Core.Node && s.getStencil().id().endsWith("DecisionServiceSection") - }); - - var pools = []; - var unselectLanes = []; - lanes.each(function(lane){ - pools.push(this.getParentDecisionService(lane)) - }.bind(this)); - - // this.facade.setSelection(pools.uniq()); - pools = pools.uniq().findAll(function(pool){ - var childLanes = this.getLanes(pool, true); - if (childLanes.all(function(lane){ return lanes.include(lane)})){ - unselectLanes = unselectLanes.concat(childLanes); - return true; - } else if (selection.include(pool) && childLanes.any(function(lane){ return lanes.include(lane)})) { - unselectLanes = unselectLanes.concat(childLanes); - return true; - } else { - return false; - } - }.bind(this)); - - if (unselectLanes.length > 0 && pools.length > 0){ - selection = selection.without.apply(selection, unselectLanes); - selection = selection.concat(pools); - this.facade.setSelection(selection.uniq()); - } - } - }, - - handleShapeRemove: function(option) { - - var sh = option.shape; - var parent = option.parent; - - if (sh instanceof ORYX.Core.Node && sh.getStencil().id().endsWith("DecisionServiceSection") && this.facade.isExecutingCommands()) { - - var pool = this.getParentDecisionService(parent); - if (pool&&pool.parent){ - - var isLeafFn = function(leaf){ - return !leaf.getChildNodes().any(function(r){ return r.getStencil().id().endsWith("DecisionServiceSection")}); - } - - var isLeaf = isLeafFn(sh); - var parentHasMoreLanes = parent.getChildNodes().any(function(r){ return r.getStencil().id().endsWith("DecisionServiceSection")}); - - if (isLeaf && parentHasMoreLanes){ - - var command = new ResizeSectionsCommand(sh, parent, pool, this); - this.facade.executeCommands([command]); - - } else if( !isLeaf && - !this.facade.getSelection().any(function(select){ // Find one of the selection, which is a lane and child of "sh" and is a leaf lane - return select instanceof ORYX.Core.Node && select.getStencil().id().endsWith("DecisionServiceSection") && - select.isParent(sh) && isLeafFn(select);})) { - - var Command = ORYX.Core.Command.extend({ - construct: function(shape, facade) { - this.children = shape.getChildNodes(true); - this.facade = facade; - }, - execute: function() { - this.children.each(function(child){ - child.bounds.moveBy(0,0) - }); - //this.facade.getCanvas().update(); - }, - rollback: function() { - this.children.each(function(child){ - child.bounds.moveBy(0,0) - }) - //this.facade.getCanvas().update(); - } - }); - this.facade.executeCommands([new Command(sh, this.facade)]); - - } else if (isLeaf&&!parentHasMoreLanes&&parent == pool){ - parent.add(sh); - } - } - - } - - }, - - - hashedSubProcesses: {}, - - hashChildShapes: function(shape){ - var children = shape.getChildNodes(); - children.each(function(child){ - if (this.hashedSubProcesses[child.id]){ - this.hashedSubProcesses[child.id] = child.absoluteXY(); - this.hashedSubProcesses[child.id].width = child.bounds.width(); - this.hashedSubProcesses[child.id].height = child.bounds.height(); - this.hashChildShapes(child); - } - }.bind(this)); - }, - - moveChildDockers: function(shape, offset){ - - if (!offset.x && !offset.y) { - return; - } - - var children = shape.getChildNodes(true); - - // Get all nodes - var dockers = children - // Get all incoming and outgoing edges - .map(function(node){ - return [].concat(node.getIncomingShapes()) - .concat(node.getOutgoingShapes()) - }) - // Flatten all including arrays into one - .flatten() - // Get every edge only once - .uniq() - // Get all dockers - .map(function(edge){ - return edge.dockers.length > 2 ? - edge.dockers.slice(1, edge.dockers.length-1) : - []; - }) - // Flatten the dockers lists - .flatten(); - - var abs = shape.absoluteBounds(); - abs.moveBy(-offset.x, -offset.y) - var obj = {}; - dockers.each(function(docker){ - - if (docker.isChanged){ - return; - } - - var off = Object.clone(offset); - - if (!abs.isIncluded(docker.bounds.center())){ - var index = docker.parent.dockers.indexOf(docker); - var size = docker.parent.dockers.length; - var from = docker.parent.getSource(); - var to = docker.parent.getTarget(); - - var bothAreIncluded = children.include(from) && children.include(to); - - if (!bothAreIncluded){ - var previousIsOver = index !== 0 ? abs.isIncluded(docker.parent.dockers[index-1].bounds.center()) : false; - var nextIsOver = index !== size-1 ? abs.isIncluded(docker.parent.dockers[index+1].bounds.center()) : false; - - if (!previousIsOver && !nextIsOver){ return; } - - var ref = docker.parent.dockers[previousIsOver ? index-1 : index+1]; - if (Math.abs(-Math.abs(ref.bounds.center().x-docker.bounds.center().x)) < 2){ - off.y = 0; - } else if(Math.abs(-Math.abs(ref.bounds.center().y-docker.bounds.center().y)) < 2){ - off.x = 0; - } else { - return; - } - } - - } - - obj[docker.getId()] = { - docker:docker, - offset:off - } - }) - - // Set dockers - this.facade.executeCommands([new ORYX.Core.MoveDockersCommand(obj)]); - - }, - - /** - * DragDocker.Docked Handler - * - */ - handleDockerDocked: function(options) { - var namespace = this.getNamespace(); - - var edge = options.parent; - var edgeSource = options.target; - - if(edge.getStencil().id() === namespace + "SequenceFlow") { - var isGateway = edgeSource.getStencil().groups().find(function(group) { - if(group == "Gateways") - return group; - }); - if(!isGateway && (edge.properties["oryx-conditiontype"] == "Expression")) - // show diamond on edge source - edge.setProperty("oryx-showdiamondmarker", true); - else - // do not show diamond on edge source - edge.setProperty("oryx-showdiamondmarker", false); - - // update edge rendering - //edge.update(); - - this.facade.getCanvas().update(); - } - }, - - /** - * PropertyWindow.PropertyChanged Handler - */ - handlePropertyChanged: function(option) { - var namespace = this.getNamespace(); - - var shapes = option.elements; - var propertyKey = option.key; - var propertyValue = option.value; - - var changed = false; - shapes.each(function(shape){ - if((shape.getStencil().id() === namespace + "SequenceFlow") && - (propertyKey === "oryx-conditiontype")) { - - if(propertyValue != "Expression") - // Do not show the Diamond - shape.setProperty("oryx-showdiamondmarker", false); - else { - var incomingShapes = shape.getIncomingShapes(); - - if(!incomingShapes) { - shape.setProperty("oryx-showdiamondmarker", true); - } - - var incomingGateway = incomingShapes.find(function(aShape) { - var foundGateway = aShape.getStencil().groups().find(function(group) { - if(group == "Gateways") - return group; - }); - if(foundGateway) - return foundGateway; - }); - - if(!incomingGateway) - // show diamond on edge source - shape.setProperty("oryx-showdiamondmarker", true); - else - // do not show diamond - shape.setProperty("oryx-showdiamondmarker", false); - } - - changed = true; - } - }.bind(this)); - - if(changed) {this.facade.getCanvas().update();} - - }, - - hashedPoolPositions : {}, - hashedLaneDepth : {}, - hashedBounds : {}, - hashedPositions: {}, - - /** - * Handler for layouting event 'layout.dmn1_2.decision_service' - * @param {Object} event - */ - handleLayoutDecisionService: function(event){ - var pool = event.shape; - var selection = this.facade.getSelection(); - var currentShape = selection.include(pool) ? pool : selection.first(); - - currentShape = currentShape || pool; - - this.currentPool = pool; - - // Check if it is a pool or a lane - if (!(currentShape.getStencil().id().endsWith("ExpandedDecisionService") || currentShape.getStencil().id().endsWith("DecisionServiceSection"))) { - return; - } - - // Check if the lane is within the pool and is not removed lately - if (currentShape !== pool && !currentShape.isParent(pool) && !this.hashedBounds[pool.id][currentShape.id]){ - return; - } - - - if (!this.hashedBounds[pool.id]) { - this.hashedBounds[pool.id] = {}; - } - - // Find all child lanes - var lanes = this.getLanes(pool); - - if (lanes.length <= 0) { - return - } - - var allLanes = this.getLanes(pool, true), hp; - var considerForDockers = allLanes.clone(); - - var hashedPositions = new Hash(); - allLanes.each(function(lane){ - hashedPositions.set(lane.id, lane.bounds.upperLeft()); - }); - - - - // Show/hide caption regarding the number of lanes - if (lanes.length === 1 && this.getLanes(lanes.first()).length <= 0) { - // TRUE if there is a caption - var caption = lanes.first().properties.get("oryx-name").trim().length > 0; - lanes.first().setProperty("oryx-showcaption", caption); - var rect = lanes.first().node.getElementsByTagName("rect"); - rect[0].setAttributeNS(null, "display", "none"); - } else { - allLanes.invoke("setProperty", "oryx-showcaption", true); - allLanes.each(function(lane){ - var rect = lane.node.getElementsByTagName("rect"); - rect[0].removeAttributeNS(null, "display"); - }) - } - - var deletedLanes = []; - var addedLanes = []; - - // Get all new lanes - var i=-1; - while (++i 0){ - currentShape = addedLanes.first(); - } - - // Get all deleted lanes - var resourceIds = $H(this.hashedBounds[pool.id]).keys(); - var i=-1; - while (++i 0 || addedLanes.length > 0) { - - if (addedLanes.length === 1 && this.getLanes(addedLanes[0].parent).length === 1){ - // Set height from the pool - height = this.adjustHeight(lanes, addedLanes[0].parent); - } else { - // Set height from the pool - height = this.updateHeight(pool); - } - // Set width from the pool - width = this.adjustWidth(lanes, pool.bounds.width()); - - pool.update(); - } - - /** - * Set width/height depending on the pool - */ - else if (pool == currentShape) { - - if (selection.length === 1 && this.isResized(pool, this.hashedPoolPositions[pool.id])) { - var oldXY = this.hashedPoolPositions[pool.id].upperLeft(); - var xy = pool.bounds.upperLeft(); - var scale = 0; - if (this.shouldScale(pool)){ - var old = this.hashedPoolPositions[pool.id]; - scale = old.height()/pool.bounds.height(); - } - - this.adjustLanes(pool, allLanes, oldXY.x - xy.x, oldXY.y - xy.y, scale); - } - - // Set height from the pool - height = this.adjustHeight(lanes, undefined, pool.bounds.height()); - // Set width from the pool - width = this.adjustWidth(lanes, pool.bounds.width()); - } - - /**‚ - * Set width/height depending on containing lanes - */ - else { - - // Reposition the pool if one shape is selected and the upperleft has changed - if (selection.length === 1 && this.isResized(currentShape, this.hashedBounds[pool.id][currentShape.id])){ - var oldXY = this.hashedBounds[pool.id][currentShape.id].upperLeft(); - var xy = currentShape.absoluteXY(); - x = oldXY.x - xy.x; - y = oldXY.y - xy.y; - - // Adjust all other lanes beneath this lane - if (x||y){ - considerForDockers = considerForDockers.without(currentShape); - this.adjustLanes(pool, this.getAllExcludedLanes(pool, currentShape), x, 0); - } - - // Adjust all child lanes - var childLanes = this.getLanes(currentShape, true); - if (childLanes.length > 0){ - if (this.shouldScale(currentShape)){ - var old = this.hashedBounds[pool.id][currentShape.id]; - var scale = old.height()/currentShape.bounds.height(); - this.adjustLanes(pool, childLanes, x, y, scale); - } else { - this.adjustLanes(pool, childLanes, x, y, 0); - } - } - } - - // Cache all bounds - var changes = allLanes.map(function(lane){ return { - shape: lane, - bounds: lane.bounds.clone() - } }); - - // Get height and adjust child heights - height = this.adjustHeight(lanes, currentShape); - // Check if something has changed and maybe create a command - this.checkForChanges(allLanes, changes); - - // Set width from the current shape - width = this.adjustWidth(lanes, currentShape.bounds.width()+(this.getDepth(currentShape,pool) )); - } - - this.setDimensions(pool, width, height, x, y); - - - if (this.facade.isExecutingCommands() && (deletedLanes.length === 0 || addedLanes.length !== 0)){ - // Update all dockers - this.updateDockers(considerForDockers, pool); - - // Check if the order has changed - var poolHashedPositions = this.hashedPositions[pool.id]; - if ( poolHashedPositions && poolHashedPositions.keys().any(function(key, i){ - return (allLanes[i]||{}).id !== key; - })) { - - var LanesHasBeenReordered = ORYX.Core.Command.extend({ - construct: function(originPosition, newPosition, lanes, plugin, poolId) { - this.originPosition = Object.clone(originPosition); - this.newPosition = Object.clone(newPosition); - this.lanes = lanes; - this.plugin = plugin; - this.pool = poolId; - }, - execute: function(){ - if (!this.executed){ - this.executed = true; - this.lanes.each(function(lane){ - if (this.newPosition[lane.id]) - lane.bounds.moveTo(this.newPosition[lane.id]) - }.bind(this)); - this.plugin.hashedPositions[this.pool] = Object.clone(this.newPosition); - } - }, - rollback: function(){ - this.lanes.each(function(lane){ - if (this.originPosition[lane.id]) - lane.bounds.moveTo(this.originPosition[lane.id]) - }.bind(this)); - this.plugin.hashedPositions[this.pool] = Object.clone(this.originPosition); - } - }); - - var hp2 = new Hash(); - allLanes.each(function(lane){ - hp2.set(lane.id, lane.bounds.upperLeft()); - }) - - var command = new LanesHasBeenReordered(hashedPositions, hp2, allLanes, this, pool.id); - this.facade.executeCommands([command]); - - } - } - - this.hashedBounds[pool.id] = {}; - this.hashedPositions[pool.id] = hashedPositions; - - var i=-1; - while (++i < allLanes.length) { - // Cache positions - this.hashedBounds[pool.id][allLanes[i].id] = allLanes[i].absoluteBounds(); - - // Cache also the bounds of child shapes, mainly for child subprocesses - this.hashChildShapes(allLanes[i]); - - this.hashedLaneDepth[allLanes[i].id] = this.getDepth(allLanes[i], pool); - - this.forceToUpdateLane(allLanes[i]); - } - - this.hashedPoolPositions[pool.id] = pool.bounds.clone(); - - - // Update selection - //this.facade.setSelection(selection); - }, - - shouldScale: function(element){ - var childLanes = element.getChildNodes().findAll(function(shape){ return shape.getStencil().id().endsWith("DecisionServiceSection") }) - return childLanes.length > 1 || childLanes.any(function(lane){ return this.shouldScale(lane) }.bind(this)) - }, - - /** - * Lookup if some bounds has changed - * @param {Object} lanes - * @param {Object} changes - */ - checkForChanges: function(lanes, changes){ - // Check if something has changed - if (this.facade.isExecutingCommands() && changes.any(function(change){ - return change.shape.bounds.toString() !== change.bounds.toString(); - })){ - - var Command = ORYX.Core.Command.extend({ - construct: function(changes) { - this.oldState = changes; - this.newState = changes.map(function(s){ return {shape:s.shape, bounds:s.bounds.clone()}}); - }, - execute: function(){ - if (this.executed){ - this.applyState(this.newState); - } - this.executed = true; - }, - rollback: function(){ - this.applyState(this.oldState); - }, - applyState: function(state){ - state.each(function(s){ - s.shape.bounds.set(s.bounds.upperLeft(), s.bounds.lowerRight()); - }) - } - }); - - this.facade.executeCommands([new Command(changes)]); - } - }, - - isResized: function(shape, bounds){ - - if (!bounds||!shape){ - return false; - } - - var oldB = bounds; - //var oldXY = oldB.upperLeft(); - //var xy = shape.absoluteXY(); - return Math.round(oldB.width() - shape.bounds.width()) !== 0 || Math.round(oldB.height() - shape.bounds.height()) !== 0 - }, - - adjustLanes: function(pool, lanes, x, y, scale){ - - scale = scale || 0; - - // For every lane, adjust the child nodes with the offset - lanes.each(function(l){ - l.getChildNodes().each(function(child){ - if (!child.getStencil().id().endsWith("DecisionServiceSection")){ - var cy = scale ? child.bounds.center().y - (child.bounds.center().y/scale) : -y; - child.bounds.moveBy((x||0), -cy); - - if (scale&&child.getStencil().id().endsWith("DecisionServiceSection")) { - this.moveChildDockers(child, {x:(0), y:-cy}); - } - - } - }.bind(this)); - this.hashedBounds[pool.id][l.id].moveBy(-(x||0), !scale?-y:0); - if (scale) { - l.isScaled = true; - } - }.bind(this)) - - }, - - getAllExcludedLanes: function(parent, lane){ - var lanes = []; - parent.getChildNodes().each(function(shape){ - if ((!lane || shape !== lane) && shape.getStencil().id().endsWith("DecisionServiceSection")){ - lanes.push(shape); - lanes = lanes.concat(this.getAllExcludedLanes(shape, lane)); - } - }.bind(this)); - return lanes; - }, - - - forceToUpdateLane: function(lane){ - - if (lane.bounds.height() !== lane._svgShapes[0].height) { - lane.isChanged = true; - lane.isResized = true; - lane._update(); - } - }, - - getDepth: function(child, parent){ - - var i=0; - while(child && child.parent && child !== parent){ - child = child.parent; - ++i - } - return i; - }, - - updateDepth: function(lane, fromDepth, toDepth){ - - // var xOffset = (fromDepth - toDepth) * 30; - xOffset = 0; - - lane.getChildNodes().each(function(shape){ - shape.bounds.moveBy(xOffset, 0); - - [].concat(children[j].getIncomingShapes()) - .concat(children[j].getOutgoingShapes()) - - }) - - }, - - setDimensions: function(shape, width, height, x, y){ - var isLane = shape.getStencil().id().endsWith("DecisionServiceSection"); - // Set the bounds - shape.bounds.set( - isLane ? 0 : (shape.bounds.a.x - (x || 0)), - isLane ? shape.bounds.a.y : (shape.bounds.a.y - (y || 0)), - width ? shape.bounds.a.x + width - (isLane?0:(x||0)) : shape.bounds.b.x, - height ? shape.bounds.a.y + height - (isLane?0:(y||0)) : shape.bounds.b.y - ); - }, - - setSectionPosition: function(shape, y){ - - shape.bounds.moveTo(0, y); - - }, - - adjustWidth: function(lanes, width) { - - // Set width to each lane - (lanes||[]).each(function(lane){ - this.setDimensions(lane, width); - this.adjustWidth(this.getLanes(lane), width); - }.bind(this)); - - return width; - }, - - - adjustHeight: function(lanes, changedLane, propagateHeight){ - - var oldHeight = 0; - if (!changedLane && propagateHeight){ - var i=-1; - while (++i 2 && edges[k].dockers[l-1].isDocked()){ - var dockedLane = this.getNextSection(edges[k].dockers[l-1].getDockedShape()); - if (dockedLane != lanes[i]) - continue; - dockers[docker.id] = {docker: docker, offset:offset}; - } - // Check if the next dockers docked shape is from this lane - else if (l == edges[k].dockers.length-2 && edges[k].dockers.length>2 && edges[k].dockers[l+1].isDocked()){ - var dockedLane = this.getNextSection(edges[k].dockers[l+1].getDockedShape()); - if (dockedLane != lanes[i]) - continue; - dockers[docker.id] = {docker: docker, offset:offset}; - } - - else if (isOutSidePool) { - dockers[docker.id] = {docker: docker, offset:this.getOffset(lanes[i], true, pool)}; - }*/ - - - } - } - - } - } - - // Move the moved children - var MoveChildCommand = ORYX.Core.Command.extend({ - construct: function(state){ - this.state = state; - }, - execute: function(){ - if (this.executed){ - this.state.each(function(s){ - s.shape.bounds.moveBy(s.xOffset, 0); - }); - } - this.executed = true; - }, - rollback: function(){ - this.state.each(function(s){ - s.shape.bounds.moveBy(-s.xOffset, 0); - }); - } - }) - - - // Set dockers - this.facade.executeCommands([new ORYX.Core.MoveDockersCommand(dockers), new MoveChildCommand(movedShapes)]); - - }, - - moveBy: function(pos, offset){ - pos.x += offset.x; - pos.y += offset.y; - return pos; - }, - - getHashedBounds: function(shape){ - return this.currentPool && this.hashedBounds[this.currentPool.id][shape.id] ? this.hashedBounds[this.currentPool.id][shape.id] : shape.absoluteBounds(); - }, - - /** - * Returns a set on all child lanes for the given Shape. If recursive is TRUE, also indirect children will be returned (default is FALSE) - * The set is sorted with first child the lowest y-coordinate and the last one the highest. - * @param {ORYX.Core.Shape} shape - * @param {boolean} recursive - */ - getLanes: function(shape, recursive){ - var namespace = this.getNamespace(); - - // Get all the child lanes - var lanes = shape.getChildNodes(recursive||false).findAll(function(node) { - return ( - node.getStencil().id().endsWith("DecisionServiceSection") - ); - }); - - // Sort all lanes by there y coordinate - lanes = lanes.sort(function(a, b){ - - // Get y coordinates for upper left and lower right - var auy = Math.round(a.bounds.upperLeft().y); - var buy = Math.round(b.bounds.upperLeft().y); - var aly = Math.round(a.bounds.lowerRight().y); - var bly = Math.round(b.bounds.lowerRight().y); - - var ha = this.getHashedBounds(a); - var hb = this.getHashedBounds(b); - - // Get the old y coordinates - var oauy = Math.round(ha.upperLeft().y); - var obuy = Math.round(hb.upperLeft().y); - var oaly = Math.round(ha.lowerRight().y); - var obly = Math.round(hb.lowerRight().y); - - // If equal, than use the old one - if (auy == buy && aly == bly) { - auy = oauy; buy = obuy; aly = oaly; bly = obly; - } - - if (Math.round(a.bounds.height()-ha.height()) === 0 && Math.round(b.bounds.height()-hb.height()) === 0){ - return auy < buy ? -1 : (auy > buy ? 1: 0); - } - - // Check if upper left and lower right is completely above/below - var above = auy < buy && aly < bly; - var below = auy > buy && aly > bly; - // Check if a is above b including the old values - var slightlyAboveBottom = auy < buy && aly >= bly && oaly < obly; - var slightlyAboveTop = auy >= buy && aly < bly && oauy < obuy; - // Check if a is below b including the old values - var slightlyBelowBottom = auy > buy && aly <= bly && oaly > obly; - var slightlyBelowTop = auy <= buy && aly > bly && oauy > obuy; - - // Return -1 if a is above b, 1 if b is above a, or 0 otherwise - return (above || slightlyAboveBottom || slightlyAboveTop ? -1 : (below || slightlyBelowBottom || slightlyBelowTop ? 1 : 0)) - }.bind(this)); - - // Return lanes - return lanes; - }, - - getNamespace: function() { - if(!this.namespace) { - var stencilsets = this.facade.getStencilSets(); - if(stencilsets.keys()) { - this.namespace = stencilsets.keys()[0]; - } else { - return undefined; - } - } - return this.namespace; - } - }; - - var ResizeSectionsCommand = ORYX.Core.Command.extend({ - - construct: function(shape, parent, pool, plugin) { - - this.facade = plugin.facade; - this.plugin = plugin; - this.shape = shape; - this.changes; - - this.pool = pool; - - this.parent = parent; - - - this.shapeChildren = []; - - /* - * The Bounds have to be stored - * separate because they would - * otherwise also be influenced - */ - this.shape.getChildShapes().each(function(childShape) { - this.shapeChildren.push({ - shape: childShape, - bounds: { - a: { - x: childShape.bounds.a.x, - y: childShape.bounds.a.y - }, - b: { - x: childShape.bounds.b.x, - y: childShape.bounds.b.y - } - } - }); - }.bind(this)); - - this.shapeUpperLeft = this.shape.bounds.upperLeft(); - - // If there is no parent, - // correct the abs position with the parents abs. - /*if (!this.shape.parent) { - var pAbs = parent.absoluteXY(); - this.shapeUpperLeft.x += pAbs.x; - this.shapeUpperLeft.y += pAbs.y; - }*/ - this.parentHeight = this.parent.bounds.height(); - - }, - - getLeafLanes: function(lane){ - var childLanes = this.plugin.getLanes(lane).map(function(child){ - return this.getLeafLanes(child); - }.bind(this)).flatten(); - return childLanes.length > 0 ? childLanes : [lane]; - }, - - findNewLane: function(){ - - var lanes = this.plugin.getLanes(this.parent); - - var leafLanes = this.getLeafLanes(this.parent); - /*leafLanes = leafLanes.sort(function(a,b){ - var aupl = a.absoluteXY().y; - var bupl = b.absoluteXY().y; - return aupl < bupl ? -1 : (aupl > bupl ? 1 : 0) - })*/ - this.lane = leafLanes.find(function(l){ return l.bounds.upperLeft().y >= this.shapeUpperLeft.y }.bind(this)) || leafLanes.last(); - this.laneUpperLeft = this.lane.bounds.upperLeft(); - }, - - execute: function() { - - if(this.changes) { - this.executeAgain(); - return; - } - - /* - * Rescue all ChildShapes of the deleted - * Shape into the lane that takes its - * place - */ - - if (!this.lane){ - this.findNewLane(); - } - - if(this.lane) { - - var laUpL = this.laneUpperLeft; - var shUpL = this.shapeUpperLeft; - - var depthChange = this.plugin.getDepth(this.lane, this.parent)-1; - - this.changes = $H({}); - - // Selected lane is BELOW the removed lane - if (laUpL.y >= shUpL.y) { - this.lane.getChildShapes().each(function(childShape) { - - /* - * Cache the changes for rollback - */ - if(!this.changes[childShape.getId()]) { - this.changes[childShape.getId()] = this.computeChanges(childShape, this.lane, this.lane, this.shape.bounds.height()); - } - - childShape.bounds.moveBy(0, this.shape.bounds.height()); - }.bind(this)); - - this.plugin.hashChildShapes(this.lane); - - this.shapeChildren.each(function(shapeChild) { - shapeChild.shape.bounds.set(shapeChild.bounds); - shapeChild.shape.bounds.moveBy((shUpL.x)-(depthChange*1), 0); - - /* - * Cache the changes for rollback - */ - if(!this.changes[shapeChild.shape.getId()]) { - this.changes[shapeChild.shape.getId()] = this.computeChanges(shapeChild.shape, this.shape, this.lane, 0); - } - - this.lane.add(shapeChild.shape); - - }.bind(this)); - - this.lane.bounds.moveBy(0, shUpL.y-laUpL.y); - - // Selected lane is ABOVE the removed lane - } else if(shUpL.y > laUpL.y){ - - this.shapeChildren.each(function(shapeChild) { - shapeChild.shape.bounds.set(shapeChild.bounds); - shapeChild.shape.bounds.moveBy((shUpL.x)-(depthChange*1), this.lane.bounds.height()); - - /* - * Cache the changes for rollback - */ - if(!this.changes[shapeChild.shape.getId()]) { - this.changes[shapeChild.shape.getId()] = this.computeChanges(shapeChild.shape, this.shape, this.lane, 0); - } - - this.lane.add(shapeChild.shape); - - }.bind(this)); - } - - - - - } - - /* - * Adjust the height of the lanes - */ - // Get the height values - var oldHeight = this.lane.bounds.height(); - var newHeight = this.lane.length === 1 ? this.parentHeight : this.lane.bounds.height() + this.shape.bounds.height(); - - // Set height - this.setHeight(newHeight, oldHeight, this.parent, this.parentHeight, true); - - // Cache all sibling lanes - //this.changes[this.shape.getId()] = this.computeChanges(this.shape, this.parent, this.parent, 0); - this.plugin.getLanes(this.parent).each(function(childLane){ - if(!this.changes[childLane.getId()] && childLane !== this.lane && childLane !== this.shape) { - this.changes[childLane.getId()] = this.computeChanges(childLane, this.parent, this.parent, 0); - } - }.bind(this)) - - // Update - this.update(); - }, - - setHeight: function(newHeight, oldHeight, parent, parentHeight, store){ - - // Set heigh of the lane - this.plugin.setDimensions(this.lane, this.lane.bounds.width(), newHeight); - this.plugin.hashedBounds[this.pool.id][this.lane.id] = this.lane.absoluteBounds(); - - // Adjust child lanes - this.plugin.adjustHeight(this.plugin.getLanes(parent), this.lane); - - if (store === true){ - // Store changes - this.changes[this.shape.getId()] = this.computeChanges(this.shape, parent, parent, 0, oldHeight, newHeight); - } - - // Set parents height - this.plugin.setDimensions(parent, parent.bounds.width(), parentHeight); - - if (parent !== this.pool){ - this.plugin.setDimensions(this.pool, this.pool.bounds.width(), this.pool.bounds.height() + (newHeight-oldHeight)); - } - }, - - update: function(){ - - // Hack to prevent the updating of the dockers - this.plugin.hashedBounds[this.pool.id]["REMOVED"] = true; - // Update - //this.facade.getCanvas().update(); - }, - - rollback: function() { - - var laUpL = this.laneUpperLeft; - var shUpL = this.shapeUpperLeft; - - this.changes.each(function(pair) { - - var parent = pair.value.oldParent; - var shape = pair.value.shape; - var parentHeight = pair.value.parentHeight; - var oldHeight = pair.value.oldHeight; - var newHeight = pair.value.newHeight; - - // Move siblings - if (shape.getStencil().id().endsWith("DecisionServiceSection")){ - shape.bounds.moveTo(pair.value.oldPosition); - } - - // If lane - if(oldHeight) { - this.setHeight(oldHeight, newHeight, parent, parent.bounds.height() + (oldHeight - newHeight)); - if (laUpL.y >= shUpL.y) { - this.lane.bounds.moveBy(0, this.shape.bounds.height()-1); - } - } else { - parent.add(shape); - shape.bounds.moveTo(pair.value.oldPosition); - - } - - - }.bind(this)); - - // Update - //this.update(); - - }, - - executeAgain: function() { - - this.changes.each(function(pair) { - var parent = pair.value.newParent; - var shape = pair.value.shape; - var newHeight = pair.value.newHeight; - var oldHeight = pair.value.oldHeight; - - // If lane - if(newHeight) { - var laUpL = this.laneUpperLeft.y; - var shUpL = this.shapeUpperLeft.y; - - if (laUpL >= shUpL) { - this.lane.bounds.moveBy(0, shUpL - laUpL); - } - this.setHeight(newHeight, oldHeight, parent, parent.bounds.height() + (newHeight-oldHeight)); - } else { - parent.add(shape); - shape.bounds.moveTo(pair.value.newPosition); - } - - }.bind(this)); - - // Update - this.update(); - }, - - computeChanges: function(shape, oldParent, parent, yOffset, oldHeight, newHeight) { - - oldParent = this.changes[shape.getId()] ? this.changes[shape.getId()].oldParent : oldParent; - var oldPosition = this.changes[shape.getId()] ? this.changes[shape.getId()].oldPosition : shape.bounds.upperLeft(); - - var sUl = shape.bounds.upperLeft(); - - var pos = {x: sUl.x, y: sUl.y + yOffset}; - - var changes = { - shape : shape, - parentHeight: oldParent.bounds.height(), - oldParent : oldParent, - oldPosition : oldPosition, - oldHeight : oldHeight, - newParent : parent, - newPosition : pos, - newHeight : newHeight - }; - - return changes; - } - - }); - - - ORYX.Plugins.DMN1_2 = ORYX.Plugins.AbstractPlugin.extend(ORYX.Plugins.DMN1_2); - -}() \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/oryx.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/oryx.js deleted file mode 100644 index c598b95f..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editor/oryx.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) 2006 - * - * Philipp Berger, Martin Czuchra, Gero Decker, Ole Eckermann, Lutz Gericke, - * Alexander Hold, Alexander Koglin, Oliver Kopp, Stefan Krumnow, - * Matthias Kunze, Philipp Maschke, Falko Menge, Christoph Neijenhuis, - * Hagen Overdick, Zhen Peng, Nicolas Peters, Kerstin Pfitzner, Daniel Polak, - * Steffen Ryll, Kai Schlichting, Jan-Felix Schwarz, Daniel Taschik, - * Willi Tscheschner, Björn Wagner, Sven Wagner-Boysen, Matthias Weidlich - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - **/ - if(!ORYX){var ORYX={}}ORYX.Utils={getParamFromUrl:function(b){b=b.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var a="[\\?&]"+b+"=([^]*)";var d=new RegExp(a);var c=d.exec(window.location.href);if(c==null){return null}else{return c[1]}},adjustLightness:function(){return arguments[0]},adjustGradient:function(c,a){if(ORYX.CONFIG.DISABLE_GRADIENT&&c){var b=a.getAttributeNS(null,"stop-color")||"#ffffff";$A(c.getElementsByTagName("stop")).each(function(d){if(d==a){return}d.setAttributeNS(null,"stop-color",b)})}}};XMLNS={ATOM:"http://www.w3.org/2005/Atom",XHTML:"http://www.w3.org/1999/xhtml",ERDF:"http://purl.org/NET/erdf/profile",RDFS:"http://www.w3.org/2000/01/rdf-schema#",RDF:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",RAZIEL:"http://b3mn.org/Raziel",SCHEMA:""};var Kickstart={started:false,callbacks:[],alreadyLoaded:[],PATH:"",load:function(){Kickstart.kick()},kick:function(){if(!Kickstart.started){Kickstart.started=true;Kickstart.callbacks.each(function(a){window.setTimeout(a,1)})}},register:function(callback){with(Kickstart){if(started){window.setTimeout(callback,1)}else{Kickstart.callbacks.push(callback)}}},require:function(a){if(Kickstart.alreadyLoaded.member(a)){return false}return Kickstart.include(a)},include:function(a){var b=document.getElementsByTagNameNS(XMLNS.XHTML,"head")[0];var c=document.createElementNS(XMLNS.XHTML,"script");c.setAttributeNS(XMLNS.XHTML,"type","text/javascript");c.src=Kickstart.PATH+a;b.appendChild(c);Kickstart.alreadyLoaded.push(a);return true}};Event.observe(window,"load",Kickstart.load);var ERDF={LITERAL:1,RESOURCE:2,DELIMITERS:[".","-"],HASH:"#",HYPHEN:"-",schemas:[],callback:undefined,log:undefined,init:function(a){ERDF.callback=a;ERDF.registerSchema("schema",XMLNS.SCHEMA);ERDF.registerSchema("rdfs",XMLNS.RDFS)},run:function(){return ERDF._checkProfile()&&ERDF.parse()},parse:function(){ERDF.__startTime=new Date();var b=document.getElementsByTagNameNS(XMLNS.XHTML,"body");var c={type:ERDF.RESOURCE,value:""};var a=ERDF._parseDocumentMetadata()&&ERDF._parseFromTag(b[0],c);ERDF.__stopTime=new Date();var d=(ERDF.__stopTime-ERDF.__startTime)/1000;return a},_parseDocumentMetadata:function(){var b=document.getElementsByTagNameNS(XMLNS.XHTML,"head");var a=b[0].getElementsByTagNameNS(XMLNS.XHTML,"link");var c=b[0].getElementsByTagNameNS(XMLNS.XHTML,"meta");$A(a).each(function(e){var d=e.getAttribute("rel");var g=e.getAttribute("rev");var f=e.getAttribute("href");ERDF._parseTriplesFrom(ERDF.RESOURCE,"",d,ERDF.RESOURCE,f);ERDF._parseTriplesFrom(ERDF.RESOURCE,f,g,ERDF.RESOURCE,"")});$A(c).each(function(f){var e=f.getAttribute("name");var d=f.getAttribute("content");ERDF._parseTriplesFrom(ERDF.RESOURCE,"",e,ERDF.LITERAL,d)});return true},_parseFromTag:function(c,k,d){if(!c||!c.namespaceURI||c.namespaceURI!=XMLNS.XHTML){return}if(!d){d=0}var a=c.getAttribute("id");if(c.nodeName.endsWith(":a")||c.nodeName=="a"){var h=c.getAttribute("rel");var e=c.getAttribute("rev");var n=c.getAttribute("href");var m=c.getAttribute("title");var g=c.textContent;ERDF._parseTriplesFrom(k.type,k.value,h,ERDF.RESOURCE,n,function(p){var o=m?m:g;ERDF._parseTriplesFrom(p.object.type,p.object.value,"rdfs.label",ERDF.LITERAL,o)});ERDF._parseTriplesFrom(k.type,k.value,e,ERDF.RESOURCE,"");ERDF._parseTypeTriplesFrom(k.type,k.value,h)}else{if(c.nodeName.endsWith(":img")||c.nodeName=="img"){var h=c.getAttribute("class");var n=c.getAttribute("src");var f=c.getAttribute("alt");ERDF._parseTriplesFrom(k.type,k.value,h,ERDF.RESOURCE,n,function(p){var o=f;ERDF._parseTriplesFrom(p.object.type,p.object.value,"rdfs.label",ERDF.LITERAL,o)})}}var h=c.getAttribute("class");var m=c.getAttribute("title");var g=c.textContent;var l=m?m:g;ERDF._parseTriplesFrom(k.type,k.value,h,ERDF.LITERAL,l);if(a){k={type:ERDF.RESOURCE,value:ERDF.HASH+a}}ERDF._parseTypeTriplesFrom(k.type,k.value,h);var b=c.childNodes;if(b){$A(b).each(function(o){if(o.nodeType==o.ELEMENT_NODE){ERDF._parseFromTag(o,k,d+1)}})}},_parseTriplesFrom:function(c,e,d,a,b,f){if(!d){return}d.toLowerCase().split(" ").each(function(h){var g=ERDF.schemas.find(function(l){return false||ERDF.DELIMITERS.find(function(m){return h.startsWith(l.prefix+m)})});if(g&&b){h=h.substring(g.prefix.length+1,h.length);var k=ERDF.registerTriple(new ERDF.Resource(e),{prefix:g.prefix,name:h},(a==ERDF.RESOURCE)?new ERDF.Resource(b):new ERDF.Literal(b));if(f){f(k)}}})},_parseTypeTriplesFrom:function(a,c,b,d){if(!b){return}b.toLowerCase().split(" ").each(function(f){var e=ERDF.schemas.find(function(h){return false||ERDF.DELIMITERS.find(function(k){return f.startsWith(ERDF.HYPHEN+h.prefix+k)})});if(e&&c){f=f.substring(e.prefix.length+2,f.length);var g=ERDF.registerTriple((a==ERDF.RESOURCE)?new ERDF.Resource(c):new ERDF.Literal(c),{prefix:"rdf",name:"type"},new ERDF.Resource(e.namespace+f));if(d){d(g)}}})},_checkProfile:function(){var b=document.getElementsByTagNameNS(XMLNS.XHTML,"head");var a=b[0].getAttribute("profile");var c=false;if(a&&a.split(" ").member(XMLNS.ERDF)){return true}else{return false}},__stripHashes:function(a){return(a&&(typeof a.substring=="function")&&a.substring(0,1)=="#")?a.substring(1,a.length):a},registerSchema:function(b,a){ERDF.schemas.push({prefix:b,namespace:a})},registerTriple:function(c,a,b){if(a.prefix.toLowerCase()=="schema"){this.registerSchema(a.name,b.value)}var d=new ERDF.Triple(c,a,b);ERDF.callback(d);return d},__enhanceObject:function(){this.isResource=function(){return this.type==ERDF.RESOURCE};this.isLocal=function(){return this.isResource()&&this.value.startsWith("#")};this.isCurrentDocument=function(){return this.isResource()&&(this.value=="")};this.getId=function(){return this.isLocal()?ERDF.__stripHashes(this.value):false};this.isLiteral=function(){return this.type==ERDF.LIITERAL}},serialize:function(a){if(!a){return""}else{if(a.constructor==String){return a}else{if(a.constructor==Boolean){return a?"true":"false"}else{return a.toString()}}}}};ERDF.Triple=function(c,a,b){this.subject=c;this.predicate=a;this.object=b;this.toString=function(){return"[ERDF.Triple] "+this.subject.toString()+" "+this.predicate.prefix+":"+this.predicate.name+" "+this.object.toString()}};ERDF.Resource=function(a){this.type=ERDF.RESOURCE;this.value=a;ERDF.__enhanceObject.apply(this);this.toString=function(){return"<"+this.value+">"}};ERDF.Literal=function(a){this.type=ERDF.LITERAL;this.value=ERDF.serialize(a);ERDF.__enhanceObject.apply(this);this.toString=function(){return'"'+this.value+'"'}};var USE_ASYNCHRONOUS_REQUESTS=true;var DISCARD_UNUSED_TRIPLES=true;var PREFER_SPANS_OVER_DIVS=true;var PREFER_TITLE_OVER_TEXTNODE=false;var RESOURCE_ID_PREFIX="resource";var SHOW_DEBUG_ALERTS_WHEN_SAVING=false;var SHOW_EXTENDED_DEBUG_INFORMATION=false;var USE_ARESS_WORKAROUNDS=true;var RESOURCE_CREATED=1;var RESOURCE_REMOVED=2;var RESOURCE_SAVED=4;var RESOURCE_RELOADED=8;var RESOURCE_SYNCHRONIZED=16;var TRIPLE_REMOVE=1;var TRIPLE_ADD=2;var TRIPLE_RELOAD=4;var TRIPLE_SAVE=8;var PROCESSDATA_REF="processdata";var DataManager={init:function(){ERDF.init(DataManager._registerTriple);DataManager.__synclocal()},_triples:[],_registerTriple:function(a){DataManager._triples.push(a)},__synclocal:function(){DataManager._triples=[];ERDF.run()},__synchronizeShape:function(a){var c=ResourceManager.getResource(a.resourceId);var b=a.serialize();b.each(function(d){var f=(d.type=="resource");var e=new ERDF.Triple(new ERDF.Resource(a.resourceId),{prefix:d.prefix,name:d.name},f?new ERDF.Resource(d.value):new ERDF.Literal(d.value));DataManager.setObject(e)});return c},__storeShape:function(a){var b=DataManager.__synchronizeShape(a);b.save()},__forceExistance:function(a){if(!$(a.resourceId)){if(!$$("."+PROCESSDATA_REF)[0]){DataManager.graft(XMLNS.XHTML,document.getElementsByTagNameNS(XMLNS.XHTML,"body").item(0),["div",{"class":PROCESSDATA_REF,style:"display:none;"}])}DataManager.graft(XMLNS.XHTML,$$("."+PROCESSDATA_REF)[0],["div",{id:a.resourceId,"class":(a instanceof ORYX.Core.Canvas)?"-oryx-canvas":undefined}])}else{var c=$(a.resourceId);var b=$A(c.childNodes);b.each(function(d){c.removeChild(d)})}},__persistShape:function(b){var d=b.serialize();var a=[];var c=new ERDF.Resource(b.resourceId);DataManager.removeTriples(DataManager.query(c,undefined,undefined));d.each(function(f){var e=(f.type=="resource")?new ERDF.Resource(f.value):new ERDF.Literal(f.value);DataManager.addTriple(new ERDF.Triple(c,{prefix:f.prefix,name:f.name},e))})},__persistDOM:function(d){var c=d.getCanvas();var b=c.getChildShapes(true);var a="";b.each(function(e){DataManager.__forceExistance(e)});DataManager.__renderCanvas(d);a+=DataManager.serialize($(ERDF.__stripHashes(d.getCanvas().resourceId)),true);b.each(function(e){DataManager.__persistShape(e);a+=DataManager.serialize($(ERDF.__stripHashes(e.resourceId)),true)});return a},__renderCanvas:function(e){var b=e.getCanvas();var d=e.getStencilSets();var a=b.getChildShapes(true);DataManager.__forceExistance(b);DataManager.__persistShape(b);var c=new ERDF.Resource(b.resourceId);DataManager.removeTriples(DataManager.query(c,undefined,undefined));DataManager.addTriple(new ERDF.Triple(c,{prefix:"oryx",name:"mode"},new ERDF.Literal("writable")));DataManager.addTriple(new ERDF.Triple(c,{prefix:"oryx",name:"mode"},new ERDF.Literal("fullscreen")));d.values().each(function(f){DataManager.addTriple(new ERDF.Triple(c,{prefix:"oryx",name:"stencilset"},new ERDF.Resource(f.source().replace(/&/g,"%26"))));DataManager.addTriple(new ERDF.Triple(c,{prefix:"oryx",name:"ssnamespace"},new ERDF.Resource(f.namespace())));f.extensions().keys().each(function(g){DataManager.addTriple(new ERDF.Triple(c,{prefix:"oryx",name:"ssextension"},new ERDF.Literal(g)))})});a.each(function(f){DataManager.addTriple(new ERDF.Triple(c,{prefix:"oryx",name:"render"},new ERDF.Resource("#"+f.resourceId)))})},__counter:0,__provideId:function(){while($(RESOURCE_ID_PREFIX+DataManager.__counter)){DataManager.__counter++}return RESOURCE_ID_PREFIX+DataManager.__counter},serializeDOM:function(a){return DataManager.__persistDOM(a)},syncGlobal:function(a){return DataManager.__syncglobal(a)},__syncglobal:function(c){var b=c.getCanvas();var a=b.getChildShapes(true);a.select(function(d){return !($(d.resourceId))}).each(function(d){if(USE_ARESS_WORKAROUNDS){var e=d.properties["raziel-type"];var g=' '+e+"";var f=ResourceManager.__createResource(g);d.resourceId=f.id()}else{var f=ResourceManager.__createResource();d.resourceId=f.id()}});a.each(function(d){DataManager.__storeShape(d)})},serialize:function(f,b){if(f.nodeType==f.ELEMENT_NODE){var e=$A(f.childNodes);var c=$A(f.attributes);var d=new String(f.getAttribute("class"));var g=d.split(" ").member("transient");if(g){return""}var a="<"+f.nodeName;if(!b){a+=' xmlns="'+(f.namespaceURI?f.namespaceURI:XMLNS.XHTML)+'" xmlns:oryx="http://oryx-editor.org"'}c.each(function(h){a+=" "+h.nodeName+'="'+h.nodeValue+'"'});if(e.length==0){a+="/>"}else{a+=">";e.each(function(h){a+=DataManager.serialize(h,true)});a+=""+f.nodeName+">"}return a}else{if(f.nodeType==f.TEXT_NODE){return f.nodeValue}}},addTriple:function(c){if(!c.subject.type==ERDF.LITERAL){throw"Cannot add the triple "+c.toString()+" because the subject is not a resource."}var a=ERDF.__stripHashes(c.subject.value);var b=$(a);if(!b){throw"Cannot add the triple "+c.toString()+' because the subject "'+a+'" is not in the document.'}if(c.object.type==ERDF.LITERAL){DataManager.graft(XMLNS.XHTML,b,["span",{"class":(c.predicate.prefix+"-"+c.predicate.name)},c.object.value.escapeHTML()])}else{DataManager.graft(XMLNS.XHTML,b,["a",{rel:(c.predicate.prefix+"-"+c.predicate.name),href:c.object.value}])}return true},removeTriples:function(b){var a=b.select(function(c){return DataManager.__removeTriple(c)});return a},removeTriple:function(b){var a=DataManager.__removeTriple(b);return a},__removeTriple:function(d){if(!d.subject.type==ERDF.LITERAL){throw"Cannot remove the triple "+d.toString()+" because the subject is not a resource."}var b=ERDF.__stripHashes(d.subject.value);var c=$(b);if(!c){throw"Cannot remove the triple "+d.toString()+" because the subject is not in the document."}if(d.object.type==ERDF.LITERAL){var a=DataManager.__removeTripleRecursively(d,c);return a}},__removeTripleRecursively:function(e,d){if(d.nodeType!=d.ELEMENT_NODE){return false}var b=new String(d.getAttribute("class"));var a=$A(d.childNodes);if(b.include(e.predicate.prefix+"-"+e.predicate.name)){var c=d.textContent;if((e.object.type==ERDF.LITERAL)&&(e.object.value==c)){d.parentNode.removeChild(d)}return true}else{a.each(function(f){DataManager.__removeTripleRecursively(e,f)});return false}},graft:function(g,f,d,l){l=(l||(f&&f.ownerDocument)||document);var h;if(d===undefined){echo("Can't graft an undefined value")}else{if(d.constructor==String){h=l.createTextNode(d)}else{for(var c=0;c1)?" There is more than one raziel:entry URL.":" There is no raziel:entry URL."));return false},__createResource:function(e){var d=DataManager.query(new ERDF.Resource(""),{prefix:"raziel",name:"collection"},undefined);if((d.length==1)&&(d[0].object.isResource())){var b=d[0].object.value;var c=undefined;var a=e?e:'';ResourceManager.__request("POST",b,a,function(){var f=(this.responseXML);var h=f.childNodes[0];var g=h.getAttribute("id");if(!$$("."+PROCESSDATA_REF)[0]){DataManager.graft(XMLNS.XHTML,document.getElementsByTagNameNS(XMLNS.XHTML,"body").item(0),["div",{"class":PROCESSDATA_REF,style:"display:none;"}])}$$("."+PROCESSDATA_REF)[0].appendChild(h.cloneNode(true));DataManager.__synclocal();c=new ResourceManager.getResource(g);ResourceManager.__resourceActionSucceeded(this,RESOURCE_CREATED,undefined)},function(){ResourceManager.__resourceActionFailed(this,RESOURCE_CREATED,undefined)},false);return c}throw"Could not create resource! raziel:collection URL is missing!";return false},__Resource:function(b,a){this.__id=b;this.__url=a;this.id=function(){return this.__id};this.url=function(){return this.__url};this.reload=function(){var d=this.__url;var c=this.__id;ResourceManager.__request("GET",d,null,function(){ResourceManager.__resourceActionSucceeded(this,RESOURCE_RELOADED,c)},function(){ResourceManager.__resourceActionFailed(this,RESURCE_RELOADED,c)},USE_ASYNCHRONOUS_REQUESTS)};this.save=function(e){var d=this.__url;var c=this.__id;data=DataManager.serialize($(c));ResourceManager.__request("PUT",d,data,function(){ResourceManager.__resourceActionSucceeded(this,e?RESOURCE_SAVED|RESOURCE_SYNCHRONIZED:RESOURCE_SAVED,c)},function(){ResourceManager.__resourceActionFailed(this,e?RESOURCE_SAVED|RESOURCE_SYNCHRONIZED:RESOURCE.SAVED,c)},USE_ASYNCHRONOUS_REQUESTS)};this.remove=function(){var d=this.__url;var c=this.__id;ResourceManager.__request("DELETE",d,null,function(){ResourceManager.__resourceActionSucceeded(this,RESOURCE_REMOVED,c)},function(){ResourceManager.__resourceActionFailed(this,RESOURCE_REMOVED,c)},USE_ASYNCHRONOUS_REQUESTS)}},request:function(c,a){var b={method:"get",asynchronous:true,parameters:{}};Object.extend(b,a||{});var d=Hash.toQueryString(b.parameters);if(d){c+=(c.include("?")?"&":"?")+d}return ResourceManager.__request(b.method,c,b.data,(b.onSuccess instanceof Function?function(){b.onSuccess(this)}:undefined),(b.onFailure instanceof Function?function(){b.onFailure(this)}:undefined),b.asynchronous&&USE_ASYNCHRONOUS_REQUESTS,b.headers)},__request:function(a,b,f,n,m,d,c){var g=Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")});if(!g){if(!this.__corrupt){throw"This browser does not provide any AJAX functionality. You will not be able to use the software provided with the page you are viewing. Please consider installing appropriate extensions."}this.__corrupt=true;return false}if(n instanceof Function){g.onload=n}if(m instanceof Function){g.onerror=m}var k=$H(c);k.keys().each(function(e){g.setRequestHeader(e,k[e])});try{if(SHOW_DEBUG_ALERTS_WHEN_SAVING){alert(a+" "+b+"\n"+SHOW_EXTENDED_DEBUG_INFORMATION?f:"")}g.open(a,b,!d?false:true);g.send(f)}catch(l){return false}return true},__resourceActionSucceeded:function(g,c,f){var a=g.status;var b=g.responseText;if(SHOW_DEBUG_ALERTS_WHEN_SAVING){alert(a+" "+url+"\n"+SHOW_EXTENDED_DEBUG_INFORMATION?data:"")}if(a>=300){throw"The server responded with an error: "+a+"\n"+(SHOW_EXTENDED_DEBUG_INFORMATION?+data:"If you need additional information here, including the data sent by the server, consider setting SHOW_EXTENDED_DEBUG_INFORMATION to true.")}switch(c){case RESOURCE_REMOVED:var b=(g.responseXML);var e=b.childNodes[0];var f=e.getAttribute("id");var d=document.getElementById(f);d.parentNode.removeChild(d);break;case RESOURCE_CREATED:break;case RESOURCE_SAVED|RESOURCE_SYNCHRONIZED:DataManager.__synclocal();case RESOURCE_SAVED:break;case RESOURCE_RELOADED:var b=(g.responseXML);var e=b.childNodes[0];var f=e.getAttribute("id");var d=document.getElementById(f);d.parentNode.removeChild(d);if(!$$(PROCESSDATA_REF)[0]){DataManager.graft(XMLNS.XHTML,document.getElementsByTagNameNS(XMLNS.XHTML,"body").item(0),["div",{"class":PROCESSDATA_REF,style:"display:none;"}])}$$(PROCESSDATA_REF)[0].appendChild(e.cloneNode(true));DataManager.__synclocal();break;default:DataManager.__synclocal()}ResourceManager.__dispatchEvent(new ResourceManager.__Event(c,f))},__resourceActionFailed:function(c,a,b){throw"Fatal: Resource action failed. There is something horribly wrong with either the server, the transport protocol or your online status. Sure you're online?"}};var Clazz=function(){};Clazz.prototype.construct=function(){};Clazz.extend=function(e){var a=function(){if(arguments[0]!==Clazz){this.construct.apply(this,arguments)}};var d=new this(Clazz);var b=this.prototype;for(var f in e){var c=e[f];if(c instanceof Function){c.$=b}d[f]=c}a.prototype=d;a.extend=this.extend;return a};if(!ORYX){var ORYX={}}if(!ORYX.CONFIG){ORYX.CONFIG={}}ORYX.CONFIG.ROOT_PATH="editor/";ORYX.CONFIG.EXPLORER_PATH="explorer";ORYX.CONFIG.LIBS_PATH="libs";ORYX.CONFIG.SERVER_HANDLER_ROOT="service";ORYX.CONFIG.SERVER_EDITOR_HANDLER=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/editor";ORYX.CONFIG.SERVER_MODEL_HANDLER=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/model";ORYX.CONFIG.STENCILSET_HANDLER=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/editor_stencilset?embedsvg=true&url=true&namespace=";ORYX.CONFIG.STENCIL_SETS_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/editor_stencilset";ORYX.CONFIG.PLUGINS_CONFIG="editor-app/plugins.xml";ORYX.CONFIG.SYNTAXCHECKER_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/syntaxchecker";ORYX.CONFIG.DEPLOY_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/model/deploy";ORYX.CONFIG.MODEL_LIST_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/models";ORYX.CONFIG.FORM_FLOW_LIST_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/formflows";ORYX.CONFIG.FORM_FLOW_IMAGE_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/formflow";ORYX.CONFIG.FORM_LIST_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/forms";ORYX.CONFIG.FORM_IMAGE_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/form";ORYX.CONFIG.SUB_PROCESS_LIST_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/subprocesses";ORYX.CONFIG.SUB_PROCESS_IMAGE_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/subprocess";ORYX.CONFIG.TEST_SERVICE_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/service/";ORYX.CONFIG.SERVICE_LIST_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/services";ORYX.CONFIG.CONDITION_ELEMENT_LIST_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/conditionelements";ORYX.CONFIG.VARIABLEDEF_ELEMENT_LIST_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/variabledefinitionelements";ORYX.CONFIG.VALIDATOR_LIST_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/validators";ORYX.CONFIG.SS_EXTENSIONS_FOLDER=ORYX.CONFIG.ROOT_PATH+"stencilsets/extensions/";ORYX.CONFIG.SS_EXTENSIONS_CONFIG=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/editor_ssextensions";ORYX.CONFIG.ORYX_NEW_URL="/new";ORYX.CONFIG.BPMN_LAYOUTER=ORYX.CONFIG.ROOT_PATH+"bpmnlayouter";ORYX.CONFIG.EXPRESSION_METADATA_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/expression-metadata";ORYX.CONFIG.DATASOURCE_METADATA_URL=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/datasource-metadata";if(!ORYX){var ORYX={}}if(!ORYX.CONFIG){ORYX.CONFIG={}}ORYX.CONFIG.BACKEND_SWITCH=true;ORYX.CONFIG.PANEL_LEFT_WIDTH=250;ORYX.CONFIG.PANEL_RIGHT_COLLAPSED=true;ORYX.CONFIG.PANEL_RIGHT_WIDTH=300;ORYX.CONFIG.APPNAME="Flowable";ORYX.CONFIG.WEB_URL=".";ORYX.CONFIG.BLANK_IMAGE=ORYX.CONFIG.LIBS_PATH+"/ext-2.0.2/resources/images/default/s.gif";ORYX.CONFIG.OFFSET_HEADER=61;ORYX.CONFIG.SHOW_GRIDLINE=true;ORYX.CONFIG.MODE_READONLY="readonly";ORYX.CONFIG.MODE_FULLSCREEN="fullscreen";ORYX.CONFIG.WINDOW_HEIGHT=800;ORYX.CONFIG.PREVENT_LOADINGMASK_AT_READY=false;ORYX.CONFIG.PLUGINS_ENABLED=true;ORYX.CONFIG.PLUGINS_FOLDER="Plugins/";ORYX.CONFIG.BPMN20_SCHEMA_VALIDATION_ON=true;ORYX.CONFIG.NAMESPACE_ORYX="http://www.b3mn.org/oryx";ORYX.CONFIG.NAMESPACE_SVG="http://www.w3.org/2000/svg";ORYX.CONFIG.CANVAS_WIDTH=1200;ORYX.CONFIG.CANVAS_HEIGHT=1050;ORYX.CONFIG.CANVAS_RESIZE_INTERVAL=100;ORYX.CONFIG.CANVAS_MIN_WIDTH=800;ORYX.CONFIG.CANVAS_MIN_HEIGHT=300;ORYX.CONFIG.SELECTED_AREA_PADDING=4;ORYX.CONFIG.CANVAS_BACKGROUND_COLOR="none";ORYX.CONFIG.GRID_DISTANCE=30;ORYX.CONFIG.GRID_ENABLED=true;ORYX.CONFIG.ZOOM_OFFSET=0.1;ORYX.CONFIG.DEFAULT_SHAPE_MARGIN=60;ORYX.CONFIG.SCALERS_SIZE=7;ORYX.CONFIG.MINIMUM_SIZE=20;ORYX.CONFIG.MAXIMUM_SIZE=10000;ORYX.CONFIG.OFFSET_MAGNET=15;ORYX.CONFIG.OFFSET_EDGE_LABEL_TOP=8;ORYX.CONFIG.OFFSET_EDGE_LABEL_BOTTOM=8;ORYX.CONFIG.OFFSET_EDGE_BOUNDS=5;ORYX.CONFIG.COPY_MOVE_OFFSET=30;ORYX.CONFIG.BORDER_OFFSET=14;ORYX.CONFIG.MAX_NUM_SHAPES_NO_GROUP=20;ORYX.CONFIG.SHAPEMENU_CREATE_OFFSET_CORNER=30;ORYX.CONFIG.SHAPEMENU_CREATE_OFFSET=45;ORYX.CONFIG.SHAPEMENU_RIGHT="Oryx_Right";ORYX.CONFIG.SHAPEMENU_BOTTOM="Oryx_Bottom";ORYX.CONFIG.SHAPEMENU_LEFT="Oryx_Left";ORYX.CONFIG.SHAPEMENU_TOP="Oryx_Top";ORYX.CONFIG.MORPHITEM_DISABLED="Oryx_MorphItem_disabled";ORYX.CONFIG.TYPE_STRING="string";ORYX.CONFIG.TYPE_BOOLEAN="boolean";ORYX.CONFIG.TYPE_INTEGER="integer";ORYX.CONFIG.TYPE_FLOAT="float";ORYX.CONFIG.TYPE_COLOR="color";ORYX.CONFIG.TYPE_DATE="date";ORYX.CONFIG.TYPE_CHOICE="choice";ORYX.CONFIG.TYPE_URL="url";ORYX.CONFIG.TYPE_DIAGRAM_LINK="diagramlink";ORYX.CONFIG.TYPE_COMPLEX="complex";ORYX.CONFIG.TYPE_MULTIPLECOMPLEX="multiplecomplex";ORYX.CONFIG.TYPE_TEXT="text";ORYX.CONFIG.TYPE_FLOWABLE_MULTIINSTANCE="flowable-multiinstance";ORYX.CONFIG.TYPE_MODEL_LINK="modellink";ORYX.CONFIG.TYPE_FORM_FLOW_LINK="formflowlink";ORYX.CONFIG.TYPE_FORM_LINK="formlink";ORYX.CONFIG.TYPE_SUB_PROCESS_LINK="subprocess-link";ORYX.CONFIG.TYPE_SERVICE_LINK="servicelink";ORYX.CONFIG.TYPE_CONDITIONS="conditions";ORYX.CONFIG.TYPE_VARIABLES="variables";ORYX.CONFIG.TYPE_LISTENER="listener";ORYX.CONFIG.TYPE_EPC_FREQ="epcfrequency";ORYX.CONFIG.TYPE_GLOSSARY_LINK="glossarylink";ORYX.CONFIG.TYPE_EXPRESSION="expression";ORYX.CONFIG.TYPE_DATASOURCE="datasource";ORYX.CONFIG.TYPE_DATASOURCE_MINIMAL="datasource-minimal";ORYX.CONFIG.TYPE_VALIDATORS="validators";ORYX.CONFIG.TYPE_FLOWABLE_HTTP_REQUEST_METHOD="flowable-http-request-method";ORYX.CONFIG.LABEL_LINE_DISTANCE=2;ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT=12;ORYX.CONFIG.ENABLE_MORPHMENU_BY_HOVER=false;ORYX.CONFIG.EDITOR_ALIGN_BOTTOM=1;ORYX.CONFIG.EDITOR_ALIGN_MIDDLE=2;ORYX.CONFIG.EDITOR_ALIGN_TOP=4;ORYX.CONFIG.EDITOR_ALIGN_LEFT=8;ORYX.CONFIG.EDITOR_ALIGN_CENTER=16;ORYX.CONFIG.EDITOR_ALIGN_RIGHT=32;ORYX.CONFIG.EDITOR_ALIGN_SIZE=48;ORYX.CONFIG.EVENT_MOUSEDOWN="mousedown";ORYX.CONFIG.EVENT_MOUSEUP="mouseup";ORYX.CONFIG.EVENT_MOUSEOVER="mouseover";ORYX.CONFIG.EVENT_MOUSEOUT="mouseout";ORYX.CONFIG.EVENT_MOUSEMOVE="mousemove";ORYX.CONFIG.EVENT_DBLCLICK="dblclick";ORYX.CONFIG.EVENT_KEYDOWN="keydown";ORYX.CONFIG.EVENT_KEYUP="keyup";ORYX.CONFIG.EVENT_LOADED="editorloaded";ORYX.CONFIG.EVENT_SAVED="editorSaved";ORYX.CONFIG.EVENT_EXECUTE_COMMANDS="executeCommands";ORYX.CONFIG.EVENT_STENCIL_SET_LOADED="stencilSetLoaded";ORYX.CONFIG.EVENT_SELECTION_CHANGED="selectionchanged";ORYX.CONFIG.EVENT_SHAPEADDED="shapeadded";ORYX.CONFIG.EVENT_SHAPEREMOVED="shaperemoved";ORYX.CONFIG.EVENT_PROPERTY_CHANGED="propertyChanged";ORYX.CONFIG.EVENT_DRAGDROP_START="dragdrop.start";ORYX.CONFIG.EVENT_SHAPE_MENU_CLOSE="shape.menu.close";ORYX.CONFIG.EVENT_DRAGDROP_END="dragdrop.end";ORYX.CONFIG.EVENT_RESIZE_START="resize.start";ORYX.CONFIG.EVENT_RESIZE_END="resize.end";ORYX.CONFIG.EVENT_DRAGDOCKER_DOCKED="dragDocker.docked";ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW="highlight.showHighlight";ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE="highlight.hideHighlight";ORYX.CONFIG.EVENT_LOADING_ENABLE="loading.enable";ORYX.CONFIG.EVENT_LOADING_DISABLE="loading.disable";ORYX.CONFIG.EVENT_LOADING_STATUS="loading.status";ORYX.CONFIG.EVENT_OVERLAY_SHOW="overlay.show";ORYX.CONFIG.EVENT_OVERLAY_HIDE="overlay.hide";ORYX.CONFIG.EVENT_ARRANGEMENT_TOP="arrangement.setToTop";ORYX.CONFIG.EVENT_ARRANGEMENT_BACK="arrangement.setToBack";ORYX.CONFIG.EVENT_ARRANGEMENT_FORWARD="arrangement.setForward";ORYX.CONFIG.EVENT_ARRANGEMENT_BACKWARD="arrangement.setBackward";ORYX.CONFIG.EVENT_PROPWINDOW_PROP_CHANGED="propertyWindow.propertyChanged";ORYX.CONFIG.EVENT_LAYOUT_ROWS="layout.rows";ORYX.CONFIG.EVENT_LAYOUT_BPEL="layout.BPEL";ORYX.CONFIG.EVENT_LAYOUT_BPEL_VERTICAL="layout.BPEL.vertical";ORYX.CONFIG.EVENT_LAYOUT_BPEL_HORIZONTAL="layout.BPEL.horizontal";ORYX.CONFIG.EVENT_LAYOUT_BPEL_SINGLECHILD="layout.BPEL.singlechild";ORYX.CONFIG.EVENT_LAYOUT_BPEL_AUTORESIZE="layout.BPEL.autoresize";ORYX.CONFIG.EVENT_AUTOLAYOUT_LAYOUT="autolayout.layout";ORYX.CONFIG.EVENT_UNDO_EXECUTE="undo.execute";ORYX.CONFIG.EVENT_UNDO_ROLLBACK="undo.rollback";ORYX.CONFIG.EVENT_UNDO_RESET="undo.reset";ORYX.CONFIG.EVENT_BUTTON_UPDATE="toolbar.button.update";ORYX.CONFIG.EVENT_LAYOUT="layout.dolayout";ORYX.CONFIG.EVENT_GLOSSARY_LINK_EDIT="glossary.link.edit";ORYX.CONFIG.EVENT_GLOSSARY_SHOW="glossary.show.info";ORYX.CONFIG.EVENT_GLOSSARY_NEW="glossary.show.new";ORYX.CONFIG.EVENT_DOCKERDRAG="dragTheDocker";ORYX.CONFIG.EVENT_CANVAS_SCROLL="canvas.scroll";ORYX.CONFIG.EVENT_SHOW_PROPERTYWINDOW="propertywindow.show";ORYX.CONFIG.EVENT_ABOUT_TO_SAVE="file.aboutToSave";ORYX.CONFIG.EVENT_EDITOR_INIT_COMPLETED="editor.init.completed";ORYX.CONFIG.ACTION_DELETE_COMPLETED="delete.action.completed";ORYX.CONFIG.SELECTION_HIGHLIGHT_SIZE=5;ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR="#4444FF";ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR2="#9999FF";ORYX.CONFIG.SELECTION_HIGHLIGHT_STYLE_CORNER="corner";ORYX.CONFIG.SELECTION_HIGHLIGHT_STYLE_RECTANGLE="rectangle";ORYX.CONFIG.SELECTION_VALID_COLOR="#00FF00";ORYX.CONFIG.SELECTION_INVALID_COLOR="#FF0000";ORYX.CONFIG.DOCKER_DOCKED_COLOR="#00FF00";ORYX.CONFIG.DOCKER_UNDOCKED_COLOR="#FF0000";ORYX.CONFIG.DOCKER_SNAP_OFFSET=10;ORYX.CONFIG.EDIT_OFFSET_PASTE=10;ORYX.CONFIG.KEY_CODE_X=88;ORYX.CONFIG.KEY_CODE_C=67;ORYX.CONFIG.KEY_CODE_V=86;ORYX.CONFIG.KEY_CODE_DELETE=46;ORYX.CONFIG.KEY_CODE_META=224;ORYX.CONFIG.KEY_CODE_BACKSPACE=8;ORYX.CONFIG.KEY_CODE_LEFT=37;ORYX.CONFIG.KEY_CODE_RIGHT=39;ORYX.CONFIG.KEY_CODE_UP=38;ORYX.CONFIG.KEY_CODE_DOWN=40;ORYX.CONFIG.KEY_Code_enter=12;ORYX.CONFIG.KEY_Code_left=37;ORYX.CONFIG.KEY_Code_right=39;ORYX.CONFIG.KEY_Code_top=38;ORYX.CONFIG.KEY_Code_bottom=40;ORYX.CONFIG.META_KEY_META_CTRL="metactrl";ORYX.CONFIG.META_KEY_ALT="alt";ORYX.CONFIG.META_KEY_SHIFT="shift";ORYX.CONFIG.KEY_ACTION_DOWN="down";ORYX.CONFIG.KEY_ACTION_UP="up";ORYX.CONFIG.FORM_ROW_WIDTH=350;ORYX.CONFIG.FORM_GROUP_MARGIN=5;ORYX.CONFIG.FORM_GROUP_EMPTY_HEIGHT=100;ORYX.CONFIG.FORM_ELEMENT_ID_PREFIX="http://b3mn.org/stencilset/xforms";ORYX.CONFIG.FORM_ELEMENT_TYPE_ROOT="http://b3mn.org/stencilset/xforms#XForm";ORYX.CONFIG.FORM_ELEMENT_TYPE_GROUP="http://b3mn.org/stencilset/xforms#Group";ORYX.CONFIG.FORM_ELEMENT_TYPE_REPEATING_GROUP="http://b3mn.org/stencilset/xforms#RepeatingGroup";ORYX.CONFIG.FORM_ELEMENT_TYPE_LABEL_FIELD="http://b3mn.org/stencilset/xforms#LabelField";function printf(){var a=arguments[0];for(var b=1;b =ORYX_LOGLEVEL_TRACE){ORYX.Log.__log("TRACE",arguments)}},debug:function(){if(ORYX_LOGLEVEL>=ORYX_LOGLEVEL_DEBUG){ORYX.Log.__log("DEBUG",arguments)}},info:function(){if(ORYX_LOGLEVEL>=ORYX_LOGLEVEL_INFO){ORYX.Log.__log("INFO",arguments)}},warn:function(){if(ORYX_LOGLEVEL>=ORYX_LOGLEVEL_WARN){ORYX.Log.__log("WARN",arguments)}},error:function(){if(ORYX_LOGLEVEL>=ORYX_LOGLEVEL_ERROR){ORYX.Log.__log("ERROR",arguments)}},fatal:function(){if(ORYX_LOGLEVEL>=ORYX_LOGLEVEL_FATAL){ORYX.Log.__log("FATAL",arguments)}},__log:function(c,a){a[0]=(new Date()).getTime()+" "+c+" "+a[0];var b=printf.apply(null,a);ORYX.Log.__appenders.each(function(d){d.append(b)})},addAppender:function(a){ORYX.Log.__appenders.push(a)}},load:function(){ORYX.Log.debug("Oryx begins loading procedure.");if((typeof Prototype=="undefined")||(typeof Element=="undefined")||(typeof Element.Methods=="undefined")||parseFloat(Prototype.Version.split(".")[0]+"."+Prototype.Version.split(".")[1])<1.5){throw ("Application requires the Prototype JavaScript framework >= 1.5.3")}ORYX.Log.debug("Prototype > 1.5 found.");ORYX._load()},_load:function(){ORYX.loadPlugins()},loadPlugins:function(){if(ORYX.CONFIG.PLUGINS_ENABLED){ORYX._loadPlugins()}else{ORYX.Log.warn("Ignoring plugins, loading Core only.")}init()},_loadPlugins:function(b){ORYX.availablePlugins.length=0;var e=jQuery.parseXML(b);var a=[];var c=$A(e.getElementsByTagName("properties"));c.each(function(g){var f=$A(g.childNodes);f.each(function(l){var k=new Hash();var h=$A(l.attributes);h.each(function(m){k.set(m.nodeName,m.nodeValue)});if(h.length>0){a.push(k)}})});var d=e.getElementsByTagName("plugin");$A(d).each(function(h){var o=new Hash();$A(h.attributes).each(function(q){o.set(q.nodeName,q.nodeValue)});if(!o.get("name")){ORYX.Log.error("A plugin is not providing a name. Ingnoring this plugin.");return}if(!o.get("source")){ORYX.Log.error("Plugin with name '%0' doesn't provide a source attribute.",o.get("name"));return}var m=h.getElementsByTagName("property");var n=[];$A(m).each(function(s){var r=new Hash();var q=$A(s.attributes);q.each(function(t){r.set(t.nodeName,t.nodeValue)});if(q.length>0){n.push(r)}});n=n.concat(a);o.set("properties",n);var k=h.getElementsByTagName("requires");var p;$A(k).each(function(r){var q=$A(r.attributes).find(function(s){return s.name=="namespace"});if(q&&q.nodeValue){if(!p){p={namespaces:[]}}p.namespaces.push(q.nodeValue)}});if(p){o.set("requires",p)}var l=h.getElementsByTagName("notUsesIn");var g;$A(l).each(function(r){var q=$A(r.attributes).find(function(s){return s.name=="namespace"});if(q&&q.nodeValue){if(!g){g={namespaces:[]}}g.namespaces.push(q.nodeValue)}});if(g){o.set("notUsesIn",g)}var f=ORYX.PATH+ORYX.CONFIG.PLUGINS_FOLDER+o.get("source");ORYX.Log.debug("Requireing '%0'",f);ORYX.Log.info("Plugin '%0' successfully loaded.",o.get("name"));ORYX.availablePlugins.push(o)})},_loadPluginsOnFails:function(a){ORYX.Log.error("Plugin configuration file not available.")}});if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}if(!ORYX.Core.SVG){ORYX.Core.SVG={}}ORYX.Core.SVG.EditPathHandler=Clazz.extend({construct:function(){arguments.callee.$.construct.apply(this,arguments);this.x=0;this.y=0;this.oldX=0;this.oldY=0;this.deltaWidth=1;this.deltaHeight=1;this.d=""},init:function(a,f,d,b,c,e){this.x=a;this.y=f;this.oldX=d;this.oldY=b;this.deltaWidth=c;this.deltaHeight=e;this.d=""},editPointsAbs:function(c){if(c instanceof Array){var d=[];var a,e;for(var b=0;b 1){var G=parseFloat(n[0]);var F=parseFloat(n[1]);var E=parseFloat(n[0]);var D=parseFloat(n[1]);for(var z=0;z 1){var g=(this.oldWidth===0)?0:this.width/this.oldWidth;var e=(this.oldHeight===0)?0:this.height/this.oldHeight;var b="";for(var c=0;c =this.x&&d<=this.x+this.width&&b>=this.y&&b<=this.y+this.height);break;case"Circle":return ORYX.Core.Math.isPointInEllipse(d,b,this.x+this.width/2,this.y+this.height/2,this.radiusX,this.radiusX);break;case"Ellipse":return ORYX.Core.Math.isPointInEllipse(d,b,this.x+this.radiusX,this.y+this.radiusY,this.radiusX,this.radiusY);break;case"Line":return ORYX.Core.Math.isPointInLine(d,b,this.x,this.y,this.x+this.width,this.y+this.height);break;case"Polyline":var a=this.element.getAttributeNS(null,"points");if(a){a=a.replace(/,/g," ").split(" ").without("");a=a.collect(function(e){return parseFloat(e)});return ORYX.Core.Math.isPointInPolygone(d,b,a)}else{return false}break;case"Path":if(!this.handler){var c=new PathParser();this.handler=new ORYX.Core.SVG.PointsPathHandler();c.setHandler(this.handler);c.parsePath(this.element)}return ORYX.Core.Math.isPointInPolygone(d,b,this.handler.points);break;default:return false}},isVisible:function(c){if(this.visible!==undefined){return this.visible}if(!c){c=this.element}var b=false;try{b=!!c.ownerSVGElement}catch(g){}if(b){if(ORYX.Editor.checkClassType(c,SVGGElement)){if(c.className&&c.className.baseVal=="me"){this.visible=true;return this.visible}}var f=c.getAttributeNS(null,"fill");var d=c.getAttributeNS(null,"stroke");if(f&&f=="none"&&d&&d=="none"){this.visible=false}else{var a=c.getAttributeNS(null,"display");if(!a){this.visible=this.isVisible(c.parentNode)}else{if(a=="none"){this.visible=false}else{this.visible=true}}}}else{this.visible=true}return this.visible},toString:function(){return(this.element)?"SVGShape "+this.element.id:"SVGShape "+this.element}});if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}if(!ORYX.Core.SVG){ORYX.Core.SVG={}}ORYX.Core.SVG.Label=Clazz.extend({_characterSets:["%W","@","m","wDGMOQ√ñ#+=<>~^","ABCHKNRSUVXZ√ú√Ñ&","bdghnopqux√∂√ºETY1234567890√ü_¬ß${}*¬¥`¬µ‚Ǩ","aeksvyz√§FLP?¬∞¬≤¬≥","c-",'rtJ"/()[]:;!|\\',"fjI., ","'","il"],_characterSetValues:[15,14,13,11,10,9,8,7,6,5,4,3],construct:function(m){arguments.callee.$.construct.apply(this,arguments);if(!m.textElement){throw"Label: No parameter textElement."}else{if(!ORYX.Editor.checkClassType(m.textElement,SVGTextElement)){throw"Label: Parameter textElement is not an SVGTextElement."}}this.invisibleRenderPoint=-5000;this.node=m.textElement;this.node.setAttributeNS(null,"stroke-width","0pt");this.node.setAttributeNS(null,"letter-spacing","0px");this.shapeId=m.shapeId;this.id;this.fitToElemId;this.edgePosition;this.x;this.y;this.oldX;this.oldY;this.isVisible=true;this._text;this._verticalAlign;this._horizontalAlign;this._rotate;this._rotationPoint;this.anchorLeft;this.anchorRight;this.anchorTop;this.anchorBottom;this._isChanged=true;var k=this.node.getAttributeNS(null,"id");if(k){this.id=k}this.fitToElemId=this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"fittoelem");if(this.fitToElemId){this.fitToElemId=this.shapeId+this.fitToElemId}var f=this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"align");if(f){f=f.replace(/,/g," ");f=f.split(" ");f=f.without("");f.each((function(e){switch(e){case"top":case"middle":case"bottom":if(!this._verticalAlign){this._originVerticalAlign=this._verticalAlign=e}break;case"left":case"center":case"right":if(!this._horizontalAlign){this._originHorizontalAlign=this._horizontalAlign=e}break}}).bind(this))}this.edgePosition=this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"edgePosition");if(this.edgePosition){this.originEdgePosition=this.edgePosition=this.edgePosition.toLowerCase()}this.offsetTop=this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"offsetTop")||ORYX.CONFIG.OFFSET_EDGE_LABEL_TOP;if(this.offsetTop){this.offsetTop=parseInt(this.offsetTop)}this.offsetBottom=this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"offsetBottom")||ORYX.CONFIG.OFFSET_EDGE_LABEL_BOTTOM;if(this.offsetBottom){this.offsetBottom=parseInt(this.offsetBottom)}var l=this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"rotate");if(l){try{this._rotate=parseFloat(l)}catch(g){this._rotate=0}}else{this._rotate=0}var b=this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"anchors");if(b){b=b.replace("/,/g"," ");var a=b.split(" ").without("");for(var d=0;d h){var q=0;var n=0;var o=this.getTrimmedTextLength(p.textContent);for(var g=0;g h-2){var c=this.node.ownerDocument.createElementNS(ORYX.CONFIG.NAMESPACE_SVG,"tspan");if(n<=q){n=(g==0)?g:g-1;c.textContent=p.textContent.slice(q,n).trim()}else{c.textContent=p.textContent.slice(q,++n).trim()}c.setAttributeNS(null,"x",this.invisibleRenderPoint);c.setAttributeNS(null,"y",this.invisibleRenderPoint);d.push(c);q=n}else{var a=p.textContent.charAt(g);if(a==" "||a=="-"||a=="."||a==","||a==";"||a==":"){n=g}}}p.textContent=p.textContent.slice(q).trim()}d.push(p)}while(this.node.hasChildNodes()){this.node.removeChild(this.node.childNodes[0])}while(d.length>0){this.node.appendChild(d.shift())}}}catch(m){ORYX.Log.fatal("Error "+m)}window.setTimeout(this._positionText.bind(this),0)},_positionText:function(){try{var d=this.node.childNodes;var m=this.getFontSize(this.node);var b=[];var l=this.x,k=this.y;if(this.position){l=this.position.x;k=this.position.y}l=Math.floor(l);k=Math.floor(k);var f=0,a=[];var g=(this.indices||$R(0,d.length-1).toArray());var c=g.length;g.each((function(n){if("undefined"==typeof n){return}var o=d[f++];if(o.textContent.trim()===""){b.push(o)}else{var e=0;switch(this._verticalAlign){case"bottom":e=-(c-n-1)*(m);break;case"middle":e=-(c/2-n-1)*(m);e-=ORYX.CONFIG.LABEL_LINE_DISTANCE/2;break;case"top":e=n*(m);e+=m;break}o.setAttributeNS(null,"dy",Math.floor(e));o.setAttributeNS(null,"x",l);o.setAttributeNS(null,"y",k);a.push(n)}}).bind(this));a.length=d.length;this.indices=this.indices||a;b.each(function(e){this.node.removeChild(e)}.bind(this));switch(this._horizontalAlign){case"left":this.node.setAttributeNS(null,"text-anchor","start");break;case"center":this.node.setAttributeNS(null,"text-anchor","middle");break;case"right":this.node.setAttributeNS(null,"text-anchor","end");break}}catch(h){this._isChanged=true}if(this.isVisible){this.node.removeAttributeNS(null,"visibility")}delete this._isUpdating;(this.changeCallbacks||[]).each(function(e){e.apply(e)})},_getRenderedTextLength:function(c,d,b,a){if(d===undefined){return c.getComputedTextLength()}else{return c.getSubStringLength(d,b)}},_estimateTextWidth:function(d,c){var b=0;for(var a=0;a =0){return this._characterSetValues[a]}}return 9},getReferencedElementWidth:function(){var a=this.node.ownerDocument.getElementById(this.fitToElemId);if(a){var b=a.getBBox();if(b){return(this._rotate!=0&&this._rotate%180!=0&&this._rotate%90==0?b.height:b.width)}}return undefined},text:function(){switch(arguments.length){case 0:return this._text;break;case 1:var a=this._text;if(arguments[0]){this._text=arguments[0].toString();if(this._text!=null&&this._text!=undefined){this._text=this._text.replace(/ {2,}/g," ")}}else{this._text=""}if(a!==this._text){this._isChanged=true;this._textHasChanged=true}break;default:break}},getOriginVerticalAlign:function(){return this._originVerticalAlign},verticalAlign:function(){switch(arguments.length){case 0:return this._verticalAlign;case 1:if(["top","middle","bottom"].member(arguments[0])){var a=this._verticalAlign;this._verticalAlign=arguments[0];if(this._verticalAlign!==a){this._isChanged=true}}break;default:break}},getOriginHorizontalAlign:function(){return this._originHorizontalAlign},horizontalAlign:function(){switch(arguments.length){case 0:return this._horizontalAlign;case 1:if(["left","center","right"].member(arguments[0])){var a=this._horizontalAlign;this._horizontalAlign=arguments[0];if(this._horizontalAlign!==a){this._isChanged=true}}break;default:break}},rotate:function(){switch(arguments.length){case 0:return this._rotate;case 1:if(this._rotate!=arguments[0]){this._rotate=arguments[0];this._rotationPoint=undefined;this._isChanged=true}case 2:if(this._rotate!=arguments[0]||!this._rotationPoint||this._rotationPoint.x!=arguments[1].x||this._rotationPoint.y!=arguments[1].y){this._rotate=arguments[0];this._rotationPoint=arguments[1];this._isChanged=true}}},hide:function(){if(this.isVisible){this.isVisible=false;this._isChanged=true}},show:function(){if(!this.isVisible){this.isVisible=true;this._isChanged=true;this._textHasChanged=true}},getInheritedFontSize:function(b){if(!b||!b.getAttributeNS){return}var a=b.getAttributeNS(null,"font-size");if(a){return parseFloat(a)}else{if(!ORYX.Editor.checkClassType(b,SVGSVGElement)){return this.getInheritedFontSize(b.parentNode)}}},getFontSize:function(b){var a=this.node.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG,"tspan");var c=this.getInheritedFontSize(this.node);if(!c){if(a[0]&&/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)&&new Number(RegExp.$1)>=3){c=a[0].getExtentOfChar(0).height}else{c=ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT}if(c<=0){c=ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT}}if(c){this.node.setAttribute("oryx:fontSize",c)}return c},getTrimmedTextLength:function(b){b=b.strip().gsub(" "," ");var a;do{a=b.length;b=b.gsub(" "," ")}while(a>b.length);return b.length},getOffsetBottom:function(){return this.offsetBottom},getOffsetTop:function(){return this.offsetTop},deserialize:function(b,a){if(b&&"undefined"!=typeof b.x&&"undefined"!=typeof b.y){this.setPosition({x:b.x,y:b.y});if("undefined"!=typeof b.distance){var d=a.dockers[b.from];var c=a.dockers[b.to];if(d&&c){this.setReferencePoint({dirty:true,distance:b.distance,intersection:{x:b.x,y:b.y},orientation:b.orientation,segment:{from:d,fromIndex:b.from,fromPosition:d.bounds.center(),to:c,toIndex:b.to,toPosition:c.bounds.center()}})}}if(b.left){this.anchorLeft=true}if(b.right){this.anchorRight=true}if(b.top){this.anchorTop=true}if(b.bottom){this.anchorBottom=true}if(b.valign){this.verticalAlign(b.valign)}if(b.align){this.horizontalAlign(b.align)}}else{if(b&&"undefined"!=typeof b.edge){this.setEdgePosition(b.edge)}}},serialize:function(){if(this.getEdgePosition()){if(this.getOriginEdgePosition()!==this.getEdgePosition()){return{edge:this.getEdgePosition()}}else{return null}}if(this.position){var b={x:this.position.x,y:this.position.y};if(this.isAnchorLeft()&&this.isAnchorLeft()!==this.isOriginAnchorLeft()){b.left=true}if(this.isAnchorRight()&&this.isAnchorRight()!==this.isOriginAnchorRight()){b.right=true}if(this.isAnchorTop()&&this.isAnchorTop()!==this.isOriginAnchorTop()){b.top=true}if(this.isAnchorBottom()&&this.isAnchorBottom()!==this.isOriginAnchorBottom()){b.bottom=true}if(this.getOriginVerticalAlign()!==this.verticalAlign()){b.valign=this.verticalAlign()}if(this.getOriginHorizontalAlign()!==this.horizontalAlign()){b.align=this.horizontalAlign()}return b}if(this.getReferencePoint()){var a=this.getReferencePoint();return{distance:a.distance,x:a.intersection.x,y:a.intersection.y,from:a.segment.fromIndex,to:a.segment.toIndex,orientation:a.orientation,valign:this.verticalAlign(),align:this.horizontalAlign()}}return null},toString:function(){return"Label "+this.id}});if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}if(!ORYX.Core.Math){ORYX.Core.Math={}}ORYX.Core.Math.midPoint=function(b,a){return{x:(b.x+a.x)/2,y:(b.y+a.y)/2}};ORYX.Core.Math.isPointInLine=function(h,f,g,e,b,a,d){d=d?Math.abs(d):1;if(Math.abs(g-b)<=d&&Math.abs(h-g)<=d&&f-Math.max(e,a)<=d&&Math.min(e,a)-f<=d){return true}if(Math.abs(e-a)<=d&&Math.abs(f-e)<=d&&h-Math.max(g,b)<=d&&Math.min(g,b)-h<=d){return true}if(h>Math.max(g,b)||h Math.max(e,a)||f =n)!=(l>=n)){h+=l-m>=0?k>=0:k<=0}if(!k&&Math.min(c,b)<=a&&a<=Math.max(c,b)&&Math.min(m,l)<=n&&n<=Math.max(m,l)){return true}}return(h%2)?true:false};ORYX.Core.Math.distancePointLinie=function(e,d,a,b){var c=ORYX.Core.Math.getPointOfIntersectionPointLine(e,d,a,b);if(!c){return null}return ORYX.Core.Math.getDistancePointToPoint(a,c)};ORYX.Core.Math.getDistancePointToPoint=function(b,a){return Math.sqrt(Math.pow(b.x-a.x,2)+Math.pow(b.y-a.y,2))};ORYX.Core.Math.getDistanceBetweenTwoPoints=function(c,b,a){return ORYX.Core.Math.getDistancePointToPoint(a,c)/ORYX.Core.Math.getDistancePointToPoint(c,b)};ORYX.Core.Math.pointIsLeftOfLine=function(e,d,a){var c=ORYX.Core.Math.getVector(e,d);var b=ORYX.Core.Math.getVector(e,a);return((c.x*b.y)-(b.x*c.y))>0};ORYX.Core.Math.getPointBetweenTwoPoints=function(b,a,c){c=Math.max(Math.min(c||0,1),0);if(c===0){return b}else{if(c===1){return a}}return{x:b.x+((a.x-b.x)*c),y:b.y+((a.y-b.y)*c)}};ORYX.Core.Math.getVector=function(b,a){return{x:a.x-b.x,y:a.y-b.y}};ORYX.Core.Math.getIdentityVector=function(a){if(arguments.length==2){a=ORYX.Core.Math.getVector(arguments[0],arguments[1])}var b=Math.sqrt((a.x*a.x)+(a.y*a.y));return{x:a.x/(b||1),y:a.y/(b||1)}};ORYX.Core.Math.getOrthogonalIdentityVector=function(c,b){var a=arguments.length==1?c:ORYX.Core.Math.getIdentityVector(c,b);return{x:a.y,y:-a.x}};ORYX.Core.Math.getPointOfIntersectionPointLine=function(f,c,a,e){var d=Math.pow(c.x-f.x,2)+Math.pow(c.y-f.y,2);if(d==0){return undefined}var b=((a.x-f.x)*(c.x-f.x)+(a.y-f.y)*(c.y-f.y))/d;if(e){if(!(0<=b&&b<=1)){return undefined}}pointOfIntersection=new Object();pointOfIntersection.x=f.x+b*(c.x-f.x);pointOfIntersection.y=f.y+b*(c.y-f.y);return pointOfIntersection};ORYX.Core.Math.getTranslatedPoint=function(b,c){var a=c.a*b.x+c.c*b.y+c.e*1;var d=c.b*b.x+c.d*b.y+c.f*1;return{x:a,y:d}};ORYX.Core.Math.getInverseMatrix=function(b){var c=ORYX.Core.Math.getDeterminant(b),a=b;return{a:c*((a.d*1)-(a.f*0)),b:c*((a.f*0)-(a.b*1)),c:c*((a.e*0)-(a.c*1)),d:c*((a.a*1)-(a.e*0)),e:c*((a.c*a.f)-(a.e*a.d)),f:c*((a.e*a.b)-(a.a*a.f))}};ORYX.Core.Math.getDeterminant=function(a){return(a.a*a.d*1)+(a.c*a.f*0)+(a.e*a.b*0)-(a.e*a.d*0)-(a.c*a.b*1)-(a.a*a.f*0)};ORYX.Core.Math.getTranslatedBoundingBox=function(a){var h=a.getCTM();var f=a.getBBox();var e=ORYX.Core.Math.getTranslatedPoint({x:f.x,y:f.y},h);var g=ORYX.Core.Math.getTranslatedPoint({x:f.x,y:f.y+f.height},h);var b=ORYX.Core.Math.getTranslatedPoint({x:f.x+f.width,y:f.y},h);var c=ORYX.Core.Math.getTranslatedPoint({x:f.x+f.width,y:f.y+f.height},h);var k={x:Math.min(e.x,g.x,b.x,c.x),y:Math.min(e.y,g.y,b.y,c.y)};var d={x:Math.max(e.x,g.x,b.x,c.x),y:Math.max(e.y,g.y,b.y,c.y)};return{x:k.x,y:k.y,width:d.x-k.x,height:d.y-k.y}};ORYX.Core.Math.getAngle=function(c,a){if(c.x==a.x&&c.y==a.y){return 0}var b=Math.asin(Math.sqrt(Math.pow(c.y-a.y,2))/(Math.sqrt(Math.pow(a.x-c.x,2)+Math.pow(c.y-a.y,2))))*180/Math.PI;if(a.x>=c.x&&a.y<=c.y){return b}else{if(a.x c.y){return 180+b}else{return 360-b}}}};new function(){var b=2,c=8,e=4,a=1;function d(g,n,m,k,h,f){var l=0;if(n>f){l|=c}else{if(n h){l|=b}else{if(g 0){o=true}else{var t=0,r=0;p=m!=0?m:k;if((p&c)>0){t=h+(g-h)*(l-u)/(s-u);r=l}else{if((p&e)>0){t=h+(g-h)*(v-u)/(s-u);r=v}else{if((p&b)>0){r=u+(s-u)*(q-h)/(g-h);t=q}else{if((p&a)>0){r=u+(s-u)*(f-h)/(g-h);t=f}}}}if(p==m){h=t;u=r;m=d(h,u,f,v,q,l)}else{g=t;s=r;k=d(g,s,f,v,q,l)}}}w++}while(o!=true&&w<5000);if(n){return{a:{x:h,y:u},b:{x:g,y:s}}}return null}}();if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}if(!ORYX.Core.StencilSet){ORYX.Core.StencilSet={}}ORYX.Core.StencilSet.Stencil={construct:function(d,e,a,k,h,g){arguments.callee.$.construct.apply(this,arguments);if(!d){throw"Stencilset seems corrupt."}if(!e){throw"Stencil does not provide namespace."}if(!a){throw"Stencil does not provide SVG source."}if(!k){throw"Fatal internal error loading stencilset."}this._source=a;this._jsonStencil=d;this._stencilSet=k;this._namespace=e;this._propertyPackages=h;if(g&&!this._jsonStencil.position){this._jsonStencil.position=g}this._view;this._properties=new Hash();if(!this._jsonStencil.type||!(this._jsonStencil.type==="edge"||this._jsonStencil.type==="node")){throw"ORYX.Core.StencilSet.Stencil(construct): Type is not defined."}if(!this._jsonStencil.id||this._jsonStencil.id===""){throw"ORYX.Core.StencilSet.Stencil(construct): Id is not defined."}if(!this._jsonStencil.title||this._jsonStencil.title===""){throw"ORYX.Core.StencilSet.Stencil(construct): Title is not defined."}if(!this._jsonStencil.description){this._jsonStencil.description=""}if(!this._jsonStencil.groups){this._jsonStencil.groups=[]}if(!this._jsonStencil.roles){this._jsonStencil.roles=[]}this._jsonStencil.roles.push(this._jsonStencil.id);this._jsonStencil.roles.each((function(m,l){this._jsonStencil.roles[l]=e+m}).bind(this));this._jsonStencil.roles=this._jsonStencil.roles.uniq();this._jsonStencil.id=e+this._jsonStencil.id;this.postProcessProperties();if(!this._jsonStencil.serialize){this._jsonStencil.serialize={}}if(!this._jsonStencil.deserialize){this._jsonStencil.deserialize={}}if(!this._jsonStencil.layout){this._jsonStencil.layout=[]}var c=a+"view/"+d.view;if(this._jsonStencil.view.trim().match(/)){var b=new DOMParser();var f=b.parseFromString(this._jsonStencil.view,"text/xml");if(ORYX.Editor.checkClassType(f.documentElement,SVGSVGElement)){this._view=f.documentElement}else{throw"ORYX.Core.StencilSet.Stencil(_loadSVGOnSuccess): The response is not a valid SVG document."}}else{new Ajax.Request(c,{asynchronous:false,method:"get",onSuccess:this._loadSVGOnSuccess.bind(this),onFailure:this._loadSVGOnFailure.bind(this)})}},postProcessProperties:function(){this._jsonStencil.icon=ORYX.CONFIG.SERVER_HANDLER_ROOT+"/stencilsetitem/"+this._jsonStencil.objectId+"/image";if(this._jsonStencil.propertyPackages&&this._jsonStencil.propertyPackages instanceof Array){var a=this._jsonStencil.hiddenPropertyPackages;this._jsonStencil.propertyPackages.each((function(c){var b=this._propertyPackages.get(c);if(b){b.each((function(f){var d=new ORYX.Core.StencilSet.Property(f,this._namespace,this);var e=d.prefix()+"-"+d.id();this._properties.set(e,d);if(a.indexOf(d.id())>-1){d.hide()}}).bind(this))}}).bind(this))}if(this._jsonStencil.properties&&this._jsonStencil.properties instanceof Array){this._jsonStencil.properties.each((function(d){var b=new ORYX.Core.StencilSet.Property(d,this._namespace,this);var c=b.prefix()+"-"+b.id();this._properties.set(c,b)}).bind(this))}},equals:function(a){return(this.id()===a.id())},stencilSet:function(){return this._stencilSet},type:function(){return this._jsonStencil.type},namespace:function(){return this._namespace},id:function(){return this._jsonStencil.id},idWithoutNs:function(){return this.id().replace(this.namespace(),"")},title:function(){return ORYX.Core.StencilSet.getTranslation(this._jsonStencil,"title")},description:function(){return ORYX.Core.StencilSet.getTranslation(this._jsonStencil,"description")},groups:function(){return ORYX.Core.StencilSet.getTranslation(this._jsonStencil,"groups")},position:function(){return(isNaN(this._jsonStencil.position)?0:this._jsonStencil.position)},view:function(){return this._view.cloneNode(true)||this._view},icon:function(){return this._jsonStencil.icon},fixedAspectRatio:function(){return this._jsonStencil.fixedAspectRatio===true},hasMultipleRepositoryEntries:function(){return(this.getRepositoryEntries().length>0)},getRepositoryEntries:function(){return(this._jsonStencil.repositoryEntries)?$A(this._jsonStencil.repositoryEntries):$A([])},properties:function(){return this._properties.values()},property:function(a){return this._properties.get(a)},roles:function(){return this._jsonStencil.roles},defaultAlign:function(){if(!this._jsonStencil.defaultAlign){return"east"}return this._jsonStencil.defaultAlign},serialize:function(a,b){return this._jsonStencil.serialize},deserialize:function(a,b){return this._jsonStencil.deserialize},layout:function(a){return this._jsonStencil.layout},addProperty:function(c,b){if(c&&b){var a=new ORYX.Core.StencilSet.Property(c,b,this);this._properties[a.prefix()+"-"+a.id()]=a}},removeProperty:function(b){if(b){var a=this._properties.values().find(function(c){return(b==c.id())});if(a){delete this._properties[a.prefix()+"-"+a.id()]}}},_loadSVGOnSuccess:function(a){var b=null;b=a.responseXML;if(ORYX.Editor.checkClassType(b.documentElement,SVGSVGElement)){this._view=b.documentElement}else{throw"ORYX.Core.StencilSet.Stencil(_loadSVGOnSuccess): The response is not a SVG document."}},_loadSVGOnFailure:function(a){throw"ORYX.Core.StencilSet.Stencil(_loadSVGOnFailure): Loading SVG document failed."},toString:function(){return"Stencil "+this.title()+" ("+this.id()+")"}};ORYX.Core.StencilSet.Stencil=Clazz.extend(ORYX.Core.StencilSet.Stencil);function _evenMoreEvilHack(c,e){if(window.ActiveXObject){var b=new ActiveXObject("MSXML.DomDocument");b.loadXML(c);return b}else{if(window.XMLHttpRequest){var a=new XMLHttpRequest;a.open("GET","data:"+(e||"application/xml")+";charset=utf-8,"+encodeURIComponent(c),false);if(a.overrideMimeType){a.overrideMimeType(e)}a.send(null);return a.responseXML}}}function _evilSafariHack(d){var b=d;var a="data:text/xml;charset=utf-8,"+encodeURIComponent(b);var e=null;var c=new XMLHttpRequest();c.open("GET",a);c.onload=function(){e=c.responseXML};c.send(null);return e}if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}if(!ORYX.Core.StencilSet){ORYX.Core.StencilSet={}}ORYX.Core.StencilSet.Property=Clazz.extend({construct:function(d,b,c){arguments.callee.$.construct.apply(this,arguments);this._jsonProp=d||ORYX.Log.error("Parameter jsonProp is not defined.");this._namespace=b||ORYX.Log.error("Parameter namespace is not defined.");this._stencil=c||ORYX.Log.error("Parameter stencil is not defined.");this._items={};this._complexItems={};this._hidden=false;d.id=d.id||ORYX.Log.error("ORYX.Core.StencilSet.Property(construct): Id is not defined.");d.id=d.id.toLowerCase();if(!d.type){ORYX.Log.info("Type is not defined for stencil '%0', id '%1'. Falling back to 'String'.",c,d.id);d.type="string"}else{d.type=d.type.toLowerCase()}d.prefix=d.prefix||"oryx";d.title=d.title||"";d.value=d.value||"";d.description=d.description||"";d.readonly=d.readonly||false;d.optional=d.optional!==false;if(this._jsonProp.refToView){if(!(this._jsonProp.refToView instanceof Array)){this._jsonProp.refToView=[this._jsonProp.refToView]}}else{this._jsonProp.refToView=[]}var a=this.getMinForType(d.type);if(d.min===undefined||d.min===null){d.min=a}else{if(d.mine){d.min=e}}if(!d.fillOpacity){d.fillOpacity=false}if("number"!=typeof d.lightness){d.lightness=1}else{d.lightness=Math.max(0,Math.min(1,d.lightness))}if(!d.strokeOpacity){d.strokeOpacity=false}if(d.length===undefined||d.length===null){d.length=Number.MAX_VALUE}if(!d.wrapLines){d.wrapLines=false}if(!d.dateFormat){d.dateFormat=ORYX.I18N.PropertyWindow.dateFormat||"m/d/y"}if(!d.fill){d.fill=false}if(!d.stroke){d.stroke=false}if(!d.inverseBoolean){d.inverseBoolean=false}if(!d.directlyEditable&&d.directlyEditable!=false){d.directlyEditable=true}if(d.visible!==false){d.visible=true}if(d.isList!==true){d.isList=false;if(!d.list||!(d.list instanceof Array)){d.list=[]}}if(!d.category){if(d.popular){d.category="popular"}else{d.category="others"}}if(!d.alwaysAppearInMultiselect){d.alwaysAppearInMultiselect=false}if(d.type===ORYX.CONFIG.TYPE_CHOICE){if(d.items&&d.items instanceof Array){d.items.each((function(f){this._items[f.value.toLowerCase()]=new ORYX.Core.StencilSet.PropertyItem(f,b,this)}).bind(this))}else{throw"ORYX.Core.StencilSet.Property(construct): No property items defined."}}else{if(d.type===ORYX.CONFIG.TYPE_COMPLEX||d.type==ORYX.CONFIG.TYPE_MULTIPLECOMPLEX){if(d.complexItems&&d.complexItems instanceof Array){d.complexItems.each((function(f){this._complexItems[f.id.toLowerCase()]=new ORYX.Core.StencilSet.ComplexPropertyItem(f,b,this)}).bind(this))}}}},getMinForType:function(a){if(a.toLowerCase()==ORYX.CONFIG.TYPE_INTEGER){return -Math.pow(2,31)}else{return -Number.MAX_VALUE+1}},getMaxForType:function(a){if(a.toLowerCase()==ORYX.CONFIG.TYPE_INTEGER){return Math.pow(2,31)-1}else{return Number.MAX_VALUE}},equals:function(a){return(this._namespace===a.namespace()&&this.id()===a.id())?true:false},namespace:function(){return this._namespace},stencil:function(){return this._stencil},id:function(){return this._jsonProp.id},prefix:function(){return this._jsonProp.prefix},type:function(){return this._jsonProp.type},inverseBoolean:function(){return this._jsonProp.inverseBoolean},category:function(){return this._jsonProp.category},setCategory:function(a){this._jsonProp.category=a},directlyEditable:function(){return this._jsonProp.directlyEditable},visible:function(){return this._jsonProp.visible},title:function(){return ORYX.Core.StencilSet.getTranslation(this._jsonProp,"title")},value:function(){return this._jsonProp.value},readonly:function(){return this._jsonProp.readonly},optional:function(){return this._jsonProp.optional},description:function(){return ORYX.Core.StencilSet.getTranslation(this._jsonProp,"description")},refToView:function(){return this._jsonProp.refToView},min:function(){return this._jsonProp.min},max:function(){return this._jsonProp.max},fillOpacity:function(){return this._jsonProp.fillOpacity},strokeOpacity:function(){return this._jsonProp.strokeOpacity},length:function(){return this._jsonProp.length?this._jsonProp.length:Number.MAX_VALUE},wrapLines:function(){return this._jsonProp.wrapLines},dateFormat:function(){return this._jsonProp.dateFormat},fill:function(){return this._jsonProp.fill},lightness:function(){return this._jsonProp.lightness},stroke:function(){return this._jsonProp.stroke},items:function(){return $H(this._items).values()},item:function(a){if(a){return this._items[a.toLowerCase()]}else{return null}},toString:function(){return"Property "+this.title()+" ("+this.id()+")"},complexItems:function(){return $H(this._complexItems).values()},complexItem:function(a){if(a){return this._complexItems[a.toLowerCase()]}else{return null}},complexAttributeToView:function(){return this._jsonProp.complexAttributeToView||""},isList:function(){return !!this._jsonProp.isList},getListItems:function(){return this._jsonProp.list},linkableType:function(){return this._jsonProp.linkableType||""},alwaysAppearInMultiselect:function(){return this._jsonProp.alwaysAppearInMultiselect},popular:function(){return this._jsonProp.popular||false},setPopular:function(){this._jsonProp.popular=true},hide:function(){this._hidden=true},isHidden:function(){return this._hidden}});if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}if(!ORYX.Core.StencilSet){ORYX.Core.StencilSet={}}ORYX.Core.StencilSet.PropertyItem=Clazz.extend({construct:function(a,b,c){arguments.callee.$.construct.apply(this,arguments);if(!a){throw"ORYX.Core.StencilSet.PropertyItem(construct): Parameter jsonItem is not defined."}if(!b){throw"ORYX.Core.StencilSet.PropertyItem(construct): Parameter namespace is not defined."}if(!c){throw"ORYX.Core.StencilSet.PropertyItem(construct): Parameter property is not defined."}this._jsonItem=a;this._namespace=b;this._property=c;if(!a.value){throw"ORYX.Core.StencilSet.PropertyItem(construct): Value is not defined."}if(this._jsonItem.refToView){if(!(this._jsonItem.refToView instanceof Array)){this._jsonItem.refToView=[this._jsonItem.refToView]}}else{this._jsonItem.refToView=[]}},equals:function(a){return(this.property().equals(a.property())&&this.value()===a.value())},namespace:function(){return this._namespace},property:function(){return this._property},value:function(){return this._jsonItem.value},title:function(){return ORYX.Core.StencilSet.getTranslation(this._jsonItem,"title")},refToView:function(){return this._jsonItem.refToView},icon:function(){return(this._jsonItem.icon)?this.property().stencil()._source+"icons/"+this._jsonItem.icon:""},toString:function(){return"PropertyItem "+this.property()+" ("+this.value()+")"}});if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}if(!ORYX.Core.StencilSet){ORYX.Core.StencilSet={}}ORYX.Core.StencilSet.ComplexPropertyItem=Clazz.extend({construct:function(a,b,c){arguments.callee.$.construct.apply(this,arguments);if(!a){throw"ORYX.Core.StencilSet.ComplexPropertyItem(construct): Parameter jsonItem is not defined."}if(!b){throw"ORYX.Core.StencilSet.ComplexPropertyItem(construct): Parameter namespace is not defined."}if(!c){throw"ORYX.Core.StencilSet.ComplexPropertyItem(construct): Parameter property is not defined."}this._jsonItem=a;this._namespace=b;this._property=c;this._items=new Hash();this._complexItems=new Hash();if(!a.name){throw"ORYX.Core.StencilSet.ComplexPropertyItem(construct): Name is not defined."}if(!a.type){throw"ORYX.Core.StencilSet.ComplexPropertyItem(construct): Type is not defined."}else{a.type=a.type.toLowerCase()}if(a.type===ORYX.CONFIG.TYPE_CHOICE){if(a.items&&a.items instanceof Array){a.items.each((function(d){this._items[d.value]=new ORYX.Core.StencilSet.PropertyItem(d,b,this)}).bind(this))}else{throw"ORYX.Core.StencilSet.Property(construct): No property items defined."}}else{if(a.type===ORYX.CONFIG.TYPE_COMPLEX){if(a.complexItems&&a.complexItems instanceof Array){a.complexItems.each((function(d){this._complexItems[d.id]=new ORYX.Core.StencilSet.ComplexPropertyItem(d,b,this)}).bind(this))}else{throw"ORYX.Core.StencilSet.Property(construct): No property items defined."}}}},equals:function(a){return(this.property().equals(a.property())&&this.name()===a.name())},namespace:function(){return this._namespace},property:function(){return this._property},name:function(){return ORYX.Core.StencilSet.getTranslation(this._jsonItem,"name")},id:function(){return this._jsonItem.id},type:function(){return this._jsonItem.type},optional:function(){return this._jsonItem.optional},width:function(){return this._jsonItem.width},value:function(){return this._jsonItem.value},items:function(){return this._items.values()},complexItems:function(){return this._complexItems.values()},disable:function(){return this._jsonItem.disable}});if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}if(!ORYX.Core.StencilSet){ORYX.Core.StencilSet={}}ORYX.Core.StencilSet.Rules={construct:function(){arguments.callee.$.construct.apply(this,arguments);this._stencilSets=[];this._stencils=[];this._containerStencils=[];this._cachedConnectSET=new Hash();this._cachedConnectSE=new Hash();this._cachedConnectTE=new Hash();this._cachedCardSE=new Hash();this._cachedCardTE=new Hash();this._cachedContainPC=new Hash();this._cachedMorphRS=new Hash();this._connectionRules=new Hash();this._cardinalityRules=new Hash();this._containmentRules=new Hash();this._morphingRules=new Hash();this._layoutRules=new Hash()},initializeRules:function(l){var k=this._stencilSets.find(function(o){return(o.namespace()==l.namespace())});if(k){var f=this._stencilSets.clone();f=f.without(k);f.push(l);this._stencilSets=[];this._stencils=[];this._containerStencils=[];this._cachedConnectSET=new Hash();this._cachedConnectSE=new Hash();this._cachedConnectTE=new Hash();this._cachedCardSE=new Hash();this._cachedCardTE=new Hash();this._cachedContainPC=new Hash();this._cachedMorphRS=new Hash();this._connectionRules=new Hash();this._cardinalityRules=new Hash();this._containmentRules=new Hash();this._morphingRules=new Hash();this._layoutRules=new Hash();f.each(function(o){this.initializeRules(o)}.bind(this));return}else{this._stencilSets.push(l);var m=new Hash(l.jsonRules());var e=l.namespace();var b=l.stencils();l.extensions().values().each(function(o){if(o.rules){if(o.rules.connectionRules){m.connectionRules=m.connectionRules.concat(o.rules.connectionRules)}if(o.rules.cardinalityRules){m.cardinalityRules=m.cardinalityRules.concat(o.rules.cardinalityRules)}if(o.rules.containmentRules){m.containmentRules=m.containmentRules.concat(o.rules.containmentRules)}if(o.rules.morphingRules){m.morphingRules=m.morphingRules.concat(o.rules.morphingRules)}}if(o.stencils){b=b.concat(o.stencils)}});this._stencils=this._stencils.concat(l.stencils());var g=this._connectionRules;if(m.get("connectionRules")){m.get("connectionRules").each((function(o){if(this._isRoleOfOtherNamespace(o.role)){if(!g.get(o.role)){g.set(o.role,new Hash())}}else{if(!g.get(e+o.role)){g.set(e+o.role,new Hash())}}o.connects.each((function(p){var s=[];if(p.to){if(!(p.to instanceof Array)){p.to=[p.to]}p.to.each((function(t){if(this._isRoleOfOtherNamespace(t)){s.push(t)}else{s.push(e+t)}}).bind(this))}var r,q;if(this._isRoleOfOtherNamespace(o.role)){r=o.role}else{r=e+o.role}if(this._isRoleOfOtherNamespace(p.from)){q=p.from}else{q=e+p.from}if(!g.get(r).get(q)){g.get(r).set(q,s)}else{g.get(r).set(q,g.get(r).get(q).concat(s))}}).bind(this))}).bind(this))}var c=this._cardinalityRules;if(m.get("cardinalityRules")){m.get("cardinalityRules").each((function(q){var o;if(this._isRoleOfOtherNamespace(q.role)){o=q.role}else{o=e+q.role}if(!c.get(o)){c.set(o,{});for(i in q){c.get(o)[i]=q[i]}}var r=new Hash();if(q.outgoingEdges){q.outgoingEdges.each((function(s){if(this._isRoleOfOtherNamespace(s.role)){r.set(s.role,s)}else{r.set(e+s.role,s)}}).bind(this))}c.get(o).outgoingEdges=r;var p=new Hash();if(q.incomingEdges){q.incomingEdges.each((function(s){if(this._isRoleOfOtherNamespace(s.role)){p.set(s.role,s)}else{p.set(e+s.role,s)}}).bind(this))}c.get(o).incomingEdges=p}).bind(this))}var a=this._containmentRules;if(m.get("containmentRules")){m.get("containmentRules").each((function(p){var o;if(this._isRoleOfOtherNamespace(p.role)){o=p.role}else{this._containerStencils.push(e+p.role);o=e+p.role}if(!a.get(o)){a.set(o,[])}(p.contains||[]).each((function(q){if(this._isRoleOfOtherNamespace(q)){a.get(o).push(q)}else{a.get(o).push(e+q)}}).bind(this))}).bind(this))}var d=this._morphingRules;if(m.get("morphingRules")){m.get("morphingRules").each((function(p){var o;if(this._isRoleOfOtherNamespace(p.role)){o=p.role}else{o=e+p.role}if(!d.get(o)){d.set(o,[])}if(!p.preserveBounds){p.preserveBounds=false}p.baseMorphs.each((function(r){var q=this._getStencilById(e+r);if(q){d.get(o).push(q)}}).bind(this))}).bind(this))}var h=this._layoutRules;if(m.get("layoutRules")){var n=function(p){return{edgeRole:p.edgeRole||undefined,t:p.t||1,r:p.r||1,b:p.b||1,l:p.l||1}};m.get("layoutRules").each(function(p){var o;if(this._isRoleOfOtherNamespace(p.role)){o=p.role}else{o=e+p.role}if(!h.get(o)){h.set(o,{})}if(p["in"]){h.get(o)["in"]=n(p["in"])}if(p.ins){h.get(o)["ins"]=(p.ins||[]).map(function(q){return n(q)})}if(p.out){h.get(o)["out"]=n(p.out)}if(p.outs){h.get(o)["outs"]=(p.outs||[]).map(function(q){return n(q)})}}.bind(this))}}},_getStencilById:function(a){return this._stencils.find(function(b){return b.id()==a})},_cacheConnect:function(a){result=this._canConnect(a);if(a.sourceStencil&&a.targetStencil){var c=this._cachedConnectSET[a.sourceStencil.id()];if(!c){c=new Hash();this._cachedConnectSET[a.sourceStencil.id()]=c}var b=c[a.edgeStencil.id()];if(!b){b=new Hash();c[a.edgeStencil.id()]=b}b[a.targetStencil.id()]=result}else{if(a.sourceStencil){var c=this._cachedConnectSE[a.sourceStencil.id()];if(!c){c=new Hash();this._cachedConnectSE[a.sourceStencil.id()]=c}c[a.edgeStencil.id()]=result}else{var d=this._cachedConnectTE[a.targetStencil.id()];if(!d){d=new Hash();this._cachedConnectTE[a.targetStencil.id()]=d}d[a.edgeStencil.id()]=result}}return result},_cacheCard:function(b){if(b.sourceStencil){var c=this._cachedCardSE[b.sourceStencil.id()];if(!c){c=new Hash();this._cachedCardSE[b.sourceStencil.id()]=c}var a=this._getMaximumNumberOfOutgoingEdge(b);if(a==undefined){a=-1}c[b.edgeStencil.id()]=a}if(b.targetStencil){var d=this._cachedCardTE[b.targetStencil.id()];if(!d){d=new Hash();this._cachedCardTE[b.targetStencil.id()]=d}var a=this._getMaximumNumberOfIncomingEdge(b);if(a==undefined){a=-1}d[b.edgeStencil.id()]=a}},_cacheContain:function(b){var a=[this._canContain(b),this._getMaximumOccurrence(b.containingStencil,b.containedStencil)];if(a[1]==undefined){a[1]=-1}var c=this._cachedContainPC[b.containingStencil.id()];if(!c){c=new Hash();this._cachedContainPC[b.containingStencil.id()]=c}c[b.containedStencil.id()]=a;return a},_cacheMorph:function(b){var a=this._cachedMorphRS[b];if(!a){a=[];if(this._morphingRules.keys().include(b)){a=this._stencils.select(function(c){return c.roles().include(b)})}this._cachedMorphRS[b]=a}return a},outgoingEdgeStencils:function(a){if(!a.sourceShape&&!a.sourceStencil){return[]}if(a.sourceShape){a.sourceStencil=a.sourceShape.getStencil()}var b=[];this._stencils.each((function(d){if(d.type()==="edge"){var c=Object.clone(a);c.edgeStencil=d;if(this.canConnect(c)){b.push(d)}}}).bind(this));return b},incomingEdgeStencils:function(a){if(!a.targetShape&&!a.targetStencil){return[]}if(a.targetShape){a.targetStencil=a.targetShape.getStencil()}var b=[];this._stencils.each((function(d){if(d.type()==="edge"){var c=Object.clone(a);c.edgeStencil=d;if(this.canConnect(c)){b.push(d)}}}).bind(this));return b},sourceStencils:function(b){if(!b||!b.edgeShape&&!b.edgeStencil){return[]}if(b.targetShape){b.targetStencil=b.targetShape.getStencil()}if(b.edgeShape){b.edgeStencil=b.edgeShape.getStencil()}var a=[];this._stencils.each((function(d){var c=Object.clone(b);c.sourceStencil=d;if(this.canConnect(c)){a.push(d)}}).bind(this));return a},targetStencils:function(a){if(!a||!a.edgeShape&&!a.edgeStencil){return[]}if(a.sourceShape){a.sourceStencil=a.sourceShape.getStencil()}if(a.edgeShape){a.edgeStencil=a.edgeShape.getStencil()}var b=[];this._stencils.each((function(d){var c=Object.clone(a);c.targetStencil=d;if(this.canConnect(c)){b.push(d)}}).bind(this));return b},canConnect:function(c){if(!c||(!c.sourceShape&&!c.sourceStencil&&!c.targetShape&&!c.targetStencil)||!c.edgeShape&&!c.edgeStencil){return false}if(c.sourceShape){c.sourceStencil=c.sourceShape.getStencil()}if(c.targetShape){c.targetStencil=c.targetShape.getStencil()}if(c.edgeShape){c.edgeStencil=c.edgeShape.getStencil()}var b;if(c.sourceStencil&&c.targetStencil){var e=this._cachedConnectSET[c.sourceStencil.id()];if(!e){b=this._cacheConnect(c)}else{var d=e[c.edgeStencil.id()];if(!d){b=this._cacheConnect(c)}else{var f=d[c.targetStencil.id()];if(f==undefined){b=this._cacheConnect(c)}else{b=f}}}}else{if(c.sourceStencil){var e=this._cachedConnectSE[c.sourceStencil.id()];if(!e){b=this._cacheConnect(c)}else{var d=e[c.edgeStencil.id()];if(d==undefined){b=this._cacheConnect(c)}else{b=d}}}else{var f=this._cachedConnectTE[c.targetStencil.id()];if(!f){b=this._cacheConnect(c)}else{var d=f[c.edgeStencil.id()];if(d==undefined){b=this._cacheConnect(c)}else{b=d}}}}if(b){if(c.sourceShape){var e=this._cachedCardSE[c.sourceStencil.id()];if(!e){this._cacheCard(c);e=this._cachedCardSE[c.sourceStencil.id()]}var a=e[c.edgeStencil.id()];if(a==undefined){this._cacheCard(c)}a=e[c.edgeStencil.id()];if(a!=-1){b=c.sourceShape.getOutgoingShapes().all(function(g){if((g.getStencil().id()===c.edgeStencil.id())&&((c.edgeShape)?g!==c.edgeShape:true)){a--;return(a>0)?true:false}else{return true}})}}if(c.targetShape){var f=this._cachedCardTE[c.targetStencil.id()];if(!f){this._cacheCard(c);f=this._cachedCardTE[c.targetStencil.id()]}var a=f[c.edgeStencil.id()];if(a==undefined){this._cacheCard(c)}a=f[c.edgeStencil.id()];if(a!=-1){b=c.targetShape.getIncomingShapes().all(function(g){if((g.getStencil().id()===c.edgeStencil.id())&&((c.edgeShape)?g!==c.edgeShape:true)){a--;return(a>0)?true:false}else{return true}})}}}return b},_canConnect:function(b){if(!b||(!b.sourceShape&&!b.sourceStencil&&!b.targetShape&&!b.targetStencil)||!b.edgeShape&&!b.edgeStencil){return false}if(b.sourceShape){b.sourceStencil=b.sourceShape.getStencil()}if(b.targetShape){b.targetStencil=b.targetShape.getStencil()}if(b.edgeShape){b.edgeStencil=b.edgeShape.getStencil()}var c;var a=this._getConnectionRulesOfEdgeStencil(b.edgeStencil);if(a.keys().length===0){c=false}else{if(b.sourceStencil){c=b.sourceStencil.roles().any(function(e){var d=a.get(e);if(!d){return false}if(b.targetStencil){return(d.any(function(f){return b.targetStencil.roles().member(f)}))}else{return true}})}else{c=a.values().any(function(d){return b.targetStencil.roles().any(function(e){return d.member(e)})})}}return c},isContainer:function(a){return this._containerStencils.member(a.getStencil().id())},canContain:function(c){if(!c||!c.containingStencil&&!c.containingShape||!c.containedStencil&&!c.containedShape){return false}if(c.containedShape){c.containedStencil=c.containedShape.getStencil()}if(c.containingShape){c.containingStencil=c.containingShape.getStencil()}if(c.containedStencil.type()=="edge"){return false}var b;var d=this._cachedContainPC[c.containingStencil.id()];if(!d){b=this._cacheContain(c)}else{b=d[c.containedStencil.id()];if(!b){b=this._cacheContain(c)}}if(!b[0]){return false}else{if(b[1]==-1){return true}else{if(c.containingShape){var a=b[1];return c.containingShape.getChildShapes(false).all(function(e){if(e.getStencil().id()===c.containedStencil.id()){a--;return(a>0)?true:false}else{return true}})}else{return true}}}},_canContain:function(b){if(!b||!b.containingStencil&&!b.containingShape||!b.containedStencil&&!b.containedShape){return false}if(b.containedShape){b.containedStencil=b.containedShape.getStencil()}if(b.containingShape){b.containingStencil=b.containingShape.getStencil()}var a;a=b.containingStencil.roles().any((function(d){var c=this._containmentRules.get(d);if(c){return c.any(function(e){return b.containedStencil.roles().member(e)})}else{return false}}).bind(this));return a},morphStencils:function(b){if(!b.stencil&&!b.shape){return[]}if(b.shape){b.stencil=b.shape.getStencil()}var a=[];b.stencil.roles().each(function(d){this._cacheMorph(d).each(function(e){a.push(e)})}.bind(this));var c=this.baseMorphs();a=a.uniq().sort(function(e,d){return c.include(e)&&!c.include(d)?-1:(c.include(d)&&!c.include(e)?1:0)});return a},baseMorphs:function(){var a=[];this._morphingRules.each(function(b){b.value.each(function(c){a.push(c)})});return a},containsMorphingRules:function(){return this._stencilSets.any(function(a){return !!a.jsonRules().morphingRules})},connectMorph:function(e){if(!e||(!e.sourceShape&&!e.sourceStencil&&!e.targetShape&&!e.targetStencil)){return false}if(e.sourceShape){e.sourceStencil=e.sourceShape.getStencil()}if(e.targetShape){e.targetStencil=e.targetShape.getStencil()}var a=this.incomingEdgeStencils(e);var d=this.outgoingEdgeStencils(e);var c=a.select(function(f){return d.member(f)});var b=this.baseMorphs().select(function(f){return c.member(f)});if(b.size()>0){return b[0]}else{if(c.size()>0){return c[0]}}return null},showInShapeMenu:function(a){return this._stencilSets.any(function(b){return b.jsonRules().morphingRules.any(function(c){return a.roles().include(b.namespace()+c.role)&&c.showInShapeMenu!==false})})},preserveBounds:function(a){return this._stencilSets.any(function(b){return b.jsonRules().morphingRules.any(function(c){return a.roles().include(b.namespace()+c.role)&&c.preserveBounds})})},getLayoutingRules:function(b,d){if(!b||!(b instanceof ORYX.Core.Shape)){return}var c={"in":{},out:{}};var a=function(f,e){if(f&&f[e]){["t","r","b","l"].each(function(g){c[e][g]=Math.max(f[e][g],c[e][g]||0)})}if(f&&f[e+"s"] instanceof Array){["t","r","b","l"].each(function(k){var g=f[e+"s"].find(function(l){return !l.edgeRole});var h;if(d instanceof ORYX.Core.Edge){h=f[e+"s"].find(function(l){return this._hasRole(d,l.edgeRole)}.bind(this))}c[e][k]=Math.max(h?h[k]:g[k],c[e][k]||0)}.bind(this))}}.bind(this);b.getStencil().roles().each(function(e){if(this._layoutRules[e]){a(this._layoutRules[e],"in");a(this._layoutRules[e],"out")}}.bind(this));["in","out"].each(function(e){["t","r","b","l"].each(function(f){c[e][f]=c[e][f]!==undefined?c[e][f]:1})});return c},_hasRole:function(b,c){if(!(b instanceof ORYX.Core.Shape)||!c){return}var a=b.getStencil().roles().any(function(d){return d==c});return a||b.getStencil().id()==(b.getStencil().namespace()+c)},_stencilsWithRole:function(a){return this._stencils.findAll(function(b){return(b.roles().member(a))?true:false})},_edgesWithRole:function(a){return this._stencils.findAll(function(b){return(b.roles().member(a)&&b.type()==="edge")?true:false})},_nodesWithRole:function(a){return this._stencils.findAll(function(b){return(b.roles().member(a)&&b.type()==="node")?true:false})},_getMaximumOccurrence:function(b,c){var a;c.roles().each((function(e){var d=this._cardinalityRules.get(e);if(d&&d.maximumOccurrence){if(a){a=Math.min(a,d.maximumOccurrence)}else{a=d.maximumOccurrence}}}).bind(this));return a},_getMaximumNumberOfOutgoingEdge:function(b){if(!b||!b.sourceStencil||!b.edgeStencil){return false}var a;b.sourceStencil.roles().each((function(d){var c=this._cardinalityRules.get(d);if(c&&c.outgoingEdges){b.edgeStencil.roles().each(function(e){var f=c.outgoingEdges[e];if(f&&f.maximum){if(a){a=Math.min(a,f.maximum)}else{a=f.maximum}}})}}).bind(this));return a},_getMaximumNumberOfIncomingEdge:function(b){if(!b||!b.targetStencil||!b.edgeStencil){return false}var a;b.targetStencil.roles().each((function(d){var c=this._cardinalityRules[d];if(c&&c.incomingEdges){b.edgeStencil.roles().each(function(e){var f=c.incomingEdges[e];if(f&&f.maximum){if(a){a=Math.min(a,f.maximum)}else{a=f.maximum}}})}}).bind(this));return a},_getConnectionRulesOfEdgeStencil:function(b){var a=new Hash();b.roles().each((function(c){if(this._connectionRules.get(c)){this._connectionRules.get(c).each(function(d){if(a.get(d.key)){a.set(d.key,a.get([d.key]).concat(d.value))}else{a.set(d.key,d.value)}})}}).bind(this));return a},_isRoleOfOtherNamespace:function(a){return(a.indexOf("#")>0)},toString:function(){return"Rules"}};ORYX.Core.StencilSet.Rules=Clazz.extend(ORYX.Core.StencilSet.Rules);if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}if(!ORYX.Core.StencilSet){ORYX.Core.StencilSet={}}ORYX.Core.StencilSet.StencilSet=Clazz.extend({construct:function(a,b){this._extensions=new Hash();this._baseUrl=a;this._jsonObject={};this._stencils=new Hash();this._availableStencils=new Hash();this._init(b)},findRootStencilName:function(){var a=this._stencils.values().find(function(b){return b._jsonStencil.mayBeRoot});if(!a){ORYX.Log.warn("Did not find any stencil that may be root. Taking a guess.");a=this._stencils.values()[0]}return a.id()},equals:function(a){return(this.namespace()===a.namespace())},stencils:function(k,l,h){if(k&&l){var a=this._availableStencils.values();var e=[k];var d=[];var m=[];while(e.size()>0){var b=e.pop();d.push(b);var c=a.findAll(function(o){var n={containingStencil:b,containedStencil:o};return l.canContain(n)});for(var g=0;g =c.x-e&&f<=b.x+e&&d>=c.y-e&&d<=b.y+e){return true}else{return false}},clone:function(){return new ORYX.Core.Bounds(this)},toString:function(){return"( "+this.a.x+" | "+this.a.y+" )/( "+this.b.x+" | "+this.b.y+" )"},serializeForERDF:function(){return this.a.x+","+this.a.y+","+this.b.x+","+this.b.y}};ORYX.Core.Bounds=Clazz.extend(ORYX.Core.Bounds);if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}ORYX.Core.UIObject={construct:function(a){this.isChanged=true;this.isResized=true;this.isVisible=true;this.isSelectable=false;this.isResizable=false;this.isMovable=false;this.id=ORYX.Editor.provideId();this.parent=undefined;this.node=undefined;this.children=[];this.bounds=new ORYX.Core.Bounds();this._changedCallback=this._changed.bind(this);this.bounds.registerCallback(this._changedCallback);if(a&&a.eventHandlerCallback){this.eventHandlerCallback=a.eventHandlerCallback}},_changed:function(b,a){this.isChanged=true;if(this.bounds==b){this.isResized=a||this.isResized}},update:function(){if(this.isChanged){this.refresh();this.isChanged=false;this.children.each(function(a){a.update()})}},refresh:function(){},getChildren:function(){return this.children.clone()},getParents:function(){var a=[];var b=this.parent;while(b){a.push(b);b=b.parent}return a},isParent:function(a){var b=this;while(b){if(b===a){return true}b=b.parent}return false},getId:function(){return this.id},getChildById:function(b,a){return this.children.find(function(c){if(c.getId()===b){return c}else{if(a){var d=c.getChildById(b,a);if(d){return d}}}})},add:function(a){if(!(this.children.member(a))){if(a.parent){a.remove(a)}this.children.push(a);a.parent=this;a.node=this.node.appendChild(a.node);a.bounds.registerCallback(this._changedCallback)}else{ORYX.Log.info("add: ORYX.Core.UIObject is already a child of this object.")}},remove:function(a){if(this.children.member(a)){this.children=this._uiObjects.without(a);a.parent=undefined;a.node=this.node.removeChild(a.node);a.bounds.unregisterCallback(this._changedCallback)}else{ORYX.Log.info("remove: ORYX.Core.UIObject is not a child of this object.")}},absoluteBounds:function(){if(this.parent){var a=this.absoluteXY();return new ORYX.Core.Bounds(a.x,a.y,a.x+this.bounds.width(),a.y+this.bounds.height())}else{return this.bounds.clone()}},absoluteXY:function(){if(this.parent){var b=this.parent.absoluteXY();var a={};a.x=b.x+this.bounds.upperLeft().x;a.y=b.y+this.bounds.upperLeft().y;return a}else{var a={};a.x=this.bounds.upperLeft().x;a.y=this.bounds.upperLeft().y;return a}},absoluteCenterXY:function(){if(this.parent){var b=this.parent.absoluteXY();var a={};a.x=b.x+this.bounds.center().x;a.y=b.y+this.bounds.center().y;return a}else{var a={};a.x=this.bounds.center().x;a.y=this.bounds.center().y;return a}},hide:function(){this.node.setAttributeNS(null,"display","none");this.isVisible=false;this.children.each(function(a){a.hide()})},show:function(){this.node.setAttributeNS(null,"display","inherit");this.isVisible=true;this.children.each(function(a){a.show()})},addEventHandlers:function(a){a.addEventListener(ORYX.CONFIG.EVENT_MOUSEDOWN,this._delegateEvent.bind(this),false);a.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE,this._delegateEvent.bind(this),false);a.addEventListener(ORYX.CONFIG.EVENT_MOUSEUP,this._delegateEvent.bind(this),false);a.addEventListener(ORYX.CONFIG.EVENT_MOUSEOVER,this._delegateEvent.bind(this),false);a.addEventListener(ORYX.CONFIG.EVENT_MOUSEOUT,this._delegateEvent.bind(this),false);a.addEventListener("click",this._delegateEvent.bind(this),false);a.addEventListener(ORYX.CONFIG.EVENT_DBLCLICK,this._delegateEvent.bind(this),false)},_delegateEvent:function(a){if(this.eventHandlerCallback){this.eventHandlerCallback(a,this)}},toString:function(){return"UIObject "+this.id}};ORYX.Core.UIObject=Clazz.extend(ORYX.Core.UIObject);if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}ORYX.Core.AbstractShape=ORYX.Core.UIObject.extend({construct:function(a,c,b){arguments.callee.$.construct.apply(this,arguments);this.resourceId=ORYX.Editor.provideId();this._stencil=c;if(this._stencil._jsonStencil.superId){stencilId=this._stencil.id();superStencilId=stencilId.substring(0,stencilId.indexOf("#")+1)+c._jsonStencil.superId;stencilSet=this._stencil.stencilSet();this._stencil=stencilSet.stencil(superStencilId)}this.properties=new Hash();this.propertiesChanged=new Hash();this.hiddenProperties=new Hash();this._stencil.properties().each((function(e){var d=e.prefix()+"-"+e.id();this.properties.set(d,e.value());this.propertiesChanged.set(d,true)}).bind(this));if(c._jsonStencil.superId){c.properties().each((function(g){var e=g.prefix()+"-"+g.id();var f=g.value();var d=this.properties.get(e);this.properties.set(e,f);this.propertiesChanged.set(e,true);this._delegateEvent({type:ORYX.CONFIG.EVENT_PROPERTY_CHANGED,name:e,value:f,oldValue:d})}).bind(this))}},layout:function(){},getStencil:function(){return this._stencil},getChildShapeByResourceId:function(a){a=ERDF.__stripHashes(a);return this.getChildShapes(true).find(function(b){return b.resourceId==a})},getChildShapes:function(b,c){var a=[];this.children.each(function(d){if(d instanceof ORYX.Core.Shape&&d.isVisible){if(c){c(d)}a.push(d);if(b){a=a.concat(d.getChildShapes(b,c))}}});return a},hasChildShape:function(a){return this.getChildShapes().any(function(b){return(b===a)||b.hasChildShape(a)})},getChildNodes:function(b,c){var a=[];this.children.each(function(d){if(d instanceof ORYX.Core.Node&&d.isVisible){if(c){c(d)}a.push(d)}if(d instanceof ORYX.Core.Shape){if(b){a=a.concat(d.getChildNodes(b,c))}}});return a},getChildEdges:function(b,c){var a=[];this.children.each(function(d){if(d instanceof ORYX.Core.Edge&&d.isVisible){if(c){c(d)}a.push(d)}if(d instanceof ORYX.Core.Shape){if(b){a=a.concat(d.getChildEdges(b,c))}}});return a},getAbstractShapesAtPosition:function(){var b,e;switch(arguments.length){case 1:b=arguments[0].x;e=arguments[0].y;break;case 2:b=arguments[0];e=arguments[1];break;default:throw"getAbstractShapesAtPosition needs 1 or 2 arguments!"}if(this.isPointIncluded(b,e)){var a=[];a.push(this);var d=this.getChildNodes();var c=this.getChildEdges();[d,c].each(function(f){var g=new Hash();f.each(function(h){if(!h.isVisible){return}var l=h.getAbstractShapesAtPosition(b,e);if(l.length>0){var k=$A(h.node.parentNode.childNodes);var m=k.indexOf(h.node);g.set(m,l)}});g.keys().sort().each(function(h){a=a.concat(g.get(h))})});return a}else{return[]}},setProperty:function(b,d,c){var a=this.properties.get(b);if(a!==d||c===true){this.properties.set(b,d);this.propertiesChanged.set(b,true);this._changed();if(!this._isInSetProperty){this._isInSetProperty=true;this._delegateEvent({type:ORYX.CONFIG.EVENT_PROPERTY_CHANGED,elements:[this],name:b,value:d,oldValue:a});delete this._isInSetProperty}}},isPropertyChanged:function(){return this.propertiesChanged.any(function(a){return a.value})},setHiddenProperty:function(b,c){if(c===undefined){this.hiddenProperties.unset(b);return}var a=this.hiddenProperties.get(b);if(a!==c){this.hiddenProperties.set(b,c)}},isPointIncluded:function(d,c,b){var a=b?b:this.absoluteBounds();return a.isIncluded(d,c)},serialize:function(){var a=[];a.push({name:"type",prefix:"oryx",value:this.getStencil().id(),type:"literal"});this.hiddenProperties.each(function(b){a.push({name:b.key.replace("oryx-",""),prefix:"oryx",value:b.value,type:"literal"})}.bind(this));this.getStencil().properties().each((function(d){var c=d.prefix();var b=d.id();a.push({name:b,prefix:c,value:this.properties.get(c+"-"+b),type:"literal"})}).bind(this));return a},deserialize:function(b){var a=0;b=b.sort(function(d,c){d=Number(this.properties.keys().member(d.prefix+"-"+d.name));c=Number(this.properties.keys().member(c.prefix+"-"+c.name));return d>c?1:(d ORYX.CONFIG.FORM_ROW_WIDTH+30){this.setHightlightState(2)}else{this.setHightlightState(1)}},update:function(){this.nodes.each(function(b){this._traverseForUpdate(b)}.bind(this));var a=this.getStencil().layout();if(a){a.each(function(b){b.shape=this;b.forceExecution=true;b.target=this.rootNode;this._delegateEvent(b)}.bind(this))}this.nodes.invoke("_update");this.edges.invoke("_update",true)},_traverseForUpdate:function(a){var b=a.isChanged;a.getChildNodes(false,function(c){if(this._traverseForUpdate(c)){b=true}}.bind(this));if(b){a.layout();return true}else{return false}},layout:function(){},getChildNodes:function(b,c){if(!b&&!c){return this.nodes.clone()}else{var a=[];this.nodes.each(function(d){if(c){c(d)}a.push(d);if(b&&d instanceof ORYX.Core.Shape){a=a.concat(d.getChildNodes(b,c))}});return a}},add:function(a,c,b){if(a instanceof ORYX.Core.UIObject){if(!(this.children.member(a))){if(a.parent){a.parent.remove(a,true)}if(c!=undefined){this.children.splice(c,0,a)}else{this.children.push(a)}a.parent=this;if(a instanceof ORYX.Core.Shape){if(a instanceof ORYX.Core.Edge){a.addMarkers(this.rootNode.getElementsByTagNameNS(NAMESPACE_SVG,"defs")[0]);a.node=this.node.childNodes[0].childNodes[2].appendChild(a.node);this.edges.push(a)}else{a.node=this.node.childNodes[0].childNodes[1].appendChild(a.node);this.nodes.push(a)}}else{a.node=this.node.appendChild(a.node)}a.bounds.registerCallback(this._changedCallback);if(this.eventHandlerCallback&&b!==true){this.eventHandlerCallback({type:ORYX.CONFIG.EVENT_SHAPEADDED,shape:a})}}else{ORYX.Log.warn("add: ORYX.Core.UIObject is already a child of this object.")}}else{ORYX.Log.fatal("add: Parameter is not of type ORYX.Core.UIObject.")}},remove:function(a,b){if(this.children.member(a)){var c=a.parent;this.children=this.children.without(a);a.parent=undefined;if(a instanceof ORYX.Core.Shape){if(a instanceof ORYX.Core.Edge){a.removeMarkers();a.node=this.node.childNodes[0].childNodes[2].removeChild(a.node);this.edges=this.edges.without(a)}else{a.node=this.node.childNodes[0].childNodes[1].removeChild(a.node);this.nodes=this.nodes.without(a)}}else{a.node=this.node.removeChild(a.node)}if(this.eventHandlerCallback&&b!==true){this.eventHandlerCallback({type:ORYX.CONFIG.EVENT_SHAPEREMOVED,shape:a,parent:c})}a.bounds.unregisterCallback(this._changedCallback)}else{ORYX.Log.warn("remove: ORYX.Core.UIObject is not a child of this object.")}},removeAll:function(){var a=this.getChildShapes();for(var c=0;c =0})){if(!match.notUsesIn||!match.notUsesIn.namespaces||!match.notUsesIn.namespaces.any(function(req){return loadedStencilSetsNamespaces.indexOf(req)>=0})){try{var className=eval(match.name);var newPlugin=new className(facade,match);newPlugin.type=match.name;if(newPlugin.registryChanged){newPlugin.registryChanged(me.pluginsData)}if(newPlugin.onSelectionChanged){me.registerOnEvent(ORYX.CONFIG.EVENT_SELECTION_CHANGED,newPlugin.onSelectionChanged.bind(newPlugin))}this.loadedPlugins.push(newPlugin);this.loadedPlugins.each(function(loaded){if(loaded.registryChanged){loaded.registryChanged(this.pluginsData)}}.bind(me));callback(true)}catch(e){ORYX.Log.warn("Plugin %0 is not available",match.name);if(!!loadTry){callback(false,"INITFAILED");return}this.loadScript("plugins/scripts/"+match.source,this.activatePluginByName.bind(this,match.name,callback,true))}}else{callback(false,"NOTUSEINSTENCILSET");ORYX.Log.info("Plugin need a stencilset which is not loaded'",match.name)}}else{callback(false,"REQUIRESTENCILSET");ORYX.Log.info("Plugin need a stencilset which is not loaded'",match.name)}}else{callback(false,match?"NOTFOUND":"YETACTIVATED")}},loadPlugins:function(){var me=this;var newPlugins=[];var loadedStencilSetsNamespaces=this.getStencilSets().keys();var facade=this._getPluginFacade();if(ORYX.MashupAPI&&ORYX.MashupAPI.loadablePlugins&&ORYX.MashupAPI.loadablePlugins instanceof Array){ORYX.availablePlugins=$A(ORYX.availablePlugins).findAll(function(value){return ORYX.MashupAPI.loadablePlugins.include(value.name)});ORYX.MashupAPI.loadablePlugins.each(function(className){if(!(ORYX.availablePlugins.find(function(val){return val.name==className}))){ORYX.availablePlugins.push({name:className})}})}ORYX.availablePlugins.each(function(value){ORYX.Log.debug("Initializing plugin '%0'",value.get("name"));if((!value.get("requires")||!value.get("requires").namespaces||value.get("requires").namespaces.any(function(req){return loadedStencilSetsNamespaces.indexOf(req)>=0}))&&(!value.get("notUsesIn")||!value.get("notUsesIn").namespaces||!value.get("notUsesIn").namespaces.any(function(req){return loadedStencilSetsNamespaces.indexOf(req)>=0}))&&(value.get("engaged")||(value.get("engaged")===undefined))){try{var className=eval(value.get("name"));if(className){var plugin=new className(facade,value);plugin.type=value.get("name");newPlugins.push(plugin);plugin.engaged=true}}catch(e){ORYX.Log.warn("Plugin %0 is not available %1",value.get("name"),e)}}else{ORYX.Log.info("Plugin need a stencilset which is not loaded'",value.get("name"))}});newPlugins.each(function(value){if(value.registryChanged){value.registryChanged(me.pluginsData)}if(value.onSelectionChanged){me.registerOnEvent(ORYX.CONFIG.EVENT_SELECTION_CHANGED,value.onSelectionChanged.bind(value))}});this.loadedPlugins=newPlugins;this.registerPluginsOnKeyEvents();this.setSelection()},_createCanvas:function(c,d){if(c){if(c.search(/^http/)===-1){c=this.getStencilSets().values()[0].namespace()+c}}else{c=this.getStencilSets().values()[0].findRootStencilName()}var a=ORYX.Core.StencilSet.stencil(c);if(!a){ORYX.Log.fatal("Initialisation failed, because the stencil with the type %0 is not part of one of the loaded stencil sets.",c)}var e=ORYX.Editor.graft("http://www.w3.org/1999/xhtml",null,["div"]);e.addClassName("ORYX_Editor");this._canvas=new ORYX.Core.Canvas({width:ORYX.CONFIG.CANVAS_WIDTH,height:ORYX.CONFIG.CANVAS_HEIGHT,eventHandlerCallback:this.handleEvents.bind(this),id:this.id,parentNode:e},a,this._getPluginFacade());if(d){var b=[];for(field in d){b.push({prefix:"oryx",name:field,value:d[field]})}this._canvas.deserialize(b)}},_getPluginFacade:function(){if(!(this._pluginFacade)){this._pluginFacade={activatePluginByName:this.activatePluginByName.bind(this),getAvailablePlugins:this.getAvailablePlugins.bind(this),offer:this.offer.bind(this),getStencilSets:this.getStencilSets.bind(this),getStencilSetExtensionDefinition:function(){return Object.clone(this.ss_extensions_def||{})}.bind(this),getRules:this.getRules.bind(this),loadStencilSet:this.loadStencilSet.bind(this),createShape:this.createShape.bind(this),deleteShape:this.deleteShape.bind(this),getSelection:this.getSelection.bind(this),setSelection:this.setSelection.bind(this),updateSelection:this.updateSelection.bind(this),getCanvas:this.getCanvas.bind(this),importJSON:this.importJSON.bind(this),getJSON:this.getJSON.bind(this),getSerializedJSON:this.getSerializedJSON.bind(this),executeCommands:this.executeCommands.bind(this),isExecutingCommands:this.isExecutingCommands.bind(this),registerOnEvent:this.registerOnEvent.bind(this),unregisterOnEvent:this.unregisterOnEvent.bind(this),raiseEvent:this.handleEvents.bind(this),enableEvent:this.enableEvent.bind(this),disableEvent:this.disableEvent.bind(this),eventCoordinates:this.eventCoordinates.bind(this),eventCoordinatesXY:this.eventCoordinatesXY.bind(this),getModelMetaData:this.getModelMetaData.bind(this)}}return this._pluginFacade},isExecutingCommands:function(){return !!this.commandExecuting},executeCommands:function(a){if(!this.commandStack){this.commandStack=[]}if(!this.commandStackExecuted){this.commandStackExecuted=[]}this.commandStack=[].concat(this.commandStack).concat(a);if(this.commandExecuting){return}this.commandExecuting=true;while(this.commandStack.length>0){var b=this.commandStack.shift();b.execute();this.commandStackExecuted.push(b)}this.handleEvents({type:ORYX.CONFIG.EVENT_EXECUTE_COMMANDS,commands:this.commandStackExecuted});delete this.commandStack;delete this.commandStackExecuted;delete this.commandExecuting;this.updateSelection()},getJSON:function(){var a=this.getCanvas().toJSON();a.ssextensions=this.getStencilSets().values()[0].extensions().keys().findAll(function(b){return !b.endsWith("/meta#")});return a},getSerializedJSON:function(){return JSON.stringify(this.getJSON())},importJSON:function(d,c){try{d=this.renewResourceIds(d)}catch(b){throw b}if(d.stencilset.namespace&&d.stencilset.namespace!==this.getCanvas().getStencil().stencilSet().namespace()){alert(String.format(ORYX.I18N.JSONImport.wrongSS,d.stencilset.namespace,this.getCanvas().getStencil().stencilSet().namespace()));return null}else{var a=ORYX.Core.Command.extend({construct:function(g,k,f,h){this.jsonObject=g;this.noSelection=f;this.facade=h;this.shapes;this.connections=[];this.parents=new Hash();this.selection=this.facade.getSelection();this.loadSerialized=k},execute:function(){if(!this.shapes){this.shapes=this.loadSerialized(this.jsonObject);this.shapes.each(function(g){if(g.getDockers){var f=g.getDockers();if(f){if(f.length>0){this.connections.push([f.first(),f.first().getDockedShape(),f.first().referencePoint])}if(f.length>1){this.connections.push([f.last(),f.last().getDockedShape(),f.last().referencePoint])}}}this.parents[g.id]=g.parent}.bind(this))}else{this.shapes.each(function(f){this.parents[f.id].add(f)}.bind(this));this.connections.each(function(f){f[0].setDockedShape(f[1]);f[0].setReferencePoint(f[2]);f[0].update()})}this.facade.getCanvas().update();if(!this.noSelection){this.facade.setSelection(this.shapes)}else{this.facade.updateSelection()}this.facade.getCanvas().updateSize()},rollback:function(){var f=this.facade.getSelection();this.shapes.each(function(g){f=f.without(g);this.facade.deleteShape(g)}.bind(this));this.facade.getCanvas().update();this.facade.setSelection(f)}});var e=new a(d,this.loadSerialized.bind(this),c,this._getPluginFacade());this.executeCommands([e]);return e.shapes.clone()}},renewResourceIds:function(b){if(Object.prototype.toString.call(b)==="String"){try{var d=b;b=JSON.parse(b)}catch(a){throw new SyntaxError(a.message)}}else{var d=JSON.stringify(b)}var e=function(f){if(!f){return[]}return f.map(function(g){return e(g.childShapes).concat(g.resourceId)}).flatten()};var c=e(b.childShapes);c.each(function(f){var g=ORYX.Editor.provideId();d=d.replace(new RegExp(f,"g"),g)});return JSON.parse(d)},loadSerialized:function(d,e){var c=this.getCanvas();this.loadSSExtensions(d.ssextensions);if(e===true){var b=this.getExtensionForMetaData();if(b){this.loadSSExtension(b)}}var a=this.getCanvas().addShapeObjects(d.childShapes,this.handleEvents.bind(this));if(d.properties){for(key in d.properties){var f=d.properties[key];var g=this.getCanvas().getStencil().property("oryx-"+key);if(!(typeof f==="string")&&(!g||!g.isList())){f=JSON.stringify(f)}this.getCanvas().setProperty("oryx-"+key,f)}}this.getCanvas().updateSize();this.selection=[null];this.setSelection([]);return a},getExtensionForMetaData:function(){if(!this.ss_extensions_def||!(this.ss_extensions_def.extensions instanceof Array)){return null}var a=this.getStencilSets();var b=this.ss_extensions_def.extensions.find(function(c){return !!a[c["extends"]]&&c.namespace.endsWith("/meta#")});return b?b.namespace||null:null},loadSSExtensions:function(a){if(!a){return}a.each(function(b){this.loadSSExtension(b)}.bind(this))},loadSSExtension:function(b){if(this.ss_extensions_def){var c=this.ss_extensions_def.extensions.find(function(d){return(d.namespace==b)});if(!c){return}var a=this.getStencilSets()[c["extends"]];if(!a){return}if((c.definition||"").startsWith("/")){a.addExtension(c.definition)}else{a.addExtension(ORYX.CONFIG.SS_EXTENSIONS_FOLDER+c.definition)}this.getRules().initializeRules(a);this._getPluginFacade().raiseEvent({type:ORYX.CONFIG.EVENT_STENCIL_SET_LOADED})}},disableEvent:function(a){if(a==ORYX.CONFIG.EVENT_KEYDOWN){this._keydownEnabled=false}if(a==ORYX.CONFIG.EVENT_KEYUP){this._keyupEnabled=false}if(this.DOMEventListeners.keys().member(a)){var b=this.DOMEventListeners.unset(a);this.DOMEventListeners.set("disable_"+a,b)}},enableEvent:function(a){if(a==ORYX.CONFIG.EVENT_KEYDOWN){this._keydownEnabled=true}if(a==ORYX.CONFIG.EVENT_KEYUP){this._keyupEnabled=true}if(this.DOMEventListeners.keys().member("disable_"+a)){var b=this.DOMEventListeners.unset("disable_"+a);this.DOMEventListeners.set(a,b)}},registerOnEvent:function(a,b){if(!(this.DOMEventListeners.keys().member(a))){this.DOMEventListeners.set(a,[])}this.DOMEventListeners.get(a).push(b)},unregisterOnEvent:function(a,b){if(this.DOMEventListeners.keys().member(a)){this.DOMEventListeners.set(a,this.DOMEventListeners.get(a).without(b))}else{}},getSelection:function(){return this.selection||[]},getStencilSets:function(){return ORYX.Core.StencilSet.stencilSets(this.id)},getRules:function(){return ORYX.Core.StencilSet.rules(this.id)},loadStencilSet:function(a){try{ORYX.Core.StencilSet.loadStencilSet(a,this.modelMetaData,this.id);this.handleEvents({type:ORYX.CONFIG.EVENT_STENCIL_SET_LOADED})}catch(b){ORYX.Log.warn("Requesting stencil set file failed. ("+b+")")}},offer:function(a){if(!this.pluginsData.member(a)){this.pluginsData.push(a)}},registerPluginsOnKeyEvents:function(){this.pluginsData.each(function(a){if(a.keyCodes){a.keyCodes.each(function(c){var b="key.event";b+="."+c.keyAction;if(c.metaKeys){if(c.metaKeys.indexOf(ORYX.CONFIG.META_KEY_META_CTRL)>-1){b+="."+ORYX.CONFIG.META_KEY_META_CTRL}if(c.metaKeys.indexOf(ORYX.CONFIG.META_KEY_ALT)>-1){b+="."+ORYX.CONFIG.META_KEY_ALT}if(c.metaKeys.indexOf(ORYX.CONFIG.META_KEY_SHIFT)>-1){b+="."+ORYX.CONFIG.META_KEY_SHIFT}}if(c.keyCode){b+="."+c.keyCode}ORYX.Log.debug("Register Plugin on Key Event: %0",b);if(a.toggle===true&&a.buttonInstance){this.registerOnEvent(b,function(){a.buttonInstance.toggle(!a.buttonInstance.pressed);a.functionality.call(a,a.buttonInstance,a.buttonInstance.pressed)})}else{this.registerOnEvent(b,a.functionality)}}.bind(this))}}.bind(this))},isEqual:function(d,c){return d===c||(d.length===c.length&&d.all(function(a){return c.include(a)}))},isDirty:function(b){return b.any(function(a){return a.isPropertyChanged()})},setSelection:function(c,a,b){if(!c){c=[]}if(!(c instanceof Array)){c=[c]}c=c.findAll(function(d){return d&&d instanceof ORYX.Core.Shape});if(c[0] instanceof ORYX.Core.Canvas){c=[]}if(!b&&this.isEqual(this.selection,c)&&!this.isDirty(c)){return}this.selection=c;this._subSelection=a;this.handleEvents({type:ORYX.CONFIG.EVENT_SELECTION_CHANGED,elements:c,subSelection:a,force:!!b})},updateSelection:function(){this.setSelection(this.selection,this._subSelection,true)},getCanvas:function(){return this._canvas},createShape:function(o){if(o&&o.serialize&&o.serialize instanceof Array){var d=o.serialize.find(function(b){return(b.prefix+"-"+b.name)=="oryx-type"});var t=ORYX.Core.StencilSet.stencil(d.value);if(t.type()=="node"){var f=new ORYX.Core.Node({eventHandlerCallback:this.handleEvents.bind(this)},t,this._getPluginFacade())}else{var f=new ORYX.Core.Edge({eventHandlerCallback:this.handleEvents.bind(this)},t,this._getPluginFacade())}this.getCanvas().add(f);f.deserialize(o.serialize);return f}if(!o||!o.type||!o.namespace){throw"To create a new shape you have to give an argument with type and namespace"}var c=this.getCanvas();var f;var u=o.type;var r=ORYX.Core.StencilSet.stencilSet(o.namespace);if(r.stencil(u).type()=="node"){f=new ORYX.Core.Node({eventHandlerCallback:this.handleEvents.bind(this)},r.stencil(u),this._getPluginFacade())}else{f=new ORYX.Core.Edge({eventHandlerCallback:this.handleEvents.bind(this)},r.stencil(u),this._getPluginFacade())}if(o.template){f._jsonStencil.properties=o.template._jsonStencil.properties;f.postProcessProperties()}if(o.parent&&f instanceof ORYX.Core.Node){o.parent.add(f)}else{c.add(f)}var s=o.position?o.position:{x:100,y:200};var g;if(o.connectingType&&o.connectedShape&&!(f instanceof ORYX.Core.Edge)){g=new ORYX.Core.Edge({eventHandlerCallback:this.handleEvents.bind(this)},r.stencil(o.connectingType));g.dockers.first().setDockedShape(o.connectedShape);var l=o.connectedShape.getDefaultMagnet();var a=l?l.bounds.center():o.connectedShape.bounds.midPoint();g.dockers.first().setReferencePoint(a);g.dockers.last().setDockedShape(f);g.dockers.last().setReferencePoint(f.getDefaultMagnet().bounds.center());c.add(g)}if(f instanceof ORYX.Core.Edge&&o.connectedShape){f.dockers.first().setDockedShape(o.connectedShape);if(o.connectedShape instanceof ORYX.Core.Node){f.dockers.first().setReferencePoint(o.connectedShape.getDefaultMagnet().bounds.center());f.dockers.last().bounds.centerMoveTo(s)}else{f.dockers.first().setReferencePoint(o.connectedShape.bounds.midPoint())}var k=f.dockers.first();var e=f.dockers.last();if(k.getDockedShape()&&e.getDockedShape()){var q=k.getAbsoluteReferencePoint();var n=e.getAbsoluteReferencePoint();var p=f.createDocker();p.bounds.centerMoveTo({x:q.x+(endPont.x-q.x)/2,y:q.y+(endPont.y-q.y)/2})}}else{var v=f.bounds;if(f instanceof ORYX.Core.Node&&f.dockers.length==1){v=f.dockers.first().bounds}v.centerMoveTo(s);var h=v.upperLeft();v.moveBy(-Math.min(h.x,0),-Math.min(h.y,0));var m=v.lowerRight();v.moveBy(-Math.max(m.x-c.bounds.width(),0),-Math.max(m.y-c.bounds.height(),0))}if(f instanceof ORYX.Core.Edge){f._update(false)}if(!(f instanceof ORYX.Core.Edge)&&!(o.dontUpdateSelection)){this.setSelection([f])}if(g&&g.alignDockers){}if(f.alignDockers){f.alignDockers()}return f},deleteShape:function(a){if(!a||!a.parent){return}a.parent.remove(a);a.getOutgoingShapes().each(function(c){var b=c.getDockers().first();if(b&&b.getDockedShape()==a){b.setDockedShape(undefined)}});a.getIncomingShapes().each(function(b){var c=b.getDockers().last();if(c&&c.getDockedShape()==a){c.setDockedShape(undefined)}});a.getDockers().each(function(b){b.setDockedShape(undefined)})},getModelMetaData:function(){return this.modelMetaData},_executeEventImmediately:function(a){if(this.DOMEventListeners.keys().member(a.event.type)){this.DOMEventListeners.get(a.event.type).each((function(b){b(a.event,a.arg)}).bind(this))}},_executeEvents:function(){this._queueRunning=true;while(this._eventsQueue.length>0){var a=this._eventsQueue.shift();this._executeEventImmediately(a)}this._queueRunning=false},handleEvents:function(b,a){ORYX.Log.trace("Dispatching event type %0 on %1",b.type,a);switch(b.type){case ORYX.CONFIG.EVENT_MOUSEDOWN:this._handleMouseDown(b,a);break;case ORYX.CONFIG.EVENT_MOUSEMOVE:this._handleMouseMove(b,a);break;case ORYX.CONFIG.EVENT_MOUSEUP:this._handleMouseUp(b,a);break;case ORYX.CONFIG.EVENT_MOUSEOVER:this._handleMouseHover(b,a);break;case ORYX.CONFIG.EVENT_MOUSEOUT:this._handleMouseOut(b,a);break}if(b.forceExecution){this._executeEventImmediately({event:b,arg:a})}else{this._eventsQueue.push({event:b,arg:a})}if(!this._queueRunning){this._executeEvents()}return false},isValidEvent:function(c){try{var a=["INPUT","TEXTAREA"].include(c.target.tagName.toUpperCase());var b=c.target.className.include("x-grid3-focus")&&!c.target.className.include("x-grid3-focus-canvas");return !a&&!b}catch(c){return false}},catchKeyUpEvents:function(b){if(!this._keyupEnabled){return}if(!b){b=window.event}if(!this.isValidEvent(b)){return}var a=this.createKeyCombEvent(b,ORYX.CONFIG.KEY_ACTION_UP);ORYX.Log.debug("Key Event to handle: %0",a);this.handleEvents({type:a,event:b})},catchKeyDownEvents:function(b){if(!this._keydownEnabled){return}if(!b){b=window.event}if(!this.isValidEvent(b)){return}var a=this.createKeyCombEvent(b,ORYX.CONFIG.KEY_ACTION_DOWN);ORYX.Log.debug("Key Event to handle: %0",a);this.handleEvents({type:a,event:b})},createKeyCombEvent:function(c,b){var d=c.which||c.keyCode;var a="key.event";if(b){a+="."+b}if(c.ctrlKey||c.metaKey){a+="."+ORYX.CONFIG.META_KEY_META_CTRL}if(c.altKey){a+="."+ORYX.CONFIG.META_KEY_ALT}if(c.shiftKey){a+="."+ORYX.CONFIG.META_KEY_SHIFT}return a+"."+d},_handleMouseDown:function(a,l){var b=this.getCanvas();b.focus();var d=a.currentTarget;var c=l;var g=(c!==null)&&(c!==undefined)&&(c.isSelectable);var m=(c!==null)&&(c!==undefined)&&(c.isMovable);var k=a.shiftKey||a.ctrlKey;var h=this.selection.length===0;var e=this.selection.member(c);if(g&&h){this.setSelection([c]);ORYX.Log.trace("Rule #1 applied for mouse down on %0",d.id)}else{if(g&&!h&&!k&&!e){this.setSelection([c]);ORYX.Log.trace("Rule #3 applied for mouse down on %0",d.id)}else{if(g&&k&&!e){var f=this.selection.clone();f.push(c);this.setSelection(f);ORYX.Log.trace("Rule #4 applied for mouse down on %0",d.id)}else{if(g&&e&&k){var f=this.selection.clone();this.setSelection(f.without(c));ORYX.Log.trace("Rule #6 applied for mouse down on %0",c.id)}else{if(!g&&!m){this.setSelection([]);ORYX.Log.trace("Rule #2 applied for mouse down on %0",d.id);return}else{if(!g&&m&&!(c instanceof ORYX.Core.Controls.Docker)){ORYX.Log.trace("Rule #7 applied for mouse down on %0",d.id)}else{if(g&&e&&!k){this._subSelection=this._subSelection!=c?c:undefined;this.setSelection(this.selection,this._subSelection);ORYX.Log.trace("Rule #8 applied for mouse down on %0",d.id)}}}}}}}return},_handleMouseMove:function(b,a){return},_handleMouseUp:function(d,c){var a=this.getCanvas();var e=c;var b=this.eventCoordinates(d)},_handleMouseHover:function(b,a){return},_handleMouseOut:function(b,a){return},eventCoordinates:function(f){var b=this.getCanvas();var g=b.node.ownerSVGElement.createSVGPoint();g.x=f.clientX;g.y=f.clientY;var e=1;if(!isNaN(screen.logicalXDPI)&&!isNaN(screen.systemXDPI)){var c=navigator.userAgent;if(c.indexOf("MSIE")>=0){var d=Math.round((screen.deviceXDPI/screen.logicalXDPI)*100);if(d!==100){e=d/100}}}if(e!==1){g.x=g.x*e;g.y=g.y*e}var a=b.node.getScreenCTM();return g.matrixTransform(a.inverse())},eventCoordinatesXY:function(a,h){var c=this.getCanvas();var g=c.node.ownerSVGElement.createSVGPoint();g.x=a;g.y=h;var f=1;if(!isNaN(screen.logicalXDPI)&&!isNaN(screen.systemXDPI)){var d=navigator.userAgent;if(d.indexOf("MSIE")>=0){var e=Math.round((screen.deviceXDPI/screen.logicalXDPI)*100);if(e!==100){f=e/100}}}if(f!==1){g.x=g.x*f;g.y=g.y*f}var b=c.node.getScreenCTM();return g.matrixTransform(b.inverse())}};ORYX.Editor=Clazz.extend(ORYX.Editor);ORYX.Editor.createByUrl=function(a){new Ajax.Request(a,{method:"GET",onSuccess:function(c){var b=JSON.parse(c.responseText);new ORYX.Editor(b)}.bind(this)})};ORYX.Editor.graft=function(g,f,d,l){l=(l||(f&&f.ownerDocument)||document);var h;if(d===undefined){throw"Can't graft an undefined value"}else{if(d.constructor==String){h=l.createTextNode(d)}else{for(var c=0;c 0){return this.magnets[0]}else{return undefined}}},getParentShape:function(){return this.parent},getIncomingShapes:function(a){if(a){this.incoming.each(a)}return this.incoming},getIncomingNodes:function(a){return this.incoming.select(function(b){var c=(b instanceof ORYX.Core.Node);if(c&&a){a(b)}return c})},getOutgoingShapes:function(a){if(a){this.outgoing.each(a)}return this.outgoing},getOutgoingNodes:function(a){return this.outgoing.select(function(b){var c=(b instanceof ORYX.Core.Node);if(c&&a){a(b)}return c})},getAllDockedShapes:function(b){var a=this.incoming.concat(this.outgoing);if(b){a.each(b)}return a},getCanvas:function(){if(this.parent instanceof ORYX.Core.Canvas){return this.parent}else{if(this.parent instanceof ORYX.Core.Shape){return this.parent.getCanvas()}else{return undefined}}},getChildNodes:function(b,c){if(!b&&!c){return this.nodes.clone()}else{var a=[];this.nodes.each(function(d){if(!d.isVisible){return}if(c){c(d)}a.push(d);if(b&&d instanceof ORYX.Core.Shape){a=a.concat(d.getChildNodes(b,c))}});return a}},add:function(b,d,c){if(b instanceof ORYX.Core.UIObject&&!(b instanceof ORYX.Core.Edge)){if(!(this.children.member(b))){if(b.parent){b.parent.remove(b,true)}if(d!=undefined){this.children.splice(d,0,b)}else{this.children.push(b)}b.parent=this;var e;if(b instanceof ORYX.Core.Node){e=this.node.childNodes[0].childNodes[1];this.nodes.push(b)}else{if(b instanceof ORYX.Core.Controls.Control){var a=this.node.childNodes[1];if(b instanceof ORYX.Core.Controls.Docker){e=a.childNodes[0];if(this.dockers.length>=2){this.dockers.splice(d!==undefined?Math.min(d,this.dockers.length-1):this.dockers.length-1,0,b)}else{this.dockers.push(b)}}else{if(b instanceof ORYX.Core.Controls.Magnet){e=a.childNodes[1];this.magnets.push(b)}else{e=a}}}else{e=this.node}}if(d!=undefined&&d 0){a.labels=c}return a},_init:function(a){this._adjustIds(a,0)},_adjustIds:function(c,e){if(c instanceof Element){var a=c.getAttributeNS(null,"id");if(a&&a!==""){c.setAttributeNS(null,"id",this.id+a)}else{c.setAttributeNS(null,"id",this.id+"_"+this.id+"_"+e);e++}var d=c.getAttributeNS(null,"fill");if(d&&d.include("url(#")){d=d.replace(/url\(#/g,"url(#"+this.id);c.setAttributeNS(null,"fill",d)}if(c.hasChildNodes()){for(var b=0;b 1?(b===0?this.parent.dockers[b+1]:this.parent.dockers[b-1]):undefined;var n=f.getDockedShape()?f.getAbsoluteReferencePoint():f.bounds.center();var k=e&&e.getDockedShape()?e.getAbsoluteReferencePoint():e?e.bounds.center():undefined;if(!k){var a=this._dockedShape.absoluteCenterXY();var l=this._dockedShape.bounds.width()*this._dockedShape.bounds.height();k={x:n.x+(a.x-n.x)*-l,y:n.y+(a.y-n.y)*-l}}var c=undefined;c=this._dockedShape.getIntersectionPoint(n,k);if(!c){c=this.getAbsoluteReferencePoint()}if(this.parent&&this.parent.parent){var h=this.parent.parent.absoluteXY();c.x-=h.x;c.y-=h.y}this.bounds.centerMoveTo(c);this._oldRefPoint1=n;this._oldRefPoint2=k}arguments.callee.$.update.apply(this,arguments)},refresh:function(){arguments.callee.$.refresh.apply(this,arguments);var a=this.bounds.upperLeft();this._dockerNode.setAttributeNS(null,"transform","translate("+a.x+", "+a.y+")");a=Object.clone(this.referencePoint);if(a&&this._dockedShape){var b;if(this.parent instanceof ORYX.Core.Edge){b=this._dockedShape.absoluteXY()}else{b=this._dockedShape.bounds.upperLeft()}a.x+=b.x;a.y+=b.y}else{a=this.bounds.center()}this._referencePointNode.setAttributeNS(null,"transform","translate("+a.x+", "+a.y+")")},setReferencePoint:function(a){if(this.referencePoint!==a&&(!this.referencePoint||!a||this.referencePoint.x!==a.x||this.referencePoint.y!==a.y)){this.referencePoint=a;this._changed()}},getAbsoluteReferencePoint:function(){if(!this.referencePoint||!this._dockedShape){return undefined}else{var a=this._dockedShape.absoluteXY();return{x:this.referencePoint.x+a.x,y:this.referencePoint.y+a.y}}},setDockedShape:function(b){if(this._dockedShape){this._dockedShape.bounds.unregisterCallback(this._updateCallback);if(this===this.parent.dockers.first()){this.parent.incoming=this.parent.incoming.without(this._dockedShape);this._dockedShape.outgoing=this._dockedShape.outgoing.without(this.parent)}else{if(this===this.parent.dockers.last()){this.parent.outgoing=this.parent.outgoing.without(this._dockedShape);this._dockedShape.incoming=this._dockedShape.incoming.without(this.parent)}}}this._dockedShape=b;this._dockedShapeBounds=undefined;var a=undefined;if(this._dockedShape){if(this===this.parent.dockers.first()){this.parent.incoming.push(b);b.outgoing.push(this.parent)}else{if(this===this.parent.dockers.last()){this.parent.outgoing.push(b);b.incoming.push(this.parent)}}var c=this.bounds;var d=b.absoluteXY();a={x:c.center().x-d.x,y:c.center().y-d.y};this._dockedShapeBounds=this._dockedShape.bounds.clone();this._dockedShape.bounds.registerCallback(this._updateCallback);this.setDockerColor(ORYX.CONFIG.DOCKER_DOCKED_COLOR)}else{this.setDockerColor(ORYX.CONFIG.DOCKER_UNDOCKED_COLOR)}this.setReferencePoint(a);this._changed()},getDockedShape:function(){return this._dockedShape},isDocked:function(){return !!this._dockedShape},setDockerColor:function(a){this._dockerNode.lastChild.setAttributeNS(null,"fill",a)},preventHiding:function(a){this._preventHiding=Math.max(0,(this._preventHiding||0)+(a?1:-1))},hide:function(){if(this._preventHiding){return false}this.node.setAttributeNS(null,"visibility","hidden");this._referencePointNode.setAttributeNS(null,"visibility","hidden");this.children.each(function(a){a.hide()})},show:function(){this.node.setAttributeNS(null,"visibility","visible");if(this.getDockedShape() instanceof ORYX.Core.Edge){this._referencePointNode.setAttributeNS(null,"visibility","hidden")}else{this._referencePointNode.setAttributeNS(null,"visibility","visible")}this.children.each(function(a){a.show()})},toString:function(){return"Docker "+this.id}});if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}if(!ORYX.Core.Controls){ORYX.Core.Controls={}}ORYX.Core.Controls.Magnet=ORYX.Core.Controls.Control.extend({construct:function(){arguments.callee.$.construct.apply(this,arguments);this.anchorLeft;this.anchorRight;this.anchorTop;this.anchorBottom;this.bounds.set(0,0,16,16);this.node=ORYX.Editor.graft("http://www.w3.org/2000/svg",null,["g",{"pointer-events":"all"},["circle",{cx:"8",cy:"8",r:"4",stroke:"none",fill:"red","fill-opacity":"0.3"}],]);this.hide()},update:function(){arguments.callee.$.update.apply(this,arguments)},_update:function(){arguments.callee.$.update.apply(this,arguments)},refresh:function(){arguments.callee.$.refresh.apply(this,arguments);var a=this.bounds.upperLeft();this.node.setAttributeNS(null,"transform","translate("+a.x+", "+a.y+")")},show:function(){arguments.callee.$.show.apply(this,arguments)},toString:function(){return"Magnet "+this.id}});if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}ORYX.Core.Node={construct:function(a,c,b){arguments.callee.$.construct.apply(this,arguments);this.isSelectable=true;this.isMovable=true;this._dockerUpdated=false;this.facade=b;this._oldBounds=new ORYX.Core.Bounds();this._svgShapes=[];this.minimumSize=undefined;this.maximumSize=undefined;this.isHorizontallyResizable=false;this.isVerticallyResizable=false;this.dataId=undefined;this._init(this._stencil.view());this.forcedHeight=-1},_update:function(){this.dockers.invoke("update");if(this.isChanged){var c=this.bounds;var d=this._oldBounds;if(this.isResized){var o=c.width()/d.width();var n=c.height()/d.height();this._svgShapes.each(function(w){if(w.isHorizontallyResizable){w.width=w.oldWidth*o}if(w.isVerticallyResizable){w.height=w.oldHeight*n}var v;var s=w.anchorLeft;var u=w.anchorRight;if(u){v=d.width()-(w.oldX+w.oldWidth);if(s){w.width=c.width()-w.x-v}else{w.x=c.width()-(v+w.width)}}else{if(!s){w.x=o*w.oldX;if(!w.isHorizontallyResizable){w.x=w.x+w.width*o/2-w.width/2}}}var p=w.anchorTop;var t=w.anchorBottom;if(t){v=d.height()-(w.oldY+w.oldHeight);if(p){w.height=c.height()-w.y-v}else{if(!w._isYLocked){w.y=c.height()-(v+w.height)}}}else{if(!p){w.y=n*w.oldY;if(!w.isVerticallyResizable){w.y=w.y+w.height*n/2-w.height/2}}}});var g={x:0,y:0};if(!this.isHorizontallyResizable&&c.width()!==d.width()){g.x=d.width()-c.width()}if(!this.isVerticallyResizable&&c.height()!==d.height()){g.y=d.height()-c.height()}if(g.x!==0||g.y!==0){c.extend(g)}g={x:0,y:0};var e,k;if(this.minimumSize){ORYX.Log.debug("Shape (%0)'s min size: (%1x%2)",this,this.minimumSize.width,this.minimumSize.height);e=this.minimumSize.width-c.width();if(e>0){g.x+=e}k=this.minimumSize.height-c.height();if(k>0){g.y+=k}}if(this.maximumSize){ORYX.Log.debug("Shape (%0)'s max size: (%1x%2)",this,this.maximumSize.width,this.maximumSize.height);e=c.width()-this.maximumSize.width;if(e>0){g.x-=e}k=c.height()-this.maximumSize.height;if(k>0){g.y-=k}}if(g.x!==0||g.y!==0){c.extend(g)}var o=c.width()/d.width();var n=c.height()/d.height();var m,l,q,f,b,a,r;this.magnets.each(function(p){m=p.anchorLeft;l=p.anchorRight;q=p.anchorTop;f=p.anchorBottom;b=p.bounds.center();if(m){a=b.x}else{if(l){a=c.width()-(d.width()-b.x)}else{a=b.x*o}}if(q){r=b.y}else{if(f){r=c.height()-(d.height()-b.y)}else{r=b.y*n}}if(b.x!==a||b.y!==r){p.bounds.centerMoveTo(a,r)}});this.getLabels().each(function(p){if(!p.isAnchorLeft()){if(p.isAnchorRight()){p.setX(c.width()-(d.width()-p.oldX))}else{p.setX((p.position?p.position.x:p.x)*o)}}if(!p.isAnchorTop()){if(p.isAnchorBottom()){p.setY(c.height()-(d.height()-p.oldY))}else{p.setY((p.position?p.position.y:p.y)*n)}}if(p.position){if(!p.isOriginAnchorLeft()){if(p.isOriginAnchorRight()){p.setOriginX(c.width()-(d.width()-p.oldX))}else{p.setOriginX(p.x*o)}}if(!p.isOriginAnchorTop()){if(p.isOriginAnchorBottom()){p.setOriginY(c.height()-(d.height()-p.oldY))}else{p.setOriginY(p.y*n)}}}});var h=this.dockers[0];if(h){h.bounds.unregisterCallback(this._dockerChangedCallback);if(!this._dockerUpdated){h.bounds.centerMoveTo(this.bounds.center());this._dockerUpdated=false}h.update();h.bounds.registerCallback(this._dockerChangedCallback)}this.isResized=false}this.refresh();this.isChanged=false;this._oldBounds=this.bounds.clone()}this.children.each(function(p){if(!(p instanceof ORYX.Core.Controls.Docker)){p._update()}});if(this.dockers.length>0&&!this.dockers.first().getDockedShape()){this.dockers.each(function(p){p.bounds.centerMoveTo(this.bounds.center())}.bind(this))}},refresh:function(){arguments.callee.$.refresh.apply(this,arguments);var a=this.bounds.upperLeft().x;var b=this.bounds.upperLeft().y;this.node.firstChild.setAttributeNS(null,"transform","translate("+a+", "+b+")");this.node.childNodes[1].childNodes[1].setAttributeNS(null,"transform","translate("+a+", "+b+")");this._svgShapes.each(function(c){c.update()})},_dockerChanged:function(){var a=this.dockers[0];this.bounds.centerMoveTo(a.bounds.center());this._dockerUpdated=true},_initSVGShapes:function(c){var a=[];try{var f=new ORYX.Core.SVG.SVGShape(c);a.push(f)}catch(d){}if(c.hasChildNodes()){for(var b=0;b 0){e.dockers.first().setDockedShape(this)}}}}).bind(this));if(this.dockers.length===1){var d;d=f.find(function(e){return(e.prefix+"-"+e.name==="oryx-dockers")});if(d){var c=d.value.replace(/,/g," ").split(" ").without("").without("#");if(c.length===2&&this.dockers[0].getDockedShape()){this.dockers[0].setReferencePoint({x:parseFloat(c[0]),y:parseFloat(c[1])})}else{this.dockers[0].bounds.centerMoveTo(parseFloat(c[0]),parseFloat(c[1]))}}}},_init:function(n){arguments.callee.$._init.apply(this,arguments);var o=n.getElementsByTagName("g")[0];var r=n.ownerDocument.createAttribute("title");r.nodeValue=this.getStencil().title();o.setAttributeNode(r);var u=n.ownerDocument.createAttribute("id");u.nodeValue=this.id;o.setAttributeNode(u);var b=this.node.childNodes[0].childNodes[0];o=b.appendChild(o);this.addEventHandlers(o.parentNode);var t=o.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"minimumSize");if(t){t=t.replace("/,/g"," ");var k=t.split(" ");k=k.without("");if(k.length>1){this.minimumSize={width:parseFloat(k[0]),height:parseFloat(k[1])}}else{this.minimumSize={width:1,height:1}}}var g=o.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"maximumSize");if(g){g=g.replace("/,/g"," ");var l=g.split(" ");l=l.without("");if(l.length>1){this.maximumSize={width:parseFloat(l[0]),height:parseFloat(l[1])}}}if(this.minimumSize&&this.maximumSize&&(this.minimumSize.width>this.maximumSize.width||this.minimumSize.height>this.maximumSize.height)){throw this+": Minimum Size must be greater than maxiumSize."}this._svgShapes=this._initSVGShapes(o);var a={x:undefined,y:undefined};var d={x:undefined,y:undefined};var y=this;this._svgShapes.each(function(z){a.x=(a.x!==undefined)?Math.min(a.x,z.x):z.x;a.y=(a.y!==undefined)?Math.min(a.y,z.y):z.y;d.x=(d.x!==undefined)?Math.max(d.x,z.x+z.width):z.x+z.width;d.y=(d.y!==undefined)?Math.max(d.y,z.y+z.height):z.y+z.height;if(z.isHorizontallyResizable){y.isHorizontallyResizable=true;y.isResizable=true}if(z.isVerticallyResizable){y.isVerticallyResizable=true;y.isResizable=true}if(z.anchorTop&&z.anchorBottom){y.isVerticallyResizable=true;y.isResizable=true}if(z.anchorLeft&&z.anchorRight){y.isHorizontallyResizable=true;y.isResizable=true}});this._svgShapes.each(function(z){z.x-=a.x;z.y-=a.y;z.update()});var x=a.x;var w=a.y;d.x-=x;d.y-=w;a.x=0;a.y=0;if(d.x===0){d.x=1}if(d.y===0){d.y=1}this._oldBounds.set(a,d);this.bounds.set(a,d);var f=n.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_ORYX,"magnets");if(f&&f.length>0){f=$A(f[0].getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_ORYX,"magnet"));var y=this;f.each(function(A){var E=new ORYX.Core.Controls.Magnet({eventHandlerCallback:y.eventHandlerCallback});var z=parseFloat(A.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"cx"));var F=parseFloat(A.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"cy"));E.bounds.centerMoveTo({x:z-x,y:F-w});var D=A.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"anchors");if(D){D=D.replace("/,/g"," ");D=D.split(" ").without("");for(var B=0;B 0){s=s[0];var q=this.createDocker();var e=parseFloat(s.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"cx"));var c=parseFloat(s.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"cy"));q.bounds.centerMoveTo({x:e-x,y:c-w});var p=s.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX,"anchors");if(p){p=p.replace("/,/g"," ");p=p.split(" ").without("");for(var v=0;v e){e=f}});var c=this.bounds;var b=false;if(this.minimumSize){var d=this.minimumSize.height;if(e d&&d>this.forcedHeight){c.set(c.upperLeft().x,c.upperLeft().y,c.lowerRight().x,c.upperLeft().y+d);b=true}else{if(e>d&&c.height()!=e&&e>this.forcedHeight){c.set(c.upperLeft().x,c.upperLeft().y,c.lowerRight().x,c.upperLeft().y+e);b=true}else{if(c.height()>this.forcedHeight&&this.forcedHeight>0){c.set(c.upperLeft().x,c.upperLeft().y,c.lowerRight().x,c.upperLeft().y+this.forcedHeight);b=true}}}}if(b){if(this.facade.getCanvas()!=null){this.facade.getCanvas().update()}if(this.facade.getSelection().member(this)){var a=this.facade.getSelection();this.facade.setSelection([]);this.facade.setSelection(a)}}},createDocker:function(){var a=new ORYX.Core.Controls.Docker({eventHandlerCallback:this.eventHandlerCallback});a.bounds.registerCallback(this._dockerChangedCallback);this.dockers.push(a);a.parent=this;a.bounds.registerCallback(this._changedCallback);return a},toString:function(){return this._stencil.title()+" "+this.id}};ORYX.Core.Node=ORYX.Core.Shape.extend(ORYX.Core.Node);NAMESPACE_SVG="http://www.w3.org/2000/svg";NAMESPACE_ORYX="http://www.b3mn.org/oryx";if(!ORYX){var ORYX={}}if(!ORYX.Core){ORYX.Core={}}ORYX.Core.Edge={construct:function(a,d,b){arguments.callee.$.construct.apply(this,arguments);this.isMovable=true;this.isSelectable=true;this._dockerUpdated=false;this._markers=new Hash();this._paths=[];this._interactionPaths=[];this._dockersByPath=new Hash();this._markersByPath=new Hash();this.attachedNodePositionData=new Hash();var c=this.node.childNodes[0].childNodes[0];c=ORYX.Editor.graft("http://www.w3.org/2000/svg",c,["g",{"pointer-events":"painted"}]);this.addEventHandlers(c.parentNode);this._oldBounds=this.bounds.clone();this._init(this._stencil.view());if(d instanceof Array){this.deserialize(d)}},_update:function(c){if(this._dockerUpdated||this.isChanged||c){this.dockers.invoke("update");if(false&&(this.bounds.width()===0||this.bounds.height()===0)){var d=this.bounds.width();var q=this.bounds.height();this.bounds.extend({x:d===0?2:0,y:q===0?2:0});this.bounds.moveBy({x:d===0?-1:0,y:q===0?-1:0})}var e=this.bounds.upperLeft();var n=this._oldBounds.upperLeft();var f=this._oldBounds.width()===0?this.bounds.width():this._oldBounds.width();var p=this._oldBounds.height()===0?this.bounds.height():this._oldBounds.height();var m=e.x-n.x;var k=e.y-n.y;var o=(this.bounds.width()/f)||1;var g=(this.bounds.height()/p)||1;this.dockers.each((function(b){b.bounds.unregisterCallback(this._dockerChangedCallback);if(!this._dockerUpdated){b.bounds.moveBy(m,k);if(o!==1||g!==1){var s=b.bounds.upperLeft().x-e.x;var a=b.bounds.upperLeft().y-e.y;b.bounds.moveTo(e.x+s*o,e.y+a*g)}}b.update();b.bounds.registerCallback(this._dockerChangedCallback)}).bind(this));if(this._dockerUpdated){var l=this.dockers.first().bounds.center();var h=this.dockers.first().bounds.center();this.dockers.each((function(b){var a=b.bounds.center();l.x=Math.min(l.x,a.x);l.y=Math.min(l.y,a.y);h.x=Math.max(h.x,a.x);h.y=Math.max(h.y,a.y)}).bind(this));this.bounds.set(Object.clone(l),Object.clone(h))}e=this.bounds.upperLeft();n=this._oldBounds.upperLeft();o=(this.bounds.width()/(f||this.bounds.width()));g=(this.bounds.height()/(p||this.bounds.height()));m=e.x-n.x;k=e.y-n.y;this.getLabels().each(function(C){if(C.getReferencePoint()){var w=C.getReferencePoint();var K=w.segment.from,b=w.segment.to;if(!K||!K.parent||!b||!b.parent){return}var J=K.bounds.center(),B=b.bounds.center();if(J.x===w.segment.fromPosition.x&&J.y===w.segment.fromPosition.y&&B.x===w.segment.toPosition.x&&B.y===w.segment.toPosition.y&&!w.dirty){return}if(!this.parent.initializingShapes){var L=ORYX.Core.Math.getDistanceBetweenTwoPoints(w.segment.fromPosition,w.segment.toPosition,w.intersection);var M=ORYX.Core.Math.getPointBetweenTwoPoints(J,B,isNaN(L)?0.5:L);var I=ORYX.Core.Math.getOrthogonalIdentityVector(J,B);var a=Math.abs(I.y)===1,F=Math.abs(I.x)===1;I.x*=w.distance;I.y*=w.distance;I.x+=M.x;I.y+=M.y;var H=a&&w.orientation&&(w.iorientation||w.orientation).endsWith("r")?-C.getWidth():0;var G=F&&w.orientation&&(w.iorientation||w.orientation).startsWith("l")?-C.getHeight()+2:0;C.setX(I.x+H);C.setY(I.y+G);this.updateReferencePointOfLabel(C,M,K,b)}else{var I=ORYX.Core.Math.getOrthogonalIdentityVector(J,B);I.x*=w.distance;I.y*=w.distance;I.x+=w.intersection.x;I.y+=w.intersection.y;C.setX(I.x);C.setY(I.y);w.segment.fromPosition=J;w.segment.toPosition=B}return}if(C.position&&!this.parent.initializingShapes){var E=C.position.x+(m*(o||1));if(E>this.bounds.lowerRight().x){E+=this.bounds.width()-(this.bounds.width()/(o||1))}var D=C.position.y+(k*(g||1));if(D>this.bounds.lowerRight().y){D+=this.bounds.height()-(this.bounds.height()/(g||1))}C.setX(E);C.setY(D);return}switch(C.getEdgePosition()){case"starttop":var N=this._getAngle(this.dockers[0],this.dockers[1]);var z=this.dockers.first().bounds.center();if(N<=90||N>270){C.horizontalAlign("left");C.verticalAlign("bottom");C.x=z.x+C.getOffsetTop();C.y=z.y-C.getOffsetTop();C.rotate(360-N,z)}else{C.horizontalAlign("right");C.verticalAlign("bottom");C.x=z.x-C.getOffsetTop();C.y=z.y-C.getOffsetTop();C.rotate(180-N,z)}break;case"startmiddle":var N=this._getAngle(this.dockers[0],this.dockers[1]);var z=this.dockers.first().bounds.center();if(N<=90||N>270){C.horizontalAlign("left");C.verticalAlign("bottom");C.x=z.x+2;C.y=z.y+4;C.rotate(360-N,z)}else{C.horizontalAlign("right");C.verticalAlign("bottom");C.x=z.x+1;C.y=z.y+4;C.rotate(180-N,z)}break;case"startbottom":var N=this._getAngle(this.dockers[0],this.dockers[1]);var z=this.dockers.first().bounds.center();if(N<=90||N>270){C.horizontalAlign("left");C.verticalAlign("top");C.x=z.x+C.getOffsetBottom();C.y=z.y+C.getOffsetBottom();C.rotate(360-N,z)}else{C.horizontalAlign("right");C.verticalAlign("top");C.x=z.x-C.getOffsetBottom();C.y=z.y+C.getOffsetBottom();C.rotate(180-N,z)}break;case"midtop":var v=this.dockers.length;if(v%2==0){var N=this._getAngle(this.dockers[v/2-1],this.dockers[v/2]);var u=this.dockers[v/2-1].bounds.center();var s=this.dockers[v/2].bounds.center();var z={x:(u.x+s.x)/2,y:(u.y+s.y)/2};C.horizontalAlign("center");C.verticalAlign("bottom");C.x=z.x;C.y=z.y-C.getOffsetTop();if(N<=90||N>270){C.rotate(360-N,z)}else{C.rotate(180-N,z)}}else{var A=parseInt(v/2);var N=this._getAngle(this.dockers[A],this.dockers[A+1]);var z=this.dockers[A].bounds.center();if(N<=90||N>270){C.horizontalAlign("left");C.verticalAlign("bottom");C.x=z.x+C.getOffsetTop();C.y=z.y-C.getOffsetTop();C.rotate(360-N,z)}else{C.horizontalAlign("right");C.verticalAlign("bottom");C.x=z.x-C.getOffsetTop();C.y=z.y-C.getOffsetTop();C.rotate(180-N,z)}}break;case"midbottom":var v=this.dockers.length;if(v%2==0){var N=this._getAngle(this.dockers[v/2-1],this.dockers[v/2]);var u=this.dockers[v/2-1].bounds.center();var s=this.dockers[v/2].bounds.center();var z={x:(u.x+s.x)/2,y:(u.y+s.y)/2};C.horizontalAlign("center");C.verticalAlign("top");C.x=z.x;C.y=z.y+C.getOffsetTop();if(N<=90||N>270){C.rotate(360-N,z)}else{C.rotate(180-N,z)}}else{var A=parseInt(v/2);var N=this._getAngle(this.dockers[A],this.dockers[A+1]);var z=this.dockers[A].bounds.center();if(N<=90||N>270){C.horizontalAlign("left");C.verticalAlign("top");C.x=z.x+C.getOffsetBottom();C.y=z.y+C.getOffsetBottom();C.rotate(360-N,z)}else{C.horizontalAlign("right");C.verticalAlign("top");C.x=z.x-C.getOffsetBottom();C.y=z.y+C.getOffsetBottom();C.rotate(180-N,z)}}break;case"endtop":var t=this.dockers.length;var N=this._getAngle(this.dockers[t-2],this.dockers[t-1]);var z=this.dockers.last().bounds.center();if(N<=90||N>270){C.horizontalAlign("right");C.verticalAlign("bottom");C.x=z.x-C.getOffsetTop();C.y=z.y-C.getOffsetTop();C.rotate(360-N,z)}else{C.horizontalAlign("left");C.verticalAlign("bottom");C.x=z.x+C.getOffsetTop();C.y=z.y-C.getOffsetTop();C.rotate(180-N,z)}break;case"endbottom":var t=this.dockers.length;var N=this._getAngle(this.dockers[t-2],this.dockers[t-1]);var z=this.dockers.last().bounds.center();if(N<=90||N>270){C.horizontalAlign("right");C.verticalAlign("top");C.x=z.x-C.getOffsetBottom();C.y=z.y+C.getOffsetBottom();C.rotate(360-N,z)}else{C.horizontalAlign("left");C.verticalAlign("top");C.x=z.x+C.getOffsetBottom();C.y=z.y+C.getOffsetBottom();C.rotate(180-N,z)}break}}.bind(this));this.children.each(function(a){if(a instanceof ORYX.Core.Node){this.calculatePositionOfAttachedChildNode.call(this,a)}}.bind(this));this.refreshAttachedNodes();this.refresh();this.isChanged=false;this._dockerUpdated=false;this._oldBounds=this.bounds.clone()}var r=navigator.userAgent;if(navigator.appVersion.indexOf("MSIE 10")!==-1||(r.indexOf("Trident")!==-1&&r.indexOf("rv:11")!==-1)){this.node.parentNode.insertBefore(this.node,this.node)}},movePointToUpperLeftOfNode:function(a,b){a.x-=b.width()/2;a.y-=b.height()/2},refreshAttachedNodes:function(){this.attachedNodePositionData.values().each(function(a){var d=a.segment.docker1.bounds.center();var b=a.segment.docker2.bounds.center();this.relativizePoint(d);this.relativizePoint(b);var c=new Object();c.x=d.x+a.relativDistanceFromDocker1*(b.x-d.x);c.y=d.y+a.relativDistanceFromDocker1*(b.y-d.y);this.movePointToUpperLeftOfNode(c,a.node.bounds);a.node.bounds.moveTo(c);a.node._update()}.bind(this))},calculatePositionOfAttachedChildNode:function(b){var a=new Object();a.x=0;a.y=0;if(!this.attachedNodePositionData.get(b.getId())){this.attachedNodePositionData.set(b.getId(),new Object());this.attachedNodePositionData.get(b.getId()).relativDistanceFromDocker1=0;this.attachedNodePositionData.get(b.getId()).node=b;this.attachedNodePositionData.get(b.getId()).segment=new Object();this.findEdgeSegmentForNode(b)}else{if(b.isChanged){this.findEdgeSegmentForNode(b)}}},findEdgeSegmentForNode:function(e){var b=this.dockers.length;var k=undefined;for(i=1;i0){var a=this.bounds.upperLeft().x;var c=this.bounds.upperLeft().y;this.node.firstChild.childNodes[1].setAttributeNS(null,"transform","translate("+a+", "+c+")")}},getIntersectionPoint:function(){var a=Math.floor(this.dockers.length/2);return ORYX.Core.Math.midPoint(this.dockers[a-1].bounds.center(),this.dockers[a].bounds.center())},isBoundsIncluded:function(c){var a=this.dockers,b=a.length;return a.any(function(g,f){if(f==b-1){return false}var e=g.bounds.center();var d=a[f+1].bounds.center();return ORYX.Core.Math.isRectOverLine(e.x,e.y,d.x,d.y,c.a.x,c.a.y,c.b.x,c.b.y)})},isPointIncluded:function(g,f){var a=this.absoluteBounds().isIncluded(g,f,ORYX.CONFIG.OFFSET_EDGE_BOUNDS);var e=undefined;if(a&&this.dockers.length>0){var c=0;var d,b;do{d=this.dockers[c].bounds.center();b=this.dockers[++c].bounds.center();e=ORYX.Core.Math.isPointInLine(g,f,d.x,d.y,b.x,b.y,ORYX.CONFIG.OFFSET_EDGE_BOUNDS)}while(!e&&c =o.segment.fromIndex&&l<=o.segment.toIndex){var n=this.findSegment(o.intersection);if(!n){n.fromDocker=o.segment.fromIndex>=(this.dockers.length/2)?this.dockers[0]:this.dockers[this.dockers.length-2];n.toDocker=this.dockers[this.dockers.indexOf(from)+1]}var k=n.fromDocker.bounds.center(),p=n.toDocker.bounds.center();var q=ORYX.Core.Math.getPointOfIntersectionPointLine(k,p,o.intersection,true);this.updateReferencePointOfLabel(m,q,n.fromDocker,n.toDocker,true)}}.bind(this));this.refreshAttachedNodes()},getAttachedNodePositionDataForSegment:function(c,a){if(!((c instanceof ORYX.Core.Controls.Docker)&&(a instanceof ORYX.Core.Controls.Docker))){return[]}var b=this.attachedNodePositionData.findAll(function(d){return d.value.segment.docker1===c&&d.value.segment.docker2===a});if(!b){return[]}return b},remove:function(a){arguments.callee.$.remove.apply(this,arguments);if(this.attachedNodePositionData.get(a.getId())){this.attachedNodePositionData.unset[a.getId()]}if(a instanceof ORYX.Core.Controls.Docker){this.handleChildShapesAfterRemoveDocker(a)}},updateReferencePointOfLabel:function(a,g,f,e,b){if(!a.getReferencePoint()||!a.isVisible){return}var c=a.getReferencePoint();if(c.orientation&&c.orientation!=="ce"){var d=this._getAngle(f,e);if(c.distance>=0){if(d==0){a.horizontalAlign("left");a.verticalAlign("bottom")}else{if(d>0&&d<90){a.horizontalAlign("right");a.verticalAlign("bottom")}else{if(d==90){a.horizontalAlign("right");a.verticalAlign("top")}else{if(d>90&&d<180){a.horizontalAlign("right");a.verticalAlign("top")}else{if(d==180){a.horizontalAlign("left");a.verticalAlign("top")}else{if(d>180&&d<270){a.horizontalAlign("left");a.verticalAlign("top")}else{if(d==270){a.horizontalAlign("left");a.verticalAlign("top")}else{if(d>270&&d<=360){a.horizontalAlign("left");a.verticalAlign("bottom")}}}}}}}}}else{if(d==0){a.horizontalAlign("left");a.verticalAlign("top")}else{if(d>0&&d<90){a.horizontalAlign("left");a.verticalAlign("top")}else{if(d==90){a.horizontalAlign("left");a.verticalAlign("top")}else{if(d>90&&d<180){a.horizontalAlign("left");a.verticalAlign("bottom")}else{if(d==180){a.horizontalAlign("left");a.verticalAlign("bottom")}else{if(d>180&&d<270){a.horizontalAlign("right");a.verticalAlign("bottom")}else{if(d==270){a.horizontalAlign("right");a.verticalAlign("top")}else{if(d>270&&d<=360){a.horizontalAlign("right");a.verticalAlign("top")}}}}}}}}}c.iorientation=c.iorientation||c.orientation;c.orientation=(a.verticalAlign()=="top"?"u":"l")+(a.horizontalAlign()=="left"?"l":"r")}a.setReferencePoint(jQuery.extend({},{intersection:g,segment:{from:f,fromIndex:this.dockers.indexOf(f),fromPosition:f.bounds.center(),to:e,toIndex:this.dockers.indexOf(e),toPosition:e.bounds.center()},dirty:b||false},c))},handleChildShapesAfterRemoveDocker:function(a){if(!(a instanceof ORYX.Core.Controls.Docker)){return}this.attachedNodePositionData.each(function(c){if(c.value.segment.docker1===a){var b=this.dockers.indexOf(c.value.segment.docker2);if(b==-1){return}c.value.segment.docker1=this.dockers[b-1]}else{if(c.value.segment.docker2===a){var b=this.dockers.indexOf(c.value.segment.docker1);if(b==-1){return}c.value.segment.docker2=this.dockers[b+1]}}}.bind(this));this.getLabels().each(function(b){var d=b.getReferencePoint();if(!d){return}var g=d.segment.from;var f=d.segment.to;if(g!==a&&f!==a){return}var c=this.findSegment(d.intersection);if(!c){g=c.fromDocker;f=c.toDocker}else{g=g===a?this.dockers[this.dockers.indexOf(f)-1]:g;f=this.dockers[this.dockers.indexOf(g)+1]}var e=ORYX.Core.Math.getPointOfIntersectionPointLine(g.bounds.center(),f.bounds.center(),d.intersection,true);this.updateReferencePointOfLabel(b,e,g,f,true)}.bind(this));this.refreshAttachedNodes()},addDocker:function(b,d){var c;var a;this._dockersByPath.any((function(e){return e.value.any((function(h,l){if(!c){c=h;return false}else{var n=c.bounds.center();var m=h.bounds.center();var f=1;if(!isNaN(screen.logicalXDPI)&&!isNaN(screen.systemXDPI)){var g=navigator.userAgent;if(g.indexOf("MSIE")>=0){var p=Math.round((screen.deviceXDPI/screen.logicalXDPI)*100);if(p!==100){f=p/100}}}if(f!==1){b.x=b.x/f;b.y=b.y/f}if(ORYX.Core.Math.isPointInLine(b.x,b.y,n.x,n.y,m.x,m.y,10)){var q=this._paths.find(function(r){return r.id===e.key});if(q){var o=q.getAttributeNS(NAMESPACE_ORYX,"allowDockers");if(o&&o.toLowerCase()==="no"){return true}}var k=(d)?d:this.createDocker(this.dockers.indexOf(c)+1,b);k.bounds.centerMoveTo(b);if(d){this.add(k,this.dockers.indexOf(c)+1)}a=k;return true}else{c=h;return false}}}).bind(this))}).bind(this));return a},removeDocker:function(a){if(this.dockers.length>2&&!(this.dockers.first()===a)){this._dockersByPath.any((function(b){if(b.value.member(a)){if(a===b.value.last()){return true}else{this.remove(a);this._dockersByPath.set(b.key,b.value.without(a));this.isChanged=true;this._dockerChanged();return true}}return false}).bind(this))}},removeUnusedDockers:function(){var a=new Hash();this.dockers.each(function(e,b){if(b==0||b==this.dockers.length-1){return}var d=this.dockers[b-1];if(a.values().indexOf(d)!=-1&&this.dockers[b-2]){d=this.dockers[b-2]}var c=this.dockers[b+1];var f=d.getDockedShape()&&d.referencePoint?d.getAbsoluteReferencePoint():d.bounds.center();var h=c.getDockedShape()&&c.referencePoint?c.getAbsoluteReferencePoint():c.bounds.center();var g=e.bounds.center();if(ORYX.Core.Math.isPointInLine(g.x,g.y,f.x,f.y,h.x,h.y,1)){a.set(b,e)}}.bind(this));a.each(function(b){this.removeDocker(b.value)}.bind(this));if(a.values().length>0){this._update(true)}return a},_init:function(f){arguments.callee.$._init.apply(this,arguments);var e,c,s,q;var k=f.getElementsByTagNameNS(NAMESPACE_SVG,"defs");if(k.length>0){k=k[0];var d=$A(k.getElementsByTagNameNS(NAMESPACE_SVG,"marker"));var l;var o=this;d.each(function(t){try{l=new ORYX.Core.SVG.SVGMarker(t.cloneNode(true));o._markers.set(l.id,l);var u=$A(l.element.getElementsByTagNameNS(NAMESPACE_SVG,"text"));var g;u.each(function(w){g=new ORYX.Core.SVG.Label({textElement:w,shapeId:this.id});o._labels.set(g.id,g)})}catch(v){}})}var b=f.getElementsByTagNameNS(NAMESPACE_SVG,"g");if(b.length<=0){throw"Edge: No g element found."}var m=b[0];m.setAttributeNS(null,"id",null);var h=true;$A(m.childNodes).each((function(G,A){if(ORYX.Editor.checkClassType(G,SVGPathElement)){G=G.cloneNode(false);var z=this.id+"_"+A;G.setAttributeNS(null,"id",z);this._paths.push(G);var C=[];var H=G.getAttributeNS(null,"marker-start");if(H&&H!==""){H=H.strip();H=H.replace(/^url\(#/,"");var w=this.getValidMarkerId(H);G.setAttributeNS(null,"marker-start","url(#"+w+")");C.push(this._markers.get(w))}H=G.getAttributeNS(null,"marker-mid");if(H&&H!==""){H=H.strip();H=H.replace(/^url\(#/,"");var t=this.getValidMarkerId(H);G.setAttributeNS(null,"marker-mid","url(#"+t+")");C.push(this._markers.get(t))}H=G.getAttributeNS(null,"marker-end");if(H&&H!==""){H=H.strip();var B=this.getValidMarkerId(H);G.setAttributeNS(null,"marker-end","url(#"+B+")");C.push(this._markers.get(B))}this._markersByPath[z]=C;var g=new PathParser();var F=new ORYX.Core.SVG.PointsPathHandler();g.setHandler(F);g.parsePath(G);if(F.points.length<4){throw"Edge: Path has to have two or more points specified."}this._dockersByPath.set(z,[]);for(var v=0;v 0){var u=new ORYX.Core.Controls.Docker({eventHandlerCallback:this.eventHandlerCallback});u.bounds.centerMoveTo(E,D);u.bounds.registerCallback(this._dockerChangedCallback);this.add(u,this.dockers.length);if(e){e=Math.min(E,e);c=Math.min(D,c)}else{e=E;c=D}if(s){s=Math.max(E,s);q=Math.max(D,q)}else{s=E;q=D}}}h=false}}).bind(this));this.bounds.set(e,c,s,q);if(false&&(this.bounds.width()===0||this.bounds.height()===0)){var a=this.bounds.width();var p=this.bounds.height();this.bounds.extend({x:a===0?2:0,y:p===0?2:0});this.bounds.moveBy({x:a===0?-1:0,y:p===0?-1:0})}this._oldBounds=this.bounds.clone();this._paths.reverse();var r=[];this._paths.each((function(g){r.push(this.node.childNodes[0].childNodes[0].childNodes[0].appendChild(g))}).bind(this));this._paths=r;this._paths.each((function(t){var g=t.cloneNode(false);g.setAttributeNS(null,"id",undefined);g.setAttributeNS(null,"stroke-width",10);g.setAttributeNS(null,"visibility","hidden");g.setAttributeNS(null,"stroke-dasharray",null);g.setAttributeNS(null,"stroke","black");g.setAttributeNS(null,"fill","none");g.setAttributeNS(null,"title",this.getStencil().title());this._interactionPaths.push(this.node.childNodes[0].childNodes[0].childNodes[0].appendChild(g))}).bind(this));this._paths.reverse();this._interactionPaths.reverse();var n=f.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG,"text");$A(n).each((function(t){var g=new ORYX.Core.SVG.Label({textElement:t,shapeId:this.id});this.node.childNodes[0].childNodes[0].appendChild(g.node);this._labels.set(g.id,g);g.registerOnChange(this.layout.bind(this))}).bind(this));this.propertiesChanged.each(function(g){g.value=true})},getValidMarkerId:function(b){if(b.indexOf('url("#')>=0){var a=b.replace(/^url\(\"#/,"").replace(/\"\)$/,"");return this.id+a}else{b=b.replace(/^url\(#/,"");return this.id.concat(b.replace(/\)$/,""))}},addMarkers:function(a){this._markers.each(function(b){if(!a.ownerDocument.getElementById(b.value.id)){b.value.element=a.appendChild(b.value.element)}})},removeMarkers:function(){var b=this.node.ownerSVGElement;if(b){var a=b.getElementsByTagNameNS(NAMESPACE_SVG,"defs");if(a.length>0){a=a[0];this._markers.each(function(c){var d=a.ownerDocument.getElementById(c.value.id);if(d){c.value.element=a.removeChild(c.value.element)}})}}},_dockerChanged:function(){this._dockerUpdated=true},serialize:function(){var a=arguments.callee.$.serialize.apply(this);var d="";this._dockersByPath.each((function(e){e.value.each(function(k){var h=k.getDockedShape()&&k.referencePoint?k.referencePoint:k.bounds.center();d=d.concat(h.x+" "+h.y+" ")});d+=" # "}).bind(this));a.push({name:"dockers",prefix:"oryx",value:d,type:"literal"});var b=this.dockers.last();var g=b.getDockedShape();if(g){a.push({name:"target",prefix:"raziel",value:"#"+ERDF.__stripHashes(g.resourceId),type:"resource"})}try{var c=this.getStencil().serialize();if(c.type){c.shape=this;c.data=a;c.result=undefined;c.forceExecution=true;this._delegateEvent(c);if(c.result){a=c.result}}}catch(f){}return a},deserialize:function(f){try{var c=this.getStencil().deserialize();if(c.type){c.shape=this;c.data=f;c.result=undefined;c.forceExecution=true;this._delegateEvent(c);if(c.result){f=c.result}}}catch(h){}var g=f.find(function(e){return(e.prefix+"-"+e.name)=="raziel-target"});var a;if(g){a=this.getCanvas().getChildShapeByResourceId(g.value)}var d=f.findAll(function(e){return(e.prefix+"-"+e.name)=="raziel-outgoing"});d.each((function(l){if(!this.parent){return}var e=this.getCanvas().getChildShapeByResourceId(l.value);if(e){if(e==a){this.dockers.last().setDockedShape(e);this.dockers.last().setReferencePoint({x:e.bounds.width()/2,y:e.bounds.height()/2})}else{if(e instanceof ORYX.Core.Edge){e.dockers.first().setDockedShape(this)}}}}).bind(this));var b=f.find(function(e){return(e.prefix==="oryx"&&e.name==="dockers")});if(b){var k=b.value.split("#").without("").without(" ");k.each((function(l,o){var r=l.replace(/,/g," ").split(" ").without("");if(r.length%2===0){var s=this._paths[o];if(s){if(o===0){while(this._dockersByPath.get(s.id).length>2){this.removeDocker(this._dockersByPath.get(s.id)[1])}}else{while(this._dockersByPath.get(s.id).length>1){this.removeDocker(this._dockersByPath.get(s.id)[0])}}var e=this._dockersByPath.get(s.id);if(o===0){var q=parseFloat(r.shift());var p=parseFloat(r.shift());if(e.first().getDockedShape()){e.first().setReferencePoint({x:q,y:p})}else{e.first().bounds.centerMoveTo(q,p)}}p=parseFloat(r.pop());q=parseFloat(r.pop());if(e.last().getDockedShape()){e.last().setReferencePoint({x:q,y:p})}else{e.last().bounds.centerMoveTo(q,p)}for(var m=0;m '+b:b;return b}catch(g){return -1}},openXMLWindow:function(a){var b=window.open("data:application/xml,"+encodeURIComponent(a),"_blank","resizable=yes,width=600,height=600,toolbar=0,scrollbars=yes")},openDownloadWindow:function(b,c){var d=window.open("");if(d!=null){d.document.open();d.document.write("");var a=d.document.createElement("form");d.document.body.appendChild(a);var e=function(f,g){var h=document.createElement("input");h.name=f;h.type="hidden";h.value=g;return h};a.appendChild(e("download",c));a.appendChild(e("file",b));a.method="POST";d.document.write("");d.document.close();a.action=ORYX.PATH+"/download";a.submit()}},getSerializedDOM:function(){var a=DataManager.serializeDOM(this.facade);a=' '+a+"";return a},enableReadOnlyMode:function(){this.facade.disableEvent(ORYX.CONFIG.EVENT_MOUSEDOWN);this._stopSelectionChange=function(){if(this.facade.getSelection().length>0){this.facade.setSelection([])}};this.facade.registerOnEvent(ORYX.CONFIG.EVENT_SELECTION_CHANGED,this._stopSelectionChange.bind(this))},disableReadOnlyMode:function(){this.facade.enableEvent(ORYX.CONFIG.EVENT_MOUSEDOWN);if(this._stopSelectionChange){this.facade.unregisterOnEvent(ORYX.CONFIG.EVENT_SELECTION_CHANGED,this._stopSelectionChange.bind(this));this._stopSelectionChange=undefined}},getRDFFromDOM:function(){try{var c="";source=ORYX.PATH+"lib/extract-rdf.xsl";new Ajax.Request(source,{asynchronous:false,method:"get",onSuccess:function(e){c=e.responseText}.bind(this),onFailure:(function(e){ORYX.Log.error("XSL load failed"+e)}).bind(this)});var k=new DOMParser();var h=k.parseFromString(this.getSerializedDOM(),"text/xml");var f=k.parseFromString(c,"text/xml");var b=new XSLTProcessor();b.importStylesheet(f);var a=b.transformToFragment(h,document);var d=new XMLSerializer();return d.serializeToString(a)}catch(g){console.log("error serializing "+g);return""}},isStencilSetExtensionLoaded:function(a){return this.facade.getStencilSets().values().any(function(b){return b.extensions().keys().any(function(c){return c==a}.bind(this))}.bind(this))},doLayout:function(a){if(this.facade.raiseEvent){this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_LAYOUT,shapes:a})}else{this.facade.handleEvents({type:ORYX.CONFIG.EVENT_LAYOUT,shapes:a})}},layoutEdges:function(b,a,d){if(!this.facade.isExecutingCommands()){return}var c=ORYX.Core.Command.extend({construct:function(f,h,k,g){this.edges=f;this.node=h;this.plugin=g;this.offset=k;var e=h.absoluteXY();this.ulo={x:e.x-k.x,y:e.y-k.y}},execute:function(){if(this.changes){this.executeAgain();return}else{this.changes=[];this.edges.each(function(e){this.changes.push({edge:e,oldDockerPositions:e.dockers.map(function(f){return f.bounds.center()})})}.bind(this))}this.edges.findAll(function(e){return e.dockers.length>2}.bind(this)).each(function(g){if(g.dockers.first().getDockedShape()===this.node){var f=g.dockers[1];if(this.align(f.bounds,g.dockers.first())){f.update()}}else{if(g.dockers.last().getDockedShape()===this.node){var e=g.dockers[g.dockers.length-2];if(this.align(e.bounds,g.dockers.last())){e.update()}}}g._update(true);g.removeUnusedDockers();if(this.isBendPointIncluded(g)){this.plugin.doLayout(g);return}}.bind(this));this.edges.each(function(e){if(e.dockers.length==2){var g=e.dockers.first().getAbsoluteReferencePoint()||e.dockers.first().bounds.center();var f=e.dockers.last().getAbsoluteReferencePoint()||e.dockers.first().bounds.center();if(Math.abs(-Math.abs(g.x-f.x)+Math.abs(this.offset.x))<2||Math.abs(-Math.abs(g.y-f.y)+Math.abs(this.offset.y))<2){this.plugin.doLayout(e)}}}.bind(this));this.edges.each(function(f,e){this.changes[e].dockerPositions=f.dockers.map(function(g){return g.bounds.center()})}.bind(this))},align:function(k,f){var h=f.getAbsoluteReferencePoint()||f.bounds.center();var l=k.center().x-h.x;var g=k.center().y-h.y;if(Math.abs(-Math.abs(l)+Math.abs(this.offset.x))<3&&this.offset.xs===undefined){k.moveBy({x:-l,y:0})}if(Math.abs(-Math.abs(g)+Math.abs(this.offset.y))<3&&this.offset.ys===undefined){k.moveBy({y:-g,x:0})}if(this.offset.xs!==undefined||this.offset.ys!==undefined){var e=f.getDockedShape().absoluteXY();l=k.center().x-(e.x+((h.x-e.x)/this.offset.xs));g=k.center().y-(e.y+((h.y-e.y)/this.offset.ys));if(Math.abs(-Math.abs(l)+Math.abs(this.offset.x))<3){k.moveBy({x:-(k.center().x-h.x),y:0})}if(Math.abs(-Math.abs(g)+Math.abs(this.offset.y))<3){k.moveBy({y:-(k.center().y-h.y),x:0})}}},isBendPointIncluded:function(e){var f=e.dockers.first().getDockedShape();var g=e.dockers.last().getDockedShape();if(f){f=f.absoluteBounds();f.widen(5)}if(g){g=g.absoluteBounds();g.widen(20)}return e.dockers.any(function(k,h){var l=k.bounds.center();return h!=0&&h!=e.dockers.length-1&&((f&&f.isIncluded(l))||(g&&g.isIncluded(l)))})},removeAllDocker:function(e){e.dockers.slice(1,e.dockers.length-1).each(function(f){e.removeDocker(f)})},executeAgain:function(){this.changes.each(function(e){this.removeAllDocker(e.edge);e.dockerPositions.each(function(h,f){if(f==0||f==e.dockerPositions.length-1){return}var g=e.edge.createDocker(undefined,h);g.bounds.centerMoveTo(h);g.update()}.bind(this));e.edge._update(true)}.bind(this))},rollback:function(){this.changes.each(function(e){this.removeAllDocker(e.edge);e.oldDockerPositions.each(function(h,f){if(f==0||f==e.oldDockerPositions.length-1){return}var g=e.edge.createDocker(undefined,h);g.bounds.centerMoveTo(h);g.update()}.bind(this));e.edge._update(true)}.bind(this))}});this.facade.executeCommands([new c(a,b,d,this)])}});if(!ORYX){var ORYX={}}if(!ORYX.Plugins){ORYX.Plugins={}}ORYX.Plugins.AbstractLayouter=ORYX.Plugins.AbstractPlugin.extend({layouted:[],construct:function(a){arguments.callee.$.construct.apply(this,arguments);this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LAYOUT,this._initLayout.bind(this))},isIncludedInLayout:function(a){if(!(this.layouted instanceof Array)){this.layouted=[this.layouted].compact()}if(this.layouted.length<=0){return true}return this.layouted.any(function(b){if(typeof b=="string"){return a.getStencil().id().include(b)}else{return a instanceof b}})},_initLayout:function(c){var b=[c.shapes].flatten().compact();var a=b.findAll(function(d){return this.isIncludedInLayout(d)}.bind(this));if(a.length>0){this.layout(a)}},layout:function(a){throw new Error("Layouter has to implement the layout function.")}});if(!ORYX.Plugins){ORYX.Plugins=new Object()}ORYX.Plugins.Edit=Clazz.extend({construct:function(a){this.facade=a;this.clipboard=new ORYX.Plugins.Edit.ClipBoard();this.facade.offer({name:ORYX.I18N.Edit.cut,description:ORYX.I18N.Edit.cutDesc,icon:ORYX.PATH+"images/cut.png",keyCodes:[{metaKeys:[ORYX.CONFIG.META_KEY_META_CTRL],keyCode:88,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.callEdit.bind(this,this.editCut),group:ORYX.I18N.Edit.group,index:1,minShape:1});this.facade.offer({name:ORYX.I18N.Edit.copy,description:ORYX.I18N.Edit.copyDesc,icon:ORYX.PATH+"images/page_copy.png",keyCodes:[{metaKeys:[ORYX.CONFIG.META_KEY_META_CTRL],keyCode:67,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.callEdit.bind(this,this.editCopy,[true,false]),group:ORYX.I18N.Edit.group,index:2,minShape:1});this.facade.offer({name:ORYX.I18N.Edit.paste,description:ORYX.I18N.Edit.pasteDesc,icon:ORYX.PATH+"images/page_paste.png",keyCodes:[{metaKeys:[ORYX.CONFIG.META_KEY_META_CTRL],keyCode:86,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.callEdit.bind(this,this.editPaste),isEnabled:this.clipboard.isOccupied.bind(this.clipboard),group:ORYX.I18N.Edit.group,index:3,minShape:0,maxShape:0});this.facade.offer({name:ORYX.I18N.Edit.del,description:ORYX.I18N.Edit.delDesc,icon:ORYX.PATH+"images/cross.png",keyCodes:[{metaKeys:[ORYX.CONFIG.META_KEY_META_CTRL],keyCode:8,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN},{keyCode:46,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.callEdit.bind(this,this.editDelete),group:ORYX.I18N.Edit.group,index:4,minShape:1})},callEdit:function(b,a){window.setTimeout(function(){b.apply(this,(a instanceof Array?a:[]))}.bind(this),1)},handleMouseDown:function(a){if(this._controlPressed){this._controlPressed=false;this.editCopy();this.editPaste();a.forceExecution=true;this.facade.raiseEvent(a,this.clipboard.shapesAsJson)}},getAllShapesToConsider:function(b){var a=[];var c=[];b.each(function(e){isChildShapeOfAnother=b.any(function(g){return g.hasChildShape(e)});if(isChildShapeOfAnother){return}a.push(e);if(e instanceof ORYX.Core.Node){var f=e.getOutgoingNodes();f=f.findAll(function(g){return !b.include(g)});a=a.concat(f)}c=c.concat(e.getChildShapes(true))}.bind(this));var d=this.facade.getCanvas().getChildEdges().select(function(e){if(a.include(e)){return false}if(e.getAllDockedShapes().size()===0){return false}return e.getAllDockedShapes().all(function(f){return f instanceof ORYX.Core.Edge||c.include(f)})});a=a.concat(d);return a},editCut:function(){this.editCopy(false,true);this.editDelete(true);return false},editCopy:function(c,a){var b=this.facade.getSelection();if(b.length==0){return}this.clipboard.refresh(b,this.getAllShapesToConsider(b),this.facade.getCanvas().getStencil().stencilSet().namespace(),a);if(c){this.facade.updateSelection()}},editPaste:function(){var b={childShapes:this.clipboard.shapesAsJson,stencilset:{namespace:this.clipboard.SSnamespace}};jQuery.extend(b,ORYX.Core.AbstractShape.JSONHelper);var a=b.getChildShapes(true).pluck("resourceId");var c={};b.eachChild(function(d,e){d.outgoing=d.outgoing.select(function(f){return a.include(f.resourceId)});d.outgoing.each(function(f){if(!c[f.resourceId]){c[f.resourceId]=[]}c[f.resourceId].push(d)});return d}.bind(this),true,true);b.eachChild(function(d,e){if(d.target&&!(a.include(d.target.resourceId))){d.target=undefined;d.targetRemoved=true}if(d.dockers&&d.dockers.length>=1&&d.dockers[0].getDocker&&((d.dockers[0].getDocker().getDockedShape()&&!a.include(d.dockers[0].getDocker().getDockedShape().resourceId))||!d.getShape().dockers[0].getDockedShape()&&!c[d.resourceId])){d.sourceRemoved=true}return d}.bind(this),true,true);b.eachChild(function(d,e){if(this.clipboard.useOffset){d.bounds={lowerRight:{x:d.bounds.lowerRight.x+ORYX.CONFIG.COPY_MOVE_OFFSET,y:d.bounds.lowerRight.y+ORYX.CONFIG.COPY_MOVE_OFFSET},upperLeft:{x:d.bounds.upperLeft.x+ORYX.CONFIG.COPY_MOVE_OFFSET,y:d.bounds.upperLeft.y+ORYX.CONFIG.COPY_MOVE_OFFSET}}}if(d.dockers){d.dockers=d.dockers.map(function(g,f){if((d.targetRemoved===true&&f==d.dockers.length-1&&g.getDocker)||(d.sourceRemoved===true&&f==0&&g.getDocker)){g=g.getDocker().bounds.center()}if((f==0&&g.getDocker instanceof Function&&d.sourceRemoved!==true&&(g.getDocker().getDockedShape()||((c[d.resourceId]||[]).length>0&&(!(d.getShape() instanceof ORYX.Core.Node)||c[d.resourceId][0].getShape() instanceof ORYX.Core.Node))))||(f==d.dockers.length-1&&g.getDocker instanceof Function&&d.targetRemoved!==true&&(g.getDocker().getDockedShape()||d.target))){return{x:g.x,y:g.y,getDocker:g.getDocker}}else{if(this.clipboard.useOffset){return{x:g.x+ORYX.CONFIG.COPY_MOVE_OFFSET,y:g.y+ORYX.CONFIG.COPY_MOVE_OFFSET,getDocker:g.getDocker}}else{return{x:g.x,y:g.y,getDocker:g.getDocker}}}}.bind(this))}else{if(d.getShape() instanceof ORYX.Core.Node&&d.dockers&&d.dockers.length>0&&(!d.dockers.first().getDocker||d.sourceRemoved===true||!(d.dockers.first().getDocker().getDockedShape()||c[d.resourceId]))){d.dockers=d.dockers.map(function(g,f){if((d.sourceRemoved===true&&f==0&&g.getDocker)){g=g.getDocker().bounds.center()}if(this.clipboard.useOffset){return{x:g.x+ORYX.CONFIG.COPY_MOVE_OFFSET,y:g.y+ORYX.CONFIG.COPY_MOVE_OFFSET,getDocker:g.getDocker}}else{return{x:g.x,y:g.y,getDocker:g.getDocker}}}.bind(this))}}return d}.bind(this),false,true);this.clipboard.useOffset=true;this.facade.importJSON(b)},editDelete:function(){var a=this.facade.getSelection();if(a.length>0){var b=new ORYX.Plugins.Edit.ClipBoard();b.refresh(a,this.getAllShapesToConsider(a));var c=new ORYX.Plugins.Edit.DeleteCommand(b,this.facade);this.facade.executeCommands([c])}}});ORYX.Plugins.Edit.ClipBoard=Clazz.extend({construct:function(){this.shapesAsJson=[];this.selection=[];this.SSnamespace="";this.useOffset=true},isOccupied:function(){return this.shapesAsJson.length>0},refresh:function(d,b,c,a){this.selection=d;this.SSnamespace=c;this.outgoings={};this.parents={};this.targets={};this.useOffset=a!==true;this.shapesAsJson=b.map(function(e){var f=e.toJSON();f.parent={resourceId:e.getParentShape().resourceId};f.parentIndex=e.getParentShape().getChildShapes().indexOf(e);return f})}});ORYX.Plugins.Edit.DeleteCommand=ORYX.Core.Command.extend({construct:function(b,a){this.clipboard=b;this.shapesAsJson=b.shapesAsJson;this.facade=a;this.dockers=this.shapesAsJson.map(function(g){var e=g.getShape();var f=e.getIncomingShapes().map(function(h){return h.getDockers().last()});var d=e.getOutgoingShapes().map(function(h){return h.getDockers().first()});var c=e.getDockers().concat(f,d).compact().map(function(h){return{object:h,referencePoint:h.referencePoint,dockedShape:h.getDockedShape()}});return c}).flatten()},execute:function(){this.shapesAsJson.each(function(a){this.facade.deleteShape(a.getShape())}.bind(this));this.facade.setSelection([]);this.facade.getCanvas().update();this.facade.updateSelection();this.facade.handleEvents({type:ORYX.CONFIG.ACTION_DELETE_COMPLETED})},rollback:function(){this.shapesAsJson.each(function(c){var a=c.getShape();var b=this.facade.getCanvas().getChildShapeByResourceId(c.parent.resourceId)||this.facade.getCanvas();b.add(a,a.parentIndex)}.bind(this));this.dockers.each(function(a){a.object.setDockedShape(a.dockedShape);a.object.setReferencePoint(a.referencePoint)}.bind(this));this.facade.setSelection(this.selectedShapes);this.facade.getCanvas().update();this.facade.updateSelection()}});if(!ORYX.Plugins){ORYX.Plugins=new Object()}ORYX.Plugins.View={facade:undefined,construct:function(b,a){this.facade=b;this.zoomLevel=1;this.maxFitToScreenLevel=1.5;this.minZoomLevel=0.1;this.maxZoomLevel=2.5;this.diff=5;if(a!==undefined&&a!==null){a.get("properties").each(function(c){if(c.zoomLevel){this.zoomLevel=Number(1)}if(c.maxFitToScreenLevel){this.maxFitToScreenLevel=Number(c.maxFitToScreenLevel)}if(c.minZoomLevel){this.minZoomLevel=Number(c.minZoomLevel)}if(c.maxZoomLevel){this.maxZoomLevel=Number(c.maxZoomLevel)}}.bind(this))}this.facade.offer({name:ORYX.I18N.View.zoomIn,functionality:this.zoom.bind(this,[1+ORYX.CONFIG.ZOOM_OFFSET]),group:ORYX.I18N.View.group,icon:ORYX.PATH+"images/magnifier_zoom_in.png",description:ORYX.I18N.View.zoomInDesc,index:1,minShape:0,maxShape:0,isEnabled:function(){return this.zoomLevel 20?f-20:0;c.node.parentNode.parentNode.style.marginTop=f+"px";f+=5;c.getHTMLContainer().style.top=f+"px";var b=h.scrollTop-Math.round((c.getHTMLContainer().parentNode.getHeight()-a)/2)+this.diff;var e=h.scrollLeft-Math.round((c.getHTMLContainer().parentNode.getWidth()-g)/2)+this.diff;c.setSize({width:g,height:a},true);c.node.setAttributeNS(null,"transform","scale("+this.zoomLevel+")");this.facade.updateSelection();h.scrollTop=b;h.scrollLeft=e;c.zoomLevel=this.zoomLevel},zoomFitToModel:function(){var h=this.facade.getCanvas().getHTMLContainer().parentNode.parentNode;var b=h.getHeight()-30;var d=h.getWidth()-30;var c=this.facade.getCanvas().getChildShapes();if(!c||c.length<1){return false}var g=c[0].absoluteBounds().clone();c.each(function(k){g.include(k.absoluteBounds().clone())});var f=d/g.width();var a=b/g.height();var e=a this.maxFitToScreenLevel){e=this.maxFitToScreenLevel}this.setAFixZoomLevel(e);h.scrollTop=Math.round(g.upperLeft().y*this.zoomLevel)-5;h.scrollLeft=Math.round(g.upperLeft().x*this.zoomLevel)-5},_checkSize:function(){var a=this.facade.getCanvas().getHTMLContainer().parentNode;var b=Math.min((a.parentNode.getWidth()/a.getWidth()),(a.parentNode.getHeight()/a.getHeight()));return 1.05>b},_checkZoomLevelRange:function(){if(this.zoomLevel this.maxZoomLevel){this.zoomLevel=this.maxZoomLevel}}};ORYX.Plugins.View=Clazz.extend(ORYX.Plugins.View);if(!Signavio){var Signavio={}}if(!Signavio.Core){Signavio.Core={}}Signavio.Core.Version="1.0";if(!Signavio){var Signavio=new Object()}if(!Signavio.Plugins){Signavio.Plugins=new Object()}if(!Signavio.Plugins.Utils){Signavio.Plugins.Utils=new Object()}if(!Signavio.Helper){Signavio.Helper=new Object()}new function(){ORYX.Editor.provideId=function(){var b=[],c="0123456789ABCDEF";for(var a=0;a<36;a++){b[a]=Math.floor(Math.random()*16)}b[14]=4;b[19]=(b[19]&3)|8;for(var a=0;a<36;a++){b[a]=c[b[a]]}b[8]=b[13]=b[18]=b[23]="-";return"sid-"+b.join("")}}();if(!ORYX.Plugins){ORYX.Plugins=new Object()}ORYX.Plugins.Loading={construct:function(a){this.facade=a;this.node=ORYX.Editor.graft("http://www.w3.org/1999/xhtml",this.facade.getCanvas().getHTMLContainer().parentNode,["div",{"class":"LoadingIndicator"},""]);this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADING_ENABLE,this.enableLoading.bind(this));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADING_DISABLE,this.disableLoading.bind(this));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADING_STATUS,this.showStatus.bind(this));this.disableLoading()},enableLoading:function(a){if(a.text){this.node.innerHTML=a.text+"..."}else{this.node.innerHTML=ORYX.I18N.Loading.waiting}this.node.removeClassName("StatusIndicator");this.node.addClassName("LoadingIndicator");this.node.style.display="block";var b=this.facade.getCanvas().rootNode.parentNode.parentNode.parentNode.parentNode;this.node.style.top=b.offsetTop+"px";this.node.style.left=b.offsetLeft+"px"},disableLoading:function(){this.node.style.display="none"},showStatus:function(a){if(a.text){this.node.innerHTML=a.text;this.node.addClassName("StatusIndicator");this.node.removeClassName("LoadingIndicator");this.node.style.display="block";var c=this.facade.getCanvas().rootNode.parentNode.parentNode.parentNode.parentNode;this.node.style.top=c.offsetTop+"px";this.node.style.left=c.offsetLeft+"px";var b=a.timeout?a.timeout:2000;window.setTimeout((function(){this.disableLoading()}).bind(this),b)}}};ORYX.Plugins.Loading=Clazz.extend(ORYX.Plugins.Loading);if(!ORYX.Plugins){ORYX.Plugins=new Object()}ORYX.Plugins.CanvasResize=Clazz.extend({construct:function(a){this.facade=a;new ORYX.Plugins.CanvasResizeButton(this.facade.getCanvas(),"N",this.resize.bind(this));new ORYX.Plugins.CanvasResizeButton(this.facade.getCanvas(),"W",this.resize.bind(this));new ORYX.Plugins.CanvasResizeButton(this.facade.getCanvas(),"E",this.resize.bind(this));new ORYX.Plugins.CanvasResizeButton(this.facade.getCanvas(),"S",this.resize.bind(this));window.setTimeout(function(){jQuery(window).trigger("resize")})},resize:function(a,c){resizeCanvas=function(l,m,o){var f=o.getCanvas();var n=f.bounds;var h=o.getCanvas().getHTMLContainer().parentNode.parentNode;if(l=="E"||l=="W"){f.setSize({width:(n.width()+m)*f.zoomLevel,height:(n.height())*f.zoomLevel})}else{if(l=="S"||l=="N"){f.setSize({width:(n.width())*f.zoomLevel,height:(n.height()+m)*f.zoomLevel})}}if(l=="N"||l=="W"){var g=l=="N"?{x:0,y:m}:{x:m,y:0};f.getChildNodes(false,function(q){q.bounds.moveBy(g)});var k=f.getChildEdges().findAll(function(q){return q.getAllDockedShapes().length>0});var p=k.collect(function(q){return q.dockers.findAll(function(r){return !r.getDockedShape()})}).flatten();p.each(function(q){q.bounds.moveBy(g)})}else{if(l=="S"){h.scrollTop+=m}else{if(l=="E"){h.scrollLeft+=m}}}jQuery(window).trigger("resize");f.update();o.updateSelection()};var b=ORYX.Core.Command.extend({construct:function(f,h,g){this.position=f;this.extentionSize=h;this.facade=g},execute:function(){resizeCanvas(this.position,this.extentionSize,this.facade)},rollback:function(){resizeCanvas(this.position,-this.extentionSize,this.facade)},update:function(){}});var d=ORYX.CONFIG.CANVAS_RESIZE_INTERVAL;if(c){d=-d}var e=new b(a,d,this.facade);this.facade.executeCommands([e])}});ORYX.Plugins.CanvasResizeButton=Clazz.extend({construct:function(b,t,g){this.canvas=b;var k=b.getHTMLContainer().parentNode;window.myParent=k;var s=jQuery("#canvasSection")[0];var d=s;var e=$$("#canvasSection .ORYX_Editor")[0];var f=e.children[0];var a="glyphicon glyphicon-chevron-";var p="glyphicon glyphicon-chevron-";if(t=="N"){a+="up";p+="down"}else{if(t=="S"){a+="down";p+="up"}else{if(t=="E"){a+="right";p+="left"}else{if(t=="W"){a+="left";p+="right"}}}}var l="canvas-shrink-"+t;var r="canvas-grow-"+t;var c=ORYX.Editor.graft("http://www.w3.org/1999/xhtml",k,["div",{"class":"canvas_resize_indicator canvas_resize_indicator_grow "+t,id:l,title:ORYX.I18N.RESIZE.tipGrow+ORYX.I18N.RESIZE[t]},["i",{"class":a}]]);var h=ORYX.Editor.graft("http://www.w3.org/1999/xhtml",k,["div",{"class":"canvas_resize_indicator canvas_resize_indicator_shrink "+t,id:r,title:ORYX.I18N.RESIZE.tipGrow+ORYX.I18N.RESIZE[t]},["i",{"class":p}]]);var m=60;var q=function(w){var x=w.target.id.indexOf("canvas-shrink")!=-1||w.target.id.indexOf("canvas-grow")!=-1||w.target.parentNode.id.indexOf("canvas-shrink")!=-1||w.target.parentNode.id.indexOf("canvas-grow")!=-1;if(x){if(w.target.id==l||w.target.id==r||w.target.parentNode.id==l||w.target.parentNode.id==r){return true}else{return false}}if(w.target!=k&&w.target!=d&&w.target!=d.firstChild&&w.target!=f&&w.target!=d){return false}var z=w.offsetX!==undefined?w.offsetX:w.layerX;var y=w.offsetY!==undefined?w.offsetY:w.layerY;var u=0;if(e.clientWidth ORYX.CONFIG.CANVAS_MIN_HEIGHT)){h.show()}else{if(t=="E"&&(u-ORYX.CONFIG.CANVAS_RESIZE_INTERVAL>ORYX.CONFIG.CANVAS_MIN_WIDTH)){h.show()}else{if(t=="S"&&(v-ORYX.CONFIG.CANVAS_RESIZE_INTERVAL>ORYX.CONFIG.CANVAS_MIN_HEIGHT)){h.show()}else{if(t=="W"&&(u-ORYX.CONFIG.CANVAS_RESIZE_INTERVAL>ORYX.CONFIG.CANVAS_MIN_WIDTH)){h.show()}else{h.hide()}}}}}).bind(this);var o=function(){c.hide();h.hide()};k.parentNode.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE,function(u){if(q(u)){n()}else{o()}},false);c.addEventListener(ORYX.CONFIG.EVENT_MOUSEOVER,function(u){n()},true);h.addEventListener(ORYX.CONFIG.EVENT_MOUSEOVER,function(u){n()},true);k.parentNode.addEventListener(ORYX.CONFIG.EVENT_MOUSEOUT,function(u){o()},true);o();c.addEventListener("click",function(){g(t);n()},true);h.addEventListener("click",function(){g(t,true);n()},true)}});if(!ORYX.Plugins){ORYX.Plugins=new Object()}ORYX.Plugins.RenameShapes=Clazz.extend({facade:undefined,construct:function(a){this.facade=a;this.facade.registerOnEvent(ORYX.CONFIG.EVENT_CANVAS_SCROLL,this.hideField.bind(this));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_DBLCLICK,this.actOnDBLClick.bind(this));this.facade.offer({keyCodes:[{keyCode:113,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.renamePerF2.bind(this)});document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEDOWN,this.hide.bind(this),true)},renamePerF2:function(){var a=this.facade.getSelection();this.actOnDBLClick(undefined,a.first())},actOnDBLClick:function(p,l){if(!(l instanceof ORYX.Core.Shape)){return}this.destroy();var m=l.getStencil().properties().findAll(function(t){return(t.refToView()&&t.refToView().length>0&&t.directlyEditable())});m=m.findAll(function(t){return !t.readonly()&&(t.type()==ORYX.CONFIG.TYPE_STRING||t.type()==ORYX.CONFIG.TYPE_EXPRESSION||t.type()==ORYX.CONFIG.TYPE_DATASOURCE)});var n=m.collect(function(t){return t.refToView()}).flatten().compact();var h=l.getLabels().findAll(function(t){return n.any(function(u){return t.id.endsWith(u)})});if(h.length==0){return}var k=h.length<=1?h[0]:null;if(!k){k=h.find(function(t){return t.node==p.target||t.node==p.target.parentNode});if(!k){var q=this.facade.eventCoordinates(p);var b=1;if(!isNaN(screen.logicalXDPI)&&!isNaN(screen.systemXDPI)){var e=navigator.userAgent;if(e.indexOf("MSIE")>=0){var r=Math.round((screen.deviceXDPI/screen.logicalXDPI)*100);if(r!==100){b=r/100}}}if(b!==1){q.x=q.x/b;q.y=q.y/b}q.y+=$("editor-header").clientHeight-$("canvasSection").scrollTop-5;if(FLOWABLE.HEADER_CONFIG.showAppTitle==false){q.y+=61}q.x-=$("canvasSection").scrollLeft;var s=this.facade.getCanvas().rootNode.lastChild.getScreenCTM();q.x*=s.a;q.y*=s.d;var o=h.collect(function(v){var u=this.getCenterPosition(v.node);var t=Math.sqrt(Math.pow(u.x-q.x,2)+Math.pow(u.y-q.y,2));return{diff:t,label:v}}.bind(this));o.sort(function(u,t){return u.diff>t.diff});k=o[0].label}}var d=m.find(function(t){return t.refToView().any(function(u){return k.id==l.id+u})});var f=Math.min(Math.max(100,l.bounds.width()),200);var a=this.getCenterPosition(k.node,l);a.x-=(f/2);var c=d.prefix()+"-"+d.id();var g=document.createElement("textarea");g.id="shapeTextInput";g.style.position="absolute";g.style.width=f+"px";g.style.left=(a.x<10)?10:a.x+"px";g.style.top=(a.y-15)+"px";g.className="x-form-textarea x-form-field x_form_text_set_absolute";g.value=l.properties.get(c);this.oldValueText=l.properties.get(c);document.getElementById("canvasSection").appendChild(g);this.shownTextField=g;this.updateValueFunction=function(x,u){var w=l;var v=this.facade;if(u!=x){var t=ORYX.Core.Command.extend({construct:function(){this.el=w;this.propId=c;this.oldValue=u;this.newValue=x;this.facade=v},execute:function(){this.el.setProperty(this.propId,this.newValue);this.facade.setSelection([this.el]);this.facade.getCanvas().update();this.facade.updateSelection()},rollback:function(){this.el.setProperty(this.propId,this.oldValue);this.facade.setSelection([this.el]);this.facade.getCanvas().update();this.facade.updateSelection()}});var y=new t();this.facade.executeCommands([y])}}.bind(this);jQuery("#shapeTextInput").focus();jQuery("#shapeTextInput").autogrow();this.facade.disableEvent(ORYX.CONFIG.EVENT_KEYDOWN)},getCenterPosition:function(f,h){if(!f){return{x:0,y:0}}var e=this.facade.getCanvas().node.getScreenCTM();var b=h.bounds.upperLeft();var p=true;var n=h;while(p){if(n.getParentShape().getStencil().idWithoutNs()==="BPMNDiagram"||n.getParentShape().getStencil().idWithoutNs()==="CMMNDiagram"||n.getParentShape().getStencil().idWithoutNs()==="DMNDiagram"){p=false}else{var l=n.getParentShape().bounds.upperLeft();b.x+=l.x;b.y+=l.y;n=n.getParentShape()}}var c=h.bounds.midPoint();c.x+=b.x+e.e;c.y+=b.y+e.f;c.x*=e.a;c.y*=e.d;var a=1;if(!isNaN(screen.logicalXDPI)&&!isNaN(screen.systemXDPI)){var d=navigator.userAgent;if(d.indexOf("MSIE")>=0){var r=Math.round((screen.deviceXDPI/screen.logicalXDPI)*100);if(r!==100){a=r/100}}}if(a===1){c.y=c.y-jQuery("#canvasSection").offset().top+5;c.x-=jQuery("#canvasSection").offset().left}else{var m=jQuery("#canvasSection").offset().left;var o=jQuery("#canvasSection").scrollLeft();var k=jQuery("#canvasSection").scrollTop();var g=e.e-(m*a);var q=0;if(g>10){q=(g/a)-g}c.y=c.y-(jQuery("#canvasSection").offset().top*a)+5+((k*a)-k);c.x=c.x-(m*a)+q+((o*a)-o)}return c},hide:function(b){if(this.shownTextField&&(!b||b.target!==this.shownTextField)){var a=this.shownTextField.value;if(a!==this.oldValueText){this.updateValueFunction(a,this.oldValueText)}this.destroy()}},hideField:function(a){if(this.shownTextField){this.destroy()}},destroy:function(a){var b=jQuery("#shapeTextInput");if(b){b.remove();delete this.shownTextField;this.facade.enableEvent(ORYX.CONFIG.EVENT_KEYDOWN)}}});if(!ORYX.Plugins){ORYX.Plugins=new Object()}ORYX.Plugins.ProcessLink=Clazz.extend({facade:undefined,construct:function(a){this.facade=a;this.facade.registerOnEvent(ORYX.CONFIG.EVENT_PROPERTY_CHANGED,this.propertyChanged.bind(this))},propertyChanged:function(a,b){if(a.name!=="oryx-refuri"||!b instanceof ORYX.Core.Node){return}if(a.value&&a.value.length>0&&a.value!="undefined"){this.show(b,a.value)}else{this.hide(b)}},show:function(a,b){var c=ORYX.Editor.graft("http://www.w3.org/2000/svg",null,["a",{target:"_blank"},["path",{"stroke-width":1,stroke:"#00DD00",fill:"#00AA00",d:"M3,3 l0,-2.5 l7.5,0 l0,-2.5 l7.5,4.5 l-7.5,3.5 l0,-2.5 l-8,0","line-captions":"round"}]]);var c=ORYX.Editor.graft("http://www.w3.org/2000/svg",null,["a",{target:"_blank"},["path",{style:"fill:#92BFFC;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72",d:"M0 1.44 L0 15.05 L11.91 15.05 L11.91 5.98 L7.37 1.44 L0 1.44 Z"}],["path",{style:"stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72;fill:none;",transform:"translate(7.5, -8.5)",d:"M0 10.51 L0 15.05 L4.54 15.05"}],["path",{style:"fill:#f28226;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72",transform:"translate(-3, -1)",d:"M0 8.81 L0 13.06 L5.95 13.06 L5.95 15.05 A50.2313 50.2313 -175.57 0 0 10.77 11.08 A49.9128 49.9128 -1.28 0 0 5.95 6.54 L5.95 8.81 L0 8.81 Z"}],]);c.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",b);this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_OVERLAY_SHOW,id:"arissupport.urlref_"+a.id,shapes:[a],node:c,nodePosition:"SE"})},hide:function(a){this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_OVERLAY_HIDE,id:"arissupport.urlref_"+a.id})}});Array.prototype.insertFrom=function(e,d){d=Math.max(0,d);e=Math.min(Math.max(0,e),this.length-1);var b=this[e];var a=this.without(b);var c=a.slice(0,d);c.push(b);if(a.length>d){c=c.concat(a.slice(d))}return c};if(!ORYX.Plugins){ORYX.Plugins=new Object()}ORYX.Plugins.Arrangement=ORYX.Plugins.AbstractPlugin.extend({facade:undefined,construct:function(a){this.facade=a;this.facade.offer({name:ORYX.I18N.Arrangement.am,functionality:this.alignShapes.bind(this,[ORYX.CONFIG.EDITOR_ALIGN_MIDDLE]),group:ORYX.I18N.Arrangement.groupA,icon:ORYX.PATH+"images/shape_align_middle.png",description:ORYX.I18N.Arrangement.amDesc,index:1,minShape:2});this.facade.offer({name:ORYX.I18N.Arrangement.ac,functionality:this.alignShapes.bind(this,[ORYX.CONFIG.EDITOR_ALIGN_CENTER]),group:ORYX.I18N.Arrangement.groupA,icon:ORYX.PATH+"images/shape_align_center.png",description:ORYX.I18N.Arrangement.acDesc,index:2,minShape:2});this.facade.offer({name:ORYX.I18N.Arrangement.as,functionality:this.alignShapes.bind(this,[ORYX.CONFIG.EDITOR_ALIGN_SIZE]),group:ORYX.I18N.Arrangement.groupA,icon:ORYX.PATH+"images/shape_align_size.png",description:ORYX.I18N.Arrangement.asDesc,index:3,minShape:2});this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_TOP,this.setZLevel.bind(this,this.setToTop));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_BACK,this.setZLevel.bind(this,this.setToBack));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_FORWARD,this.setZLevel.bind(this,this.setForward));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_BACKWARD,this.setZLevel.bind(this,this.setBackward))},onSelectionChanged:function(a){var b=this.facade.getSelection();if(b.length===1&&b[0] instanceof ORYX.Core.Edge){this.setToTop(b)}},setZLevel:function(d,b){var a=ORYX.Core.Command.extend({construct:function(g,f,e){this.callback=g;this.elements=f;this.elAndIndex=f.map(function(h){return{el:h,previous:h.parent.children[h.parent.children.indexOf(h)-1]}});this.facade=e},execute:function(){this.callback(this.elements);this.facade.setSelection(this.elements)},rollback:function(){var g=this.elAndIndex.sortBy(function(n){var o=n.el;var m=$A(o.node.parentNode.childNodes);return m.indexOf(o.node)});for(var f=0;f l.width){k.a.x=h.bounds.upperLeft().x-(l.width-h.bounds.width())/2;k.b.x=h.bounds.lowerRight().x+(l.width-h.bounds.width())/2}if(this.maxHeight>l.height){k.a.y=h.bounds.upperLeft().y-(l.height-h.bounds.height())/2;k.b.y=h.bounds.lowerRight().y+(l.height-h.bounds.height())/2}h.bounds.set(k)},execute:function(){this.elements.each(function(h,k){this.orgPos[k]=h.bounds.upperLeft();var l=this.bounds.clone();var o;if(h.parent&&!(h.parent instanceof ORYX.Core.Canvas)){var n=h.parent.absoluteBounds().upperLeft();l.moveBy(-n.x,-n.y)}switch(this.way){case ORYX.CONFIG.EDITOR_ALIGN_BOTTOM:o={x:h.bounds.upperLeft().x,y:l.b.y-h.bounds.height()};break;case ORYX.CONFIG.EDITOR_ALIGN_MIDDLE:o={x:h.bounds.upperLeft().x,y:(l.a.y+l.b.y-h.bounds.height())/2};break;case ORYX.CONFIG.EDITOR_ALIGN_TOP:o={x:h.bounds.upperLeft().x,y:l.a.y};break;case ORYX.CONFIG.EDITOR_ALIGN_LEFT:o={x:l.a.x,y:h.bounds.upperLeft().y};break;case ORYX.CONFIG.EDITOR_ALIGN_CENTER:o={x:(l.a.x+l.b.x-h.bounds.width())/2,y:h.bounds.upperLeft().y};break;case ORYX.CONFIG.EDITOR_ALIGN_RIGHT:o={x:l.b.x-h.bounds.width(),y:h.bounds.upperLeft().y};break;case ORYX.CONFIG.EDITOR_ALIGN_SIZE:if(h.isResizable){this.orgPos[k]={a:h.bounds.upperLeft(),b:h.bounds.lowerRight()};this.setBounds(h,h.maximumSize)}break}if(o){var m={x:h.bounds.upperLeft().x-o.x,y:h.bounds.upperLeft().y-o.y};h.bounds.moveTo(o);this.plugin.layoutEdges(h,h.getAllDockedShapes(),m)}}.bind(this))},rollback:function(){this.elements.each(function(h,k){if(this.way==ORYX.CONFIG.EDITOR_ALIGN_SIZE){if(h.isResizable){h.bounds.set(this.orgPos[k])}}else{h.bounds.moveTo(this.orgPos[k])}}.bind(this))}});var g=new a(f,e,c,d,parseInt(b),this);this.facade.executeCommands([g])}});if(!ORYX.Plugins){ORYX.Plugins=new Object()}ORYX.Plugins.Save=Clazz.extend({facade:undefined,processURI:undefined,changeSymbol:"*",construct:function(a){this.facade=a;document.addEventListener("keydown",function(b){if(b.ctrlKey&&b.keyCode===83){Event.stop(b)}},false);window.onbeforeunload=this.onUnLoad.bind(this);this.changeDifference=0;this.facade.registerOnEvent(ORYX.CONFIG.EVENT_UNDO_EXECUTE,function(){this.changeDifference++;this.updateTitle()}.bind(this));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_EXECUTE_COMMANDS,function(){this.changeDifference++;this.updateTitle()}.bind(this));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_SAVED,function(){this.changeDifference=0;this.updateTitle()}.bind(this));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_UNDO_ROLLBACK,function(){this.changeDifference--;this.updateTitle()}.bind(this));this.hasChanges=this._hasChanges.bind(this)},updateTitle:function(){var a=window.document.title||document.getElementsByTagName("title")[0].childNodes[0].nodeValue;if(this.changeDifference===0&&a.startsWith(this.changeSymbol)){window.document.title=a.slice(1)}else{if(this.changeDifference!==0&&!a.startsWith(this.changeSymbol)){window.document.title=this.changeSymbol+""+a}}},_hasChanges:function(){return this.changeDifference!==0||(this.facade.getModelMetaData()["new"]&&this.facade.getCanvas().getChildShapes().size()>0)},onUnLoad:function(){if(this._hasChanges()){return ORYX.I18N.Save.unsavedData}}});if(!ORYX.Plugins){ORYX.Plugins=new Object()}ORYX.Plugins.DragDropResize=ORYX.Plugins.AbstractPlugin.extend({construct:function(b){this.facade=b;this.currentShapes=[];this.toMoveShapes=[];this.distPoints=[];this.isResizing=false;this.dragEnable=false;this.dragIntialized=false;this.edgesMovable=true;this.offSetPosition={x:0,y:0};this.faktorXY={x:1,y:1};this.containmentParentNode;this.isAddingAllowed=false;this.isAttachingAllowed=false;this.callbackMouseMove=this.handleMouseMove.bind(this);this.callbackMouseUp=this.handleMouseUp.bind(this);var a=this.facade.getCanvas().getSvgContainer();this.selectedRect=new ORYX.Plugins.SelectedRect(a);if(ORYX.CONFIG.SHOW_GRIDLINE){this.vLine=new ORYX.Plugins.GridLine(a,ORYX.Plugins.GridLine.DIR_VERTICAL);this.hLine=new ORYX.Plugins.GridLine(a,ORYX.Plugins.GridLine.DIR_HORIZONTAL)}a=this.facade.getCanvas().getHTMLContainer();this.scrollNode=this.facade.getCanvas().rootNode.parentNode.parentNode;this.resizerSE=new ORYX.Plugins.Resizer(a,"southeast",this.facade);this.resizerSE.registerOnResize(this.onResize.bind(this));this.resizerSE.registerOnResizeEnd(this.onResizeEnd.bind(this));this.resizerSE.registerOnResizeStart(this.onResizeStart.bind(this));this.resizerNW=new ORYX.Plugins.Resizer(a,"northwest",this.facade);this.resizerNW.registerOnResize(this.onResize.bind(this));this.resizerNW.registerOnResizeEnd(this.onResizeEnd.bind(this));this.resizerNW.registerOnResizeStart(this.onResizeStart.bind(this));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_MOUSEDOWN,this.handleMouseDown.bind(this))},handleMouseDown:function(d,c){if(!this.dragBounds||!this.currentShapes.member(c)||!this.toMoveShapes.length){return}this.dragEnable=true;this.dragIntialized=true;this.edgesMovable=true;var b=this.facade.getCanvas().node.getScreenCTM();this.faktorXY.x=b.a;this.faktorXY.y=b.d;var g=Event.pointerX(d);var e=Event.pointerY(d);var f=this.dragBounds.upperLeft();this.offSetPosition={x:g-(f.x*this.faktorXY.x),y:e-(f.y*this.faktorXY.y)};this.offsetScroll={x:this.scrollNode.scrollLeft,y:this.scrollNode.scrollTop};document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE,this.callbackMouseMove,false);document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEUP,this.callbackMouseUp,true);return},handleMouseUp:function(d){this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE,highlightId:"dragdropresize.contain"});this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE,highlightId:"dragdropresize.attached"});if(this.dragEnable){if(!this.dragIntialized){this.afterDrag();if(this.isAttachingAllowed&&this.toMoveShapes.length==1&&this.toMoveShapes[0] instanceof ORYX.Core.Node&&this.toMoveShapes[0].dockers.length>0){var b=this.facade.eventCoordinates(d);var e=this.toMoveShapes[0].dockers[0];var c=ORYX.Core.Command.extend({construct:function(k,f,h,g){this.docker=k;this.newPosition=f;this.newDockedShape=h;this.newParent=h.parent||g.getCanvas();this.oldPosition=k.parent.bounds.center();this.oldDockedShape=k.getDockedShape();this.oldParent=k.parent.parent||g.getCanvas();this.facade=g;if(this.oldDockedShape){this.oldPosition=k.parent.absoluteBounds().center()}},execute:function(){this.dock(this.newDockedShape,this.newParent,this.newPosition);this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_ARRANGEMENT_TOP,excludeCommand:true})},rollback:function(){this.dock(this.oldDockedShape,this.oldParent,this.oldPosition)},dock:function(f,g,h){g.add(this.docker.parent);this.docker.setDockedShape(undefined);this.docker.bounds.centerMoveTo(h);this.docker.setDockedShape(f);this.facade.setSelection([this.docker.parent]);this.facade.getCanvas().update();this.facade.updateSelection()}});var a=[new c(e,b,this.containmentParentNode,this.facade)];this.facade.executeCommands(a)}else{if(this.isAddingAllowed){this.refreshSelectedShapes()}}this.facade.updateSelection();this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_DRAGDROP_END})}if(this.vLine){this.vLine.hide()}if(this.hLine){this.hLine.hide()}}this.dragEnable=false;document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEUP,this.callbackMouseUp,true);document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE,this.callbackMouseMove,false);return},handleMouseMove:function(b){if(!this.dragEnable){return}if(this.dragIntialized){this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_DRAGDROP_START});this.dragIntialized=false;this.resizerSE.hide();this.resizerNW.hide();this._onlyEdges=this.currentShapes.all(function(c){return(c instanceof ORYX.Core.Edge)});this.beforeDrag();this._currentUnderlyingNodes=[]}var e={x:Event.pointerX(b)-this.offSetPosition.x,y:Event.pointerY(b)-this.offSetPosition.y};e.x-=this.offsetScroll.x-this.scrollNode.scrollLeft;e.y-=this.offsetScroll.y-this.scrollNode.scrollTop;var k=b.shiftKey||b.ctrlKey;if(ORYX.CONFIG.GRID_ENABLED&&!k){e=this.snapToGrid(e)}else{if(this.vLine){this.vLine.hide()}if(this.hLine){this.hLine.hide()}}e.x/=this.faktorXY.x;e.y/=this.faktorXY.y;e.x=Math.max(0,e.x);e.y=Math.max(0,e.y);var g=this.facade.getCanvas();e.x=Math.min(g.bounds.width()-this.dragBounds.width(),e.x);e.y=Math.min(g.bounds.height()-this.dragBounds.height(),e.y);this.dragBounds.moveTo(e);this.resizeRectangle(this.dragBounds);this.isAttachingAllowed=false;var f=this.facade.eventCoordinates(b);var a=1;if(!isNaN(screen.logicalXDPI)&&!isNaN(screen.systemXDPI)){var d=navigator.userAgent;if(d.indexOf("MSIE")>=0){var m=Math.round((screen.deviceXDPI/screen.logicalXDPI)*100);if(m!==100){a=m/100}}}if(a!==1){f.x=f.x/a;f.y=f.y/a}var l=$A(this.facade.getCanvas().getAbstractShapesAtPosition(f));var h=this.toMoveShapes.length==1&&this.toMoveShapes[0] instanceof ORYX.Core.Node&&this.toMoveShapes[0].dockers.length>0;h=h&&l.length!=1;if(!h&&l.length===this._currentUnderlyingNodes.length&&l.all(function(o,c){return this._currentUnderlyingNodes[c]===o}.bind(this))){return}else{if(this._onlyEdges){this.isAddingAllowed=true;this.containmentParentNode=this.facade.getCanvas()}else{var n={event:b,underlyingNodes:l,checkIfAttachable:h};this.checkRules(n)}}this._currentUnderlyingNodes=l.reverse();if(this.isAttachingAllowed){this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW,highlightId:"dragdropresize.attached",elements:[this.containmentParentNode],style:ORYX.CONFIG.SELECTION_HIGHLIGHT_STYLE_RECTANGLE,color:ORYX.CONFIG.SELECTION_VALID_COLOR})}else{this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE,highlightId:"dragdropresize.attached"})}if(!this.isAttachingAllowed){if(this.isAddingAllowed){this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW,highlightId:"dragdropresize.contain",elements:[this.containmentParentNode],color:ORYX.CONFIG.SELECTION_VALID_COLOR})}else{this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW,highlightId:"dragdropresize.contain",elements:[this.containmentParentNode],color:ORYX.CONFIG.SELECTION_INVALID_COLOR})}}else{this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE,highlightId:"dragdropresize.contain"})}return},checkRules:function(d){var f=d.event;var c=d.underlyingNodes;var e=d.checkIfAttachable;var b=d.noEdges;this.containmentParentNode=c.reverse().find((function(g){return(g instanceof ORYX.Core.Canvas)||(((g instanceof ORYX.Core.Node)||((g instanceof ORYX.Core.Edge)&&!b))&&(!(this.currentShapes.member(g)||this.currentShapes.any(function(h){return(h.children.length>0&&h.getChildNodes(true).member(g))}))))}).bind(this));if(e){this.isAttachingAllowed=this.facade.getRules().canConnect({sourceShape:this.containmentParentNode,edgeShape:this.toMoveShapes[0],targetShape:this.toMoveShapes[0]});if(this.isAttachingAllowed){var a=this.facade.eventCoordinates(f);this.isAttachingAllowed=this.containmentParentNode.isPointOverOffset(a.x,a.y)}}if(!this.isAttachingAllowed){this.isAddingAllowed=this.toMoveShapes.all((function(g){if(g instanceof ORYX.Core.Edge||g instanceof ORYX.Core.Controls.Docker||this.containmentParentNode===g.parent){return true}else{if(this.containmentParentNode!==g){if(!(this.containmentParentNode instanceof ORYX.Core.Edge)||!b){if(this.facade.getRules().canContain({containingShape:this.containmentParentNode,containedShape:g})){return true}}}}return false}).bind(this))}if(!this.isAttachingAllowed&&!this.isAddingAllowed&&(this.containmentParentNode instanceof ORYX.Core.Edge)){d.noEdges=true;d.underlyingNodes.reverse();this.checkRules(d)}},refreshSelectedShapes:function(){if(!this.dragBounds){return}var d=this.dragBounds.upperLeft();var b=this.oldDragBounds.upperLeft();var c={x:d.x-b.x,y:d.y-b.y};var a=[new ORYX.Core.Command.Move(this.toMoveShapes,c,this.containmentParentNode,this.currentShapes,this)];if(this._undockedEdgesCommand instanceof ORYX.Core.Command){a.unshift(this._undockedEdgesCommand)}this.facade.executeCommands(a);if(this.dragBounds){this.oldDragBounds=this.dragBounds.clone()}},onResize:function(a){if(!this.dragBounds){return}this.dragBounds=a;this.isResizing=true;this.resizeRectangle(this.dragBounds)},onResizeStart:function(){this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_RESIZE_START})},onResizeEnd:function(){if(!(this.currentShapes instanceof Array)||this.currentShapes.length<=0){return}if(this.isResizing){var a=ORYX.Core.Command.extend({construct:function(f,h,g){this.shape=f;this.oldBounds=f.bounds.clone();this.newBounds=h;this.plugin=g},execute:function(){this.shape.bounds.set(this.newBounds.a,this.newBounds.b);this.update(this.getOffset(this.oldBounds,this.newBounds))},rollback:function(){this.shape.bounds.set(this.oldBounds.a,this.oldBounds.b);this.update(this.getOffset(this.newBounds,this.oldBounds))},getOffset:function(g,f){return{x:f.a.x-g.a.x,y:f.a.y-g.a.y,xs:f.width()/g.width(),ys:f.height()/g.height()}},update:function(g){this.shape.getLabels().each(function(h){h.changed()});var f=[].concat(this.shape.getIncomingShapes()).concat(this.shape.getOutgoingShapes()).findAll(function(h){return h instanceof ORYX.Core.Edge}.bind(this));this.plugin.layoutEdges(this.shape,f,g);this.plugin.facade.setSelection([this.shape]);this.plugin.facade.getCanvas().update();this.plugin.facade.updateSelection()}});var c=this.dragBounds.clone();var b=this.currentShapes[0];if(b.parent){var e=b.parent.absoluteXY();c.moveBy(-e.x,-e.y)}var d=new a(b,c,this);this.facade.executeCommands([d]);this.isResizing=false;this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_RESIZE_END})}},beforeDrag:function(){var a=ORYX.Core.Command.extend({construct:function(b){this.dockers=b.collect(function(c){return c instanceof ORYX.Core.Controls.Docker?{docker:c,dockedShape:c.getDockedShape(),refPoint:c.referencePoint}:undefined}).compact()},execute:function(){this.dockers.each(function(b){b.docker.setDockedShape(undefined)})},rollback:function(){this.dockers.each(function(b){b.docker.setDockedShape(b.dockedShape);b.docker.setReferencePoint(b.refPoint)})}});this._undockedEdgesCommand=new a(this.toMoveShapes);this._undockedEdgesCommand.execute()},hideAllLabels:function(a){a.getLabels().each(function(b){b.hide()});a.getAllDockedShapes().each(function(b){var c=b.getLabels();if(c.length>0){c.each(function(d){d.hide()})}});a.getChildren().each((function(b){if(b instanceof ORYX.Core.Shape){this.hideAllLabels(b)}}).bind(this))},afterDrag:function(){},showAllLabels:function(a){for(var d=0;d 0){g.each(function(h){h.show()})}}for(var d=0;d 2&&k&&g){this.toMoveShapes=this.toMoveShapes.concat(h.findAll(function(n,m){return m>0&&m this.aspectRatio){c.x=this.aspectRatio*(this.bounds.height()+c.y)-this.bounds.width()}else{if(newAspectRatio this.maxSize.width){c.x=-(this.maxSize.width-this.bounds.width());if(this.aspectRatio){c.y=this.aspectRatio*c.x}}if(this.bounds.width()-c.x this.maxSize.height){c.y=-(this.maxSize.height-this.bounds.height());if(this.aspectRatio){c.x=c.y/this.aspectRatio}}if(this.bounds.height()-c.y this.maxSize.width){c.x=this.maxSize.width-this.bounds.width();if(this.aspectRatio){c.y=this.aspectRatio*c.x}}if(this.bounds.width()+c.x this.maxSize.height){c.y=this.maxSize.height-this.bounds.height();if(this.aspectRatio){c.x=c.y/this.aspectRatio}}if(this.bounds.height()+c.y this.maxSize.width){this.bounds.set(d.x,d.y,d.x+this.maxSize.width,d.y+this.bounds.height())}if(this.bounds.height()>this.maxSize.height){this.bounds.set(d.x,d.y,d.x+this.bounds.width(),d.y+this.maxSize.height)}var g=this.canvasNode.getScreenCTM();d.x*=g.a;d.y*=g.d;var b=1;if(!isNaN(screen.logicalXDPI)&&!isNaN(screen.systemXDPI)){var c=navigator.userAgent;if(c.indexOf("MSIE")>=0){var m=Math.round((screen.deviceXDPI/screen.logicalXDPI)*100);if(m!==100){b=m/100}}}if(b===1){d.y=d.y-jQuery("#canvasSection").offset().top+g.f;d.x=d.x-jQuery("#canvasSection").offset().left+g.e}else{var h=jQuery("#canvasSection").offset().left;var k=jQuery("#canvasSection").scrollLeft();var f=jQuery("#canvasSection").scrollTop();var e=g.e-(h*b);var l=0;if(e>10){l=(e/b)-e}d.y=d.y-(jQuery("#canvasSection").offset().top*b)+((f*b)-f)+g.f;d.x=d.x-(h*b)+l+((k*b)-k)+g.e}if(this.orientation==="northwest"){d.x-=13;d.y-=13}else{d.x+=(g.a*this.bounds.width())+3;d.y+=(g.d*this.bounds.height())+3}this.position=d;this.node.style.left=this.position.x+"px";this.node.style.top=this.position.y+"px"}});ORYX.Core.Command.Move=ORYX.Core.Command.extend({construct:function(b,e,c,a,d){this.moveShapes=b;this.selectedShapes=a;this.offset=e;this.plugin=d;this.newParents=b.collect(function(f){return c||f.parent});this.oldParents=b.collect(function(f){return f.parent});this.dockedNodes=b.findAll(function(f){return f instanceof ORYX.Core.Node&&f.dockers.length==1}).collect(function(f){return{docker:f.dockers[0],dockedShape:f.dockers[0].getDockedShape(),refPoint:f.dockers[0].referencePoint}})},execute:function(){this.dockAllShapes();this.move(this.offset);this.addShapeToParent(this.newParents);this.selectCurrentShapes();this.plugin.facade.getCanvas().update();this.plugin.facade.updateSelection()},rollback:function(){var a={x:-this.offset.x,y:-this.offset.y};this.move(a);this.addShapeToParent(this.oldParents);this.dockAllShapes(true);this.selectCurrentShapes();this.plugin.facade.getCanvas().update();this.plugin.facade.updateSelection()},move:function(d,a){for(var g=0;g g||this.moveShapes.indexOf(k.dockers.last().getDockedShape())>g}.bind(this));for(var f=0;f =0){var d=Math.round((screen.deviceXDPI/screen.logicalXDPI)*100);if(d!==100){e=d/100}}}if(e!==1){c.x=c.x/e;c.y=c.y/e}if((!this.isStartDocker&&!this.isEndDocker)||!this.docker.isDocked()){this.docker.setDockedShape(undefined);this.docker.bounds.centerMoveTo(c);this.dockerParent._update()}else{this.outerDockerNotMoved=true}var b={movedCallback:this.dockerMoved.bind(this),upCallback:this.dockerMovedFinished.bind(this)};this.startEventPos=c;ORYX.Core.UIEnableDrag(g,f,b)}},dockerMoved:function(u){this.outerDockerNotMoved=false;var m=undefined;if(this.docker.parent){if(this.isStartDocker||this.isEndDocker){var p=this.facade.eventCoordinates(u);var x=1;if(!isNaN(screen.logicalXDPI)&&!isNaN(screen.systemXDPI)){var w=navigator.userAgent;if(w.indexOf("MSIE")>=0){var a=Math.round((screen.deviceXDPI/screen.logicalXDPI)*100);if(a!==100){x=a/100}}}if(x!==1){p.x=p.x/x;p.y=p.y/x}if(this.docker.isDocked()){var c=ORYX.Core.Math.getDistancePointToPoint(p,this.initialDockerPosition);if(c Math.abs(A.x-z.x)?A.x-z.x:k;g=Math.abs(g)>Math.abs(A.y-z.y)?A.y-z.y:g}).bind(this));if(Math.abs(k) 0?this.position.x:this.position.x+this.size.width,y:this.size.height>0?this.position.y:this.position.y+this.size.height};var l={x:m.x+Math.abs(this.size.width),y:m.y+Math.abs(this.size.height)};var d=1;if(!isNaN(screen.logicalXDPI)&&!isNaN(screen.systemXDPI)){var f=navigator.userAgent;if(f.indexOf("MSIE")>=0){var q=Math.round((screen.deviceXDPI/screen.logicalXDPI)*100);if(q!==100){d=q/100}}}if(d===1){m.x=m.x-(g.e-jQuery("#canvasSection").offset().left);m.y=m.y-(g.f-jQuery("#canvasSection").offset().top);l.x=l.x-(g.e-jQuery("#canvasSection").offset().left);l.y=l.y-(g.f-jQuery("#canvasSection").offset().top)}else{var n=jQuery("#canvasSection").offset().left;var o=jQuery("#canvasSection").scrollLeft();var k=jQuery("#canvasSection").scrollTop();var h=m.e-(n*d);var p=0;if(h>10){p=(h/d)-h}m.x=m.x-(g.e-(n*d)+p+((o*d)-o));m.y=m.y-(g.f-(jQuery("#canvasSection").offset().top*d)+((k*d)-k));l.x=l.x-(g.e-(n*d)+p+((o*d)-o));l.y=l.y-(g.f-(jQuery("#canvasSection").offset().top*d)+((k*d)-k))}m.x/=g.a;m.y/=g.d;l.x/=g.a;l.y/=g.d;var c=this.facade.getCanvas().getChildShapes(true).findAll(function(b){var a=b.absoluteBounds();var s=a.upperLeft();var r=a.lowerRight();if(s.x>m.x&&s.y>m.y&&r.x 0){this.setAttributesByStyle(b,a);this.show(b)}else{this.hide(b)}}},hideHighlight:function(a){if(a&&a.highlightId&&this.highlightNodes[a.highlightId]){this.hide(this.highlightNodes[a.highlightId])}},hide:function(a){a.setAttributeNS(null,"display","none")},show:function(a){a.setAttributeNS(null,"display","")},setAttributesByStyle:function(b,a){if(a.style&&a.style==ORYX.CONFIG.SELECTION_HIGHLIGHT_STYLE_RECTANGLE){var d=a.elements[0].absoluteBounds();var c=a.strokewidth?a.strokewidth:ORYX.CONFIG.BORDER_OFFSET;b.setAttributeNS(null,"d",this.getPathRectangle(d.a,d.b,c));b.setAttributeNS(null,"stroke",a.color?a.color:ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR);b.setAttributeNS(null,"stroke-opacity",a.opacity?a.opacity:0.2);b.setAttributeNS(null,"stroke-width",c)}else{if(a.elements.length==1&&a.elements[0] instanceof ORYX.Core.Edge&&a.highlightId!="selection"){var e=this.getPathEdge(a.elements[0].dockers);if(e&&e.length>0){b.setAttributeNS(null,"d",e)}b.setAttributeNS(null,"stroke",a.color?a.color:ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR);b.setAttributeNS(null,"stroke-opacity",a.opacity?a.opacity:0.2);b.setAttributeNS(null,"stroke-width",ORYX.CONFIG.OFFSET_EDGE_BOUNDS)}else{var e=this.getPathByElements(a.elements);if(e&&e.length>0){b.setAttributeNS(null,"d",e)}b.setAttributeNS(null,"stroke",a.color?a.color:ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR);b.setAttributeNS(null,"stroke-opacity",a.opacity?a.opacity:1);b.setAttributeNS(null,"stroke-width",a.strokewidth?a.strokewidth:2)}}},getPathByElements:function(a){if(!a||a.length<=0){return undefined}var c=ORYX.CONFIG.SELECTED_AREA_PADDING;var b="";a.each((function(f){if(!f){return}var g=f.absoluteBounds();g.widen(c);var e=g.upperLeft();var d=g.lowerRight();b=b+this.getPath(e,d)}).bind(this));return b},getPath:function(d,c){return this.getPathCorners(d,c)},getPathCorners:function(d,c){var e=ORYX.CONFIG.SELECTION_HIGHLIGHT_SIZE;var f="";f=f+"M"+d.x+" "+(d.y+e)+" l0 -"+e+" l"+e+" 0 ";f=f+"M"+d.x+" "+(c.y-e)+" l0 "+e+" l"+e+" 0 ";f=f+"M"+c.x+" "+(c.y-e)+" l0 "+e+" l-"+e+" 0 ";f=f+"M"+c.x+" "+(d.y+e)+" l0 -"+e+" l-"+e+" 0 ";return f},getPathRectangle:function(d,c,h){var e=ORYX.CONFIG.SELECTION_HIGHLIGHT_SIZE;var f="";var g=h/2;f=f+"M"+(d.x+g)+" "+(d.y);f=f+" L"+(d.x+g)+" "+(c.y-g);f=f+" L"+(c.x-g)+" "+(c.y-g);f=f+" L"+(c.x-g)+" "+(d.y+g);f=f+" L"+(d.x+g)+" "+(d.y+g);return f},getPathEdge:function(a){var b=a.length;var c="M"+a[0].bounds.center().x+" "+a[0].bounds.center().y;for(i=1;i1){this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW,highlightId:"selection",elements:a.elements.without(a.subSelection),color:ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR,opacity:!a.subSelection?this.opacityFull:this.opacityLow});if(a.subSelection){this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW,highlightId:"subselection",elements:[a.subSelection],color:ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR,opacity:this.opacityFull})}else{this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE,highlightId:"subselection"})}}else{this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE,highlightId:"selection"});this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE,highlightId:"subselection"})}}});if(!ORYX.Plugins){ORYX.Plugins=new Object()}ORYX.Plugins.Overlay=Clazz.extend({facade:undefined,styleNode:undefined,construct:function(a){this.facade=a;this.changes=[];this.facade.registerOnEvent(ORYX.CONFIG.EVENT_OVERLAY_SHOW,this.show.bind(this));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_OVERLAY_HIDE,this.hide.bind(this));this.styleNode=document.createElement("style");this.styleNode.setAttributeNS(null,"type","text/css");document.getElementsByTagName("head")[0].appendChild(this.styleNode)},show:function(a){if(!a||!a.shapes||!a.shapes instanceof Array||!a.id||!a.id instanceof String||a.id.length==0){return}if(a.attributes){a.shapes.each(function(d){if(!d instanceof ORYX.Core.Shape){return}this.setAttributes(d.node,a.attributes)}.bind(this))}var c=true;try{c=a.node&&a.node instanceof SVGElement}catch(b){}if(a.node&&c){a._temps=[];a.shapes.each(function(g,f){if(!g instanceof ORYX.Core.Shape){return}var e={};e.svg=a.dontCloneNode?a.node:a.node.cloneNode(true);g.node.firstChild.appendChild(e.svg);if(g instanceof ORYX.Core.Edge&&!a.nodePosition){a.nodePosition="START"}if(a.nodePosition){var d=g.bounds;var h=a.nodePosition.toUpperCase();if(g instanceof ORYX.Core.Node&&h=="START"){h="NW"}else{if(g instanceof ORYX.Core.Node&&h=="END"){h="SE"}else{if(g instanceof ORYX.Core.Edge&&h=="START"){d=g.getDockers().first().bounds}else{if(g instanceof ORYX.Core.Edge&&h=="END"){d=g.getDockers().last().bounds}}}}e.callback=function(){var k=0;var l=0;if(h=="NW"){}else{if(h=="N"){k=d.width()/2}else{if(h=="NE"){k=d.width()}else{if(h=="E"){k=d.width();l=d.height()/2}else{if(h=="SE"){k=d.width();l=d.height()}else{if(h=="S"){k=d.width()/2;l=d.height()}else{if(h=="SW"){l=d.height()}else{if(h=="W"){l=d.height()/2}else{if(h=="START"||h=="END"){k=d.width()/2;l=d.height()/2}else{return}}}}}}}}}if(g instanceof ORYX.Core.Edge){k+=d.upperLeft().x;l+=d.upperLeft().y}e.svg.setAttributeNS(null,"transform","translate("+k+", "+l+")")}.bind(this);e.element=g;e.callback();d.registerCallback(e.callback)}a._temps.push(e)}.bind(this))}if(!this.changes[a.id]){this.changes[a.id]=[]}this.changes[a.id].push(a)},hide:function(a){if(!a||!a.id||!a.id instanceof String||a.id.length==0||!this.changes[a.id]){return}this.changes[a.id].each(function(b){b.shapes.each(function(d,c){if(!d instanceof ORYX.Core.Shape){return}this.deleteAttributes(d.node)}.bind(this));if(b._temps){b._temps.each(function(c){if(c.svg&&c.svg.parentNode){c.svg.parentNode.removeChild(c.svg)}if(c.callback&&c.element){c.element.bounds.unregisterCallback(c.callback)}}.bind(this))}}.bind(this));this.changes[a.id]=null},setAttributes:function(c,d){var h=this.getAllChilds(c.firstChild.firstChild);var a=[];h.each(function(m){a.push($A(m.attributes).findAll(function(n){return n.nodeValue.startsWith("url(#")}))});a=a.flatten().compact();a=a.collect(function(m){return m.nodeValue}).uniq();a=a.collect(function(m){return m.slice(5,m.length-1)});a.unshift(c.id+" .me");var g=$H(d);var e=g.toJSON().gsub(",",";").gsub('"',"");var k=d.stroke?e.slice(0,e.length-1)+"; fill:"+d.stroke+";}":e;var f;if(d.fill){var b=Object.clone(d);b.fill="black";f=$H(b).toJSON().gsub(",",";").gsub('"',"")}csstags=a.collect(function(n,m){return"#"+n+" * "+(!m?e:k)+""+(f?" #"+n+" text * "+f:"")});var l=csstags.join(" ")+"\n";this.styleNode.appendChild(document.createTextNode(l))},deleteAttributes:function(b){var a=$A(this.styleNode.childNodes).findAll(function(c){return c.textContent.include("#"+b.id)});a.each(function(c){c.parentNode.removeChild(c)})},getAllChilds:function(a){var b=$A(a.childNodes);$A(a.childNodes).each(function(c){b.push(this.getAllChilds(c))}.bind(this));return b.flatten()}});if(!ORYX.Plugins){ORYX.Plugins=new Object()}ORYX.Plugins.KeysMove=ORYX.Plugins.AbstractPlugin.extend({facade:undefined,construct:function(a){this.facade=a;this.copyElements=[];this.facade.offer({keyCodes:[{metaKeys:[ORYX.CONFIG.META_KEY_META_CTRL],keyCode:65,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.selectAll.bind(this)});this.facade.offer({keyCodes:[{metaKeys:[ORYX.CONFIG.META_KEY_META_CTRL],keyCode:ORYX.CONFIG.KEY_CODE_LEFT,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.move.bind(this,ORYX.CONFIG.KEY_CODE_LEFT,false)});this.facade.offer({keyCodes:[{keyCode:ORYX.CONFIG.KEY_CODE_LEFT,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.move.bind(this,ORYX.CONFIG.KEY_CODE_LEFT,true)});this.facade.offer({keyCodes:[{metaKeys:[ORYX.CONFIG.META_KEY_META_CTRL],keyCode:ORYX.CONFIG.KEY_CODE_RIGHT,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.move.bind(this,ORYX.CONFIG.KEY_CODE_RIGHT,false)});this.facade.offer({keyCodes:[{keyCode:ORYX.CONFIG.KEY_CODE_RIGHT,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.move.bind(this,ORYX.CONFIG.KEY_CODE_RIGHT,true)});this.facade.offer({keyCodes:[{metaKeys:[ORYX.CONFIG.META_KEY_META_CTRL],keyCode:ORYX.CONFIG.KEY_CODE_UP,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.move.bind(this,ORYX.CONFIG.KEY_CODE_UP,false)});this.facade.offer({keyCodes:[{keyCode:ORYX.CONFIG.KEY_CODE_UP,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.move.bind(this,ORYX.CONFIG.KEY_CODE_UP,true)});this.facade.offer({keyCodes:[{metaKeys:[ORYX.CONFIG.META_KEY_META_CTRL],keyCode:ORYX.CONFIG.KEY_CODE_DOWN,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.move.bind(this,ORYX.CONFIG.KEY_CODE_DOWN,false)});this.facade.offer({keyCodes:[{keyCode:ORYX.CONFIG.KEY_CODE_DOWN,keyAction:ORYX.CONFIG.KEY_ACTION_DOWN}],functionality:this.move.bind(this,ORYX.CONFIG.KEY_CODE_DOWN,true)})},selectAll:function(a){Event.stop(a.event);this.facade.setSelection(this.facade.getCanvas().getChildShapes(true))},move:function(n,k,l){Event.stop(l.event);var b=k?20:5;var m=this.facade.getSelection();var g=this.facade.getSelection();var c={x:0,y:0};switch(n){case ORYX.CONFIG.KEY_CODE_LEFT:c.x=-1*b;break;case ORYX.CONFIG.KEY_CODE_RIGHT:c.x=b;break;case ORYX.CONFIG.KEY_CODE_UP:c.y=-1*b;break;case ORYX.CONFIG.KEY_CODE_DOWN:c.y=b;break}m=m.findAll(function(e){if(e instanceof ORYX.Core.Node&&e.dockers.length==1&&m.include(e.dockers.first().getDockedShape())){return false}var o=e.parent;do{if(m.include(o)){return false}}while(o=o.parent);return true});var f=true;var h=m.all(function(e){if(e instanceof ORYX.Core.Edge){if(e.isDocked()){f=false}return true}return false});if(h&&!f){return}m=m.map(function(o){if(o instanceof ORYX.Core.Node){return o}else{if(o instanceof ORYX.Core.Edge){var e=o.dockers;if(m.include(o.dockers.first().getDockedShape())){e=e.without(o.dockers.first())}if(m.include(o.dockers.last().getDockedShape())){e=e.without(o.dockers.last())}return e}else{return null}}}).flatten().compact();if(m.size()>0){var a=[this.facade.getCanvas().bounds.lowerRight().x,this.facade.getCanvas().bounds.lowerRight().y,0,0];m.each(function(e){a[0]=Math.min(a[0],e.bounds.upperLeft().x);a[1]=Math.min(a[1],e.bounds.upperLeft().y);a[2]=Math.max(a[2],e.bounds.lowerRight().x);a[3]=Math.max(a[3],e.bounds.lowerRight().y)});if(a[0]+c.x<0){c.x=-a[0]}if(a[1]+c.y<0){c.y=-a[1]}if(a[2]+c.x>this.facade.getCanvas().bounds.lowerRight().x){c.x=this.facade.getCanvas().bounds.lowerRight().x-a[2]}if(a[3]+c.y>this.facade.getCanvas().bounds.lowerRight().y){c.y=this.facade.getCanvas().bounds.lowerRight().y-a[3]}if(c.x!=0||c.y!=0){var d=[new ORYX.Core.Command.Move(m,c,null,g,this)];this.facade.executeCommands(d)}}},getUndockedCommant:function(b){var a=ORYX.Core.Command.extend({construct:function(c){this.dockers=c.collect(function(d){return d instanceof ORYX.Core.Controls.Docker?{docker:d,dockedShape:d.getDockedShape(),refPoint:d.referencePoint}:undefined}).compact()},execute:function(){this.dockers.each(function(c){c.docker.setDockedShape(undefined)})},rollback:function(){this.dockers.each(function(c){c.docker.setDockedShape(c.dockedShape);c.docker.setReferencePoint(c.refPoint)})}});command=new a(b);command.execute();return command},});if(!ORYX.Plugins){ORYX.Plugins={}}if(!ORYX.Plugins.Layouter){ORYX.Plugins.Layouter={}}new function(){ORYX.Plugins.Layouter.EdgeLayouter=ORYX.Plugins.AbstractLayouter.extend({layouted:["http://b3mn.org/stencilset/bpmn1.1#SequenceFlow","http://b3mn.org/stencilset/bpmn1.1#MessageFlow","http://b3mn.org/stencilset/timjpdl3#SequenceFlow","http://b3mn.org/stencilset/jbpm4#SequenceFlow","http://b3mn.org/stencilset/bpmn2.0#MessageFlow","http://b3mn.org/stencilset/bpmn2.0#SequenceFlow","http://b3mn.org/stencilset/bpmn2.0choreography#MessageFlow","http://b3mn.org/stencilset/bpmn2.0choreography#SequenceFlow","http://b3mn.org/stencilset/bpmn2.0conversation#ConversationLink","http://b3mn.org/stencilset/epc#ControlFlow","http://www.signavio.com/stencilsets/processmap#ProcessLink","http://www.signavio.com/stencilsets/organigram#connection"],layout:function(a){a.each(function(b){this.doLayout(b)}.bind(this))},doLayout:function(b){var d=b.getIncomingNodes()[0];var c=b.getOutgoingNodes()[0];if(!d||!c){return}var a=this.getPositions(d,c,b);if(a.length>0){this.setDockers(b,a[0].a,a[0].b)}},getPositions:function(r,s,e){var u=r.absoluteBounds();var n=s.absoluteBounds();var q=u.center();var o=n.center();var l=u.midPoint();var d=n.midPoint();var k=Object.clone(e.dockers.first().referencePoint);var t=Object.clone(e.dockers.last().referencePoint);var c=e.dockers.first().getAbsoluteReferencePoint();var p=e.dockers.last().getAbsoluteReferencePoint();if(Math.abs(c.x-p.x)<1||Math.abs(c.y-p.y)<1){return[]}var g={};g.x=q.x o.x)})}if(!u.isIncluded(q.x,g.y)&&!n.isIncluded(o.x,g.y)){h.push({a:{x:q.x+f(k,l,"x"),y:g.y},b:{x:o.x+f(t,d,"x"),y:g.y},z:this.getWeight(r,"b",s,"t",e,q.y>o.y)})}return h.sort(function(v,m){return v.z q.x&&Math.abs(r.y-q.y)<2;case"b":return Math.abs(r.x-q.x)<2&&r.y>q.y;case"l":return r.x 0&&g.length>0){f=f.without.apply(f,k);f=f.concat(g);this.facade.setSelection(f.uniq())}}},handleShapeRemove:function(e){var f=e.shape;var l=e.parent;if(f instanceof ORYX.Core.Node&&f.getStencil().idWithoutNs()==="Lane"&&this.facade.isExecutingCommands()){var g=this.getParentPool(l);if(g&&g.parent){var h=function(m){return !m.getChildNodes().any(function(n){return n.getStencil().idWithoutNs()==="Lane"})};var c=h(f);var k=l.getChildNodes().any(function(m){return m.getStencil().idWithoutNs()==="Lane"});if(c&&k){var d=new a(f,l,g,this);this.facade.executeCommands([d])}else{if(!c&&!this.facade.getSelection().any(function(m){return m instanceof ORYX.Core.Node&&m.getStencil().idWithoutNs()==="Lane"&&m.isParent(f)&&h(m)})){var b=ORYX.Core.Command.extend({construct:function(m,n){this.children=m.getChildNodes(true);this.facade=n},execute:function(){this.children.each(function(m){m.bounds.moveBy(30,0)})},rollback:function(){this.children.each(function(m){m.bounds.moveBy(-30,0)})}});this.facade.executeCommands([new b(f,this.facade)])}else{if(c&&!k&&l==g){l.add(f)}}}}}},hashedSubProcesses:{},hashChildShapes:function(b){var c=b.getChildNodes();c.each(function(d){if(this.hashedSubProcesses[d.id]){this.hashedSubProcesses[d.id]=d.absoluteXY();this.hashedSubProcesses[d.id].width=d.bounds.width();this.hashedSubProcesses[d.id].height=d.bounds.height();this.hashChildShapes(d)}}.bind(this))},handleSubProcess:function(d){var c=d.shape;if(!this.hashedSubProcesses[c.id]){this.hashedSubProcesses[c.id]=c.absoluteXY();this.hashedSubProcesses[c.id].width=c.bounds.width();this.hashedSubProcesses[c.id].height=c.bounds.height();return}var e=c.absoluteXY();e.x-=this.hashedSubProcesses[c.id].x;e.y-=this.hashedSubProcesses[c.id].y;var b=this.hashedSubProcesses[c.id].width!==c.bounds.width()||this.hashedSubProcesses[c.id].height!==c.bounds.height();this.hashedSubProcesses[c.id]=c.absoluteXY();this.hashedSubProcesses[c.id].width=c.bounds.width();this.hashedSubProcesses[c.id].height=c.bounds.height();this.hashChildShapes(c);if(this.facade.isExecutingCommands()&&!b){this.moveChildDockers(c,e)}},moveChildDockers:function(d,g){if(!g.x&&!g.y){return}var e=d.getChildNodes(true);var c=e.map(function(h){return[].concat(h.getIncomingShapes()).concat(h.getOutgoingShapes())}).flatten().uniq().map(function(h){return h.dockers.length>2?h.dockers.slice(1,h.dockers.length-1):[]}).flatten();var b=d.absoluteBounds();b.moveBy(-g.x,-g.y);var f={};c.each(function(m){if(m.isChanged){return}var k=Object.clone(g);if(!b.isIncluded(m.bounds.center())){var o=m.parent.dockers.indexOf(m);var s=m.parent.dockers.length;var q=m.parent.getSource();var r=m.parent.getTarget();var l=e.include(q)&&e.include(r);if(!l){var n=o!==0?b.isIncluded(m.parent.dockers[o-1].bounds.center()):false;var p=o!==s-1?b.isIncluded(m.parent.dockers[o+1].bounds.center()):false;if(!n&&!p){return}var h=m.parent.dockers[n?o-1:o+1];if(Math.abs(-Math.abs(h.bounds.center().x-m.bounds.center().x))<2){k.y=0}else{if(Math.abs(-Math.abs(h.bounds.center().y-m.bounds.center().y))<2){k.x=0}else{return}}}}f[m.getId()]={docker:m,offset:k}});this.facade.executeCommands([new ORYX.Core.MoveDockersCommand(f)])},handleDockerDocked:function(d){var e=this.getNamespace();var f=d.parent;var c=d.target;if(f.getStencil().id()===e+"SequenceFlow"){var b=c.getStencil().groups().find(function(g){if(g=="Gateways"){return g}});if(!b&&(f.properties["oryx-conditiontype"]=="Expression")){f.setProperty("oryx-showdiamondmarker",true)}else{f.setProperty("oryx-showdiamondmarker",false)}this.facade.getCanvas().update()}},handlePropertyChanged:function(e){var d=this.getNamespace();var c=e.elements;var f=e.key;var b=e.value;var g=false;c.each(function(k){if((k.getStencil().id()===d+"SequenceFlow")&&(f==="oryx-conditiontype")){if(b!="Expression"){k.setProperty("oryx-showdiamondmarker",false)}else{var l=k.getIncomingShapes();if(!l){k.setProperty("oryx-showdiamondmarker",true)}var h=l.find(function(m){var n=m.getStencil().groups().find(function(o){if(o=="Gateways"){return o}});if(n){return n}});if(!h){k.setProperty("oryx-showdiamondmarker",true)}else{k.setProperty("oryx-showdiamondmarker",false)}}g=true}}.bind(this));if(g){this.facade.getCanvas().update()}},hashedPoolPositions:{},hashedLaneDepth:{},hashedBounds:{},hashedPositions:{},handleLayoutPool:function(v){var o=v.shape;var H=this.facade.getSelection();var z=H.include(o)?o:H.first();z=z||o;this.currentPool=o;if(!(z.getStencil().id().endsWith("Pool")||z.getStencil().id().endsWith("Lane"))){return}if(z!==o&&!z.isParent(o)&&!this.hashedBounds[o.id][z.id]){return}if(!this.hashedBounds[o.id]){this.hashedBounds[o.id]={}}var C=this.getLanes(o);if(C.length<=0){return}var B=this.getLanes(o,true),b;var g=B.clone();var k=new Hash();B.each(function(x){k.set(x.id,x.bounds.upperLeft())});if(C.length===1&&this.getLanes(C.first()).length<=0){var A=C.first().properties.get("oryx-name").trim().length>0;C.first().setProperty("oryx-showcaption",A);var d=C.first().node.getElementsByTagName("rect");d[0].setAttributeNS(null,"display","none")}else{B.invoke("setProperty","oryx-showcaption",true);B.each(function(x){var y=x.node.getElementsByTagName("rect");y[0].removeAttributeNS(null,"display")})}var u=[];var n=[];var w=-1;while(++w 0){z=n.first()}var E=$H(this.hashedBounds[o.id]).keys();var w=-1;while(++w 0||n.length>0){if(n.length===1&&this.getLanes(n[0].parent).length===1){q=this.adjustHeight(C,n[0].parent)}else{q=this.updateHeight(o)}s=this.adjustWidth(C,o.bounds.width());o.update()}else{if(o==z){if(H.length===1&&this.isResized(o,this.hashedPoolPositions[o.id])){var D=this.hashedPoolPositions[o.id].upperLeft();var f=o.bounds.upperLeft();var G=0;if(this.shouldScale(o)){var c=this.hashedPoolPositions[o.id];G=c.height()/o.bounds.height()}this.adjustLanes(o,B,D.x-f.x,D.y-f.y,G)}q=this.adjustHeight(C,undefined,o.bounds.height());s=this.adjustWidth(C,o.bounds.width())}else{if(H.length===1&&this.isResized(z,this.hashedBounds[o.id][z.id])){var D=this.hashedBounds[o.id][z.id].upperLeft();var f=z.absoluteXY();m=D.x-f.x;l=D.y-f.y;if(m||l){g=g.without(z);this.adjustLanes(o,this.getAllExcludedLanes(o,z),m,0)}var h=this.getLanes(z,true);if(h.length>0){if(this.shouldScale(z)){var c=this.hashedBounds[o.id][z.id];var G=c.height()/z.bounds.height();this.adjustLanes(o,h,m,l,G)}else{this.adjustLanes(o,h,m,l,0)}}}var F=B.map(function(x){return{shape:x,bounds:x.bounds.clone()}});q=this.adjustHeight(C,z);this.checkForChanges(B,F);s=this.adjustWidth(C,z.bounds.width()+(this.getDepth(z,o)*30))}}this.setDimensions(o,s,q,m,l);if(this.facade.isExecutingCommands()&&(u.length===0||n.length!==0)){this.updateDockers(g,o);var t=this.hashedPositions[o.id];if(t&&t.keys().any(function(y,x){return(B[x]||{}).id!==y})){var r=ORYX.Core.Command.extend({construct:function(J,I,y,K,x){this.originPosition=Object.clone(J);this.newPosition=Object.clone(I);this.lanes=y;this.plugin=K;this.pool=x},execute:function(){if(!this.executed){this.executed=true;this.lanes.each(function(x){if(this.newPosition[x.id]){x.bounds.moveTo(this.newPosition[x.id])}}.bind(this));this.plugin.hashedPositions[this.pool]=Object.clone(this.newPosition)}},rollback:function(){this.lanes.each(function(x){if(this.originPosition[x.id]){x.bounds.moveTo(this.originPosition[x.id])}}.bind(this));this.plugin.hashedPositions[this.pool]=Object.clone(this.originPosition)}});var p=new Hash();B.each(function(x){p.set(x.id,x.bounds.upperLeft())});var e=new r(k,p,B,this,o.id);this.facade.executeCommands([e])}}this.hashedBounds[o.id]={};this.hashedPositions[o.id]=k;var w=-1;while(++w 1||c.any(function(d){return this.shouldScale(d)}.bind(this))},checkForChanges:function(b,c){if(this.facade.isExecutingCommands()&&c.any(function(e){return e.shape.bounds.toString()!==e.bounds.toString()})){var d=ORYX.Core.Command.extend({construct:function(e){this.oldState=e;this.newState=e.map(function(f){return{shape:f.shape,bounds:f.bounds.clone()}})},execute:function(){if(this.executed){this.applyState(this.newState)}this.executed=true},rollback:function(){this.applyState(this.oldState)},applyState:function(e){e.each(function(f){f.shape.bounds.set(f.bounds.upperLeft(),f.bounds.lowerRight())})}});this.facade.executeCommands([new d(c)])}},isResized:function(b,d){if(!d||!b){return false}var c=d;return Math.round(c.width()-b.bounds.width())!==0||Math.round(c.height()-b.bounds.height())!==0},adjustLanes:function(d,c,b,f,e){e=e||0;c.each(function(g){g.getChildNodes().each(function(k){if(!k.getStencil().id().endsWith("Lane")){var h=e?k.bounds.center().y-(k.bounds.center().y/e):-f;k.bounds.moveBy((b||0),-h);if(e&&k.getStencil().id().endsWith("Subprocess")){this.moveChildDockers(k,{x:(0),y:-h})}}}.bind(this));this.hashedBounds[d.id][g.id].moveBy(-(b||0),!e?-f:0);if(e){g.isScaled=true}}.bind(this))},getAllExcludedLanes:function(d,b){var c=[];d.getChildNodes().each(function(e){if((!b||e!==b)&&e.getStencil().id().endsWith("Lane")){c.push(e);c=c.concat(this.getAllExcludedLanes(e,b))}}.bind(this));return c},forceToUpdateLane:function(b){if(b.bounds.height()!==b._svgShapes[0].height){b.isChanged=true;b.isResized=true;b._update()}},getDepth:function(d,c){var b=0;while(d&&d.parent&&d!==c){d=d.parent;++b}return b},updateDepth:function(c,b,d){var e=(b-d)*30;c.getChildNodes().each(function(f){f.bounds.moveBy(e,0);[].concat(children[j].getIncomingShapes()).concat(children[j].getOutgoingShapes())})},setDimensions:function(e,f,c,b,g){var d=e.getStencil().id().endsWith("Lane");e.bounds.set(d?30:(e.bounds.a.x-(b||0)),d?e.bounds.a.y:(e.bounds.a.y-(g||0)),f?e.bounds.a.x+f-(d?30:(b||0)):e.bounds.b.x,c?e.bounds.a.y+c-(d?0:(g||0)):e.bounds.b.y)},setLanePosition:function(b,c){b.bounds.moveTo(30,c)},adjustWidth:function(b,c){(b||[]).each(function(d){this.setDimensions(d,c);this.adjustWidth(this.getLanes(d),c-30)}.bind(this));return c},adjustHeight:function(e,g,c){var h=0;if(!g&&c){var f=-1;while(++f p?1:0)}var t=v p&&s>m;var k=v
=m&&l
=p&&s p&&s<=m&&l>x;var f=v<=p&&s>m&&o>y;return(t||k||n?-1:(q||r||f?1:0))}.bind(this));return c},getNamespace:function(){if(!this.namespace){var b=this.facade.getStencilSets();if(b.keys()){this.namespace=b.keys()[0]}else{return undefined}}return this.namespace}};var a=ORYX.Core.Command.extend({construct:function(b,d,c,e){this.facade=e.facade;this.plugin=e;this.shape=b;this.changes;this.pool=c;this.parent=d;this.shapeChildren=[];this.shape.getChildShapes().each(function(f){this.shapeChildren.push({shape:f,bounds:{a:{x:f.bounds.a.x,y:f.bounds.a.y},b:{x:f.bounds.b.x,y:f.bounds.b.y}}})}.bind(this));this.shapeUpperLeft=this.shape.bounds.upperLeft();this.parentHeight=this.parent.bounds.height()},getLeafLanes:function(b){var c=this.plugin.getLanes(b).map(function(d){return this.getLeafLanes(d)}.bind(this)).flatten();return c.length>0?c:[b]},findNewLane:function(){var b=this.plugin.getLanes(this.parent);var c=this.getLeafLanes(this.parent);this.lane=c.find(function(d){return d.bounds.upperLeft().y>=this.shapeUpperLeft.y}.bind(this))||c.last();this.laneUpperLeft=this.lane.bounds.upperLeft()},execute:function(){if(this.changes){this.executeAgain();return}if(!this.lane){this.findNewLane()}if(this.lane){var f=this.laneUpperLeft;var d=this.shapeUpperLeft;var c=this.plugin.getDepth(this.lane,this.parent)-1;this.changes=$H({});if(f.y>=d.y){this.lane.getChildShapes().each(function(g){if(!this.changes[g.getId()]){this.changes[g.getId()]=this.computeChanges(g,this.lane,this.lane,this.shape.bounds.height())}g.bounds.moveBy(0,this.shape.bounds.height())}.bind(this));this.plugin.hashChildShapes(this.lane);this.shapeChildren.each(function(g){g.shape.bounds.set(g.bounds);g.shape.bounds.moveBy((d.x-30)-(c*30),0);if(!this.changes[g.shape.getId()]){this.changes[g.shape.getId()]=this.computeChanges(g.shape,this.shape,this.lane,0)}this.lane.add(g.shape)}.bind(this));this.lane.bounds.moveBy(0,d.y-f.y)}else{if(d.y>f.y){this.shapeChildren.each(function(g){g.shape.bounds.set(g.bounds);g.shape.bounds.moveBy((d.x-30)-(c*30),this.lane.bounds.height());if(!this.changes[g.shape.getId()]){this.changes[g.shape.getId()]=this.computeChanges(g.shape,this.shape,this.lane,0)}this.lane.add(g.shape)}.bind(this))}}}var e=this.lane.bounds.height();var b=this.lane.length===1?this.parentHeight:this.lane.bounds.height()+this.shape.bounds.height();this.setHeight(b,e,this.parent,this.parentHeight,true);this.plugin.getLanes(this.parent).each(function(g){if(!this.changes[g.getId()]&&g!==this.lane&&g!==this.shape){this.changes[g.getId()]=this.computeChanges(g,this.parent,this.parent,0)}}.bind(this));this.update()},setHeight:function(b,f,e,d,c){this.plugin.setDimensions(this.lane,this.lane.bounds.width(),b);this.plugin.hashedBounds[this.pool.id][this.lane.id]=this.lane.absoluteBounds();this.plugin.adjustHeight(this.plugin.getLanes(e),this.lane);if(c===true){this.changes[this.shape.getId()]=this.computeChanges(this.shape,e,e,0,f,b)}this.plugin.setDimensions(e,e.bounds.width(),d);if(e!==this.pool){this.plugin.setDimensions(this.pool,this.pool.bounds.width(),this.pool.bounds.height()+(b-f))}},update:function(){this.plugin.hashedBounds[this.pool.id]["REMOVED"]=true},rollback:function(){var c=this.laneUpperLeft;var b=this.shapeUpperLeft;this.changes.each(function(h){var g=h.value.oldParent;var e=h.value.shape;var f=h.value.parentHeight;var k=h.value.oldHeight;var d=h.value.newHeight;if(e.getStencil().id().endsWith("Lane")){e.bounds.moveTo(h.value.oldPosition)}if(k){this.setHeight(k,d,g,g.bounds.height()+(k-d));if(c.y>=b.y){this.lane.bounds.moveBy(0,this.shape.bounds.height()-1)}}else{g.add(e);e.bounds.moveTo(h.value.oldPosition)}}.bind(this))},executeAgain:function(){this.changes.each(function(f){var d=f.value.newParent;var c=f.value.shape;var b=f.value.newHeight;var h=f.value.oldHeight;if(b){var g=this.laneUpperLeft.y;var e=this.shapeUpperLeft.y;if(g>=e){this.lane.bounds.moveBy(0,e-g)}this.setHeight(b,h,d,d.bounds.height()+(b-h))}else{d.add(c);c.bounds.moveTo(f.value.newPosition)}}.bind(this));this.update()},computeChanges:function(d,l,k,c,m,b){l=this.changes[d.getId()]?this.changes[d.getId()].oldParent:l;var h=this.changes[d.getId()]?this.changes[d.getId()].oldPosition:d.bounds.upperLeft();var f=d.bounds.upperLeft();var e={x:f.x,y:f.y+c};var g={shape:d,parentHeight:l.bounds.height(),oldParent:l,oldPosition:h,oldHeight:m,newParent:k,newPosition:e,newHeight:b};return g}});ORYX.Plugins.BPMN2_0=ORYX.Plugins.AbstractPlugin.extend(ORYX.Plugins.BPMN2_0)}();if(!ORYX.Plugins){ORYX.Plugins=new Object()}new function(){ORYX.Plugins.DMN1_2={construct:function(b){this.facade=b;this.facade.registerOnEvent(ORYX.CONFIG.EVENT_DRAGDOCKER_DOCKED,this.handleDockerDocked.bind(this));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_PROPWINDOW_PROP_CHANGED,this.handlePropertyChanged.bind(this));this.facade.registerOnEvent("layout.dmn1_2.decision_service",this.handleLayoutDecisionService.bind(this));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_SHAPEREMOVED,this.handleShapeRemove.bind(this));this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADED,this.afterLoad.bind(this));this.namespace=undefined},afterLoad:function(){this.facade.getCanvas().getChildNodes().each(function(b){if(b.getStencil().idWithoutNs()==="ExpandedDecisionService"){this.handleLayoutDecisionService({shape:b})}}.bind(this))},onSelectionChanged:function(b){var k=b.elements;if(k&&k.length===1){var e=this.getNamespace();var f=k[0];if(f.getStencil().idWithoutNs()==="ExpandedDecisionService"){if(f.getChildNodes().length===0){var h={type:e+"OutputDecisionsDecisionServiceSection",position:{x:0,y:0},namespace:f.getStencil().namespace(),parent:f};var g={type:e+"EncapsulatedDecisionsDecisionServiceSection",position:{x:0,y:0},namespace:f.getStencil().namespace(),parent:f};this.facade.createShape(h);this.facade.createShape(g);this.facade.getCanvas().update();this.facade.setSelection([f])}}}if(k.any(function(m){return m instanceof ORYX.Core.Node&&m.getStencil().id().endsWith("DecisionServiceSection")})){var c=k.findAll(function(m){return m instanceof ORYX.Core.Node&&m.getStencil().id().endsWith("DecisionServiceSection")});var l=[];var d=[];c.each(function(m){l.push(this.getParentDecisionService(m))}.bind(this));l=l.uniq().findAll(function(m){var n=this.getLanes(m,true);if(n.all(function(o){return c.include(o)})){d=d.concat(n);return true}else{if(k.include(m)&&n.any(function(o){return c.include(o)})){d=d.concat(n);return true}else{return false}}}.bind(this));if(d.length>0&&l.length>0){k=k.without.apply(k,d);k=k.concat(l);this.facade.setSelection(k.uniq())}}},handleShapeRemove:function(e){var f=e.shape;var l=e.parent;if(f instanceof ORYX.Core.Node&&f.getStencil().id().endsWith("DecisionServiceSection")&&this.facade.isExecutingCommands()){var g=this.getParentDecisionService(l);if(g&&g.parent){var h=function(m){return !m.getChildNodes().any(function(n){return n.getStencil().id().endsWith("DecisionServiceSection")})};var c=h(f);var k=l.getChildNodes().any(function(m){return m.getStencil().id().endsWith("DecisionServiceSection")});if(c&&k){var d=new a(f,l,g,this);this.facade.executeCommands([d])}else{if(!c&&!this.facade.getSelection().any(function(m){return m instanceof ORYX.Core.Node&&m.getStencil().id().endsWith("DecisionServiceSection")&&m.isParent(f)&&h(m)})){var b=ORYX.Core.Command.extend({construct:function(m,n){this.children=m.getChildNodes(true);this.facade=n},execute:function(){this.children.each(function(m){m.bounds.moveBy(0,0)})},rollback:function(){this.children.each(function(m){m.bounds.moveBy(0,0)})}});this.facade.executeCommands([new b(f,this.facade)])}else{if(c&&!k&&l==g){l.add(f)}}}}}},hashedSubProcesses:{},hashChildShapes:function(b){var c=b.getChildNodes();c.each(function(d){if(this.hashedSubProcesses[d.id]){this.hashedSubProcesses[d.id]=d.absoluteXY();this.hashedSubProcesses[d.id].width=d.bounds.width();this.hashedSubProcesses[d.id].height=d.bounds.height();this.hashChildShapes(d)}}.bind(this))},moveChildDockers:function(d,g){if(!g.x&&!g.y){return}var e=d.getChildNodes(true);var c=e.map(function(h){return[].concat(h.getIncomingShapes()).concat(h.getOutgoingShapes())}).flatten().uniq().map(function(h){return h.dockers.length>2?h.dockers.slice(1,h.dockers.length-1):[]}).flatten();var b=d.absoluteBounds();b.moveBy(-g.x,-g.y);var f={};c.each(function(m){if(m.isChanged){return}var k=Object.clone(g);if(!b.isIncluded(m.bounds.center())){var o=m.parent.dockers.indexOf(m);var s=m.parent.dockers.length;var q=m.parent.getSource();var r=m.parent.getTarget();var l=e.include(q)&&e.include(r);if(!l){var n=o!==0?b.isIncluded(m.parent.dockers[o-1].bounds.center()):false;var p=o!==s-1?b.isIncluded(m.parent.dockers[o+1].bounds.center()):false;if(!n&&!p){return}var h=m.parent.dockers[n?o-1:o+1];if(Math.abs(-Math.abs(h.bounds.center().x-m.bounds.center().x))<2){k.y=0}else{if(Math.abs(-Math.abs(h.bounds.center().y-m.bounds.center().y))<2){k.x=0}else{return}}}}f[m.getId()]={docker:m,offset:k}});this.facade.executeCommands([new ORYX.Core.MoveDockersCommand(f)])},handleDockerDocked:function(d){var e=this.getNamespace();var f=d.parent;var c=d.target;if(f.getStencil().id()===e+"SequenceFlow"){var b=c.getStencil().groups().find(function(g){if(g=="Gateways"){return g}});if(!b&&(f.properties["oryx-conditiontype"]=="Expression")){f.setProperty("oryx-showdiamondmarker",true)}else{f.setProperty("oryx-showdiamondmarker",false)}this.facade.getCanvas().update()}},handlePropertyChanged:function(e){var d=this.getNamespace();var c=e.elements;var f=e.key;var b=e.value;var g=false;c.each(function(k){if((k.getStencil().id()===d+"SequenceFlow")&&(f==="oryx-conditiontype")){if(b!="Expression"){k.setProperty("oryx-showdiamondmarker",false)}else{var l=k.getIncomingShapes();if(!l){k.setProperty("oryx-showdiamondmarker",true)}var h=l.find(function(m){var n=m.getStencil().groups().find(function(o){if(o=="Gateways"){return o}});if(n){return n}});if(!h){k.setProperty("oryx-showdiamondmarker",true)}else{k.setProperty("oryx-showdiamondmarker",false)}}g=true}}.bind(this));if(g){this.facade.getCanvas().update()}},hashedPoolPositions:{},hashedLaneDepth:{},hashedBounds:{},hashedPositions:{},handleLayoutDecisionService:function(v){var o=v.shape;var H=this.facade.getSelection();var z=H.include(o)?o:H.first();z=z||o;this.currentPool=o;if(!(z.getStencil().id().endsWith("ExpandedDecisionService")||z.getStencil().id().endsWith("DecisionServiceSection"))){return}if(z!==o&&!z.isParent(o)&&!this.hashedBounds[o.id][z.id]){return}if(!this.hashedBounds[o.id]){this.hashedBounds[o.id]={}}var C=this.getLanes(o);if(C.length<=0){return}var B=this.getLanes(o,true),b;var g=B.clone();var k=new Hash();B.each(function(x){k.set(x.id,x.bounds.upperLeft())});if(C.length===1&&this.getLanes(C.first()).length<=0){var A=C.first().properties.get("oryx-name").trim().length>0;C.first().setProperty("oryx-showcaption",A);var d=C.first().node.getElementsByTagName("rect");d[0].setAttributeNS(null,"display","none")}else{B.invoke("setProperty","oryx-showcaption",true);B.each(function(x){var y=x.node.getElementsByTagName("rect");y[0].removeAttributeNS(null,"display")})}var u=[];var n=[];var w=-1;while(++w 0){z=n.first()}var E=$H(this.hashedBounds[o.id]).keys();var w=-1;while(++w 0||n.length>0){if(n.length===1&&this.getLanes(n[0].parent).length===1){q=this.adjustHeight(C,n[0].parent)}else{q=this.updateHeight(o)}s=this.adjustWidth(C,o.bounds.width());o.update()}else{if(o==z){if(H.length===1&&this.isResized(o,this.hashedPoolPositions[o.id])){var D=this.hashedPoolPositions[o.id].upperLeft();var f=o.bounds.upperLeft();var G=0;if(this.shouldScale(o)){var c=this.hashedPoolPositions[o.id];G=c.height()/o.bounds.height()}this.adjustLanes(o,B,D.x-f.x,D.y-f.y,G)}q=this.adjustHeight(C,undefined,o.bounds.height());s=this.adjustWidth(C,o.bounds.width())}else{if(H.length===1&&this.isResized(z,this.hashedBounds[o.id][z.id])){var D=this.hashedBounds[o.id][z.id].upperLeft();var f=z.absoluteXY();m=D.x-f.x;l=D.y-f.y;if(m||l){g=g.without(z);this.adjustLanes(o,this.getAllExcludedLanes(o,z),m,0)}var h=this.getLanes(z,true);if(h.length>0){if(this.shouldScale(z)){var c=this.hashedBounds[o.id][z.id];var G=c.height()/z.bounds.height();this.adjustLanes(o,h,m,l,G)}else{this.adjustLanes(o,h,m,l,0)}}}var F=B.map(function(x){return{shape:x,bounds:x.bounds.clone()}});q=this.adjustHeight(C,z);this.checkForChanges(B,F);s=this.adjustWidth(C,z.bounds.width()+(this.getDepth(z,o)))}}this.setDimensions(o,s,q,m,l);if(this.facade.isExecutingCommands()&&(u.length===0||n.length!==0)){this.updateDockers(g,o);var t=this.hashedPositions[o.id];if(t&&t.keys().any(function(y,x){return(B[x]||{}).id!==y})){var r=ORYX.Core.Command.extend({construct:function(J,I,y,K,x){this.originPosition=Object.clone(J);this.newPosition=Object.clone(I);this.lanes=y;this.plugin=K;this.pool=x},execute:function(){if(!this.executed){this.executed=true;this.lanes.each(function(x){if(this.newPosition[x.id]){x.bounds.moveTo(this.newPosition[x.id])}}.bind(this));this.plugin.hashedPositions[this.pool]=Object.clone(this.newPosition)}},rollback:function(){this.lanes.each(function(x){if(this.originPosition[x.id]){x.bounds.moveTo(this.originPosition[x.id])}}.bind(this));this.plugin.hashedPositions[this.pool]=Object.clone(this.originPosition)}});var p=new Hash();B.each(function(x){p.set(x.id,x.bounds.upperLeft())});var e=new r(k,p,B,this,o.id);this.facade.executeCommands([e])}}this.hashedBounds[o.id]={};this.hashedPositions[o.id]=k;var w=-1;while(++w 1||c.any(function(d){return this.shouldScale(d)}.bind(this))},checkForChanges:function(b,c){if(this.facade.isExecutingCommands()&&c.any(function(e){return e.shape.bounds.toString()!==e.bounds.toString()})){var d=ORYX.Core.Command.extend({construct:function(e){this.oldState=e;this.newState=e.map(function(f){return{shape:f.shape,bounds:f.bounds.clone()}})},execute:function(){if(this.executed){this.applyState(this.newState)}this.executed=true},rollback:function(){this.applyState(this.oldState)},applyState:function(e){e.each(function(f){f.shape.bounds.set(f.bounds.upperLeft(),f.bounds.lowerRight())})}});this.facade.executeCommands([new d(c)])}},isResized:function(b,d){if(!d||!b){return false}var c=d;return Math.round(c.width()-b.bounds.width())!==0||Math.round(c.height()-b.bounds.height())!==0},adjustLanes:function(d,c,b,f,e){e=e||0;c.each(function(g){g.getChildNodes().each(function(k){if(!k.getStencil().id().endsWith("DecisionServiceSection")){var h=e?k.bounds.center().y-(k.bounds.center().y/e):-f;k.bounds.moveBy((b||0),-h);if(e&&k.getStencil().id().endsWith("DecisionServiceSection")){this.moveChildDockers(k,{x:(0),y:-h})}}}.bind(this));this.hashedBounds[d.id][g.id].moveBy(-(b||0),!e?-f:0);if(e){g.isScaled=true}}.bind(this))},getAllExcludedLanes:function(d,b){var c=[];d.getChildNodes().each(function(e){if((!b||e!==b)&&e.getStencil().id().endsWith("DecisionServiceSection")){c.push(e);c=c.concat(this.getAllExcludedLanes(e,b))}}.bind(this));return c},forceToUpdateLane:function(b){if(b.bounds.height()!==b._svgShapes[0].height){b.isChanged=true;b.isResized=true;b._update()}},getDepth:function(d,c){var b=0;while(d&&d.parent&&d!==c){d=d.parent;++b}return b},updateDepth:function(c,b,d){xOffset=0;c.getChildNodes().each(function(e){e.bounds.moveBy(xOffset,0);[].concat(children[j].getIncomingShapes()).concat(children[j].getOutgoingShapes())})},setDimensions:function(e,f,c,b,g){var d=e.getStencil().id().endsWith("DecisionServiceSection");e.bounds.set(d?0:(e.bounds.a.x-(b||0)),d?e.bounds.a.y:(e.bounds.a.y-(g||0)),f?e.bounds.a.x+f-(d?0:(b||0)):e.bounds.b.x,c?e.bounds.a.y+c-(d?0:(g||0)):e.bounds.b.y)},setSectionPosition:function(b,c){b.bounds.moveTo(0,c)},adjustWidth:function(b,c){(b||[]).each(function(d){this.setDimensions(d,c);this.adjustWidth(this.getLanes(d),c)}.bind(this));return c},adjustHeight:function(e,g,c){var h=0;if(!g&&c){var f=-1;while(++f p?1:0)}var t=v p&&s>m;var k=v
=m&&l
=p&&s p&&s<=m&&l>x;var f=v<=p&&s>m&&o>y;return(t||k||n?-1:(q||r||f?1:0))}.bind(this));return c},getNamespace:function(){if(!this.namespace){var b=this.facade.getStencilSets();if(b.keys()){this.namespace=b.keys()[0]}else{return undefined}}return this.namespace}};var a=ORYX.Core.Command.extend({construct:function(b,d,c,e){this.facade=e.facade;this.plugin=e;this.shape=b;this.changes;this.pool=c;this.parent=d;this.shapeChildren=[];this.shape.getChildShapes().each(function(f){this.shapeChildren.push({shape:f,bounds:{a:{x:f.bounds.a.x,y:f.bounds.a.y},b:{x:f.bounds.b.x,y:f.bounds.b.y}}})}.bind(this));this.shapeUpperLeft=this.shape.bounds.upperLeft();this.parentHeight=this.parent.bounds.height()},getLeafLanes:function(b){var c=this.plugin.getLanes(b).map(function(d){return this.getLeafLanes(d)}.bind(this)).flatten();return c.length>0?c:[b]},findNewLane:function(){var b=this.plugin.getLanes(this.parent);var c=this.getLeafLanes(this.parent);this.lane=c.find(function(d){return d.bounds.upperLeft().y>=this.shapeUpperLeft.y}.bind(this))||c.last();this.laneUpperLeft=this.lane.bounds.upperLeft()},execute:function(){if(this.changes){this.executeAgain();return}if(!this.lane){this.findNewLane()}if(this.lane){var f=this.laneUpperLeft;var d=this.shapeUpperLeft;var c=this.plugin.getDepth(this.lane,this.parent)-1;this.changes=$H({});if(f.y>=d.y){this.lane.getChildShapes().each(function(g){if(!this.changes[g.getId()]){this.changes[g.getId()]=this.computeChanges(g,this.lane,this.lane,this.shape.bounds.height())}g.bounds.moveBy(0,this.shape.bounds.height())}.bind(this));this.plugin.hashChildShapes(this.lane);this.shapeChildren.each(function(g){g.shape.bounds.set(g.bounds);g.shape.bounds.moveBy((d.x)-(c*1),0);if(!this.changes[g.shape.getId()]){this.changes[g.shape.getId()]=this.computeChanges(g.shape,this.shape,this.lane,0)}this.lane.add(g.shape)}.bind(this));this.lane.bounds.moveBy(0,d.y-f.y)}else{if(d.y>f.y){this.shapeChildren.each(function(g){g.shape.bounds.set(g.bounds);g.shape.bounds.moveBy((d.x)-(c*1),this.lane.bounds.height());if(!this.changes[g.shape.getId()]){this.changes[g.shape.getId()]=this.computeChanges(g.shape,this.shape,this.lane,0)}this.lane.add(g.shape)}.bind(this))}}}var e=this.lane.bounds.height();var b=this.lane.length===1?this.parentHeight:this.lane.bounds.height()+this.shape.bounds.height();this.setHeight(b,e,this.parent,this.parentHeight,true);this.plugin.getLanes(this.parent).each(function(g){if(!this.changes[g.getId()]&&g!==this.lane&&g!==this.shape){this.changes[g.getId()]=this.computeChanges(g,this.parent,this.parent,0)}}.bind(this));this.update()},setHeight:function(b,f,e,d,c){this.plugin.setDimensions(this.lane,this.lane.bounds.width(),b);this.plugin.hashedBounds[this.pool.id][this.lane.id]=this.lane.absoluteBounds();this.plugin.adjustHeight(this.plugin.getLanes(e),this.lane);if(c===true){this.changes[this.shape.getId()]=this.computeChanges(this.shape,e,e,0,f,b)}this.plugin.setDimensions(e,e.bounds.width(),d);if(e!==this.pool){this.plugin.setDimensions(this.pool,this.pool.bounds.width(),this.pool.bounds.height()+(b-f))}},update:function(){this.plugin.hashedBounds[this.pool.id]["REMOVED"]=true},rollback:function(){var c=this.laneUpperLeft;var b=this.shapeUpperLeft;this.changes.each(function(h){var g=h.value.oldParent;var e=h.value.shape;var f=h.value.parentHeight;var k=h.value.oldHeight;var d=h.value.newHeight;if(e.getStencil().id().endsWith("DecisionServiceSection")){e.bounds.moveTo(h.value.oldPosition)}if(k){this.setHeight(k,d,g,g.bounds.height()+(k-d));if(c.y>=b.y){this.lane.bounds.moveBy(0,this.shape.bounds.height()-1)}}else{g.add(e);e.bounds.moveTo(h.value.oldPosition)}}.bind(this))},executeAgain:function(){this.changes.each(function(f){var d=f.value.newParent;var c=f.value.shape;var b=f.value.newHeight;var h=f.value.oldHeight;if(b){var g=this.laneUpperLeft.y;var e=this.shapeUpperLeft.y;if(g>=e){this.lane.bounds.moveBy(0,e-g)}this.setHeight(b,h,d,d.bounds.height()+(b-h))}else{d.add(c);c.bounds.moveTo(f.value.newPosition)}}.bind(this));this.update()},computeChanges:function(d,l,k,c,m,b){l=this.changes[d.getId()]?this.changes[d.getId()].oldParent:l;var h=this.changes[d.getId()]?this.changes[d.getId()].oldPosition:d.bounds.upperLeft();var f=d.bounds.upperLeft();var e={x:f.x,y:f.y+c};var g={shape:d,parentHeight:l.bounds.height(),oldParent:l,oldPosition:h,oldHeight:m,newParent:k,newPosition:e,newHeight:b};return g}});ORYX.Plugins.DMN1_2=ORYX.Plugins.AbstractPlugin.extend(ORYX.Plugins.DMN1_2)}(); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editormanager.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editormanager.js deleted file mode 100644 index a8caf7a3..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/editormanager.js +++ /dev/null @@ -1,326 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Created by Pardo David on 3/01/2017. - * For this service to work the user must call bootEditor method - */ -angular.module("flowableModeler").factory("editorManager", ["$http", function ($http) { - var editorManager = Class.create({ - initialize: function () { - this.treeFilteredElements = ["SubProcess", "CollapsedSubProcess"]; - this.canvasTracker = new Hash(); - this.structualIcons = { - "SubProcess": "expanded.subprocess.png", - "CollapsedSubProcess": "subprocess.png", - "EventSubProcess": "event.subprocess.png" - }; - - this.current = this.modelId; - this.loading = true; - }, - getModelId: function () { - return this.modelId; - }, - setModelId: function (modelId){ - this.modelId = modelId; - }, - getCurrentModelId: function () { - return this.current; - }, - setStencilData: function(stencilData){ - //we don't want a references! - this.stencilData = jQuery.extend(true, {},stencilData); - }, - getStencilData: function () { - return this.stencilData; - }, - getSelection: function () { - return this.editor.selection; - }, - getSubSelection: function () { - return this.editor._subSelection; - }, - handleEvents: function (events) { - this.editor.handleEvents(events); - }, - setSelection: function (selection) { - this.editor.setSelection(selection); - }, - registerOnEvent: function (event, callback) { - this.editor.registerOnEvent(event, callback); - }, - getChildShapeByResourceId: function (resourceId) { - return this.editor.getCanvas().getChildShapeByResourceId(resourceId); - }, - getJSON: function () { - return this.editor.getJSON(); - }, - getStencilSets: function () { - return this.editor.getStencilSets(); - }, - getEditor: function () { - return this.editor; //TODO: find out if we can avoid exposing the editor object to angular. - }, - executeCommands: function (commands) { - this.editor.executeCommands(commands); - }, - getCanvas: function () { - return this.editor.getCanvas(); - }, - getRules: function () { - return this.editor.getRules(); - }, - eventCoordinates: function (coordinates) { - return this.editor.eventCoordinates(coordinates); - }, - eventCoordinatesXY: function (x, y) { - return this.editor.eventCoordinatesXY(x, y); - }, - updateSelection: function () { - this.editor.updateSelection(); - }, - /** - * @returns the modeldata as received from the server. This does not represent the current editor data. - */ - getBaseModelData: function () { - return this.modelData; - }, - edit: function (resourceId) { - //Save the current canvas in the canvastracker if it is the root process. - this.syncCanvasTracker(); - - this.loading = true; - - var shapes = this.getCanvas().getChildren(); - shapes.each(function (shape) { - this.editor.deleteShape(shape); - }.bind(this)); - - shapes = this.canvasTracker.get(resourceId); - if(!shapes){ - shapes = JSON.stringify([]); - } - - this.editor.loadSerialized({ - childShapes: shapes - }); - - this.getCanvas().update(); - - this.current = resourceId; - - this.loading = false; - FLOWABLE.eventBus.dispatch("EDITORMANAGER-EDIT-ACTION", {}); - FLOWABLE.eventBus.dispatch(FLOWABLE.eventBus.EVENT_TYPE_UNDO_REDO_RESET, {}); - }, - getTree: function () { - //build a tree of all subprocesses and there children. - var result = new Hash(); - var parent = this.getModel(); - result.set("name", parent.properties["name"] || "No name provided"); - result.set("id", this.modelId); - result.set("type", "root"); - result.set("current", this.current === this.modelId) - var childShapes = parent.childShapes; - var children = this._buildTreeChildren(childShapes); - result.set("children", children); - return result.toObject(); - }, - _buildTreeChildren: function (childShapes) { - var children = []; - for (var i = 0; i < childShapes.length; i++) { - var childShape = childShapes[i]; - var stencilId = childShape.stencil.id; - //we are currently only interested in the expanded subprocess and collapsed processes - if (stencilId && this.treeFilteredElements.indexOf(stencilId) > -1) { - var child = new Hash(); - child.set("name", childShape.properties.name || "No name provided"); - child.set("id", childShape.resourceId); - child.set("type", stencilId); - child.set("current", childShape.resourceId === this.current); - - //check if childshapes - - if (stencilId === "CollapsedSubProcess") { - //the save function stores the real object as a childshape - //it is possible that there is no child element because the user did not open the collapsed subprocess. - if (childShape.childShapes.length === 0) { - child.set("children", []); - } else { - child.set("children", this._buildTreeChildren(childShape.childShapes)); - } - child.set("editable", true); - } else { - child.set("children", this._buildTreeChildren(childShape.childShapes)); - child.set("editable", false); - } - child.set("icon", this.structualIcons[stencilId]); - children.push(child.toObject()); - } - } - return children; - }, - syncCanvasTracker: function () { - var shapes = this.getCanvas().getChildren(); - var jsonShapes = []; - shapes.each(function (shape) { - //toJson is an summary object but its not a json string.!!!!! - jsonShapes.push(shape.toJSON()); - }); - this.canvasTracker.set(this.current, JSON.stringify(jsonShapes)); - }, - getModel: function () { - this.syncCanvasTracker(); - - var modelMetaData = this.getBaseModelData(); - - var stencilId = undefined; - var stencilSetNamespace = undefined; - var stencilSetUrl = undefined; - if (modelMetaData.model.stencilset.namespace == 'http://b3mn.org/stencilset/cmmn1.1#') { - stencilId = 'CMMNDiagram'; - stencilSetNamespace = 'http://b3mn.org/stencilset/cmmn1.1#'; - stencilSetUrl = '../editor/stencilsets/cmmn1.1/cmmn1.1.json'; - } else if (modelMetaData.model.stencilset.namespace == 'http://b3mn.org/stencilset/dmn1.2#') { - stencilId = 'DMNDiagram'; - stencilSetNamespace = 'http://b3mn.org/stencilset/dmn1.2#'; - stencilSetUrl = '../editor/stencilsets/dmn1.1/dmn1.2.json'; - } else { - stencilId = 'BPMNDiagram'; - stencilSetNamespace = 'http://b3mn.org/stencilset/bpmn2.0#'; - stencilSetUrl = '../editor/stencilsets/bpmn2.0/bpmn2.0.json'; - } - - //this is an object. - var editorConfig = this.editor.getJSON(); - var model = { - modelId: this.modelId, - bounds: editorConfig.bounds, - properties: editorConfig.properties, - childShapes: JSON.parse(this.canvasTracker.get(this.modelId)), - stencil: { - id: stencilId, - }, - stencilset: { - namespace: stencilSetNamespace, - url: stencilSetUrl - } - }; - - this._mergeCanvasToChild(model); - - return model; - }, - setModelData: function(response){ - this.modelData = response.data; - }, - bootEditor: function () { - //TODO: populate the canvas with correct json sections. - //resetting the state - this.canvasTracker = new Hash(); - var config = jQuery.extend(true, {}, this.modelData); //avoid a reference to the original object. - if(!config.model.childShapes){ - config.model.childShapes = []; - } - - this.findAndRegisterCanvas(config.model.childShapes); //this will remove any childshapes of a collapseable subprocess. - this.canvasTracker.set(config.modelId, JSON.stringify(config.model.childShapes)); //this will be overwritten almost instantly. - - this.editor = new ORYX.Editor(config); - this.current = this.editor.id; - this.loading = false; - - FLOWABLE.eventBus.editor = this.editor; - FLOWABLE.eventBus.dispatch("ORYX-EDITOR-LOADED", {}); - FLOWABLE.eventBus.dispatch(FLOWABLE.eventBus.EVENT_TYPE_EDITOR_BOOTED, {}); - }, - findAndRegisterCanvas: function (childShapes) { - for (var i = 0; i < childShapes.length; i++) { - var childShape = childShapes[i]; - if (childShape.stencil.id === "CollapsedSubProcess") { - if (childShape.childShapes.length > 0) { - //the canvastracker will auto correct itself with a new canvasmodel see this.edit()... - this.findAndRegisterCanvas(childShape.childShapes); - //a canvas can't be nested as a child because the editor would crash on redundant information. - this.canvasTracker.set(childShape.resourceId, JSON.stringify(childShape.childShapes)); - //reference to config will clear the value. - childShape.childShapes = []; - } else { - this.canvasTracker.set(childShape.resourceId, '[]'); - } - } - } - }, - _mergeCanvasToChild: function (parent) { - for (var i = 0; i < parent.childShapes.length; i++) { - var childShape = parent.childShapes[i] - if(childShape.stencil.id === "CollapsedSubProcess"){ - - var elements = this.canvasTracker.get(childShape.resourceId); - if(elements){ - elements = JSON.parse(elements); - }else{ - elements = []; - } - childShape.childShapes = elements; - this._mergeCanvasToChild(childShape); - }else if(childShape.stencil.id === "SubProcess"){ - this._mergeCanvasToChild(childShape); - }else{ - //do nothing? - } - } - }, - dispatchOryxEvent: function (event) { - FLOWABLE.eventBus.dispatchOryxEvent(event); - }, - isLoading: function(){ - return this.loading; - }, - navigateTo: function(resourceId){ - //TODO: this could be improved by check if the resourceId is not equal to the current tracker... - this.syncCanvasTracker(); - var found = false; - this.canvasTracker.each(function(pair){ - var key = pair.key; - var children = JSON.parse(pair.value); - var targetable = this._findTarget(children, resourceId); - if (!found && targetable){ - this.edit(key); - var flowableShape = this.getCanvas().getChildShapeByResourceId(targetable); - this.setSelection([flowableShape],[],true); - found = true; - } - },this); - }, - _findTarget: function(children,resourceId){ - for(var i =0; i < children.length; i++){ - var child = children[i]; - if(child.resourceId === resourceId){ - return child.resourceId; - }else if(child.properties && child.properties["overrideid"] === resourceId){ - return child.resourceId; - }else{ - var result = this._findTarget(child.childShapes,resourceId); - if(result){ - return result; - } - } - } - return false; - } - }); - - return new editorManager(); -}]); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/eventbus.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/eventbus.js deleted file mode 100644 index e62c7ffd..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/eventbus.js +++ /dev/null @@ -1,137 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -var FLOWABLE = FLOWABLE || {}; - -/** Inspired by https://github.com/krasimir/EventBus/blob/master/src/EventBus.js */ -FLOWABLE.eventBus = { - - /** Event fired when the editor is loaded and ready */ - EVENT_TYPE_EDITOR_READY: 'event-type-editor-ready', - - EVENT_TYPE_EDITOR_BOOTED: 'event-type-editor-booted', - - /** Event fired when a selection is made on the canvas. */ - EVENT_TYPE_SELECTION_CHANGE: 'event-type-selection-change', - - /** Event fired when a toolbar button has been clicked. */ - EVENT_TYPE_TOOLBAR_BUTTON_CLICKED: 'event-type-toolbar-button-clicked', - - /** Event fired when a stencil item is dropped on the canvas. */ - EVENT_TYPE_ITEM_DROPPED: 'event-type-item-dropped', - - /** Event fired when a property value is changed. */ - EVENT_TYPE_PROPERTY_VALUE_CHANGED: 'event-type-property-value-changed', - - /** Event fired on double click in canvas. */ - EVENT_TYPE_DOUBLE_CLICK: 'event-type-double-click', - - /** Event fired on a mouse out */ - EVENT_TYPE_MOUSE_OUT: 'event-type-mouse-out', - - /** Event fired on a mouse over */ - EVENT_TYPE_MOUSE_OVER: 'event-type-mouse-over', - - /** Event fired when a model is saved. */ - EVENT_TYPE_MODEL_SAVED: 'event-type-model-saved', - - /** Event fired when the quick menu buttons should be hidden. */ - EVENT_TYPE_HIDE_SHAPE_BUTTONS: 'event-type-hide-shape-buttons', - - /** Event fired when the validation popup should be shown. */ - EVENT_TYPE_SHOW_VALIDATION_POPUP: 'event-type-show-validation-popup', - - /** Event fired when a different process must be loaded. */ - EVENT_TYPE_NAVIGATE_TO_PROCESS: 'event-type-navigate-to-process', - - EVENT_TYPE_UNDO_REDO_RESET : 'event-type-undo-redo-reset', - - /** A mapping for storing the listeners*/ - listeners: {}, - - /** The Oryx editor, which is stored locally to send events to */ - editor: null, - - /** - * Add an event listener to the event bus, listening to the event with the provided type. - * Type and callback are mandatory parameters. - * - * Provide scope parameter if it is important that the callback is executed - * within a specific scope. - */ - addListener: function (type, callback, scope) { - - // Add to the listeners map - if (typeof this.listeners[type] !== "undefined") { - this.listeners[type].push({scope: scope, callback: callback}); - } else { - this.listeners[type] = [ - {scope: scope, callback: callback} - ]; - } - }, - - /** - * Removes the provided event listener. - */ - removeListener: function (type, callback, scope) { - if (typeof this.listeners[type] != "undefined") { - var numOfCallbacks = this.listeners[type].length; - var newArray = []; - for (var i = 0; i < numOfCallbacks; i++) { - var listener = this.listeners[type][i]; - if (listener.scope === scope && listener.callback === callback) { - // Do nothing, this is the listener and doesn't need to survive - } else { - newArray.push(listener); - } - } - this.listeners[type] = newArray; - } - }, - - hasListener:function(type, callback, scope) { - if(typeof this.listeners[type] != "undefined") { - var numOfCallbacks = this.listeners[type].length; - if(callback === undefined && scope === undefined){ - return numOfCallbacks > 0; - } - for(var i=0; i - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/activiti-admin-webfont.ttf b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/activiti-admin-webfont.ttf deleted file mode 100644 index 9666150c..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/activiti-admin-webfont.ttf and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/activiti-admin-webfont.woff b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/activiti-admin-webfont.woff deleted file mode 100644 index 2482a198..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/activiti-admin-webfont.woff and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.eot b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.eot deleted file mode 100644 index 33b2bb80..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.svg b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.svg deleted file mode 100644 index 1ee89d43..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,565 +0,0 @@ - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.ttf b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.ttf deleted file mode 100644 index ed9372f8..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.woff b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.woff deleted file mode 100644 index 8b280b98..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.woff2 b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 3311d585..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/glyphicons-halflings-regular.eot b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/glyphicons-halflings-regular.eot deleted file mode 100644 index 423bd5d3..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/glyphicons-halflings-regular.eot and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/glyphicons-halflings-regular.svg b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/glyphicons-halflings-regular.svg deleted file mode 100644 index 44694887..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/glyphicons-halflings-regular.svg +++ /dev/null @@ -1,229 +0,0 @@ - - - \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/glyphicons-halflings-regular.ttf b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index a498ef4e..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/glyphicons-halflings-regular.ttf and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/glyphicons-halflings-regular.woff b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/glyphicons-halflings-regular.woff deleted file mode 100644 index d83c539b..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/fonts/glyphicons-halflings-regular.woff and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/header-controller.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/header-controller.js deleted file mode 100644 index 605ac2b0..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/header-controller.js +++ /dev/null @@ -1,25 +0,0 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -'use strict'; - -angular.module('flowableModeler') - .controller('HeaderController', ['$rootScope', '$scope', '$http', '$timeout', function ($rootScope, $scope, $http, $timeout) { - - // Add reference to global header-config - $scope.headerConfig = FLOWABLE.HEADER_CONFIG; - - // TODO: generate setting-menu items - - // TODO: generate user-menu items - -}]); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/bpmn-error.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/bpmn-error.png deleted file mode 100644 index 529f76cb..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/bpmn-error.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/bpmn-warning.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/bpmn-warning.png deleted file mode 100644 index f949d19c..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/bpmn-warning.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/datadefinition.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/datadefinition.png deleted file mode 100644 index ef15706d..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/datadefinition.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/delete.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/delete.png deleted file mode 100644 index 21a460a2..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/delete.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/loading.gif b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/loading.gif deleted file mode 100644 index 7019077d..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/loading.gif and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/nw-handle-dark.gif b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/nw-handle-dark.gif deleted file mode 100644 index 6e49d696..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/nw-handle-dark.gif and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/pencil.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/pencil.png deleted file mode 100644 index 0bfecd50..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/pencil.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/report_edit.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/report_edit.png deleted file mode 100644 index c61a6d84..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/report_edit.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/se-handle-dark.gif b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/se-handle-dark.gif deleted file mode 100644 index c4c10878..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/se-handle-dark.gif and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/shapemenu_highlight.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/shapemenu_highlight.png deleted file mode 100644 index 5d1a4401..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/shapemenu_highlight.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/wrench.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/wrench.png deleted file mode 100644 index 179c9472..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/images/wrench.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/add-bendpoint-hover.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/add-bendpoint-hover.png deleted file mode 100644 index b10305aa..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/add-bendpoint-hover.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/add-bendpoint.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/add-bendpoint.png deleted file mode 100644 index 82a53b9d..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/add-bendpoint.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/grid.gif b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/grid.gif deleted file mode 100644 index 34974bcf..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/grid.gif and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-add-bendpoint-selected.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-add-bendpoint-selected.png deleted file mode 100644 index 77e22726..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-add-bendpoint-selected.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-add-bendpoint.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-add-bendpoint.png deleted file mode 100644 index df8b554b..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-add-bendpoint.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-align-horizontal-selected.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-align-horizontal-selected.png deleted file mode 100644 index 3b6b5b7c..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-align-horizontal-selected.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-align-horizontal.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-align-horizontal.png deleted file mode 100644 index d32e8147..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-align-horizontal.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-align-vertical-selected.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-align-vertical-selected.png deleted file mode 100644 index eab4bff2..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-align-vertical-selected.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-align-vertical.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-align-vertical.png deleted file mode 100644 index e1b1115b..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-align-vertical.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-remove-bendpoint-selected.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-remove-bendpoint-selected.png deleted file mode 100644 index a17baa9c..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-remove-bendpoint-selected.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-remove-bendpoint.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-remove-bendpoint.png deleted file mode 100644 index fc907e5a..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-remove-bendpoint.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-same-size-selected.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-same-size-selected.png deleted file mode 100644 index f4c6f0a6..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-same-size-selected.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-same-size.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-same-size.png deleted file mode 100644 index e610a2ad..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-same-size.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-zoom-actual-selected.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-zoom-actual-selected.png deleted file mode 100644 index 832f83dc..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-zoom-actual-selected.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-zoom-actual.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-zoom-actual.png deleted file mode 100644 index f6d3df3d..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-zoom-actual.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-zoom-fit-selected.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-zoom-fit-selected.png deleted file mode 100644 index 9308e2c5..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-zoom-fit-selected.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-zoom-fit.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-zoom-fit.png deleted file mode 100644 index 05c392e8..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/icon-zoom-fit.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/kis_logo.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/kis_logo.png deleted file mode 100644 index 3171fe49..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/kis_logo.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/remove-bendpoint-hover.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/remove-bendpoint-hover.png deleted file mode 100644 index f739a3fb..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/remove-bendpoint-hover.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/remove-bendpoint.png b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/remove-bendpoint.png deleted file mode 100644 index 2f3f3792..00000000 Binary files a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/img-kis/remove-bendpoint.png and /dev/null differ diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/jquery.autogrow-textarea.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/jquery.autogrow-textarea.js deleted file mode 100644 index 2ae9cc34..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/jquery.autogrow-textarea.js +++ /dev/null @@ -1,61 +0,0 @@ -(function($) -{ - /** - * Auto-growing textareas; technique ripped from Facebook - * - * http://github.com/jaz303/jquery-grab-bag/tree/master/javascripts/jquery.autogrow-textarea.js - */ - $.fn.autogrow = function(options) - { - return this.filter('textarea').each(function() - { - var self = this; - var $self = $(self); - var minHeight = $self.height(); - var noFlickerPad = $self.hasClass('autogrow-short') ? 0 : parseInt($self.css('lineHeight')) || 0; - - var shadow = $('').css({ - position: 'absolute', - top: -10000, - left: -10000, - width: $self.width(), - fontSize: $self.css('fontSize'), - fontFamily: $self.css('fontFamily'), - fontWeight: $self.css('fontWeight'), - lineHeight: $self.css('lineHeight'), - resize: 'none', - 'word-wrap': 'break-word' - }).appendTo(document.body); - - var update = function(event) - { - var times = function(string, number) - { - for (var i=0, r=''; i /g, '>') - .replace(/&/g, '&') - .replace(/\n$/, '
') - .replace(/\n/g, '
') - .replace(/ {2,}/g, function(space){ return times(' ', space.length - 1) + ' ' }); - - // Did enter get pressed? Resize in this keydown event so that the flicker doesn't occur. - if (event && event.data && event.data.event === 'keydown' && event.keyCode === 13) { - val += '
'; - } - - shadow.css('width', $self.width()); - shadow.html(val + (noFlickerPad === 0 ? '...' : '')); // Append '...' to resize pre-emptively. - $self.height(Math.max(shadow.height() + noFlickerPad, minHeight)); - } - - $self.change(update).keyup(update).keydown({event:'keydown'},update); - $(window).resize(update); - - update(); - }); - }; -})(jQuery); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/mousetrap/1.6.0/mousetrap-record.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/mousetrap/1.6.0/mousetrap-record.js deleted file mode 100644 index 856b568c..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/mousetrap/1.6.0/mousetrap-record.js +++ /dev/null @@ -1,205 +0,0 @@ -/** - * This extension allows you to record a sequence using Mousetrap. - * - * @author Dan Tao- */ -(function(Mousetrap) { - /** - * the sequence currently being recorded - * - * @type {Array} - */ - var _recordedSequence = [], - - /** - * a callback to invoke after recording a sequence - * - * @type {Function|null} - */ - _recordedSequenceCallback = null, - - /** - * a list of all of the keys currently held down - * - * @type {Array} - */ - _currentRecordedKeys = [], - - /** - * temporary state where we remember if we've already captured a - * character key in the current combo - * - * @type {boolean} - */ - _recordedCharacterKey = false, - - /** - * a handle for the timer of the current recording - * - * @type {null|number} - */ - _recordTimer = null, - - /** - * the original handleKey method to override when Mousetrap.record() is - * called - * - * @type {Function} - */ - _origHandleKey = Mousetrap.prototype.handleKey; - - /** - * handles a character key event - * - * @param {string} character - * @param {Array} modifiers - * @param {Event} e - * @returns void - */ - function _handleKey(character, modifiers, e) { - var self = this; - - if (!self.recording) { - _origHandleKey.apply(self, arguments); - return; - } - - // remember this character if we're currently recording a sequence - if (e.type == 'keydown') { - if (character.length === 1 && _recordedCharacterKey) { - _recordCurrentCombo(); - } - - for (i = 0; i < modifiers.length; ++i) { - _recordKey(modifiers[i]); - } - _recordKey(character); - - // once a key is released, all keys that were held down at the time - // count as a keypress - } else if (e.type == 'keyup' && _currentRecordedKeys.length > 0) { - _recordCurrentCombo(); - } - } - - /** - * marks a character key as held down while recording a sequence - * - * @param {string} key - * @returns void - */ - function _recordKey(key) { - var i; - - // one-off implementation of Array.indexOf, since IE6-9 don't support it - for (i = 0; i < _currentRecordedKeys.length; ++i) { - if (_currentRecordedKeys[i] === key) { - return; - } - } - - _currentRecordedKeys.push(key); - - if (key.length === 1) { - _recordedCharacterKey = true; - } - } - - /** - * marks whatever key combination that's been recorded so far as finished - * and gets ready for the next combo - * - * @returns void - */ - function _recordCurrentCombo() { - _recordedSequence.push(_currentRecordedKeys); - _currentRecordedKeys = []; - _recordedCharacterKey = false; - _restartRecordTimer(); - } - - /** - * ensures each combo in a sequence is in a predictable order and formats - * key combos to be '+'-delimited - * - * modifies the sequence in-place - * - * @param {Array} sequence - * @returns void - */ - function _normalizeSequence(sequence) { - var i; - - for (i = 0; i < sequence.length; ++i) { - sequence[i].sort(function(x, y) { - // modifier keys always come first, in alphabetical order - if (x.length > 1 && y.length === 1) { - return -1; - } else if (x.length === 1 && y.length > 1) { - return 1; - } - - // character keys come next (list should contain no duplicates, - // so no need for equality check) - return x > y ? 1 : -1; - }); - - sequence[i] = sequence[i].join('+'); - } - } - - /** - * finishes the current recording, passes the recorded sequence to the stored - * callback, and sets Mousetrap.handleKey back to its original function - * - * @returns void - */ - function _finishRecording() { - if (_recordedSequenceCallback) { - _normalizeSequence(_recordedSequence); - _recordedSequenceCallback(_recordedSequence); - } - - // reset all recorded state - _recordedSequence = []; - _recordedSequenceCallback = null; - _currentRecordedKeys = []; - } - - /** - * called to set a 1 second timeout on the current recording - * - * this is so after each key press in the sequence the recording will wait for - * 1 more second before executing the callback - * - * @returns void - */ - function _restartRecordTimer() { - clearTimeout(_recordTimer); - _recordTimer = setTimeout(_finishRecording, 1000); - } - - /** - * records the next sequence and passes it to a callback once it's - * completed - * - * @param {Function} callback - * @returns void - */ - Mousetrap.prototype.record = function(callback) { - var self = this; - self.recording = true; - _recordedSequenceCallback = function() { - self.recording = false; - callback.apply(self, arguments); - }; - }; - - Mousetrap.prototype.handleKey = function() { - var self = this; - _handleKey.apply(self, arguments); - }; - - Mousetrap.init(); - -})(Mousetrap); \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/mousetrap/1.6.0/mousetrap.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/mousetrap/1.6.0/mousetrap.js deleted file mode 100644 index 74e7e72a..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/mousetrap/1.6.0/mousetrap.js +++ /dev/null @@ -1,1038 +0,0 @@ -/*global define:false */ -/** - * Copyright 2016 Craig Campbell - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Mousetrap is a simple keyboard shortcut library for Javascript with - * no external dependencies - * - * @version 1.6.0 - * @url craig.is/killing/mice - */ -(function(window, document, undefined) { - - // Check if mousetrap is used inside browser, if not, return - if (!window) { - return; - } - - /** - * mapping of special keycodes to their corresponding keys - * - * everything in this dictionary cannot use keypress events - * so it has to be here to map to the correct keycodes for - * keyup/keydown events - * - * @type {Object} - */ - var _MAP = { - 8: 'backspace', - 9: 'tab', - 13: 'enter', - 16: 'shift', - 17: 'ctrl', - 18: 'alt', - 20: 'capslock', - 27: 'esc', - 32: 'space', - 33: 'pageup', - 34: 'pagedown', - 35: 'end', - 36: 'home', - 37: 'left', - 38: 'up', - 39: 'right', - 40: 'down', - 45: 'ins', - 46: 'del', - 91: 'meta', - 93: 'meta', - 224: 'meta' - }; - - /** - * mapping for special characters so they can support - * - * this dictionary is only used incase you want to bind a - * keyup or keydown event to one of these keys - * - * @type {Object} - */ - var _KEYCODE_MAP = { - 106: '*', - 107: '+', - 109: '-', - 110: '.', - 111 : '/', - 186: ';', - 187: '=', - 188: ',', - 189: '-', - 190: '.', - 191: '/', - 192: '`', - 219: '[', - 220: '\\', - 221: ']', - 222: '\'' - }; - - /** - * this is a mapping of keys that require shift on a US keypad - * back to the non shift equivelents - * - * this is so you can use keyup events with these keys - * - * note that this will only work reliably on US keyboards - * - * @type {Object} - */ - var _SHIFT_MAP = { - '~': '`', - '!': '1', - '@': '2', - '#': '3', - '$': '4', - '%': '5', - '^': '6', - '&': '7', - '*': '8', - '(': '9', - ')': '0', - '_': '-', - '+': '=', - ':': ';', - '\"': '\'', - '<': ',', - '>': '.', - '?': '/', - '|': '\\' - }; - - /** - * this is a list of special strings you can use to map - * to modifier keys when you specify your keyboard shortcuts - * - * @type {Object} - */ - var _SPECIAL_ALIASES = { - 'option': 'alt', - 'command': 'meta', - 'return': 'enter', - 'escape': 'esc', - 'plus': '+', - 'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl' - }; - - /** - * variable to store the flipped version of _MAP from above - * needed to check if we should use keypress or not when no action - * is specified - * - * @type {Object|undefined} - */ - var _REVERSE_MAP; - - /** - * loop through the f keys, f1 to f19 and add them to the map - * programatically - */ - for (var i = 1; i < 20; ++i) { - _MAP[111 + i] = 'f' + i; - } - - /** - * loop through to map numbers on the numeric keypad - */ - for (i = 0; i <= 9; ++i) { - _MAP[i + 96] = i; - } - - /** - * cross browser add event method - * - * @param {Element|HTMLDocument} object - * @param {string} type - * @param {Function} callback - * @returns void - */ - function _addEvent(object, type, callback) { - if (object.addEventListener) { - object.addEventListener(type, callback, false); - return; - } - - object.attachEvent('on' + type, callback); - } - - /** - * takes the event and returns the key character - * - * @param {Event} e - * @return {string} - */ - function _characterFromEvent(e) { - - // for keypress events we should return the character as is - if (e.type == 'keypress') { - var character = String.fromCharCode(e.which); - - // if the shift key is not pressed then it is safe to assume - // that we want the character to be lowercase. this means if - // you accidentally have caps lock on then your key bindings - // will continue to work - // - // the only side effect that might not be desired is if you - // bind something like 'A' cause you want to trigger an - // event when capital A is pressed caps lock will no longer - // trigger the event. shift+a will though. - if (!e.shiftKey) { - character = character.toLowerCase(); - } - - return character; - } - - // for non keypress events the special maps are needed - if (_MAP[e.which]) { - return _MAP[e.which]; - } - - if (_KEYCODE_MAP[e.which]) { - return _KEYCODE_MAP[e.which]; - } - - // if it is not in the special map - - // with keydown and keyup events the character seems to always - // come in as an uppercase character whether you are pressing shift - // or not. we should make sure it is always lowercase for comparisons - return String.fromCharCode(e.which).toLowerCase(); - } - - /** - * checks if two arrays are equal - * - * @param {Array} modifiers1 - * @param {Array} modifiers2 - * @returns {boolean} - */ - function _modifiersMatch(modifiers1, modifiers2) { - return modifiers1.sort().join(',') === modifiers2.sort().join(','); - } - - /** - * takes a key event and figures out what the modifiers are - * - * @param {Event} e - * @returns {Array} - */ - function _eventModifiers(e) { - var modifiers = []; - - if (e.shiftKey) { - modifiers.push('shift'); - } - - if (e.altKey) { - modifiers.push('alt'); - } - - if (e.ctrlKey) { - modifiers.push('ctrl'); - } - - if (e.metaKey) { - modifiers.push('meta'); - } - - return modifiers; - } - - /** - * prevents default for this event - * - * @param {Event} e - * @returns void - */ - function _preventDefault(e) { - if (e.preventDefault) { - e.preventDefault(); - return; - } - - e.returnValue = false; - } - - /** - * stops propogation for this event - * - * @param {Event} e - * @returns void - */ - function _stopPropagation(e) { - if (e.stopPropagation) { - e.stopPropagation(); - return; - } - - e.cancelBubble = true; - } - - /** - * determines if the keycode specified is a modifier key or not - * - * @param {string} key - * @returns {boolean} - */ - function _isModifier(key) { - return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta'; - } - - /** - * reverses the map lookup so that we can look for specific keys - * to see what can and can't use keypress - * - * @return {Object} - */ - function _getReverseMap() { - if (!_REVERSE_MAP) { - _REVERSE_MAP = {}; - for (var key in _MAP) { - - // pull out the numeric keypad from here cause keypress should - // be able to detect the keys from the character - if (key > 95 && key < 112) { - continue; - } - - if (_MAP.hasOwnProperty(key)) { - _REVERSE_MAP[_MAP[key]] = key; - } - } - } - return _REVERSE_MAP; - } - - /** - * picks the best action based on the key combination - * - * @param {string} key - character for key - * @param {Array} modifiers - * @param {string=} action passed in - */ - function _pickBestAction(key, modifiers, action) { - - // if no action was picked in we should try to pick the one - // that we think would work best for this key - if (!action) { - action = _getReverseMap()[key] ? 'keydown' : 'keypress'; - } - - // modifier keys don't work as expected with keypress, - // switch to keydown - if (action == 'keypress' && modifiers.length) { - action = 'keydown'; - } - - return action; - } - - /** - * Converts from a string key combination to an array - * - * @param {string} combination like "command+shift+l" - * @return {Array} - */ - function _keysFromString(combination) { - if (combination === '+') { - return ['+']; - } - - combination = combination.replace(/\+{2}/g, '+plus'); - return combination.split('+'); - } - - /** - * Gets info for a specific key combination - * - * @param {string} combination key combination ("command+s" or "a" or "*") - * @param {string=} action - * @returns {Object} - */ - function _getKeyInfo(combination, action) { - var keys; - var key; - var i; - var modifiers = []; - - // take the keys from this pattern and figure out what the actual - // pattern is all about - keys = _keysFromString(combination); - - for (i = 0; i < keys.length; ++i) { - key = keys[i]; - - // normalize key names - if (_SPECIAL_ALIASES[key]) { - key = _SPECIAL_ALIASES[key]; - } - - // if this is not a keypress event then we should - // be smart about using shift keys - // this will only work for US keyboards however - if (action && action != 'keypress' && _SHIFT_MAP[key]) { - key = _SHIFT_MAP[key]; - modifiers.push('shift'); - } - - // if this key is a modifier then add it to the list of modifiers - if (_isModifier(key)) { - modifiers.push(key); - } - } - - // depending on what the key combination is - // we will try to pick the best event for it - action = _pickBestAction(key, modifiers, action); - - return { - key: key, - modifiers: modifiers, - action: action - }; - } - - function _belongsTo(element, ancestor) { - if (element === null || element === document) { - return false; - } - - if (element === ancestor) { - return true; - } - - return _belongsTo(element.parentNode, ancestor); - } - - function Mousetrap(targetElement) { - var self = this; - - targetElement = targetElement || document; - - if (!(self instanceof Mousetrap)) { - return new Mousetrap(targetElement); - } - - /** - * element to attach key events to - * - * @type {Element} - */ - self.target = targetElement; - - /** - * a list of all the callbacks setup via Mousetrap.bind() - * - * @type {Object} - */ - self._callbacks = {}; - - /** - * direct map of string combinations to callbacks used for trigger() - * - * @type {Object} - */ - self._directMap = {}; - - /** - * keeps track of what level each sequence is at since multiple - * sequences can start out with the same sequence - * - * @type {Object} - */ - var _sequenceLevels = {}; - - /** - * variable to store the setTimeout call - * - * @type {null|number} - */ - var _resetTimer; - - /** - * temporary state where we will ignore the next keyup - * - * @type {boolean|string} - */ - var _ignoreNextKeyup = false; - - /** - * temporary state where we will ignore the next keypress - * - * @type {boolean} - */ - var _ignoreNextKeypress = false; - - /** - * are we currently inside of a sequence? - * type of action ("keyup" or "keydown" or "keypress") or false - * - * @type {boolean|string} - */ - var _nextExpectedAction = false; - - /** - * resets all sequence counters except for the ones passed in - * - * @param {Object} doNotReset - * @returns void - */ - function _resetSequences(doNotReset) { - doNotReset = doNotReset || {}; - - var activeSequences = false, - key; - - for (key in _sequenceLevels) { - if (doNotReset[key]) { - activeSequences = true; - continue; - } - _sequenceLevels[key] = 0; - } - - if (!activeSequences) { - _nextExpectedAction = false; - } - } - - /** - * finds all callbacks that match based on the keycode, modifiers, - * and action - * - * @param {string} character - * @param {Array} modifiers - * @param {Event|Object} e - * @param {string=} sequenceName - name of the sequence we are looking for - * @param {string=} combination - * @param {number=} level - * @returns {Array} - */ - function _getMatches(character, modifiers, e, sequenceName, combination, level) { - var i; - var callback; - var matches = []; - var action = e.type; - - // if there are no events related to this keycode - if (!self._callbacks[character]) { - return []; - } - - // if a modifier key is coming up on its own we should allow it - if (action == 'keyup' && _isModifier(character)) { - modifiers = [character]; - } - - // loop through all callbacks for the key that was pressed - // and see if any of them match - for (i = 0; i < self._callbacks[character].length; ++i) { - callback = self._callbacks[character][i]; - - // if a sequence name is not specified, but this is a sequence at - // the wrong level then move onto the next match - if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) { - continue; - } - - // if the action we are looking for doesn't match the action we got - // then we should keep going - if (action != callback.action) { - continue; - } - - // if this is a keypress event and the meta key and control key - // are not pressed that means that we need to only look at the - // character, otherwise check the modifiers as well - // - // chrome will not fire a keypress if meta or control is down - // safari will fire a keypress if meta or meta+shift is down - // firefox will fire a keypress if meta or control is down - if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) { - - // when you bind a combination or sequence a second time it - // should overwrite the first one. if a sequenceName or - // combination is specified in this call it does just that - // - // @todo make deleting its own method? - var deleteCombo = !sequenceName && callback.combo == combination; - var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level; - if (deleteCombo || deleteSequence) { - self._callbacks[character].splice(i, 1); - } - - matches.push(callback); - } - } - - return matches; - } - - /** - * actually calls the callback function - * - * if your callback function returns false this will use the jquery - * convention - prevent default and stop propogation on the event - * - * @param {Function} callback - * @param {Event} e - * @returns void - */ - function _fireCallback(callback, e, combo, sequence) { - - // if this event should not happen stop here - if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) { - return; - } - - if (callback(e, combo) === false) { - _preventDefault(e); - _stopPropagation(e); - } - } - - /** - * handles a character key event - * - * @param {string} character - * @param {Array} modifiers - * @param {Event} e - * @returns void - */ - self._handleKey = function(character, modifiers, e) { - var callbacks = _getMatches(character, modifiers, e); - var i; - var doNotReset = {}; - var maxLevel = 0; - var processedSequenceCallback = false; - - // Calculate the maxLevel for sequences so we can only execute the longest callback sequence - for (i = 0; i < callbacks.length; ++i) { - if (callbacks[i].seq) { - maxLevel = Math.max(maxLevel, callbacks[i].level); - } - } - - // loop through matching callbacks for this key event - for (i = 0; i < callbacks.length; ++i) { - - // fire for all sequence callbacks - // this is because if for example you have multiple sequences - // bound such as "g i" and "g t" they both need to fire the - // callback for matching g cause otherwise you can only ever - // match the first one - if (callbacks[i].seq) { - - // only fire callbacks for the maxLevel to prevent - // subsequences from also firing - // - // for example 'a option b' should not cause 'option b' to fire - // even though 'option b' is part of the other sequence - // - // any sequences that do not match here will be discarded - // below by the _resetSequences call - if (callbacks[i].level != maxLevel) { - continue; - } - - processedSequenceCallback = true; - - // keep a list of which sequences were matches for later - doNotReset[callbacks[i].seq] = 1; - _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq); - continue; - } - - // if there were no sequence matches but we are still here - // that means this is a regular match so we should fire that - if (!processedSequenceCallback) { - _fireCallback(callbacks[i].callback, e, callbacks[i].combo); - } - } - - // if the key you pressed matches the type of sequence without - // being a modifier (ie "keyup" or "keypress") then we should - // reset all sequences that were not matched by this event - // - // this is so, for example, if you have the sequence "h a t" and you - // type "h e a r t" it does not match. in this case the "e" will - // cause the sequence to reset - // - // modifier keys are ignored because you can have a sequence - // that contains modifiers such as "enter ctrl+space" and in most - // cases the modifier key will be pressed before the next key - // - // also if you have a sequence such as "ctrl+b a" then pressing the - // "b" key will trigger a "keypress" and a "keydown" - // - // the "keydown" is expected when there is a modifier, but the - // "keypress" ends up matching the _nextExpectedAction since it occurs - // after and that causes the sequence to reset - // - // we ignore keypresses in a sequence that directly follow a keydown - // for the same character - var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress; - if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) { - _resetSequences(doNotReset); - } - - _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown'; - }; - - /** - * handles a keydown event - * - * @param {Event} e - * @returns void - */ - function _handleKeyEvent(e) { - - // normalize e.which for key events - // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion - if (typeof e.which !== 'number') { - e.which = e.keyCode; - } - - var character = _characterFromEvent(e); - - // no character found then stop - if (!character) { - return; - } - - // need to use === for the character check because the character can be 0 - if (e.type == 'keyup' && _ignoreNextKeyup === character) { - _ignoreNextKeyup = false; - return; - } - - self.handleKey(character, _eventModifiers(e), e); - } - - /** - * called to set a 1 second timeout on the specified sequence - * - * this is so after each key press in the sequence you have 1 second - * to press the next key before you have to start over - * - * @returns void - */ - function _resetSequenceTimer() { - clearTimeout(_resetTimer); - _resetTimer = setTimeout(_resetSequences, 1000); - } - - /** - * binds a key sequence to an event - * - * @param {string} combo - combo specified in bind call - * @param {Array} keys - * @param {Function} callback - * @param {string=} action - * @returns void - */ - function _bindSequence(combo, keys, callback, action) { - - // start off by adding a sequence level record for this combination - // and setting the level to 0 - _sequenceLevels[combo] = 0; - - /** - * callback to increase the sequence level for this sequence and reset - * all other sequences that were active - * - * @param {string} nextAction - * @returns {Function} - */ - function _increaseSequence(nextAction) { - return function() { - _nextExpectedAction = nextAction; - ++_sequenceLevels[combo]; - _resetSequenceTimer(); - }; - } - - /** - * wraps the specified callback inside of another function in order - * to reset all sequence counters as soon as this sequence is done - * - * @param {Event} e - * @returns void - */ - function _callbackAndReset(e) { - _fireCallback(callback, e, combo); - - // we should ignore the next key up if the action is key down - // or keypress. this is so if you finish a sequence and - // release the key the final key will not trigger a keyup - if (action !== 'keyup') { - _ignoreNextKeyup = _characterFromEvent(e); - } - - // weird race condition if a sequence ends with the key - // another sequence begins with - setTimeout(_resetSequences, 10); - } - - // loop through keys one at a time and bind the appropriate callback - // function. for any key leading up to the final one it should - // increase the sequence. after the final, it should reset all sequences - // - // if an action is specified in the original bind call then that will - // be used throughout. otherwise we will pass the action that the - // next key in the sequence should match. this allows a sequence - // to mix and match keypress and keydown events depending on which - // ones are better suited to the key provided - for (var i = 0; i < keys.length; ++i) { - var isFinal = i + 1 === keys.length; - var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action); - _bindSingle(keys[i], wrappedCallback, action, combo, i); - } - } - - /** - * binds a single keyboard combination - * - * @param {string} combination - * @param {Function} callback - * @param {string=} action - * @param {string=} sequenceName - name of sequence if part of sequence - * @param {number=} level - what part of the sequence the command is - * @returns void - */ - function _bindSingle(combination, callback, action, sequenceName, level) { - - // store a direct mapped reference for use with Mousetrap.trigger - self._directMap[combination + ':' + action] = callback; - - // make sure multiple spaces in a row become a single space - combination = combination.replace(/\s+/g, ' '); - - var sequence = combination.split(' '); - var info; - - // if this pattern is a sequence of keys then run through this method - // to reprocess each pattern one key at a time - if (sequence.length > 1) { - _bindSequence(combination, sequence, callback, action); - return; - } - - info = _getKeyInfo(combination, action); - - // make sure to initialize array if this is the first time - // a callback is added for this key - self._callbacks[info.key] = self._callbacks[info.key] || []; - - // remove an existing match if there is one - _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level); - - // add this call back to the array - // if it is a sequence put it at the beginning - // if not put it at the end - // - // this is important because the way these are processed expects - // the sequence ones to come first - self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({ - callback: callback, - modifiers: info.modifiers, - action: info.action, - seq: sequenceName, - level: level, - combo: combination - }); - } - - /** - * binds multiple combinations to the same callback - * - * @param {Array} combinations - * @param {Function} callback - * @param {string|undefined} action - * @returns void - */ - self._bindMultiple = function(combinations, callback, action) { - for (var i = 0; i < combinations.length; ++i) { - _bindSingle(combinations[i], callback, action); - } - }; - - // start! - _addEvent(targetElement, 'keypress', _handleKeyEvent); - _addEvent(targetElement, 'keydown', _handleKeyEvent); - _addEvent(targetElement, 'keyup', _handleKeyEvent); - } - - /** - * binds an event to mousetrap - * - * can be a single key, a combination of keys separated with +, - * an array of keys, or a sequence of keys separated by spaces - * - * be sure to list the modifier keys first to make sure that the - * correct key ends up getting bound (the last key in the pattern) - * - * @param {string|Array} keys - * @param {Function} callback - * @param {string=} action - 'keypress', 'keydown', or 'keyup' - * @returns void - */ - Mousetrap.prototype.bind = function(keys, callback, action) { - var self = this; - keys = keys instanceof Array ? keys : [keys]; - self._bindMultiple.call(self, keys, callback, action); - return self; - }; - - /** - * unbinds an event to mousetrap - * - * the unbinding sets the callback function of the specified key combo - * to an empty function and deletes the corresponding key in the - * _directMap dict. - * - * TODO: actually remove this from the _callbacks dictionary instead - * of binding an empty function - * - * the keycombo+action has to be exactly the same as - * it was defined in the bind method - * - * @param {string|Array} keys - * @param {string} action - * @returns void - */ - Mousetrap.prototype.unbind = function(keys, action) { - var self = this; - return self.bind.call(self, keys, function() {}, action); - }; - - /** - * triggers an event that has already been bound - * - * @param {string} keys - * @param {string=} action - * @returns void - */ - Mousetrap.prototype.trigger = function(keys, action) { - var self = this; - if (self._directMap[keys + ':' + action]) { - self._directMap[keys + ':' + action]({}, keys); - } - return self; - }; - - /** - * resets the library back to its initial state. this is useful - * if you want to clear out the current keyboard shortcuts and bind - * new ones - for example if you switch to another page - * - * @returns void - */ - Mousetrap.prototype.reset = function() { - var self = this; - self._callbacks = {}; - self._directMap = {}; - return self; - }; - - /** - * should we stop this event before firing off callbacks - * - * @param {Event} e - * @param {Element} element - * @return {boolean} - */ - Mousetrap.prototype.stopCallback = function(e, element) { - var self = this; - - // if the element has the class "mousetrap" then no need to stop - if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) { - return false; - } - - if (_belongsTo(element, self.target)) { - return false; - } - - // stop for input, select, and textarea - return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable; - }; - - /** - * exposes _handleKey publicly so it can be overwritten by extensions - */ - Mousetrap.prototype.handleKey = function() { - var self = this; - return self._handleKey.apply(self, arguments); - }; - - /** - * allow custom key mappings - */ - Mousetrap.addKeycodes = function(object) { - for (var key in object) { - if (object.hasOwnProperty(key)) { - _MAP[key] = object[key]; - } - } - _REVERSE_MAP = null; - }; - - /** - * Init the global mousetrap functions - * - * This method is needed to allow the global mousetrap functions to work - * now that mousetrap is a constructor function. - */ - Mousetrap.init = function() { - var documentMousetrap = Mousetrap(document); - for (var method in documentMousetrap) { - if (method.charAt(0) !== '_') { - Mousetrap[method] = (function(method) { - return function() { - return documentMousetrap[method].apply(documentMousetrap, arguments); - }; - } (method)); - } - } - }; - - Mousetrap.init(); - - // expose mousetrap to the global object - window.Mousetrap = Mousetrap; - - // expose as a common js module - if (typeof module !== 'undefined' && module.exports) { - module.exports = Mousetrap; - } - - // expose mousetrap as an AMD module - if (typeof define === 'function' && define.amd) { - define(function() { - return Mousetrap; - }); - } -}) (typeof window !== 'undefined' ? window : null, typeof window !== 'undefined' ? document : null); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/mousetrap/1.6.0/mousetrap.min.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/mousetrap/1.6.0/mousetrap.min.js deleted file mode 100644 index 01289500..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/mousetrap/1.6.0/mousetrap.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/* mousetrap v1.6.0 craig.is/killing/mice */ -(function(r,t,g){function u(a,b,h){a.addEventListener?a.addEventListener(b,h,!1):a.attachEvent("on"+b,h)}function y(a){if("keypress"==a.type){var b=String.fromCharCode(a.which);a.shiftKey||(b=b.toLowerCase());return b}return k[a.which]?k[a.which]:p[a.which]?p[a.which]:String.fromCharCode(a.which).toLowerCase()}function D(a){var b=[];a.shiftKey&&b.push("shift");a.altKey&&b.push("alt");a.ctrlKey&&b.push("ctrl");a.metaKey&&b.push("meta");return b}function v(a){return"shift"==a||"ctrl"==a||"alt"==a|| -"meta"==a}function z(a,b){var h,c,e,g=[];h=a;"+"===h?h=["+"]:(h=h.replace(/\+{2}/g,"+plus"),h=h.split("+"));for(e=0;e l||k.hasOwnProperty(l)&&(n[k[l]]=l)}e=n[h]?"keydown":"keypress"}"keypress"==e&&g.length&&(e="keydown");return{key:c,modifiers:g,action:e}}function C(a,b){return null===a||a===t?!1:a===b?!0:C(a.parentNode,b)}function c(a){function b(a){a= -a||{};var b=!1,m;for(m in n)a[m]?b=!0:n[m]=0;b||(w=!1)}function h(a,b,m,f,c,h){var g,e,k=[],l=m.type;if(!d._callbacks[a])return[];"keyup"==l&&v(a)&&(b=[a]);for(g=0;g ":".","?":"/","|":"\\"},A={option:"alt",command:"meta","return":"enter", -escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},n;for(g=1;20>g;++g)k[111+g]="f"+g;for(g=0;9>=g;++g)k[g+96]=g;c.prototype.bind=function(a,b,c){a=a instanceof Array?a:[a];this._bindMultiple.call(this,a,b,c);return this};c.prototype.unbind=function(a,b){return this.bind.call(this,a,function(){},b)};c.prototype.trigger=function(a,b){if(this._directMap[a+":"+b])this._directMap[a+":"+b]({},a);return this};c.prototype.reset=function(){this._callbacks={};this._directMap= -{};return this};c.prototype.stopCallback=function(a,b){return-1<(" "+b.className+" ").indexOf(" mousetrap ")||C(b,this.target)?!1:"INPUT"==b.tagName||"SELECT"==b.tagName||"TEXTAREA"==b.tagName||b.isContentEditable};c.prototype.handleKey=function(){return this._handleKey.apply(this,arguments)};c.addKeycodes=function(a){for(var b in a)a.hasOwnProperty(b)&&(k[b]=a[b]);n=null};c.init=function(){var a=c(t),b;for(b in a)"_"!==b.charAt(0)&&(c[b]=function(b){return function(){return a[b].apply(a,arguments)}}(b))}; -c.init();r.Mousetrap=c;"undefined"!==typeof module&&module.exports&&(module.exports=c);"function"===typeof define&&define.amd&&define(function(){return c})}})("undefined"!==typeof window?window:null,"undefined"!==typeof window?document:null); diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/path_parser.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/path_parser.js deleted file mode 100644 index 0711437f..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/path_parser.js +++ /dev/null @@ -1,30 +0,0 @@ -/***** -* -* The contents of this file were written by Kevin Lindsey -* copyright 2002-2003 Kevin Lindsey -* -* This file was compacted by jscompact -* A Perl utility written by Kevin Lindsey (kevin@kevlindev.com) -* -*****/ - -Svg.VERSION=1.0; -Svg.NAMESPACE="http://www.w3.org/2000/svg"; -function Svg(){} -PathParser.PARAMCOUNT={A:7,C:6,H:1,L:2,M:2,Q:4,S:4,T:2,V:1,Z:0}; -PathParser.METHODNAME={A:"arcAbs",a:"arcRel",C:"curvetoCubicAbs",c:"curvetoCubicRel",H:"linetoHorizontalAbs",h:"linetoHorizontalRel",L:"linetoAbs",l:"linetoRel",M:"movetoAbs",m:"movetoRel",Q:"curvetoQuadraticAbs",q:"curvetoQuadraticRel",S:"curvetoCubicSmoothAbs",s:"curvetoCubicSmoothRel",T:"curvetoQuadraticSmoothAbs",t:"curvetoQuadraticSmoothRel",V:"linetoVerticalAbs",v:"linetoVerticalRel",Z:"closePath",z:"closePath"} -function PathParser(){this._lexer=new PathLexer();this._handler=null;} -PathParser.prototype.parsePath=function(path){if(path==null||path.namespaceURI!=Svg.NAMESPACE||path.localName!="path")throw new Error("PathParser.parsePath: The first parameter must be an SVG path element");this.parseData(path.getAttributeNS(null,"d"));}; -PathParser.prototype.parseData=function(pathData){if(typeof(pathData)!="string")throw new Error("PathParser.parseData: The first parameter must be a string");if(this._handler!=null&&this._handler.beginParse!=null)this._handler.beginParse();var lexer=this._lexer;lexer.setPathData(pathData);var mode="BOP";var token=lexer.getNextToken();while(!token.typeis(PathToken.EOD)){var param_count;var params=new Array();switch(token.type){case PathToken.COMMAND:if(mode=="BOP"&&token.text!="M"&&token.text!="m")throw new Error("PathParser.parseData: a path must begin with a moveto command");mode=token.text;param_count=PathParser.PARAMCOUNT[token.text.toUpperCase()];token=lexer.getNextToken();break;case PathToken.NUMBER:break;default:throw new Error("PathParser.parseData: unrecognized token type: "+token.type);}for(var i=0;i 0){this.init(type,text);}} -PathToken.prototype.init=function(type,text){this.type=type;this.text=text;}; -PathToken.prototype.typeis=function(type){return this.type==type;} \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/prototype-1.6.1.js b/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/prototype-1.6.1.js deleted file mode 100644 index d66c2afa..00000000 --- a/io.sc.platform.lcdp.frontend/public/flowable/modeler/editor-app/libs/prototype-1.6.1.js +++ /dev/null @@ -1,4874 +0,0 @@ -/* Prototype JavaScript framework, version 1.6.1 - * (c) 2005-2009 Sam Stephenson - * - * Prototype is freely distributable under the terms of an MIT-style license. - * For details, see the Prototype web site: http://www.prototypejs.org/ - * - *--------------------------------------------------------------------------*/ - -var Prototype = { - Version: '1.6.1', - - Browser: (function(){ - var ua = navigator.userAgent; - var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; - return { - IE: !!window.attachEvent && !isOpera, - Opera: isOpera, - WebKit: ua.indexOf('AppleWebKit/') > -1, - Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, - MobileSafari: /Apple.*Mobile.*Safari/.test(ua) - } - })(), - - BrowserFeatures: { - XPath: !!document.evaluate, - SelectorsAPI: !!document.querySelector, - ElementExtensions: (function() { - var constructor = window.Element || window.HTMLElement; - return !!(constructor && constructor.prototype); - })(), - SpecificElementExtensions: (function() { - if (typeof window.HTMLDivElement !== 'undefined') - return true; - - var div = document.createElement('div'); - var form = document.createElement('form'); - var isSupported = false; - - if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { - isSupported = true; - } - - div = form = null; - - return isSupported; - })() - }, - - ScriptFragment: ' - - -- -- - {{alerts.current.message}} - --- {{alerts.queue.length + 1}} ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -